@adins/ucsearch 3.5.2-canary.0 → 3.5.2
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.
|
@@ -24,13 +24,12 @@ import * as i4 from "@angular/common";
|
|
|
24
24
|
import * as i5 from "./services/export-file.service";
|
|
25
25
|
import * as i6 from "@angular/router";
|
|
26
26
|
import * as i7 from "@adins/fe-core";
|
|
27
|
-
import * as i8 from "@adins/uc-
|
|
28
|
-
import * as i9 from "@
|
|
27
|
+
import * as i8 from "@adins/uc-show-errors";
|
|
28
|
+
import * as i9 from "@ngx-translate/core";
|
|
29
29
|
import * as i10 from "@angular/forms";
|
|
30
|
-
import * as i11 from "@
|
|
31
|
-
import * as i12 from "
|
|
32
|
-
import * as i13 from "
|
|
33
|
-
import * as i14 from "./pipe/text-search.pipe";
|
|
30
|
+
import * as i11 from "@adins/uc-directive-upper-case";
|
|
31
|
+
import * as i12 from "ngx-currency";
|
|
32
|
+
import * as i13 from "./pipe/text-search.pipe";
|
|
34
33
|
export class UCSearchComponent {
|
|
35
34
|
constructor(http, _renderer2, _document, toastr, cookieService, datePipe, elemRef, exportFileService, route, ngxRouter) {
|
|
36
35
|
this.http = http;
|
|
@@ -1148,7 +1147,7 @@ export class UCSearchComponent {
|
|
|
1148
1147
|
}
|
|
1149
1148
|
}
|
|
1150
1149
|
/** @nocollapse */ UCSearchComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: UCSearchComponent, deps: [{ token: i1.HttpClient }, { token: i0.Renderer2 }, { token: DOCUMENT }, { token: i2.ToastrService }, { token: i3.CookieService }, { token: i4.DatePipe }, { token: i0.ElementRef }, { token: i5.ExportFileService }, { token: i6.ActivatedRoute }, { token: i7.NgxRouterService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1151
|
-
/** @nocollapse */ UCSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: UCSearchComponent, selector: "lib-UCSearch", inputs: { searchInput: "searchInput", pageSize: "pageSize", isReport: "isReport" }, outputs: { result: "result", genRpt: "genRpt", reqGetAllData: "reqGetAllData" }, providers: [DatePipe, ExportFileService], viewQueries: [{ propertyName: "content", first: true, predicate: ["enjiForm"], descendants: true }, { propertyName: "myForm", first: true, predicate: ["formIdSearch"], descendants: true }], ngImport: i0, template: "<div>\r\n<!-- Basic form layout section start -->\r\n<lib-ucSubsection [hidden]=\"!searchInput.IsSubsection\" [id]=\"searchInput.searchId+'id'\"\r\n [title]=\"configuration?.sectionTitle || 'Paging'\" [panel]=\"searchInput.searchId\">\r\n</lib-ucSubsection>\r\n\r\n<!-- <div [id]=\"searchInput.searchId\"> -->\r\n <!-- <div class=\"row text-left\">\r\n <div class=\"col-md-12\">\r\n <div class=\"\"> -->\r\n <!-- <div class=\"pl-3 mb-2 mt-2\" *ngIf=\"configuration?.title != undefined && configuration?.title != ''\">\r\n <h4 class=\"card-title ucSearch-title\" translate>{{configuration.title}}</h4>\r\n </div> -->\r\n <div class=\"card-body\" [id]=\"searchInput.searchId\">\r\n <div class=\"px-3\">\r\n <form class=\"form form-horizontal\" id=\"formSearch\" #formIdSearch #enjiForm=\"ngForm\"\r\n (ngSubmit)=\"enjiForm.valid && searchClick()\">\r\n <div class=\"form-body\">\r\n <!-- <h4 class=\"form-section font-weight-bold\">\r\n <div (click)=\"changeState()\" class=\"btn no-padding cursor-pointer flip\">\r\n <i class=\"fa\" style=\"font-size: 15px; margin: 0px 0px 5px -15px;\"\r\n [ngClass]=\"isHidden ? 'fa-chevron-right' : 'fa-chevron-down'\"></i>\r\n </div>\r\n <span\r\n *ngIf=\"configuration?.sectionTitle != undefined && configuration?.sectionTitle != ''; then inputSectionTitle else defaultSectionTitle\"></span>\r\n <ng-template #inputSectionTitle>\r\n {{configuration?.sectionTitle}}\r\n </ng-template>\r\n <ng-template #defaultSectionTitle>\r\n Paging\r\n </ng-template>\r\n </h4> -->\r\n <!-- Ini Digunakan untuk Generate Dynamic Component -->\r\n <!-- [hidden]=\"isHidden\" -->\r\n <!-- <div class=\"panel-active\" [@changeDivSize]=currentState> -->\r\n <div class=\"row\">\r\n <div class=\"col-md-3 form-group\" *ngFor=\"let question of configuration?.component; let i = index\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <label class=\"col-md-12 no-padding search-label\" for=\"{{question.id}}\"\r\n [ngClass]=\"{'adins-required-label': (question.isRequired || (question?.ddlType != undefined && question.ddlType == 'one'))}\"\r\n translate>{{question.label}}</label>\r\n <div class=\"col-md-12 no-padding\">\r\n <div *ngIf=\"question.type=='textbox'\">\r\n <input type=\"text\" id=\"{{question.id}}\" class=\"form-control search-input\"\r\n [IsUpperCase]=\"question.isUppercase === undefined ? true : question.isUppercase\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\" [placeholder]=\"question.placeholder != undefined ? question.placeholder : ''\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question.type=='textarea'\">\r\n <textarea type=\"text\" id=\"{{question.id}}\" class=\"form-control search-input\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\" value=\"{{question.value}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\"></textarea>\r\n </div>\r\n <div *ngIf=\"question.type=='numeric'\">\r\n <input type=\"number\" id=\"{{question.id}}\" (focus)=\"transformToDecimal($event)\"\r\n (blur)=\"transformToDecimal($event)\" class=\"form-control search-input\" [placeholder]=\"'0'\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name+[i]}}\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-numericpair=\"{{question.numericPair}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name+[i]]?.touched || enjiForm.form.controls[question.name+[i]]?.dirty) && enjiForm.form.controls[question.name+[i]]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question.type=='currency'\">\r\n <div *ngIf=\"question?.isCustom != undefined && question?.isCustom\">\r\n <input type=\"\" id=\"{{question.id}}\" class=\"form-control search-input\"\r\n [required]=\"question.isRequired\" name=\"{{question.name}}\" autocomplete=\"off\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" currencyMask [ngModel]=\"question.value\"\r\n [(ngModel)]=\"question.value\" [ngModelOptions]=\"{standalone: true}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\" (focus)=\"OnFocusCurr($event, question.value)\" (blur)=\"ValidateDefaultValue(question)\"\r\n [options]=\"{ thousands: question.thousands, decimal: question.decimal, align: question.align, allowNegative: question.allowNegative, allowZero: question.allowZero, precision: question.precision, nullable: question.nullable }\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question?.isCustom == undefined || !question?.isCustom\">\r\n <input type=\"text\" id=\"{{question.id}}\" class=\"form-control search-input\"\r\n [required]=\"question.isRequired\" name=\"{{question.name}}\" autocomplete=\"off\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" currencyMask [ngModel]=\"question.value\"\r\n [(ngModel)]=\"question.value\" [ngModelOptions]=\"{standalone: true}\"\r\n attr.label=\"{{question.label}}\" (focus)=\"OnFocusCurr($event, question.value)\" (blur)=\"ValidateDefaultValue(question)\"\r\n [options]=\"{ thousands: ',', decimal: '.', align: 'right', allowNegative: false, allowZero:true, precision: 2, nullable: false }\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n </div>\r\n\r\n <!-- End Hardcode Lookup didalem-->\r\n <div *ngIf=\"question.type=='datepicker'\">\r\n <input type=\"{{question.isTime ? 'datetime-local' : 'date'}}\" id=\"{{question.id}}\"\r\n class=\"form-control search-input btn-lookup\" name=\"{{question.name+[i]}}\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n [readonly]=\"question.readonly\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\"\r\n attr.data-datepickerpair=\"{{question.datepickerPair}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.label=\"{{question.label}}\" min=\"{{question.minDate | date:'yyyy-MM-dd'}}\"\r\n max=\"{{question.maxDate | date:'yyyy-MM-dd'}}\"\r\n (focusout)=\"question.restriction != undefined && checkInputDate(question)\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name+[i]]?.touched || enjiForm.form.controls[question.name+[i]]?.dirty) && enjiForm.form.controls[question.name+[i]]?.invalid }\">\r\n </div>\r\n <div\r\n *ngIf=\"question.type == 'taskDefinitionKey' || question.type == 'processKey' || question.type == 'officeRoleCodes'\">\r\n <select name=\"{{question.name}}\" attr.data-required=\"{{question.isRequired}}\"\r\n [required]=\"question.isRequired\" class=\"form-control search-input\"\r\n attr.query-in=\"{{question.isQueryIn}}\" attr.data-type=\"{{question.datatype}}\"\r\n attr.label=\"{{question.label}}\" [hidden]=\"question?.itemsUrl?.length == 1\"\r\n (change)=\"(question.type == 'taskDefinitionKey' || question.type == 'processKey') ? SetProcessKey(i,question.wfKeyFilter) : SetRoleOfficeCodes(i)\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n <option *ngIf=\"question.ddlType == 'one' && question?.itemsUrl?.length != 1\"\r\n value=\"one\">Select One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && question?.itemsUrl?.length != 1\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of question?.itemsUrl\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n <label *ngIf=\"question?.itemsUrl?.length == 1\">{{question.itemsUrl[0].Value}}</label>\r\n </div>\r\n <div *ngIf=\"question.type=='dropdown'\">\r\n <select name=\"{{question.name}}\" attr.data-required=\"{{question.isRequired}}\"\r\n [(ngModel)]=\"question.value\" [required]=\"question.isRequired\"\r\n class=\"form-control search-input\" attr.query-in=\"{{question.isQueryIn}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.label=\"{{question.label}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n [hidden]=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\"\r\n (change)=\"question.isEvent ? onChangeEvent($event.target.value, question) : ''\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n <option\r\n *ngIf=\"question.ddlType == 'one' && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"one\">\r\n Select One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of !question.isFromURL ? question?.items : question?.itemsUrl\"\r\n value=\"{{!question.isFromURL ? item.key : item.Key}}\">\r\n {{!question.isFromURL ? item.value : item.Value}}\r\n </option>\r\n </select>\r\n <label\r\n *ngIf=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">{{!question.isFromURL\r\n ? question.items[0].value :\r\n question.itemsUrl[0].Value}}</label>\r\n </div>\r\n <div *ngIf=\"question.type=='dropdownSearch'\">\r\n <div class=\"dds-display-item\"\r\n [hidden]=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">\r\n <input type=\"text\" class=\"form-control dds-input\"\r\n name=\"{{'ddsValue'+question.name}}\" [(ngModel)]=\"question.descr\" readonly\r\n (click)=\"question.isListHide = !question.isListHide; question.searchText=''\">\r\n </div>\r\n <label\r\n *ngIf=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">{{question.descr}}</label>\r\n <div class=\"dds-list-container\" [hidden]=\"question.isListHide\">\r\n <input type=\"text\" class=\"form-control search-input\"\r\n name=\"{{'searchText'+question.name}}\" [(ngModel)]=\"question.searchText\"\r\n [placeholder]=\"question.placeholder\">\r\n <div class=\"dds-items-container\">\r\n <select class=\"full-width\" name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" [(ngModel)]=\"question.value\"\r\n [required]=\"question.isRequired\" attr.query-in=\"{{question.isQueryIn}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.label=\"{{question.label}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n (change)=\"question.isEvent ? onChangeEvent($event.target.value, question) : ''\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\"\r\n size=\"{{question?.size == undefined ? question?.size : 10}}\">\r\n <option (click)=\"selectedOption({Key:'one',Value:'Select One'},question)\"\r\n *ngIf=\"question.ddsType == 'one' && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"one\">\r\n Select One</option>\r\n <option (click)=\"selectedOption({Key:'all',Value:'All'},question)\"\r\n *ngIf=\"(question?.ddsType == undefined || question.ddsType == 'all') && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"all\">All</option>\r\n <!-- <option *ngFor=\"let item of question?.items | textSearch : question.searchText; let i=index\" [value]=\"item?.key\" (click)=\"selectedOption(item,question)\">\r\n {{item?.value}}\r\n </option> -->\r\n <option\r\n *ngFor=\"let item of !question.isFromURL ? (question?.items | textSearch : question.searchText) : question?.itemsUrl | textSearch : question.searchText\"\r\n (click)=\"selectedOption(item,question)\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"question.type=='claim'\">\r\n <select name=\"{{'claim'+[i]}}\" class=\"form-control search-input\"\r\n attr.data-type=\"{{'text'}}\" attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n attr.data-name=\"{{'Assignee'}}\" [hidden]=\"ClaimList?.length == 1\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls['claim'+[i]]?.touched || enjiForm.form.controls['claim'+[i]]?.dirty) && enjiForm.form.controls['claim'+[i]]?.invalid }\">\r\n <option *ngIf=\"question.ddlType == 'one' && ClaimList?.length != 1\" value=\"one\">Select\r\n One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && ClaimList?.length != 1\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of ClaimList\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n </div>\r\n <lib-uc-show-errors *ngIf=\"question.type!='datepicker'\"\r\n [control]=\"enjiForm.form.controls[question.name]\" [submit]=\"enjiForm.submitted\">\r\n </lib-uc-show-errors>\r\n <lib-uc-show-errors *ngIf=\"question.type=='datepicker'\"\r\n [control]=\"enjiForm.form.controls[question.name+[i]]\" [submit]=\"enjiForm.submitted\">\r\n </lib-uc-show-errors>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6 form-group\" *ngIf=\"(isReport != undefined && isReport)\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <label class=\"col-md-12 no-padding search-label\" translate>Report Type</label>\r\n <div class=\"col-md-12 no-padding\">\r\n <select name=\"ExportType\" [(ngModel)]=\"ExportType\" class=\"form-control search-input\"\r\n attr.data-type=\"text\">\r\n <option *ngFor=\"let item of ExportTypeList\" [value]=\"item.key\">{{item.value}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 no-padding\">\r\n <div class=\"form-actions right\">\r\n <ng-container class=\"btn-group\" *ngIf=\"exportData == true && isSearch\">\r\n <button type=\"button\"\r\n class=\"btn btn-raised btn-outline-2 mr-1 dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" translate>\r\n <i class=\"fa ft-download button-icon-search\"></i> <span class=\"button-text-search\" translate>Export File</span>\r\n </button>\r\n <div class=\"dropdown-menu\">\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('csv')\">as CSV</a>\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('excel')\">as EXCEL</a>\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('json')\">as JSON</a>\r\n </div>\r\n </ng-container>\r\n <button type=\"button\" (click)=\"reset()\" class=\"btn btn-raised mr-1 btn-link-2\" translate>\r\n <!-- <i class=\"fa fa-times\"></i> -->\r\n <span translate>Reset</span>\r\n </button>\r\n <button *ngIf=\"(isReport == undefined || !isReport)\" type=\"submit\"\r\n class=\"btn btn-raised btn-outline-2\" #UCSearchClick>\r\n <i class=\"fa fa-search button-icon-search\"></i> <span class=\"button-text-search\" translate>Search</span>\r\n </button>\r\n <button *ngIf=\"(isReport != undefined && isReport)\" type=\"button\" (click)=\"GenerateReport(enjiForm)\"\r\n class=\"btn btn-raised btn-outline-2\">\r\n <i class=\"fa ft-download button-icon-search\"></i> <span class=\"button-text-search\" translate>Generate\r\n Report</span>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <!-- </div>\r\n </div>\r\n </div> -->\r\n<!-- </div> -->\r\n</div>\r\n<!-- // Basic form layout section end -->\r\n", styles: [".ucSearch-title{margin:3px}.card-body{margin-top:24px}.form-group{margin-bottom:15px!important}.search-label{color:var(--Black_1, #3A4060);font-size:14px!important}.dds-input{border-radius:7px!important;border:1px solid var(--gray-line, #DFE6E9)!important;background:var(--white-1, #FDFEFF)!important;padding:1.135rem!important;height:calc(1.5rem + 2px)!important;font-size:12px!important}.dds-display-item:after{content:\"\\e929\";font-family:feather;font-size:1rem;display:inline-block;position:absolute;right:5px;top:5px;transform:rotate(90deg)}.dds-list-container{position:absolute;width:100%;z-index:9}.search-input{border-radius:7px!important;border:1px solid var(--gray-line, #DFE6E9)!important;background:var(--white-1, #FDFEFF)!important;width:100%}select.search-input{-webkit-appearance:none;appearance:none;background-image:url(\"data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23246CFE' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e\")!important;background-repeat:no-repeat!important;background-position:right 1rem center!important;background-size:1.4em!important}.btn{border-radius:7px;font-size:14px;padding:.275rem 1rem}.btn-link-2{background:none;border:none;color:var(--blue-primary, #246CFE)!important}.btn-link-2:hover{background:var(--light-grey, #F4F8FB)!important;color:var(--blue-primary-darker, #0010F7)!important}.btn-outline-2{border:1px solid var(--blue-primary, #246CFE)!important;background:var(--white, #FDFEFF)!important;color:var(--blue-primary, #246CFE)!important}.btn-outline-2:hover{color:var(--blue-primary-darker, #0010F7)!important;background:var(--light-grey, #F4F8FB)!important;border:1px solid var(--blue-primary-darker, #0010F7)!important}.button-icon-search{font-size:11px;vertical-align:middle;padding-right:8px}.button-text-search{vertical-align:middle}.dropdown-toggle:after{display:inline-block;margin-left:.5em;vertical-align:middle;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}\n"], components: [{ type: i8.UcSubsectionComponent, selector: "lib-ucSubsection", inputs: ["title", "panel", "id", "legacy"], outputs: ["collapse"] }, { type: i9.UcShowErrorsComponent, selector: "lib-uc-show-errors", inputs: ["control", "submit", "fieldName", "customPattern"] }], directives: [{ type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.UpperCaseDirective, selector: "input[type=text], input", inputs: ["IsUpperCase"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i10.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i13.CurrencyMaskDirective, selector: "[currencyMask]", inputs: ["options"] }, { type: i10.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i10.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i10.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }], pipes: { "date": i4.DatePipe, "textSearch": i14.TextSearchPipe }, animations: [
|
|
1150
|
+
/** @nocollapse */ UCSearchComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: UCSearchComponent, selector: "lib-UCSearch", inputs: { searchInput: "searchInput", pageSize: "pageSize", isReport: "isReport" }, outputs: { result: "result", genRpt: "genRpt", reqGetAllData: "reqGetAllData" }, providers: [DatePipe, ExportFileService], viewQueries: [{ propertyName: "content", first: true, predicate: ["enjiForm"], descendants: true }, { propertyName: "myForm", first: true, predicate: ["formIdSearch"], descendants: true }], ngImport: i0, template: "<!-- Basic form layout section start -->\r\n<section id=\"horizontal-form-layouts\">\r\n <div class=\"row text-left\">\r\n <div class=\"col-md-12\">\r\n <div class=\"card\">\r\n <div class=\"pl-3 mb-2 mt-2\" *ngIf=\"configuration?.title != undefined && configuration?.title != ''\">\r\n <h4 class=\"card-title ucSearch-title\" translate>{{configuration.title}}</h4>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"px-3\">\r\n <form class=\"form form-horizontal\" id=\"formSearch\" #formIdSearch #enjiForm=\"ngForm\"\r\n (ngSubmit)=\"enjiForm.valid && searchClick()\">\r\n <div class=\"form-body\">\r\n <h4 class=\"form-section font-weight-bold\">\r\n <div (click)=\"changeState()\" class=\"btn no-padding cursor-pointer flip\">\r\n <i class=\"fa\" style=\"font-size: 15px; margin: 0px 0px 5px -15px;\"\r\n [ngClass]=\"isHidden ? 'fa-chevron-right' : 'fa-chevron-down'\"></i>\r\n </div>\r\n <span\r\n *ngIf=\"configuration?.sectionTitle != undefined && configuration?.sectionTitle != ''; then inputSectionTitle else defaultSectionTitle\"></span>\r\n <ng-template #inputSectionTitle>\r\n {{configuration?.sectionTitle}}\r\n </ng-template>\r\n <ng-template #defaultSectionTitle>\r\n Paging\r\n </ng-template>\r\n </h4>\r\n <!-- Ini Digunakan untuk Generate Dynamic Component -->\r\n <!-- [hidden]=\"isHidden\" -->\r\n <div class=\"panel-active\" [@changeDivSize]=currentState>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 form-group\" *ngFor=\"let question of configuration?.component; let i = index\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <label class=\"col-md-5 no-padding\" for=\"{{question.id}}\"\r\n [ngClass]=\"{'adins-required-label': (question.isRequired || (question?.ddlType != undefined && question.ddlType == 'one'))}\"\r\n translate>{{question.label}}</label>\r\n <div class=\"col-md-7 no-padding\">\r\n <div *ngIf=\"question.type=='textbox'\">\r\n <input type=\"text\" id=\"{{question.id}}\" class=\"form-control search-form-control\"\r\n [IsUpperCase]=\"question.isUppercase === undefined ? true : question.isUppercase\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question.type=='textarea'\">\r\n <textarea type=\"text\" id=\"{{question.id}}\" class=\"form-control search-form-control\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\" value=\"{{question.value}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\"></textarea>\r\n </div>\r\n <div *ngIf=\"question.type=='numeric'\">\r\n <input type=\"number\" id=\"{{question.id}}\" (focus)=\"transformToDecimal($event)\"\r\n (blur)=\"transformToDecimal($event)\" class=\"form-control search-form-control\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name+[i]}}\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-numericpair=\"{{question.numericPair}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name+[i]]?.touched || enjiForm.form.controls[question.name+[i]]?.dirty) && enjiForm.form.controls[question.name+[i]]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question.type=='currency'\">\r\n <div *ngIf=\"question?.isCustom != undefined && question?.isCustom\">\r\n <input type=\"\" id=\"{{question.id}}\" class=\"form-control search-form-control\"\r\n [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" currencyMask [ngModel]=\"question.value\"\r\n [(ngModel)]=\"question.value\" [ngModelOptions]=\"{standalone: true}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [options]=\"{ thousands: question.thousands, decimal: question.decimal, align: question.align, allowNegative: question.allowNegative, allowZero: question.allowZero, precision: question.precision, nullable: question.nullable }\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question?.isCustom == undefined || !question?.isCustom\">\r\n <input type=\"text\" id=\"{{question.id}}\" class=\"form-control search-form-control\"\r\n [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" currencyMask [ngModel]=\"question.value\"\r\n [(ngModel)]=\"question.value\" [ngModelOptions]=\"{standalone: true}\"\r\n attr.label=\"{{question.label}}\"\r\n [options]=\"{ thousands: ',', decimal: '.', align: 'right', allowNegative: false, allowZero:true, precision: 2, nullable: false }\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n </div>\r\n\r\n <!-- End Hardcode Lookup didalem-->\r\n <div *ngIf=\"question.type=='datepicker'\">\r\n <input type=\"{{question.isTime ? 'datetime-local' : 'date'}}\" id=\"{{question.id}}\"\r\n class=\"form-control search-form-control btn-lookup\" name=\"{{question.name+[i]}}\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n [readonly]=\"question.readonly\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\"\r\n attr.data-datepickerpair=\"{{question.datepickerPair}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.label=\"{{question.label}}\" min=\"{{question.minDate | date:'yyyy-MM-dd'}}\"\r\n max=\"{{question.maxDate | date:'yyyy-MM-dd'}}\"\r\n (focusout)=\"question.restriction != undefined && checkInputDate(question)\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name+[i]]?.touched || enjiForm.form.controls[question.name+[i]]?.dirty) && enjiForm.form.controls[question.name+[i]]?.invalid }\">\r\n </div>\r\n <div\r\n *ngIf=\"question.type == 'taskDefinitionKey' || question.type == 'processKey' || question.type == 'officeRoleCodes'\">\r\n <select name=\"{{question.name}}\" attr.data-required=\"{{question.isRequired}}\"\r\n [required]=\"question.isRequired\" class=\"form-control search-form-control\"\r\n attr.query-in=\"{{question.isQueryIn}}\" attr.data-type=\"{{question.datatype}}\"\r\n attr.label=\"{{question.label}}\" [hidden]=\"question?.itemsUrl?.length == 1\"\r\n (change)=\"(question.type == 'taskDefinitionKey' || question.type == 'processKey') ? SetProcessKey(i,question.wfKeyFilter) : SetRoleOfficeCodes(i)\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n <option *ngIf=\"question.ddlType == 'one' && question?.itemsUrl?.length != 1\"\r\n value=\"one\">Select One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && question?.itemsUrl?.length != 1\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of question?.itemsUrl\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n <label *ngIf=\"question?.itemsUrl?.length == 1\">{{question.itemsUrl[0].Value}}</label>\r\n </div>\r\n <div *ngIf=\"question.type=='dropdown'\">\r\n <select name=\"{{question.name}}\" attr.data-required=\"{{question.isRequired}}\"\r\n [(ngModel)]=\"question.value\" [required]=\"question.isRequired\"\r\n class=\"form-control search-form-control\" attr.query-in=\"{{question.isQueryIn}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.label=\"{{question.label}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n [hidden]=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\"\r\n (change)=\"question.isEvent ? onChangeEvent($event.target.value, question) : ''\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n <option\r\n *ngIf=\"question.ddlType == 'one' && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"one\">\r\n Select One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of !question.isFromURL ? question?.items : question?.itemsUrl\"\r\n value=\"{{!question.isFromURL ? item.key : item.Key}}\">\r\n {{!question.isFromURL ? item.value : item.Value}}\r\n </option>\r\n </select>\r\n <label\r\n *ngIf=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">{{!question.isFromURL\r\n ? question.items[0].value :\r\n question.itemsUrl[0].Value}}</label>\r\n </div>\r\n <div *ngIf=\"question.type=='dropdownSearch'\">\r\n <div class=\"dds-display-item\"\r\n [hidden]=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">\r\n <input type=\"text\" class=\"form-control search-form-control dds-input\"\r\n name=\"{{'ddsValue'+question.name}}\" [(ngModel)]=\"question.descr\" readonly\r\n (click)=\"question.isListHide = !question.isListHide; question.searchText=''\">\r\n </div>\r\n <label\r\n *ngIf=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">{{question.descr}}</label>\r\n <div class=\"dds-list-container\" [hidden]=\"question.isListHide\">\r\n <input type=\"text\" class=\"form-control search-form-control\"\r\n name=\"{{'searchText'+question.name}}\" [(ngModel)]=\"question.searchText\"\r\n [placeholder]=\"question.placeholder\">\r\n <div class=\"dds-items-container\">\r\n <select class=\"full-width\" name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" [(ngModel)]=\"question.value\"\r\n [required]=\"question.isRequired\" attr.query-in=\"{{question.isQueryIn}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.label=\"{{question.label}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n (change)=\"question.isEvent ? onChangeEvent($event.target.value, question) : ''\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\"\r\n size=\"{{question?.size == undefined ? question?.size : 10}}\">\r\n <option (click)=\"selectedOption({Key:'one',Value:'Select One'},question)\"\r\n *ngIf=\"question.ddsType == 'one' && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"one\">\r\n Select One</option>\r\n <option (click)=\"selectedOption({Key:'all',Value:'All'},question)\"\r\n *ngIf=\"(question?.ddsType == undefined || question.ddsType == 'all') && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"all\">All</option>\r\n <!-- <option *ngFor=\"let item of question?.items | textSearch : question.searchText; let i=index\" [value]=\"item?.key\" (click)=\"selectedOption(item,question)\">\r\n {{item?.value}}\r\n </option> -->\r\n <option\r\n *ngFor=\"let item of !question.isFromURL ? (question?.items | textSearch : question.searchText) : question?.itemsUrl | textSearch : question.searchText\"\r\n (click)=\"selectedOption(item,question)\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"question.type=='claim'\">\r\n <select name=\"{{'claim'+[i]}}\" class=\"form-control search-form-control\"\r\n attr.data-type=\"{{'text'}}\" attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n attr.data-name=\"{{'Assignee'}}\" [hidden]=\"ClaimList?.length == 1\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls['claim'+[i]]?.touched || enjiForm.form.controls['claim'+[i]]?.dirty) && enjiForm.form.controls['claim'+[i]]?.invalid }\">\r\n <option *ngIf=\"question.ddlType == 'one' && ClaimList?.length != 1\" value=\"one\">Select\r\n One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && ClaimList?.length != 1\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of ClaimList\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n </div>\r\n <lib-uc-show-errors *ngIf=\"question.type!='datepicker'\"\r\n [control]=\"enjiForm.form.controls[question.name]\" [submit]=\"enjiForm.submitted\">\r\n </lib-uc-show-errors>\r\n <lib-uc-show-errors *ngIf=\"question.type=='datepicker'\"\r\n [control]=\"enjiForm.form.controls[question.name+[i]]\" [submit]=\"enjiForm.submitted\">\r\n </lib-uc-show-errors>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6 form-group\" *ngIf=\"(isReport != undefined && isReport)\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <label class=\"col-md-5 no-padding\" translate>Report Type</label>\r\n <div class=\"col-md-7 no-padding\">\r\n <select name=\"ExportType\" [(ngModel)]=\"ExportType\" class=\"form-control search-form-control\"\r\n attr.data-type=\"text\">\r\n <option *ngFor=\"let item of ExportTypeList\" [value]=\"item.key\">{{item.value}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 no-padding\">\r\n <div class=\"form-actions right\">\r\n <ng-container class=\"btn-group\" *ngIf=\"exportData == true && isSearch\">\r\n <button type=\"button\"\r\n class=\"btn btn-raised btn-success mr-1 dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" translate>\r\n <i class=\"fa ft-download\"></i> <span translate>Export File</span>\r\n </button>\r\n <div class=\"dropdown-menu\">\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('csv')\">as CSV</a>\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('excel')\">as EXCEL</a>\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('json')\">as JSON</a>\r\n </div>\r\n </ng-container>\r\n <button type=\"button\" (click)=\"reset()\" class=\"btn btn-raised btn-warning mr-1\" translate>\r\n <i class=\"fa fa-times\"></i> <span translate>Reset</span>\r\n </button>\r\n <button *ngIf=\"(isReport == undefined || !isReport)\" type=\"submit\"\r\n class=\"btn btn-raised btn-primary\" #UCSearchClick>\r\n <i class=\"fa fa-search\"></i> <span translate>Search</span>\r\n </button>\r\n <button *ngIf=\"(isReport != undefined && isReport)\" type=\"button\" (click)=\"GenerateReport(enjiForm)\"\r\n class=\"btn btn-raised btn-primary\">\r\n <i class=\"fa ft-download\"></i> <span translate>Generate\r\n Report</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n<br>\r\n<!-- // Basic form layout section end -->", styles: [".ucSearch-title{margin:3px}.dds-input{border-radius:7px!important;border:1px solid var(--gray-line, #DFE6E9)!important;background:var(--white-1, #FDFEFF)!important;padding:1.135rem!important;height:calc(1.5rem + 2px)!important;font-size:12px!important}.dds-display-item:after{content:\"\\e929\";font-family:feather;font-size:1rem;display:inline-block;position:absolute;right:5px;top:5px;transform:rotate(90deg)}.dds-list-container{position:absolute;width:100%;z-index:9}\n"], components: [{ type: i8.UcShowErrorsComponent, selector: "lib-uc-show-errors", inputs: ["control", "submit", "fieldName", "customPattern"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.UpperCaseDirective, selector: "input[type=text], input", inputs: ["IsUpperCase"] }, { type: i10.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i10.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i12.CurrencyMaskDirective, selector: "[currencyMask]", inputs: ["options"] }, { type: i10.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i10.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i10.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }], pipes: { "date": i4.DatePipe, "textSearch": i13.TextSearchPipe }, animations: [
|
|
1152
1151
|
trigger('changeDivSize', [
|
|
1153
1152
|
state('initial', style({
|
|
1154
1153
|
height: '*',
|
|
@@ -1179,7 +1178,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
1179
1178
|
transition('initial=>final', animate('300ms')),
|
|
1180
1179
|
transition('final=>initial', animate('300ms'))
|
|
1181
1180
|
]),
|
|
1182
|
-
], template: "<div>\r\n<!-- Basic form layout section start -->\r\n<lib-ucSubsection [hidden]=\"!searchInput.IsSubsection\" [id]=\"searchInput.searchId+'id'\"\r\n [title]=\"configuration?.sectionTitle || 'Paging'\" [panel]=\"searchInput.searchId\">\r\n</lib-ucSubsection>\r\n\r\n<!-- <div [id]=\"searchInput.searchId\"> -->\r\n <!-- <div class=\"row text-left\">\r\n <div class=\"col-md-12\">\r\n <div class=\"\"> -->\r\n <!-- <div class=\"pl-3 mb-2 mt-2\" *ngIf=\"configuration?.title != undefined && configuration?.title != ''\">\r\n <h4 class=\"card-title ucSearch-title\" translate>{{configuration.title}}</h4>\r\n </div> -->\r\n <div class=\"card-body\" [id]=\"searchInput.searchId\">\r\n <div class=\"px-3\">\r\n <form class=\"form form-horizontal\" id=\"formSearch\" #formIdSearch #enjiForm=\"ngForm\"\r\n (ngSubmit)=\"enjiForm.valid && searchClick()\">\r\n <div class=\"form-body\">\r\n <!-- <h4 class=\"form-section font-weight-bold\">\r\n <div (click)=\"changeState()\" class=\"btn no-padding cursor-pointer flip\">\r\n <i class=\"fa\" style=\"font-size: 15px; margin: 0px 0px 5px -15px;\"\r\n [ngClass]=\"isHidden ? 'fa-chevron-right' : 'fa-chevron-down'\"></i>\r\n </div>\r\n <span\r\n *ngIf=\"configuration?.sectionTitle != undefined && configuration?.sectionTitle != ''; then inputSectionTitle else defaultSectionTitle\"></span>\r\n <ng-template #inputSectionTitle>\r\n {{configuration?.sectionTitle}}\r\n </ng-template>\r\n <ng-template #defaultSectionTitle>\r\n Paging\r\n </ng-template>\r\n </h4> -->\r\n <!-- Ini Digunakan untuk Generate Dynamic Component -->\r\n <!-- [hidden]=\"isHidden\" -->\r\n <!-- <div class=\"panel-active\" [@changeDivSize]=currentState> -->\r\n <div class=\"row\">\r\n <div class=\"col-md-3 form-group\" *ngFor=\"let question of configuration?.component; let i = index\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <label class=\"col-md-12 no-padding search-label\" for=\"{{question.id}}\"\r\n [ngClass]=\"{'adins-required-label': (question.isRequired || (question?.ddlType != undefined && question.ddlType == 'one'))}\"\r\n translate>{{question.label}}</label>\r\n <div class=\"col-md-12 no-padding\">\r\n <div *ngIf=\"question.type=='textbox'\">\r\n <input type=\"text\" id=\"{{question.id}}\" class=\"form-control search-input\"\r\n [IsUpperCase]=\"question.isUppercase === undefined ? true : question.isUppercase\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\" [placeholder]=\"question.placeholder != undefined ? question.placeholder : ''\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question.type=='textarea'\">\r\n <textarea type=\"text\" id=\"{{question.id}}\" class=\"form-control search-input\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\" value=\"{{question.value}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\"></textarea>\r\n </div>\r\n <div *ngIf=\"question.type=='numeric'\">\r\n <input type=\"number\" id=\"{{question.id}}\" (focus)=\"transformToDecimal($event)\"\r\n (blur)=\"transformToDecimal($event)\" class=\"form-control search-input\" [placeholder]=\"'0'\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name+[i]}}\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-numericpair=\"{{question.numericPair}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name+[i]]?.touched || enjiForm.form.controls[question.name+[i]]?.dirty) && enjiForm.form.controls[question.name+[i]]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question.type=='currency'\">\r\n <div *ngIf=\"question?.isCustom != undefined && question?.isCustom\">\r\n <input type=\"\" id=\"{{question.id}}\" class=\"form-control search-input\"\r\n [required]=\"question.isRequired\" name=\"{{question.name}}\" autocomplete=\"off\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" currencyMask [ngModel]=\"question.value\"\r\n [(ngModel)]=\"question.value\" [ngModelOptions]=\"{standalone: true}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\" (focus)=\"OnFocusCurr($event, question.value)\" (blur)=\"ValidateDefaultValue(question)\"\r\n [options]=\"{ thousands: question.thousands, decimal: question.decimal, align: question.align, allowNegative: question.allowNegative, allowZero: question.allowZero, precision: question.precision, nullable: question.nullable }\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question?.isCustom == undefined || !question?.isCustom\">\r\n <input type=\"text\" id=\"{{question.id}}\" class=\"form-control search-input\"\r\n [required]=\"question.isRequired\" name=\"{{question.name}}\" autocomplete=\"off\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" currencyMask [ngModel]=\"question.value\"\r\n [(ngModel)]=\"question.value\" [ngModelOptions]=\"{standalone: true}\"\r\n attr.label=\"{{question.label}}\" (focus)=\"OnFocusCurr($event, question.value)\" (blur)=\"ValidateDefaultValue(question)\"\r\n [options]=\"{ thousands: ',', decimal: '.', align: 'right', allowNegative: false, allowZero:true, precision: 2, nullable: false }\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n </div>\r\n\r\n <!-- End Hardcode Lookup didalem-->\r\n <div *ngIf=\"question.type=='datepicker'\">\r\n <input type=\"{{question.isTime ? 'datetime-local' : 'date'}}\" id=\"{{question.id}}\"\r\n class=\"form-control search-input btn-lookup\" name=\"{{question.name+[i]}}\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n [readonly]=\"question.readonly\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\"\r\n attr.data-datepickerpair=\"{{question.datepickerPair}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.label=\"{{question.label}}\" min=\"{{question.minDate | date:'yyyy-MM-dd'}}\"\r\n max=\"{{question.maxDate | date:'yyyy-MM-dd'}}\"\r\n (focusout)=\"question.restriction != undefined && checkInputDate(question)\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name+[i]]?.touched || enjiForm.form.controls[question.name+[i]]?.dirty) && enjiForm.form.controls[question.name+[i]]?.invalid }\">\r\n </div>\r\n <div\r\n *ngIf=\"question.type == 'taskDefinitionKey' || question.type == 'processKey' || question.type == 'officeRoleCodes'\">\r\n <select name=\"{{question.name}}\" attr.data-required=\"{{question.isRequired}}\"\r\n [required]=\"question.isRequired\" class=\"form-control search-input\"\r\n attr.query-in=\"{{question.isQueryIn}}\" attr.data-type=\"{{question.datatype}}\"\r\n attr.label=\"{{question.label}}\" [hidden]=\"question?.itemsUrl?.length == 1\"\r\n (change)=\"(question.type == 'taskDefinitionKey' || question.type == 'processKey') ? SetProcessKey(i,question.wfKeyFilter) : SetRoleOfficeCodes(i)\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n <option *ngIf=\"question.ddlType == 'one' && question?.itemsUrl?.length != 1\"\r\n value=\"one\">Select One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && question?.itemsUrl?.length != 1\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of question?.itemsUrl\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n <label *ngIf=\"question?.itemsUrl?.length == 1\">{{question.itemsUrl[0].Value}}</label>\r\n </div>\r\n <div *ngIf=\"question.type=='dropdown'\">\r\n <select name=\"{{question.name}}\" attr.data-required=\"{{question.isRequired}}\"\r\n [(ngModel)]=\"question.value\" [required]=\"question.isRequired\"\r\n class=\"form-control search-input\" attr.query-in=\"{{question.isQueryIn}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.label=\"{{question.label}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n [hidden]=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\"\r\n (change)=\"question.isEvent ? onChangeEvent($event.target.value, question) : ''\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n <option\r\n *ngIf=\"question.ddlType == 'one' && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"one\">\r\n Select One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of !question.isFromURL ? question?.items : question?.itemsUrl\"\r\n value=\"{{!question.isFromURL ? item.key : item.Key}}\">\r\n {{!question.isFromURL ? item.value : item.Value}}\r\n </option>\r\n </select>\r\n <label\r\n *ngIf=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">{{!question.isFromURL\r\n ? question.items[0].value :\r\n question.itemsUrl[0].Value}}</label>\r\n </div>\r\n <div *ngIf=\"question.type=='dropdownSearch'\">\r\n <div class=\"dds-display-item\"\r\n [hidden]=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">\r\n <input type=\"text\" class=\"form-control dds-input\"\r\n name=\"{{'ddsValue'+question.name}}\" [(ngModel)]=\"question.descr\" readonly\r\n (click)=\"question.isListHide = !question.isListHide; question.searchText=''\">\r\n </div>\r\n <label\r\n *ngIf=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">{{question.descr}}</label>\r\n <div class=\"dds-list-container\" [hidden]=\"question.isListHide\">\r\n <input type=\"text\" class=\"form-control search-input\"\r\n name=\"{{'searchText'+question.name}}\" [(ngModel)]=\"question.searchText\"\r\n [placeholder]=\"question.placeholder\">\r\n <div class=\"dds-items-container\">\r\n <select class=\"full-width\" name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" [(ngModel)]=\"question.value\"\r\n [required]=\"question.isRequired\" attr.query-in=\"{{question.isQueryIn}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.label=\"{{question.label}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n (change)=\"question.isEvent ? onChangeEvent($event.target.value, question) : ''\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\"\r\n size=\"{{question?.size == undefined ? question?.size : 10}}\">\r\n <option (click)=\"selectedOption({Key:'one',Value:'Select One'},question)\"\r\n *ngIf=\"question.ddsType == 'one' && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"one\">\r\n Select One</option>\r\n <option (click)=\"selectedOption({Key:'all',Value:'All'},question)\"\r\n *ngIf=\"(question?.ddsType == undefined || question.ddsType == 'all') && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"all\">All</option>\r\n <!-- <option *ngFor=\"let item of question?.items | textSearch : question.searchText; let i=index\" [value]=\"item?.key\" (click)=\"selectedOption(item,question)\">\r\n {{item?.value}}\r\n </option> -->\r\n <option\r\n *ngFor=\"let item of !question.isFromURL ? (question?.items | textSearch : question.searchText) : question?.itemsUrl | textSearch : question.searchText\"\r\n (click)=\"selectedOption(item,question)\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"question.type=='claim'\">\r\n <select name=\"{{'claim'+[i]}}\" class=\"form-control search-input\"\r\n attr.data-type=\"{{'text'}}\" attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n attr.data-name=\"{{'Assignee'}}\" [hidden]=\"ClaimList?.length == 1\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls['claim'+[i]]?.touched || enjiForm.form.controls['claim'+[i]]?.dirty) && enjiForm.form.controls['claim'+[i]]?.invalid }\">\r\n <option *ngIf=\"question.ddlType == 'one' && ClaimList?.length != 1\" value=\"one\">Select\r\n One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && ClaimList?.length != 1\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of ClaimList\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n </div>\r\n <lib-uc-show-errors *ngIf=\"question.type!='datepicker'\"\r\n [control]=\"enjiForm.form.controls[question.name]\" [submit]=\"enjiForm.submitted\">\r\n </lib-uc-show-errors>\r\n <lib-uc-show-errors *ngIf=\"question.type=='datepicker'\"\r\n [control]=\"enjiForm.form.controls[question.name+[i]]\" [submit]=\"enjiForm.submitted\">\r\n </lib-uc-show-errors>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6 form-group\" *ngIf=\"(isReport != undefined && isReport)\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <label class=\"col-md-12 no-padding search-label\" translate>Report Type</label>\r\n <div class=\"col-md-12 no-padding\">\r\n <select name=\"ExportType\" [(ngModel)]=\"ExportType\" class=\"form-control search-input\"\r\n attr.data-type=\"text\">\r\n <option *ngFor=\"let item of ExportTypeList\" [value]=\"item.key\">{{item.value}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 no-padding\">\r\n <div class=\"form-actions right\">\r\n <ng-container class=\"btn-group\" *ngIf=\"exportData == true && isSearch\">\r\n <button type=\"button\"\r\n class=\"btn btn-raised btn-outline-2 mr-1 dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" translate>\r\n <i class=\"fa ft-download button-icon-search\"></i> <span class=\"button-text-search\" translate>Export File</span>\r\n </button>\r\n <div class=\"dropdown-menu\">\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('csv')\">as CSV</a>\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('excel')\">as EXCEL</a>\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('json')\">as JSON</a>\r\n </div>\r\n </ng-container>\r\n <button type=\"button\" (click)=\"reset()\" class=\"btn btn-raised mr-1 btn-link-2\" translate>\r\n <!-- <i class=\"fa fa-times\"></i> -->\r\n <span translate>Reset</span>\r\n </button>\r\n <button *ngIf=\"(isReport == undefined || !isReport)\" type=\"submit\"\r\n class=\"btn btn-raised btn-outline-2\" #UCSearchClick>\r\n <i class=\"fa fa-search button-icon-search\"></i> <span class=\"button-text-search\" translate>Search</span>\r\n </button>\r\n <button *ngIf=\"(isReport != undefined && isReport)\" type=\"button\" (click)=\"GenerateReport(enjiForm)\"\r\n class=\"btn btn-raised btn-outline-2\">\r\n <i class=\"fa ft-download button-icon-search\"></i> <span class=\"button-text-search\" translate>Generate\r\n Report</span>\r\n </button>\r\n </div>\r\n </div>\r\n <!-- </div> -->\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <!-- </div>\r\n </div>\r\n </div> -->\r\n<!-- </div> -->\r\n</div>\r\n<!-- // Basic form layout section end -->\r\n", styles: [".ucSearch-title{margin:3px}.card-body{margin-top:24px}.form-group{margin-bottom:15px!important}.search-label{color:var(--Black_1, #3A4060);font-size:14px!important}.dds-input{border-radius:7px!important;border:1px solid var(--gray-line, #DFE6E9)!important;background:var(--white-1, #FDFEFF)!important;padding:1.135rem!important;height:calc(1.5rem + 2px)!important;font-size:12px!important}.dds-display-item:after{content:\"\\e929\";font-family:feather;font-size:1rem;display:inline-block;position:absolute;right:5px;top:5px;transform:rotate(90deg)}.dds-list-container{position:absolute;width:100%;z-index:9}.search-input{border-radius:7px!important;border:1px solid var(--gray-line, #DFE6E9)!important;background:var(--white-1, #FDFEFF)!important;width:100%}select.search-input{-webkit-appearance:none;appearance:none;background-image:url(\"data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23246CFE' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e\")!important;background-repeat:no-repeat!important;background-position:right 1rem center!important;background-size:1.4em!important}.btn{border-radius:7px;font-size:14px;padding:.275rem 1rem}.btn-link-2{background:none;border:none;color:var(--blue-primary, #246CFE)!important}.btn-link-2:hover{background:var(--light-grey, #F4F8FB)!important;color:var(--blue-primary-darker, #0010F7)!important}.btn-outline-2{border:1px solid var(--blue-primary, #246CFE)!important;background:var(--white, #FDFEFF)!important;color:var(--blue-primary, #246CFE)!important}.btn-outline-2:hover{color:var(--blue-primary-darker, #0010F7)!important;background:var(--light-grey, #F4F8FB)!important;border:1px solid var(--blue-primary-darker, #0010F7)!important}.button-icon-search{font-size:11px;vertical-align:middle;padding-right:8px}.button-text-search{vertical-align:middle}.dropdown-toggle:after{display:inline-block;margin-left:.5em;vertical-align:middle;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}\n"] }]
|
|
1181
|
+
], template: "<!-- Basic form layout section start -->\r\n<section id=\"horizontal-form-layouts\">\r\n <div class=\"row text-left\">\r\n <div class=\"col-md-12\">\r\n <div class=\"card\">\r\n <div class=\"pl-3 mb-2 mt-2\" *ngIf=\"configuration?.title != undefined && configuration?.title != ''\">\r\n <h4 class=\"card-title ucSearch-title\" translate>{{configuration.title}}</h4>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"px-3\">\r\n <form class=\"form form-horizontal\" id=\"formSearch\" #formIdSearch #enjiForm=\"ngForm\"\r\n (ngSubmit)=\"enjiForm.valid && searchClick()\">\r\n <div class=\"form-body\">\r\n <h4 class=\"form-section font-weight-bold\">\r\n <div (click)=\"changeState()\" class=\"btn no-padding cursor-pointer flip\">\r\n <i class=\"fa\" style=\"font-size: 15px; margin: 0px 0px 5px -15px;\"\r\n [ngClass]=\"isHidden ? 'fa-chevron-right' : 'fa-chevron-down'\"></i>\r\n </div>\r\n <span\r\n *ngIf=\"configuration?.sectionTitle != undefined && configuration?.sectionTitle != ''; then inputSectionTitle else defaultSectionTitle\"></span>\r\n <ng-template #inputSectionTitle>\r\n {{configuration?.sectionTitle}}\r\n </ng-template>\r\n <ng-template #defaultSectionTitle>\r\n Paging\r\n </ng-template>\r\n </h4>\r\n <!-- Ini Digunakan untuk Generate Dynamic Component -->\r\n <!-- [hidden]=\"isHidden\" -->\r\n <div class=\"panel-active\" [@changeDivSize]=currentState>\r\n <div class=\"row\">\r\n <div class=\"col-md-6 form-group\" *ngFor=\"let question of configuration?.component; let i = index\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <label class=\"col-md-5 no-padding\" for=\"{{question.id}}\"\r\n [ngClass]=\"{'adins-required-label': (question.isRequired || (question?.ddlType != undefined && question.ddlType == 'one'))}\"\r\n translate>{{question.label}}</label>\r\n <div class=\"col-md-7 no-padding\">\r\n <div *ngIf=\"question.type=='textbox'\">\r\n <input type=\"text\" id=\"{{question.id}}\" class=\"form-control search-form-control\"\r\n [IsUpperCase]=\"question.isUppercase === undefined ? true : question.isUppercase\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question.type=='textarea'\">\r\n <textarea type=\"text\" id=\"{{question.id}}\" class=\"form-control search-form-control\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\" value=\"{{question.value}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\"></textarea>\r\n </div>\r\n <div *ngIf=\"question.type=='numeric'\">\r\n <input type=\"number\" id=\"{{question.id}}\" (focus)=\"transformToDecimal($event)\"\r\n (blur)=\"transformToDecimal($event)\" class=\"form-control search-form-control\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\" name=\"{{question.name+[i]}}\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-numericpair=\"{{question.numericPair}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name+[i]]?.touched || enjiForm.form.controls[question.name+[i]]?.dirty) && enjiForm.form.controls[question.name+[i]]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question.type=='currency'\">\r\n <div *ngIf=\"question?.isCustom != undefined && question?.isCustom\">\r\n <input type=\"\" id=\"{{question.id}}\" class=\"form-control search-form-control\"\r\n [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" currencyMask [ngModel]=\"question.value\"\r\n [(ngModel)]=\"question.value\" [ngModelOptions]=\"{standalone: true}\"\r\n attr.label=\"{{question.label}}\" [readonly]=\"question.isReadonly\"\r\n [options]=\"{ thousands: question.thousands, decimal: question.decimal, align: question.align, allowNegative: question.allowNegative, allowZero: question.allowZero, precision: question.precision, nullable: question.nullable }\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n <div *ngIf=\"question?.isCustom == undefined || !question?.isCustom\">\r\n <input type=\"text\" id=\"{{question.id}}\" class=\"form-control search-form-control\"\r\n [required]=\"question.isRequired\" name=\"{{question.name}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" currencyMask [ngModel]=\"question.value\"\r\n [(ngModel)]=\"question.value\" [ngModelOptions]=\"{standalone: true}\"\r\n attr.label=\"{{question.label}}\"\r\n [options]=\"{ thousands: ',', decimal: '.', align: 'right', allowNegative: false, allowZero:true, precision: 2, nullable: false }\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n </div>\r\n </div>\r\n\r\n <!-- End Hardcode Lookup didalem-->\r\n <div *ngIf=\"question.type=='datepicker'\">\r\n <input type=\"{{question.isTime ? 'datetime-local' : 'date'}}\" id=\"{{question.id}}\"\r\n class=\"form-control search-form-control btn-lookup\" name=\"{{question.name+[i]}}\"\r\n [ngModel]=\"question.value\" [required]=\"question.isRequired\"\r\n attr.data-required=\"{{question.isRequired}}\" value=\"{{question.value}}\"\r\n [readonly]=\"question.readonly\" attr.data-type=\"{{question.datatype}}\"\r\n attr.data-name=\"{{question.name}}\"\r\n attr.data-datepickerpair=\"{{question.datepickerPair}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n (keyup.enter)=\"searchClick()\" attr.data-restriction=\"{{question.restriction}}\"\r\n attr.label=\"{{question.label}}\" min=\"{{question.minDate | date:'yyyy-MM-dd'}}\"\r\n max=\"{{question.maxDate | date:'yyyy-MM-dd'}}\"\r\n (focusout)=\"question.restriction != undefined && checkInputDate(question)\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name+[i]]?.touched || enjiForm.form.controls[question.name+[i]]?.dirty) && enjiForm.form.controls[question.name+[i]]?.invalid }\">\r\n </div>\r\n <div\r\n *ngIf=\"question.type == 'taskDefinitionKey' || question.type == 'processKey' || question.type == 'officeRoleCodes'\">\r\n <select name=\"{{question.name}}\" attr.data-required=\"{{question.isRequired}}\"\r\n [required]=\"question.isRequired\" class=\"form-control search-form-control\"\r\n attr.query-in=\"{{question.isQueryIn}}\" attr.data-type=\"{{question.datatype}}\"\r\n attr.label=\"{{question.label}}\" [hidden]=\"question?.itemsUrl?.length == 1\"\r\n (change)=\"(question.type == 'taskDefinitionKey' || question.type == 'processKey') ? SetProcessKey(i,question.wfKeyFilter) : SetRoleOfficeCodes(i)\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n <option *ngIf=\"question.ddlType == 'one' && question?.itemsUrl?.length != 1\"\r\n value=\"one\">Select One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && question?.itemsUrl?.length != 1\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of question?.itemsUrl\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n <label *ngIf=\"question?.itemsUrl?.length == 1\">{{question.itemsUrl[0].Value}}</label>\r\n </div>\r\n <div *ngIf=\"question.type=='dropdown'\">\r\n <select name=\"{{question.name}}\" attr.data-required=\"{{question.isRequired}}\"\r\n [(ngModel)]=\"question.value\" [required]=\"question.isRequired\"\r\n class=\"form-control search-form-control\" attr.query-in=\"{{question.isQueryIn}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.label=\"{{question.label}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n [hidden]=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\"\r\n (change)=\"question.isEvent ? onChangeEvent($event.target.value, question) : ''\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\">\r\n <option\r\n *ngIf=\"question.ddlType == 'one' && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"one\">\r\n Select One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of !question.isFromURL ? question?.items : question?.itemsUrl\"\r\n value=\"{{!question.isFromURL ? item.key : item.Key}}\">\r\n {{!question.isFromURL ? item.value : item.Value}}\r\n </option>\r\n </select>\r\n <label\r\n *ngIf=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">{{!question.isFromURL\r\n ? question.items[0].value :\r\n question.itemsUrl[0].Value}}</label>\r\n </div>\r\n <div *ngIf=\"question.type=='dropdownSearch'\">\r\n <div class=\"dds-display-item\"\r\n [hidden]=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">\r\n <input type=\"text\" class=\"form-control search-form-control dds-input\"\r\n name=\"{{'ddsValue'+question.name}}\" [(ngModel)]=\"question.descr\" readonly\r\n (click)=\"question.isListHide = !question.isListHide; question.searchText=''\">\r\n </div>\r\n <label\r\n *ngIf=\"!question.isFromURL ? question?.items?.length == 1 : question?.itemsUrl?.length == 1\">{{question.descr}}</label>\r\n <div class=\"dds-list-container\" [hidden]=\"question.isListHide\">\r\n <input type=\"text\" class=\"form-control search-form-control\"\r\n name=\"{{'searchText'+question.name}}\" [(ngModel)]=\"question.searchText\"\r\n [placeholder]=\"question.placeholder\">\r\n <div class=\"dds-items-container\">\r\n <select class=\"full-width\" name=\"{{question.name}}\"\r\n attr.data-required=\"{{question.isRequired}}\" [(ngModel)]=\"question.value\"\r\n [required]=\"question.isRequired\" attr.query-in=\"{{question.isQueryIn}}\"\r\n attr.data-type=\"{{question.datatype}}\" attr.data-name=\"{{question.name}}\"\r\n attr.label=\"{{question.label}}\"\r\n attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n (change)=\"question.isEvent ? onChangeEvent($event.target.value, question) : ''\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls[question.name]?.touched || enjiForm.form.controls[question.name]?.dirty) && enjiForm.form.controls[question.name]?.invalid }\"\r\n size=\"{{question?.size == undefined ? question?.size : 10}}\">\r\n <option (click)=\"selectedOption({Key:'one',Value:'Select One'},question)\"\r\n *ngIf=\"question.ddsType == 'one' && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"one\">\r\n Select One</option>\r\n <option (click)=\"selectedOption({Key:'all',Value:'All'},question)\"\r\n *ngIf=\"(question?.ddsType == undefined || question.ddsType == 'all') && (!question.isFromURL ? question?.items?.length != 1 : question?.itemsUrl?.length != 1)\"\r\n value=\"all\">All</option>\r\n <!-- <option *ngFor=\"let item of question?.items | textSearch : question.searchText; let i=index\" [value]=\"item?.key\" (click)=\"selectedOption(item,question)\">\r\n {{item?.value}}\r\n </option> -->\r\n <option\r\n *ngFor=\"let item of !question.isFromURL ? (question?.items | textSearch : question.searchText) : question?.itemsUrl | textSearch : question.searchText\"\r\n (click)=\"selectedOption(item,question)\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"question.type=='claim'\">\r\n <select name=\"{{'claim'+[i]}}\" class=\"form-control search-form-control\"\r\n attr.data-type=\"{{'text'}}\" attr.data-crit-datatable=\"{{question.isCriteriaDataTable}}\"\r\n attr.data-name=\"{{'Assignee'}}\" [hidden]=\"ClaimList?.length == 1\"\r\n [ngClass]=\"{ 'is-invalid':(enjiForm.submitted || enjiForm.form.controls['claim'+[i]]?.touched || enjiForm.form.controls['claim'+[i]]?.dirty) && enjiForm.form.controls['claim'+[i]]?.invalid }\">\r\n <option *ngIf=\"question.ddlType == 'one' && ClaimList?.length != 1\" value=\"one\">Select\r\n One</option>\r\n <option\r\n *ngIf=\"(question?.ddlType == undefined || question.ddlType == 'all') && ClaimList?.length != 1\"\r\n value=\"all\">All</option>\r\n <option *ngFor=\"let item of ClaimList\" value=\"{{item.Key}}\">\r\n {{item.Value}}\r\n </option>\r\n </select>\r\n </div>\r\n <lib-uc-show-errors *ngIf=\"question.type!='datepicker'\"\r\n [control]=\"enjiForm.form.controls[question.name]\" [submit]=\"enjiForm.submitted\">\r\n </lib-uc-show-errors>\r\n <lib-uc-show-errors *ngIf=\"question.type=='datepicker'\"\r\n [control]=\"enjiForm.form.controls[question.name+[i]]\" [submit]=\"enjiForm.submitted\">\r\n </lib-uc-show-errors>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6 form-group\" *ngIf=\"(isReport != undefined && isReport)\">\r\n <div class=\"col-md-12\">\r\n <div class=\"row\">\r\n <label class=\"col-md-5 no-padding\" translate>Report Type</label>\r\n <div class=\"col-md-7 no-padding\">\r\n <select name=\"ExportType\" [(ngModel)]=\"ExportType\" class=\"form-control search-form-control\"\r\n attr.data-type=\"text\">\r\n <option *ngFor=\"let item of ExportTypeList\" [value]=\"item.key\">{{item.value}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 no-padding\">\r\n <div class=\"form-actions right\">\r\n <ng-container class=\"btn-group\" *ngIf=\"exportData == true && isSearch\">\r\n <button type=\"button\"\r\n class=\"btn btn-raised btn-success mr-1 dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" translate>\r\n <i class=\"fa ft-download\"></i> <span translate>Export File</span>\r\n </button>\r\n <div class=\"dropdown-menu\">\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('csv')\">as CSV</a>\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('excel')\">as EXCEL</a>\r\n <a class=\"dropdown-item\" (click)=\"exportAsFile('json')\">as JSON</a>\r\n </div>\r\n </ng-container>\r\n <button type=\"button\" (click)=\"reset()\" class=\"btn btn-raised btn-warning mr-1\" translate>\r\n <i class=\"fa fa-times\"></i> <span translate>Reset</span>\r\n </button>\r\n <button *ngIf=\"(isReport == undefined || !isReport)\" type=\"submit\"\r\n class=\"btn btn-raised btn-primary\" #UCSearchClick>\r\n <i class=\"fa fa-search\"></i> <span translate>Search</span>\r\n </button>\r\n <button *ngIf=\"(isReport != undefined && isReport)\" type=\"button\" (click)=\"GenerateReport(enjiForm)\"\r\n class=\"btn btn-raised btn-primary\">\r\n <i class=\"fa ft-download\"></i> <span translate>Generate\r\n Report</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n<br>\r\n<!-- // Basic form layout section end -->", styles: [".ucSearch-title{margin:3px}.dds-input{border-radius:7px!important;border:1px solid var(--gray-line, #DFE6E9)!important;background:var(--white-1, #FDFEFF)!important;padding:1.135rem!important;height:calc(1.5rem + 2px)!important;font-size:12px!important}.dds-display-item:after{content:\"\\e929\";font-family:feather;font-size:1rem;display:inline-block;position:absolute;right:5px;top:5px;transform:rotate(90deg)}.dds-list-container{position:absolute;width:100%;z-index:9}\n"] }]
|
|
1183
1182
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
|
1184
1183
|
type: Inject,
|
|
1185
1184
|
args: [DOCUMENT]
|
|
@@ -1202,4 +1201,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
1202
1201
|
}], reqGetAllData: [{
|
|
1203
1202
|
type: Output
|
|
1204
1203
|
}] } });
|
|
1205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWNzZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWNzZWFyY2gvc3JjL2xpYi91Y3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3NlYXJjaC9zcmMvbGliL3Vjc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUV2SSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFhLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsa0JBQWtCLEVBQXFCLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFN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T0FBTyxFQUFFLEdBQUc7NkJBQ2IsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO2dDQUNuQixNQUFNLEVBQUUsS0FBSztnQ0FDYixPQUFPLEVBQUUsR0FBRztnQ0FDWixRQUFRLEVBQUUsUUFBUTs2QkFDbkIsQ0FBQyxDQUFDOzRCQUNILFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQzlDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7eUJBQy9DLENBQUM7cUJBQ0g7OzBCQXVGRSxNQUFNOzJCQUFDLFFBQVE7Z1BBMUVTLE9BQU87c0JBQWpDLFNBQVM7dUJBQUMsVUFBVTtnQkFNTSxNQUFNO3NCQUFoQyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ2hCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBJbmplY3QsIFJlbmRlcmVyMiwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSwgZm9ybWF0RGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElucHV0U2VhcmNoT2JqIH0gZnJvbSAnLi9tb2RlbC9pbnB1dC1zZWFyY2gtb2JqLm1vZGVsJztcclxuaW1wb3J0IHsgQ3JpdGVyaWFPYmogfSBmcm9tICcuL21vZGVsL2NyaXRlcmlhLW9iai5tb2RlbCc7XHJcbmltcG9ydCB7IFJlcXVlc3RDcml0ZXJpYU9iaiB9IGZyb20gJy4vbW9kZWwvcmVxdWVzdC1jcml0ZXJpYS1vYmoubW9kZWwnO1xyXG5pbXBvcnQgeyBBZEluc0NvbnN0YW50LCBFWFBPUlRfREFUQV9UWVBFUyB9IGZyb20gJy4vbW9kZWwvYWRpbnMtY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IHRyaWdnZXIsIHRyYW5zaXRpb24sIHN0eWxlLCBhbmltYXRlLCBzdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IEV4cG9ydFR5cGVDb25zdGFudCwgS2V5VmFsdWVSZXBvcnRPYmogfSBmcm9tICcuL21vZGVsL2tleS12YWx1ZS1yZXBvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZSc7XHJcbmltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7XHJcbmltcG9ydCB7IEtleVZhbHVlVUNTZWFyY2hPYmosIExpc3RLZXlWYWx1ZU1vbnRoIH0gZnJvbSAnLi9tb2RlbC9rZXktdmFsdWUtdWMtc2VhcmNoLm1vZGVsJztcclxuaW1wb3J0IHsgRXhwb3J0RmlsZVNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2V4cG9ydC1maWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE5neFJvdXRlclNlcnZpY2UgfSBmcm9tICdAYWRpbnMvZmUtY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1VQ1NlYXJjaCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Vjc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91Y3NlYXJjaC5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbRGF0ZVBpcGUsIEV4cG9ydEZpbGVTZXJ2aWNlXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdjaGFuZ2VEaXZTaXplJywgW1xyXG4gICAgICBzdGF0ZSgnaW5pdGlhbCcsIHN0eWxlKHtcclxuICAgICAgICBoZWlnaHQ6ICcqJyxcclxuICAgICAgICBvcGFjaXR5OiAnMScsXHJcbiAgICAgIH0pKSxcclxuICAgICAgc3RhdGUoJ2ZpbmFsJywgc3R5bGUoe1xyXG4gICAgICAgIGhlaWdodDogJzBweCcsXHJcbiAgICAgICAgb3BhY2l0eTogJzAnLFxyXG4gICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcclxuICAgICAgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdpbml0aWFsPT5maW5hbCcsIGFuaW1hdGUoJzMwMG1zJykpLFxyXG4gICAgICB0cmFuc2l0aW9uKCdmaW5hbD0+aW5pdGlhbCcsIGFuaW1hdGUoJzMwMG1zJykpXHJcbiAgICBdKSxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVQ1NlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIC8vIGlzTGlzdEhpZGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIC8vIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICAvLyBvbkNsaWNrKGV2OiBNb3VzZUV2ZW50KSB7XHJcbiAgLy8gICBjb25zdCBjbGlja0luc2lkZSA9IHRoaXMuZWxlbVJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnRhcmdldCk7XHJcbiAgLy8gICBpZiAoIWNsaWNrSW5zaWRlKSB7XHJcbiAgLy8gICAgIHRoaXMuaXNMaXN0SGlkZSA9IHRydWU7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBAVmlld0NoaWxkKCdlbmppRm9ybScpIHNldCBjb250ZW50KGNvbnRlbnQ6IE5nRm9ybSkge1xyXG4gICAgaWYgKGNvbnRlbnQpIHsgLy8gaW5pdGlhbGx5IHNldHRlciBnZXRzIGNhbGxlZCB3aXRoIHVuZGVmaW5lZFxyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSBjb250ZW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZm9ybUlkU2VhcmNoJykgbXlGb3JtOiBFbGVtZW50UmVmO1xyXG4gIEBJbnB1dCgpIHNlYXJjaElucHV0OiBJbnB1dFNlYXJjaE9iaiA9IG5ldyBJbnB1dFNlYXJjaE9iaigpO1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcclxuICBASW5wdXQoKSBpc1JlcG9ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSByZXN1bHQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBnZW5ScHQ6IEV2ZW50RW1pdHRlcjx7IEV4cG9ydFR5cGU6IG51bWJlciwgRWxSZWY6IEVsZW1lbnRSZWYgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgRXhwb3J0VHlwZTogbnVtYmVyLCBFbFJlZjogRWxlbWVudFJlZiB9PigpO1xyXG4gIEBPdXRwdXQoKSByZXFHZXRBbGxEYXRhOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBFeHBvcnRUeXBlTGlzdDogQXJyYXk8S2V5VmFsdWVSZXBvcnRPYmo+ID0gW1xyXG4gICAge1xyXG4gICAgICBrZXk6IEV4cG9ydFR5cGVDb25zdGFudC5FWFBfVFlQRV9QREYsXHJcbiAgICAgIHZhbHVlOiBcIlBERlwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IEV4cG9ydFR5cGVDb25zdGFudC5FWFBfVFlQRV9YTFNYLFxyXG4gICAgICB2YWx1ZTogXCJFeGNlbCAyMDA3XCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGtleTogRXhwb3J0VHlwZUNvbnN0YW50LkVYUF9UWVBFX0RPQ1gsXHJcbiAgICAgIHZhbHVlOiBcIkRvY3VtZW50IFhNTFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IEV4cG9ydFR5cGVDb25zdGFudC5FWFBfVFlQRV9KUERGLFxyXG4gICAgICB2YWx1ZTogXCJKdXN0aWZ5IFBERlwiXHJcbiAgICB9XHJcbiAgXTtcclxuICBMaXN0T2ZNb250aDogTGlzdEtleVZhbHVlTW9udGggPSBuZXcgTGlzdEtleVZhbHVlTW9udGgoKTtcclxuICBMaXN0T2ZZZWFyOiBBcnJheTxLZXlWYWx1ZVVDU2VhcmNoT2JqPiA9IG5ldyBBcnJheTxLZXlWYWx1ZVVDU2VhcmNoT2JqPigpO1xyXG4gIENsYWltTGlzdDogQXJyYXk8YW55PiA9IFtcclxuICAgIHtcclxuICAgICAgS2V5OiBBZEluc0NvbnN0YW50LlJlc3RyaWN0aW9uSXNOb3ROdWxsLFxyXG4gICAgICBWYWx1ZTogXCJDTEFJTUVEXCJcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIEtleTogQWRJbnNDb25zdGFudC5SZXN0cmljdGlvbklzTnVsbCxcclxuICAgICAgVmFsdWU6IFwiVU5DTEFJTUVEXCJcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgRXhwb3J0VHlwZTogbnVtYmVyID0gMDtcclxuXHJcbiAgcGFnZU5vdzogYW55ID0gMTtcclxuICBjb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgZXhwb3J0RGF0YTogYW55O1xyXG4gIEV4Y2VsRGF0YTogYW55O1xyXG4gIGlzRGF0YUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQmlzRHQ6IHN0cmluZztcclxuICBCdXNpbmVzc0R0OiBEYXRlID0gbmV3IERhdGUoKTtcclxuICBkYXRlV3Jvbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGN1cnJlbnRTdGF0ZSA9ICdpbml0aWFsJztcclxuXHJcbiAgZm9ybTogRm9ybUdyb3VwO1xyXG4gIGNvdW50Rm9ybSA9IDA7XHJcbiAgZm9ybWF0dGVkQW1vdW50ID0gJyc7XHJcbiAgYW1vdW50ID0gMDtcclxuICBhcGlVcmw6IHN0cmluZztcclxuICBhcnJDcml0OiBhbnk7XHJcbiAgc2VhcmNoRm9ybTogTmdGb3JtO1xyXG4gIHF1ZXJ5UGFyYW06IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgcGVyc2lzdENyaXQ6IENyaXRlcmlhT2JqW107XHJcbiAgcGVyc2lzdEFkZFRvVGVtcENyaXQ6IENyaXRlcmlhT2JqW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXIyOiBSZW5kZXJlcjIsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudCxcclxuICAgIHB1YmxpYyB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgIHByaXZhdGUgZWxlbVJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgZXhwb3J0RmlsZVNlcnZpY2U6IEV4cG9ydEZpbGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIG5neFJvdXRlcjogTmd4Um91dGVyU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoYXN5bmMgcGFyYW1zID0+IHtcclxuICAgICAgdGhpcy5xdWVyeVBhcmFtID0gYXdhaXQgdGhpcy5uZ3hSb3V0ZXIuZ2V0UXVlcnlQYXJhbXMocGFyYW1zKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTdGF0ZSgpIHtcclxuICAgIHRoaXMuY3VycmVudFN0YXRlID0gdGhpcy5jdXJyZW50U3RhdGUgPT0gJ2luaXRpYWwnID8gJ2ZpbmFsJyA6ICdpbml0aWFsJztcclxuICAgIHRoaXMuaXNIaWRkZW4gPSAhdGhpcy5pc0hpZGRlbiA/IHRydWUgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJ1Y3NlYXJjaFwiKTtcclxuICAgIHRoaXMuYXBpVXJsID0gdGhpcy5zZWFyY2hJbnB1dC5lbnZpcm9tZW50VXJsICsgdGhpcy5zZWFyY2hJbnB1dC5hcGlRcnlQYWdpbmc7XHJcbiAgICB0aGlzLmFyckNyaXQgPSB0aGlzLnNlYXJjaElucHV0LmFyckNyaXRPYmo7XHJcbiAgICBsZXQganMgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICBqcy50ZXh0ID0gYFxyXG4gICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgJChcIiNmbGlwXCIpLmNsaWNrKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgJChcIiNwYW5lbFwiKS5zbGlkZVRvZ2dsZShcInNsb3dcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgYDtcclxuICAgIHRoaXMuX3JlbmRlcmVyMi5hcHBlbmRDaGlsZCh0aGlzLl9kb2N1bWVudC5ib2R5LCBqcyk7XHJcblxyXG4gICAgbGV0IHZhbHVlID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldCgnQnVzaW5lc3NEYXRlUmF3Jyk7XHJcbiAgICB0aGlzLkJpc0R0ID0gdGhpcy5EZWNyeXB0U3RyaW5nKHZhbHVlLCBcIkFkSW5zRk9VMTIzNDU2NzhcIik7XHJcbiAgICB0aGlzLkJ1c2luZXNzRHQgPSBuZXcgRGF0ZSh0aGlzLkJpc0R0KTtcclxuICAgIGF3YWl0IHRoaXMuaW5pdGlhdGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0aWF0ZUZvcm0oKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5kYXRhSW5wdXQgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyh0aGlzLnNlYXJjaElucHV0LmRhdGFJbnB1dCkubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIHRoaXMuc2V0Q29uZmlndXJhdGlvbkRhdGEoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlYXJjaElucHV0LmRhdGFJbnB1dCkpKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5odHRwLmdldCh0aGlzLnNlYXJjaElucHV0Ll91cmwpLnRvUHJvbWlzZSgpLnRoZW4oZGF0YSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0Q29uZmlndXJhdGlvbkRhdGEoZGF0YSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlndXJhdGlvbkRhdGEoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBkYXRhO1xyXG4gICAgdGhpcy5leHBvcnREYXRhID0gZGF0YS5leHBvcnRFeGNlbDtcclxuICAgIGlmIChkYXRhLmV4cG9ydFR5cGVMaXN0ICE9IHVuZGVmaW5lZCAmJiBkYXRhLmV4cG9ydFR5cGVMaXN0Lmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgIHRoaXMuRXhwb3J0VHlwZUxpc3QgPSBkYXRhLmV4cG9ydFR5cGVMaXN0O1xyXG4gICAgICB0aGlzLkV4cG9ydFR5cGUgPSB0aGlzLkV4cG9ydFR5cGVMaXN0WzBdLmtleTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvdW50Rm9ybSA9IGRhdGEuY29tcG9uZW50Lmxlbmd0aDtcclxuICAgIHRoaXMuaXNEYXRhTG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC50aXRsZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5zZWFyY2hJbnB1dC50aXRsZSAhPSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi50aXRsZSA9IHRoaXMuc2VhcmNoSW5wdXQudGl0bGU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXNlckFjY2VzcyA9IHRoaXMuZ2V0VXNlckFjY2VzcygpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50Rm9ybTsgaSsrKSB7XHJcbiAgICAgIC8vaW5pIGthbGF1IGRhdGFueWEgZGkgbG9hZCBkYXJpIFVSTFxyXG4gICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0uaXNGcm9tVVJMKSB7XHJcbiAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdENyaXRlcmlhT2JqKCk7XHJcbiAgICAgICAgbGV0IGFycmF5Q3JpdCA9IG5ldyBBcnJheSgpO1xyXG4gICAgICAgIGxldCBjcml0ZXJpYU9iamVjdCA9IG5ldyBDcml0ZXJpYU9iaigpO1xyXG4gICAgICAgIGNyaXRlcmlhT2JqZWN0LkRhdGFUeXBlID0gXCJ0ZXh0XCI7XHJcbiAgICAgICAgY3JpdGVyaWFPYmplY3QucHJvcE5hbWUgPSBkYXRhLmNvbXBvbmVudFtpXS5jcml0ZXJpYVByb3BOYW1lO1xyXG4gICAgICAgIGNyaXRlcmlhT2JqZWN0LnZhbHVlID0gdGhpcy5xdWVyeVBhcmFtW2RhdGEuY29tcG9uZW50W2ldLmNyaXRlcmlhUHJvcFZhbHVlXSB8fCBkYXRhLmNvbXBvbmVudFtpXS5jcml0ZXJpYVByb3BWYWx1ZTtcclxuICAgICAgICBjcml0ZXJpYU9iamVjdC5yZXN0cmljdGlvbiA9IFwiZXFcIjtcclxuICAgICAgICBhcnJheUNyaXQucHVzaChjcml0ZXJpYU9iamVjdCk7XHJcbiAgICAgICAgcmVxdWVzdC5jcml0ZXJpYSA9IGFycmF5Q3JpdDtcclxuICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0uY3JpdGVyaWFQcm9wTmFtZSAhPT0gbnVsbCAmJiBkYXRhLmNvbXBvbmVudFtpXS5jcml0ZXJpYVByb3BOYW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IF9jcml0UHJvcE5hbWVBcnIgPSAoZGF0YS5jb21wb25lbnRbaV0uY3JpdGVyaWFQcm9wTmFtZSBhcyBzdHJpbmcpLnNwbGl0KFwiO1wiKTtcclxuICAgICAgICAgIGNvbnN0IF9jcml0UHJvcFZhbHVlQXJyID0gKGRhdGEuY29tcG9uZW50W2ldLmNyaXRlcmlhUHJvcFZhbHVlIGFzIHN0cmluZykuc3BsaXQgKFwiO1wiKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IF9jcml0UHJvcE5hbWVBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgcmVxdWVzdFtfY3JpdFByb3BOYW1lQXJyW2ldXSA9IHRoaXMucXVlcnlQYXJhbVtfY3JpdFByb3BWYWx1ZUFycltpXV0gfHwgdXNlckFjY2Vzc1tfY3JpdFByb3BWYWx1ZUFycltpXV0gIHx8IF9jcml0UHJvcFZhbHVlQXJyW2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUGVuZ2VjZWthbiBwZW5nZ3VuYWFuIHVybCBhdGF1IHBhdGhcclxuICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0ucGF0aCAhPSB1bmRlZmluZWQgJiYgZGF0YS5jb21wb25lbnRbaV0ucGF0aCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzICE9IHVuZGVmaW5lZCAmJiB0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHMubGVuZ3RoOyB5KyspIHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0uZW52aXJvbm1lbnQgPT0gdGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzW3ldLmVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS5mdWxscGF0aCA9IHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50c1t5XS51cmwgKyBkYXRhLmNvbXBvbmVudFtpXS5wYXRoO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS5mdWxscGF0aCA9IGRhdGEuY29tcG9uZW50W2ldLnVybDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRhdGEuY29tcG9uZW50W2ldLmZ1bGxwYXRoID0gZGF0YS5jb21wb25lbnRbaV0udXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL2xlbXBhciBvYmplY3RueWEgc2VrYWxpYW4gc2FtYSB1cmxueWEsIG5udGkgZGkgYmluZCBkaSBkYWxlbSBrYXJlbmEgbWFzYWxhaCBkaSBhc3luY255YVxyXG4gICAgICAgIC8vYmlhciB0aWFwIGZ1bmN0aW9uIGFkYSBzdGF0ZTJueWEgc2VuZGlyaVxyXG4gICAgICAgIHRoaXMucmVzb2x2ZU9iamVjdChkYXRhLmNvbXBvbmVudFtpXSwgZGF0YS5jb21wb25lbnRbaV0uZnVsbHBhdGgsIHJlcXVlc3QpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0udHlwZSA9PSBcIm51bWVyaWNcIikge1xyXG4gICAgICAgIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlID0gcGFyc2VGbG9hdChkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSkudG9Mb2NhbGVTdHJpbmcoJ2VuJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vcGVuZ2VjZWthbiBkZGxcclxuICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLnR5cGUgPT0gXCJkcm9wZG93blwiKSB7XHJcbiAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLmR0bVR5cGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0uZHRtVHlwZS5pbmNsdWRlcyhcIm1vbnRoXCIpKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSAhPSB1bmRlZmluZWQgJiYgZGF0YS5jb21wb25lbnRbaV0udmFsdWUuaW5jbHVkZXMoXCJCRFwiKSkge1xyXG4gICAgICAgICAgICAgIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlID0gdGhpcy5zZXREZWZhdWx0VmFsdWVNb250aChkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0YS5jb21wb25lbnRbaV0uaXRlbXMgPSB0aGlzLnNldE1vbnRoRERMKGRhdGEuY29tcG9uZW50W2ldLmR0bVR5cGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLmR0bVR5cGUuaW5jbHVkZXMoXCJ5ZWFyXCIpKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSAhPSB1bmRlZmluZWQgJiYgZGF0YS5jb21wb25lbnRbaV0udmFsdWUuaW5jbHVkZXMoXCJCRFwiKSkge1xyXG4gICAgICAgICAgICAgIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlID0gdGhpcy5zZXREZWZhdWx0VmFsdWVZZWFyKGRhdGEuY29tcG9uZW50W2ldLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS5pdGVtcyA9IHRoaXMuc2V0WWVhckRETChkYXRhLmNvbXBvbmVudFtpXS5kdG1UeXBlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYgKGRhdGEuY29tcG9uZW50W2ldLnR5cGUgPT0gXCJkcm9wZG93blNlYXJjaFwiICYmICFkYXRhLmNvbXBvbmVudFtpXS5pc0Zyb21VUkwgJiYgZGF0YS5jb21wb25lbnRbaV0uaXRlbXM/Lmxlbmd0aCAhPSAxKSB7XHJcbiAgICAgIC8vICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLmRkc1R5cGUgPT0gdW5kZWZpbmVkIHx8IGRhdGEuY29tcG9uZW50W2ldLmRkc1R5cGUgPT0gXCJhbGxcIikge1xyXG4gICAgICAvLyAgICAgZGF0YS5jb21wb25lbnRbaV0udmFsdWUgPSBcImFsbFwiO1xyXG4gICAgICAvLyAgICAgZGF0YS5jb21wb25lbnRbaV0uZGVzY3IgPSBcIkFsbFwiO1xyXG4gICAgICAvLyAgIH0gZWxzZSBpZiAoZGF0YS5jb21wb25lbnRbaV0uZGRzVHlwZSA9PSBcIm9uZVwiKSB7XHJcbiAgICAgIC8vICAgICBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSA9IFwib25lXCI7XHJcbiAgICAgIC8vICAgICBkYXRhLmNvbXBvbmVudFtpXS5kZXNjciA9IFwiU2VsZWN0IE9uZVwiO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0udHlwZSA9PSBcImRyb3Bkb3duU2VhcmNoXCIgJiYgIWRhdGEuY29tcG9uZW50W2ldLmlzRnJvbVVSTCAmJiBkYXRhLmNvbXBvbmVudFtpXS5pdGVtcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlID0gZGF0YS5jb21wb25lbnRbaV0uaXRlbXNbMF0uS2V5O1xyXG4gICAgICAgIGRhdGEuY29tcG9uZW50W2ldLmRlc2NyID0gZGF0YS5jb21wb25lbnRbaV0uaXRlbXNbMF0uVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLnR5cGUgIT0gXCJkcm9wZG93blNlYXJjaFwiICYmICFkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSkge1xyXG4gICAgICAgIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlID0gXCJcIjtcclxuICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0uZGRsVHlwZSA9PSAnYWxsJykgZGF0YS5jb21wb25lbnRbaV0udmFsdWUgPSBcImFsbFwiO1xyXG4gICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS5kZGxUeXBlID09ICdvbmUnKSBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSA9IFwib25lXCI7XHJcbiAgICAgIH1cclxuICAgICAgLy9wZW5nZWNla2FuIHRhbmdnYWxcclxuICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLnR5cGUgPT0gXCJkYXRlcGlja2VyXCIpIHtcclxuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gZGF0YS5jb21wb25lbnRbaV0ucmVhZG9ubHlcclxuXHJcbiAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLmluY2x1ZGVzKFwiQkRcIikpIHtcclxuICAgICAgICAgIGxldCBidXNpbmVzc0RhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuQmlzRHQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBidXNpbmVzc0RhdGUgPSBuZXcgRGF0ZSh0aGlzLkJpc0R0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBvcGVyYXRvciA9IGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLmNoYXJBdCgyKTtcclxuICAgICAgICAgIGxldCBkYXRlU2hvdyA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICBpZiAob3BlcmF0b3IgPT0gXCItXCIpIHtcclxuICAgICAgICAgICAgbGV0IHRlbXBNaW51cyA9IGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLnNwbGl0KFwiLVwiLCAyKTtcclxuICAgICAgICAgICAgbGV0IG51bURheSA9IHBhcnNlSW50KHRlbXBNaW51c1sxXSk7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzRGF0ZS5zZXREYXRlKGJ1c2luZXNzRGF0ZS5nZXREYXRlKCkgLSBudW1EYXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAob3BlcmF0b3IgPT0gXCIrXCIpIHtcclxuICAgICAgICAgICAgbGV0IHRlbXBNaW51cyA9IGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLnNwbGl0KFwiK1wiLCAyKTtcclxuICAgICAgICAgICAgbGV0IG51bURheSA9IHBhcnNlSW50KHRlbXBNaW51c1sxXSk7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzRGF0ZS5zZXREYXRlKGJ1c2luZXNzRGF0ZS5nZXREYXRlKCkgKyBudW1EYXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGF0ZVNob3cgPSBidXNpbmVzc0RhdGU7XHJcbiAgICAgICAgICBsZXQgZGF0ZVRleHQgPSBmb3JtYXREYXRlKGRhdGVTaG93LCAneXl5eS1NTS1kZCcsICdlbi1VUycpXHJcbiAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSA9IGRhdGVUZXh0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLnJlc3RyaWN0aW9uICE9IHVuZGVmaW5lZCAmJiBkYXRhLmNvbXBvbmVudFtpXS5yZXN0cmljdGlvbiAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiR1RcIikge1xyXG4gICAgICAgICAgICAgIGxldCBtaW5EYXRlID0gbmV3IERhdGUodGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0YS5jb21wb25lbnRbaV0ubWluRGF0ZSwgJ3l5eXktTU0tZGQnKSk7XHJcbiAgICAgICAgICAgICAgbWluRGF0ZS5zZXREYXRlKG1pbkRhdGUuZ2V0RGF0ZSgpICsgMSk7XHJcbiAgICAgICAgICAgICAgZGF0YS5jb21wb25lbnRbaV0ubWluRGF0ZSA9IG1pbkRhdGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5jb21wb25lbnRbaV0ucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkxUXCIpIHtcclxuICAgICAgICAgICAgICBsZXQgbWF4RGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGEuY29tcG9uZW50W2ldLm1heERhdGUsICd5eXl5LU1NLWRkJykpO1xyXG4gICAgICAgICAgICAgIG1heERhdGUuc2V0RGF0ZShtYXhEYXRlLmdldERhdGUoKSAtIDEpO1xyXG4gICAgICAgICAgICAgIGRhdGEuY29tcG9uZW50W2ldLm1heERhdGUgPSBtYXhEYXRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihkYXRhLmNvbXBvbmVudFtpXS50eXBlID09IFwidGV4dGJveFwiKSB7XHJcbiAgICAgICAgY29uc3QgaXNVcHBlcmNhc2UgPSBkYXRhLmNvbXBvbmVudFtpXS5pc1VwcGVyY2FzZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGRhdGEuY29tcG9uZW50W2ldLmlzVXBwZXJjYXNlO1xyXG4gICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMuYXV0b2ZpbGwoZGF0YS5jb21wb25lbnRbaV0pO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnRbaV0udmFsdWUgPSBpc1VwcGVyY2FzZSA/IF92YWx1ZS50b1VwcGVyQ2FzZSgpIDogX3ZhbHVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihkYXRhLmNvbXBvbmVudFtpXS50eXBlID09IFwiZHJvcGRvd25cIikge1xyXG4gICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMuYXV0b2ZpbGwoZGF0YS5jb21wb25lbnRbaV0sIGZhbHNlKTtcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2ldLnZhbHVlID0gX3ZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5jb3VudEZvcm07IGorKykge1xyXG4gICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtqXS5pc0V2ZW50ICYmIHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnRbal0uaXRlbXNVcmwubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgIHRoaXMub25DaGFuZ2VFdmVudChkYXRhLmNvbXBvbmVudFtqXS5pdGVtc1VybFswXS5LZXksIGRhdGEuY29tcG9uZW50W2pdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2pdLnR5cGUgPT0gXCJvZmZpY2VSb2xlQ29kZXNcIiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2pdLml0ZW1zVXJsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuU2V0Um9sZU9mZmljZUNvZGVzKGopO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgZ2V0VXNlckFjY2VzcygpIHtcclxuICAgIGNvbnN0IF91c2VyQWNjZXNzOiBzdHJpbmcgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KFwiVXNlckFjY2Vzc1wiKTtcclxuICAgIGNvbnN0IHVzZXJBY2Nlc3MgPSBKU09OLnBhcnNlKHRoaXMuRGVjcnlwdFN0cmluZyhfdXNlckFjY2VzcywgXCJBZEluc0ZPVTEyMzQ1Njc4XCIpKTtcclxuICAgIHJldHVybiB1c2VyQWNjZXNzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhdXRvZmlsbChkYXRhOiBhbnksIGNoZWNrVmFsdWU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBpZiAoY2hlY2tWYWx1ZSkge1xyXG4gICAgICBpZiAoZGF0YS52YWx1ZSAhPSBcIlwiKSByZXR1cm4gZGF0YS52YWx1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGF1dG9maWxsOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0gZGF0YS5hdXRvZmlsbDtcclxuICAgIGlmIChhdXRvZmlsbCA9PSB1bmRlZmluZWQpIHJldHVybiBkYXRhLnZhbHVlO1xyXG4gICAgaWYgKGF1dG9maWxsLnNvdXJjZSA9PSBcInBhcmFtXCIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucXVlcnlQYXJhbVthdXRvZmlsbC5rZXldO1xyXG4gICAgfVxyXG4gICAgaWYgKGF1dG9maWxsLnNvdXJjZSA9PSBcInVzZXJhY2Nlc3NcIikge1xyXG4gICAgICBjb25zdCB1c2VyQWNjZXNzID0gdGhpcy5nZXRVc2VyQWNjZXNzKCk7XHJcbiAgICAgIHJldHVybiB1c2VyQWNjZXNzW2F1dG9maWxsLmtleV07XHJcbiAgICB9XHJcbiAgICBpZiAoYXV0b2ZpbGwuc291cmNlID09IFwiZGljdHNcIikge1xyXG4gICAgICBpZiAoIXRoaXMuc2VhcmNoSW5wdXQuZGljdHMpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImRpY3RzIHVuZGVmaW5lZC4uLlwiKTtcclxuICAgICAgICByZXR1cm4gYXV0b2ZpbGwua2V5O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaElucHV0Py5kaWN0c1thdXRvZmlsbC5rZXldID8/IGF1dG9maWxsLmtleTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgU2V0Um9sZU9mZmljZUNvZGVzKGk6IG51bWJlcikge1xyXG4gICAgbGV0IHVzZXJBY2Nlc3M6IHN0cmluZyA9IHRoaXMuZ2V0VXNlckFjY2VzcygpO1xyXG4gICAgbGV0IHJvbGVDb2RlOiBzdHJpbmcgPSB1c2VyQWNjZXNzW1wiUm9sZUNvZGVcIl07XHJcbiAgICBsZXQgbGlzdE9mZmljZVJvbGVDb2RlczogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheSgpO1xyXG4gICAgbGlzdE9mZmljZVJvbGVDb2Rlcy5wdXNoKHJvbGVDb2RlKTtcclxuICAgIGxldCBjb21wb25lbnQgPSB0aGlzLm15Rm9ybS5uYXRpdmVFbGVtZW50W2ldO1xyXG4gICAgbGV0IGRkbCA9IGNvbXBvbmVudC5vcHRpb25zO1xyXG4gICAgbGV0IHRleHQgPSBkZGxbZGRsLnNlbGVjdGVkSW5kZXhdLnZhbHVlLnRyaW0oKTtcclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2ldLml0ZW1zVXJsLmxlbmd0aCA9PSAxIHx8ICh0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2ldLmRkbFR5cGUgPT0gJ2FsbCcgJiYgdGV4dCA9PSAnYWxsJykpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnRbaV0uaXRlbXNVcmwubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnRbaV0uaXRlbXNVcmxbaW5kZXhdO1xyXG4gICAgICAgIGxpc3RPZmZpY2VSb2xlQ29kZXMucHVzaChlbGVtZW50LktleSk7XHJcbiAgICAgICAgbGlzdE9mZmljZVJvbGVDb2Rlcy5wdXNoKHJvbGVDb2RlICsgXCItXCIgKyBlbGVtZW50LktleSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxpc3RPZmZpY2VSb2xlQ29kZXMucHVzaCh0ZXh0KTtcclxuICAgICAgbGlzdE9mZmljZVJvbGVDb2Rlcy5wdXNoKHJvbGVDb2RlICsgXCItXCIgKyB0ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlYXJjaElucHV0LmludGVncmF0aW9uT2JqLnJlcXVlc3RPYmpbXCJPZmZpY2VSb2xlQ29kZXNcIl0gPSBsaXN0T2ZmaWNlUm9sZUNvZGVzO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFZhbHVlTW9udGgodmFsdWUpIHtcclxuICAgIGxldCBidXNpbmVzc0RhdGUgPSBuZXcgRGF0ZSh0aGlzLkJ1c2luZXNzRHQpO1xyXG4gICAgbGV0IG9wZXJhdG9yID0gdmFsdWUuY2hhckF0KDIpO1xyXG4gICAgbGV0IHRlbXBWYWx1ZSA9IHZhbHVlLnNwbGl0KG9wZXJhdG9yLCAyKTtcclxuICAgIGxldCBudW1Nb250aCA9IHBhcnNlSW50KHRlbXBWYWx1ZVsxXSk7XHJcbiAgICBpZiAoIW51bU1vbnRoKSBudW1Nb250aCA9IDE7XHJcbiAgICBpZiAob3BlcmF0b3IgPT0gXCItXCIpIHtcclxuICAgICAgYnVzaW5lc3NEYXRlLnNldE1vbnRoKGJ1c2luZXNzRGF0ZS5nZXRNb250aCgpIC0gbnVtTW9udGgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAob3BlcmF0b3IgPT0gXCIrXCIpIHtcclxuICAgICAgYnVzaW5lc3NEYXRlLnNldE1vbnRoKGJ1c2luZXNzRGF0ZS5nZXRNb250aCgpICsgbnVtTW9udGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1c2luZXNzRGF0ZS5nZXRNb250aCgpO1xyXG4gIH1cclxuICBzZXRNb250aERETChtb250aCkge1xyXG4gICAgaWYgKG1vbnRoID09IFwibW9udGhcIikgcmV0dXJuIHRoaXMuTGlzdE9mTW9udGguTGlzdE9mTW9udGg7XHJcbiAgICBsZXQgTGlzdE9mTW9udGg6IEFycmF5PEtleVZhbHVlVUNTZWFyY2hPYmo+ID0gbmV3IEFycmF5KCk7XHJcbiAgICBsZXQgZXF1YXRpb24gPSBtb250aC5tYXRjaChcIltcXFxcK11bLV18Wy1dW1xcXFwrXXxcXFxcK3wtXCIpO1xyXG4gICAgbGV0IHRvTWluOiBudW1iZXIgPSB0aGlzLkJ1c2luZXNzRHQuZ2V0TW9udGgoKTtcclxuICAgIGxldCB0b01heDogbnVtYmVyID0gdGhpcy5CdXNpbmVzc0R0LmdldE1vbnRoKCk7XHJcbiAgICBsZXQgbWluTWF4OiBudW1iZXIgPSBwYXJzZUludChtb250aC5zdWJzdHJpbmcoZXF1YXRpb24uaW5kZXggKyBlcXVhdGlvblswXS5sZW5ndGgpKTtcclxuICAgIGlmIChtaW5NYXggPj0gMTIpIHJldHVybiB0aGlzLkxpc3RPZk1vbnRoLkxpc3RPZk1vbnRoO1xyXG4gICAgaWYgKChlcXVhdGlvblswXSA9PSBcIistXCIgfHwgZXF1YXRpb25bMF0gPT0gXCItK1wiKSAmJiBtaW5NYXggPj0gNikgcmV0dXJuIHRoaXMuTGlzdE9mTW9udGguTGlzdE9mTW9udGg7XHJcbiAgICBsZXQgZGljdE9mTW9udGg6IHsgW21vbnRoOiBudW1iZXJdOiBzdHJpbmcgfSA9IHRoaXMuTGlzdE9mTW9udGguRGljdE9mTW9udGg7XHJcbiAgICBMaXN0T2ZNb250aC5wdXNoKHsga2V5OiB0b01pbiwgdmFsdWU6IGRpY3RPZk1vbnRoW3RvTWluXSB9KTtcclxuXHJcbiAgICBmb3IgKGxldCBxID0gMDsgcSA8IG1pbk1heDsgcSsrKSB7XHJcbiAgICAgIGlmIChlcXVhdGlvblswXS5pbmNsdWRlcyhcIi1cIikpIHtcclxuICAgICAgICB0b01pbi0tO1xyXG4gICAgICAgIGlmICh0b01pbiA9PSAwKSB0b01pbiA9IDEyO1xyXG4gICAgICAgIExpc3RPZk1vbnRoLnB1c2goeyBrZXk6IHRvTWluLCB2YWx1ZTogZGljdE9mTW9udGhbdG9NaW5dIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlcXVhdGlvblswXS5pbmNsdWRlcyhcIitcIikpIHtcclxuICAgICAgICB0b01heCsrO1xyXG4gICAgICAgIGlmICh0b01heCA9PSAxMykgdG9NYXggPSAxO1xyXG4gICAgICAgIExpc3RPZk1vbnRoLnB1c2goeyBrZXk6IHRvTWF4LCB2YWx1ZTogZGljdE9mTW9udGhbdG9NYXhdIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBMaXN0T2ZNb250aC5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIHJldHVybiBhLmtleSAtIGIua2V5O1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gTGlzdE9mTW9udGg7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0VmFsdWVZZWFyKHZhbHVlKSB7XHJcbiAgICBsZXQgYnVzaW5lc3NEYXRlID0gbmV3IERhdGUodGhpcy5CdXNpbmVzc0R0KTtcclxuICAgIGxldCBvcGVyYXRvciA9IHZhbHVlLmNoYXJBdCgyKTtcclxuICAgIGxldCB0ZW1wVmFsdWUgPSB2YWx1ZS5zcGxpdChvcGVyYXRvciwgMik7XHJcbiAgICBsZXQgbnVtWWVhciA9IHBhcnNlSW50KHRlbXBWYWx1ZVsxXSk7XHJcbiAgICBpZiAoIW51bVllYXIpIG51bVllYXIgPSAxO1xyXG4gICAgaWYgKG9wZXJhdG9yID09IFwiLVwiKSB7XHJcbiAgICAgIGJ1c2luZXNzRGF0ZS5zZXRGdWxsWWVhcihidXNpbmVzc0RhdGUuZ2V0RnVsbFllYXIoKSAtIG51bVllYXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAob3BlcmF0b3IgPT0gXCIrXCIpIHtcclxuICAgICAgYnVzaW5lc3NEYXRlLnNldEZ1bGxZZWFyKGJ1c2luZXNzRGF0ZS5nZXRGdWxsWWVhcigpICsgbnVtWWVhcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnVzaW5lc3NEYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG4gIHNldFllYXJEREwoeWVhcikge1xyXG4gICAgdGhpcy5MaXN0T2ZZZWFyID0gbmV3IEFycmF5PEtleVZhbHVlVUNTZWFyY2hPYmo+KCk7XHJcbiAgICBsZXQgZXF1YXRpb24gPSB5ZWFyLm1hdGNoKFwiW1xcXFwrXVstXXxbLV1bXFxcXCtdfFxcXFwrfC1cIik7XHJcbiAgICBsZXQgdG9NaW46IG51bWJlciA9IHRoaXMuQnVzaW5lc3NEdC5nZXRGdWxsWWVhcigpO1xyXG4gICAgbGV0IHRvTWF4OiBudW1iZXIgPSB0aGlzLkJ1c2luZXNzRHQuZ2V0RnVsbFllYXIoKTtcclxuICAgIGxldCBtaW5NYXg6IG51bWJlciA9IHBhcnNlSW50KHllYXIuc3Vic3RyaW5nKGVxdWF0aW9uLmluZGV4ICsgZXF1YXRpb25bMF0ubGVuZ3RoKSk7XHJcbiAgICB0aGlzLkxpc3RPZlllYXIucHVzaCh7IGtleTogdGhpcy5CdXNpbmVzc0R0LmdldEZ1bGxZZWFyKCksIHZhbHVlOiB0aGlzLkJ1c2luZXNzRHQuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpIH0pO1xyXG5cclxuICAgIGZvciAobGV0IHEgPSAwOyBxIDwgbWluTWF4OyBxKyspIHtcclxuICAgICAgaWYgKGVxdWF0aW9uWzBdID09IFwiLStcIiB8fCBlcXVhdGlvblswXSA9PSBcIistXCIpIHtcclxuICAgICAgICB0b01pbi0tO1xyXG4gICAgICAgIHRvTWF4Kys7XHJcbiAgICAgICAgdGhpcy5MaXN0T2ZZZWFyLnB1c2goeyBrZXk6IHRvTWluLCB2YWx1ZTogdG9NaW4udG9TdHJpbmcoKSB9LCB7IGtleTogdG9NYXgsIHZhbHVlOiB0b01heC50b1N0cmluZygpIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGVxdWF0aW9uWzBdID09IFwiLVwiKSB7XHJcbiAgICAgICAgdG9NaW4tLTtcclxuICAgICAgICB0aGlzLkxpc3RPZlllYXIucHVzaCh7IGtleTogdG9NaW4sIHZhbHVlOiB0b01pbi50b1N0cmluZygpIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKGVxdWF0aW9uWzBdID09IFwiK1wiKSB7XHJcbiAgICAgICAgdG9NYXgrKztcclxuICAgICAgICB0aGlzLkxpc3RPZlllYXIucHVzaCh7IGtleTogdG9NYXgsIHZhbHVlOiB0b01heC50b1N0cmluZygpIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLkxpc3RPZlllYXIuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICByZXR1cm4gYS5rZXkgLSBiLmtleTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuTGlzdE9mWWVhcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRKU09OKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcG9zdEpTT04odXJsOiBzdHJpbmcsIGNyaXRlcmlhOiBhbnkgPSBudWxsKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIGNyaXRlcmlhKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaENsaWNrKElzRXhwb3J0RXhjZWw6IGJvb2xlYW4gPSBmYWxzZSwgRXh0RmlsZTogc3RyaW5nID0gXCJcIikge1xyXG4gICAgbGV0IGZpbHRlcmVkID0gdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudC5maWx0ZXIoKGl0ZW0sIGksIGFycikgPT5cclxuICAgICAgYXJyLmZpbmRJbmRleCgoeCkgPT4gKHgubmFtZSA9PT0gaXRlbS5uYW1lKSkgPT09IGkpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVyZWQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGZpbHRlcmVkW2ldLnR5cGUgPT0gXCJudW1lcmljXCIpIHtcclxuICAgICAgICBpZighdGhpcy5jaGVja1ZhbHVlR3RlTHRlKGZpbHRlcmVkW2ldKSkgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9yZGVyID0gbnVsbDtcclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24ub3JkZXJieSAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24ub3JkZXJieS5rZXkgIT09IFwiXCIgJiYgdGhpcy5jb25maWd1cmF0aW9uLm9yZGVyYnkudmFsdWUgIT09IFwiXCIpIHtcclxuICAgICAgICBvcmRlciA9IHtcclxuICAgICAgICAgIGtleTogdGhpcy5jb25maWd1cmF0aW9uLm9yZGVyYnkua2V5LFxyXG4gICAgICAgICAgdmFsdWU6IHRoaXMuY29uZmlndXJhdGlvbi5vcmRlcmJ5LnZhbHVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2VOb3cgPSAxO1xyXG4gICAgbGV0IHJvd1BlclBhZ2UgPSB0aGlzLnBhZ2VTaXplO1xyXG4gICAgaWYgKElzRXhwb3J0RXhjZWwpIHJvd1BlclBhZ2UgPSA5OTk5O1xyXG4gICAgdGhpcy5zZWFyY2godGhpcy5hcGlVcmwsIHRoaXMucGFnZU5vdywgcm93UGVyUGFnZSwgb3JkZXIsIHRydWUsIHRoaXMuYXJyQ3JpdCwgSXNFeHBvcnRFeGNlbCwgRXh0RmlsZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXNldCgpIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5yZXNldEZvcm0oe1xyXG4gICAgICBFeHBvcnRUeXBlOiB0aGlzLkV4cG9ydFR5cGVMaXN0WzBdLmtleVxyXG4gICAgfSk7XHJcbiAgICBhd2FpdCB0aGlzLmluaXRpYXRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2VhcmNoKGFwaVVybDogc3RyaW5nLCBwYWdlTm86IG51bWJlciwgcm93UGVyUGFnZTogbnVtYmVyLCBvcmRlckJ5OiBhbnksIGlzQ2xpY2tTZWFyY2g6IGJvb2xlYW4sIGFkZENyaXQ6IENyaXRlcmlhT2JqW10gPSBuZXcgQXJyYXkoKSwgSXNFeHBvcnRFeGNlbDogYm9vbGVhbiA9IGZhbHNlLCBleHRGaWxlOiBzdHJpbmcgPSBcIlwiLCBpc0FkZFRvVGVtcDogYm9vbGVhbiA9IGZhbHNlLCBhZGRUb1RlbXBDcml0OiBDcml0ZXJpYU9ialtdID0gbmV3IEFycmF5KCkpIHtcclxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFJlcXVlc3RDcml0ZXJpYU9iaigpO1xyXG4gICAgbGV0IGFyckNyaXQgPSBuZXcgQXJyYXkoKTtcclxuICAgIGxldCBJc1F1ZXJ5SW4gPSBmYWxzZTtcclxuICAgIGxldCBJc0JyZWFrID0gZmFsc2U7XHJcbiAgICBsZXQgYm9keUxpc3QgPSBuZXcgQXJyYXkoKTtcclxuICAgIGxldCBoZWFkZXJMaXN0ID0gbmV3IEFycmF5KCk7XHJcbiAgICBsZXQgZmlsZU5hbWU6IHN0cmluZztcclxuICAgIGxldCBib2R5RGF0YSA9IG5ldyBBcnJheSgpO1xyXG4gICAgbGV0IGRhdGFGaWxlID0gbmV3IEFycmF5KCk7XHJcbiAgICBsZXQgYWRkaXRpb25hbEV4cG9ydExpc3QgPSBuZXcgQXJyYXkoKTtcclxuICAgIGxldCBleGNsdWRlRXhwb3J0TGlzdCA9IG5ldyBBcnJheSgpO1xyXG5cclxuICAgIGNvbnN0IG1hcHBlZENvbmZOYW1lVmFsdWUgPSB7fTtcclxuICAgICh0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50IGFzIFtdKS5mb3JFYWNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgbWFwcGVkQ29uZk5hbWVWYWx1ZVt4Lm5hbWVdID0ge1xyXG4gICAgICAgIHZhbHVlOiB4LnZhbHVlLFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIEluamVjdCB3aGVyZVF1ZXJ5IGZvciB3aGVyZSBjcml0ZXJpYVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQud2hlcmVWYWx1ZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5zZWFyY2hJbnB1dC53aGVyZVZhbHVlLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5xdWVyeXN0cmluZy53aGVyZVF1ZXJ5ID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnNlYXJjaElucHV0LndoZXJlVmFsdWUubGVuZ3RoOyB4KyspIHtcclxuICAgICAgICAvLyByZWFkIHZhbHVlIGJhc2VkIG9uIHNlYXJjaCBjb21wb25lbnQgdmFsdWUgLSBpZiBub3QgZm91bmQsIHdpbGwgaGFyZGNvZGVkXHJcbiAgICAgICAgY29uc3QgX3ZhbCA9IG1hcHBlZENvbmZOYW1lVmFsdWVbdGhpcy5zZWFyY2hJbnB1dC53aGVyZVZhbHVlW3hdLnZhbHVlXSA/IG1hcHBlZENvbmZOYW1lVmFsdWVbdGhpcy5zZWFyY2hJbnB1dC53aGVyZVZhbHVlW3hdLnZhbHVlXS52YWx1ZSA6IHRoaXMuc2VhcmNoSW5wdXQud2hlcmVWYWx1ZVt4XS52YWx1ZTtcclxuICAgICAgICAvLyB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlzdHJpbmcud2hlcmVRdWVyeS5wdXNoKHRoaXMuc2VhcmNoSW5wdXQud2hlcmVWYWx1ZVt4XS52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnF1ZXJ5c3RyaW5nLndoZXJlUXVlcnkucHVzaChfdmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuZnJvbVZhbHVlICE9IHVuZGVmaW5lZCAmJiB0aGlzLnNlYXJjaElucHV0LmZyb21WYWx1ZS5sZW5ndGggIT0gMCkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlzdHJpbmcuZnJvbVF1ZXJ5ID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCB0aGlzLnNlYXJjaElucHV0LmZyb21WYWx1ZS5sZW5ndGg7IHgrKykge1xyXG4gICAgICAgIC8vIHJlYWQgdmFsdWUgYmFzZWQgb24gc2VhcmNoIGNvbXBvbmVudCB2YWx1ZSAtIGlmIG5vdCBmb3VuZCwgd2lsbCBoYXJkY29kZWRcclxuICAgICAgICBjb25zdCBfdmFsID0gbWFwcGVkQ29uZk5hbWVWYWx1ZVt0aGlzLnNlYXJjaElucHV0LmZyb21WYWx1ZVt4XS52YWx1ZV0gPyBtYXBwZWRDb25mTmFtZVZhbHVlW3RoaXMuc2VhcmNoSW5wdXQuZnJvbVZhbHVlW3hdLnZhbHVlXS52YWx1ZSA6IHRoaXMuc2VhcmNoSW5wdXQuZnJvbVZhbHVlW3hdLnZhbHVlO1xyXG4gICAgICAgIC8vIHRoaXMuY29uZmlndXJhdGlvbi5xdWVyeXN0cmluZy5mcm9tUXVlcnkucHVzaCh0aGlzLnNlYXJjaElucHV0LmZyb21WYWx1ZVt4XS52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnF1ZXJ5c3RyaW5nLmZyb21RdWVyeS5wdXNoKF92YWwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXF1ZXN0LnBhZ2VObyA9IHBhZ2VObztcclxuICAgIHJlcXVlc3Qucm93UGVyUGFnZSA9IHJvd1BlclBhZ2U7XHJcbiAgICByZXF1ZXN0Lm9yZGVyQnkgPSBvcmRlckJ5O1xyXG4gICAgcmVxdWVzdC5xdWVyeVN0cmluZyA9IHRoaXMuY29uZmlndXJhdGlvbi5xdWVyeXN0cmluZztcclxuXHJcbiAgICBsZXQgZm9ybVNlcTogbnVtYmVyID0gLTE7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY291bnRGb3JtOyBpKyspIHtcclxuICAgICAgbGV0IGNyaXRPYmogPSBuZXcgQ3JpdGVyaWFPYmooKTtcclxuICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnRbaV0udHlwZSA9PSBcImRyb3Bkb3duU2VhcmNoXCIpIHtcclxuICAgICAgICBmb3JtU2VxICs9IDM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9ybVNlcSsrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLm15Rm9ybS5uYXRpdmVFbGVtZW50W2Zvcm1TZXFdO1xyXG5cclxuICAgICAgLy8gLy8gcG9wdXAgbWVzc2FnZSBpZiByZXF1aXJlZFxyXG4gICAgICAvLyBpZiAoY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlZCcpICE9IG51bGwgJiYgY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yZXF1aXJlZCcpID09IFwidHJ1ZVwiKSB7XHJcbiAgICAgIC8vICAgbGV0IHZhbCA9IGNvbXBvbmVudC52YWx1ZS50cmltKCk7XHJcbiAgICAgIC8vICAgaWYgKHZhbCA9PSBcIlwiKSB7XHJcbiAgICAgIC8vICAgICBJc0JyZWFrID0gdHJ1ZTtcclxuICAgICAgLy8gICAgIGxldCBsYWJlbCA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2xhYmVsJyk7XHJcbiAgICAgIC8vICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKFwiUGxlYXNlIGlucHV0IFwiICsgbGFiZWwpO1xyXG4gICAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICBjcml0T2JqLkRhdGFUeXBlID0gY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10eXBlJyk7XHJcbiAgICAgIGlmICghY3JpdE9iai5EYXRhVHlwZSkgY3JpdE9iai5EYXRhVHlwZSA9IFwiXCI7XHJcbiAgICAgIC8vSW5pIGtodXN1cyBrYWxhdSBkYXJpIERyb3AgRG93blxyXG4gICAgICBpZiAoY29tcG9uZW50LmdldEF0dHJpYnV0ZSgncXVlcnktaW4nKSAhPSBudWxsICYmIGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ3F1ZXJ5LWluJykgPT0gXCJ0cnVlXCIpIHtcclxuICAgICAgICBJc1F1ZXJ5SW4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIElzUXVlcnlJbiA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb21wb25lbnQudmFsdWUgIT0gXCJcIikge1xyXG4gICAgICAgIGlmIChjb21wb25lbnQubm9kZU5hbWUgPT0gJ1NFTEVDVCcpIHtcclxuICAgICAgICAgIGxldCBkZGwgPSBjb21wb25lbnQub3B0aW9ucztcclxuICAgICAgICAgIGxldCB0ZXh0ID0gZGRsW2RkbC5zZWxlY3RlZEluZGV4XS52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgICBpZiAodGV4dCA9PSBcIm9uZVwiKSB7XHJcbiAgICAgICAgICAgIElzQnJlYWsgPSB0cnVlO1xyXG4gICAgICAgICAgICBsZXQgbGFiZWwgPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdsYWJlbCcpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKFwiUGxlYXNlIHNlbGVjdCBcIiArIGxhYmVsKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3JpdC1kYXRhdGFibGUnKSAhPSBcIlwiICYmIGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3JpdC1kYXRhdGFibGUnKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNyaXRPYmouaXNDcml0ZXJpYURhdGFUYWJsZSA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3JpdC1kYXRhdGFibGUnKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudFtpXS50eXBlID09IFwidGFza0RlZmluaXRpb25LZXlcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2ldLnR5cGUgPT0gXCJwcm9jZXNzS2V5XCIpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2ldLnR5cGUgPT0gXCJjbGFpbVwiKSB7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucHJvcE5hbWUgPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW5hbWUnKTtcclxuICAgICAgICAgICAgY3JpdE9iai5yZXN0cmljdGlvbiA9IHRleHQ7XHJcbiAgICAgICAgICAgIGNyaXRPYmoudmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoIWlzQWRkVG9UZW1wKSB7XHJcbiAgICAgICAgICAgICAgYXJyQ3JpdC5wdXNoKGNyaXRPYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGV4dCAhPSBcImFsbFwiICYmIHRleHQgIT0gXCJvbmVcIikge1xyXG4gICAgICAgICAgICAgIC8vS2FsYXUgRGFyaSBEcm9wZG93biB1ZGFoIHBhc3RpIHBha2UgRXFcclxuICAgICAgICAgICAgICBjcml0T2JqLnJlc3RyaWN0aW9uID0gQWRJbnNDb25zdGFudC5SZXN0cmljdGlvbkVxO1xyXG4gICAgICAgICAgICAgIGlmIChjb21wb25lbnQubmFtZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICBjcml0T2JqLnByb3BOYW1lID0gY29tcG9uZW50Lm5hbWU7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNyaXRPYmoucHJvcE5hbWUgPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW5hbWUnKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY3JpdE9iai52YWx1ZSA9IHRleHQ7XHJcbiAgICAgICAgICAgICAgaWYgKCFpc0FkZFRvVGVtcCkge1xyXG4gICAgICAgICAgICAgICAgYXJyQ3JpdC5wdXNoKGNyaXRPYmopO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0ZXh0ID09IFwiYWxsXCIgJiYgSXNRdWVyeUluICYmIGNvbXBvbmVudC5vcHRpb25zLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGRkbExpc3QgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IGNvbXBvbmVudC5vcHRpb25zLmxlbmd0aDsgeCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeCAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGRkbExpc3QucHVzaChjb21wb25lbnQub3B0aW9uc1t4XS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChkZGxMaXN0Lmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICBjcml0T2JqLnJlc3RyaWN0aW9uID0gQWRJbnNDb25zdGFudC5SZXN0cmljdGlvbkluO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5uYW1lICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3JpdE9iai5saXN0VmFsdWUgPSBkZGxMaXN0O1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc0FkZFRvVGVtcCkge1xyXG4gICAgICAgICAgICAgICAgICBhcnJDcml0LnB1c2goY3JpdE9iaik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy9LYWxhdSBhZGEgUGVyY2VudCBtYWthIHlhbmcgZGlwYWtlIG5udGkgYWRhbGFoIFJlc3RyaWN0aW9ucyBMaWtlXHJcbiAgICAgICAgICBpZiAoY29tcG9uZW50Lm5hbWUgIT0gXCJcIikge1xyXG4gICAgICAgICAgICBjcml0T2JqLnByb3BOYW1lID0gY29tcG9uZW50Lm5hbWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjcml0T2JqLnByb3BOYW1lID0gY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjcml0T2JqLnZhbHVlID0gY29tcG9uZW50LnZhbHVlLnRyaW0oKTtcclxuICAgICAgICAgIGlmIChjb21wb25lbnQudmFsdWUuaW5jbHVkZXMoXCIlXCIpKSB7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBBZEluc0NvbnN0YW50LlJlc3RyaWN0aW9uTGlrZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8va2FsYXUgY29tcG9uZW50bnlhIERhdGUsIHJlc3RyaWN0aW9uc255YSBsZ3NnIGFtYmlsIGRhcmkgcHJvcGVydHkgSlNPTm55YVxyXG4gICAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yZXN0cmljdGlvbicpICE9IFwiXCIgJiYgY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1yZXN0cmljdGlvbicpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY3JpdE9iai5yZXN0cmljdGlvbiA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVzdHJpY3Rpb24nKTtcclxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScpID09ICdudW1lcmljJykge1xyXG4gICAgICAgICAgICAgIGNyaXRPYmoudmFsdWUgPSBwYXJzZUZsb2F0KGNvbXBvbmVudC52YWx1ZS5yZXBsYWNlKC8sL2csICcnKSkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY3JpdE9iai5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiTElLRVwiKSB7XHJcbiAgICAgICAgICAgICAgY3JpdE9iai52YWx1ZSA9IFwiJVwiICsgY29tcG9uZW50LnZhbHVlLnRyaW0oKSArIFwiJVwiO1xyXG4gICAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBBZEluc0NvbnN0YW50LlJlc3RyaWN0aW9uTGlrZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY3JpdE9iai5yZXN0cmljdGlvbiA9IEFkSW5zQ29uc3RhbnQuUmVzdHJpY3Rpb25FcVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3JpdC1kYXRhdGFibGUnKSAhPSBcIlwiICYmIGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3JpdC1kYXRhdGFibGUnKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNyaXRPYmouaXNDcml0ZXJpYURhdGFUYWJsZSA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY3JpdC1kYXRhdGFibGUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghaXNBZGRUb1RlbXApIHtcclxuICAgICAgICAgICAgYXJyQ3JpdC5wdXNoKGNyaXRPYmopO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChJc0JyZWFrKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYWRkQ3JpdCAhPSBudWxsICYmIGFkZENyaXQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChhZGRDcml0Lmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRDcml0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBhcnJDcml0LnB1c2goYWRkQ3JpdFtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0ICE9IG51bGwgfHwgdGhpcy5zZWFyY2hJbnB1dC5hZGRDcml0SW5wdXQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlYXJjaElucHV0LmFkZENyaXRJbnB1dC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgYXJyQ3JpdC5wdXNoKHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0W2ldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0ICE9IG51bGwgfHwgdGhpcy5zZWFyY2hJbnB1dC5hZGRDcml0SW5wdXQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWFyY2hJbnB1dC5hZGRDcml0SW5wdXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBhcnJDcml0LnB1c2godGhpcy5zZWFyY2hJbnB1dC5hZGRDcml0SW5wdXRbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzQ2xpY2tTZWFyY2gpIHtcclxuICAgICAgdGhpcy5wZXJzaXN0Q3JpdCA9IGFyckNyaXQ7XHJcbiAgICB9XHJcbiAgICByZXF1ZXN0LmNyaXRlcmlhID0gdGhpcy5wZXJzaXN0Q3JpdDtcclxuXHJcbiAgICBpZiAoaXNBZGRUb1RlbXApIHtcclxuICAgICAgdGhpcy5wZXJzaXN0QWRkVG9UZW1wQ3JpdCA9IGFkZFRvVGVtcENyaXQ7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnBlcnNpc3RBZGRUb1RlbXBDcml0ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmVxdWVzdC5jcml0ZXJpYSA9IHJlcXVlc3QuY3JpdGVyaWEuY29uY2F0KHRoaXMucGVyc2lzdEFkZFRvVGVtcENyaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZpbHRlciBkdXBsaWNhdGUgZGF0YSBpbiBhcnJheVxyXG4gICAgcmVxdWVzdC5jcml0ZXJpYSA9IHRoaXMuZmlsdGVyRHVwbGljYXRlRGF0YShyZXF1ZXN0LmNyaXRlcmlhKVxyXG4gICAgXHJcbiAgICAvLyBmaWx0ZXIgZW1wdHkgdmFsdWUgaW4gbGlzdFZhbHVlXHJcbiAgICByZXF1ZXN0LmNyaXRlcmlhID0gdGhpcy5maWx0ZXJMaXN0VmFsdWVFbXB0eShyZXF1ZXN0LmNyaXRlcmlhKTtcclxuXHJcbiAgICByZXF1ZXN0LmludGVncmF0aW9uT2JqID0gbnVsbDtcclxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0LmlzSm9pbkV4QVBJKSB7XHJcbiAgICAgIHJlcXVlc3QuaW50ZWdyYXRpb25PYmogPSB0aGlzLnNlYXJjaElucHV0LmludGVncmF0aW9uT2JqO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaXNTZWFyY2ggPSB0cnVlOyBcclxuXHJcbiAgICBcclxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0LmRhdGFJbnB1dCAhPT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKHRoaXMuc2VhcmNoSW5wdXQuZGF0YUlucHV0KS5sZW5ndGggIT09IDApIHtcclxuICAgICAgYm9keUxpc3QgPSB0aGlzLnNlYXJjaElucHV0LmRhdGFJbnB1dC5ib2R5TGlzdDtcclxuICAgICAgZmlsZU5hbWUgPSB0aGlzLnNlYXJjaElucHV0LmRhdGFJbnB1dC50aXRsZTtcclxuICAgICAgaGVhZGVyTGlzdCA9IHRoaXMuc2VhcmNoSW5wdXQuZGF0YUlucHV0LmhlYWRlckxpc3Q7XHJcbiAgICAgIGFkZGl0aW9uYWxFeHBvcnRMaXN0ID0gdGhpcy5zZWFyY2hJbnB1dC5kYXRhSW5wdXQuYWRkaXRpb25hbEV4cG9ydExpc3Q7XHJcbiAgICAgIGV4Y2x1ZGVFeHBvcnRMaXN0ID0gdGhpcy5zZWFyY2hJbnB1dC5kYXRhSW5wdXQuZXhjbHVkZUV4cG9ydExpc3Q7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhd2FpdCB0aGlzLmh0dHAuZ2V0KHRoaXMuc2VhcmNoSW5wdXQuX3VybCkudG9Qcm9taXNlKCkudGhlbigoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgYm9keUxpc3QgPSBkYXRhLmJvZHlMaXN0XHJcbiAgICAgICAgZmlsZU5hbWUgPSBkYXRhLnRpdGxlXHJcbiAgICAgICAgaGVhZGVyTGlzdCA9IGRhdGEuaGVhZGVyTGlzdFxyXG4gICAgICAgIGFkZGl0aW9uYWxFeHBvcnRMaXN0ID0gZGF0YS5hZGRpdGlvbmFsRXhwb3J0TGlzdDtcclxuICAgICAgICBleGNsdWRlRXhwb3J0TGlzdCA9IGRhdGEuZXhjbHVkZUV4cG9ydExpc3Q7XHJcbiAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmh0dHAucG9zdChhcGlVcmwsIHJlcXVlc3QpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgaWYgKElzRXhwb3J0RXhjZWwpIHtcclxuICAgICAgICBib2R5RGF0YSA9IHJlc3BvbnNlW1wiRGF0YVwiXTtcclxuICAgICAgICBbaGVhZGVyTGlzdCwgYm9keUxpc3RdID0gdGhpcy5jaGVja0FkZGl0aW9uYWxFeHBvcnRMaXN0KGhlYWRlckxpc3QsIGJvZHlMaXN0LCBhZGRpdGlvbmFsRXhwb3J0TGlzdCk7XHJcbiAgICAgICAgW2hlYWRlckxpc3QsIGJvZHlMaXN0XSA9IHRoaXMuY2hlY2tFeGNsdWRlRXhwb3J0TGlzdChoZWFkZXJMaXN0LCBib2R5TGlzdCwgZXhjbHVkZUV4cG9ydExpc3QpO1xyXG4gICAgICAgIGRhdGFGaWxlID0gdGhpcy5tYXBEYXRhRmlsZShib2R5TGlzdCwgYm9keURhdGEsIGhlYWRlckxpc3QpO1xyXG4gICAgICAgIGlmIChleHRGaWxlID09PSBFWFBPUlRfREFUQV9UWVBFUy5leGNlbCkge1xyXG4gICAgICAgICAgdGhpcy5leHBvcnRGaWxlU2VydmljZS5leHBvcnRGaWxlQXNFeGNlbChkYXRhRmlsZSwgZmlsZU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0RmlsZSA9PT0gRVhQT1JUX0RBVEFfVFlQRVMuanNvbikge1xyXG4gICAgICAgICAgdGhpcy5leHBvcnRGaWxlU2VydmljZS5leHBvcnRGaWxlQXNKc29uKGRhdGFGaWxlLCBmaWxlTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRGaWxlID09PSBFWFBPUlRfREFUQV9UWVBFUy5jc3YpIHtcclxuICAgICAgICAgIHRoaXMuZXhwb3J0RmlsZVNlcnZpY2UuZXhwb3J0RmlsZUFzQ3N2KGRhdGFGaWxlLCBmaWxlTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBsZXQgcXJ5UGFnaW5nID0ge1xyXG4gICAgICAgIHJlc3BvbnNlOiByZXNwb25zZSxcclxuICAgICAgICBwYWdlTm93OiBwYWdlTm9cclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhxcnlQYWdpbmcpO1xyXG4gICAgICB0aGlzLnJlc3VsdC5lbWl0KHFyeVBhZ2luZyk7XHJcbiAgICAgIHRoaXMucmVxR2V0QWxsRGF0YS5lbWl0KHJlcXVlc3QpO1xyXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyRHVwbGljYXRlRGF0YShkYXRhKSB7XHJcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCBfdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgIHJldHVybiBpbmRleCA9PT0gZGF0YS5maW5kSW5kZXgob2JqID0+IHtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKSA9PT0gX3ZhbHVlO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJMaXN0VmFsdWVFbXB0eShkYXRhKSB7XHJcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoKHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZS5saXN0VmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHZhbHVlO1xyXG4gICAgICBpZiAodmFsdWUubGlzdFZhbHVlLmxlbmd0aCA9PT0gMCApIHJldHVybjtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGVja1ZhbHVlR3RlTHRlKGNvbXBvbmVudCl7XHJcbiAgICAvL2NlayB5ZyBwYWthaSByZXN0cmljdGlvbiBndGUvbHRlL2d0L2x0XHJcbiAgICBsZXQgTWluQ29tcG9uZW50ID0gdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudC5maW5kKHggPT4geC5uYW1lID09IGNvbXBvbmVudC5uYW1lICYmICh4LnJlc3RyaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT0gXCJHVEVcIikpO1xyXG4gICAgaWYoIU1pbkNvbXBvbmVudCl7XHJcbiAgICAgIE1pbkNvbXBvbmVudCA9IHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnQuZmluZCh4ID0+IHgubmFtZSA9PSBjb21wb25lbnQubmFtZSAmJiAoeC5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiR1RcIikpXHJcbiAgICB9XHJcblxyXG4gICAgbGV0IE1heENvbXBvbmVudCA9IHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnQuZmluZCh4ID0+IHgubmFtZSA9PSBjb21wb25lbnQubmFtZSAmJiAoeC5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiTFRFXCIpKTtcclxuICAgIGlmKCFNYXhDb21wb25lbnQpe1xyXG4gICAgICBNYXhDb21wb25lbnQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmZpbmQoeCA9PiB4Lm5hbWUgPT0gY29tcG9uZW50Lm5hbWUgJiYgKHgucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkxUXCIpKVxyXG4gICAgfVxyXG5cclxuICAgIGlmKE1pbkNvbXBvbmVudCAmJiBNYXhDb21wb25lbnQpe1xyXG4gICAgICBsZXQgbWluVmFsdWUgPSB0aGlzLm15Rm9ybS5uYXRpdmVFbGVtZW50W01pbkNvbXBvbmVudC5pZF0udmFsdWVBc051bWJlcjtcclxuICAgICAgbGV0IG1heFZhbHVlID0gdGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtNYXhDb21wb25lbnQuaWRdLnZhbHVlQXNOdW1iZXI7XHJcbiAgICAgIGlmKG1pblZhbHVlID4gbWF4VmFsdWUpe1xyXG4gICAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoTWluQ29tcG9uZW50LmxhYmVsICsgXCIgbXVzdCBiZSBsZXNzIHRoYW4gXCIgKyBNYXhDb21wb25lbnQubGFiZWwpO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbWFwRGF0YUZpbGUoYm9keUxpc3REYXRhLCBib2R5RGF0YUFyciwgaGVhZGVyTGlzdERhdGEpIHtcclxuICAgIGxldCBkYXRhRXhjZWwgPSBuZXcgQXJyYXkoKTtcclxuICAgIGxldCBib2R5RGF0YVRlbXAgPSBuZXcgQXJyYXkoKTtcclxuICAgIGxldCBoZWFkZXJEYXRhVGVtcCA9IG5ldyBBcnJheSgpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9keUxpc3REYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IFtpc05lZWRUb1B1c2gsIGJvZHlEYXRhLCBoZWFkZXJEYXRhXSA9IHRoaXMuY2hlY2tOZWVkRGF0YVRvRXhwb3J0KGJvZHlMaXN0RGF0YSwgaGVhZGVyTGlzdERhdGEsIGkpO1xyXG4gICAgICBpZihpc05lZWRUb1B1c2gpe1xyXG4gICAgICAgIGJvZHlEYXRhVGVtcC5wdXNoKGJvZHlEYXRhKTtcclxuICAgICAgICBoZWFkZXJEYXRhVGVtcC5wdXNoKGhlYWRlckRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5RGF0YUFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZmluYWxEYXRhID0ge307XHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGJvZHlEYXRhQXJyW2ldKSkge1xyXG4gICAgICAgICAgY29uc3QgX2lkeCA9IGJvZHlEYXRhVGVtcC5pbmRleE9mKGtleSlcclxuICAgICAgICAgIGlmIChfaWR4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgZmluYWxEYXRhW2hlYWRlckRhdGFUZW1wW19pZHhdXSA9IHZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRhdGFFeGNlbC5wdXNoKGZpbmFsRGF0YSlcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRhRXhjZWw7XHJcbiAgfVxyXG5cclxuICBjaGVja0FkZGl0aW9uYWxFeHBvcnRMaXN0KGhlYWRlckxpc3REYXRhLCBib2R5TGlzdERhdGEsIGFkZGl0aW9uYWxFeHBvcnRMaXN0KSB7XHJcbiAgICBpZiAoYWRkaXRpb25hbEV4cG9ydExpc3QgPT0gdW5kZWZpbmVkKSByZXR1cm4gW2hlYWRlckxpc3REYXRhLCBib2R5TGlzdERhdGFdO1xyXG4gICAgaWYgKGFkZGl0aW9uYWxFeHBvcnRMaXN0Lmxlbmd0aCA9PSAwKSByZXR1cm4gW2hlYWRlckxpc3REYXRhLCBib2R5TGlzdERhdGFdO1xyXG5cclxuICAgIGNvbnN0IF9oZWFkZXJMaXN0ID0gWy4uLmhlYWRlckxpc3REYXRhXTtcclxuICAgIGNvbnN0IF9ib2R5TGlzdCA9IFsuLi5ib2R5TGlzdERhdGFdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkaXRpb25hbEV4cG9ydExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgX2hlYWRlckxpc3QucHVzaCh7bGFiZWw6IGFkZGl0aW9uYWxFeHBvcnRMaXN0W2ldLmxhYmVsfSk7XHJcbiAgICAgIF9ib2R5TGlzdC5wdXNoKHtwcm9wZXJ0eTogYWRkaXRpb25hbEV4cG9ydExpc3RbaV0ucHJvcGVydHl9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW19oZWFkZXJMaXN0LCBfYm9keUxpc3RdO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tFeGNsdWRlRXhwb3J0TGlzdChoZWFkZXJMaXN0RGF0YSwgYm9keUxpc3REYXRhLCBleGNsdWRlRXhwb3J0TGlzdCkge1xyXG4gICAgaWYgKGV4Y2x1ZGVFeHBvcnRMaXN0ID09IHVuZGVmaW5lZCkgcmV0dXJuIFtoZWFkZXJMaXN0RGF0YSwgYm9keUxpc3REYXRhXTtcclxuICAgIGlmIChleGNsdWRlRXhwb3J0TGlzdC5sZW5ndGggPT0gMCkgcmV0dXJuIFtoZWFkZXJMaXN0RGF0YSwgYm9keUxpc3REYXRhXTtcclxuXHJcbiAgICBjb25zdCBfaGVhZGVyTGlzdCA9IFsuLi5oZWFkZXJMaXN0RGF0YV07XHJcbiAgICBjb25zdCBfYm9keUxpc3QgPSBbLi4uYm9keUxpc3REYXRhXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4Y2x1ZGVFeHBvcnRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBpbmRleCA9IF9ib2R5TGlzdC5maW5kSW5kZXgoKGVsZW1lbnQpID0+IGVsZW1lbnQucHJvcGVydHkgPT0gZXhjbHVkZUV4cG9ydExpc3RbaV0ucHJvcGVydHkpO1xyXG4gICAgICAgIGlmIChpbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgX2hlYWRlckxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIF9ib2R5TGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW19oZWFkZXJMaXN0LCBfYm9keUxpc3RdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja05lZWREYXRhVG9FeHBvcnQoYm9keUxpc3REYXRhOiBBcnJheTxhbnk+LCBoZWFkZXJMaXN0RGF0YTogQXJyYXk8YW55PiwgaWR4OiBudW1iZXIpIHtcclxuICAgIC8vIGFkZCBqc29uIGNoZWNrZXIgZm9yIGRhdGEgdG8gZXhwb3J0IGhlcmVcclxuICAgIGlmIChib2R5TGlzdERhdGFbaWR4XVsndHlwZSddICE9ICdhY3Rpb24nKSB7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgdHJ1ZSxcclxuICAgICAgICBib2R5TGlzdERhdGFbaWR4XVsncHJvcGVydHknXSxcclxuICAgICAgICBoZWFkZXJMaXN0RGF0YVtpZHhdWydsYWJlbCddXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICBpZiAoYm9keUxpc3REYXRhW2lkeF1bJ3R5cGUnXSA9PSAnYWN0aW9uJyAmJiBib2R5TGlzdERhdGFbaWR4XVsnYWN0aW9uJ11bMF1bJ3R5cGUnXSA9PSAnc3dpdGNoJyAmJiBib2R5TGlzdERhdGFbaWR4XVsnYWN0aW9uJ11bMF1bJ2Nhc2UnXVswXVsncmVzdWx0J11bJ3R5cGUnXSA9PSAnbGluaycpIHtcclxuICAgICAgcmV0dXJuIFtcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIGJvZHlMaXN0RGF0YVtpZHhdWydhY3Rpb24nXVswXVsnY2FzZSddWzBdWydyZXN1bHQnXVsncHJvcGVydHknXSxcclxuICAgICAgICBoZWFkZXJMaXN0RGF0YVtpZHhdWydsYWJlbCddXHJcbiAgICAgIF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW2ZhbHNlLCBbXSwgW11dO1xyXG4gIH1cclxuXHJcbiAgR2VuZXJhdGVSZXBvcnQoZW5qaUZvcm06IE5nRm9ybSkge1xyXG4gICAgZW5qaUZvcm0uZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBpZighZW5qaUZvcm0uZm9ybS52YWxpZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5nZW5ScHQuZW1pdCh7IEV4cG9ydFR5cGU6IHRoaXMuRXhwb3J0VHlwZSwgRWxSZWY6IHRoaXMubXlGb3JtIH0pO1xyXG4gIH1cclxuXHJcbiAgbGVzc1RoYW5Gb3VyKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY291bnRGb3JtID4gMykge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNvbHZlT2JqZWN0KG9iajogYW55LCB1cmw6IHN0cmluZywgY3JpdDogUmVxdWVzdENyaXRlcmlhT2JqID0gbnVsbCkge1xyXG4gICAgY29uc3QgdmFsID0gdGhpcy5wb3N0SlNPTih1cmwsIGNyaXQpO1xyXG4gICAgdmFsLnN1YnNjcmliZSh0ZW1wRGF0YSA9PiB7XHJcbiAgICAgIG9iai5pdGVtc1VybCA9IG5ldyBBcnJheSgpO1xyXG4gICAgICBvYmouaXRlbXNVcmwgPSB0ZW1wRGF0YS5SZXR1cm5PYmplY3Q7XHJcblxyXG4gICAgICBpZiAob2JqLmV4Y2x1ZGUgIT0gdW5kZWZpbmVkICYmIG9iai5leGNsdWRlICE9IFwiXCIpIHtcclxuICAgICAgICBvYmouaXRlbXNVcmwgPSBvYmouaXRlbXNVcmwuZmlsdGVyKCh2YWx1ZSkgPT4gIW9iai5leGNsdWRlLmluY2x1ZGVzKHZhbHVlLktleSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob2JqLnR5cGUgPT0gXCJkcm9wZG93blNlYXJjaFwiICYmIG9iai5pdGVtc1VybC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIG9iai52YWx1ZSA9IG9iai5pdGVtc1VybFswXS5LZXk7XHJcbiAgICAgICAgb2JqLmRlc2NyID0gb2JqLml0ZW1zVXJsWzBdLlZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvYmouYWZmZWN0ZWRGaWx0ZXIgJiYgb2JqLml0ZW1zVXJsLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUV2ZW50KG9iai5pdGVtc1VybFswXS5LZXksIG9iaik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtVG9EZWNpbWFsKGVsZW1lbnQ6IGFueSkge1xyXG4gICAgZWxlbWVudC50YXJnZXQudmFsdWUgPSBwYXJzZUZsb2F0KGVsZW1lbnQudGFyZ2V0LnZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCAnJykpO1xyXG4gIH1cclxuXHJcbiAgZXhwb3J0QXNGaWxlKGV4dEZpbGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2hDbGljayh0cnVlLCBleHRGaWxlKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRXZlbnQob3B0VmFsdWUsIGFmRmlsdGVyKSB7XHJcbiAgICBsZXQganNvbkNvbXAgPSB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50O1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWZGaWx0ZXIuYWZmZWN0ZWRGaWx0ZXIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBqc29uQ29tcC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmIChqc29uQ29tcFtqXS5uYW1lID09IGFmRmlsdGVyLmFmZmVjdGVkRmlsdGVyW2ldKSB7XHJcbiAgICAgICAgICBsZXQgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0Q3JpdGVyaWFPYmooKTtcclxuICAgICAgICAgIGxldCBhcnJheUNyaXQgPSBuZXcgQXJyYXkoKTtcclxuXHJcbiAgICAgICAgICBpZiAob3B0VmFsdWUgIT0gXCJhbGxcIiAmJiBvcHRWYWx1ZSAhPSBcIm9uZVwiKSB7XHJcbiAgICAgICAgICAgIGxldCBjcml0T2JqID0gbmV3IENyaXRlcmlhT2JqKCk7XHJcbiAgICAgICAgICAgIGNyaXRPYmouRGF0YVR5cGUgPSBhZkZpbHRlci5kYXRhdHlwZTtcclxuICAgICAgICAgICAgaWYgKGFmRmlsdGVyLmZpbHRlclByb3BOYW1lICE9IHVuZGVmaW5lZCB8fCBhZkZpbHRlci5maWx0ZXJQcm9wTmFtZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgcmVxdWVzdFthZkZpbHRlci5maWx0ZXJQcm9wTmFtZV0gPSBvcHRWYWx1ZTtcclxuICAgICAgICAgICAgICBjcml0T2JqLnByb3BOYW1lID0gYWZGaWx0ZXIuZmlsdGVyUHJvcE5hbWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGFmRmlsdGVyLm5hbWU7XHJcbiAgICAgICAgICAgICAgcmVxdWVzdFthZkZpbHRlci5uYW1lXSA9IG9wdFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNyaXRPYmoudmFsdWUgPSBvcHRWYWx1ZTtcclxuICAgICAgICAgICAgY3JpdE9iai5yZXN0cmljdGlvbiA9IEFkSW5zQ29uc3RhbnQuUmVzdHJpY3Rpb25FcTtcclxuICAgICAgICAgICAgYXJyYXlDcml0LnB1c2goY3JpdE9iaik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAob3B0VmFsdWUgPT0gXCJhbGxcIikge1xyXG4gICAgICAgICAgICBsZXQgY3JpdE9iaiA9IG5ldyBDcml0ZXJpYU9iaigpO1xyXG4gICAgICAgICAgICBhcnJheUNyaXQucHVzaChjcml0T2JqKTtcclxuICAgICAgICAgICAganNvbkNvbXBbal0udmFsdWUgPSBcImFsbFwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVxdWVzdC5jcml0ZXJpYSA9IGFycmF5Q3JpdDtcclxuICAgICAgICAgIGlmIChqc29uQ29tcFtqXS5wYXRoICE9IHVuZGVmaW5lZCAmJiBqc29uQ29tcFtqXS5wYXRoICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50cyAhPSB1bmRlZmluZWQgJiYgdGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHMubGVuZ3RoOyB5KyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChqc29uQ29tcFtqXS5lbnZpcm9ubWVudCA9PSB0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHNbeV0uZW52aXJvbm1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAganNvbkNvbXBbal0uZnVsbHBhdGggPSB0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHNbeV0udXJsICsganNvbkNvbXBbal0ucGF0aDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGpzb25Db21wW2pdLmZ1bGxwYXRoID0ganNvbkNvbXBbal0udXJsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAganNvbkNvbXBbal0uZnVsbHBhdGggPSBqc29uQ29tcFtqXS51cmw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlc29sdmVPYmplY3QoanNvbkNvbXBbal0sIGpzb25Db21wW2pdLmZ1bGxwYXRoLCByZXF1ZXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIFNldFByb2Nlc3NLZXkoaWR4OiBudW1iZXIsIHdmS2V5RmlsdGVyOiBzdHJpbmcpIHtcclxuICAgIGxldCBjb21wb25lbnQgPSB0aGlzLm15Rm9ybS5uYXRpdmVFbGVtZW50W2lkeF07XHJcbiAgICBsZXQgZGRsID0gY29tcG9uZW50Lm9wdGlvbnM7XHJcbiAgICBsZXQgdGV4dDogc3RyaW5nID0gZGRsW2RkbC5zZWxlY3RlZEluZGV4XS52YWx1ZS50cmltKCk7XHJcbiAgICBsZXQgbGlzdFZhbHVlID0gdGV4dC5zcGxpdCgnOycpO1xyXG4gICAgbGV0IGxpc3RXZktleSA9IHdmS2V5RmlsdGVyLnNwbGl0KCc7Jyk7XHJcbiAgICBcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdFZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQuaW50ZWdyYXRpb25PYmoucmVxdWVzdE9ialtsaXN0V2ZLZXlbaV1dID0gbGlzdFZhbHVlW2ldO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBzd2l0Y2hDYXNlKGNvbmRMaXN0KSB7XHJcbiAgICBsZXQgY29uZGl0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25kTGlzdC5jb25kaXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBpZHggPSB0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlLmZpbmRJbmRleCh4ID0+IHgucHJvcGVydHkgPT0gY29uZExpc3QuY29uZGl0aW9uc1tpXS5wcm9wZXJ0eSk7XHJcbiAgICAgIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiRVFcIikge1xyXG4gICAgICAgIGlmICghY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPT0gY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdXNlcm5hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJuYW1lXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA9PSB1c2VybmFtZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiTkVRXCIpIHtcclxuICAgICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIgIT0gdHJ1ZSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSAhPSBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB1c2VybmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVXNlcm5hbWVcIik7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlICE9IHVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJHVFwiKSB7XHJcbiAgICAgICAgaWYgKCFjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlcikge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA+IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPiB1c2VybmFtZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiR1RFXCIpIHtcclxuICAgICAgICBpZiAoIWNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlID49IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPj0gdXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIkxUXCIpIHtcclxuICAgICAgICBpZiAoIWNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlIDwgY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdXNlcm5hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJuYW1lXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA8IHVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJMVEVcIikge1xyXG4gICAgICAgIGlmICghY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPD0gY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdXNlcm5hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJuYW1lXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA8PSB1c2VybmFtZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmRpdGlvbjtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIERlY3J5cHRTdHJpbmcoY2hpcHBlclRleHQ6IHN0cmluZywgY2hpcHBlcktleTogc3RyaW5nKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoaXBwZXJLZXkgPT0gdW5kZWZpbmVkIHx8IGNoaXBwZXJLZXkudHJpbSgpID09ICcnIHx8XHJcbiAgICAgIGNoaXBwZXJUZXh0ID09IHVuZGVmaW5lZCB8fCBjaGlwcGVyVGV4dC50cmltKCkgPT0gJydcclxuICAgICkgcmV0dXJuIGNoaXBwZXJUZXh0O1xyXG4gICAgbGV0IGNoaXBwZXJLZXlBcnIgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShjaGlwcGVyS2V5KTtcclxuICAgIGxldCBpdiA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwLCAweDAwLCAweDAwLCAweDAwXSk7XHJcbiAgICBsZXQgZGVjcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmRlY3J5cHQoY2hpcHBlclRleHQsIGNoaXBwZXJLZXlBcnIsIHsgaXY6IGl2IH0pO1xyXG4gICAgbGV0IHBsYWluVGV4dCA9IGRlY3J5cHRlZC50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XHJcbiAgICByZXR1cm4gcGxhaW5UZXh0O1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJbnB1dERhdGUoY29tcG9uZW50OiBhbnkpIHtcclxuICAgIGxldCBtaW5EYXRlVmFsO1xyXG4gICAgbGV0IG1heERhdGVWYWw7XHJcbiAgICBsZXQgbGFiZWw7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuXHJcbiAgICBsZXQgTWluQ29tcG9uZW50ID0gdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudC5maW5kKHggPT4geC5uYW1lID09IGNvbXBvbmVudC5uYW1lICYmICh4LnJlc3RyaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT0gXCJHVEVcIikpID09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnQuZmluZCh4ID0+IHgubmFtZSA9PSBjb21wb25lbnQubmFtZSAmJiAoeC5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiR1RcIikpIDogdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudC5maW5kKHggPT4geC5uYW1lID09IGNvbXBvbmVudC5uYW1lICYmICh4LnJlc3RyaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT0gXCJHVEVcIikpO1xyXG4gICAgaWYgKE1pbkNvbXBvbmVudCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgbWluRGF0ZVZhbCA9IHRoaXMubXlGb3JtLm5hdGl2ZUVsZW1lbnRbTWluQ29tcG9uZW50LmlkXS5taW4gPT0gXCJcIiA/IG51bGwgOiBuZXcgRGF0ZSh0aGlzLm15Rm9ybS5uYXRpdmVFbGVtZW50W01pbkNvbXBvbmVudC5pZF0ubWluKTtcclxuICAgICAgbGFiZWwgPSBNaW5Db21wb25lbnQubGFiZWwuc3BsaXQoXCI+XCIsIDIpO1xyXG4gICAgICBpZiAobWluRGF0ZVZhbCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKE1pbkNvbXBvbmVudC5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiR1RcIikge1xyXG4gICAgICAgICAgbWluRGF0ZVZhbC5zZXREYXRlKG1pbkRhdGVWYWwuZ2V0RGF0ZSgpIC0gMSk7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UucHVzaChcIiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChNaW5Db21wb25lbnQucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkdURVwiKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UucHVzaChcIiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbHMgdG8gXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBNYXhDb21wb25lbnQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmZpbmQoeCA9PiB4Lm5hbWUgPT0gY29tcG9uZW50Lm5hbWUgJiYgKHgucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkxURVwiKSkgPT0gdW5kZWZpbmVkID8gdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudC5maW5kKHggPT4geC5uYW1lID09IGNvbXBvbmVudC5uYW1lICYmICh4LnJlc3RyaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT0gXCJMVFwiKSkgOiB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmZpbmQoeCA9PiB4Lm5hbWUgPT0gY29tcG9uZW50Lm5hbWUgJiYgKHgucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkxURVwiKSk7XHJcbiAgICBpZiAoTWF4Q29tcG9uZW50ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBtYXhEYXRlVmFsID0gdGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtNYXhDb21wb25lbnQuaWRdLm1heCA9PSBcIlwiID8gbnVsbCA6IG5ldyBEYXRlKHRoaXMubXlGb3JtLm5hdGl2ZUVsZW1lbnRbTWF4Q29tcG9uZW50LmlkXS5tYXgpO1xyXG4gICAgICBsYWJlbCA9IE1heENvbXBvbmVudC5sYWJlbC5zcGxpdChcIjxcIiwgMik7XHJcbiAgICAgIGlmIChtYXhEYXRlVmFsICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoTWF4Q29tcG9uZW50LnJlc3RyaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT0gXCJMVFwiKSB7XHJcbiAgICAgICAgICBtYXhEYXRlVmFsLnNldERhdGUobWF4RGF0ZVZhbC5nZXREYXRlKCkgKyAxKTtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZS5wdXNoKFwiIG11c3QgYmUgbGVzcyB0aGFuIFwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKE1heENvbXBvbmVudC5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiTFRFXCIpIHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZS5wdXNoKFwiIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFscyB0byBcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1pbkRhdGVWYWwgIT0gbnVsbCAmJiBtYXhEYXRlVmFsID09IG51bGwgJiYgbmV3IERhdGUodGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtNaW5Db21wb25lbnQuaWRdLnZhbHVlKSA8IG1pbkRhdGVWYWwpIHtcclxuICAgICAgdGhpcy50b2FzdHIud2FybmluZyhsYWJlbFswXSArIGVycm9yTWVzc2FnZVswXSArIGZvcm1hdERhdGUobWluRGF0ZVZhbCwgJ2RkIE1NTU0geXl5eScsICdlbi1VUycpICsgXCIuXCIpXHJcbiAgICAgIHRoaXMuZGF0ZVdyb25nID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAobWF4RGF0ZVZhbCAhPSBudWxsICYmIG1pbkRhdGVWYWwgPT0gbnVsbCAmJiBuZXcgRGF0ZSh0aGlzLm15Rm9ybS5uYXRpdmVFbGVtZW50W01heENvbXBvbmVudC5pZF0udmFsdWUpID4gbWF4RGF0ZVZhbCkge1xyXG4gICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKGxhYmVsWzBdICsgZXJyb3JNZXNzYWdlWzBdICsgZm9ybWF0RGF0ZShtYXhEYXRlVmFsLCAnZGQgTU1NTSB5eXl5JywgJ2VuLVVTJykgKyBcIi5cIilcclxuICAgICAgdGhpcy5kYXRlV3JvbmcgPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChtaW5EYXRlVmFsICE9IG51bGwgJiYgbWF4RGF0ZVZhbCAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChuZXcgRGF0ZSh0aGlzLm15Rm9ybS5uYXRpdmVFbGVtZW50W01heENvbXBvbmVudC5pZF0udmFsdWUpID4gbWF4RGF0ZVZhbCB8fCBuZXcgRGF0ZSh0aGlzLm15Rm9ybS5uYXRpdmVFbGVtZW50W01pbkNvbXBvbmVudC5pZF0udmFsdWUpIDwgbWluRGF0ZVZhbCkge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcobGFiZWxbMF0gKyBlcnJvck1lc3NhZ2VbMF0gKyBmb3JtYXREYXRlKG1pbkRhdGVWYWwsICdkZCBNTU1NIHl5eXknLCAnZW4tVVMnKSArIFwiIGFuZFwiICsgZXJyb3JNZXNzYWdlWzFdICsgZm9ybWF0RGF0ZShtYXhEYXRlVmFsLCAnZGQgTU1NTSB5eXl5JywgJ2VuLVVTJykgKyBcIi5cIilcclxuICAgICAgICB0aGlzLmRhdGVXcm9uZyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kYXRlV3JvbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRlV3JvbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdGVkT3B0aW9uKGl0ZW06IHsgS2V5OiBzdHJpbmcsIFZhbHVlOiBzdHJpbmcgfSwgY3JpdDogYW55KSB7XHJcbiAgICBjcml0LmRlc2NyID0gaXRlbS5WYWx1ZTtcclxuICAgIGNyaXQuaXNMaXN0SGlkZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBPbkZvY3VzQ3VycihldjogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgIT09IFwiXCIgJiYgdmFsdWUgIT09IDAgJiYgdmFsdWUgIT09IFwiMFwiKSByZXR1cm47XHJcbiAgICBldi50YXJnZXQudmFsdWUgPSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgVmFsaWRhdGVEZWZhdWx0VmFsdWUoaXRlbTogYW55KSB7XHJcbiAgICBjb25zdCBpdGVtVmFsdWUgPSBpdGVtLnZhbHVlO1xyXG4gICAgaWYgKGl0ZW1WYWx1ZSAhPT0gXCJcIiAmJiBpdGVtVmFsdWUgIT09IDAgJiYgaXRlbVZhbHVlICE9PSBcIjBcIikgcmV0dXJuO1xyXG4gICAgY29uc3QgX2VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgaW5wdXRbbmctcmVmbGVjdC1uYW1lPVwiJHtpdGVtLm5hbWV9XCJdYCk7XHJcbiAgICBpZiAoX2VsID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHZhbCA9IHRoaXMuZ2VuZXJhdGVDdXJyRm9jRWxWYWx1ZShpdGVtKTtcclxuICAgIF9lbFtcInZhbHVlXCJdID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUN1cnJGb2NFbFZhbHVlKGl0ZW06IGFueSkge1xyXG4gICAgbGV0IHZhbCA9IFwiMFwiO1xyXG4gICAgY29uc3QgcHJlY2lzaW9uID0gaXRlbT8ucHJlY2lzaW9uIHx8IDI7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZWNpc2lvbjsgaSsrKSB7XHJcbiAgICAgIGlmIChpID09PSAwKSB2YWwgKz0gXCIuXCI7XHJcbiAgICAgIHZhbCArPSBcIjBcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWw7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXY+XHJcbjwhLS0gQmFzaWMgZm9ybSBsYXlvdXQgc2VjdGlvbiBzdGFydCAtLT5cclxuPGxpYi11Y1N1YnNlY3Rpb24gW2hpZGRlbl09XCIhc2VhcmNoSW5wdXQuSXNTdWJzZWN0aW9uXCIgW2lkXT1cInNlYXJjaElucHV0LnNlYXJjaElkKydpZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29uZmlndXJhdGlvbj8uc2VjdGlvblRpdGxlIHx8ICdQYWdpbmcnXCIgW3BhbmVsXT1cInNlYXJjaElucHV0LnNlYXJjaElkXCI+XHJcbjwvbGliLXVjU3Vic2VjdGlvbj5cclxuXHJcbjwhLS0gPGRpdiBbaWRdPVwic2VhcmNoSW5wdXQuc2VhcmNoSWRcIj4gLS0+XHJcbiAgPCEtLSA8ZGl2IGNsYXNzPVwicm93IHRleHQtbGVmdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+IC0tPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInBsLTMgbWItMiBtdC0yXCIgKm5nSWY9XCJjb25maWd1cmF0aW9uPy50aXRsZSAhPSB1bmRlZmluZWQgJiYgY29uZmlndXJhdGlvbj8udGl0bGUgIT0gJydcIj5cclxuICAgICAgICAgIDxoNCBjbGFzcz1cImNhcmQtdGl0bGUgdWNTZWFyY2gtdGl0bGVcIiB0cmFuc2xhdGU+e3tjb25maWd1cmF0aW9uLnRpdGxlfX08L2g0PlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCIgW2lkXT1cInNlYXJjaElucHV0LnNlYXJjaElkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtM1wiPlxyXG4gICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0gZm9ybS1ob3Jpem9udGFsXCIgaWQ9XCJmb3JtU2VhcmNoXCIgI2Zvcm1JZFNlYXJjaCAjZW5qaUZvcm09XCJuZ0Zvcm1cIlxyXG4gICAgICAgICAgICAgIChuZ1N1Ym1pdCk9XCJlbmppRm9ybS52YWxpZCAmJiBzZWFyY2hDbGljaygpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8aDQgY2xhc3M9XCJmb3JtLXNlY3Rpb24gZm9udC13ZWlnaHQtYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJjaGFuZ2VTdGF0ZSgpXCIgY2xhc3M9XCJidG4gbm8tcGFkZGluZyBjdXJzb3ItcG9pbnRlciBmbGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNXB4OyBtYXJnaW46IDBweCAwcHggNXB4IC0xNXB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpc0hpZGRlbiA/ICdmYS1jaGV2cm9uLXJpZ2h0JyA6ICdmYS1jaGV2cm9uLWRvd24nXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZ3VyYXRpb24/LnNlY3Rpb25UaXRsZSAhPSB1bmRlZmluZWQgJiYgY29uZmlndXJhdGlvbj8uc2VjdGlvblRpdGxlICE9ICcnOyB0aGVuIGlucHV0U2VjdGlvblRpdGxlIGVsc2UgZGVmYXVsdFNlY3Rpb25UaXRsZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnB1dFNlY3Rpb25UaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICB7e2NvbmZpZ3VyYXRpb24/LnNlY3Rpb25UaXRsZX19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFNlY3Rpb25UaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICBQYWdpbmdcclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvaDQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBJbmkgRGlndW5ha2FuIHVudHVrIEdlbmVyYXRlIER5bmFtaWMgQ29tcG9uZW50IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBbaGlkZGVuXT1cImlzSGlkZGVuXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJwYW5lbC1hY3RpdmVcIiBbQGNoYW5nZURpdlNpemVdPWN1cnJlbnRTdGF0ZT4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgZm9ybS1ncm91cFwiICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBjb25maWd1cmF0aW9uPy5jb21wb25lbnQ7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0xMiBuby1wYWRkaW5nIHNlYXJjaC1sYWJlbFwiIGZvcj1cInt7cXVlc3Rpb24uaWR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FkaW5zLXJlcXVpcmVkLWxhYmVsJzogKHF1ZXN0aW9uLmlzUmVxdWlyZWQgfHwgKHF1ZXN0aW9uPy5kZGxUeXBlICE9IHVuZGVmaW5lZCAmJiBxdWVzdGlvbi5kZGxUeXBlID09ICdvbmUnKSl9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT57e3F1ZXN0aW9uLmxhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbm8tcGFkZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnR5cGU9PSd0ZXh0Ym94J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInt7cXVlc3Rpb24uaWR9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0lzVXBwZXJDYXNlXT1cInF1ZXN0aW9uLmlzVXBwZXJjYXNlID09PSB1bmRlZmluZWQgPyB0cnVlIDogcXVlc3Rpb24uaXNVcHBlcmNhc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInF1ZXN0aW9uLnZhbHVlXCIgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzUmVxdWlyZWRcIiBuYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1jcml0LWRhdGF0YWJsZT1cInt7cXVlc3Rpb24uaXNDcml0ZXJpYURhdGFUYWJsZX19XCIgW3BsYWNlaG9sZGVyXT1cInF1ZXN0aW9uLnBsYWNlaG9sZGVyICE9IHVuZGVmaW5lZCA/IHF1ZXN0aW9uLnBsYWNlaG9sZGVyIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1yZXF1aXJlZD1cInt7cXVlc3Rpb24uaXNSZXF1aXJlZH19XCIgdmFsdWU9XCJ7e3F1ZXN0aW9uLnZhbHVlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2hDbGljaygpXCIgYXR0ci5kYXRhLXR5cGU9XCJ7e3F1ZXN0aW9uLmRhdGF0eXBlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1uYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIiBhdHRyLmRhdGEtcmVzdHJpY3Rpb249XCJ7e3F1ZXN0aW9uLnJlc3RyaWN0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIubGFiZWw9XCJ7e3F1ZXN0aW9uLmxhYmVsfX1cIiBbcmVhZG9ubHldPVwicXVlc3Rpb24uaXNSZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6KGVuamlGb3JtLnN1Ym1pdHRlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy50b3VjaGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LmRpcnR5KSAmJiBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy5pbnZhbGlkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnR5cGU9PSd0ZXh0YXJlYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJ7e3F1ZXN0aW9uLmlkfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInF1ZXN0aW9uLnZhbHVlXCIgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzUmVxdWlyZWRcIiBuYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1yZXF1aXJlZD1cInt7cXVlc3Rpb24uaXNSZXF1aXJlZH19XCIgYXR0ci5kYXRhLXR5cGU9XCJ7e3F1ZXN0aW9uLmRhdGF0eXBlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1uYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIiB2YWx1ZT1cInt7cXVlc3Rpb24udmFsdWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiIFtyZWFkb25seV09XCJxdWVzdGlvbi5pc1JlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooZW5qaUZvcm0uc3VibWl0dGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LnRvdWNoZWQgfHwgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8uZGlydHkpICYmIGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LmludmFsaWQgfVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi50eXBlPT0nbnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInt7cXVlc3Rpb24uaWR9fVwiIChmb2N1cyk9XCJ0cmFuc2Zvcm1Ub0RlY2ltYWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidHJhbnNmb3JtVG9EZWNpbWFsKCRldmVudClcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIiBbcGxhY2Vob2xkZXJdPVwiJzAnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJxdWVzdGlvbi52YWx1ZVwiIFtyZXF1aXJlZF09XCJxdWVzdGlvbi5pc1JlcXVpcmVkXCIgbmFtZT1cInt7cXVlc3Rpb24ubmFtZStbaV19fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLXJlcXVpcmVkPVwie3txdWVzdGlvbi5pc1JlcXVpcmVkfX1cIiB2YWx1ZT1cInt7cXVlc3Rpb24udmFsdWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaENsaWNrKClcIiBhdHRyLmRhdGEtcmVzdHJpY3Rpb249XCJ7e3F1ZXN0aW9uLnJlc3RyaWN0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS10eXBlPVwie3txdWVzdGlvbi5kYXRhdHlwZX19XCIgYXR0ci5kYXRhLW5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLW51bWVyaWNwYWlyPVwie3txdWVzdGlvbi5udW1lcmljUGFpcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtY3JpdC1kYXRhdGFibGU9XCJ7e3F1ZXN0aW9uLmlzQ3JpdGVyaWFEYXRhVGFibGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiIFtyZWFkb25seV09XCJxdWVzdGlvbi5pc1JlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooZW5qaUZvcm0uc3VibWl0dGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZStbaV1dPy50b3VjaGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZStbaV1dPy5kaXJ0eSkgJiYgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lK1tpXV0/LmludmFsaWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24udHlwZT09J2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24/LmlzQ3VzdG9tICE9IHVuZGVmaW5lZCAmJiBxdWVzdGlvbj8uaXNDdXN0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIlwiIGlkPVwie3txdWVzdGlvbi5pZH19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VhcmNoLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJxdWVzdGlvbi5pc1JlcXVpcmVkXCIgbmFtZT1cInt7cXVlc3Rpb24ubmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2hDbGljaygpXCIgYXR0ci5kYXRhLXJlc3RyaWN0aW9uPVwie3txdWVzdGlvbi5yZXN0cmljdGlvbn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS10eXBlPVwie3txdWVzdGlvbi5kYXRhdHlwZX19XCIgYXR0ci5kYXRhLW5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtcmVxdWlyZWQ9XCJ7e3F1ZXN0aW9uLmlzUmVxdWlyZWR9fVwiIGN1cnJlbmN5TWFzayBbbmdNb2RlbF09XCJxdWVzdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInF1ZXN0aW9uLnZhbHVlXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmxhYmVsPVwie3txdWVzdGlvbi5sYWJlbH19XCIgW3JlYWRvbmx5XT1cInF1ZXN0aW9uLmlzUmVhZG9ubHlcIiAoZm9jdXMpPVwiT25Gb2N1c0N1cnIoJGV2ZW50LCBxdWVzdGlvbi52YWx1ZSlcIiAoYmx1cik9XCJWYWxpZGF0ZURlZmF1bHRWYWx1ZShxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyB0aG91c2FuZHM6IHF1ZXN0aW9uLnRob3VzYW5kcywgZGVjaW1hbDogcXVlc3Rpb24uZGVjaW1hbCwgYWxpZ246IHF1ZXN0aW9uLmFsaWduLCBhbGxvd05lZ2F0aXZlOiBxdWVzdGlvbi5hbGxvd05lZ2F0aXZlLCBhbGxvd1plcm86IHF1ZXN0aW9uLmFsbG93WmVybywgcHJlY2lzaW9uOiBxdWVzdGlvbi5wcmVjaXNpb24sIG51bGxhYmxlOiBxdWVzdGlvbi5udWxsYWJsZSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOihlbmppRm9ybS5zdWJtaXR0ZWQgfHwgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8udG91Y2hlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy5kaXJ0eSkgJiYgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8uaW52YWxpZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24/LmlzQ3VzdG9tID09IHVuZGVmaW5lZCB8fCAhcXVlc3Rpb24/LmlzQ3VzdG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJ7e3F1ZXN0aW9uLmlkfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzUmVxdWlyZWRcIiBuYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaENsaWNrKClcIiBhdHRyLmRhdGEtcmVzdHJpY3Rpb249XCJ7e3F1ZXN0aW9uLnJlc3RyaWN0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLXR5cGU9XCJ7e3F1ZXN0aW9uLmRhdGF0eXBlfX1cIiBhdHRyLmRhdGEtbmFtZT1cInt7cXVlc3Rpb24ubmFtZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1yZXF1aXJlZD1cInt7cXVlc3Rpb24uaXNSZXF1aXJlZH19XCIgY3VycmVuY3lNYXNrIFtuZ01vZGVsXT1cInF1ZXN0aW9uLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicXVlc3Rpb24udmFsdWVcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIubGFiZWw9XCJ7e3F1ZXN0aW9uLmxhYmVsfX1cIiAoZm9jdXMpPVwiT25Gb2N1c0N1cnIoJGV2ZW50LCBxdWVzdGlvbi52YWx1ZSlcIiAoYmx1cik9XCJWYWxpZGF0ZURlZmF1bHRWYWx1ZShxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwieyB0aG91c2FuZHM6ICcsJywgZGVjaW1hbDogJy4nLCBhbGlnbjogJ3JpZ2h0JywgYWxsb3dOZWdhdGl2ZTogZmFsc2UsIGFsbG93WmVybzp0cnVlLCBwcmVjaXNpb246IDIsIG51bGxhYmxlOiBmYWxzZSB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOihlbmppRm9ybS5zdWJtaXR0ZWQgfHwgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8udG91Y2hlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy5kaXJ0eSkgJiYgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8uaW52YWxpZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFbmQgSGFyZGNvZGUgTG9va3VwIGRpZGFsZW0tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi50eXBlPT0nZGF0ZXBpY2tlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ7e3F1ZXN0aW9uLmlzVGltZSA/ICdkYXRldGltZS1sb2NhbCcgOiAnZGF0ZSd9fVwiIGlkPVwie3txdWVzdGlvbi5pZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXQgYnRuLWxvb2t1cFwiIG5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWUrW2ldfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInF1ZXN0aW9uLnZhbHVlXCIgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzUmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1yZXF1aXJlZD1cInt7cXVlc3Rpb24uaXNSZXF1aXJlZH19XCIgdmFsdWU9XCJ7e3F1ZXN0aW9uLnZhbHVlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJxdWVzdGlvbi5yZWFkb25seVwiIGF0dHIuZGF0YS10eXBlPVwie3txdWVzdGlvbi5kYXRhdHlwZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtbmFtZT1cInt7cXVlc3Rpb24ubmFtZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtZGF0ZXBpY2tlcnBhaXI9XCJ7e3F1ZXN0aW9uLmRhdGVwaWNrZXJQYWlyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1jcml0LWRhdGF0YWJsZT1cInt7cXVlc3Rpb24uaXNDcml0ZXJpYURhdGFUYWJsZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoQ2xpY2soKVwiIGF0dHIuZGF0YS1yZXN0cmljdGlvbj1cInt7cXVlc3Rpb24ucmVzdHJpY3Rpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiIG1pbj1cInt7cXVlc3Rpb24ubWluRGF0ZSB8IGRhdGU6J3l5eXktTU0tZGQnfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cInt7cXVlc3Rpb24ubWF4RGF0ZSB8IGRhdGU6J3l5eXktTU0tZGQnfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJxdWVzdGlvbi5yZXN0cmljdGlvbiAhPSB1bmRlZmluZWQgJiYgY2hlY2tJbnB1dERhdGUocXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooZW5qaUZvcm0uc3VibWl0dGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZStbaV1dPy50b3VjaGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZStbaV1dPy5kaXJ0eSkgJiYgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lK1tpXV0/LmludmFsaWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24udHlwZSA9PSAndGFza0RlZmluaXRpb25LZXknIHx8IHF1ZXN0aW9uLnR5cGUgPT0gJ3Byb2Nlc3NLZXknIHx8IHF1ZXN0aW9uLnR5cGUgPT0gJ29mZmljZVJvbGVDb2RlcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIiBhdHRyLmRhdGEtcmVxdWlyZWQ9XCJ7e3F1ZXN0aW9uLmlzUmVxdWlyZWR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzUmVxdWlyZWRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIucXVlcnktaW49XCJ7e3F1ZXN0aW9uLmlzUXVlcnlJbn19XCIgYXR0ci5kYXRhLXR5cGU9XCJ7e3F1ZXN0aW9uLmRhdGF0eXBlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIubGFiZWw9XCJ7e3F1ZXN0aW9uLmxhYmVsfX1cIiBbaGlkZGVuXT1cInF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoID09IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiKHF1ZXN0aW9uLnR5cGUgPT0gJ3Rhc2tEZWZpbml0aW9uS2V5JyB8fCBxdWVzdGlvbi50eXBlID09ICdwcm9jZXNzS2V5JykgPyBTZXRQcm9jZXNzS2V5KGkscXVlc3Rpb24ud2ZLZXlGaWx0ZXIpIDogU2V0Um9sZU9mZmljZUNvZGVzKGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooZW5qaUZvcm0uc3VibWl0dGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LnRvdWNoZWQgfHwgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8uZGlydHkpICYmIGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LmludmFsaWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nSWY9XCJxdWVzdGlvbi5kZGxUeXBlID09ICdvbmUnICYmIHF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoICE9IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJvbmVcIj5TZWxlY3QgT25lPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIocXVlc3Rpb24/LmRkbFR5cGUgPT0gdW5kZWZpbmVkIHx8IHF1ZXN0aW9uLmRkbFR5cGUgPT0gJ2FsbCcpICYmIHF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoICE9IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJhbGxcIj5BbGw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIHF1ZXN0aW9uPy5pdGVtc1VybFwiIHZhbHVlPVwie3tpdGVtLktleX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uVmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0lmPVwicXVlc3Rpb24/Lml0ZW1zVXJsPy5sZW5ndGggPT0gMVwiPnt7cXVlc3Rpb24uaXRlbXNVcmxbMF0uVmFsdWV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi50eXBlPT0nZHJvcGRvd24nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cInt7cXVlc3Rpb24ubmFtZX19XCIgYXR0ci5kYXRhLXJlcXVpcmVkPVwie3txdWVzdGlvbi5pc1JlcXVpcmVkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicXVlc3Rpb24udmFsdWVcIiBbcmVxdWlyZWRdPVwicXVlc3Rpb24uaXNSZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VhcmNoLWlucHV0XCIgYXR0ci5xdWVyeS1pbj1cInt7cXVlc3Rpb24uaXNRdWVyeUlufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS10eXBlPVwie3txdWVzdGlvbi5kYXRhdHlwZX19XCIgYXR0ci5kYXRhLW5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLWNyaXQtZGF0YXRhYmxlPVwie3txdWVzdGlvbi5pc0NyaXRlcmlhRGF0YVRhYmxlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiIXF1ZXN0aW9uLmlzRnJvbVVSTCA/IHF1ZXN0aW9uPy5pdGVtcz8ubGVuZ3RoID09IDEgOiBxdWVzdGlvbj8uaXRlbXNVcmw/Lmxlbmd0aCA9PSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInF1ZXN0aW9uLmlzRXZlbnQgPyBvbkNoYW5nZUV2ZW50KCRldmVudC50YXJnZXQudmFsdWUsIHF1ZXN0aW9uKSA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooZW5qaUZvcm0uc3VibWl0dGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LnRvdWNoZWQgfHwgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8uZGlydHkpICYmIGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LmludmFsaWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZGRsVHlwZSA9PSAnb25lJyAmJiAoIXF1ZXN0aW9uLmlzRnJvbVVSTCA/IHF1ZXN0aW9uPy5pdGVtcz8ubGVuZ3RoICE9IDEgOiBxdWVzdGlvbj8uaXRlbXNVcmw/Lmxlbmd0aCAhPSAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IE9uZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHF1ZXN0aW9uPy5kZGxUeXBlID09IHVuZGVmaW5lZCB8fCBxdWVzdGlvbi5kZGxUeXBlID09ICdhbGwnKSAmJiAoIXF1ZXN0aW9uLmlzRnJvbVVSTCA/IHF1ZXN0aW9uPy5pdGVtcz8ubGVuZ3RoICE9IDEgOiBxdWVzdGlvbj8uaXRlbXNVcmw/Lmxlbmd0aCAhPSAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImFsbFwiPkFsbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgIXF1ZXN0aW9uLmlzRnJvbVVSTCA/IHF1ZXN0aW9uPy5pdGVtcyA6IHF1ZXN0aW9uPy5pdGVtc1VybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IXF1ZXN0aW9uLmlzRnJvbVVSTCA/IGl0ZW0ua2V5IDogaXRlbS5LZXl9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3shcXVlc3Rpb24uaXNGcm9tVVJMID8gaXRlbS52YWx1ZSA6IGl0ZW0uVmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcXVlc3Rpb24uaXNGcm9tVVJMID8gcXVlc3Rpb24/Lml0ZW1zPy5sZW5ndGggPT0gMSA6IHF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoID09IDFcIj57eyFxdWVzdGlvbi5pc0Zyb21VUkxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHF1ZXN0aW9uLml0ZW1zWzBdLnZhbHVlIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbi5pdGVtc1VybFswXS5WYWx1ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnR5cGU9PSdkcm9wZG93blNlYXJjaCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRkcy1kaXNwbGF5LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiIXF1ZXN0aW9uLmlzRnJvbVVSTCA/IHF1ZXN0aW9uPy5pdGVtcz8ubGVuZ3RoID09IDEgOiBxdWVzdGlvbj8uaXRlbXNVcmw/Lmxlbmd0aCA9PSAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZGRzLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ7eydkZHNWYWx1ZScrcXVlc3Rpb24ubmFtZX19XCIgWyhuZ01vZGVsKV09XCJxdWVzdGlvbi5kZXNjclwiIHJlYWRvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicXVlc3Rpb24uaXNMaXN0SGlkZSA9ICFxdWVzdGlvbi5pc0xpc3RIaWRlOyBxdWVzdGlvbi5zZWFyY2hUZXh0PScnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFxdWVzdGlvbi5pc0Zyb21VUkwgPyBxdWVzdGlvbj8uaXRlbXM/Lmxlbmd0aCA9PSAxIDogcXVlc3Rpb24/Lml0ZW1zVXJsPy5sZW5ndGggPT0gMVwiPnt7cXVlc3Rpb24uZGVzY3J9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZHMtbGlzdC1jb250YWluZXJcIiBbaGlkZGVuXT1cInF1ZXN0aW9uLmlzTGlzdEhpZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7J3NlYXJjaFRleHQnK3F1ZXN0aW9uLm5hbWV9fVwiIFsobmdNb2RlbCldPVwicXVlc3Rpb24uc2VhcmNoVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlc3Rpb24ucGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGRzLWl0ZW1zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZ1bGwtd2lkdGhcIiBuYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtcmVxdWlyZWQ9XCJ7e3F1ZXN0aW9uLmlzUmVxdWlyZWR9fVwiIFsobmdNb2RlbCldPVwicXVlc3Rpb24udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicXVlc3Rpb24uaXNSZXF1aXJlZFwiIGF0dHIucXVlcnktaW49XCJ7e3F1ZXN0aW9uLmlzUXVlcnlJbn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLXR5cGU9XCJ7e3F1ZXN0aW9uLmRhdGF0eXBlfX1cIiBhdHRyLmRhdGEtbmFtZT1cInt7cXVlc3Rpb24ubmFtZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1jcml0LWRhdGF0YWJsZT1cInt7cXVlc3Rpb24uaXNDcml0ZXJpYURhdGFUYWJsZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJxdWVzdGlvbi5pc0V2ZW50ID8gb25DaGFuZ2VFdmVudCgkZXZlbnQudGFyZ2V0LnZhbHVlLCBxdWVzdGlvbikgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOihlbmppRm9ybS5zdWJtaXR0ZWQgfHwgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8udG91Y2hlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy5kaXJ0eSkgJiYgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8uaW52YWxpZCB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInt7cXVlc3Rpb24/LnNpemUgPT0gdW5kZWZpbmVkID8gcXVlc3Rpb24/LnNpemUgOiAxMH19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKGNsaWNrKT1cInNlbGVjdGVkT3B0aW9uKHtLZXk6J29uZScsVmFsdWU6J1NlbGVjdCBPbmUnfSxxdWVzdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24uZGRzVHlwZSA9PSAnb25lJyAmJiAoIXF1ZXN0aW9uLmlzRnJvbVVSTCA/IHF1ZXN0aW9uPy5pdGVtcz8ubGVuZ3RoICE9IDEgOiBxdWVzdGlvbj8uaXRlbXNVcmw/Lmxlbmd0aCAhPSAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgT25lPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKGNsaWNrKT1cInNlbGVjdGVkT3B0aW9uKHtLZXk6J2FsbCcsVmFsdWU6J0FsbCd9LHF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIocXVlc3Rpb24/LmRkc1R5cGUgPT0gdW5kZWZpbmVkIHx8IHF1ZXN0aW9uLmRkc1R5cGUgPT0gJ2FsbCcpICYmICghcXVlc3Rpb24uaXNGcm9tVVJMID8gcXVlc3Rpb24/Lml0ZW1zPy5sZW5ndGggIT0gMSA6IHF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoICE9IDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cImFsbFwiPkFsbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxvcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgcXVlc3Rpb24/Lml0ZW1zIHwgdGV4dFNlYXJjaCA6IHF1ZXN0aW9uLnNlYXJjaFRleHQ7IGxldCBpPWluZGV4XCIgW3ZhbHVlXT1cIml0ZW0/LmtleVwiIChjbGljayk9XCJzZWxlY3RlZE9wdGlvbihpdGVtLHF1ZXN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtPy52YWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgIXF1ZXN0aW9uLmlzRnJvbVVSTCA/IChxdWVzdGlvbj8uaXRlbXMgfCB0ZXh0U2VhcmNoIDogcXVlc3Rpb24uc2VhcmNoVGV4dCkgOiBxdWVzdGlvbj8uaXRlbXNVcmwgfCB0ZXh0U2VhcmNoIDogcXVlc3Rpb24uc2VhcmNoVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkT3B0aW9uKGl0ZW0scXVlc3Rpb24pXCIgdmFsdWU9XCJ7e2l0ZW0uS2V5fX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uVmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnR5cGU9PSdjbGFpbSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwie3snY2xhaW0nK1tpXX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VhcmNoLWlucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtdHlwZT1cInt7J3RleHQnfX1cIiBhdHRyLmRhdGEtY3JpdC1kYXRhdGFibGU9XCJ7e3F1ZXN0aW9uLmlzQ3JpdGVyaWFEYXRhVGFibGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLW5hbWU9XCJ7eydBc3NpZ25lZSd9fVwiIFtoaWRkZW5dPVwiQ2xhaW1MaXN0Py5sZW5ndGggPT0gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6KGVuamlGb3JtLnN1Ym1pdHRlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzWydjbGFpbScrW2ldXT8udG91Y2hlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzWydjbGFpbScrW2ldXT8uZGlydHkpICYmIGVuamlGb3JtLmZvcm0uY29udHJvbHNbJ2NsYWltJytbaV1dPy5pbnZhbGlkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0lmPVwicXVlc3Rpb24uZGRsVHlwZSA9PSAnb25lJyAmJiBDbGFpbUxpc3Q/Lmxlbmd0aCAhPSAxXCIgdmFsdWU9XCJvbmVcIj5TZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHF1ZXN0aW9uPy5kZGxUeXBlID09IHVuZGVmaW5lZCB8fCBxdWVzdGlvbi5kZGxUeXBlID09ICdhbGwnKSAmJiBDbGFpbUxpc3Q/Lmxlbmd0aCAhPSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiYWxsXCI+QWxsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBDbGFpbUxpc3RcIiB2YWx1ZT1cInt7aXRlbS5LZXl9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLlZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItdWMtc2hvdy1lcnJvcnMgKm5nSWY9XCJxdWVzdGlvbi50eXBlIT0nZGF0ZXBpY2tlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdXCIgW3N1Ym1pdF09XCJlbmppRm9ybS5zdWJtaXR0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXVjLXNob3ctZXJyb3JzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi11Yy1zaG93LWVycm9ycyAqbmdJZj1cInF1ZXN0aW9uLnR5cGU9PSdkYXRlcGlja2VyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZStbaV1dXCIgW3N1Ym1pdF09XCJlbmppRm9ybS5zdWJtaXR0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXVjLXNob3ctZXJyb3JzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBmb3JtLWdyb3VwXCIgKm5nSWY9XCIoaXNSZXBvcnQgIT0gdW5kZWZpbmVkICYmIGlzUmVwb3J0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTEyIG5vLXBhZGRpbmcgc2VhcmNoLWxhYmVsXCIgdHJhbnNsYXRlPlJlcG9ydCBUeXBlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG5vLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIkV4cG9ydFR5cGVcIiBbKG5nTW9kZWwpXT1cIkV4cG9ydFR5cGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBFeHBvcnRUeXBlTGlzdFwiIFt2YWx1ZV09XCJpdGVtLmtleVwiPnt7aXRlbS52YWx1ZX19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbm8tcGFkZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWFjdGlvbnMgcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2xhc3M9XCJidG4tZ3JvdXBcIiAqbmdJZj1cImV4cG9ydERhdGEgPT0gdHJ1ZSAmJiBpc1NlYXJjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1yYWlzZWQgYnRuLW91dGxpbmUtMiBtci0xIGRyb3Bkb3duLXRvZ2dsZVwiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIHRyYW5zbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZ0LWRvd25sb2FkIGJ1dHRvbi1pY29uLXNlYXJjaFwiPjwvaT4mbmJzcDs8c3BhbiBjbGFzcz1cImJ1dHRvbi10ZXh0LXNlYXJjaFwiIHRyYW5zbGF0ZT5FeHBvcnQgRmlsZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cImV4cG9ydEFzRmlsZSgnY3N2JylcIj5hcyBDU1Y8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cImV4cG9ydEFzRmlsZSgnZXhjZWwnKVwiPmFzIEVYQ0VMPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJleHBvcnRBc0ZpbGUoJ2pzb24nKVwiPmFzIEpTT048L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXQoKVwiIGNsYXNzPVwiYnRuIGJ0bi1yYWlzZWQgbXItMSBidG4tbGluay0yXCIgdHJhbnNsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpIGNsYXNzPVwiZmEgZmEtdGltZXNcIj48L2k+Jm5ic3A7IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+UmVzZXQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIoaXNSZXBvcnQgPT0gdW5kZWZpbmVkIHx8ICFpc1JlcG9ydClcIiB0eXBlPVwic3VibWl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXJhaXNlZCBidG4tb3V0bGluZS0yXCIgI1VDU2VhcmNoQ2xpY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIGJ1dHRvbi1pY29uLXNlYXJjaFwiPjwvaT4mbmJzcDs8c3BhbiBjbGFzcz1cImJ1dHRvbi10ZXh0LXNlYXJjaFwiIHRyYW5zbGF0ZT5TZWFyY2g8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIoaXNSZXBvcnQgIT0gdW5kZWZpbmVkICYmIGlzUmVwb3J0KVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiR2VuZXJhdGVSZXBvcnQoZW5qaUZvcm0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXJhaXNlZCBidG4tb3V0bGluZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZnQtZG93bmxvYWQgYnV0dG9uLWljb24tc2VhcmNoXCI+PC9pPiZuYnNwOzxzcGFuIGNsYXNzPVwiYnV0dG9uLXRleHQtc2VhcmNoXCIgdHJhbnNsYXRlPkdlbmVyYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+IC0tPlxyXG48IS0tIDwvZGl2PiAtLT5cclxuPC9kaXY+XHJcbjwhLS0gLy8gQmFzaWMgZm9ybSBsYXlvdXQgc2VjdGlvbiBlbmQgLS0+XHJcbiJdfQ==
|
|
1204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWNzZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdWNzZWFyY2gvc3JjL2xpYi91Y3NlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy91Y3NlYXJjaC9zcmMvbGliL3Vjc2VhcmNoLWxlZ2FjeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFdkksT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBYSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFxQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxhQUFhLEVB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RztnQ0FDWCxPQUFPLEVBQUUsR0FBRzs2QkFDYixDQUFDLENBQUM7NEJBQ0gsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7Z0NBQ25CLE1BQU0sRUFBRSxLQUFLO2dDQUNiLE9BQU8sRUFBRSxHQUFHO2dDQUNaLFFBQVEsRUFBRSxRQUFROzZCQUNuQixDQUFDLENBQUM7NEJBQ0gsVUFBVSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFDOUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzt5QkFDL0MsQ0FBQztxQkFDSDs7MEJBdUZFLE1BQU07MkJBQUMsUUFBUTtnUEExRVMsT0FBTztzQkFBakMsU0FBUzt1QkFBQyxVQUFVO2dCQU1NLE1BQU07c0JBQWhDLFNBQVM7dUJBQUMsY0FBYztnQkFDaEIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIEluamVjdCwgUmVuZGVyZXIyLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGVQaXBlLCBmb3JtYXREYXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5wdXRTZWFyY2hPYmogfSBmcm9tICcuL21vZGVsL2lucHV0LXNlYXJjaC1vYmoubW9kZWwnO1xyXG5pbXBvcnQgeyBDcml0ZXJpYU9iaiB9IGZyb20gJy4vbW9kZWwvY3JpdGVyaWEtb2JqLm1vZGVsJztcclxuaW1wb3J0IHsgUmVxdWVzdENyaXRlcmlhT2JqIH0gZnJvbSAnLi9tb2RlbC9yZXF1ZXN0LWNyaXRlcmlhLW9iai5tb2RlbCc7XHJcbmltcG9ydCB7IEFkSW5zQ29uc3RhbnQsIEVYUE9SVF9EQVRBX1RZUEVTIH0gZnJvbSAnLi9tb2RlbC9hZGlucy1jb25zdGFudCc7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgdHJpZ2dlciwgdHJhbnNpdGlvbiwgc3R5bGUsIGFuaW1hdGUsIHN0YXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgRXhwb3J0VHlwZUNvbnN0YW50LCBLZXlWYWx1ZVJlcG9ydE9iaiB9IGZyb20gJy4vbW9kZWwva2V5LXZhbHVlLXJlcG9ydC5tb2RlbCc7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llJztcclxuaW1wb3J0ICogYXMgQ3J5cHRvSlMgZnJvbSAnY3J5cHRvLWpzJztcclxuaW1wb3J0IHsgS2V5VmFsdWVVQ1NlYXJjaE9iaiwgTGlzdEtleVZhbHVlTW9udGggfSBmcm9tICcuL21vZGVsL2tleS12YWx1ZS11Yy1zZWFyY2gubW9kZWwnO1xyXG5pbXBvcnQgeyBFeHBvcnRGaWxlU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXhwb3J0LWZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTmd4Um91dGVyU2VydmljZSB9IGZyb20gJ0BhZGlucy9mZS1jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLVVDU2VhcmNoJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdWNzZWFyY2gtbGVnYWN5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi91Y3NlYXJjaC1sZWdhY3kuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW0RhdGVQaXBlLCBFeHBvcnRGaWxlU2VydmljZV0sXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignY2hhbmdlRGl2U2l6ZScsIFtcclxuICAgICAgc3RhdGUoJ2luaXRpYWwnLCBzdHlsZSh7XHJcbiAgICAgICAgaGVpZ2h0OiAnKicsXHJcbiAgICAgICAgb3BhY2l0eTogJzEnLFxyXG4gICAgICB9KSksXHJcbiAgICAgIHN0YXRlKCdmaW5hbCcsIHN0eWxlKHtcclxuICAgICAgICBoZWlnaHQ6ICcwcHgnLFxyXG4gICAgICAgIG9wYWNpdHk6ICcwJyxcclxuICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXHJcbiAgICAgIH0pKSxcclxuICAgICAgdHJhbnNpdGlvbignaW5pdGlhbD0+ZmluYWwnLCBhbmltYXRlKCczMDBtcycpKSxcclxuICAgICAgdHJhbnNpdGlvbignZmluYWw9PmluaXRpYWwnLCBhbmltYXRlKCczMDBtcycpKVxyXG4gICAgXSksXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVUNTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAvLyBpc0xpc3RIaWRlOiBib29sZWFuID0gdHJ1ZTtcclxuICAvLyBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgLy8gb25DbGljayhldjogTW91c2VFdmVudCkge1xyXG4gIC8vICAgY29uc3QgY2xpY2tJbnNpZGUgPSB0aGlzLmVsZW1SZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldi50YXJnZXQpO1xyXG4gIC8vICAgaWYgKCFjbGlja0luc2lkZSkge1xyXG4gIC8vICAgICB0aGlzLmlzTGlzdEhpZGUgPSB0cnVlO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZW5qaUZvcm0nKSBzZXQgY29udGVudChjb250ZW50OiBOZ0Zvcm0pIHtcclxuICAgIGlmIChjb250ZW50KSB7IC8vIGluaXRpYWxseSBzZXR0ZXIgZ2V0cyBjYWxsZWQgd2l0aCB1bmRlZmluZWRcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtID0gY29udGVudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2Zvcm1JZFNlYXJjaCcpIG15Rm9ybTogRWxlbWVudFJlZjtcclxuICBASW5wdXQoKSBzZWFyY2hJbnB1dDogSW5wdXRTZWFyY2hPYmogPSBuZXcgSW5wdXRTZWFyY2hPYmooKTtcclxuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyID0gMTA7XHJcbiAgQElucHV0KCkgaXNSZXBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgcmVzdWx0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZ2VuUnB0OiBFdmVudEVtaXR0ZXI8eyBFeHBvcnRUeXBlOiBudW1iZXIsIEVsUmVmOiBFbGVtZW50UmVmIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IEV4cG9ydFR5cGU6IG51bWJlciwgRWxSZWY6IEVsZW1lbnRSZWYgfT4oKTtcclxuICBAT3V0cHV0KCkgcmVxR2V0QWxsRGF0YTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgRXhwb3J0VHlwZUxpc3Q6IEFycmF5PEtleVZhbHVlUmVwb3J0T2JqPiA9IFtcclxuICAgIHtcclxuICAgICAga2V5OiBFeHBvcnRUeXBlQ29uc3RhbnQuRVhQX1RZUEVfUERGLFxyXG4gICAgICB2YWx1ZTogXCJQREZcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBFeHBvcnRUeXBlQ29uc3RhbnQuRVhQX1RZUEVfWExTWCxcclxuICAgICAgdmFsdWU6IFwiRXhjZWwgMjAwN1wiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBrZXk6IEV4cG9ydFR5cGVDb25zdGFudC5FWFBfVFlQRV9ET0NYLFxyXG4gICAgICB2YWx1ZTogXCJEb2N1bWVudCBYTUxcIlxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAga2V5OiBFeHBvcnRUeXBlQ29uc3RhbnQuRVhQX1RZUEVfSlBERixcclxuICAgICAgdmFsdWU6IFwiSnVzdGlmeSBQREZcIlxyXG4gICAgfVxyXG4gIF07XHJcbiAgTGlzdE9mTW9udGg6IExpc3RLZXlWYWx1ZU1vbnRoID0gbmV3IExpc3RLZXlWYWx1ZU1vbnRoKCk7XHJcbiAgTGlzdE9mWWVhcjogQXJyYXk8S2V5VmFsdWVVQ1NlYXJjaE9iaj4gPSBuZXcgQXJyYXk8S2V5VmFsdWVVQ1NlYXJjaE9iaj4oKTtcclxuICBDbGFpbUxpc3Q6IEFycmF5PGFueT4gPSBbXHJcbiAgICB7XHJcbiAgICAgIEtleTogQWRJbnNDb25zdGFudC5SZXN0cmljdGlvbklzTm90TnVsbCxcclxuICAgICAgVmFsdWU6IFwiQ0xBSU1FRFwiXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBLZXk6IEFkSW5zQ29uc3RhbnQuUmVzdHJpY3Rpb25Jc051bGwsXHJcbiAgICAgIFZhbHVlOiBcIlVOQ0xBSU1FRFwiXHJcbiAgICB9LFxyXG4gIF07XHJcblxyXG4gIEV4cG9ydFR5cGU6IG51bWJlciA9IDA7XHJcblxyXG4gIHBhZ2VOb3c6IGFueSA9IDE7XHJcbiAgY29uZmlndXJhdGlvbjogYW55O1xyXG4gIGV4cG9ydERhdGE6IGFueTtcclxuICBFeGNlbERhdGE6IGFueTtcclxuICBpc0RhdGFMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0hpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEJpc0R0OiBzdHJpbmc7XHJcbiAgQnVzaW5lc3NEdDogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgZGF0ZVdyb25nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1NlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjdXJyZW50U3RhdGUgPSAnaW5pdGlhbCc7XHJcblxyXG4gIGZvcm06IEZvcm1Hcm91cDtcclxuICBjb3VudEZvcm0gPSAwO1xyXG4gIGZvcm1hdHRlZEFtb3VudCA9ICcnO1xyXG4gIGFtb3VudCA9IDA7XHJcbiAgYXBpVXJsOiBzdHJpbmc7XHJcbiAgYXJyQ3JpdDogYW55O1xyXG4gIHNlYXJjaEZvcm06IE5nRm9ybTtcclxuICBxdWVyeVBhcmFtOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gIHBlcnNpc3RDcml0OiBDcml0ZXJpYU9ialtdO1xyXG4gIHBlcnNpc3RBZGRUb1RlbXBDcml0OiBDcml0ZXJpYU9ialtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgX3JlbmRlcmVyMjogUmVuZGVyZXIyLFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQsXHJcbiAgICBwdWJsaWMgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIGVsZW1SZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGV4cG9ydEZpbGVTZXJ2aWNlOiBFeHBvcnRGaWxlU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBuZ3hSb3V0ZXI6IE5neFJvdXRlclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKGFzeW5jIHBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMucXVlcnlQYXJhbSA9IGF3YWl0IHRoaXMubmd4Um91dGVyLmdldFF1ZXJ5UGFyYW1zKHBhcmFtcykgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU3RhdGUoKSB7XHJcbiAgICB0aGlzLmN1cnJlbnRTdGF0ZSA9IHRoaXMuY3VycmVudFN0YXRlID09ICdpbml0aWFsJyA/ICdmaW5hbCcgOiAnaW5pdGlhbCc7XHJcbiAgICB0aGlzLmlzSGlkZGVuID0gIXRoaXMuaXNIaWRkZW4gPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwidWNzZWFyY2hcIik7XHJcbiAgICB0aGlzLmFwaVVybCA9IHRoaXMuc2VhcmNoSW5wdXQuZW52aXJvbWVudFVybCArIHRoaXMuc2VhcmNoSW5wdXQuYXBpUXJ5UGFnaW5nO1xyXG4gICAgdGhpcy5hcnJDcml0ID0gdGhpcy5zZWFyY2hJbnB1dC5hcnJDcml0T2JqO1xyXG4gICAgbGV0IGpzID0gdGhpcy5fcmVuZGVyZXIyLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAganMudGV4dCA9IGBcclxuICAgICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICQoXCIjZmxpcFwiKS5jbGljayhmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICQoXCIjcGFuZWxcIikuc2xpZGVUb2dnbGUoXCJzbG93XCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGA7XHJcbiAgICB0aGlzLl9yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5fZG9jdW1lbnQuYm9keSwganMpO1xyXG5cclxuICAgIGxldCB2YWx1ZSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoJ0J1c2luZXNzRGF0ZVJhdycpO1xyXG4gICAgdGhpcy5CaXNEdCA9IHRoaXMuRGVjcnlwdFN0cmluZyh2YWx1ZSwgXCJBZEluc0ZPVTEyMzQ1Njc4XCIpO1xyXG4gICAgdGhpcy5CdXNpbmVzc0R0ID0gbmV3IERhdGUodGhpcy5CaXNEdCk7XHJcbiAgICBhd2FpdCB0aGlzLmluaXRpYXRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5pdGlhdGVGb3JtKCkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuZGF0YUlucHV0ICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXModGhpcy5zZWFyY2hJbnB1dC5kYXRhSW5wdXQpLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICB0aGlzLnNldENvbmZpZ3VyYXRpb25EYXRhKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWFyY2hJbnB1dC5kYXRhSW5wdXQpKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGF3YWl0IHRoaXMuaHR0cC5nZXQodGhpcy5zZWFyY2hJbnB1dC5fdXJsKS50b1Byb21pc2UoKS50aGVuKGRhdGEgPT4ge1xyXG4gICAgICB0aGlzLnNldENvbmZpZ3VyYXRpb25EYXRhKGRhdGEpO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNldENvbmZpZ3VyYXRpb25EYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5jb25maWd1cmF0aW9uID0gZGF0YTtcclxuICAgIHRoaXMuZXhwb3J0RGF0YSA9IGRhdGEuZXhwb3J0RXhjZWw7XHJcbiAgICBpZiAoZGF0YS5leHBvcnRUeXBlTGlzdCAhPSB1bmRlZmluZWQgJiYgZGF0YS5leHBvcnRUeXBlTGlzdC5sZW5ndGggIT0gMCkge1xyXG4gICAgICB0aGlzLkV4cG9ydFR5cGVMaXN0ID0gZGF0YS5leHBvcnRUeXBlTGlzdDtcclxuICAgICAgdGhpcy5FeHBvcnRUeXBlID0gdGhpcy5FeHBvcnRUeXBlTGlzdFswXS5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb3VudEZvcm0gPSBkYXRhLmNvbXBvbmVudC5sZW5ndGg7XHJcbiAgICB0aGlzLmlzRGF0YUxvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQudGl0bGUgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VhcmNoSW5wdXQudGl0bGUgIT0gXCJcIikge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24udGl0bGUgPSB0aGlzLnNlYXJjaElucHV0LnRpdGxlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVzZXJBY2Nlc3MgPSB0aGlzLmdldFVzZXJBY2Nlc3MoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb3VudEZvcm07IGkrKykge1xyXG4gICAgICAvL2luaSBrYWxhdSBkYXRhbnlhIGRpIGxvYWQgZGFyaSBVUkxcclxuICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLmlzRnJvbVVSTCkge1xyXG4gICAgICAgIGxldCByZXF1ZXN0ID0gbmV3IFJlcXVlc3RDcml0ZXJpYU9iaigpO1xyXG4gICAgICAgIGxldCBhcnJheUNyaXQgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgICBsZXQgY3JpdGVyaWFPYmplY3QgPSBuZXcgQ3JpdGVyaWFPYmooKTtcclxuICAgICAgICBjcml0ZXJpYU9iamVjdC5EYXRhVHlwZSA9IFwidGV4dFwiO1xyXG4gICAgICAgIGNyaXRlcmlhT2JqZWN0LnByb3BOYW1lID0gZGF0YS5jb21wb25lbnRbaV0uY3JpdGVyaWFQcm9wTmFtZTtcclxuICAgICAgICBjcml0ZXJpYU9iamVjdC52YWx1ZSA9IHRoaXMucXVlcnlQYXJhbVtkYXRhLmNvbXBvbmVudFtpXS5jcml0ZXJpYVByb3BWYWx1ZV0gfHwgZGF0YS5jb21wb25lbnRbaV0uY3JpdGVyaWFQcm9wVmFsdWU7XHJcbiAgICAgICAgY3JpdGVyaWFPYmplY3QucmVzdHJpY3Rpb24gPSBcImVxXCI7XHJcbiAgICAgICAgYXJyYXlDcml0LnB1c2goY3JpdGVyaWFPYmplY3QpO1xyXG4gICAgICAgIHJlcXVlc3QuY3JpdGVyaWEgPSBhcnJheUNyaXQ7XHJcbiAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLmNyaXRlcmlhUHJvcE5hbWUgIT09IG51bGwgJiYgZGF0YS5jb21wb25lbnRbaV0uY3JpdGVyaWFQcm9wTmFtZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBjb25zdCBfY3JpdFByb3BOYW1lQXJyID0gKGRhdGEuY29tcG9uZW50W2ldLmNyaXRlcmlhUHJvcE5hbWUgYXMgc3RyaW5nKS5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICBjb25zdCBfY3JpdFByb3BWYWx1ZUFyciA9IChkYXRhLmNvbXBvbmVudFtpXS5jcml0ZXJpYVByb3BWYWx1ZSBhcyBzdHJpbmcpLnNwbGl0IChcIjtcIik7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBfY3JpdFByb3BOYW1lQXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJlcXVlc3RbX2NyaXRQcm9wTmFtZUFycltpXV0gPSB0aGlzLnF1ZXJ5UGFyYW1bX2NyaXRQcm9wVmFsdWVBcnJbaV1dIHx8IHVzZXJBY2Nlc3NbX2NyaXRQcm9wVmFsdWVBcnJbaV1dICB8fCBfY3JpdFByb3BWYWx1ZUFycltpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBlbmdlY2VrYW4gcGVuZ2d1bmFhbiB1cmwgYXRhdSBwYXRoXHJcbiAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLnBhdGggIT0gdW5kZWZpbmVkICYmIGRhdGEuY29tcG9uZW50W2ldLnBhdGggIT0gXCJcIikge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50cyAhPSB1bmRlZmluZWQgJiYgdGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzLmxlbmd0aDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLmVudmlyb25tZW50ID09IHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50c1t5XS5lbnZpcm9ubWVudCkge1xyXG4gICAgICAgICAgICAgICAgZGF0YS5jb21wb25lbnRbaV0uZnVsbHBhdGggPSB0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHNbeV0udXJsICsgZGF0YS5jb21wb25lbnRbaV0ucGF0aDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YS5jb21wb25lbnRbaV0uZnVsbHBhdGggPSBkYXRhLmNvbXBvbmVudFtpXS51cmw7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS5mdWxscGF0aCA9IGRhdGEuY29tcG9uZW50W2ldLnVybDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9sZW1wYXIgb2JqZWN0bnlhIHNla2FsaWFuIHNhbWEgdXJsbnlhLCBubnRpIGRpIGJpbmQgZGkgZGFsZW0ga2FyZW5hIG1hc2FsYWggZGkgYXN5bmNueWFcclxuICAgICAgICAvL2JpYXIgdGlhcCBmdW5jdGlvbiBhZGEgc3RhdGUybnlhIHNlbmRpcmlcclxuICAgICAgICB0aGlzLnJlc29sdmVPYmplY3QoZGF0YS5jb21wb25lbnRbaV0sIGRhdGEuY29tcG9uZW50W2ldLmZ1bGxwYXRoLCByZXF1ZXN0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLnR5cGUgPT0gXCJudW1lcmljXCIpIHtcclxuICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSA9IHBhcnNlRmxvYXQoZGF0YS5jb21wb25lbnRbaV0udmFsdWUpLnRvTG9jYWxlU3RyaW5nKCdlbicpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3BlbmdlY2VrYW4gZGRsXHJcbiAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS50eXBlID09IFwiZHJvcGRvd25cIikge1xyXG4gICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS5kdG1UeXBlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLmR0bVR5cGUuaW5jbHVkZXMoXCJtb250aFwiKSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0udmFsdWUgIT0gdW5kZWZpbmVkICYmIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLmluY2x1ZGVzKFwiQkRcIikpIHtcclxuICAgICAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSA9IHRoaXMuc2V0RGVmYXVsdFZhbHVlTW9udGgoZGF0YS5jb21wb25lbnRbaV0udmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRhdGEuY29tcG9uZW50W2ldLml0ZW1zID0gdGhpcy5zZXRNb250aERETChkYXRhLmNvbXBvbmVudFtpXS5kdG1UeXBlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS5kdG1UeXBlLmluY2x1ZGVzKFwieWVhclwiKSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0udmFsdWUgIT0gdW5kZWZpbmVkICYmIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlLmluY2x1ZGVzKFwiQkRcIikpIHtcclxuICAgICAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSA9IHRoaXMuc2V0RGVmYXVsdFZhbHVlWWVhcihkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0YS5jb21wb25lbnRbaV0uaXRlbXMgPSB0aGlzLnNldFllYXJEREwoZGF0YS5jb21wb25lbnRbaV0uZHRtVHlwZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIChkYXRhLmNvbXBvbmVudFtpXS50eXBlID09IFwiZHJvcGRvd25TZWFyY2hcIiAmJiAhZGF0YS5jb21wb25lbnRbaV0uaXNGcm9tVVJMICYmIGRhdGEuY29tcG9uZW50W2ldLml0ZW1zPy5sZW5ndGggIT0gMSkge1xyXG4gICAgICAvLyAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS5kZHNUeXBlID09IHVuZGVmaW5lZCB8fCBkYXRhLmNvbXBvbmVudFtpXS5kZHNUeXBlID09IFwiYWxsXCIpIHtcclxuICAgICAgLy8gICAgIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlID0gXCJhbGxcIjtcclxuICAgICAgLy8gICAgIGRhdGEuY29tcG9uZW50W2ldLmRlc2NyID0gXCJBbGxcIjtcclxuICAgICAgLy8gICB9IGVsc2UgaWYgKGRhdGEuY29tcG9uZW50W2ldLmRkc1R5cGUgPT0gXCJvbmVcIikge1xyXG4gICAgICAvLyAgICAgZGF0YS5jb21wb25lbnRbaV0udmFsdWUgPSBcIm9uZVwiO1xyXG4gICAgICAvLyAgICAgZGF0YS5jb21wb25lbnRbaV0uZGVzY3IgPSBcIlNlbGVjdCBPbmVcIjtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLnR5cGUgPT0gXCJkcm9wZG93blNlYXJjaFwiICYmICFkYXRhLmNvbXBvbmVudFtpXS5pc0Zyb21VUkwgJiYgZGF0YS5jb21wb25lbnRbaV0uaXRlbXMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSA9IGRhdGEuY29tcG9uZW50W2ldLml0ZW1zWzBdLktleTtcclxuICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS5kZXNjciA9IGRhdGEuY29tcG9uZW50W2ldLml0ZW1zWzBdLlZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS50eXBlICE9IFwiZHJvcGRvd25TZWFyY2hcIiAmJiAhZGF0YS5jb21wb25lbnRbaV0udmFsdWUpIHtcclxuICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgaWYgKGRhdGEuY29tcG9uZW50W2ldLmRkbFR5cGUgPT0gJ2FsbCcpIGRhdGEuY29tcG9uZW50W2ldLnZhbHVlID0gXCJhbGxcIjtcclxuICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0uZGRsVHlwZSA9PSAnb25lJykgZGF0YS5jb21wb25lbnRbaV0udmFsdWUgPSBcIm9uZVwiO1xyXG4gICAgICB9XHJcbiAgICAgIC8vcGVuZ2VjZWthbiB0YW5nZ2FsXHJcbiAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS50eXBlID09IFwiZGF0ZXBpY2tlclwiKSB7XHJcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IGRhdGEuY29tcG9uZW50W2ldLnJlYWRvbmx5XHJcblxyXG4gICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS52YWx1ZS5pbmNsdWRlcyhcIkJEXCIpKSB7XHJcbiAgICAgICAgICBsZXQgYnVzaW5lc3NEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgIGlmICh0aGlzLkJpc0R0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgYnVzaW5lc3NEYXRlID0gbmV3IERhdGUodGhpcy5CaXNEdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgb3BlcmF0b3IgPSBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZS5jaGFyQXQoMik7XHJcbiAgICAgICAgICBsZXQgZGF0ZVNob3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgaWYgKG9wZXJhdG9yID09IFwiLVwiKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZW1wTWludXMgPSBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZS5zcGxpdChcIi1cIiwgMik7XHJcbiAgICAgICAgICAgIGxldCBudW1EYXkgPSBwYXJzZUludCh0ZW1wTWludXNbMV0pO1xyXG4gICAgICAgICAgICBidXNpbmVzc0RhdGUuc2V0RGF0ZShidXNpbmVzc0RhdGUuZ2V0RGF0ZSgpIC0gbnVtRGF5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKG9wZXJhdG9yID09IFwiK1wiKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZW1wTWludXMgPSBkYXRhLmNvbXBvbmVudFtpXS52YWx1ZS5zcGxpdChcIitcIiwgMik7XHJcbiAgICAgICAgICAgIGxldCBudW1EYXkgPSBwYXJzZUludCh0ZW1wTWludXNbMV0pO1xyXG4gICAgICAgICAgICBidXNpbmVzc0RhdGUuc2V0RGF0ZShidXNpbmVzc0RhdGUuZ2V0RGF0ZSgpICsgbnVtRGF5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGVTaG93ID0gYnVzaW5lc3NEYXRlO1xyXG4gICAgICAgICAgbGV0IGRhdGVUZXh0ID0gZm9ybWF0RGF0ZShkYXRlU2hvdywgJ3l5eXktTU0tZGQnLCAnZW4tVVMnKVxyXG4gICAgICAgICAgZGF0YS5jb21wb25lbnRbaV0udmFsdWUgPSBkYXRlVGV4dDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5ID0gZmFsc2UpIHtcclxuICAgICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtpXS5yZXN0cmljdGlvbiAhPSB1bmRlZmluZWQgJiYgZGF0YS5jb21wb25lbnRbaV0ucmVzdHJpY3Rpb24gIT0gXCJcIikge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbaV0ucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkdUXCIpIHtcclxuICAgICAgICAgICAgICBsZXQgbWluRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGEuY29tcG9uZW50W2ldLm1pbkRhdGUsICd5eXl5LU1NLWRkJykpO1xyXG4gICAgICAgICAgICAgIG1pbkRhdGUuc2V0RGF0ZShtaW5EYXRlLmdldERhdGUoKSArIDEpO1xyXG4gICAgICAgICAgICAgIGRhdGEuY29tcG9uZW50W2ldLm1pbkRhdGUgPSBtaW5EYXRlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuY29tcG9uZW50W2ldLnJlc3RyaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT0gXCJMVFwiKSB7XHJcbiAgICAgICAgICAgICAgbGV0IG1heERhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRhLmNvbXBvbmVudFtpXS5tYXhEYXRlLCAneXl5eS1NTS1kZCcpKTtcclxuICAgICAgICAgICAgICBtYXhEYXRlLnNldERhdGUobWF4RGF0ZS5nZXREYXRlKCkgLSAxKTtcclxuICAgICAgICAgICAgICBkYXRhLmNvbXBvbmVudFtpXS5tYXhEYXRlID0gbWF4RGF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoZGF0YS5jb21wb25lbnRbaV0udHlwZSA9PSBcInRleHRib3hcIikge1xyXG4gICAgICAgIGNvbnN0IGlzVXBwZXJjYXNlID0gZGF0YS5jb21wb25lbnRbaV0uaXNVcHBlcmNhc2UgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkYXRhLmNvbXBvbmVudFtpXS5pc1VwcGVyY2FzZTtcclxuICAgICAgICBjb25zdCBfdmFsdWUgPSB0aGlzLmF1dG9maWxsKGRhdGEuY29tcG9uZW50W2ldKTtcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2ldLnZhbHVlID0gaXNVcHBlcmNhc2UgPyBfdmFsdWUudG9VcHBlckNhc2UoKSA6IF92YWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoZGF0YS5jb21wb25lbnRbaV0udHlwZSA9PSBcImRyb3Bkb3duXCIpIHtcclxuICAgICAgICBjb25zdCBfdmFsdWUgPSB0aGlzLmF1dG9maWxsKGRhdGEuY29tcG9uZW50W2ldLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudFtpXS52YWx1ZSA9IF92YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuY291bnRGb3JtOyBqKyspIHtcclxuICAgICAgICBpZiAoZGF0YS5jb21wb25lbnRbal0uaXNFdmVudCAmJiB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2pdLml0ZW1zVXJsLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlRXZlbnQoZGF0YS5jb21wb25lbnRbal0uaXRlbXNVcmxbMF0uS2V5LCBkYXRhLmNvbXBvbmVudFtqXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRhLmNvbXBvbmVudFtqXS50eXBlID09IFwib2ZmaWNlUm9sZUNvZGVzXCIgJiYgdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudFtqXS5pdGVtc1VybC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLlNldFJvbGVPZmZpY2VDb2RlcyhqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuICBcclxuICBwcml2YXRlIGdldFVzZXJBY2Nlc3MoKSB7XHJcbiAgICBjb25zdCBfdXNlckFjY2Vzczogc3RyaW5nID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcIlVzZXJBY2Nlc3NcIik7XHJcbiAgICBjb25zdCB1c2VyQWNjZXNzID0gSlNPTi5wYXJzZSh0aGlzLkRlY3J5cHRTdHJpbmcoX3VzZXJBY2Nlc3MsIFwiQWRJbnNGT1UxMjM0NTY3OFwiKSk7XHJcbiAgICByZXR1cm4gdXNlckFjY2VzcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXV0b2ZpbGwoZGF0YTogYW55LCBjaGVja1ZhbHVlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgaWYgKGNoZWNrVmFsdWUpIHtcclxuICAgICAgaWYgKGRhdGEudmFsdWUgIT0gXCJcIikgcmV0dXJuIGRhdGEudmFsdWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBhdXRvZmlsbDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IGRhdGEuYXV0b2ZpbGw7XHJcbiAgICBpZiAoYXV0b2ZpbGwgPT0gdW5kZWZpbmVkKSByZXR1cm4gZGF0YS52YWx1ZTtcclxuICAgIGlmIChhdXRvZmlsbC5zb3VyY2UgPT0gXCJwYXJhbVwiKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5UGFyYW1bYXV0b2ZpbGwua2V5XTtcclxuICAgIH1cclxuICAgIGlmIChhdXRvZmlsbC5zb3VyY2UgPT0gXCJ1c2VyYWNjZXNzXCIpIHtcclxuICAgICAgY29uc3QgdXNlckFjY2VzcyA9IHRoaXMuZ2V0VXNlckFjY2VzcygpO1xyXG4gICAgICByZXR1cm4gdXNlckFjY2Vzc1thdXRvZmlsbC5rZXldO1xyXG4gICAgfVxyXG4gICAgaWYgKGF1dG9maWxsLnNvdXJjZSA9PSBcImRpY3RzXCIpIHtcclxuICAgICAgaWYgKCF0aGlzLnNlYXJjaElucHV0LmRpY3RzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJkaWN0cyB1bmRlZmluZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIGF1dG9maWxsLmtleTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hJbnB1dD8uZGljdHNbYXV0b2ZpbGwua2V5XSA/PyBhdXRvZmlsbC5rZXk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YS52YWx1ZTtcclxuICB9XHJcblxyXG4gIFNldFJvbGVPZmZpY2VDb2RlcyhpOiBudW1iZXIpIHtcclxuICAgIGxldCB1c2VyQWNjZXNzOiBzdHJpbmcgPSB0aGlzLmdldFVzZXJBY2Nlc3MoKTtcclxuICAgIGxldCByb2xlQ29kZTogc3RyaW5nID0gdXNlckFjY2Vzc1tcIlJvbGVDb2RlXCJdO1xyXG4gICAgbGV0IGxpc3RPZmZpY2VSb2xlQ29kZXM6IEFycmF5PHN0cmluZz4gPSBuZXcgQXJyYXkoKTtcclxuICAgIGxpc3RPZmZpY2VSb2xlQ29kZXMucHVzaChyb2xlQ29kZSk7XHJcbiAgICBsZXQgY29tcG9uZW50ID0gdGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtpXTtcclxuICAgIGxldCBkZGwgPSBjb21wb25lbnQub3B0aW9ucztcclxuICAgIGxldCB0ZXh0ID0gZGRsW2RkbC5zZWxlY3RlZEluZGV4XS52YWx1ZS50cmltKCk7XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudFtpXS5pdGVtc1VybC5sZW5ndGggPT0gMSB8fCAodGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudFtpXS5kZGxUeXBlID09ICdhbGwnICYmIHRleHQgPT0gJ2FsbCcpKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2ldLml0ZW1zVXJsLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2ldLml0ZW1zVXJsW2luZGV4XTtcclxuICAgICAgICBsaXN0T2ZmaWNlUm9sZUNvZGVzLnB1c2goZWxlbWVudC5LZXkpO1xyXG4gICAgICAgIGxpc3RPZmZpY2VSb2xlQ29kZXMucHVzaChyb2xlQ29kZSArIFwiLVwiICsgZWxlbWVudC5LZXkpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsaXN0T2ZmaWNlUm9sZUNvZGVzLnB1c2godGV4dCk7XHJcbiAgICAgIGxpc3RPZmZpY2VSb2xlQ29kZXMucHVzaChyb2xlQ29kZSArIFwiLVwiICsgdGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWFyY2hJbnB1dC5pbnRlZ3JhdGlvbk9iai5yZXF1ZXN0T2JqW1wiT2ZmaWNlUm9sZUNvZGVzXCJdID0gbGlzdE9mZmljZVJvbGVDb2RlcztcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRWYWx1ZU1vbnRoKHZhbHVlKSB7XHJcbiAgICBsZXQgYnVzaW5lc3NEYXRlID0gbmV3IERhdGUodGhpcy5CdXNpbmVzc0R0KTtcclxuICAgIGxldCBvcGVyYXRvciA9IHZhbHVlLmNoYXJBdCgyKTtcclxuICAgIGxldCB0ZW1wVmFsdWUgPSB2YWx1ZS5zcGxpdChvcGVyYXRvciwgMik7XHJcbiAgICBsZXQgbnVtTW9udGggPSBwYXJzZUludCh0ZW1wVmFsdWVbMV0pO1xyXG4gICAgaWYgKCFudW1Nb250aCkgbnVtTW9udGggPSAxO1xyXG4gICAgaWYgKG9wZXJhdG9yID09IFwiLVwiKSB7XHJcbiAgICAgIGJ1c2luZXNzRGF0ZS5zZXRNb250aChidXNpbmVzc0RhdGUuZ2V0TW9udGgoKSAtIG51bU1vbnRoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG9wZXJhdG9yID09IFwiK1wiKSB7XHJcbiAgICAgIGJ1c2luZXNzRGF0ZS5zZXRNb250aChidXNpbmVzc0RhdGUuZ2V0TW9udGgoKSArIG51bU1vbnRoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBidXNpbmVzc0RhdGUuZ2V0TW9udGgoKTtcclxuICB9XHJcbiAgc2V0TW9udGhEREwobW9udGgpIHtcclxuICAgIGlmIChtb250aCA9PSBcIm1vbnRoXCIpIHJldHVybiB0aGlzLkxpc3RPZk1vbnRoLkxpc3RPZk1vbnRoO1xyXG4gICAgbGV0IExpc3RPZk1vbnRoOiBBcnJheTxLZXlWYWx1ZVVDU2VhcmNoT2JqPiA9IG5ldyBBcnJheSgpO1xyXG4gICAgbGV0IGVxdWF0aW9uID0gbW9udGgubWF0Y2goXCJbXFxcXCtdWy1dfFstXVtcXFxcK118XFxcXCt8LVwiKTtcclxuICAgIGxldCB0b01pbjogbnVtYmVyID0gdGhpcy5CdXNpbmVzc0R0LmdldE1vbnRoKCk7XHJcbiAgICBsZXQgdG9NYXg6IG51bWJlciA9IHRoaXMuQnVzaW5lc3NEdC5nZXRNb250aCgpO1xyXG4gICAgbGV0IG1pbk1heDogbnVtYmVyID0gcGFyc2VJbnQobW9udGguc3Vic3RyaW5nKGVxdWF0aW9uLmluZGV4ICsgZXF1YXRpb25bMF0ubGVuZ3RoKSk7XHJcbiAgICBpZiAobWluTWF4ID49IDEyKSByZXR1cm4gdGhpcy5MaXN0T2ZNb250aC5MaXN0T2ZNb250aDtcclxuICAgIGlmICgoZXF1YXRpb25bMF0gPT0gXCIrLVwiIHx8IGVxdWF0aW9uWzBdID09IFwiLStcIikgJiYgbWluTWF4ID49IDYpIHJldHVybiB0aGlzLkxpc3RPZk1vbnRoLkxpc3RPZk1vbnRoO1xyXG4gICAgbGV0IGRpY3RPZk1vbnRoOiB7IFttb250aDogbnVtYmVyXTogc3RyaW5nIH0gPSB0aGlzLkxpc3RPZk1vbnRoLkRpY3RPZk1vbnRoO1xyXG4gICAgTGlzdE9mTW9udGgucHVzaCh7IGtleTogdG9NaW4sIHZhbHVlOiBkaWN0T2ZNb250aFt0b01pbl0gfSk7XHJcblxyXG4gICAgZm9yIChsZXQgcSA9IDA7IHEgPCBtaW5NYXg7IHErKykge1xyXG4gICAgICBpZiAoZXF1YXRpb25bMF0uaW5jbHVkZXMoXCItXCIpKSB7XHJcbiAgICAgICAgdG9NaW4tLTtcclxuICAgICAgICBpZiAodG9NaW4gPT0gMCkgdG9NaW4gPSAxMjtcclxuICAgICAgICBMaXN0T2ZNb250aC5wdXNoKHsga2V5OiB0b01pbiwgdmFsdWU6IGRpY3RPZk1vbnRoW3RvTWluXSB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXF1YXRpb25bMF0uaW5jbHVkZXMoXCIrXCIpKSB7XHJcbiAgICAgICAgdG9NYXgrKztcclxuICAgICAgICBpZiAodG9NYXggPT0gMTMpIHRvTWF4ID0gMTtcclxuICAgICAgICBMaXN0T2ZNb250aC5wdXNoKHsga2V5OiB0b01heCwgdmFsdWU6IGRpY3RPZk1vbnRoW3RvTWF4XSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTGlzdE9mTW9udGguc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICByZXR1cm4gYS5rZXkgLSBiLmtleTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIExpc3RPZk1vbnRoO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFZhbHVlWWVhcih2YWx1ZSkge1xyXG4gICAgbGV0IGJ1c2luZXNzRGF0ZSA9IG5ldyBEYXRlKHRoaXMuQnVzaW5lc3NEdCk7XHJcbiAgICBsZXQgb3BlcmF0b3IgPSB2YWx1ZS5jaGFyQXQoMik7XHJcbiAgICBsZXQgdGVtcFZhbHVlID0gdmFsdWUuc3BsaXQob3BlcmF0b3IsIDIpO1xyXG4gICAgbGV0IG51bVllYXIgPSBwYXJzZUludCh0ZW1wVmFsdWVbMV0pO1xyXG4gICAgaWYgKCFudW1ZZWFyKSBudW1ZZWFyID0gMTtcclxuICAgIGlmIChvcGVyYXRvciA9PSBcIi1cIikge1xyXG4gICAgICBidXNpbmVzc0RhdGUuc2V0RnVsbFllYXIoYnVzaW5lc3NEYXRlLmdldEZ1bGxZZWFyKCkgLSBudW1ZZWFyKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKG9wZXJhdG9yID09IFwiK1wiKSB7XHJcbiAgICAgIGJ1c2luZXNzRGF0ZS5zZXRGdWxsWWVhcihidXNpbmVzc0RhdGUuZ2V0RnVsbFllYXIoKSArIG51bVllYXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1c2luZXNzRGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gIH1cclxuICBzZXRZZWFyRERMKHllYXIpIHtcclxuICAgIHRoaXMuTGlzdE9mWWVhciA9IG5ldyBBcnJheTxLZXlWYWx1ZVVDU2VhcmNoT2JqPigpO1xyXG4gICAgbGV0IGVxdWF0aW9uID0geWVhci5tYXRjaChcIltcXFxcK11bLV18Wy1dW1xcXFwrXXxcXFxcK3wtXCIpO1xyXG4gICAgbGV0IHRvTWluOiBudW1iZXIgPSB0aGlzLkJ1c2luZXNzRHQuZ2V0RnVsbFllYXIoKTtcclxuICAgIGxldCB0b01heDogbnVtYmVyID0gdGhpcy5CdXNpbmVzc0R0LmdldEZ1bGxZZWFyKCk7XHJcbiAgICBsZXQgbWluTWF4OiBudW1iZXIgPSBwYXJzZUludCh5ZWFyLnN1YnN0cmluZyhlcXVhdGlvbi5pbmRleCArIGVxdWF0aW9uWzBdLmxlbmd0aCkpO1xyXG4gICAgdGhpcy5MaXN0T2ZZZWFyLnB1c2goeyBrZXk6IHRoaXMuQnVzaW5lc3NEdC5nZXRGdWxsWWVhcigpLCB2YWx1ZTogdGhpcy5CdXNpbmVzc0R0LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSB9KTtcclxuXHJcbiAgICBmb3IgKGxldCBxID0gMDsgcSA8IG1pbk1heDsgcSsrKSB7XHJcbiAgICAgIGlmIChlcXVhdGlvblswXSA9PSBcIi0rXCIgfHwgZXF1YXRpb25bMF0gPT0gXCIrLVwiKSB7XHJcbiAgICAgICAgdG9NaW4tLTtcclxuICAgICAgICB0b01heCsrO1xyXG4gICAgICAgIHRoaXMuTGlzdE9mWWVhci5wdXNoKHsga2V5OiB0b01pbiwgdmFsdWU6IHRvTWluLnRvU3RyaW5nKCkgfSwgeyBrZXk6IHRvTWF4LCB2YWx1ZTogdG9NYXgudG9TdHJpbmcoKSB9KTtcclxuICAgICAgfSBlbHNlIGlmIChlcXVhdGlvblswXSA9PSBcIi1cIikge1xyXG4gICAgICAgIHRvTWluLS07XHJcbiAgICAgICAgdGhpcy5MaXN0T2ZZZWFyLnB1c2goeyBrZXk6IHRvTWluLCB2YWx1ZTogdG9NaW4udG9TdHJpbmcoKSB9KTtcclxuICAgICAgfSBlbHNlIGlmIChlcXVhdGlvblswXSA9PSBcIitcIikge1xyXG4gICAgICAgIHRvTWF4Kys7XHJcbiAgICAgICAgdGhpcy5MaXN0T2ZZZWFyLnB1c2goeyBrZXk6IHRvTWF4LCB2YWx1ZTogdG9NYXgudG9TdHJpbmcoKSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5MaXN0T2ZZZWFyLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgcmV0dXJuIGEua2V5IC0gYi5rZXk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLkxpc3RPZlllYXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SlNPTih1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBvc3RKU09OKHVybDogc3RyaW5nLCBjcml0ZXJpYTogYW55ID0gbnVsbCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCBjcml0ZXJpYSk7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hDbGljayhJc0V4cG9ydEV4Y2VsOiBib29sZWFuID0gZmFsc2UsIEV4dEZpbGU6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgIGxldCBmaWx0ZXJlZCA9IHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnQuZmlsdGVyKChpdGVtLCBpLCBhcnIpID0+XHJcbiAgICAgIGFyci5maW5kSW5kZXgoKHgpID0+ICh4Lm5hbWUgPT09IGl0ZW0ubmFtZSkpID09PSBpKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbHRlcmVkLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChmaWx0ZXJlZFtpXS50eXBlID09IFwibnVtZXJpY1wiKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuY2hlY2tWYWx1ZUd0ZUx0ZShmaWx0ZXJlZFtpXSkpIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcmRlciA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLm9yZGVyYnkgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLm9yZGVyYnkua2V5ICE9PSBcIlwiICYmIHRoaXMuY29uZmlndXJhdGlvbi5vcmRlcmJ5LnZhbHVlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgb3JkZXIgPSB7XHJcbiAgICAgICAgICBrZXk6IHRoaXMuY29uZmlndXJhdGlvbi5vcmRlcmJ5LmtleSxcclxuICAgICAgICAgIHZhbHVlOiB0aGlzLmNvbmZpZ3VyYXRpb24ub3JkZXJieS52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5wYWdlTm93ID0gMTtcclxuICAgIGxldCByb3dQZXJQYWdlID0gdGhpcy5wYWdlU2l6ZTtcclxuICAgIGlmIChJc0V4cG9ydEV4Y2VsKSByb3dQZXJQYWdlID0gOTk5OTtcclxuICAgIHRoaXMuc2VhcmNoKHRoaXMuYXBpVXJsLCB0aGlzLnBhZ2VOb3csIHJvd1BlclBhZ2UsIG9yZGVyLCB0cnVlLCB0aGlzLmFyckNyaXQsIElzRXhwb3J0RXhjZWwsIEV4dEZpbGUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0ucmVzZXRGb3JtKHtcclxuICAgICAgRXhwb3J0VHlwZTogdGhpcy5FeHBvcnRUeXBlTGlzdFswXS5rZXlcclxuICAgIH0pO1xyXG4gICAgYXdhaXQgdGhpcy5pbml0aWF0ZUZvcm0oKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNlYXJjaChhcGlVcmw6IHN0cmluZywgcGFnZU5vOiBudW1iZXIsIHJvd1BlclBhZ2U6IG51bWJlciwgb3JkZXJCeTogYW55LCBpc0NsaWNrU2VhcmNoOiBib29sZWFuLCBhZGRDcml0OiBDcml0ZXJpYU9ialtdID0gbmV3IEFycmF5KCksIElzRXhwb3J0RXhjZWw6IGJvb2xlYW4gPSBmYWxzZSwgZXh0RmlsZTogc3RyaW5nID0gXCJcIiwgaXNBZGRUb1RlbXA6IGJvb2xlYW4gPSBmYWxzZSwgYWRkVG9UZW1wQ3JpdDogQ3JpdGVyaWFPYmpbXSA9IG5ldyBBcnJheSgpKSB7XHJcbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0Q3JpdGVyaWFPYmooKTtcclxuICAgIGxldCBhcnJDcml0ID0gbmV3IEFycmF5KCk7XHJcbiAgICBsZXQgSXNRdWVyeUluID0gZmFsc2U7XHJcbiAgICBsZXQgSXNCcmVhayA9IGZhbHNlO1xyXG4gICAgbGV0IGJvZHlMaXN0ID0gbmV3IEFycmF5KCk7XHJcbiAgICBsZXQgaGVhZGVyTGlzdCA9IG5ldyBBcnJheSgpO1xyXG4gICAgbGV0IGZpbGVOYW1lOiBzdHJpbmc7XHJcbiAgICBsZXQgYm9keURhdGEgPSBuZXcgQXJyYXkoKTtcclxuICAgIGxldCBkYXRhRmlsZSA9IG5ldyBBcnJheSgpO1xyXG4gICAgbGV0IGFkZGl0aW9uYWxFeHBvcnRMaXN0ID0gbmV3IEFycmF5KCk7XHJcbiAgICBsZXQgZXhjbHVkZUV4cG9ydExpc3QgPSBuZXcgQXJyYXkoKTtcclxuXHJcbiAgICBjb25zdCBtYXBwZWRDb25mTmFtZVZhbHVlID0ge307XHJcbiAgICAodGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudCBhcyBbXSkuZm9yRWFjaCgoeDogYW55KSA9PiB7XHJcbiAgICAgIG1hcHBlZENvbmZOYW1lVmFsdWVbeC5uYW1lXSA9IHtcclxuICAgICAgICB2YWx1ZTogeC52YWx1ZSxcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyBJbmplY3Qgd2hlcmVRdWVyeSBmb3Igd2hlcmUgY3JpdGVyaWFcclxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0LndoZXJlVmFsdWUgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VhcmNoSW5wdXQud2hlcmVWYWx1ZS5sZW5ndGggIT0gMCkge1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlzdHJpbmcud2hlcmVRdWVyeSA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zZWFyY2hJbnB1dC53aGVyZVZhbHVlLmxlbmd0aDsgeCsrKSB7XHJcbiAgICAgICAgLy8gcmVhZCB2YWx1ZSBiYXNlZCBvbiBzZWFyY2ggY29tcG9uZW50IHZhbHVlIC0gaWYgbm90IGZvdW5kLCB3aWxsIGhhcmRjb2RlZFxyXG4gICAgICAgIGNvbnN0IF92YWwgPSBtYXBwZWRDb25mTmFtZVZhbHVlW3RoaXMuc2VhcmNoSW5wdXQud2hlcmVWYWx1ZVt4XS52YWx1ZV0gPyBtYXBwZWRDb25mTmFtZVZhbHVlW3RoaXMuc2VhcmNoSW5wdXQud2hlcmVWYWx1ZVt4XS52YWx1ZV0udmFsdWUgOiB0aGlzLnNlYXJjaElucHV0LndoZXJlVmFsdWVbeF0udmFsdWU7XHJcbiAgICAgICAgLy8gdGhpcy5jb25maWd1cmF0aW9uLnF1ZXJ5c3RyaW5nLndoZXJlUXVlcnkucHVzaCh0aGlzLnNlYXJjaElucHV0LndoZXJlVmFsdWVbeF0udmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5xdWVyeXN0cmluZy53aGVyZVF1ZXJ5LnB1c2goX3ZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0LmZyb21WYWx1ZSAhPSB1bmRlZmluZWQgJiYgdGhpcy5zZWFyY2hJbnB1dC5mcm9tVmFsdWUubGVuZ3RoICE9IDApIHtcclxuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnF1ZXJ5c3RyaW5nLmZyb21RdWVyeSA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGhpcy5zZWFyY2hJbnB1dC5mcm9tVmFsdWUubGVuZ3RoOyB4KyspIHtcclxuICAgICAgICAvLyByZWFkIHZhbHVlIGJhc2VkIG9uIHNlYXJjaCBjb21wb25lbnQgdmFsdWUgLSBpZiBub3QgZm91bmQsIHdpbGwgaGFyZGNvZGVkXHJcbiAgICAgICAgY29uc3QgX3ZhbCA9IG1hcHBlZENvbmZOYW1lVmFsdWVbdGhpcy5zZWFyY2hJbnB1dC5mcm9tVmFsdWVbeF0udmFsdWVdID8gbWFwcGVkQ29uZk5hbWVWYWx1ZVt0aGlzLnNlYXJjaElucHV0LmZyb21WYWx1ZVt4XS52YWx1ZV0udmFsdWUgOiB0aGlzLnNlYXJjaElucHV0LmZyb21WYWx1ZVt4XS52YWx1ZTtcclxuICAgICAgICAvLyB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlzdHJpbmcuZnJvbVF1ZXJ5LnB1c2godGhpcy5zZWFyY2hJbnB1dC5mcm9tVmFsdWVbeF0udmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5xdWVyeXN0cmluZy5mcm9tUXVlcnkucHVzaChfdmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmVxdWVzdC5wYWdlTm8gPSBwYWdlTm87XHJcbiAgICByZXF1ZXN0LnJvd1BlclBhZ2UgPSByb3dQZXJQYWdlO1xyXG4gICAgcmVxdWVzdC5vcmRlckJ5ID0gb3JkZXJCeTtcclxuICAgIHJlcXVlc3QucXVlcnlTdHJpbmcgPSB0aGlzLmNvbmZpZ3VyYXRpb24ucXVlcnlzdHJpbmc7XHJcblxyXG4gICAgbGV0IGZvcm1TZXE6IG51bWJlciA9IC0xO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50Rm9ybTsgaSsrKSB7XHJcbiAgICAgIGxldCBjcml0T2JqID0gbmV3IENyaXRlcmlhT2JqKCk7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50W2ldLnR5cGUgPT0gXCJkcm9wZG93blNlYXJjaFwiKSB7XHJcbiAgICAgICAgZm9ybVNlcSArPSAzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvcm1TZXErKztcclxuICAgICAgfVxyXG4gICAgICBsZXQgY29tcG9uZW50ID0gdGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtmb3JtU2VxXTtcclxuXHJcbiAgICAgIC8vIC8vIHBvcHVwIG1lc3NhZ2UgaWYgcmVxdWlyZWRcclxuICAgICAgLy8gaWYgKGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWQnKSAhPSBudWxsICYmIGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVxdWlyZWQnKSA9PSBcInRydWVcIikge1xyXG4gICAgICAvLyAgIGxldCB2YWwgPSBjb21wb25lbnQudmFsdWUudHJpbSgpO1xyXG4gICAgICAvLyAgIGlmICh2YWwgPT0gXCJcIikge1xyXG4gICAgICAvLyAgICAgSXNCcmVhayA9IHRydWU7XHJcbiAgICAgIC8vICAgICBsZXQgbGFiZWwgPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdsYWJlbCcpO1xyXG4gICAgICAvLyAgICAgdGhpcy50b2FzdHIud2FybmluZyhcIlBsZWFzZSBpbnB1dCBcIiArIGxhYmVsKTtcclxuICAgICAgLy8gICAgIGJyZWFrO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgY3JpdE9iai5EYXRhVHlwZSA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScpO1xyXG4gICAgICBpZiAoIWNyaXRPYmouRGF0YVR5cGUpIGNyaXRPYmouRGF0YVR5cGUgPSBcIlwiO1xyXG4gICAgICAvL0luaSBraHVzdXMga2FsYXUgZGFyaSBEcm9wIERvd25cclxuICAgICAgaWYgKGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ3F1ZXJ5LWluJykgIT0gbnVsbCAmJiBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdxdWVyeS1pbicpID09IFwidHJ1ZVwiKSB7XHJcbiAgICAgICAgSXNRdWVyeUluID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBJc1F1ZXJ5SW4gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29tcG9uZW50LnZhbHVlICE9IFwiXCIpIHtcclxuICAgICAgICBpZiAoY29tcG9uZW50Lm5vZGVOYW1lID09ICdTRUxFQ1QnKSB7XHJcbiAgICAgICAgICBsZXQgZGRsID0gY29tcG9uZW50Lm9wdGlvbnM7XHJcbiAgICAgICAgICBsZXQgdGV4dCA9IGRkbFtkZGwuc2VsZWN0ZWRJbmRleF0udmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgaWYgKHRleHQgPT0gXCJvbmVcIikge1xyXG4gICAgICAgICAgICBJc0JyZWFrID0gdHJ1ZTtcclxuICAgICAgICAgICAgbGV0IGxhYmVsID0gY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnbGFiZWwnKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHIud2FybmluZyhcIlBsZWFzZSBzZWxlY3QgXCIgKyBsYWJlbCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNyaXQtZGF0YXRhYmxlJykgIT0gXCJcIiAmJiBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNyaXQtZGF0YXRhYmxlJykgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjcml0T2JqLmlzQ3JpdGVyaWFEYXRhVGFibGUgPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNyaXQtZGF0YXRhYmxlJyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnRbaV0udHlwZSA9PSBcInRhc2tEZWZpbml0aW9uS2V5XCIgfHxcclxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudFtpXS50eXBlID09IFwicHJvY2Vzc0tleVwiKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudFtpXS50eXBlID09IFwiY2xhaW1cIikge1xyXG4gICAgICAgICAgICBjcml0T2JqLnByb3BOYW1lID0gY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJyk7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSB0ZXh0O1xyXG4gICAgICAgICAgICBjcml0T2JqLnZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKCFpc0FkZFRvVGVtcCkge1xyXG4gICAgICAgICAgICAgIGFyckNyaXQucHVzaChjcml0T2JqKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRleHQgIT0gXCJhbGxcIiAmJiB0ZXh0ICE9IFwib25lXCIpIHtcclxuICAgICAgICAgICAgICAvL0thbGF1IERhcmkgRHJvcGRvd24gdWRhaCBwYXN0aSBwYWtlIEVxXHJcbiAgICAgICAgICAgICAgY3JpdE9iai5yZXN0cmljdGlvbiA9IEFkSW5zQ29uc3RhbnQuUmVzdHJpY3Rpb25FcTtcclxuICAgICAgICAgICAgICBpZiAoY29tcG9uZW50Lm5hbWUgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5uYW1lO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjcml0T2JqLnByb3BOYW1lID0gY29tcG9uZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGNyaXRPYmoudmFsdWUgPSB0ZXh0O1xyXG4gICAgICAgICAgICAgIGlmICghaXNBZGRUb1RlbXApIHtcclxuICAgICAgICAgICAgICAgIGFyckNyaXQucHVzaChjcml0T2JqKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGV4dCA9PSBcImFsbFwiICYmIElzUXVlcnlJbiAmJiBjb21wb25lbnQub3B0aW9ucy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgIGxldCBkZGxMaXN0ID0gbmV3IEFycmF5KCk7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgeCA9IDA7IHggPCBjb21wb25lbnQub3B0aW9ucy5sZW5ndGg7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHggIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICBkZGxMaXN0LnB1c2goY29tcG9uZW50Lm9wdGlvbnNbeF0udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZGRsTGlzdC5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY3JpdE9iai5yZXN0cmljdGlvbiA9IEFkSW5zQ29uc3RhbnQuUmVzdHJpY3Rpb25JbjtcclxuICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQubmFtZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNyaXRPYmoucHJvcE5hbWUgPSBjb21wb25lbnQubmFtZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNyaXRPYmoucHJvcE5hbWUgPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLW5hbWUnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNyaXRPYmoubGlzdFZhbHVlID0gZGRsTGlzdDtcclxuICAgICAgICAgICAgICAgIGlmICghaXNBZGRUb1RlbXApIHtcclxuICAgICAgICAgICAgICAgICAgYXJyQ3JpdC5wdXNoKGNyaXRPYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vS2FsYXUgYWRhIFBlcmNlbnQgbWFrYSB5YW5nIGRpcGFrZSBubnRpIGFkYWxhaCBSZXN0cmljdGlvbnMgTGlrZVxyXG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5uYW1lICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5uYW1lO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbmFtZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY3JpdE9iai52YWx1ZSA9IGNvbXBvbmVudC52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnZhbHVlLmluY2x1ZGVzKFwiJVwiKSkge1xyXG4gICAgICAgICAgICBjcml0T2JqLnJlc3RyaWN0aW9uID0gQWRJbnNDb25zdGFudC5SZXN0cmljdGlvbkxpa2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvL2thbGF1IGNvbXBvbmVudG55YSBEYXRlLCByZXN0cmljdGlvbnNueWEgbGdzZyBhbWJpbCBkYXJpIHByb3BlcnR5IEpTT05ueWFcclxuICAgICAgICAgIGVsc2UgaWYgKGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVzdHJpY3Rpb24nKSAhPSBcIlwiICYmIGNvbXBvbmVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmVzdHJpY3Rpb24nKSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXJlc3RyaWN0aW9uJyk7XHJcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXR5cGUnKSA9PSAnbnVtZXJpYycpIHtcclxuICAgICAgICAgICAgICBjcml0T2JqLnZhbHVlID0gcGFyc2VGbG9hdChjb21wb25lbnQudmFsdWUucmVwbGFjZSgvLC9nLCAnJykpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNyaXRPYmoucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkxJS0VcIikge1xyXG4gICAgICAgICAgICAgIGNyaXRPYmoudmFsdWUgPSBcIiVcIiArIGNvbXBvbmVudC52YWx1ZS50cmltKCkgKyBcIiVcIjtcclxuICAgICAgICAgICAgICBjcml0T2JqLnJlc3RyaWN0aW9uID0gQWRJbnNDb25zdGFudC5SZXN0cmljdGlvbkxpa2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBBZEluc0NvbnN0YW50LlJlc3RyaWN0aW9uRXFcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNyaXQtZGF0YXRhYmxlJykgIT0gXCJcIiAmJiBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNyaXQtZGF0YXRhYmxlJykgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjcml0T2JqLmlzQ3JpdGVyaWFEYXRhVGFibGUgPSBjb21wb25lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWNyaXQtZGF0YXRhYmxlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoIWlzQWRkVG9UZW1wKSB7XHJcbiAgICAgICAgICAgIGFyckNyaXQucHVzaChjcml0T2JqKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoSXNCcmVhaykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFkZENyaXQgIT0gbnVsbCAmJiBhZGRDcml0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoYWRkQ3JpdC5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkQ3JpdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgYXJyQ3JpdC5wdXNoKGFkZENyaXRbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaElucHV0LmFkZENyaXRJbnB1dCAhPSBudWxsIHx8IHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWFyY2hJbnB1dC5hZGRDcml0SW5wdXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGFyckNyaXQucHVzaCh0aGlzLnNlYXJjaElucHV0LmFkZENyaXRJbnB1dFtpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNlYXJjaElucHV0LmFkZENyaXRJbnB1dCAhPSBudWxsIHx8IHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYXJyQ3JpdC5wdXNoKHRoaXMuc2VhcmNoSW5wdXQuYWRkQ3JpdElucHV0W2ldKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0NsaWNrU2VhcmNoKSB7XHJcbiAgICAgIHRoaXMucGVyc2lzdENyaXQgPSBhcnJDcml0O1xyXG4gICAgfVxyXG4gICAgcmVxdWVzdC5jcml0ZXJpYSA9IHRoaXMucGVyc2lzdENyaXQ7XHJcblxyXG4gICAgaWYgKGlzQWRkVG9UZW1wKSB7XHJcbiAgICAgIHRoaXMucGVyc2lzdEFkZFRvVGVtcENyaXQgPSBhZGRUb1RlbXBDcml0O1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5wZXJzaXN0QWRkVG9UZW1wQ3JpdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJlcXVlc3QuY3JpdGVyaWEgPSByZXF1ZXN0LmNyaXRlcmlhLmNvbmNhdCh0aGlzLnBlcnNpc3RBZGRUb1RlbXBDcml0KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaWx0ZXIgZHVwbGljYXRlIGRhdGEgaW4gYXJyYXlcclxuICAgIHJlcXVlc3QuY3JpdGVyaWEgPSB0aGlzLmZpbHRlckR1cGxpY2F0ZURhdGEocmVxdWVzdC5jcml0ZXJpYSlcclxuICAgIFxyXG4gICAgLy8gZmlsdGVyIGVtcHR5IHZhbHVlIGluIGxpc3RWYWx1ZVxyXG4gICAgcmVxdWVzdC5jcml0ZXJpYSA9IHRoaXMuZmlsdGVyTGlzdFZhbHVlRW1wdHkocmVxdWVzdC5jcml0ZXJpYSk7XHJcblxyXG4gICAgcmVxdWVzdC5pbnRlZ3JhdGlvbk9iaiA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5pc0pvaW5FeEFQSSkge1xyXG4gICAgICByZXF1ZXN0LmludGVncmF0aW9uT2JqID0gdGhpcy5zZWFyY2hJbnB1dC5pbnRlZ3JhdGlvbk9iajtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzU2VhcmNoID0gdHJ1ZTsgXHJcblxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5kYXRhSW5wdXQgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyh0aGlzLnNlYXJjaElucHV0LmRhdGFJbnB1dCkubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIGJvZHlMaXN0ID0gdGhpcy5zZWFyY2hJbnB1dC5kYXRhSW5wdXQuYm9keUxpc3Q7XHJcbiAgICAgIGZpbGVOYW1lID0gdGhpcy5zZWFyY2hJbnB1dC5kYXRhSW5wdXQudGl0bGU7XHJcbiAgICAgIGhlYWRlckxpc3QgPSB0aGlzLnNlYXJjaElucHV0LmRhdGFJbnB1dC5oZWFkZXJMaXN0O1xyXG4gICAgICBhZGRpdGlvbmFsRXhwb3J0TGlzdCA9IHRoaXMuc2VhcmNoSW5wdXQuZGF0YUlucHV0LmFkZGl0aW9uYWxFeHBvcnRMaXN0O1xyXG4gICAgICBleGNsdWRlRXhwb3J0TGlzdCA9IHRoaXMuc2VhcmNoSW5wdXQuZGF0YUlucHV0LmV4Y2x1ZGVFeHBvcnRMaXN0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXdhaXQgdGhpcy5odHRwLmdldCh0aGlzLnNlYXJjaElucHV0Ll91cmwpLnRvUHJvbWlzZSgpLnRoZW4oKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIGJvZHlMaXN0ID0gZGF0YS5ib2R5TGlzdFxyXG4gICAgICAgIGZpbGVOYW1lID0gZGF0YS50aXRsZVxyXG4gICAgICAgIGhlYWRlckxpc3QgPSBkYXRhLmhlYWRlckxpc3RcclxuICAgICAgICBhZGRpdGlvbmFsRXhwb3J0TGlzdCA9IGRhdGEuYWRkaXRpb25hbEV4cG9ydExpc3Q7XHJcbiAgICAgICAgZXhjbHVkZUV4cG9ydExpc3QgPSBkYXRhLmV4Y2x1ZGVFeHBvcnRMaXN0O1xyXG4gICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5odHRwLnBvc3QoYXBpVXJsLCByZXF1ZXN0KS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIGlmIChJc0V4cG9ydEV4Y2VsKSB7XHJcbiAgICAgICAgYm9keURhdGEgPSByZXNwb25zZVtcIkRhdGFcIl07XHJcbiAgICAgICAgW2hlYWRlckxpc3QsIGJvZHlMaXN0XSA9IHRoaXMuY2hlY2tBZGRpdGlvbmFsRXhwb3J0TGlzdChoZWFkZXJMaXN0LCBib2R5TGlzdCwgYWRkaXRpb25hbEV4cG9ydExpc3QpO1xyXG4gICAgICAgIFtoZWFkZXJMaXN0LCBib2R5TGlzdF0gPSB0aGlzLmNoZWNrRXhjbHVkZUV4cG9ydExpc3QoaGVhZGVyTGlzdCwgYm9keUxpc3QsIGV4Y2x1ZGVFeHBvcnRMaXN0KTtcclxuICAgICAgICBkYXRhRmlsZSA9IHRoaXMubWFwRGF0YUZpbGUoYm9keUxpc3QsIGJvZHlEYXRhLCBoZWFkZXJMaXN0KTtcclxuICAgICAgICBpZiAoZXh0RmlsZSA9PT0gRVhQT1JUX0RBVEFfVFlQRVMuZXhjZWwpIHtcclxuICAgICAgICAgIHRoaXMuZXhwb3J0RmlsZVNlcnZpY2UuZXhwb3J0RmlsZUFzRXhjZWwoZGF0YUZpbGUsIGZpbGVOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4dEZpbGUgPT09IEVYUE9SVF9EQVRBX1RZUEVTLmpzb24pIHtcclxuICAgICAgICAgIHRoaXMuZXhwb3J0RmlsZVNlcnZpY2UuZXhwb3J0RmlsZUFzSnNvbihkYXRhRmlsZSwgZmlsZU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0RmlsZSA9PT0gRVhQT1JUX0RBVEFfVFlQRVMuY3N2KSB7XHJcbiAgICAgICAgICB0aGlzLmV4cG9ydEZpbGVTZXJ2aWNlLmV4cG9ydEZpbGVBc0NzdihkYXRhRmlsZSwgZmlsZU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHFyeVBhZ2luZyA9IHtcclxuICAgICAgICByZXNwb25zZTogcmVzcG9uc2UsXHJcbiAgICAgICAgcGFnZU5vdzogcGFnZU5vXHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2cocXJ5UGFnaW5nKTtcclxuICAgICAgdGhpcy5yZXN1bHQuZW1pdChxcnlQYWdpbmcpO1xyXG4gICAgICB0aGlzLnJlcUdldEFsbERhdGEuZW1pdChyZXF1ZXN0KTtcclxuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlckR1cGxpY2F0ZURhdGEoZGF0YSkge1xyXG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKCh2YWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgX3ZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICByZXR1cm4gaW5kZXggPT09IGRhdGEuZmluZEluZGV4KG9iaiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaikgPT09IF92YWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyTGlzdFZhbHVlRW1wdHkoZGF0YSkge1xyXG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUubGlzdFZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTtcclxuICAgICAgaWYgKHZhbHVlLmxpc3RWYWx1ZS5sZW5ndGggPT09IDAgKSByZXR1cm47XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tWYWx1ZUd0ZUx0ZShjb21wb25lbnQpe1xyXG4gICAgLy9jZWsgeWcgcGFrYWkgcmVzdHJpY3Rpb24gZ3RlL2x0ZS9ndC9sdFxyXG4gICAgbGV0IE1pbkNvbXBvbmVudCA9IHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnQuZmluZCh4ID0+IHgubmFtZSA9PSBjb21wb25lbnQubmFtZSAmJiAoeC5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiR1RFXCIpKTtcclxuICAgIGlmKCFNaW5Db21wb25lbnQpe1xyXG4gICAgICBNaW5Db21wb25lbnQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmZpbmQoeCA9PiB4Lm5hbWUgPT0gY29tcG9uZW50Lm5hbWUgJiYgKHgucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkdUXCIpKVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBNYXhDb21wb25lbnQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmZpbmQoeCA9PiB4Lm5hbWUgPT0gY29tcG9uZW50Lm5hbWUgJiYgKHgucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkxURVwiKSk7XHJcbiAgICBpZighTWF4Q29tcG9uZW50KXtcclxuICAgICAgTWF4Q29tcG9uZW50ID0gdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudC5maW5kKHggPT4geC5uYW1lID09IGNvbXBvbmVudC5uYW1lICYmICh4LnJlc3RyaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT0gXCJMVFwiKSlcclxuICAgIH1cclxuXHJcbiAgICBpZihNaW5Db21wb25lbnQgJiYgTWF4Q29tcG9uZW50KXtcclxuICAgICAgbGV0IG1pblZhbHVlID0gdGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtNaW5Db21wb25lbnQuaWRdLnZhbHVlQXNOdW1iZXI7XHJcbiAgICAgIGxldCBtYXhWYWx1ZSA9IHRoaXMubXlGb3JtLm5hdGl2ZUVsZW1lbnRbTWF4Q29tcG9uZW50LmlkXS52YWx1ZUFzTnVtYmVyO1xyXG4gICAgICBpZihtaW5WYWx1ZSA+IG1heFZhbHVlKXtcclxuICAgICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKE1pbkNvbXBvbmVudC5sYWJlbCArIFwiIG11c3QgYmUgbGVzcyB0aGFuIFwiICsgTWF4Q29tcG9uZW50LmxhYmVsKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG1hcERhdGFGaWxlKGJvZHlMaXN0RGF0YSwgYm9keURhdGFBcnIsIGhlYWRlckxpc3REYXRhKSB7XHJcbiAgICBsZXQgZGF0YUV4Y2VsID0gbmV3IEFycmF5KCk7XHJcbiAgICBsZXQgYm9keURhdGFUZW1wID0gbmV3IEFycmF5KCk7XHJcbiAgICBsZXQgaGVhZGVyRGF0YVRlbXAgPSBuZXcgQXJyYXkoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMaXN0RGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBbaXNOZWVkVG9QdXNoLCBib2R5RGF0YSwgaGVhZGVyRGF0YV0gPSB0aGlzLmNoZWNrTmVlZERhdGFUb0V4cG9ydChib2R5TGlzdERhdGEsIGhlYWRlckxpc3REYXRhLCBpKTtcclxuICAgICAgaWYoaXNOZWVkVG9QdXNoKXtcclxuICAgICAgICBib2R5RGF0YVRlbXAucHVzaChib2R5RGF0YSk7XHJcbiAgICAgICAgaGVhZGVyRGF0YVRlbXAucHVzaChoZWFkZXJEYXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9keURhdGFBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZpbmFsRGF0YSA9IHt9O1xyXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhib2R5RGF0YUFycltpXSkpIHtcclxuICAgICAgICAgIGNvbnN0IF9pZHggPSBib2R5RGF0YVRlbXAuaW5kZXhPZihrZXkpXHJcbiAgICAgICAgICBpZiAoX2lkeCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgIGZpbmFsRGF0YVtoZWFkZXJEYXRhVGVtcFtfaWR4XV0gPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkYXRhRXhjZWwucHVzaChmaW5hbERhdGEpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YUV4Y2VsO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBZGRpdGlvbmFsRXhwb3J0TGlzdChoZWFkZXJMaXN0RGF0YSwgYm9keUxpc3REYXRhLCBhZGRpdGlvbmFsRXhwb3J0TGlzdCkge1xyXG4gICAgaWYgKGFkZGl0aW9uYWxFeHBvcnRMaXN0ID09IHVuZGVmaW5lZCkgcmV0dXJuIFtoZWFkZXJMaXN0RGF0YSwgYm9keUxpc3REYXRhXTtcclxuICAgIGlmIChhZGRpdGlvbmFsRXhwb3J0TGlzdC5sZW5ndGggPT0gMCkgcmV0dXJuIFtoZWFkZXJMaXN0RGF0YSwgYm9keUxpc3REYXRhXTtcclxuXHJcbiAgICBjb25zdCBfaGVhZGVyTGlzdCA9IFsuLi5oZWFkZXJMaXN0RGF0YV07XHJcbiAgICBjb25zdCBfYm9keUxpc3QgPSBbLi4uYm9keUxpc3REYXRhXTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZGl0aW9uYWxFeHBvcnRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIF9oZWFkZXJMaXN0LnB1c2goe2xhYmVsOiBhZGRpdGlvbmFsRXhwb3J0TGlzdFtpXS5sYWJlbH0pO1xyXG4gICAgICBfYm9keUxpc3QucHVzaCh7cHJvcGVydHk6IGFkZGl0aW9uYWxFeHBvcnRMaXN0W2ldLnByb3BlcnR5fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFtfaGVhZGVyTGlzdCwgX2JvZHlMaXN0XTtcclxuICB9XHJcblxyXG4gIGNoZWNrRXhjbHVkZUV4cG9ydExpc3QoaGVhZGVyTGlzdERhdGEsIGJvZHlMaXN0RGF0YSwgZXhjbHVkZUV4cG9ydExpc3QpIHtcclxuICAgIGlmIChleGNsdWRlRXhwb3J0TGlzdCA9PSB1bmRlZmluZWQpIHJldHVybiBbaGVhZGVyTGlzdERhdGEsIGJvZHlMaXN0RGF0YV07XHJcbiAgICBpZiAoZXhjbHVkZUV4cG9ydExpc3QubGVuZ3RoID09IDApIHJldHVybiBbaGVhZGVyTGlzdERhdGEsIGJvZHlMaXN0RGF0YV07XHJcblxyXG4gICAgY29uc3QgX2hlYWRlckxpc3QgPSBbLi4uaGVhZGVyTGlzdERhdGFdO1xyXG4gICAgY29uc3QgX2JvZHlMaXN0ID0gWy4uLmJvZHlMaXN0RGF0YV07XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGNsdWRlRXhwb3J0TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaW5kZXggPSBfYm9keUxpc3QuZmluZEluZGV4KChlbGVtZW50KSA9PiBlbGVtZW50LnByb3BlcnR5ID09IGV4Y2x1ZGVFeHBvcnRMaXN0W2ldLnByb3BlcnR5KTtcclxuICAgICAgICBpZiAoaW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgIF9oZWFkZXJMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICBfYm9keUxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFtfaGVhZGVyTGlzdCwgX2JvZHlMaXN0XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tOZWVkRGF0YVRvRXhwb3J0KGJvZHlMaXN0RGF0YTogQXJyYXk8YW55PiwgaGVhZGVyTGlzdERhdGE6IEFycmF5PGFueT4sIGlkeDogbnVtYmVyKSB7XHJcbiAgICAvLyBhZGQganNvbiBjaGVja2VyIGZvciBkYXRhIHRvIGV4cG9ydCBoZXJlXHJcbiAgICBpZiAoYm9keUxpc3REYXRhW2lkeF1bJ3R5cGUnXSAhPSAnYWN0aW9uJykge1xyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIHRydWUsXHJcbiAgICAgICAgYm9keUxpc3REYXRhW2lkeF1bJ3Byb3BlcnR5J10sXHJcbiAgICAgICAgaGVhZGVyTGlzdERhdGFbaWR4XVsnbGFiZWwnXVxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gICAgaWYgKGJvZHlMaXN0RGF0YVtpZHhdWyd0eXBlJ10gPT0gJ2FjdGlvbicgJiYgYm9keUxpc3REYXRhW2lkeF1bJ2FjdGlvbiddWzBdWyd0eXBlJ10gPT0gJ3N3aXRjaCcgJiYgYm9keUxpc3REYXRhW2lkeF1bJ2FjdGlvbiddWzBdWydjYXNlJ11bMF1bJ3Jlc3VsdCddWyd0eXBlJ10gPT0gJ2xpbmsnKSB7XHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgdHJ1ZSxcclxuICAgICAgICBib2R5TGlzdERhdGFbaWR4XVsnYWN0aW9uJ11bMF1bJ2Nhc2UnXVswXVsncmVzdWx0J11bJ3Byb3BlcnR5J10sXHJcbiAgICAgICAgaGVhZGVyTGlzdERhdGFbaWR4XVsnbGFiZWwnXVxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtmYWxzZSwgW10sIFtdXTtcclxuICB9XHJcblxyXG4gIEdlbmVyYXRlUmVwb3J0KGVuamlGb3JtOiBOZ0Zvcm0pIHtcclxuICAgIGVuamlGb3JtLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgaWYoIWVuamlGb3JtLmZvcm0udmFsaWQpIHJldHVybjtcclxuICAgIHRoaXMuZ2VuUnB0LmVtaXQoeyBFeHBvcnRUeXBlOiB0aGlzLkV4cG9ydFR5cGUsIEVsUmVmOiB0aGlzLm15Rm9ybSB9KTtcclxuICB9XHJcblxyXG4gIGxlc3NUaGFuRm91cigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmNvdW50Rm9ybSA+IDMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZU9iamVjdChvYmo6IGFueSwgdXJsOiBzdHJpbmcsIGNyaXQ6IFJlcXVlc3RDcml0ZXJpYU9iaiA9IG51bGwpIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMucG9zdEpTT04odXJsLCBjcml0KTtcclxuICAgIHZhbC5zdWJzY3JpYmUodGVtcERhdGEgPT4ge1xyXG4gICAgICBvYmouaXRlbXNVcmwgPSBuZXcgQXJyYXkoKTtcclxuICAgICAgb2JqLml0ZW1zVXJsID0gdGVtcERhdGEuUmV0dXJuT2JqZWN0O1xyXG5cclxuICAgICAgaWYgKG9iai5leGNsdWRlICE9IHVuZGVmaW5lZCAmJiBvYmouZXhjbHVkZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgb2JqLml0ZW1zVXJsID0gb2JqLml0ZW1zVXJsLmZpbHRlcigodmFsdWUpID0+ICFvYmouZXhjbHVkZS5pbmNsdWRlcyh2YWx1ZS5LZXkpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG9iai50eXBlID09IFwiZHJvcGRvd25TZWFyY2hcIiAmJiBvYmouaXRlbXNVcmwubGVuZ3RoID09IDEpIHtcclxuICAgICAgICBvYmoudmFsdWUgPSBvYmouaXRlbXNVcmxbMF0uS2V5O1xyXG4gICAgICAgIG9iai5kZXNjciA9IG9iai5pdGVtc1VybFswXS5WYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqLmFmZmVjdGVkRmlsdGVyICYmIG9iai5pdGVtc1VybC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VFdmVudChvYmouaXRlbXNVcmxbMF0uS2V5LCBvYmopO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyYW5zZm9ybVRvRGVjaW1hbChlbGVtZW50OiBhbnkpIHtcclxuICAgIGVsZW1lbnQudGFyZ2V0LnZhbHVlID0gcGFyc2VGbG9hdChlbGVtZW50LnRhcmdldC52YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoLywvZywgJycpKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydEFzRmlsZShleHRGaWxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoQ2xpY2sodHJ1ZSwgZXh0RmlsZSk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUV2ZW50KG9wdFZhbHVlLCBhZkZpbHRlcikge1xyXG4gICAgbGV0IGpzb25Db21wID0gdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudDtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFmRmlsdGVyLmFmZmVjdGVkRmlsdGVyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwganNvbkNvbXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAoanNvbkNvbXBbal0ubmFtZSA9PSBhZkZpbHRlci5hZmZlY3RlZEZpbHRlcltpXSkge1xyXG4gICAgICAgICAgbGV0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdENyaXRlcmlhT2JqKCk7XHJcbiAgICAgICAgICBsZXQgYXJyYXlDcml0ID0gbmV3IEFycmF5KCk7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdFZhbHVlICE9IFwiYWxsXCIgJiYgb3B0VmFsdWUgIT0gXCJvbmVcIikge1xyXG4gICAgICAgICAgICBsZXQgY3JpdE9iaiA9IG5ldyBDcml0ZXJpYU9iaigpO1xyXG4gICAgICAgICAgICBjcml0T2JqLkRhdGFUeXBlID0gYWZGaWx0ZXIuZGF0YXR5cGU7XHJcbiAgICAgICAgICAgIGlmIChhZkZpbHRlci5maWx0ZXJQcm9wTmFtZSAhPSB1bmRlZmluZWQgfHwgYWZGaWx0ZXIuZmlsdGVyUHJvcE5hbWUgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgIHJlcXVlc3RbYWZGaWx0ZXIuZmlsdGVyUHJvcE5hbWVdID0gb3B0VmFsdWU7XHJcbiAgICAgICAgICAgICAgY3JpdE9iai5wcm9wTmFtZSA9IGFmRmlsdGVyLmZpbHRlclByb3BOYW1lO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNyaXRPYmoucHJvcE5hbWUgPSBhZkZpbHRlci5uYW1lO1xyXG4gICAgICAgICAgICAgIHJlcXVlc3RbYWZGaWx0ZXIubmFtZV0gPSBvcHRWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjcml0T2JqLnZhbHVlID0gb3B0VmFsdWU7XHJcbiAgICAgICAgICAgIGNyaXRPYmoucmVzdHJpY3Rpb24gPSBBZEluc0NvbnN0YW50LlJlc3RyaWN0aW9uRXE7XHJcbiAgICAgICAgICAgIGFycmF5Q3JpdC5wdXNoKGNyaXRPYmopO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9wdFZhbHVlID09IFwiYWxsXCIpIHtcclxuICAgICAgICAgICAgbGV0IGNyaXRPYmogPSBuZXcgQ3JpdGVyaWFPYmooKTtcclxuICAgICAgICAgICAgYXJyYXlDcml0LnB1c2goY3JpdE9iaik7XHJcbiAgICAgICAgICAgIGpzb25Db21wW2pdLnZhbHVlID0gXCJhbGxcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlcXVlc3QuY3JpdGVyaWEgPSBhcnJheUNyaXQ7XHJcbiAgICAgICAgICBpZiAoanNvbkNvbXBbal0ucGF0aCAhPSB1bmRlZmluZWQgJiYganNvbkNvbXBbal0ucGF0aCAhPSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0Lmxpc3RFbnZpcm9ubWVudHMgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VhcmNoSW5wdXQubGlzdEVudmlyb25tZW50cy5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IHkgPSAwOyB5IDwgdGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzLmxlbmd0aDsgeSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoanNvbkNvbXBbal0uZW52aXJvbm1lbnQgPT0gdGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzW3ldLmVudmlyb25tZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgIGpzb25Db21wW2pdLmZ1bGxwYXRoID0gdGhpcy5zZWFyY2hJbnB1dC5saXN0RW52aXJvbm1lbnRzW3ldLnVybCArIGpzb25Db21wW2pdLnBhdGg7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBqc29uQ29tcFtqXS5mdWxscGF0aCA9IGpzb25Db21wW2pdLnVybDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGpzb25Db21wW2pdLmZ1bGxwYXRoID0ganNvbkNvbXBbal0udXJsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5yZXNvbHZlT2JqZWN0KGpzb25Db21wW2pdLCBqc29uQ29tcFtqXS5mdWxscGF0aCwgcmVxdWVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBTZXRQcm9jZXNzS2V5KGlkeDogbnVtYmVyLCB3ZktleUZpbHRlcjogc3RyaW5nKSB7XHJcbiAgICBsZXQgY29tcG9uZW50ID0gdGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtpZHhdO1xyXG4gICAgbGV0IGRkbCA9IGNvbXBvbmVudC5vcHRpb25zO1xyXG4gICAgbGV0IHRleHQ6IHN0cmluZyA9IGRkbFtkZGwuc2VsZWN0ZWRJbmRleF0udmFsdWUudHJpbSgpO1xyXG4gICAgbGV0IGxpc3RWYWx1ZSA9IHRleHQuc3BsaXQoJzsnKTtcclxuICAgIGxldCBsaXN0V2ZLZXkgPSB3ZktleUZpbHRlci5zcGxpdCgnOycpO1xyXG4gICAgXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RWYWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnNlYXJjaElucHV0LmludGVncmF0aW9uT2JqLnJlcXVlc3RPYmpbbGlzdFdmS2V5W2ldXSA9IGxpc3RWYWx1ZVtpXTtcclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcbiAgc3dpdGNoQ2FzZShjb25kTGlzdCkge1xyXG4gICAgbGV0IGNvbmRpdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZExpc3QuY29uZGl0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaWR4ID0gdGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZS5maW5kSW5kZXgoeCA9PiB4LnByb3BlcnR5ID09IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucHJvcGVydHkpO1xyXG4gICAgICBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIkVRXCIpIHtcclxuICAgICAgICBpZiAoIWNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlID09IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPT0gdXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIk5FUVwiKSB7XHJcbiAgICAgICAgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyICE9IHRydWUpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgIT0gY29uZExpc3QuY29uZGl0aW9uc1tpXS52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdXNlcm5hbWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJuYW1lXCIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSAhPSB1c2VybmFtZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiR1RcIikge1xyXG4gICAgICAgIGlmICghY29uZExpc3QuY29uZGl0aW9uc1tpXS5pc1VzZXIpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPiBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB1c2VybmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVXNlcm5hbWVcIik7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlID4gdXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY29uZExpc3QuY29uZGl0aW9uc1tpXS5yZXN0cmljdGlvbiA9PSBcIkdURVwiKSB7XHJcbiAgICAgICAgaWYgKCFjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlcikge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA+PSBjb25kTGlzdC5jb25kaXRpb25zW2ldLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCB1c2VybmFtZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVXNlcm5hbWVcIik7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlID49IHVzZXJuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0ucmVzdHJpY3Rpb24gPT0gXCJMVFwiKSB7XHJcbiAgICAgICAgaWYgKCFjb25kTGlzdC5jb25kaXRpb25zW2ldLmlzVXNlcikge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQuc3dpdGNoVmFsdWVbaWR4XS52YWx1ZSA8IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPCB1c2VybmFtZSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb25kTGlzdC5jb25kaXRpb25zW2ldLnJlc3RyaWN0aW9uID09IFwiTFRFXCIpIHtcclxuICAgICAgICBpZiAoIWNvbmRMaXN0LmNvbmRpdGlvbnNbaV0uaXNVc2VyKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJbnB1dC5zd2l0Y2hWYWx1ZVtpZHhdLnZhbHVlIDw9IGNvbmRMaXN0LmNvbmRpdGlvbnNbaV0udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHVzZXJuYW1lID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJVc2VybmFtZVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0LnN3aXRjaFZhbHVlW2lkeF0udmFsdWUgPD0gdXNlcm5hbWUpIHtcclxuICAgICAgICAgICAgY29uZGl0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbmRpdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb25kaXRpb247XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBEZWNyeXB0U3RyaW5nKGNoaXBwZXJUZXh0OiBzdHJpbmcsIGNoaXBwZXJLZXk6IHN0cmluZykge1xyXG4gICAgaWYgKFxyXG4gICAgICBjaGlwcGVyS2V5ID09IHVuZGVmaW5lZCB8fCBjaGlwcGVyS2V5LnRyaW0oKSA9PSAnJyB8fFxyXG4gICAgICBjaGlwcGVyVGV4dCA9PSB1bmRlZmluZWQgfHwgY2hpcHBlclRleHQudHJpbSgpID09ICcnXHJcbiAgICApIHJldHVybiBjaGlwcGVyVGV4dDtcclxuICAgIGxldCBjaGlwcGVyS2V5QXJyID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoY2hpcHBlcktleSk7XHJcbiAgICBsZXQgaXYgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pO1xyXG4gICAgbGV0IGRlY3J5cHRlZCA9IENyeXB0b0pTLkFFUy5kZWNyeXB0KGNoaXBwZXJUZXh0LCBjaGlwcGVyS2V5QXJyLCB7IGl2OiBpdiB9KTtcclxuICAgIGxldCBwbGFpblRleHQgPSBkZWNyeXB0ZWQudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xyXG4gICAgcmV0dXJuIHBsYWluVGV4dDtcclxuICB9XHJcblxyXG4gIGNoZWNrSW5wdXREYXRlKGNvbXBvbmVudDogYW55KSB7XHJcbiAgICBsZXQgbWluRGF0ZVZhbDtcclxuICAgIGxldCBtYXhEYXRlVmFsO1xyXG4gICAgbGV0IGxhYmVsO1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcblxyXG4gICAgbGV0IE1pbkNvbXBvbmVudCA9IHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnQuZmluZCh4ID0+IHgubmFtZSA9PSBjb21wb25lbnQubmFtZSAmJiAoeC5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiR1RFXCIpKSA9PSB1bmRlZmluZWQgPyB0aGlzLmNvbmZpZ3VyYXRpb24uY29tcG9uZW50LmZpbmQoeCA9PiB4Lm5hbWUgPT0gY29tcG9uZW50Lm5hbWUgJiYgKHgucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkdUXCIpKSA6IHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnQuZmluZCh4ID0+IHgubmFtZSA9PSBjb21wb25lbnQubmFtZSAmJiAoeC5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiR1RFXCIpKTtcclxuICAgIGlmIChNaW5Db21wb25lbnQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIG1pbkRhdGVWYWwgPSB0aGlzLm15Rm9ybS5uYXRpdmVFbGVtZW50W01pbkNvbXBvbmVudC5pZF0ubWluID09IFwiXCIgPyBudWxsIDogbmV3IERhdGUodGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtNaW5Db21wb25lbnQuaWRdLm1pbik7XHJcbiAgICAgIGxhYmVsID0gTWluQ29tcG9uZW50LmxhYmVsLnNwbGl0KFwiPlwiLCAyKTtcclxuICAgICAgaWYgKG1pbkRhdGVWYWwgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChNaW5Db21wb25lbnQucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkdUXCIpIHtcclxuICAgICAgICAgIG1pbkRhdGVWYWwuc2V0RGF0ZShtaW5EYXRlVmFsLmdldERhdGUoKSAtIDEpO1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlLnB1c2goXCIgbXVzdCBiZSBncmVhdGVyIHRoYW4gXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoTWluQ29tcG9uZW50LnJlc3RyaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT0gXCJHVEVcIikge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlLnB1c2goXCIgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWxzIHRvIFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgTWF4Q29tcG9uZW50ID0gdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudC5maW5kKHggPT4geC5uYW1lID09IGNvbXBvbmVudC5uYW1lICYmICh4LnJlc3RyaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT0gXCJMVEVcIikpID09IHVuZGVmaW5lZCA/IHRoaXMuY29uZmlndXJhdGlvbi5jb21wb25lbnQuZmluZCh4ID0+IHgubmFtZSA9PSBjb21wb25lbnQubmFtZSAmJiAoeC5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiTFRcIikpIDogdGhpcy5jb25maWd1cmF0aW9uLmNvbXBvbmVudC5maW5kKHggPT4geC5uYW1lID09IGNvbXBvbmVudC5uYW1lICYmICh4LnJlc3RyaWN0aW9uLnRvVXBwZXJDYXNlKCkgPT0gXCJMVEVcIikpO1xyXG4gICAgaWYgKE1heENvbXBvbmVudCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgbWF4RGF0ZVZhbCA9IHRoaXMubXlGb3JtLm5hdGl2ZUVsZW1lbnRbTWF4Q29tcG9uZW50LmlkXS5tYXggPT0gXCJcIiA/IG51bGwgOiBuZXcgRGF0ZSh0aGlzLm15Rm9ybS5uYXRpdmVFbGVtZW50W01heENvbXBvbmVudC5pZF0ubWF4KTtcclxuICAgICAgbGFiZWwgPSBNYXhDb21wb25lbnQubGFiZWwuc3BsaXQoXCI8XCIsIDIpO1xyXG4gICAgICBpZiAobWF4RGF0ZVZhbCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKE1heENvbXBvbmVudC5yZXN0cmljdGlvbi50b1VwcGVyQ2FzZSgpID09IFwiTFRcIikge1xyXG4gICAgICAgICAgbWF4RGF0ZVZhbC5zZXREYXRlKG1heERhdGVWYWwuZ2V0RGF0ZSgpICsgMSk7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UucHVzaChcIiBtdXN0IGJlIGxlc3MgdGhhbiBcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChNYXhDb21wb25lbnQucmVzdHJpY3Rpb24udG9VcHBlckNhc2UoKSA9PSBcIkxURVwiKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UucHVzaChcIiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbHMgdG8gXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChtaW5EYXRlVmFsICE9IG51bGwgJiYgbWF4RGF0ZVZhbCA9PSBudWxsICYmIG5ldyBEYXRlKHRoaXMubXlGb3JtLm5hdGl2ZUVsZW1lbnRbTWluQ29tcG9uZW50LmlkXS52YWx1ZSkgPCBtaW5EYXRlVmFsKSB7XHJcbiAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcobGFiZWxbMF0gKyBlcnJvck1lc3NhZ2VbMF0gKyBmb3JtYXREYXRlKG1pbkRhdGVWYWwsICdkZCBNTU1NIHl5eXknLCAnZW4tVVMnKSArIFwiLlwiKVxyXG4gICAgICB0aGlzLmRhdGVXcm9uZyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKG1heERhdGVWYWwgIT0gbnVsbCAmJiBtaW5EYXRlVmFsID09IG51bGwgJiYgbmV3IERhdGUodGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtNYXhDb21wb25lbnQuaWRdLnZhbHVlKSA+IG1heERhdGVWYWwpIHtcclxuICAgICAgdGhpcy50b2FzdHIud2FybmluZyhsYWJlbFswXSArIGVycm9yTWVzc2FnZVswXSArIGZvcm1hdERhdGUobWF4RGF0ZVZhbCwgJ2RkIE1NTU0geXl5eScsICdlbi1VUycpICsgXCIuXCIpXHJcbiAgICAgIHRoaXMuZGF0ZVdyb25nID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAobWluRGF0ZVZhbCAhPSBudWxsICYmIG1heERhdGVWYWwgIT0gbnVsbCkge1xyXG4gICAgICBpZiAobmV3IERhdGUodGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtNYXhDb21wb25lbnQuaWRdLnZhbHVlKSA+IG1heERhdGVWYWwgfHwgbmV3IERhdGUodGhpcy5teUZvcm0ubmF0aXZlRWxlbWVudFtNaW5Db21wb25lbnQuaWRdLnZhbHVlKSA8IG1pbkRhdGVWYWwpIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci53YXJuaW5nKGxhYmVsWzBdICsgZXJyb3JNZXNzYWdlWzBdICsgZm9ybWF0RGF0ZShtaW5EYXRlVmFsLCAnZGQgTU1NTSB5eXl5JywgJ2VuLVVTJykgKyBcIiBhbmRcIiArIGVycm9yTWVzc2FnZVsxXSArIGZvcm1hdERhdGUobWF4RGF0ZVZhbCwgJ2RkIE1NTU0geXl5eScsICdlbi1VUycpICsgXCIuXCIpXHJcbiAgICAgICAgdGhpcy5kYXRlV3JvbmcgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGF0ZVdyb25nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0ZVdyb25nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZE9wdGlvbihpdGVtOiB7IEtleTogc3RyaW5nLCBWYWx1ZTogc3RyaW5nIH0sIGNyaXQ6IGFueSkge1xyXG4gICAgY3JpdC5kZXNjciA9IGl0ZW0uVmFsdWU7XHJcbiAgICBjcml0LmlzTGlzdEhpZGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgT25Gb2N1c0N1cnIoZXY6IGFueSwgdmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlICE9PSBcIlwiICYmIHZhbHVlICE9PSAwICYmIHZhbHVlICE9PSBcIjBcIikgcmV0dXJuO1xyXG4gICAgZXYudGFyZ2V0LnZhbHVlID0gXCJcIjtcclxuICB9XHJcblxyXG4gIFZhbGlkYXRlRGVmYXVsdFZhbHVlKGl0ZW06IGFueSkge1xyXG4gICAgY29uc3QgaXRlbVZhbHVlID0gaXRlbS52YWx1ZTtcclxuICAgIGlmIChpdGVtVmFsdWUgIT09IFwiXCIgJiYgaXRlbVZhbHVlICE9PSAwICYmIGl0ZW1WYWx1ZSAhPT0gXCIwXCIpIHJldHVybjtcclxuICAgIGNvbnN0IF9lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W25nLXJlZmxlY3QtbmFtZT1cIiR7aXRlbS5uYW1lfVwiXWApO1xyXG4gICAgaWYgKF9lbCA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCB2YWwgPSB0aGlzLmdlbmVyYXRlQ3VyckZvY0VsVmFsdWUoaXRlbSk7XHJcbiAgICBfZWxbXCJ2YWx1ZVwiXSA9IHZhbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVDdXJyRm9jRWxWYWx1ZShpdGVtOiBhbnkpIHtcclxuICAgIGxldCB2YWwgPSBcIjBcIjtcclxuICAgIGNvbnN0IHByZWNpc2lvbiA9IGl0ZW0/LnByZWNpc2lvbiB8fCAyO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVjaXNpb247IGkrKykge1xyXG4gICAgICBpZiAoaSA9PT0gMCkgdmFsICs9IFwiLlwiO1xyXG4gICAgICB2YWwgKz0gXCIwXCI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tIEJhc2ljIGZvcm0gbGF5b3V0IHNlY3Rpb24gc3RhcnQgLS0+XHJcbjxzZWN0aW9uIGlkPVwiaG9yaXpvbnRhbC1mb3JtLWxheW91dHNcIj5cclxuICA8ZGl2IGNsYXNzPVwicm93IHRleHQtbGVmdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwbC0zIG1iLTIgbXQtMlwiICpuZ0lmPVwiY29uZmlndXJhdGlvbj8udGl0bGUgIT0gdW5kZWZpbmVkICYmIGNvbmZpZ3VyYXRpb24/LnRpdGxlICE9ICcnXCI+XHJcbiAgICAgICAgICA8aDQgY2xhc3M9XCJjYXJkLXRpdGxlIHVjU2VhcmNoLXRpdGxlXCIgdHJhbnNsYXRlPnt7Y29uZmlndXJhdGlvbi50aXRsZX19PC9oND5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtM1wiPlxyXG4gICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0gZm9ybS1ob3Jpem9udGFsXCIgaWQ9XCJmb3JtU2VhcmNoXCIgI2Zvcm1JZFNlYXJjaCAjZW5qaUZvcm09XCJuZ0Zvcm1cIlxyXG4gICAgICAgICAgICAgIChuZ1N1Ym1pdCk9XCJlbmppRm9ybS52YWxpZCAmJiBzZWFyY2hDbGljaygpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZm9ybS1zZWN0aW9uIGZvbnQtd2VpZ2h0LWJvbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY2hhbmdlU3RhdGUoKVwiIGNsYXNzPVwiYnRuIG5vLXBhZGRpbmcgY3Vyc29yLXBvaW50ZXIgZmxpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTVweDsgbWFyZ2luOiAwcHggMHB4IDVweCAtMTVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXNIaWRkZW4gPyAnZmEtY2hldnJvbi1yaWdodCcgOiAnZmEtY2hldnJvbi1kb3duJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWd1cmF0aW9uPy5zZWN0aW9uVGl0bGUgIT0gdW5kZWZpbmVkICYmIGNvbmZpZ3VyYXRpb24/LnNlY3Rpb25UaXRsZSAhPSAnJzsgdGhlbiBpbnB1dFNlY3Rpb25UaXRsZSBlbHNlIGRlZmF1bHRTZWN0aW9uVGl0bGVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW5wdXRTZWN0aW9uVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAge3tjb25maWd1cmF0aW9uPy5zZWN0aW9uVGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRTZWN0aW9uVGl0bGU+XHJcbiAgICAgICAgICAgICAgICAgICAgUGFnaW5nXHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBJbmkgRGlndW5ha2FuIHVudHVrIEdlbmVyYXRlIER5bmFtaWMgQ29tcG9uZW50IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBbaGlkZGVuXT1cImlzSGlkZGVuXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYWN0aXZlXCIgW0BjaGFuZ2VEaXZTaXplXT1jdXJyZW50U3RhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgZm9ybS1ncm91cFwiICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBjb25maWd1cmF0aW9uPy5jb21wb25lbnQ7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC01IG5vLXBhZGRpbmdcIiBmb3I9XCJ7e3F1ZXN0aW9uLmlkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhZGlucy1yZXF1aXJlZC1sYWJlbCc6IChxdWVzdGlvbi5pc1JlcXVpcmVkIHx8IChxdWVzdGlvbj8uZGRsVHlwZSAhPSB1bmRlZmluZWQgJiYgcXVlc3Rpb24uZGRsVHlwZSA9PSAnb25lJykpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGU+e3txdWVzdGlvbi5sYWJlbH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTcgbm8tcGFkZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnR5cGU9PSd0ZXh0Ym94J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cInt7cXVlc3Rpb24uaWR9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaC1mb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtJc1VwcGVyQ2FzZV09XCJxdWVzdGlvbi5pc1VwcGVyY2FzZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHF1ZXN0aW9uLmlzVXBwZXJjYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJxdWVzdGlvbi52YWx1ZVwiIFtyZXF1aXJlZF09XCJxdWVzdGlvbi5pc1JlcXVpcmVkXCIgbmFtZT1cInt7cXVlc3Rpb24ubmFtZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtY3JpdC1kYXRhdGFibGU9XCJ7e3F1ZXN0aW9uLmlzQ3JpdGVyaWFEYXRhVGFibGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLXJlcXVpcmVkPVwie3txdWVzdGlvbi5pc1JlcXVpcmVkfX1cIiB2YWx1ZT1cInt7cXVlc3Rpb24udmFsdWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaENsaWNrKClcIiBhdHRyLmRhdGEtdHlwZT1cInt7cXVlc3Rpb24uZGF0YXR5cGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLW5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWV9fVwiIGF0dHIuZGF0YS1yZXN0cmljdGlvbj1cInt7cXVlc3Rpb24ucmVzdHJpY3Rpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiIFtyZWFkb25seV09XCJxdWVzdGlvbi5pc1JlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooZW5qaUZvcm0uc3VibWl0dGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LnRvdWNoZWQgfHwgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8uZGlydHkpICYmIGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LmludmFsaWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24udHlwZT09J3RleHRhcmVhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgdHlwZT1cInRleHRcIiBpZD1cInt7cXVlc3Rpb24uaWR9fVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaC1mb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInF1ZXN0aW9uLnZhbHVlXCIgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzUmVxdWlyZWRcIiBuYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1yZXF1aXJlZD1cInt7cXVlc3Rpb24uaXNSZXF1aXJlZH19XCIgYXR0ci5kYXRhLXR5cGU9XCJ7e3F1ZXN0aW9uLmRhdGF0eXBlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1uYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIiB2YWx1ZT1cInt7cXVlc3Rpb24udmFsdWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiIFtyZWFkb25seV09XCJxdWVzdGlvbi5pc1JlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooZW5qaUZvcm0uc3VibWl0dGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LnRvdWNoZWQgfHwgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8uZGlydHkpICYmIGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LmludmFsaWQgfVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi50eXBlPT0nbnVtZXJpYydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cInt7cXVlc3Rpb24uaWR9fVwiIChmb2N1cyk9XCJ0cmFuc2Zvcm1Ub0RlY2ltYWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwidHJhbnNmb3JtVG9EZWNpbWFsKCRldmVudClcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJxdWVzdGlvbi52YWx1ZVwiIFtyZXF1aXJlZF09XCJxdWVzdGlvbi5pc1JlcXVpcmVkXCIgbmFtZT1cInt7cXVlc3Rpb24ubmFtZStbaV19fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLXJlcXVpcmVkPVwie3txdWVzdGlvbi5pc1JlcXVpcmVkfX1cIiB2YWx1ZT1cInt7cXVlc3Rpb24udmFsdWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaENsaWNrKClcIiBhdHRyLmRhdGEtcmVzdHJpY3Rpb249XCJ7e3F1ZXN0aW9uLnJlc3RyaWN0aW9ufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS10eXBlPVwie3txdWVzdGlvbi5kYXRhdHlwZX19XCIgYXR0ci5kYXRhLW5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLW51bWVyaWNwYWlyPVwie3txdWVzdGlvbi5udW1lcmljUGFpcn19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtY3JpdC1kYXRhdGFibGU9XCJ7e3F1ZXN0aW9uLmlzQ3JpdGVyaWFEYXRhVGFibGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiIFtyZWFkb25seV09XCJxdWVzdGlvbi5pc1JlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooZW5qaUZvcm0uc3VibWl0dGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZStbaV1dPy50b3VjaGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZStbaV1dPy5kaXJ0eSkgJiYgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lK1tpXV0/LmludmFsaWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24udHlwZT09J2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24/LmlzQ3VzdG9tICE9IHVuZGVmaW5lZCAmJiBxdWVzdGlvbj8uaXNDdXN0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIlwiIGlkPVwie3txdWVzdGlvbi5pZH19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VhcmNoLWZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicXVlc3Rpb24uaXNSZXF1aXJlZFwiIG5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoQ2xpY2soKVwiIGF0dHIuZGF0YS1yZXN0cmljdGlvbj1cInt7cXVlc3Rpb24ucmVzdHJpY3Rpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtdHlwZT1cInt7cXVlc3Rpb24uZGF0YXR5cGV9fVwiIGF0dHIuZGF0YS1uYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLXJlcXVpcmVkPVwie3txdWVzdGlvbi5pc1JlcXVpcmVkfX1cIiBjdXJyZW5jeU1hc2sgW25nTW9kZWxdPVwicXVlc3Rpb24udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJxdWVzdGlvbi52YWx1ZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiIFtyZWFkb25seV09XCJxdWVzdGlvbi5pc1JlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInsgdGhvdXNhbmRzOiBxdWVzdGlvbi50aG91c2FuZHMsIGRlY2ltYWw6IHF1ZXN0aW9uLmRlY2ltYWwsIGFsaWduOiBxdWVzdGlvbi5hbGlnbiwgYWxsb3dOZWdhdGl2ZTogcXVlc3Rpb24uYWxsb3dOZWdhdGl2ZSwgYWxsb3daZXJvOiBxdWVzdGlvbi5hbGxvd1plcm8sIHByZWNpc2lvbjogcXVlc3Rpb24ucHJlY2lzaW9uLCBudWxsYWJsZTogcXVlc3Rpb24ubnVsbGFibGUgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooZW5qaUZvcm0uc3VibWl0dGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LnRvdWNoZWQgfHwgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8uZGlydHkpICYmIGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LmludmFsaWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uPy5pc0N1c3RvbSA9PSB1bmRlZmluZWQgfHwgIXF1ZXN0aW9uPy5pc0N1c3RvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGlkPVwie3txdWVzdGlvbi5pZH19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VhcmNoLWZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicXVlc3Rpb24uaXNSZXF1aXJlZFwiIG5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoQ2xpY2soKVwiIGF0dHIuZGF0YS1yZXN0cmljdGlvbj1cInt7cXVlc3Rpb24ucmVzdHJpY3Rpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtdHlwZT1cInt7cXVlc3Rpb24uZGF0YXR5cGV9fVwiIGF0dHIuZGF0YS1uYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLXJlcXVpcmVkPVwie3txdWVzdGlvbi5pc1JlcXVpcmVkfX1cIiBjdXJyZW5jeU1hc2sgW25nTW9kZWxdPVwicXVlc3Rpb24udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJxdWVzdGlvbi52YWx1ZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ7IHRob3VzYW5kczogJywnLCBkZWNpbWFsOiAnLicsIGFsaWduOiAncmlnaHQnLCBhbGxvd05lZ2F0aXZlOiBmYWxzZSwgYWxsb3daZXJvOnRydWUsIHByZWNpc2lvbjogMiwgbnVsbGFibGU6IGZhbHNlIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6KGVuamlGb3JtLnN1Ym1pdHRlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy50b3VjaGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LmRpcnR5KSAmJiBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy5pbnZhbGlkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVuZCBIYXJkY29kZSBMb29rdXAgZGlkYWxlbS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnR5cGU9PSdkYXRlcGlja2VyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInt7cXVlc3Rpb24uaXNUaW1lID8gJ2RhdGV0aW1lLWxvY2FsJyA6ICdkYXRlJ319XCIgaWQ9XCJ7e3F1ZXN0aW9uLmlkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaC1mb3JtLWNvbnRyb2wgYnRuLWxvb2t1cFwiIG5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWUrW2ldfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInF1ZXN0aW9uLnZhbHVlXCIgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzUmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1yZXF1aXJlZD1cInt7cXVlc3Rpb24uaXNSZXF1aXJlZH19XCIgdmFsdWU9XCJ7e3F1ZXN0aW9uLnZhbHVlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJxdWVzdGlvbi5yZWFkb25seVwiIGF0dHIuZGF0YS10eXBlPVwie3txdWVzdGlvbi5kYXRhdHlwZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtbmFtZT1cInt7cXVlc3Rpb24ubmFtZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtZGF0ZXBpY2tlcnBhaXI9XCJ7e3F1ZXN0aW9uLmRhdGVwaWNrZXJQYWlyfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1jcml0LWRhdGF0YWJsZT1cInt7cXVlc3Rpb24uaXNDcml0ZXJpYURhdGFUYWJsZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoQ2xpY2soKVwiIGF0dHIuZGF0YS1yZXN0cmljdGlvbj1cInt7cXVlc3Rpb24ucmVzdHJpY3Rpb259fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5sYWJlbD1cInt7cXVlc3Rpb24ubGFiZWx9fVwiIG1pbj1cInt7cXVlc3Rpb24ubWluRGF0ZSB8IGRhdGU6J3l5eXktTU0tZGQnfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heD1cInt7cXVlc3Rpb24ubWF4RGF0ZSB8IGRhdGU6J3l5eXktTU0tZGQnfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb2N1c291dCk9XCJxdWVzdGlvbi5yZXN0cmljdGlvbiAhPSB1bmRlZmluZWQgJiYgY2hlY2tJbnB1dERhdGUocXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooZW5qaUZvcm0uc3VibWl0dGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZStbaV1dPy50b3VjaGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZStbaV1dPy5kaXJ0eSkgJiYgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lK1tpXV0/LmludmFsaWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlc3Rpb24udHlwZSA9PSAndGFza0RlZmluaXRpb25LZXknIHx8IHF1ZXN0aW9uLnR5cGUgPT0gJ3Byb2Nlc3NLZXknIHx8IHF1ZXN0aW9uLnR5cGUgPT0gJ29mZmljZVJvbGVDb2RlcydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIiBhdHRyLmRhdGEtcmVxdWlyZWQ9XCJ7e3F1ZXN0aW9uLmlzUmVxdWlyZWR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzUmVxdWlyZWRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLnF1ZXJ5LWluPVwie3txdWVzdGlvbi5pc1F1ZXJ5SW59fVwiIGF0dHIuZGF0YS10eXBlPVwie3txdWVzdGlvbi5kYXRhdHlwZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmxhYmVsPVwie3txdWVzdGlvbi5sYWJlbH19XCIgW2hpZGRlbl09XCJxdWVzdGlvbj8uaXRlbXNVcmw/Lmxlbmd0aCA9PSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIihxdWVzdGlvbi50eXBlID09ICd0YXNrRGVmaW5pdGlvbktleScgfHwgcXVlc3Rpb24udHlwZSA9PSAncHJvY2Vzc0tleScpID8gU2V0UHJvY2Vzc0tleShpLHF1ZXN0aW9uLndmS2V5RmlsdGVyKSA6IFNldFJvbGVPZmZpY2VDb2RlcyhpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6KGVuamlGb3JtLnN1Ym1pdHRlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy50b3VjaGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LmRpcnR5KSAmJiBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy5pbnZhbGlkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0lmPVwicXVlc3Rpb24uZGRsVHlwZSA9PSAnb25lJyAmJiBxdWVzdGlvbj8uaXRlbXNVcmw/Lmxlbmd0aCAhPSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwib25lXCI+U2VsZWN0IE9uZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHF1ZXN0aW9uPy5kZGxUeXBlID09IHVuZGVmaW5lZCB8fCBxdWVzdGlvbi5kZGxUeXBlID09ICdhbGwnKSAmJiBxdWVzdGlvbj8uaXRlbXNVcmw/Lmxlbmd0aCAhPSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiYWxsXCI+QWxsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbj8uaXRlbXNVcmxcIiB2YWx1ZT1cInt7aXRlbS5LZXl9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLlZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cInF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoID09IDFcIj57e3F1ZXN0aW9uLml0ZW1zVXJsWzBdLlZhbHVlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24udHlwZT09J2Ryb3Bkb3duJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWV9fVwiIGF0dHIuZGF0YS1yZXF1aXJlZD1cInt7cXVlc3Rpb24uaXNSZXF1aXJlZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInF1ZXN0aW9uLnZhbHVlXCIgW3JlcXVpcmVkXT1cInF1ZXN0aW9uLmlzUmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHNlYXJjaC1mb3JtLWNvbnRyb2xcIiBhdHRyLnF1ZXJ5LWluPVwie3txdWVzdGlvbi5pc1F1ZXJ5SW59fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLXR5cGU9XCJ7e3F1ZXN0aW9uLmRhdGF0eXBlfX1cIiBhdHRyLmRhdGEtbmFtZT1cInt7cXVlc3Rpb24ubmFtZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmxhYmVsPVwie3txdWVzdGlvbi5sYWJlbH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtY3JpdC1kYXRhdGFibGU9XCJ7e3F1ZXN0aW9uLmlzQ3JpdGVyaWFEYXRhVGFibGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIhcXVlc3Rpb24uaXNGcm9tVVJMID8gcXVlc3Rpb24/Lml0ZW1zPy5sZW5ndGggPT0gMSA6IHF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoID09IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwicXVlc3Rpb24uaXNFdmVudCA/IG9uQ2hhbmdlRXZlbnQoJGV2ZW50LnRhcmdldC52YWx1ZSwgcXVlc3Rpb24pIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOihlbmppRm9ybS5zdWJtaXR0ZWQgfHwgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8udG91Y2hlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy5kaXJ0eSkgJiYgZW5qaUZvcm0uZm9ybS5jb250cm9sc1txdWVzdGlvbi5uYW1lXT8uaW52YWxpZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5kZGxUeXBlID09ICdvbmUnICYmICghcXVlc3Rpb24uaXNGcm9tVVJMID8gcXVlc3Rpb24/Lml0ZW1zPy5sZW5ndGggIT0gMSA6IHF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoICE9IDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwib25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3QgT25lPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIocXVlc3Rpb24/LmRkbFR5cGUgPT0gdW5kZWZpbmVkIHx8IHF1ZXN0aW9uLmRkbFR5cGUgPT0gJ2FsbCcpICYmICghcXVlc3Rpb24uaXNGcm9tVVJMID8gcXVlc3Rpb24/Lml0ZW1zPy5sZW5ndGggIT0gMSA6IHF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoICE9IDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiYWxsXCI+QWxsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiAhcXVlc3Rpb24uaXNGcm9tVVJMID8gcXVlc3Rpb24/Lml0ZW1zIDogcXVlc3Rpb24/Lml0ZW1zVXJsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3shcXVlc3Rpb24uaXNGcm9tVVJMID8gaXRlbS5rZXkgOiBpdGVtLktleX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyFxdWVzdGlvbi5pc0Zyb21VUkwgPyBpdGVtLnZhbHVlIDogaXRlbS5WYWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFxdWVzdGlvbi5pc0Zyb21VUkwgPyBxdWVzdGlvbj8uaXRlbXM/Lmxlbmd0aCA9PSAxIDogcXVlc3Rpb24/Lml0ZW1zVXJsPy5sZW5ndGggPT0gMVwiPnt7IXF1ZXN0aW9uLmlzRnJvbVVSTFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcXVlc3Rpb24uaXRlbXNbMF0udmFsdWUgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLml0ZW1zVXJsWzBdLlZhbHVlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24udHlwZT09J2Ryb3Bkb3duU2VhcmNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGRzLWRpc3BsYXktaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCIhcXVlc3Rpb24uaXNGcm9tVVJMID8gcXVlc3Rpb24/Lml0ZW1zPy5sZW5ndGggPT0gMSA6IHF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoID09IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtZm9ybS1jb250cm9sIGRkcy1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3snZGRzVmFsdWUnK3F1ZXN0aW9uLm5hbWV9fVwiIFsobmdNb2RlbCldPVwicXVlc3Rpb24uZGVzY3JcIiByZWFkb25seVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInF1ZXN0aW9uLmlzTGlzdEhpZGUgPSAhcXVlc3Rpb24uaXNMaXN0SGlkZTsgcXVlc3Rpb24uc2VhcmNoVGV4dD0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcXVlc3Rpb24uaXNGcm9tVVJMID8gcXVlc3Rpb24/Lml0ZW1zPy5sZW5ndGggPT0gMSA6IHF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoID09IDFcIj57e3F1ZXN0aW9uLmRlc2NyfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGRzLWxpc3QtY29udGFpbmVyXCIgW2hpZGRlbl09XCJxdWVzdGlvbi5pc0xpc3RIaWRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VhcmNoLWZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3snc2VhcmNoVGV4dCcrcXVlc3Rpb24ubmFtZX19XCIgWyhuZ01vZGVsKV09XCJxdWVzdGlvbi5zZWFyY2hUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzdGlvbi5wbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZHMtaXRlbXMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZnVsbC13aWR0aFwiIG5hbWU9XCJ7e3F1ZXN0aW9uLm5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1yZXF1aXJlZD1cInt7cXVlc3Rpb24uaXNSZXF1aXJlZH19XCIgWyhuZ01vZGVsKV09XCJxdWVzdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJxdWVzdGlvbi5pc1JlcXVpcmVkXCIgYXR0ci5xdWVyeS1pbj1cInt7cXVlc3Rpb24uaXNRdWVyeUlufX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtdHlwZT1cInt7cXVlc3Rpb24uZGF0YXR5cGV9fVwiIGF0dHIuZGF0YS1uYW1lPVwie3txdWVzdGlvbi5uYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmxhYmVsPVwie3txdWVzdGlvbi5sYWJlbH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLWNyaXQtZGF0YXRhYmxlPVwie3txdWVzdGlvbi5pc0NyaXRlcmlhRGF0YVRhYmxlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInF1ZXN0aW9uLmlzRXZlbnQgPyBvbkNoYW5nZUV2ZW50KCRldmVudC50YXJnZXQudmFsdWUsIHF1ZXN0aW9uKSA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6KGVuamlGb3JtLnN1Ym1pdHRlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy50b3VjaGVkIHx8IGVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZV0/LmRpcnR5KSAmJiBlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdPy5pbnZhbGlkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwie3txdWVzdGlvbj8uc2l6ZSA9PSB1bmRlZmluZWQgPyBxdWVzdGlvbj8uc2l6ZSA6IDEwfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAoY2xpY2spPVwic2VsZWN0ZWRPcHRpb24oe0tleTonb25lJyxWYWx1ZTonU2VsZWN0IE9uZSd9LHF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5kZHNUeXBlID09ICdvbmUnICYmICghcXVlc3Rpb24uaXNGcm9tVVJMID8gcXVlc3Rpb24/Lml0ZW1zPy5sZW5ndGggIT0gMSA6IHF1ZXN0aW9uPy5pdGVtc1VybD8ubGVuZ3RoICE9IDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBPbmU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAoY2xpY2spPVwic2VsZWN0ZWRPcHRpb24oe0tleTonYWxsJyxWYWx1ZTonQWxsJ30scXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihxdWVzdGlvbj8uZGRzVHlwZSA9PSB1bmRlZmluZWQgfHwgcXVlc3Rpb24uZGRzVHlwZSA9PSAnYWxsJykgJiYgKCFxdWVzdGlvbi5pc0Zyb21VUkwgPyBxdWVzdGlvbj8uaXRlbXM/Lmxlbmd0aCAhPSAxIDogcXVlc3Rpb24/Lml0ZW1zVXJsPy5sZW5ndGggIT0gMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiYWxsXCI+QWxsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBxdWVzdGlvbj8uaXRlbXMgfCB0ZXh0U2VhcmNoIDogcXVlc3Rpb24uc2VhcmNoVGV4dDsgbGV0IGk9aW5kZXhcIiBbdmFsdWVdPVwiaXRlbT8ua2V5XCIgKGNsaWNrKT1cInNlbGVjdGVkT3B0aW9uKGl0ZW0scXVlc3Rpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0/LnZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiAhcXVlc3Rpb24uaXNGcm9tVVJMID8gKHF1ZXN0aW9uPy5pdGVtcyB8IHRleHRTZWFyY2ggOiBxdWVzdGlvbi5zZWFyY2hUZXh0KSA6IHF1ZXN0aW9uPy5pdGVtc1VybCB8IHRleHRTZWFyY2ggOiBxdWVzdGlvbi5zZWFyY2hUZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRPcHRpb24oaXRlbSxxdWVzdGlvbilcIiB2YWx1ZT1cInt7aXRlbS5LZXl9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5WYWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24udHlwZT09J2NsYWltJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJ7eydjbGFpbScrW2ldfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtdHlwZT1cInt7J3RleHQnfX1cIiBhdHRyLmRhdGEtY3JpdC1kYXRhdGFibGU9XCJ7e3F1ZXN0aW9uLmlzQ3JpdGVyaWFEYXRhVGFibGV9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLW5hbWU9XCJ7eydBc3NpZ25lZSd9fVwiIFtoaWRkZW5dPVwiQ2xhaW1MaXN0Py5sZW5ndGggPT0gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6KGVuamlGb3JtLnN1Ym1pdHRlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzWydjbGFpbScrW2ldXT8udG91Y2hlZCB8fCBlbmppRm9ybS5mb3JtLmNvbnRyb2xzWydjbGFpbScrW2ldXT8uZGlydHkpICYmIGVuamlGb3JtLmZvcm0uY29udHJvbHNbJ2NsYWltJytbaV1dPy5pbnZhbGlkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0lmPVwicXVlc3Rpb24uZGRsVHlwZSA9PSAnb25lJyAmJiBDbGFpbUxpc3Q/Lmxlbmd0aCAhPSAxXCIgdmFsdWU9XCJvbmVcIj5TZWxlY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9uZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHF1ZXN0aW9uPy5kZGxUeXBlID09IHVuZGVmaW5lZCB8fCBxdWVzdGlvbi5kZGxUeXBlID09ICdhbGwnKSAmJiBDbGFpbUxpc3Q/Lmxlbmd0aCAhPSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiYWxsXCI+QWxsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBDbGFpbUxpc3RcIiB2YWx1ZT1cInt7aXRlbS5LZXl9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLlZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItdWMtc2hvdy1lcnJvcnMgKm5nSWY9XCJxdWVzdGlvbi50eXBlIT0nZGF0ZXBpY2tlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJlbmppRm9ybS5mb3JtLmNvbnRyb2xzW3F1ZXN0aW9uLm5hbWVdXCIgW3N1Ym1pdF09XCJlbmppRm9ybS5zdWJtaXR0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXVjLXNob3ctZXJyb3JzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi11Yy1zaG93LWVycm9ycyAqbmdJZj1cInF1ZXN0aW9uLnR5cGU9PSdkYXRlcGlja2VyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImVuamlGb3JtLmZvcm0uY29udHJvbHNbcXVlc3Rpb24ubmFtZStbaV1dXCIgW3N1Ym1pdF09XCJlbmppRm9ybS5zdWJtaXR0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXVjLXNob3ctZXJyb3JzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBmb3JtLWdyb3VwXCIgKm5nSWY9XCIoaXNSZXBvcnQgIT0gdW5kZWZpbmVkICYmIGlzUmVwb3J0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTUgbm8tcGFkZGluZ1wiIHRyYW5zbGF0ZT5SZXBvcnQgVHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC03IG5vLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIkV4cG9ydFR5cGVcIiBbKG5nTW9kZWwpXT1cIkV4cG9ydFR5cGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBzZWFyY2gtZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLXR5cGU9XCJ0ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgRXhwb3J0VHlwZUxpc3RcIiBbdmFsdWVdPVwiaXRlbS5rZXlcIj57e2l0ZW0udmFsdWV9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG5vLXBhZGRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1hY3Rpb25zIHJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGNsYXNzPVwiYnRuLWdyb3VwXCIgKm5nSWY9XCJleHBvcnREYXRhID09IHRydWUgJiYgaXNTZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcmFpc2VkIGJ0bi1zdWNjZXNzIG1yLTEgZHJvcGRvd24tdG9nZ2xlXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgdHJhbnNsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZnQtZG93bmxvYWRcIj48L2k+Jm5ic3A7PHNwYW4gdHJhbnNsYXRlPkV4cG9ydCBGaWxlPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwiZXhwb3J0QXNGaWxlKCdjc3YnKVwiPmFzIENTVjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwiZXhwb3J0QXNGaWxlKCdleGNlbCcpXCI+YXMgRVhDRUw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cImV4cG9ydEFzRmlsZSgnanNvbicpXCI+YXMgSlNPTjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZXNldCgpXCIgY2xhc3M9XCJidG4gYnRuLXJhaXNlZCBidG4td2FybmluZyBtci0xXCIgdHJhbnNsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9pPiZuYnNwOzxzcGFuIHRyYW5zbGF0ZT5SZXNldDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIihpc1JlcG9ydCA9PSB1bmRlZmluZWQgfHwgIWlzUmVwb3J0KVwiIHR5cGU9XCJzdWJtaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcmFpc2VkIGJ0bi1wcmltYXJ5XCIgI1VDU2VhcmNoQ2xpY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPiZuYnNwOzxzcGFuIHRyYW5zbGF0ZT5TZWFyY2g8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIoaXNSZXBvcnQgIT0gdW5kZWZpbmVkICYmIGlzUmVwb3J0KVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiR2VuZXJhdGVSZXBvcnQoZW5qaUZvcm0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXJhaXNlZCBidG4tcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZ0LWRvd25sb2FkXCI+PC9pPiZuYnNwOzxzcGFuIHRyYW5zbGF0ZT5HZW5lcmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG48YnI+XHJcbjwhLS0gLy8gQmFzaWMgZm9ybSBsYXlvdXQgc2VjdGlvbiBlbmQgLS0+Il19
|