@ohioepa/oepa-ui-lib 2.0.4 → 2.0.6

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.
@@ -305,12 +305,12 @@ export class PersonCreateModalComponent {
305
305
  return this.modalFormGroup.controls[name].hasError(field);
306
306
  }
307
307
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PersonCreateModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BsModalRef }, { token: i3.OepaFormsService }, { token: i4.EntityService }], target: i0.ɵɵFactoryTarget.Component });
308
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PersonCreateModalComponent, selector: "oepa-person-create-modal", outputs: { onPersonCreated: "onPersonCreated" }, ngImport: i0, template: "<div class=\"modal-header\" role=\"banner\">\n <h1 class=\"modal-title pull-left\" id=\"personCreateModalTitle\">Create Person</h1>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close dialog\" (click)=\"bsModalRef.hide()\" tabindex=\"0\"></button>\n</div>\n<div class=\"modal-body\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"personCreateModalTitle\">\n <div *ngIf=\"!modalFormGroup\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"text-center visually-hidden\">Initializing...</div>\n <div class=\"text-center\"><span class=\"spinner-border text-primary\" role=\"status\" aria-label=\"Loading\"></span></div>\n </div>\n <form *ngIf=\"modalFormGroup\" [formGroup]=\"modalFormGroup\" (keydown.enter)=\"$event.preventDefault()\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"personTypeSelect\">Person Type</label>\n <select id=\"personTypeSelect\" formControlName=\"personType\" class=\"form-select\" aria-required=\"true\"\n [ngClass]=\"getModalFormGroupInvalidClass('personType')\">\n <option *ngFor=\"let t of personSubTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('personType','required')\">Person Type is required</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"programSelect\">Program</label>\n <select id=\"programSelect\" formControlName=\"program\" class=\"form-select\" aria-required=\"true\"\n [ngClass]=\"getModalFormGroupInvalidClass('program')\">\n <option *ngFor=\"let t of programs\" [ngValue]=\"t\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('program','required')\">Program is required</small>\n </div>\n </div>\n </div>\n <oepa-contact [group]=\"getModalFormGroup('contact')\"\n [showMiddleName]=\"true\" [noFax]=\"true\" [noEmail]=\"true\" [showValidation]=\"true\" aria-label=\"Contact information fields\"></oepa-contact>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"phoneNumberTypeSelect\">Phone Number Type</label>\n <select id=\"phoneNumberTypeSelect\" formControlName=\"phoneNumberType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('phoneNumberType')\">\n <option *ngFor=\"let t of phoneNumberTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumberType','required')\">Phone Number Type is required</small>\n </div>\n </div>\n </div>\n <oepa-address [group]=\"getModalFormGroup('address')\" [showValidation]=\"true\" aria-label=\"Address fields\"></oepa-address>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"addressTypeSelect\">Address Type</label>\n <select id=\"addressTypeSelect\" formControlName=\"addressType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('addressType')\">\n <option *ngFor=\"let t of addressTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('addressType','required')\">Address Type is required</small>\n </div>\n </div>\n </div>\n </form>\n <div *ngIf=\"tableData && tableData.length > 0\" class=\"card\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"card-header\" id=\"matchingPersonListHeader\">\n <b>Matching Person List&nbsp;</b><span class=\"badge bg-secondary\" aria-label=\"Number of matching persons\">{{tableData.length}}</span>\n </div>\n <div class=\"card-body\">\n <oepa-table tableId=\"personSearchTable\" [config]=\"tableConfig\" [data]=\"tableData\" [header]=\"tableHeader\" (rowSelected)=\"onRowSelect($event)\" aria-labelledby=\"matchingPersonListHeader\">\n </oepa-table>\n </div>\n </div>\n</div>\n<div class=\"modal-footer d-block\" role=\"contentinfo\">\n <div *ngIf=\"inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"alert alert-info\" role=\"status\">\n {{inProgressMsg}}\n </div>\n </div>\n <div *ngIf=\"infoMessage && !inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"alert alert-info\" role=\"status\">\n {{infoMessage}}\n </div>\n </div>\n <div *ngIf=\"errorMessage\" aria-live=\"assertive\" aria-atomic=\"true\">\n <div class=\"alert alert-danger\" role=\"alert\">\n {{errorMessage}}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\">\n <span *ngIf=\"inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\"><span class=\"spinner-border text-primary\" role=\"status\" aria-label=\"Saving\"></span></span>\n <button *ngIf=\"(!tableData || tableData.length === 0) && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonBtn\"\n [disabled]=\"!modalFormGroup || modalFormGroup.invalid\"\n (click)=\"savePersonAfterSearch()\" aria-label=\"Save new person\">Save</button>\n <button *ngIf=\"tableData && tableData.length > 0 && !selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonWithoutSearchBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"savePerson()\" aria-label=\"No match, save new person\">No Match, Save New Person</button>\n <button *ngIf=\"tableData && tableData.length > 0 && selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveSelectedPersonBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveSelectedPerson()\" aria-label=\"Use selected person\">Use Selected Person</button>\n <button id=\"CancelPersonBtn\" type=\"button\" class=\"btn btn-primary\"\n (click)=\"bsModalRef.hide()\" aria-label=\"Cancel and close dialog\">Cancel</button>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.AddressComponent, selector: "oepa-address", inputs: ["group", "showValidation", "addressOneLabel", "addressTwoLabel", "cityLabel", "stateLabel", "zipCodeLabel", "disableState", "isSearch", "hideLine2", "line1MaxLength", "line2MaxLength", "cityMaxLength", "foreignStateLabel", "foreignZipLabel", "countryLabel", "sameAsGroup", "sameAsLabel", "sameAsChecked"] }, { kind: "component", type: i7.ContactComponent, selector: "oepa-contact", inputs: ["group", "showValidation", "firstNameLabel", "lastNameLabel", "showMiddleName", "middleNameLabel", "emailLabel", "phoneLabel", "faxLabel", "noFax", "showTitle", "noPhone", "noEmail", "isSearch", "firstNameMaxLength", "middleNameMaxLength", "lastNameMaxLength", "titleMaxLength", "emailMaxLength"] }, { kind: "component", type: i8.TableComponent, selector: "oepa-table", inputs: ["tableId", "config", "complexHeader", "header", "customBtnLabel", "customBtnVisible", "customBtnEnabled", "data", "totalRow"], outputs: ["cellClicked", "actionClicked", "rowSelected", "customBtnClicked"] }] });
308
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PersonCreateModalComponent, selector: "oepa-person-create-modal", outputs: { onPersonCreated: "onPersonCreated" }, ngImport: i0, template: "<div class=\"modal-header\" role=\"banner\">\n <h1 class=\"modal-title pull-left\" id=\"personCreateModalTitle\">Create Person</h1>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close dialog\" (click)=\"bsModalRef.hide()\" tabindex=\"0\"></button>\n</div>\n<div class=\"modal-body\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"personCreateModalTitle\">\n <div *ngIf=\"!modalFormGroup\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"text-center sr-only\">Initializing...</div>\n <div class=\"text-center\"><span class=\"spinner-border text-primary\" role=\"status\" aria-label=\"Loading\"></span></div>\n </div>\n <form *ngIf=\"modalFormGroup\" [formGroup]=\"modalFormGroup\" (keydown.enter)=\"$event.preventDefault()\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"personTypeSelect\">Person Type</label>\n <select id=\"personTypeSelect\" formControlName=\"personType\" class=\"form-select\" aria-required=\"true\"\n [ngClass]=\"getModalFormGroupInvalidClass('personType')\">\n <option *ngFor=\"let t of personSubTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('personType','required')\">Person Type is required</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"programSelect\">Program</label>\n <select id=\"programSelect\" formControlName=\"program\" class=\"form-select\" aria-required=\"true\"\n [ngClass]=\"getModalFormGroupInvalidClass('program')\">\n <option *ngFor=\"let t of programs\" [ngValue]=\"t\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('program','required')\">Program is required</small>\n </div>\n </div>\n </div>\n <oepa-contact [group]=\"getModalFormGroup('contact')\"\n [showMiddleName]=\"true\" [noFax]=\"true\" [noEmail]=\"true\" [showValidation]=\"true\" aria-label=\"Contact information fields\"></oepa-contact>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"phoneNumberTypeSelect\">Phone Number Type</label>\n <select id=\"phoneNumberTypeSelect\" formControlName=\"phoneNumberType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('phoneNumberType')\">\n <option *ngFor=\"let t of phoneNumberTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumberType','required')\">Phone Number Type is required</small>\n </div>\n </div>\n </div>\n <oepa-address [group]=\"getModalFormGroup('address')\" [showValidation]=\"true\" aria-label=\"Address fields\"></oepa-address>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"addressTypeSelect\">Address Type</label>\n <select id=\"addressTypeSelect\" formControlName=\"addressType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('addressType')\">\n <option *ngFor=\"let t of addressTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('addressType','required')\">Address Type is required</small>\n </div>\n </div>\n </div>\n </form>\n <div *ngIf=\"tableData && tableData.length > 0\" class=\"card\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"card-header\" id=\"matchingPersonListHeader\">\n <b>Matching Person List&nbsp;</b><span class=\"badge bg-secondary\" aria-label=\"Number of matching persons\">{{tableData.length}}</span>\n </div>\n <div class=\"card-body\">\n <oepa-table tableId=\"personSearchTable\" [config]=\"tableConfig\" [data]=\"tableData\" [header]=\"tableHeader\" (rowSelected)=\"onRowSelect($event)\" aria-labelledby=\"matchingPersonListHeader\">\n </oepa-table>\n </div>\n </div>\n</div>\n<div class=\"modal-footer d-block\" role=\"contentinfo\">\n <div *ngIf=\"inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"alert alert-info\" role=\"status\">\n {{inProgressMsg}}\n </div>\n </div>\n <div *ngIf=\"infoMessage && !inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"alert alert-info\" role=\"status\">\n {{infoMessage}}\n </div>\n </div>\n <div *ngIf=\"errorMessage\" aria-live=\"assertive\" aria-atomic=\"true\">\n <div class=\"alert alert-danger\" role=\"alert\">\n {{errorMessage}}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\">\n <span *ngIf=\"inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\"><span class=\"spinner-border text-primary\" role=\"status\" aria-label=\"Saving\"></span></span>\n <button *ngIf=\"(!tableData || tableData.length === 0) && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonBtn\"\n [disabled]=\"!modalFormGroup || modalFormGroup.invalid\"\n (click)=\"savePersonAfterSearch()\" aria-label=\"Save new person\">Save</button>\n <button *ngIf=\"tableData && tableData.length > 0 && !selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonWithoutSearchBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"savePerson()\" aria-label=\"No match, save new person\">No Match, Save New Person</button>\n <button *ngIf=\"tableData && tableData.length > 0 && selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveSelectedPersonBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveSelectedPerson()\" aria-label=\"Use selected person\">Use Selected Person</button>\n <button id=\"CancelPersonBtn\" type=\"button\" class=\"btn btn-primary\"\n (click)=\"bsModalRef.hide()\" aria-label=\"Cancel and close dialog\">Cancel</button>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.AddressComponent, selector: "oepa-address", inputs: ["group", "showValidation", "addressOneLabel", "addressTwoLabel", "cityLabel", "stateLabel", "zipCodeLabel", "disableState", "isSearch", "hideLine2", "line1MaxLength", "line2MaxLength", "cityMaxLength", "foreignStateLabel", "foreignZipLabel", "countryLabel", "sameAsGroup", "sameAsLabel", "sameAsChecked"] }, { kind: "component", type: i7.ContactComponent, selector: "oepa-contact", inputs: ["group", "showValidation", "firstNameLabel", "lastNameLabel", "showMiddleName", "middleNameLabel", "emailLabel", "phoneLabel", "faxLabel", "noFax", "showTitle", "noPhone", "noEmail", "isSearch", "firstNameMaxLength", "middleNameMaxLength", "lastNameMaxLength", "titleMaxLength", "emailMaxLength"] }, { kind: "component", type: i8.TableComponent, selector: "oepa-table", inputs: ["tableId", "config", "complexHeader", "header", "customBtnLabel", "customBtnVisible", "customBtnEnabled", "data", "totalRow"], outputs: ["cellClicked", "actionClicked", "rowSelected", "customBtnClicked"] }] });
309
309
  }
310
310
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PersonCreateModalComponent, decorators: [{
311
311
  type: Component,
312
- args: [{ selector: 'oepa-person-create-modal', template: "<div class=\"modal-header\" role=\"banner\">\n <h1 class=\"modal-title pull-left\" id=\"personCreateModalTitle\">Create Person</h1>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close dialog\" (click)=\"bsModalRef.hide()\" tabindex=\"0\"></button>\n</div>\n<div class=\"modal-body\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"personCreateModalTitle\">\n <div *ngIf=\"!modalFormGroup\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"text-center visually-hidden\">Initializing...</div>\n <div class=\"text-center\"><span class=\"spinner-border text-primary\" role=\"status\" aria-label=\"Loading\"></span></div>\n </div>\n <form *ngIf=\"modalFormGroup\" [formGroup]=\"modalFormGroup\" (keydown.enter)=\"$event.preventDefault()\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"personTypeSelect\">Person Type</label>\n <select id=\"personTypeSelect\" formControlName=\"personType\" class=\"form-select\" aria-required=\"true\"\n [ngClass]=\"getModalFormGroupInvalidClass('personType')\">\n <option *ngFor=\"let t of personSubTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('personType','required')\">Person Type is required</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"programSelect\">Program</label>\n <select id=\"programSelect\" formControlName=\"program\" class=\"form-select\" aria-required=\"true\"\n [ngClass]=\"getModalFormGroupInvalidClass('program')\">\n <option *ngFor=\"let t of programs\" [ngValue]=\"t\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('program','required')\">Program is required</small>\n </div>\n </div>\n </div>\n <oepa-contact [group]=\"getModalFormGroup('contact')\"\n [showMiddleName]=\"true\" [noFax]=\"true\" [noEmail]=\"true\" [showValidation]=\"true\" aria-label=\"Contact information fields\"></oepa-contact>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"phoneNumberTypeSelect\">Phone Number Type</label>\n <select id=\"phoneNumberTypeSelect\" formControlName=\"phoneNumberType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('phoneNumberType')\">\n <option *ngFor=\"let t of phoneNumberTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumberType','required')\">Phone Number Type is required</small>\n </div>\n </div>\n </div>\n <oepa-address [group]=\"getModalFormGroup('address')\" [showValidation]=\"true\" aria-label=\"Address fields\"></oepa-address>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"addressTypeSelect\">Address Type</label>\n <select id=\"addressTypeSelect\" formControlName=\"addressType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('addressType')\">\n <option *ngFor=\"let t of addressTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('addressType','required')\">Address Type is required</small>\n </div>\n </div>\n </div>\n </form>\n <div *ngIf=\"tableData && tableData.length > 0\" class=\"card\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"card-header\" id=\"matchingPersonListHeader\">\n <b>Matching Person List&nbsp;</b><span class=\"badge bg-secondary\" aria-label=\"Number of matching persons\">{{tableData.length}}</span>\n </div>\n <div class=\"card-body\">\n <oepa-table tableId=\"personSearchTable\" [config]=\"tableConfig\" [data]=\"tableData\" [header]=\"tableHeader\" (rowSelected)=\"onRowSelect($event)\" aria-labelledby=\"matchingPersonListHeader\">\n </oepa-table>\n </div>\n </div>\n</div>\n<div class=\"modal-footer d-block\" role=\"contentinfo\">\n <div *ngIf=\"inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"alert alert-info\" role=\"status\">\n {{inProgressMsg}}\n </div>\n </div>\n <div *ngIf=\"infoMessage && !inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"alert alert-info\" role=\"status\">\n {{infoMessage}}\n </div>\n </div>\n <div *ngIf=\"errorMessage\" aria-live=\"assertive\" aria-atomic=\"true\">\n <div class=\"alert alert-danger\" role=\"alert\">\n {{errorMessage}}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\">\n <span *ngIf=\"inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\"><span class=\"spinner-border text-primary\" role=\"status\" aria-label=\"Saving\"></span></span>\n <button *ngIf=\"(!tableData || tableData.length === 0) && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonBtn\"\n [disabled]=\"!modalFormGroup || modalFormGroup.invalid\"\n (click)=\"savePersonAfterSearch()\" aria-label=\"Save new person\">Save</button>\n <button *ngIf=\"tableData && tableData.length > 0 && !selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonWithoutSearchBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"savePerson()\" aria-label=\"No match, save new person\">No Match, Save New Person</button>\n <button *ngIf=\"tableData && tableData.length > 0 && selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveSelectedPersonBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveSelectedPerson()\" aria-label=\"Use selected person\">Use Selected Person</button>\n <button id=\"CancelPersonBtn\" type=\"button\" class=\"btn btn-primary\"\n (click)=\"bsModalRef.hide()\" aria-label=\"Cancel and close dialog\">Cancel</button>\n </div>\n </div>\n</div>" }]
312
+ args: [{ selector: 'oepa-person-create-modal', template: "<div class=\"modal-header\" role=\"banner\">\n <h1 class=\"modal-title pull-left\" id=\"personCreateModalTitle\">Create Person</h1>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close dialog\" (click)=\"bsModalRef.hide()\" tabindex=\"0\"></button>\n</div>\n<div class=\"modal-body\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"personCreateModalTitle\">\n <div *ngIf=\"!modalFormGroup\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"text-center sr-only\">Initializing...</div>\n <div class=\"text-center\"><span class=\"spinner-border text-primary\" role=\"status\" aria-label=\"Loading\"></span></div>\n </div>\n <form *ngIf=\"modalFormGroup\" [formGroup]=\"modalFormGroup\" (keydown.enter)=\"$event.preventDefault()\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"personTypeSelect\">Person Type</label>\n <select id=\"personTypeSelect\" formControlName=\"personType\" class=\"form-select\" aria-required=\"true\"\n [ngClass]=\"getModalFormGroupInvalidClass('personType')\">\n <option *ngFor=\"let t of personSubTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('personType','required')\">Person Type is required</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"programSelect\">Program</label>\n <select id=\"programSelect\" formControlName=\"program\" class=\"form-select\" aria-required=\"true\"\n [ngClass]=\"getModalFormGroupInvalidClass('program')\">\n <option *ngFor=\"let t of programs\" [ngValue]=\"t\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('program','required')\">Program is required</small>\n </div>\n </div>\n </div>\n <oepa-contact [group]=\"getModalFormGroup('contact')\"\n [showMiddleName]=\"true\" [noFax]=\"true\" [noEmail]=\"true\" [showValidation]=\"true\" aria-label=\"Contact information fields\"></oepa-contact>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"phoneNumberTypeSelect\">Phone Number Type</label>\n <select id=\"phoneNumberTypeSelect\" formControlName=\"phoneNumberType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('phoneNumberType')\">\n <option *ngFor=\"let t of phoneNumberTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumberType','required')\">Phone Number Type is required</small>\n </div>\n </div>\n </div>\n <oepa-address [group]=\"getModalFormGroup('address')\" [showValidation]=\"true\" aria-label=\"Address fields\"></oepa-address>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label for=\"addressTypeSelect\">Address Type</label>\n <select id=\"addressTypeSelect\" formControlName=\"addressType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('addressType')\">\n <option *ngFor=\"let t of addressTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('addressType','required')\">Address Type is required</small>\n </div>\n </div>\n </div>\n </form>\n <div *ngIf=\"tableData && tableData.length > 0\" class=\"card\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"card-header\" id=\"matchingPersonListHeader\">\n <b>Matching Person List&nbsp;</b><span class=\"badge bg-secondary\" aria-label=\"Number of matching persons\">{{tableData.length}}</span>\n </div>\n <div class=\"card-body\">\n <oepa-table tableId=\"personSearchTable\" [config]=\"tableConfig\" [data]=\"tableData\" [header]=\"tableHeader\" (rowSelected)=\"onRowSelect($event)\" aria-labelledby=\"matchingPersonListHeader\">\n </oepa-table>\n </div>\n </div>\n</div>\n<div class=\"modal-footer d-block\" role=\"contentinfo\">\n <div *ngIf=\"inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"alert alert-info\" role=\"status\">\n {{inProgressMsg}}\n </div>\n </div>\n <div *ngIf=\"infoMessage && !inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\">\n <div class=\"alert alert-info\" role=\"status\">\n {{infoMessage}}\n </div>\n </div>\n <div *ngIf=\"errorMessage\" aria-live=\"assertive\" aria-atomic=\"true\">\n <div class=\"alert alert-danger\" role=\"alert\">\n {{errorMessage}}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\">\n <span *ngIf=\"inProgressMsg\" aria-live=\"polite\" aria-atomic=\"true\"><span class=\"spinner-border text-primary\" role=\"status\" aria-label=\"Saving\"></span></span>\n <button *ngIf=\"(!tableData || tableData.length === 0) && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonBtn\"\n [disabled]=\"!modalFormGroup || modalFormGroup.invalid\"\n (click)=\"savePersonAfterSearch()\" aria-label=\"Save new person\">Save</button>\n <button *ngIf=\"tableData && tableData.length > 0 && !selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonWithoutSearchBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"savePerson()\" aria-label=\"No match, save new person\">No Match, Save New Person</button>\n <button *ngIf=\"tableData && tableData.length > 0 && selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveSelectedPersonBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveSelectedPerson()\" aria-label=\"Use selected person\">Use Selected Person</button>\n <button id=\"CancelPersonBtn\" type=\"button\" class=\"btn btn-primary\"\n (click)=\"bsModalRef.hide()\" aria-label=\"Cancel and close dialog\">Cancel</button>\n </div>\n </div>\n</div>" }]
313
313
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.BsModalRef }, { type: i3.OepaFormsService }, { type: i4.EntityService }], propDecorators: { onPersonCreated: [{
314
314
  type: Output
315
315
  }] } });
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLWNyZWF0ZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2VudGl0eS9wZXJzb24tY3JlYXRlLW1vZGFsL3BlcnNvbi1jcmVhdGUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9lbnRpdHkvcGVyc29uLWNyZWF0ZS1tb2RhbC9wZXJzb24tY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxLQUFLLEVBQWMsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFnQmpELE1BQU0sT0FBTywwQkFBMEI7SUF1QmpCO0lBQXdCO0lBQ2xDO0lBQ0E7SUF4QkgsY0FBYyxDQUFhO0lBQzNCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBQzNCLE1BQU0sQ0FBb0I7SUFDMUIsY0FBYyxDQUF5QjtJQUN2QyxjQUFjLEdBQW9CLEVBQUUsQ0FBQztJQUNyQyxRQUFRLEdBQWtCLEVBQUUsQ0FBQztJQUFBLENBQUM7SUFDOUIsWUFBWSxHQUFvQixFQUFFLENBQUM7SUFBQSxDQUFDO0lBQ3BDLGdCQUFnQixHQUFvQixFQUFFLENBQUM7SUFBQSxDQUFDO0lBRXhDLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQ3BDLFdBQVcsQ0FB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TUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBQ3BJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3hJLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDbEosS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDOUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDbkwsQ0FBQztRQUNELE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSztZQUNaLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUE7SUFDSCxDQUFDO0lBRU0sVUFBVTtRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsbUNBQW1DLENBQUM7UUFDekQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRywwQkFBMEIsR0FBRyxHQUFHLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQzVDLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFjLENBQUM7SUFDekQsQ0FBQztJQUVNLDZCQUE2QixDQUFDLElBQVk7UUFDL0MsT0FBTztZQUNMLFlBQVksRUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRU0seUJBQXlCLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDMUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQzt3R0F4VFUsMEJBQTBCOzRGQUExQiwwQkFBMEIsaUhDbkJ2QyxtMU5BMkdNOzs0RkR4Rk8sMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLDBCQUEwQjtvS0F5QjFCLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IE9FUEFQZXJzb24sIE9FUEFBZGRyZXNzLCBPRVBBUGhvbmVOdW1iZXIsIE9FUEFQcm9ncmFtIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1lYml6LWxpYic7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZW50aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgT0VQQVBlcnNvbkZpbHRlciB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgT0VQQVJlZmVyZW5jZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5pbXBvcnQgeyBPZXBhVGFibGVSb3cgfSBmcm9tICcuLi8uLi90YWJsZS9vZXBhLXRhYmxlLXJvdyc7XG5pbXBvcnQgeyBPZXBhVGFibGVIZWFkZXIgfSBmcm9tICcuLi8uLi90YWJsZS9vZXBhLXRhYmxlLWhlYWRlcic7XG5pbXBvcnQgeyBPZXBhVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi90YWJsZS9vZXBhLXRhYmxlLWNvbmZpZyc7XG5pbXBvcnQgeyBPZXBhRm9ybXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vb2VwYS1mb3Jtcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1wZXJzb24tY3JlYXRlLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BlcnNvbi1jcmVhdGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wZXJzb24tY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQZXJzb25DcmVhdGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBtb2RhbEZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcbiAgcHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpbmZvTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpblByb2dyZXNzTXNnOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGZpbHRlciE6IE9FUEFQZXJzb25GaWx0ZXI7XG4gIHB1YmxpYyBzZWxlY3RlZFBlcnNvbjogT0VQQVBlcnNvbiB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHBlcnNvblN1YlR5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTtcbiAgcHVibGljIHByb2dyYW1zOiBPRVBBUHJvZ3JhbVtdID0gW107O1xuICBwdWJsaWMgYWRkcmVzc1R5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTs7XG4gIHB1YmxpYyBwaG9uZU51bWJlclR5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTs7XG5cbiAgcHVibGljIHRhYmxlRGF0YTogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICBwdWJsaWMgdGFibGVIZWFkZXIhOiBPZXBhVGFibGVIZWFkZXI7XG5cbiAgcHVibGljIHRhYmxlQ29uZmlnOiBPZXBhVGFibGVDb25maWcgPSB7XG4gICAgcm93c1BlclBhZ2U6IDUsXG4gICAgY2xhc3NOYW1lczogWyd0YWJsZS1zdHJpcGVkJywgJ3RhYmxlLWJvcmRlcmVkJywgJ3RhYmxlLXNtJ11cbiAgfTtcblxuXG4gIEBPdXRwdXQoKSBvblBlcnNvbkNyZWF0ZWQ6IEV2ZW50RW1pdHRlcjxPRVBBUGVyc29uPiA9IG5ldyBFdmVudEVtaXR0ZXI8T0VQQVBlcnNvbj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHVibGljIGJzTW9kYWxSZWY6IEJzTW9kYWxSZWYsIFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IE9lcGFGb3Jtc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnRpdHlTZXJ2aWNlOiBFbnRpdHlTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRSZWZlcmVuY2VEYXRhKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJlc3VsdHMgPT4ge1xuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7ICAgIFxuICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgfX0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUmVmZXJlbmNlRGF0YSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCB0YXNrcyA9IFtdO1xuICAgIHRhc2tzLnB1c2godGhpcy5yZXRyaWV2ZVBlcnNvblR5cGVzKCkpO1xuICAgIHRhc2tzLnB1c2godGhpcy5yZXRyaWV2ZVByb2dyYW1zKCkpO1xuICAgIHRhc2tzLnB1c2godGhpcy5yZXRyaWV2ZUFkZHJlc3NUeXBlcygpKTtcbiAgICB0YXNrcy5wdXNoKHRoaXMucmV0cmlldmVQaG9uZU51bWJlclR5cGVzKCkpO1xuICAgIHJldHVybiBmb3JrSm9pbih0YXNrcyk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlUGVyc29uVHlwZXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdHlTZXJ2aWNlLnJldHJpZXZlUGVyc29uVHlwZXMoKS5waXBlKFxuICAgICAgbWFwKHR5cGVzID0+IHtcbiAgICAgIHRoaXMucGVyc29uU3ViVHlwZXMgPSBbXTtcbiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICB0aGlzLnBlcnNvblN1YlR5cGVzLnB1c2godHlwZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGVyc29uU3ViVHlwZXMubGVuZ3RoO1xuICAgIH0pLCBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdBbiBpbml0aWFsaXphdGlvbiBlcnJvciBvY2N1cnJlZDogJyArIGVycjtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlUHJvZ3JhbXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdHlTZXJ2aWNlLnJldHJpZXZlUHJvZ3JhbXMoKS5waXBlKFxuICAgICAgbWFwKHByb2dyYW1zID0+IHtcbiAgICAgIHRoaXMucHJvZ3JhbXMgPSBbXTtcbiAgICAgIGlmIChwcm9ncmFtcyAmJiBwcm9ncmFtcy5sZW5ndGgpIHtcbiAgICAgICAgcHJvZ3JhbXMuZm9yRWFjaChwcm9ncmFtID0+IHtcbiAgICAgICAgICB0aGlzLnByb2dyYW1zLnB1c2gocHJvZ3JhbSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbXMubGVuZ3RoO1xuICAgIH0pLCBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdBbiBpbml0aWFsaXphdGlvbiBlcnJvciBvY2N1cnJlZDogJyArIGVycjtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlQWRkcmVzc1R5cGVzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5yZXRyaWV2ZUFkZHJlc3NUeXBlcygpLnBpcGUoXG4gICAgICBtYXAodHlwZXMgPT4ge1xuICAgICAgdGhpcy5hZGRyZXNzVHlwZXMgPSBbXTtcbiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NUeXBlcy5wdXNoKHR5cGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFkZHJlc3NUeXBlcy5sZW5ndGg7XG4gICAgfSksIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0FuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkOiAnICsgZXJyO1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV0cmlldmVQaG9uZU51bWJlclR5cGVzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5yZXRyaWV2ZVRlbGVwaG9uZVR5cGVzKCkucGlwZShcbiAgICAgIG1hcCh0eXBlcyA9PiB7XG4gICAgICB0aGlzLnBob25lTnVtYmVyVHlwZXMgPSBbXTtcbiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICB0aGlzLnBob25lTnVtYmVyVHlwZXMucHVzaCh0eXBlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5waG9uZU51bWJlclR5cGVzLmxlbmd0aDtcbiAgICB9KSwgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfSkpO1xuICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy5tb2RhbEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgcGVyc29uVHlwZTogWydSVlBFUicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBwcm9ncmFtOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGNvbnRhY3Q6IHRoaXMuZmIuZ3JvdXAoeyBcbiAgICAgICAgICBmaXJzdE5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxuICAgICAgICAgIG1pZGRsZU5hbWU6IFsnJ10sXG4gICAgICAgICAgbGFzdE5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxuICAgICAgICAgIHBob25lTnVtYmVyOiBbJyddLFxuICAgICAgICAgIGZheE51bWJlcjogWycnLCBbXV0sXG4gICAgICAgICAgZW1haWxBZGRyZXNzOiBbJycsIFtWYWxpZGF0b3JzLmVtYWlsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTQpXV1cbiAgICAgIH0pLFxuICAgICAgYWRkcmVzc1R5cGU6IFsnQklMTEknLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgYWRkcmVzczogdGhpcy5mYi5ncm91cCh0aGlzLmZvcm1TZXJ2aWNlLmJ1aWxkQWRkcmVzc0Zvcm1XaXRoQ291bnRyeSh7fSkpLFxuICAgICAgYXJlYUNvZGU6ICcnLFxuICAgICAgcGhvbmVOdW1iZXJUeXBlOiBbJ09GRklDJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHBob25lTnVtYmVyOiAnJyxcbiAgICAgIGV4dGVuc2lvbjogJydcbiAgICB9KTtcbiAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdzdGF0ZScpPy5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgXG4gICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnY291bnRyeScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNvdW50cnk9PntcbiAgICAgIFxuICAgICAgaWYoY291bnRyeSA9PT0gJ1VTQScpe1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdzdGF0ZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3N0YXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgncG9zdGFsQ29kZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oJ1swLTldezV9JyldKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgncG9zdGFsQ29kZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblN0YXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblppcCcpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblppcCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduU3RhdGUnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduU3RhdGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduWmlwJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblppcCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3N0YXRlJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdzdGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3Bvc3RhbENvZGUnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3Bvc3RhbENvZGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgICAgXG4gICAgfSlcbiAgICBcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyRnJvbUZvcm0oKTogT0VQQVBlcnNvbkZpbHRlciB7XG4gICAgbGV0IGZpbHRlcjogT0VQQVBlcnNvbkZpbHRlciA9IHtcbiAgICAgIGZpcnN0TmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2NvbnRhY3QnKT8uZ2V0KCdmaXJzdE5hbWUnKT8udmFsdWUsXG4gICAgICBtaWRkbGVOYW1lOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnY29udGFjdCcpPy5nZXQoJ21pZGRsZU5hbWUnKT8udmFsdWUsXG4gICAgICBsYXN0TmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2NvbnRhY3QnKT8uZ2V0KCdsYXN0TmFtZScpPy52YWx1ZSxcbiAgICAgIGFkZHJlc3M6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnbGluZTEnKT8udmFsdWUsXG4gICAgICBjaXR5OiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NpdHknKT8udmFsdWUsXG4gICAgICBzdGF0ZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSdVU0EnID8gdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdzdGF0ZScpPy52YWx1ZTpudWxsLFxuICAgICAgemlwQ29kZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSdVU0EnID8gdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdwb3N0YWxDb2RlJyk/LnZhbHVlOnRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnZm9yZWlnblppcCcpPy52YWx1ZSxcbiAgICAgIGZvcmVpZ25TdGF0ZTp0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUgIT09J1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy52YWx1ZTpudWxsLFxuICAgICAgY291bnRyeTp0aGlzLmZvcm1TZXJ2aWNlLmdldENvdW50cnlDb2RlKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSksXG4gICAgfTtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJzb25Gcm9tRm9ybSgpOiBPRVBBUGVyc29uIHtcbiAgICBsZXQgYWRkcmVzczogT0VQQUFkZHJlc3MgPSB7XG4gICAgICBhZGRyZXNzVHlwZToge2NvZGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzVHlwZScpPy52YWx1ZSB9LFxuICAgICAgcHJvZ3JhbTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ3Byb2dyYW0nKT8udmFsdWUsXG4gICAgICBhZGRyZXNzOiB7XG4gICAgICAgIHR5cGU6dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlICE9PSdVU0EnPyAnRk9SRU4nOicnICxcbiAgICAgICAgYWRkcmVzc0xpbmUxOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2xpbmUxJyk/LnZhbHVlLFxuICAgICAgICBhZGRyZXNzTGluZTI6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnbGluZTInKT8udmFsdWUsXG4gICAgICAgIGNpdHk6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY2l0eScpPy52YWx1ZSxcbiAgICAgICAgc3RhdGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0nVVNBJyA/IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnc3RhdGUnKT8udmFsdWU6bnVsbCxcbiAgICAgICAgemlwOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUgPT09J1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ3Bvc3RhbENvZGUnKT8udmFsdWU6dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdmb3JlaWduWmlwJyk/LnZhbHVlLFxuICAgICAgICBmb3JlaWduU3RhdGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSAhPT0nVVNBJyA/IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnZm9yZWlnblN0YXRlJyk/LnZhbHVlOm51bGwsXG4gICAgICAgIGNvdW50cnk6dGhpcy5mb3JtU2VydmljZS5nZXRDb3VudHJ5Q29kZSh0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUpLFxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgcGhvbmU6IE9FUEFQaG9uZU51bWJlciA9IHtcbiAgICAgIHBob25lTnVtYmVyVHlwZTogeyBjb2RlOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgncGhvbmVOdW1iZXJUeXBlJyk/LnZhbHVlIH0sXG4gICAgICBwcm9ncmFtOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgncHJvZ3JhbScpPy52YWx1ZSxcbiAgICAgIHBob25lTnVtYmVyOiB7XG4gICAgICAgIHBob25lTnVtYmVyOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnY29udGFjdCcpPy5nZXQoJ3Bob25lTnVtYmVyJyk/LnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgICBsZXQgcGVyc29uOiBPRVBBUGVyc29uID0ge1xuICAgICAgcGVyc29uVHlwZToge2NvZGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwZXJzb25UeXBlJyk/LnZhbHVlIH0sXG4gICAgICBmaXJzdE5hbWU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdjb250YWN0Jyk/LmdldCgnZmlyc3ROYW1lJyk/LnZhbHVlLFxuICAgICAgbWlkZGxlTmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2NvbnRhY3QnKT8uZ2V0KCdtaWRkbGVOYW1lJyk/LnZhbHVlLFxuICAgICAgbGFzdE5hbWU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdjb250YWN0Jyk/LmdldCgnbGFzdE5hbWUnKT8udmFsdWUsXG4gICAgICBhZGRyZXNzTGlzdDogWyBhZGRyZXNzIF0sXG4gICAgICBwaG9uZU51bWJlckxpc3Q6IFtwaG9uZSBdXG4gICAgfTtcbiAgICByZXR1cm4gcGVyc29uO1xuICB9XG5cbiAgcHVibGljIHNhdmVQZXJzb25BZnRlclNlYXJjaCgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMudGFibGVEYXRhID0gW107XG4gICAgdGhpcy5idWlsZFRhYmxlSGVhZGVyKCk7XG4gICAgbGV0IGZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyRnJvbUZvcm0oKTtcbiAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnQ2hlY2tpbmcgdG8gc2VlIGlmIHBlcnNvbiBleGlzdHMuLi4nO1xuICAgIHRoaXMuZW50aXR5U2VydmljZS5tYXRjaFBlcnNvbnMoZmlsdGVyKS5zdWJzY3JpYmUobWF0Y2hlcyA9PiB7XG4gICAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnJztcbiAgICAgIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNhdmVQZXJzb24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdGNoZXMuZm9yRWFjaChwZXJzb24gPT4ge1xuICAgICAgICAgIGxldCByb3cgPSB0aGlzLmNvbnZlcnRQZXJzb25Ub1RhYmxlUm93KHBlcnNvbik7XG4gICAgICAgICAgdGhpcy50YWJsZURhdGEucHVzaChyb3cpO1xuICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy50YWJsZURhdGEuc2xpY2UoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5mb01lc3NhZ2UgPSAnUGxlYXNlIGNoZWNrIHRoZSB0YWJsZSBhYm92ZSBhbmQgc2VsZWN0IGEgcGVyc29uIGZyb20gdGhlIHRhYmxlIGlmIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBwZXJzb24geW91IGFyZSBhdHRlbXB0aW5nIHRvIGNyZWF0ZS4nO1xuICAgICAgfVxuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnJztcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCBzZWFyY2hpbmcgZm9yIGV4aXN0aW5nIHBlcnNvbjogJyArIGVycjtcbiAgICB9KTtcbiAgfVxucHJpdmF0ZSBidWlsZFRhYmxlSGVhZGVyKCl7XG4gICAgdGhpcy50YWJsZUhlYWRlciA9IHtcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICB7IHRpdGxlOiAnJywgaWQ6ICdzZWxlY3QnLCBzb3J0OiAnbm9uZScsIHNpbmdsZVNlbGVjdENvbHVtbjogdHJ1ZSwgY2xhc3NOYW1lOiAnc2VsZWN0LWNvbCcgfSxcbiAgICAgICAgICB7IHRpdGxlOiAnSUQnLCBpZDogJ2lkJywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyB0aXRsZTogJ1R5cGUnLCBpZDogJ3R5cGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSxcbiAgICAgICAgICB7IHRpdGxlOiAnTmFtZScsIGlkOiAnbmFtZScsIHNvcnQ6ICdub25lJywgZmlsdGVyYWJsZTogdHJ1ZSB9LFxuICAgICAgICAgIHsgdGl0bGU6ICdBZGRyZXNzJywgaWQ6ICdhZGRyZXNzJywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyB0aXRsZTogJ0NpdHknLCBpZDogJ2NpdHknLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSxcbiAgICAgICAgICBcbiAgICAgIF1cbiAgfTtcbiAgXG4gIGlmKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0gJ1VTQScpe1xuICAgIHRoaXMudGFibGVIZWFkZXIuY29sdW1ucy5wdXNoKHsgdGl0bGU6ICdTdGF0ZScsIGlkOiAnc3RhdGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnWmlwIENvZGUnLCBpZDogJ3ppcENvZGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnZm9yZWlnblN0YXRlJywgaWQ6ICdmb3JlaWduU3RhdGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnZm9yZWlnblppcCcsIGlkOiAnZm9yZWlnblppcCcsIHNvcnQ6ICdub25lJywgZmlsdGVyYWJsZTogdHJ1ZSB9KVxuICAgIHRoaXMudGFibGVIZWFkZXIuY29sdW1ucy5wdXNoKHsgdGl0bGU6ICdjb3VudHJ5JywgaWQ6ICdjb3VudHJ5Jywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0pO1xuICB9XG4gIFxuXG4gIH1cblxuICAgIHByaXZhdGUgY29udmVydFBlcnNvblRvVGFibGVSb3cocGVyc29uOiBPRVBBUGVyc29uKTogT2VwYVRhYmxlUm93IHtcblxuICAgICBsZXQgY2VsbHM6QXJyYXk8YW55Pj0gW1xuICAgICAgICB7IGlkOiAnaWQnLCB2YWx1ZTogcGVyc29uLmlkIH0sXG4gICAgICAgIHsgaWQ6ICd0eXBlJywgdmFsdWU6IHBlcnNvbi5wZXJzb25UeXBlID8gcGVyc29uLnBlcnNvblR5cGUubmFtZSA6ICcnIH0sXG4gICAgICAgIHsgaWQ6ICduYW1lJywgdmFsdWU6IHBlcnNvbi5uYW1lIH0sXG4gICAgICAgIHsgaWQ6ICdhZGRyZXNzJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5hZGRyZXNzTGluZTEgIDogJycgfSxcbiAgICAgICAgeyBpZDogJ2NpdHknLCB2YWx1ZTogcGVyc29uLmFkZHJlc3NMaXN0ICYmIHBlcnNvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gcGVyc29uLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3M/LmNpdHkgIDogJycgfSxcbiAgICAgICAgICAgIF07XG4gICAgaWYodGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSAnVVNBJyl7XG4gICAgICAgIGNlbGxzLnB1c2goeyBpZDogJ3N0YXRlJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5zdGF0ZSAgOiAnJyB9KVxuICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICd6aXBDb2RlJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy56aXAgIDogJycgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICdmb3JlaWduU3RhdGUnLCB2YWx1ZTogcGVyc29uLmFkZHJlc3NMaXN0ICYmIHBlcnNvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gcGVyc29uLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3M/LmZvcmVpZ25TdGF0ZSAgOiAnJyB9KVxuICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICdmb3JlaWduWmlwJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5mb3JlaWduWmlwICA6ICcnIH0pXG4gICAgICAgIGNlbGxzLnB1c2goeyBpZDogJ2NvdW50cnknLCB2YWx1ZTogcGVyc29uLmFkZHJlc3NMaXN0ICYmIHBlcnNvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gdGhpcy5mb3JtU2VydmljZS5nZXRDb3VudHJ5TmFtZShwZXJzb24uYWRkcmVzc0xpc3RbMF0uYWRkcmVzcz8uY291bnRyeSB8fCAnJykgIDogJycgfSlcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNlbGxzOiBjZWxscyxcbiAgICAgIGRhdGFTb3VyY2U6IHBlcnNvbixcbiAgICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2F2ZVBlcnNvbigpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuaW5Qcm9ncmVzc01zZyA9ICdDcmVhdGluZyByZWNvcmQgZm9yIG5ldyBwZXJzb24uLi4nO1xuICAgIGxldCBwZXJzb24gPSB0aGlzLmdldFBlcnNvbkZyb21Gb3JtKCk7XG4gICAgdGhpcy5lbnRpdHlTZXJ2aWNlLmNyZWF0ZVBlcnNvbihwZXJzb24pLnN1YnNjcmliZShwZXJzb25JRCA9PiB7XG4gICAgICBpZiAocGVyc29uSUQpIHtcbiAgICAgICAgdGhpcy5pblByb2dyZXNzTXNnID0gJyc7XG4gICAgICAgIHBlcnNvbi5pZCA9IHBlcnNvbklEO1xuICAgICAgICB0aGlzLm9uUGVyc29uQ3JlYXRlZC5lbWl0KHBlcnNvbik7XG4gICAgICB9XG4gICAgfSwgZXJyID0+IHtcbiAgICAgIHRoaXMuaW5Qcm9ncmVzc01zZyA9ICcnO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIGNyZWF0aW5nIHBlcnNvbjogJyArIGVycjtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd1NlbGVjdChldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFBlcnNvbiA9IGV2ZW50WzBdLmRhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVNlbGVjdGVkUGVyc29uKCkge1xuICAgIHRoaXMub25QZXJzb25DcmVhdGVkLmVtaXQodGhpcy5zZWxlY3RlZFBlcnNvbik7XG4gIH1cbiAgXG4gIHB1YmxpYyBnZXRNb2RhbEZvcm1Hcm91cChuYW1lOiBzdHJpbmcpIDogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1tuYW1lXSBhcyBGb3JtR3JvdXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kYWxGb3JtR3JvdXBJbnZhbGlkQ2xhc3MobmFtZTogc3RyaW5nKSA6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdpcy1pbnZhbGlkJyA6IHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbbmFtZV0uaW52YWxpZFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcihuYW1lOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbbmFtZV0uaGFzRXJyb3IoZmllbGQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCIgcm9sZT1cImJhbm5lclwiPlxuICAgIDxoMSBjbGFzcz1cIm1vZGFsLXRpdGxlIHB1bGwtbGVmdFwiIGlkPVwicGVyc29uQ3JlYXRlTW9kYWxUaXRsZVwiPkNyZWF0ZSBQZXJzb248L2gxPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlIGZsb2F0LWVuZFwiIGFyaWEtbGFiZWw9XCJDbG9zZSBkaWFsb2dcIiAoY2xpY2spPVwiYnNNb2RhbFJlZi5oaWRlKClcIiB0YWJpbmRleD1cIjBcIj48L2J1dHRvbj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsbGVkYnk9XCJwZXJzb25DcmVhdGVNb2RhbFRpdGxlXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhbW9kYWxGb3JtR3JvdXBcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciB2aXN1YWxseS1oaWRkZW5cIj5Jbml0aWFsaXppbmcuLi48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtbGFiZWw9XCJMb2FkaW5nXCI+PC9zcGFuPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8Zm9ybSAqbmdJZj1cIm1vZGFsRm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJtb2RhbEZvcm1Hcm91cFwiIChrZXlkb3duLmVudGVyKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGVyc29uVHlwZVNlbGVjdFwiPlBlcnNvbiBUeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInBlcnNvblR5cGVTZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJwZXJzb25UeXBlXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TW9kYWxGb3JtR3JvdXBJbnZhbGlkQ2xhc3MoJ3BlcnNvblR5cGUnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBwZXJzb25TdWJUeXBlc1wiIFtuZ1ZhbHVlXT1cInQuY29kZVwiPnt7dC5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdldE1vZGFsRm9ybUdyb3VwSGFzRXJyb3IoJ3BlcnNvblR5cGUnLCdyZXF1aXJlZCcpXCI+UGVyc29uIFR5cGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInByb2dyYW1TZWxlY3RcIj5Qcm9ncmFtPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cInByb2dyYW1TZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9ncmFtXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TW9kYWxGb3JtR3JvdXBJbnZhbGlkQ2xhc3MoJ3Byb2dyYW0nKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBwcm9ncmFtc1wiIFtuZ1ZhbHVlXT1cInRcIj57e3QubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRNb2RhbEZvcm1Hcm91cEhhc0Vycm9yKCdwcm9ncmFtJywncmVxdWlyZWQnKVwiPlByb2dyYW0gaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8b2VwYS1jb250YWN0IFtncm91cF09XCJnZXRNb2RhbEZvcm1Hcm91cCgnY29udGFjdCcpXCJcbiAgICAgICAgICAgIFtzaG93TWlkZGxlTmFtZV09XCJ0cnVlXCIgW25vRmF4XT1cInRydWVcIiBbbm9FbWFpbF09XCJ0cnVlXCIgW3Nob3dWYWxpZGF0aW9uXT1cInRydWVcIiBhcmlhLWxhYmVsPVwiQ29udGFjdCBpbmZvcm1hdGlvbiBmaWVsZHNcIj48L29lcGEtY29udGFjdD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwaG9uZU51bWJlclR5cGVTZWxlY3RcIj5QaG9uZSBOdW1iZXIgVHlwZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJwaG9uZU51bWJlclR5cGVTZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZU51bWJlclR5cGVcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TW9kYWxGb3JtR3JvdXBJbnZhbGlkQ2xhc3MoJ3Bob25lTnVtYmVyVHlwZScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0IG9mIHBob25lTnVtYmVyVHlwZXNcIiBbbmdWYWx1ZV09XCJ0LmNvZGVcIj57e3QubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRNb2RhbEZvcm1Hcm91cEhhc0Vycm9yKCdwaG9uZU51bWJlclR5cGUnLCdyZXF1aXJlZCcpXCI+UGhvbmUgTnVtYmVyIFR5cGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8b2VwYS1hZGRyZXNzIFtncm91cF09XCJnZXRNb2RhbEZvcm1Hcm91cCgnYWRkcmVzcycpXCIgW3Nob3dWYWxpZGF0aW9uXT1cInRydWVcIiBhcmlhLWxhYmVsPVwiQWRkcmVzcyBmaWVsZHNcIj48L29lcGEtYWRkcmVzcz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhZGRyZXNzVHlwZVNlbGVjdFwiPkFkZHJlc3MgVHlwZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJhZGRyZXNzVHlwZVNlbGVjdFwiIGZvcm1Db250cm9sTmFtZT1cImFkZHJlc3NUeXBlXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE1vZGFsRm9ybUdyb3VwSW52YWxpZENsYXNzKCdhZGRyZXNzVHlwZScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0IG9mIGFkZHJlc3NUeXBlc1wiIFtuZ1ZhbHVlXT1cInQuY29kZVwiPnt7dC5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdldE1vZGFsRm9ybUdyb3VwSGFzRXJyb3IoJ2FkZHJlc3NUeXBlJywncmVxdWlyZWQnKVwiPkFkZHJlc3MgVHlwZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICAgIDxkaXYgKm5nSWY9XCJ0YWJsZURhdGEgJiYgdGFibGVEYXRhLmxlbmd0aCA+IDBcIiBjbGFzcz1cImNhcmRcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCIgaWQ9XCJtYXRjaGluZ1BlcnNvbkxpc3RIZWFkZXJcIj5cbiAgICAgICAgICAgIDxiPk1hdGNoaW5nIFBlcnNvbiBMaXN0Jm5ic3A7PC9iPjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctc2Vjb25kYXJ5XCIgYXJpYS1sYWJlbD1cIk51bWJlciBvZiBtYXRjaGluZyBwZXJzb25zXCI+e3t0YWJsZURhdGEubGVuZ3RofX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICA8b2VwYS10YWJsZSB0YWJsZUlkPVwicGVyc29uU2VhcmNoVGFibGVcIiBbY29uZmlnXT1cInRhYmxlQ29uZmlnXCIgW2RhdGFdPVwidGFibGVEYXRhXCIgW2hlYWRlcl09XCJ0YWJsZUhlYWRlclwiIChyb3dTZWxlY3RlZCk9XCJvblJvd1NlbGVjdCgkZXZlbnQpXCIgYXJpYS1sYWJlbGxlZGJ5PVwibWF0Y2hpbmdQZXJzb25MaXN0SGVhZGVyXCI+XG4gICAgICAgICAgICA8L29lcGEtdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyIGQtYmxvY2tcIiByb2xlPVwiY29udGVudGluZm9cIj5cbiAgICA8ZGl2ICpuZ0lmPVwiaW5Qcm9ncmVzc01zZ1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiIHJvbGU9XCJzdGF0dXNcIj5cbiAgICAgICAgICAge3tpblByb2dyZXNzTXNnfX1cbiAgICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJpbmZvTWVzc2FnZSAmJiAhaW5Qcm9ncmVzc01zZ1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiIHJvbGU9XCJzdGF0dXNcIj5cbiAgICAgICAgICAgIHt7aW5mb01lc3NhZ2V9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgICAgIHt7ZXJyb3JNZXNzYWdlfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImluUHJvZ3Jlc3NNc2dcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj48c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxhYmVsPVwiU2F2aW5nXCI+PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIoIXRhYmxlRGF0YSB8fCB0YWJsZURhdGEubGVuZ3RoID09PSAwKSAmJiAhaW5Qcm9ncmVzc01zZ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCJcbiAgICAgICAgICAgICAgICBpZD1cIlNhdmVQZXJzb25CdG5cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbW9kYWxGb3JtR3JvdXAgfHwgbW9kYWxGb3JtR3JvdXAuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVQZXJzb25BZnRlclNlYXJjaCgpXCIgYXJpYS1sYWJlbD1cIlNhdmUgbmV3IHBlcnNvblwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ0YWJsZURhdGEgJiYgdGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgIXNlbGVjdGVkUGVyc29uICYmICFpblByb2dyZXNzTXNnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIlxuICAgICAgICAgICAgICAgIGlkPVwiU2F2ZVBlcnNvbldpdGhvdXRTZWFyY2hCdG5cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtb2RhbEZvcm1Hcm91cC5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZVBlcnNvbigpXCIgYXJpYS1sYWJlbD1cIk5vIG1hdGNoLCBzYXZlIG5ldyBwZXJzb25cIj5ObyBNYXRjaCwgU2F2ZSBOZXcgUGVyc29uPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwidGFibGVEYXRhICYmIHRhYmxlRGF0YS5sZW5ndGggPiAwICYmIHNlbGVjdGVkUGVyc29uICYmICFpblByb2dyZXNzTXNnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIlxuICAgICAgICAgICAgICAgIGlkPVwiU2F2ZVNlbGVjdGVkUGVyc29uQnRuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxGb3JtR3JvdXAuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVTZWxlY3RlZFBlcnNvbigpXCIgYXJpYS1sYWJlbD1cIlVzZSBzZWxlY3RlZCBwZXJzb25cIj5Vc2UgU2VsZWN0ZWQgUGVyc29uPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiQ2FuY2VsUGVyc29uQnRuXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYnNNb2RhbFJlZi5oaWRlKClcIiBhcmlhLWxhYmVsPVwiQ2FuY2VsIGFuZCBjbG9zZSBkaWFsb2dcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLWNyZWF0ZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2VudGl0eS9wZXJzb24tY3JlYXRlLW1vZGFsL3BlcnNvbi1jcmVhdGUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9lbnRpdHkvcGVyc29uLWNyZWF0ZS1tb2RhbC9wZXJzb24tY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxLQUFLLEVBQWMsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFnQmpELE1BQU0sT0FBTywwQkFBMEI7SUF1QmpCO0lBQXdCO0lBQ2xDO0lBQ0E7SUF4QkgsY0FBYyxDQUFhO0lBQzNCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBQzNCLE1BQU0sQ0FBb0I7SUFDMUIsY0FBYyxDQUF5QjtJQUN2QyxjQUFjLEdBQW9CLEVBQUUsQ0FBQztJQUNyQyxRQUFRLEdBQWtCLEVBQUUsQ0FBQztJQUFBLENBQUM7SUFDOUIsWUFBWSxHQUFvQixFQUFFLENBQUM7SUFBQSxDQUFDO0lBQ3BDLGdCQUFnQixHQUFvQixFQUFFLENBQUM7SUFBQSxDQUFDO0lBRXhDLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQ3BDLFdBQVcsQ0FBbUI7SUFFOUIsV0FBVyxHQUFvQjtRQUNwQyxXQUFXLEVBQUUsQ0FBQztRQUNkLFVBQVUsRUFBRSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLENBQUM7S0FDNUQsQ0FBQztJQUdRLGVBQWUsR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztJQUVyRixZQUFvQixFQUFlLEVBQVMsVUFBc0IsRUFDeEQsV0FBNkIsRUFDN0IsYUFBNEI7UUFGbEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUFTLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEQsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO0lBQUksQ0FBQztJQUUzQyxRQUFRO1FBQ04sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ2pDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxvQ0FBb0MsR0FBRyxHQUFHLENBQUM7WUFDakUsQ0FBQztTQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNwQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDeEMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUNsRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzFCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQztZQUMvRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FDL0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUM5QixDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxvQ0FBb0MsR0FBRyxHQUFHLENBQUM7WUFDL0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLENBQ25ELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1lBQ3ZCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDbEMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsb0NBQW9DLEdBQUcsR0FBRyxDQUFDO1lBQy9ELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLG9DQUFvQyxHQUFHLEdBQUcsQ0FBQztZQUMvRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRVMsVUFBVTtRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2xDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNuQixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNoQixRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNqQixTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUNuQixZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNwRSxDQUFDO1lBQ0YsV0FBVyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hFLFFBQVEsRUFBRSxFQUFFO1lBQ1osZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2pELFdBQVcsRUFBRSxFQUFFO1lBQ2YsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTFFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQSxFQUFFO1lBRXRGLElBQUcsT0FBTyxLQUFLLEtBQUssRUFBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQzNGLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO2dCQUMvRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDL0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3RGLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFDdEYsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDbEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3RGLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3BGLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUM7Z0JBQy9FLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLHNCQUFzQixFQUFFLENBQUM7WUFDdEYsQ0FBQztRQUVILENBQUMsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLE1BQU0sR0FBcUI7WUFDN0IsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLO1lBQ3RFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSztZQUN4RSxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUs7WUFDcEUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLO1lBQ2hFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSztZQUM1RCxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssS0FBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUEsQ0FBQyxDQUFBLElBQUk7WUFDeEksT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEtBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFBLENBQUMsQ0FBQSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSztZQUN2TSxZQUFZLEVBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssS0FBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLENBQUEsQ0FBQyxDQUFBLElBQUk7WUFDckosT0FBTyxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUM7U0FDbkcsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxPQUFPLEdBQWdCO1lBQ3pCLFdBQVcsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUU7WUFDbkUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUs7WUFDbEQsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxLQUFJLEtBQUssQ0FBQSxDQUFDLENBQUMsT0FBTyxDQUFBLENBQUMsQ0FBQSxFQUFFO2dCQUNuRixZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUs7Z0JBQ3JFLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSztnQkFDckUsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLO2dCQUM1RCxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssS0FBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUEsQ0FBQyxDQUFBLElBQUk7Z0JBQ3hJLEdBQUcsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxLQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQSxDQUFDLENBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUs7Z0JBQ25NLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxLQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQSxDQUFDLENBQUEsSUFBSTtnQkFDdEosT0FBTyxFQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUM7YUFDbkc7U0FDRixDQUFBO1FBQ0QsSUFBSSxLQUFLLEdBQW9CO1lBQzNCLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssRUFBRTtZQUM1RSxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSztZQUNsRCxXQUFXLEVBQUU7Z0JBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLO2FBQzNFO1NBQ0YsQ0FBQztRQUNGLElBQUksTUFBTSxHQUFlO1lBQ3ZCLFVBQVUsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLEVBQUU7WUFDakUsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLO1lBQ3RFLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSztZQUN4RSxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEtBQUs7WUFDcEUsV0FBVyxFQUFFLENBQUUsT0FBTyxDQUFFO1lBQ3hCLGVBQWUsRUFBRSxDQUFDLEtBQUssQ0FBRTtTQUMxQixDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLHFCQUFxQjtRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLHFDQUFxQyxDQUFDO1FBQzNELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDdkIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUMxQyxDQUFDLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLCtIQUErSCxDQUFDO1lBQ3JKLENBQUM7UUFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLHdDQUF3QyxHQUFHLEdBQUcsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDSyxnQkFBZ0I7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNqQixPQUFPLEVBQUU7Z0JBQ0wsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRTtnQkFDNUYsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO2dCQUN6RCxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7Z0JBQzdELEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTtnQkFDN0QsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFO2dCQUNuRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7YUFFaEU7U0FDSixDQUFDO1FBRUYsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxLQUFLLEtBQUssRUFBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQzlGLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3JHLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7WUFDNUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7WUFDeEcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckcsQ0FBQztJQUdELENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxNQUFrQjtRQUVqRCxJQUFJLEtBQUssR0FBYTtZQUNuQixFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDOUIsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3RFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTtZQUNsQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtTQUNqSCxDQUFDO1FBQ1YsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxLQUFLLEtBQUssRUFBQyxDQUFDO1lBQ3BFLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBQ3BJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3hJLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDbEosS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDOUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDbkwsQ0FBQztRQUNELE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSztZQUNaLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUE7SUFDSCxDQUFDO0lBRU0sVUFBVTtRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsbUNBQW1DLENBQUM7UUFDekQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRywwQkFBMEIsR0FBRyxHQUFHLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQzVDLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFjLENBQUM7SUFDekQsQ0FBQztJQUVNLDZCQUE2QixDQUFDLElBQVk7UUFDL0MsT0FBTztZQUNMLFlBQVksRUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRU0seUJBQXlCLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDMUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQzt3R0F4VFUsMEJBQTBCOzRGQUExQiwwQkFBMEIsaUhDbkJ2QywyME5BMkdNOzs0RkR4Rk8sMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLDBCQUEwQjtvS0F5QjFCLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IE9FUEFQZXJzb24sIE9FUEFBZGRyZXNzLCBPRVBBUGhvbmVOdW1iZXIsIE9FUEFQcm9ncmFtIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1lYml6LWxpYic7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZW50aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgT0VQQVBlcnNvbkZpbHRlciB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgT0VQQVJlZmVyZW5jZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5pbXBvcnQgeyBPZXBhVGFibGVSb3cgfSBmcm9tICcuLi8uLi90YWJsZS9vZXBhLXRhYmxlLXJvdyc7XG5pbXBvcnQgeyBPZXBhVGFibGVIZWFkZXIgfSBmcm9tICcuLi8uLi90YWJsZS9vZXBhLXRhYmxlLWhlYWRlcic7XG5pbXBvcnQgeyBPZXBhVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi90YWJsZS9vZXBhLXRhYmxlLWNvbmZpZyc7XG5pbXBvcnQgeyBPZXBhRm9ybXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vb2VwYS1mb3Jtcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1wZXJzb24tY3JlYXRlLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BlcnNvbi1jcmVhdGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wZXJzb24tY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQZXJzb25DcmVhdGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBtb2RhbEZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcbiAgcHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpbmZvTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpblByb2dyZXNzTXNnOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGZpbHRlciE6IE9FUEFQZXJzb25GaWx0ZXI7XG4gIHB1YmxpYyBzZWxlY3RlZFBlcnNvbjogT0VQQVBlcnNvbiB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHBlcnNvblN1YlR5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTtcbiAgcHVibGljIHByb2dyYW1zOiBPRVBBUHJvZ3JhbVtdID0gW107O1xuICBwdWJsaWMgYWRkcmVzc1R5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTs7XG4gIHB1YmxpYyBwaG9uZU51bWJlclR5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTs7XG5cbiAgcHVibGljIHRhYmxlRGF0YTogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICBwdWJsaWMgdGFibGVIZWFkZXIhOiBPZXBhVGFibGVIZWFkZXI7XG5cbiAgcHVibGljIHRhYmxlQ29uZmlnOiBPZXBhVGFibGVDb25maWcgPSB7XG4gICAgcm93c1BlclBhZ2U6IDUsXG4gICAgY2xhc3NOYW1lczogWyd0YWJsZS1zdHJpcGVkJywgJ3RhYmxlLWJvcmRlcmVkJywgJ3RhYmxlLXNtJ11cbiAgfTtcblxuXG4gIEBPdXRwdXQoKSBvblBlcnNvbkNyZWF0ZWQ6IEV2ZW50RW1pdHRlcjxPRVBBUGVyc29uPiA9IG5ldyBFdmVudEVtaXR0ZXI8T0VQQVBlcnNvbj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHVibGljIGJzTW9kYWxSZWY6IEJzTW9kYWxSZWYsIFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IE9lcGFGb3Jtc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnRpdHlTZXJ2aWNlOiBFbnRpdHlTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRSZWZlcmVuY2VEYXRhKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJlc3VsdHMgPT4ge1xuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7ICAgIFxuICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgfX0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUmVmZXJlbmNlRGF0YSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCB0YXNrcyA9IFtdO1xuICAgIHRhc2tzLnB1c2godGhpcy5yZXRyaWV2ZVBlcnNvblR5cGVzKCkpO1xuICAgIHRhc2tzLnB1c2godGhpcy5yZXRyaWV2ZVByb2dyYW1zKCkpO1xuICAgIHRhc2tzLnB1c2godGhpcy5yZXRyaWV2ZUFkZHJlc3NUeXBlcygpKTtcbiAgICB0YXNrcy5wdXNoKHRoaXMucmV0cmlldmVQaG9uZU51bWJlclR5cGVzKCkpO1xuICAgIHJldHVybiBmb3JrSm9pbih0YXNrcyk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlUGVyc29uVHlwZXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdHlTZXJ2aWNlLnJldHJpZXZlUGVyc29uVHlwZXMoKS5waXBlKFxuICAgICAgbWFwKHR5cGVzID0+IHtcbiAgICAgIHRoaXMucGVyc29uU3ViVHlwZXMgPSBbXTtcbiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICB0aGlzLnBlcnNvblN1YlR5cGVzLnB1c2godHlwZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGVyc29uU3ViVHlwZXMubGVuZ3RoO1xuICAgIH0pLCBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdBbiBpbml0aWFsaXphdGlvbiBlcnJvciBvY2N1cnJlZDogJyArIGVycjtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlUHJvZ3JhbXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdHlTZXJ2aWNlLnJldHJpZXZlUHJvZ3JhbXMoKS5waXBlKFxuICAgICAgbWFwKHByb2dyYW1zID0+IHtcbiAgICAgIHRoaXMucHJvZ3JhbXMgPSBbXTtcbiAgICAgIGlmIChwcm9ncmFtcyAmJiBwcm9ncmFtcy5sZW5ndGgpIHtcbiAgICAgICAgcHJvZ3JhbXMuZm9yRWFjaChwcm9ncmFtID0+IHtcbiAgICAgICAgICB0aGlzLnByb2dyYW1zLnB1c2gocHJvZ3JhbSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbXMubGVuZ3RoO1xuICAgIH0pLCBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdBbiBpbml0aWFsaXphdGlvbiBlcnJvciBvY2N1cnJlZDogJyArIGVycjtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlQWRkcmVzc1R5cGVzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5yZXRyaWV2ZUFkZHJlc3NUeXBlcygpLnBpcGUoXG4gICAgICBtYXAodHlwZXMgPT4ge1xuICAgICAgdGhpcy5hZGRyZXNzVHlwZXMgPSBbXTtcbiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NUeXBlcy5wdXNoKHR5cGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFkZHJlc3NUeXBlcy5sZW5ndGg7XG4gICAgfSksIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0FuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkOiAnICsgZXJyO1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV0cmlldmVQaG9uZU51bWJlclR5cGVzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5yZXRyaWV2ZVRlbGVwaG9uZVR5cGVzKCkucGlwZShcbiAgICAgIG1hcCh0eXBlcyA9PiB7XG4gICAgICB0aGlzLnBob25lTnVtYmVyVHlwZXMgPSBbXTtcbiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICB0aGlzLnBob25lTnVtYmVyVHlwZXMucHVzaCh0eXBlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5waG9uZU51bWJlclR5cGVzLmxlbmd0aDtcbiAgICB9KSwgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfSkpO1xuICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy5tb2RhbEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgcGVyc29uVHlwZTogWydSVlBFUicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBwcm9ncmFtOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGNvbnRhY3Q6IHRoaXMuZmIuZ3JvdXAoeyBcbiAgICAgICAgICBmaXJzdE5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxuICAgICAgICAgIG1pZGRsZU5hbWU6IFsnJ10sXG4gICAgICAgICAgbGFzdE5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxuICAgICAgICAgIHBob25lTnVtYmVyOiBbJyddLFxuICAgICAgICAgIGZheE51bWJlcjogWycnLCBbXV0sXG4gICAgICAgICAgZW1haWxBZGRyZXNzOiBbJycsIFtWYWxpZGF0b3JzLmVtYWlsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTQpXV1cbiAgICAgIH0pLFxuICAgICAgYWRkcmVzc1R5cGU6IFsnQklMTEknLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgYWRkcmVzczogdGhpcy5mYi5ncm91cCh0aGlzLmZvcm1TZXJ2aWNlLmJ1aWxkQWRkcmVzc0Zvcm1XaXRoQ291bnRyeSh7fSkpLFxuICAgICAgYXJlYUNvZGU6ICcnLFxuICAgICAgcGhvbmVOdW1iZXJUeXBlOiBbJ09GRklDJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHBob25lTnVtYmVyOiAnJyxcbiAgICAgIGV4dGVuc2lvbjogJydcbiAgICB9KTtcbiAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdzdGF0ZScpPy5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgXG4gICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnY291bnRyeScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNvdW50cnk9PntcbiAgICAgIFxuICAgICAgaWYoY291bnRyeSA9PT0gJ1VTQScpe1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdzdGF0ZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3N0YXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgncG9zdGFsQ29kZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oJ1swLTldezV9JyldKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgncG9zdGFsQ29kZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblN0YXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblppcCcpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblppcCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduU3RhdGUnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduU3RhdGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduWmlwJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblppcCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3N0YXRlJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdzdGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3Bvc3RhbENvZGUnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3Bvc3RhbENvZGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgICAgXG4gICAgfSlcbiAgICBcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyRnJvbUZvcm0oKTogT0VQQVBlcnNvbkZpbHRlciB7XG4gICAgbGV0IGZpbHRlcjogT0VQQVBlcnNvbkZpbHRlciA9IHtcbiAgICAgIGZpcnN0TmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2NvbnRhY3QnKT8uZ2V0KCdmaXJzdE5hbWUnKT8udmFsdWUsXG4gICAgICBtaWRkbGVOYW1lOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnY29udGFjdCcpPy5nZXQoJ21pZGRsZU5hbWUnKT8udmFsdWUsXG4gICAgICBsYXN0TmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2NvbnRhY3QnKT8uZ2V0KCdsYXN0TmFtZScpPy52YWx1ZSxcbiAgICAgIGFkZHJlc3M6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnbGluZTEnKT8udmFsdWUsXG4gICAgICBjaXR5OiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NpdHknKT8udmFsdWUsXG4gICAgICBzdGF0ZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSdVU0EnID8gdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdzdGF0ZScpPy52YWx1ZTpudWxsLFxuICAgICAgemlwQ29kZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSdVU0EnID8gdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdwb3N0YWxDb2RlJyk/LnZhbHVlOnRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnZm9yZWlnblppcCcpPy52YWx1ZSxcbiAgICAgIGZvcmVpZ25TdGF0ZTp0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUgIT09J1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy52YWx1ZTpudWxsLFxuICAgICAgY291bnRyeTp0aGlzLmZvcm1TZXJ2aWNlLmdldENvdW50cnlDb2RlKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSksXG4gICAgfTtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJzb25Gcm9tRm9ybSgpOiBPRVBBUGVyc29uIHtcbiAgICBsZXQgYWRkcmVzczogT0VQQUFkZHJlc3MgPSB7XG4gICAgICBhZGRyZXNzVHlwZToge2NvZGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzVHlwZScpPy52YWx1ZSB9LFxuICAgICAgcHJvZ3JhbTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ3Byb2dyYW0nKT8udmFsdWUsXG4gICAgICBhZGRyZXNzOiB7XG4gICAgICAgIHR5cGU6dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlICE9PSdVU0EnPyAnRk9SRU4nOicnICxcbiAgICAgICAgYWRkcmVzc0xpbmUxOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2xpbmUxJyk/LnZhbHVlLFxuICAgICAgICBhZGRyZXNzTGluZTI6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnbGluZTInKT8udmFsdWUsXG4gICAgICAgIGNpdHk6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY2l0eScpPy52YWx1ZSxcbiAgICAgICAgc3RhdGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0nVVNBJyA/IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnc3RhdGUnKT8udmFsdWU6bnVsbCxcbiAgICAgICAgemlwOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUgPT09J1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ3Bvc3RhbENvZGUnKT8udmFsdWU6dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdmb3JlaWduWmlwJyk/LnZhbHVlLFxuICAgICAgICBmb3JlaWduU3RhdGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSAhPT0nVVNBJyA/IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnZm9yZWlnblN0YXRlJyk/LnZhbHVlOm51bGwsXG4gICAgICAgIGNvdW50cnk6dGhpcy5mb3JtU2VydmljZS5nZXRDb3VudHJ5Q29kZSh0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUpLFxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgcGhvbmU6IE9FUEFQaG9uZU51bWJlciA9IHtcbiAgICAgIHBob25lTnVtYmVyVHlwZTogeyBjb2RlOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgncGhvbmVOdW1iZXJUeXBlJyk/LnZhbHVlIH0sXG4gICAgICBwcm9ncmFtOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgncHJvZ3JhbScpPy52YWx1ZSxcbiAgICAgIHBob25lTnVtYmVyOiB7XG4gICAgICAgIHBob25lTnVtYmVyOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnY29udGFjdCcpPy5nZXQoJ3Bob25lTnVtYmVyJyk/LnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgICBsZXQgcGVyc29uOiBPRVBBUGVyc29uID0ge1xuICAgICAgcGVyc29uVHlwZToge2NvZGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwZXJzb25UeXBlJyk/LnZhbHVlIH0sXG4gICAgICBmaXJzdE5hbWU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdjb250YWN0Jyk/LmdldCgnZmlyc3ROYW1lJyk/LnZhbHVlLFxuICAgICAgbWlkZGxlTmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2NvbnRhY3QnKT8uZ2V0KCdtaWRkbGVOYW1lJyk/LnZhbHVlLFxuICAgICAgbGFzdE5hbWU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdjb250YWN0Jyk/LmdldCgnbGFzdE5hbWUnKT8udmFsdWUsXG4gICAgICBhZGRyZXNzTGlzdDogWyBhZGRyZXNzIF0sXG4gICAgICBwaG9uZU51bWJlckxpc3Q6IFtwaG9uZSBdXG4gICAgfTtcbiAgICByZXR1cm4gcGVyc29uO1xuICB9XG5cbiAgcHVibGljIHNhdmVQZXJzb25BZnRlclNlYXJjaCgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMudGFibGVEYXRhID0gW107XG4gICAgdGhpcy5idWlsZFRhYmxlSGVhZGVyKCk7XG4gICAgbGV0IGZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyRnJvbUZvcm0oKTtcbiAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnQ2hlY2tpbmcgdG8gc2VlIGlmIHBlcnNvbiBleGlzdHMuLi4nO1xuICAgIHRoaXMuZW50aXR5U2VydmljZS5tYXRjaFBlcnNvbnMoZmlsdGVyKS5zdWJzY3JpYmUobWF0Y2hlcyA9PiB7XG4gICAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnJztcbiAgICAgIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNhdmVQZXJzb24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdGNoZXMuZm9yRWFjaChwZXJzb24gPT4ge1xuICAgICAgICAgIGxldCByb3cgPSB0aGlzLmNvbnZlcnRQZXJzb25Ub1RhYmxlUm93KHBlcnNvbik7XG4gICAgICAgICAgdGhpcy50YWJsZURhdGEucHVzaChyb3cpO1xuICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy50YWJsZURhdGEuc2xpY2UoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5mb01lc3NhZ2UgPSAnUGxlYXNlIGNoZWNrIHRoZSB0YWJsZSBhYm92ZSBhbmQgc2VsZWN0IGEgcGVyc29uIGZyb20gdGhlIHRhYmxlIGlmIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBwZXJzb24geW91IGFyZSBhdHRlbXB0aW5nIHRvIGNyZWF0ZS4nO1xuICAgICAgfVxuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnJztcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCBzZWFyY2hpbmcgZm9yIGV4aXN0aW5nIHBlcnNvbjogJyArIGVycjtcbiAgICB9KTtcbiAgfVxucHJpdmF0ZSBidWlsZFRhYmxlSGVhZGVyKCl7XG4gICAgdGhpcy50YWJsZUhlYWRlciA9IHtcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICB7IHRpdGxlOiAnJywgaWQ6ICdzZWxlY3QnLCBzb3J0OiAnbm9uZScsIHNpbmdsZVNlbGVjdENvbHVtbjogdHJ1ZSwgY2xhc3NOYW1lOiAnc2VsZWN0LWNvbCcgfSxcbiAgICAgICAgICB7IHRpdGxlOiAnSUQnLCBpZDogJ2lkJywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyB0aXRsZTogJ1R5cGUnLCBpZDogJ3R5cGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSxcbiAgICAgICAgICB7IHRpdGxlOiAnTmFtZScsIGlkOiAnbmFtZScsIHNvcnQ6ICdub25lJywgZmlsdGVyYWJsZTogdHJ1ZSB9LFxuICAgICAgICAgIHsgdGl0bGU6ICdBZGRyZXNzJywgaWQ6ICdhZGRyZXNzJywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyB0aXRsZTogJ0NpdHknLCBpZDogJ2NpdHknLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSxcbiAgICAgICAgICBcbiAgICAgIF1cbiAgfTtcbiAgXG4gIGlmKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0gJ1VTQScpe1xuICAgIHRoaXMudGFibGVIZWFkZXIuY29sdW1ucy5wdXNoKHsgdGl0bGU6ICdTdGF0ZScsIGlkOiAnc3RhdGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnWmlwIENvZGUnLCBpZDogJ3ppcENvZGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnZm9yZWlnblN0YXRlJywgaWQ6ICdmb3JlaWduU3RhdGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnZm9yZWlnblppcCcsIGlkOiAnZm9yZWlnblppcCcsIHNvcnQ6ICdub25lJywgZmlsdGVyYWJsZTogdHJ1ZSB9KVxuICAgIHRoaXMudGFibGVIZWFkZXIuY29sdW1ucy5wdXNoKHsgdGl0bGU6ICdjb3VudHJ5JywgaWQ6ICdjb3VudHJ5Jywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0pO1xuICB9XG4gIFxuXG4gIH1cblxuICAgIHByaXZhdGUgY29udmVydFBlcnNvblRvVGFibGVSb3cocGVyc29uOiBPRVBBUGVyc29uKTogT2VwYVRhYmxlUm93IHtcblxuICAgICBsZXQgY2VsbHM6QXJyYXk8YW55Pj0gW1xuICAgICAgICB7IGlkOiAnaWQnLCB2YWx1ZTogcGVyc29uLmlkIH0sXG4gICAgICAgIHsgaWQ6ICd0eXBlJywgdmFsdWU6IHBlcnNvbi5wZXJzb25UeXBlID8gcGVyc29uLnBlcnNvblR5cGUubmFtZSA6ICcnIH0sXG4gICAgICAgIHsgaWQ6ICduYW1lJywgdmFsdWU6IHBlcnNvbi5uYW1lIH0sXG4gICAgICAgIHsgaWQ6ICdhZGRyZXNzJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5hZGRyZXNzTGluZTEgIDogJycgfSxcbiAgICAgICAgeyBpZDogJ2NpdHknLCB2YWx1ZTogcGVyc29uLmFkZHJlc3NMaXN0ICYmIHBlcnNvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gcGVyc29uLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3M/LmNpdHkgIDogJycgfSxcbiAgICAgICAgICAgIF07XG4gICAgaWYodGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSAnVVNBJyl7XG4gICAgICAgIGNlbGxzLnB1c2goeyBpZDogJ3N0YXRlJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5zdGF0ZSAgOiAnJyB9KVxuICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICd6aXBDb2RlJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy56aXAgIDogJycgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICdmb3JlaWduU3RhdGUnLCB2YWx1ZTogcGVyc29uLmFkZHJlc3NMaXN0ICYmIHBlcnNvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gcGVyc29uLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3M/LmZvcmVpZ25TdGF0ZSAgOiAnJyB9KVxuICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICdmb3JlaWduWmlwJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5mb3JlaWduWmlwICA6ICcnIH0pXG4gICAgICAgIGNlbGxzLnB1c2goeyBpZDogJ2NvdW50cnknLCB2YWx1ZTogcGVyc29uLmFkZHJlc3NMaXN0ICYmIHBlcnNvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gdGhpcy5mb3JtU2VydmljZS5nZXRDb3VudHJ5TmFtZShwZXJzb24uYWRkcmVzc0xpc3RbMF0uYWRkcmVzcz8uY291bnRyeSB8fCAnJykgIDogJycgfSlcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNlbGxzOiBjZWxscyxcbiAgICAgIGRhdGFTb3VyY2U6IHBlcnNvbixcbiAgICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2F2ZVBlcnNvbigpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuaW5Qcm9ncmVzc01zZyA9ICdDcmVhdGluZyByZWNvcmQgZm9yIG5ldyBwZXJzb24uLi4nO1xuICAgIGxldCBwZXJzb24gPSB0aGlzLmdldFBlcnNvbkZyb21Gb3JtKCk7XG4gICAgdGhpcy5lbnRpdHlTZXJ2aWNlLmNyZWF0ZVBlcnNvbihwZXJzb24pLnN1YnNjcmliZShwZXJzb25JRCA9PiB7XG4gICAgICBpZiAocGVyc29uSUQpIHtcbiAgICAgICAgdGhpcy5pblByb2dyZXNzTXNnID0gJyc7XG4gICAgICAgIHBlcnNvbi5pZCA9IHBlcnNvbklEO1xuICAgICAgICB0aGlzLm9uUGVyc29uQ3JlYXRlZC5lbWl0KHBlcnNvbik7XG4gICAgICB9XG4gICAgfSwgZXJyID0+IHtcbiAgICAgIHRoaXMuaW5Qcm9ncmVzc01zZyA9ICcnO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIGNyZWF0aW5nIHBlcnNvbjogJyArIGVycjtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd1NlbGVjdChldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFBlcnNvbiA9IGV2ZW50WzBdLmRhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVNlbGVjdGVkUGVyc29uKCkge1xuICAgIHRoaXMub25QZXJzb25DcmVhdGVkLmVtaXQodGhpcy5zZWxlY3RlZFBlcnNvbik7XG4gIH1cbiAgXG4gIHB1YmxpYyBnZXRNb2RhbEZvcm1Hcm91cChuYW1lOiBzdHJpbmcpIDogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1tuYW1lXSBhcyBGb3JtR3JvdXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kYWxGb3JtR3JvdXBJbnZhbGlkQ2xhc3MobmFtZTogc3RyaW5nKSA6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdpcy1pbnZhbGlkJyA6IHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbbmFtZV0uaW52YWxpZFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcihuYW1lOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbbmFtZV0uaGFzRXJyb3IoZmllbGQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCIgcm9sZT1cImJhbm5lclwiPlxuICAgIDxoMSBjbGFzcz1cIm1vZGFsLXRpdGxlIHB1bGwtbGVmdFwiIGlkPVwicGVyc29uQ3JlYXRlTW9kYWxUaXRsZVwiPkNyZWF0ZSBQZXJzb248L2gxPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlIGZsb2F0LWVuZFwiIGFyaWEtbGFiZWw9XCJDbG9zZSBkaWFsb2dcIiAoY2xpY2spPVwiYnNNb2RhbFJlZi5oaWRlKClcIiB0YWJpbmRleD1cIjBcIj48L2J1dHRvbj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIiBhcmlhLWxhYmVsbGVkYnk9XCJwZXJzb25DcmVhdGVNb2RhbFRpdGxlXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhbW9kYWxGb3JtR3JvdXBcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBzci1vbmx5XCI+SW5pdGlhbGl6aW5nLi4uPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxhYmVsPVwiTG9hZGluZ1wiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPGZvcm0gKm5nSWY9XCJtb2RhbEZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwibW9kYWxGb3JtR3JvdXBcIiAoa2V5ZG93bi5lbnRlcik9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBlcnNvblR5cGVTZWxlY3RcIj5QZXJzb24gVHlwZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJwZXJzb25UeXBlU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicGVyc29uVHlwZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE1vZGFsRm9ybUdyb3VwSW52YWxpZENsYXNzKCdwZXJzb25UeXBlJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHQgb2YgcGVyc29uU3ViVHlwZXNcIiBbbmdWYWx1ZV09XCJ0LmNvZGVcIj57e3QubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRNb2RhbEZvcm1Hcm91cEhhc0Vycm9yKCdwZXJzb25UeXBlJywncmVxdWlyZWQnKVwiPlBlcnNvbiBUeXBlIGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwcm9ncmFtU2VsZWN0XCI+UHJvZ3JhbTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJwcm9ncmFtU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZ3JhbVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBhcmlhLXJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE1vZGFsRm9ybUdyb3VwSW52YWxpZENsYXNzKCdwcm9ncmFtJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHQgb2YgcHJvZ3JhbXNcIiBbbmdWYWx1ZV09XCJ0XCI+e3t0Lm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcigncHJvZ3JhbScsJ3JlcXVpcmVkJylcIj5Qcm9ncmFtIGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG9lcGEtY29udGFjdCBbZ3JvdXBdPVwiZ2V0TW9kYWxGb3JtR3JvdXAoJ2NvbnRhY3QnKVwiXG4gICAgICAgICAgICBbc2hvd01pZGRsZU5hbWVdPVwidHJ1ZVwiIFtub0ZheF09XCJ0cnVlXCIgW25vRW1haWxdPVwidHJ1ZVwiIFtzaG93VmFsaWRhdGlvbl09XCJ0cnVlXCIgYXJpYS1sYWJlbD1cIkNvbnRhY3QgaW5mb3JtYXRpb24gZmllbGRzXCI+PC9vZXBhLWNvbnRhY3Q+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGhvbmVOdW1iZXJUeXBlU2VsZWN0XCI+UGhvbmUgTnVtYmVyIFR5cGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwicGhvbmVOdW1iZXJUeXBlU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVOdW1iZXJUeXBlXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE1vZGFsRm9ybUdyb3VwSW52YWxpZENsYXNzKCdwaG9uZU51bWJlclR5cGUnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBwaG9uZU51bWJlclR5cGVzXCIgW25nVmFsdWVdPVwidC5jb2RlXCI+e3t0Lm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcigncGhvbmVOdW1iZXJUeXBlJywncmVxdWlyZWQnKVwiPlBob25lIE51bWJlciBUeXBlIGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG9lcGEtYWRkcmVzcyBbZ3JvdXBdPVwiZ2V0TW9kYWxGb3JtR3JvdXAoJ2FkZHJlc3MnKVwiIFtzaG93VmFsaWRhdGlvbl09XCJ0cnVlXCIgYXJpYS1sYWJlbD1cIkFkZHJlc3MgZmllbGRzXCI+PC9vZXBhLWFkZHJlc3M+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYWRkcmVzc1R5cGVTZWxlY3RcIj5BZGRyZXNzIFR5cGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwiYWRkcmVzc1R5cGVTZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzVHlwZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcygnYWRkcmVzc1R5cGUnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBhZGRyZXNzVHlwZXNcIiBbbmdWYWx1ZV09XCJ0LmNvZGVcIj57e3QubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRNb2RhbEZvcm1Hcm91cEhhc0Vycm9yKCdhZGRyZXNzVHlwZScsJ3JlcXVpcmVkJylcIj5BZGRyZXNzIFR5cGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgICA8ZGl2ICpuZ0lmPVwidGFibGVEYXRhICYmIHRhYmxlRGF0YS5sZW5ndGggPiAwXCIgY2xhc3M9XCJjYXJkXCIgYXJpYS1saXZlPVwicG9saXRlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiIGlkPVwibWF0Y2hpbmdQZXJzb25MaXN0SGVhZGVyXCI+XG4gICAgICAgICAgICA8Yj5NYXRjaGluZyBQZXJzb24gTGlzdCZuYnNwOzwvYj48c3BhbiBjbGFzcz1cImJhZGdlIGJnLXNlY29uZGFyeVwiIGFyaWEtbGFiZWw9XCJOdW1iZXIgb2YgbWF0Y2hpbmcgcGVyc29uc1wiPnt7dGFibGVEYXRhLmxlbmd0aH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgICAgICAgICAgPG9lcGEtdGFibGUgdGFibGVJZD1cInBlcnNvblNlYXJjaFRhYmxlXCIgW2NvbmZpZ109XCJ0YWJsZUNvbmZpZ1wiIFtkYXRhXT1cInRhYmxlRGF0YVwiIFtoZWFkZXJdPVwidGFibGVIZWFkZXJcIiAocm93U2VsZWN0ZWQpPVwib25Sb3dTZWxlY3QoJGV2ZW50KVwiIGFyaWEtbGFiZWxsZWRieT1cIm1hdGNoaW5nUGVyc29uTGlzdEhlYWRlclwiPlxuICAgICAgICAgICAgPC9vZXBhLXRhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlciBkLWJsb2NrXCIgcm9sZT1cImNvbnRlbnRpbmZvXCI+XG4gICAgPGRpdiAqbmdJZj1cImluUHJvZ3Jlc3NNc2dcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgIHt7aW5Qcm9ncmVzc01zZ319XG4gICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiaW5mb01lc3NhZ2UgJiYgIWluUHJvZ3Jlc3NNc2dcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWF0b21pYz1cInRydWVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICB7e2luZm9NZXNzYWdlfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZVwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGFyaWEtYXRvbWljPVwidHJ1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgICAgICB7e2Vycm9yTWVzc2FnZX19XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpblByb2dyZXNzTXNnXCIgYXJpYS1saXZlPVwicG9saXRlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCI+PHNwYW4gY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCIgYXJpYS1sYWJlbD1cIlNhdmluZ1wiPjwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiKCF0YWJsZURhdGEgfHwgdGFibGVEYXRhLmxlbmd0aCA9PT0gMCkgJiYgIWluUHJvZ3Jlc3NNc2dcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiXG4gICAgICAgICAgICAgICAgaWQ9XCJTYXZlUGVyc29uQnRuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW1vZGFsRm9ybUdyb3VwIHx8IG1vZGFsRm9ybUdyb3VwLmludmFsaWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlUGVyc29uQWZ0ZXJTZWFyY2goKVwiIGFyaWEtbGFiZWw9XCJTYXZlIG5ldyBwZXJzb25cIj5TYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwidGFibGVEYXRhICYmIHRhYmxlRGF0YS5sZW5ndGggPiAwICYmICFzZWxlY3RlZFBlcnNvbiAmJiAhaW5Qcm9ncmVzc01zZ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCJcbiAgICAgICAgICAgICAgICBpZD1cIlNhdmVQZXJzb25XaXRob3V0U2VhcmNoQnRuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxGb3JtR3JvdXAuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVQZXJzb24oKVwiIGFyaWEtbGFiZWw9XCJObyBtYXRjaCwgc2F2ZSBuZXcgcGVyc29uXCI+Tm8gTWF0Y2gsIFNhdmUgTmV3IFBlcnNvbjwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInRhYmxlRGF0YSAmJiB0YWJsZURhdGEubGVuZ3RoID4gMCAmJiBzZWxlY3RlZFBlcnNvbiAmJiAhaW5Qcm9ncmVzc01zZ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtci0yXCJcbiAgICAgICAgICAgICAgICBpZD1cIlNhdmVTZWxlY3RlZFBlcnNvbkJ0blwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1vZGFsRm9ybUdyb3VwLmludmFsaWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlU2VsZWN0ZWRQZXJzb24oKVwiIGFyaWEtbGFiZWw9XCJVc2Ugc2VsZWN0ZWQgcGVyc29uXCI+VXNlIFNlbGVjdGVkIFBlcnNvbjwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cIkNhbmNlbFBlcnNvbkJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJzTW9kYWxSZWYuaGlkZSgpXCIgYXJpYS1sYWJlbD1cIkNhbmNlbCBhbmQgY2xvc2UgZGlhbG9nXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19