@ohioepa/oepa-ui-lib 2.0.17 → 2.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/esm2022/lib/account-search-input/account-search-input.component.mjs +2 -2
  2. package/esm2022/lib/account-search-modal/account-search-modal.component.mjs +3 -3
  3. package/esm2022/lib/action-btn/action-btn.component.mjs +89 -5
  4. package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +1 -1
  5. package/esm2022/lib/edoc-attachment/edoc-attachment.component.mjs +2 -2
  6. package/esm2022/lib/entity/organization-create-modal/organization-create-modal.component.mjs +3 -3
  7. package/esm2022/lib/entity/organization-search-input/organization-search-input.component.mjs +2 -2
  8. package/esm2022/lib/entity/organization-search-modal/organization-search-modal.component.mjs +3 -3
  9. package/esm2022/lib/entity/person-create-modal/person-create-modal.component.mjs +1 -1
  10. package/esm2022/lib/entity/person-search-input/person-search-input.component.mjs +2 -2
  11. package/esm2022/lib/entity/person-search-modal/person-search-modal.component.mjs +3 -3
  12. package/esm2022/lib/entity/place-search-input/place-search-input.component.mjs +2 -2
  13. package/esm2022/lib/entity/place-search-modal/place-search-modal.component.mjs +1 -1
  14. package/esm2022/lib/file-upload/file-upload.component.mjs +2 -2
  15. package/esm2022/lib/lynx-image-upload/lynx-image-upload.component.mjs +2 -2
  16. package/esm2022/lib/multi-file-upload/multi-file-upload.component.mjs +2 -2
  17. package/esm2022/lib/notes-modal/notes-modal.component.mjs +3 -3
  18. package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.mjs +4 -4
  19. package/esm2022/lib/table/table.component.mjs +38 -12
  20. package/fesm2022/ohioepa-oepa-ui-lib.mjs +149 -39
  21. package/fesm2022/ohioepa-oepa-ui-lib.mjs.map +1 -1
  22. package/lib/action-btn/action-btn.component.d.ts +6 -1
  23. package/lib/table/table.component.d.ts +8 -4
  24. package/ohioepa-oepa-ui-lib-2.0.19.tgz +0 -0
  25. package/package.json +1 -1
  26. package/ohioepa-oepa-ui-lib-2.0.17.tgz +0 -0
@@ -296,12 +296,12 @@ export class OrganizationCreateModalComponent {
296
296
  return this.modalFormGroup.controls[name].hasError(field);
297
297
  }
298
298
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OrganizationCreateModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BsModalRef }, { token: i3.OepaFormsService }, { token: i4.EntityService }], target: i0.ɵɵFactoryTarget.Component });
299
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OrganizationCreateModalComponent, selector: "oepa-organization-create-modal", outputs: { onOrganizationCreated: "onOrganizationCreated" }, ngImport: i0, template: "<div class=\"modal-header\" id=\"organizationCreateModalTitle\">\n <h1 class=\"modal-title pull-left\">Create Organization</h1>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\" tabindex=\"0\">\n </button>\n</div>\n<div class=\"modal-body\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"organizationCreateModalTitle\" tabindex=\"-1\">\n <div *ngIf=\"!modalFormGroup\">\n <div class=\"text-center\">Initializing...</div>\n <div class=\"text-center\"><span class=\"spinner-border text-primary\" role=\"status\"></span></div>\n </div>\n <form *ngIf=\"modalFormGroup\" [formGroup]=\"modalFormGroup\">\n <label for=\"orgTypeSelect\">Organization Type</label>\n <select id=\"orgTypeSelect\" formControlName=\"orgType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('orgType')\" aria-describedby=\"orgTypeError\">\n <option *ngFor=\"let t of organizationTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"orgTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('orgType','required')\">Organization Type is required</small>\n\n <label for=\"programSelect\">Program</label>\n <select id=\"programSelect\" formControlName=\"program\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('program')\" aria-describedby=\"programError\">\n <option *ngFor=\"let t of programs\" [ngValue]=\"t\">{{t.name}}</option>\n </select>\n <small id=\"programError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('program','required')\">Program is required</small>\n\n <label for=\"organizationName\">Organization Name</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"organizationName\" id=\"organizationName\" maxlength=\"40\"\n [ngClass]=\"getModalFormGroupInvalidClass('organizationName')\" aria-describedby=\"organizationNameError\">\n <small id=\"organizationNameError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('organizationName','required')\">Organization is required</small>\n\n <label for=\"PhoneInput\">Phone Number</label>\n <input type=\"text\" class=\"form-control\" [ngClass]=\"getModalFormGroupInvalidClass('phoneNumber')\"\n placeholder=\"(xxx) xxx-xxxx\" formControlName=\"phoneNumber\" id=\"PhoneInput\" mask=\"(000) 000-0000\" minlength=\"10\" aria-describedby=\"phoneNumberError phoneNumberMinlengthError\">\n <small id=\"phoneNumberError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumber','required')\">Phone Number is required</small>\n <small id=\"phoneNumberMinlengthError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumber','minlength')\">Please enter a valid phone number</small>\n \n <label for=\"phoneNumberTypeSelect\">Phone Number Type</label>\n <select id=\"phoneNumberTypeSelect\" formControlName=\"phoneNumberType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('phoneNumberType')\" aria-describedby=\"phoneNumberTypeError\">\n <option *ngFor=\"let t of phoneNumberTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"phoneNumberTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumberType','required')\">Phone Number Type is required</small>\n\n <oepa-address [group]=\"getModalFormGroup('address')\" [showValidation]=\"true\" [cityMaxLength] = \"25\"></oepa-address> \n\n <label for=\"addressTypeSelect\">Address Type</label>\n <select id=\"addressTypeSelect\" formControlName=\"addressType\" class=\"form-select\" [ngClass]=\"getModalFormGroupInvalidClass('addressType')\" aria-describedby=\"addressTypeError\">\n <option *ngFor=\"let t of addressTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"addressTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('addressType','required')\">Address Type is required</small>\n \n </form>\n <div *ngIf=\"tableData && tableData.length > 0\" class=\"card\" aria-live=\"polite\">\n <div class=\"card-header\">\n <b>Matching Organization List&nbsp;</b><span class=\"badge bg-secondary\">{{tableData.length}}</span>\n </div>\n <div class=\"card-body\">\n <oepa-table tableId=\"organizationSearchTable\" [config]=\"tableConfig\" [data]=\"tableData\" [header]=\"tableHeader\" (rowSelected)=\"onRowSelect($event)\">\n </oepa-table>\n </div>\n </div>\n</div>\n<div class=\"modal-footer d-block\">\n <div *ngIf=\"inProgressMsg\">\n <div class=\"alert alert-info\">\n {{inProgressMsg}}\n </div>\n </div>\n <div *ngIf=\"infoMessage && !inProgressMsg\">\n <div class=\"alert alert-info\">\n {{infoMessage}}\n </div>\n </div>\n <div *ngIf=\"errorMessage\">\n <div class=\"alert alert-danger\">\n {{errorMessage}}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\">\n <span *ngIf=\"inProgressMsg\"><span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <button *ngIf=\"(!tableData || tableData.length === 0) && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveOrganizationBtn\" [disabled]=\"!modalFormGroup || modalFormGroup.invalid\"\n (click)=\"saveOrganizationAfterSearch()\" aria-label=\"Save new organization\">Save</button>\n <button *ngIf=\"tableData && tableData.length > 0 && !selectedOrganization && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveOrganizationWithoutSearchBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveOrganization()\" aria-label=\"No match, save new organization\">No Match, Save New Organization</button>\n <button *ngIf=\"tableData && tableData.length > 0 && selectedOrganization && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveSelectedOrganizationBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveSelectedOrganization()\" aria-label=\"Use selected organization\">Use Selected Organization</button>\n <button id=\"CancelOrganizationBtn\" type=\"button\" class=\"btn btn-primary\"\n (click)=\"bsModalRef.hide()\" aria-label=\"Cancel\">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.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: 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.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { 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: "directive", type: i6.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "component", type: i7.AddressComponent, selector: "oepa-address", inputs: ["group", "showValidation", "idPrefix", "addressOneLabel", "addressTwoLabel", "cityLabel", "stateLabel", "zipCodeLabel", "disableState", "isSearch", "hideLine2", "line1MaxLength", "line2MaxLength", "cityMaxLength", "foreignStateLabel", "foreignZipLabel", "countryLabel", "sameAsGroup", "sameAsLabel", "sameAsChecked"] }, { kind: "component", type: i8.TableComponent, selector: "oepa-table", inputs: ["tableId", "config", "complexHeader", "header", "customBtnLabel", "customBtnVisible", "customBtnEnabled", "data", "totalRow"], outputs: ["actionDropdownOpenChange", "cellClicked", "actionClicked", "rowSelected", "customBtnClicked"] }] });
299
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OrganizationCreateModalComponent, selector: "oepa-organization-create-modal", outputs: { onOrganizationCreated: "onOrganizationCreated" }, ngImport: i0, template: "<div class=\"modal-header\">\n <h1 class=\"modal-title pull-left\" id=\"organizationCreateModalTitle\">Create Organization</h1>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\" tabindex=\"0\">\n </button>\n</div>\n<div class=\"modal-body\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"organizationCreateModalTitle\" tabindex=\"-1\">\n <div *ngIf=\"!modalFormGroup\">\n <div class=\"text-center\">Initializing...</div>\n <div class=\"text-center\"><span class=\"spinner-border text-primary\" role=\"status\"></span></div>\n </div>\n <form *ngIf=\"modalFormGroup\" [formGroup]=\"modalFormGroup\">\n <label for=\"orgTypeSelect\">Organization Type</label>\n <select id=\"orgTypeSelect\" formControlName=\"orgType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('orgType')\" aria-describedby=\"orgTypeError\">\n <option *ngFor=\"let t of organizationTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"orgTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('orgType','required')\">Organization Type is required</small>\n\n <label for=\"programSelect\">Program</label>\n <select id=\"programSelect\" formControlName=\"program\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('program')\" aria-describedby=\"programError\">\n <option *ngFor=\"let t of programs\" [ngValue]=\"t\">{{t.name}}</option>\n </select>\n <small id=\"programError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('program','required')\">Program is required</small>\n\n <label for=\"organizationName\">Organization Name</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"organizationName\" id=\"organizationName\" maxlength=\"40\"\n [ngClass]=\"getModalFormGroupInvalidClass('organizationName')\" aria-describedby=\"organizationNameError\">\n <small id=\"organizationNameError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('organizationName','required')\">Organization is required</small>\n\n <label for=\"PhoneInput\">Phone Number</label>\n <input type=\"text\" class=\"form-control\" [ngClass]=\"getModalFormGroupInvalidClass('phoneNumber')\"\n placeholder=\"(xxx) xxx-xxxx\" formControlName=\"phoneNumber\" id=\"PhoneInput\" mask=\"(000) 000-0000\" minlength=\"10\" aria-describedby=\"phoneNumberError phoneNumberMinlengthError\">\n <small id=\"phoneNumberError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumber','required')\">Phone Number is required</small>\n <small id=\"phoneNumberMinlengthError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumber','minlength')\">Please enter a valid phone number</small>\n \n <label for=\"phoneNumberTypeSelect\">Phone Number Type</label>\n <select id=\"phoneNumberTypeSelect\" formControlName=\"phoneNumberType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('phoneNumberType')\" aria-describedby=\"phoneNumberTypeError\">\n <option *ngFor=\"let t of phoneNumberTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"phoneNumberTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumberType','required')\">Phone Number Type is required</small>\n\n <oepa-address [group]=\"getModalFormGroup('address')\" [showValidation]=\"true\" [cityMaxLength] = \"25\"></oepa-address> \n\n <label for=\"addressTypeSelect\">Address Type</label>\n <select id=\"addressTypeSelect\" formControlName=\"addressType\" class=\"form-select\" [ngClass]=\"getModalFormGroupInvalidClass('addressType')\" aria-describedby=\"addressTypeError\">\n <option *ngFor=\"let t of addressTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"addressTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('addressType','required')\">Address Type is required</small>\n \n </form>\n <div *ngIf=\"tableData && tableData.length > 0\" class=\"card\" aria-live=\"polite\">\n <div class=\"card-header\">\n <b>Matching Organization List&nbsp;</b><span class=\"badge bg-secondary\">{{tableData.length}}</span>\n </div>\n <div class=\"card-body\">\n <oepa-table tableId=\"organizationSearchTable\" [config]=\"tableConfig\" [data]=\"tableData\" [header]=\"tableHeader\" (rowSelected)=\"onRowSelect($event)\">\n </oepa-table>\n </div>\n </div>\n</div>\n<div class=\"modal-footer d-block\">\n <div *ngIf=\"inProgressMsg\">\n <div class=\"alert alert-info\">\n {{inProgressMsg}}\n </div>\n </div>\n <div *ngIf=\"infoMessage && !inProgressMsg\">\n <div class=\"alert alert-info\">\n {{infoMessage}}\n </div>\n </div>\n <div *ngIf=\"errorMessage\">\n <div class=\"alert alert-danger\">\n {{errorMessage}}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\">\n <span *ngIf=\"inProgressMsg\"><span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <button *ngIf=\"(!tableData || tableData.length === 0) && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveOrganizationBtn\" [disabled]=\"!modalFormGroup || modalFormGroup.invalid\"\n (click)=\"saveOrganizationAfterSearch()\" aria-label=\"Save new organization\">Save</button>\n <button *ngIf=\"tableData && tableData.length > 0 && !selectedOrganization && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveOrganizationWithoutSearchBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveOrganization()\" aria-label=\"No match, save new organization\">No Match, Save New Organization</button>\n <button *ngIf=\"tableData && tableData.length > 0 && selectedOrganization && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveSelectedOrganizationBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveSelectedOrganization()\" aria-label=\"Use selected organization\">Use Selected Organization</button>\n <button id=\"CancelOrganizationBtn\" type=\"button\" class=\"btn btn-primary\"\n (click)=\"bsModalRef.hide()\" aria-label=\"Cancel\">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.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: 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.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { 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: "directive", type: i6.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }, { kind: "component", type: i7.AddressComponent, selector: "oepa-address", inputs: ["group", "showValidation", "idPrefix", "addressOneLabel", "addressTwoLabel", "cityLabel", "stateLabel", "zipCodeLabel", "disableState", "isSearch", "hideLine2", "line1MaxLength", "line2MaxLength", "cityMaxLength", "foreignStateLabel", "foreignZipLabel", "countryLabel", "sameAsGroup", "sameAsLabel", "sameAsChecked"] }, { kind: "component", type: i8.TableComponent, selector: "oepa-table", inputs: ["tableId", "addActionFiller", "config", "complexHeader", "header", "customBtnLabel", "customBtnVisible", "customBtnEnabled", "data", "totalRow"], outputs: ["cellClicked", "actionClicked", "rowSelected", "customBtnClicked"] }] });
300
300
  }
301
301
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OrganizationCreateModalComponent, decorators: [{
302
302
  type: Component,
303
- args: [{ selector: 'oepa-organization-create-modal', template: "<div class=\"modal-header\" id=\"organizationCreateModalTitle\">\n <h1 class=\"modal-title pull-left\">Create Organization</h1>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\" tabindex=\"0\">\n </button>\n</div>\n<div class=\"modal-body\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"organizationCreateModalTitle\" tabindex=\"-1\">\n <div *ngIf=\"!modalFormGroup\">\n <div class=\"text-center\">Initializing...</div>\n <div class=\"text-center\"><span class=\"spinner-border text-primary\" role=\"status\"></span></div>\n </div>\n <form *ngIf=\"modalFormGroup\" [formGroup]=\"modalFormGroup\">\n <label for=\"orgTypeSelect\">Organization Type</label>\n <select id=\"orgTypeSelect\" formControlName=\"orgType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('orgType')\" aria-describedby=\"orgTypeError\">\n <option *ngFor=\"let t of organizationTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"orgTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('orgType','required')\">Organization Type is required</small>\n\n <label for=\"programSelect\">Program</label>\n <select id=\"programSelect\" formControlName=\"program\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('program')\" aria-describedby=\"programError\">\n <option *ngFor=\"let t of programs\" [ngValue]=\"t\">{{t.name}}</option>\n </select>\n <small id=\"programError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('program','required')\">Program is required</small>\n\n <label for=\"organizationName\">Organization Name</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"organizationName\" id=\"organizationName\" maxlength=\"40\"\n [ngClass]=\"getModalFormGroupInvalidClass('organizationName')\" aria-describedby=\"organizationNameError\">\n <small id=\"organizationNameError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('organizationName','required')\">Organization is required</small>\n\n <label for=\"PhoneInput\">Phone Number</label>\n <input type=\"text\" class=\"form-control\" [ngClass]=\"getModalFormGroupInvalidClass('phoneNumber')\"\n placeholder=\"(xxx) xxx-xxxx\" formControlName=\"phoneNumber\" id=\"PhoneInput\" mask=\"(000) 000-0000\" minlength=\"10\" aria-describedby=\"phoneNumberError phoneNumberMinlengthError\">\n <small id=\"phoneNumberError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumber','required')\">Phone Number is required</small>\n <small id=\"phoneNumberMinlengthError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumber','minlength')\">Please enter a valid phone number</small>\n \n <label for=\"phoneNumberTypeSelect\">Phone Number Type</label>\n <select id=\"phoneNumberTypeSelect\" formControlName=\"phoneNumberType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('phoneNumberType')\" aria-describedby=\"phoneNumberTypeError\">\n <option *ngFor=\"let t of phoneNumberTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"phoneNumberTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumberType','required')\">Phone Number Type is required</small>\n\n <oepa-address [group]=\"getModalFormGroup('address')\" [showValidation]=\"true\" [cityMaxLength] = \"25\"></oepa-address> \n\n <label for=\"addressTypeSelect\">Address Type</label>\n <select id=\"addressTypeSelect\" formControlName=\"addressType\" class=\"form-select\" [ngClass]=\"getModalFormGroupInvalidClass('addressType')\" aria-describedby=\"addressTypeError\">\n <option *ngFor=\"let t of addressTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"addressTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('addressType','required')\">Address Type is required</small>\n \n </form>\n <div *ngIf=\"tableData && tableData.length > 0\" class=\"card\" aria-live=\"polite\">\n <div class=\"card-header\">\n <b>Matching Organization List&nbsp;</b><span class=\"badge bg-secondary\">{{tableData.length}}</span>\n </div>\n <div class=\"card-body\">\n <oepa-table tableId=\"organizationSearchTable\" [config]=\"tableConfig\" [data]=\"tableData\" [header]=\"tableHeader\" (rowSelected)=\"onRowSelect($event)\">\n </oepa-table>\n </div>\n </div>\n</div>\n<div class=\"modal-footer d-block\">\n <div *ngIf=\"inProgressMsg\">\n <div class=\"alert alert-info\">\n {{inProgressMsg}}\n </div>\n </div>\n <div *ngIf=\"infoMessage && !inProgressMsg\">\n <div class=\"alert alert-info\">\n {{infoMessage}}\n </div>\n </div>\n <div *ngIf=\"errorMessage\">\n <div class=\"alert alert-danger\">\n {{errorMessage}}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\">\n <span *ngIf=\"inProgressMsg\"><span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <button *ngIf=\"(!tableData || tableData.length === 0) && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveOrganizationBtn\" [disabled]=\"!modalFormGroup || modalFormGroup.invalid\"\n (click)=\"saveOrganizationAfterSearch()\" aria-label=\"Save new organization\">Save</button>\n <button *ngIf=\"tableData && tableData.length > 0 && !selectedOrganization && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveOrganizationWithoutSearchBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveOrganization()\" aria-label=\"No match, save new organization\">No Match, Save New Organization</button>\n <button *ngIf=\"tableData && tableData.length > 0 && selectedOrganization && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveSelectedOrganizationBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveSelectedOrganization()\" aria-label=\"Use selected organization\">Use Selected Organization</button>\n <button id=\"CancelOrganizationBtn\" type=\"button\" class=\"btn btn-primary\"\n (click)=\"bsModalRef.hide()\" aria-label=\"Cancel\">Cancel</button>\n </div>\n </div>\n</div>" }]
303
+ args: [{ selector: 'oepa-organization-create-modal', template: "<div class=\"modal-header\">\n <h1 class=\"modal-title pull-left\" id=\"organizationCreateModalTitle\">Create Organization</h1>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\" tabindex=\"0\">\n </button>\n</div>\n<div class=\"modal-body\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"organizationCreateModalTitle\" tabindex=\"-1\">\n <div *ngIf=\"!modalFormGroup\">\n <div class=\"text-center\">Initializing...</div>\n <div class=\"text-center\"><span class=\"spinner-border text-primary\" role=\"status\"></span></div>\n </div>\n <form *ngIf=\"modalFormGroup\" [formGroup]=\"modalFormGroup\">\n <label for=\"orgTypeSelect\">Organization Type</label>\n <select id=\"orgTypeSelect\" formControlName=\"orgType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('orgType')\" aria-describedby=\"orgTypeError\">\n <option *ngFor=\"let t of organizationTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"orgTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('orgType','required')\">Organization Type is required</small>\n\n <label for=\"programSelect\">Program</label>\n <select id=\"programSelect\" formControlName=\"program\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('program')\" aria-describedby=\"programError\">\n <option *ngFor=\"let t of programs\" [ngValue]=\"t\">{{t.name}}</option>\n </select>\n <small id=\"programError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('program','required')\">Program is required</small>\n\n <label for=\"organizationName\">Organization Name</label>\n <input type=\"text\" class=\"form-control\" formControlName=\"organizationName\" id=\"organizationName\" maxlength=\"40\"\n [ngClass]=\"getModalFormGroupInvalidClass('organizationName')\" aria-describedby=\"organizationNameError\">\n <small id=\"organizationNameError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('organizationName','required')\">Organization is required</small>\n\n <label for=\"PhoneInput\">Phone Number</label>\n <input type=\"text\" class=\"form-control\" [ngClass]=\"getModalFormGroupInvalidClass('phoneNumber')\"\n placeholder=\"(xxx) xxx-xxxx\" formControlName=\"phoneNumber\" id=\"PhoneInput\" mask=\"(000) 000-0000\" minlength=\"10\" aria-describedby=\"phoneNumberError phoneNumberMinlengthError\">\n <small id=\"phoneNumberError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumber','required')\">Phone Number is required</small>\n <small id=\"phoneNumberMinlengthError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumber','minlength')\">Please enter a valid phone number</small>\n \n <label for=\"phoneNumberTypeSelect\">Phone Number Type</label>\n <select id=\"phoneNumberTypeSelect\" formControlName=\"phoneNumberType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('phoneNumberType')\" aria-describedby=\"phoneNumberTypeError\">\n <option *ngFor=\"let t of phoneNumberTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"phoneNumberTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumberType','required')\">Phone Number Type is required</small>\n\n <oepa-address [group]=\"getModalFormGroup('address')\" [showValidation]=\"true\" [cityMaxLength] = \"25\"></oepa-address> \n\n <label for=\"addressTypeSelect\">Address Type</label>\n <select id=\"addressTypeSelect\" formControlName=\"addressType\" class=\"form-select\" [ngClass]=\"getModalFormGroupInvalidClass('addressType')\" aria-describedby=\"addressTypeError\">\n <option *ngFor=\"let t of addressTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small id=\"addressTypeError\" class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('addressType','required')\">Address Type is required</small>\n \n </form>\n <div *ngIf=\"tableData && tableData.length > 0\" class=\"card\" aria-live=\"polite\">\n <div class=\"card-header\">\n <b>Matching Organization List&nbsp;</b><span class=\"badge bg-secondary\">{{tableData.length}}</span>\n </div>\n <div class=\"card-body\">\n <oepa-table tableId=\"organizationSearchTable\" [config]=\"tableConfig\" [data]=\"tableData\" [header]=\"tableHeader\" (rowSelected)=\"onRowSelect($event)\">\n </oepa-table>\n </div>\n </div>\n</div>\n<div class=\"modal-footer d-block\">\n <div *ngIf=\"inProgressMsg\">\n <div class=\"alert alert-info\">\n {{inProgressMsg}}\n </div>\n </div>\n <div *ngIf=\"infoMessage && !inProgressMsg\">\n <div class=\"alert alert-info\">\n {{infoMessage}}\n </div>\n </div>\n <div *ngIf=\"errorMessage\">\n <div class=\"alert alert-danger\">\n {{errorMessage}}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\">\n <span *ngIf=\"inProgressMsg\"><span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <button *ngIf=\"(!tableData || tableData.length === 0) && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveOrganizationBtn\" [disabled]=\"!modalFormGroup || modalFormGroup.invalid\"\n (click)=\"saveOrganizationAfterSearch()\" aria-label=\"Save new organization\">Save</button>\n <button *ngIf=\"tableData && tableData.length > 0 && !selectedOrganization && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveOrganizationWithoutSearchBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveOrganization()\" aria-label=\"No match, save new organization\">No Match, Save New Organization</button>\n <button *ngIf=\"tableData && tableData.length > 0 && selectedOrganization && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveSelectedOrganizationBtn\"\n [disabled]=\"modalFormGroup.invalid\"\n (click)=\"saveSelectedOrganization()\" aria-label=\"Use selected organization\">Use Selected Organization</button>\n <button id=\"CancelOrganizationBtn\" type=\"button\" class=\"btn btn-primary\"\n (click)=\"bsModalRef.hide()\" aria-label=\"Cancel\">Cancel</button>\n </div>\n </div>\n</div>" }]
304
304
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.BsModalRef }, { type: i3.OepaFormsService }, { type: i4.EntityService }], propDecorators: { onOrganizationCreated: [{
305
305
  type: Output
306
306
  }] } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLWNyZWF0ZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2VudGl0eS9vcmdhbml6YXRpb24tY3JlYXRlLW1vZGFsL29yZ2FuaXphdGlvbi1jcmVhdGUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9lbnRpdHkvb3JnYW5pemF0aW9uLWNyZWF0ZS1tb2RhbC9vcmdhbml6YXRpb24tY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxLQUFLLEVBQWMsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFlakQsTUFBTSxPQUFPLGdDQUFnQztJQXNCdkI7SUFBd0I7SUFDbEM7SUFDQTtJQXZCTCxjQUFjLENBQWE7SUFDekIsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLGFBQWEsR0FBVyxFQUFFLENBQUM7SUFDM0IsTUFBTSxDQUEwQjtJQUNoQyxpQkFBaUIsR0FBb0IsRUFBRSxDQUFDO0lBQ3hDLFFBQVEsR0FBa0IsRUFBRSxDQUFDO0lBQzdCLFlBQVksR0FBb0IsRUFBRSxDQUFDO0lBQ25DLGdCQUFnQixHQUFvQixFQUFFLENBQUM7SUFDdkMsb0JBQW9CLENBQStCO0lBRXJELFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQ2xDLFdBQVcs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LGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxnQ0FBZ0MsR0FBRyxHQUFHLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDbEQsQ0FBQztJQUVNLHdCQUF3QjtRQUM3QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFjLENBQUM7SUFDekQsQ0FBQztJQUVNLDZCQUE2QixDQUFDLElBQVk7UUFDL0MsT0FBTztZQUNMLFlBQVksRUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRU0seUJBQXlCLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDMUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQzt3R0E1U1UsZ0NBQWdDOzRGQUFoQyxnQ0FBZ0MsbUlDbkI3QywwcE5BZ0dNOzs0RkQ3RU8sZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLGdDQUFnQztvS0F3QmhDLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT0VQQU9yZ2FuaXphdGlvbiwgT0VQQUFkZHJlc3MsIE9FUEFQaG9uZU51bWJlciwgT0VQQVByb2dyYW0gfSBmcm9tICdAb2hpb2VwYS9vZXBhLWViaXotbGliJztcbmltcG9ydCB7IEVudGl0eVNlcnZpY2UgfSBmcm9tICcuLi9lbnRpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBPRVBBT3JnYW5pemF0aW9uRmlsdGVyIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1lYml6LWxpYic7XG5pbXBvcnQgeyBPRVBBUmVmZXJlbmNlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IE9lcGFUYWJsZVJvdyB9IGZyb20gJy4uLy4uL3RhYmxlL29lcGEtdGFibGUtcm93JztcbmltcG9ydCB7IE9lcGFUYWJsZUhlYWRlciB9IGZyb20gJy4uLy4uL3RhYmxlL29lcGEtdGFibGUtaGVhZGVyJztcbmltcG9ydCB7IE9lcGFUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL3RhYmxlL29lcGEtdGFibGUtY29uZmlnJztcbmltcG9ydCB7IE9lcGFGb3Jtc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9vZXBhLWZvcm1zLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLW9yZ2FuaXphdGlvbi1jcmVhdGUtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vb3JnYW5pemF0aW9uLWNyZWF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29yZ2FuaXphdGlvbi1jcmVhdGUtbW9kYWwuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvbkNyZWF0ZU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbnB1YmxpYyBtb2RhbEZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcbiAgcHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpbmZvTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpblByb2dyZXNzTXNnOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGZpbHRlciE6IE9FUEFPcmdhbml6YXRpb25GaWx0ZXI7XG4gIHB1YmxpYyBvcmdhbml6YXRpb25UeXBlczogT0VQQVJlZmVyZW5jZVtdID0gW107XG4gIHB1YmxpYyBwcm9ncmFtczogT0VQQVByb2dyYW1bXSA9IFtdO1xuICBwdWJsaWMgYWRkcmVzc1R5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTtcbiAgcHVibGljIHBob25lTnVtYmVyVHlwZXM6IE9FUEFSZWZlcmVuY2VbXSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRPcmdhbml6YXRpb246IE9FUEFPcmdhbml6YXRpb24gfCB1bmRlZmluZWQ7XG5cbnB1YmxpYyB0YWJsZURhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgcHVibGljIHRhYmxlSGVhZGVyITogT2VwYVRhYmxlSGVhZGVyO1xuICBwdWJsaWMgdGFibGVDb25maWc6IE9lcGFUYWJsZUNvbmZpZyA9IHtcbiAgICByb3dzUGVyUGFnZTogNSxcbiAgICBjbGFzc05hbWVzOiBbJ3RhYmxlLXN0cmlwZWQnLCAndGFibGUtYm9yZGVyZWQnLCAndGFibGUtc20nXVxuICB9O1xuXG5cbiAgQE91dHB1dCgpIG9uT3JnYW5pemF0aW9uQ3JlYXRlZDogRXZlbnRFbWl0dGVyPE9FUEFPcmdhbml6YXRpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxPRVBBT3JnYW5pemF0aW9uPigpO1xuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHB1YmxpYyBic01vZGFsUmVmOiBCc01vZGFsUmVmLCBcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBPZXBhRm9ybXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW50aXR5U2VydmljZTogRW50aXR5U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkUmVmZXJlbmNlRGF0YSgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByZXN1bHRzID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlRm9ybSgpOyAgICBcbiAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0FuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkOiAnICsgZXJyO1xuICAgIH19KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFJlZmVyZW5jZURhdGEoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgdGFza3MgPSBbXTtcbiAgICB0YXNrcy5wdXNoKHRoaXMucmV0cmlldmVPcmdhbml6YXRpb25UeXBlcygpKTtcbiAgICB0YXNrcy5wdXNoKHRoaXMucmV0cmlldmVQcm9ncmFtcygpKTtcbiAgICB0YXNrcy5wdXNoKHRoaXMucmV0cmlldmVBZGRyZXNzVHlwZXMoKSk7XG4gICAgdGFza3MucHVzaCh0aGlzLnJldHJpZXZlUGhvbmVOdW1iZXJUeXBlcygpKTtcbiAgICByZXR1cm4gZm9ya0pvaW4odGFza3MpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyaWV2ZU9yZ2FuaXphdGlvblR5cGVzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5yZXRyaWV2ZU9yZ2FuaXphdGlvblR5cGVzKCkucGlwZShcbiAgICAgIG1hcCh0eXBlcyA9PiB7XG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblR5cGVzID0gW107XG4gICAgICBpZiAodHlwZXMgJiYgdHlwZXMubGVuZ3RoKSB7XG4gICAgICAgIHR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25UeXBlcy5wdXNoKHR5cGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm9yZ2FuaXphdGlvblR5cGVzLmxlbmd0aDtcbiAgICB9KSwgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyaWV2ZVByb2dyYW1zKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5yZXRyaWV2ZVByb2dyYW1zKCkucGlwZShcbiAgICAgIG1hcChwcm9ncmFtcyA9PiB7XG4gICAgICB0aGlzLnByb2dyYW1zID0gW107XG4gICAgICBpZiAocHJvZ3JhbXMgJiYgcHJvZ3JhbXMubGVuZ3RoKSB7XG4gICAgICAgIHByb2dyYW1zLmZvckVhY2gocHJvZ3JhbSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9ncmFtcy5wdXNoKHByb2dyYW0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnByb2dyYW1zLmxlbmd0aDtcbiAgICB9KSwgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyaWV2ZUFkZHJlc3NUeXBlcygpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0eVNlcnZpY2UucmV0cmlldmVBZGRyZXNzVHlwZXMoKS5waXBlKFxuICAgICAgbWFwKHR5cGVzID0+IHtcbiAgICAgIHRoaXMuYWRkcmVzc1R5cGVzID0gW107XG4gICAgICBpZiAodHlwZXMgJiYgdHlwZXMubGVuZ3RoKSB7XG4gICAgICAgIHR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzVHlwZXMucHVzaCh0eXBlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hZGRyZXNzVHlwZXMubGVuZ3RoO1xuICAgIH0pLCBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdBbiBpbml0aWFsaXphdGlvbiBlcnJvciBvY2N1cnJlZDogJyArIGVycjtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlUGhvbmVOdW1iZXJUeXBlcygpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0eVNlcnZpY2UucmV0cmlldmVUZWxlcGhvbmVUeXBlcygpLnBpcGUoXG4gICAgICBtYXAodHlwZXMgPT4ge1xuICAgICAgdGhpcy5waG9uZU51bWJlclR5cGVzID0gW107XG4gICAgICBpZiAodHlwZXMgJiYgdHlwZXMubGVuZ3RoKSB7XG4gICAgICAgIHR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgICAgdGhpcy5waG9uZU51bWJlclR5cGVzLnB1c2godHlwZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGhvbmVOdW1iZXJUeXBlcy5sZW5ndGg7XG4gICAgfSksIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0FuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkOiAnICsgZXJyO1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH0pKTtcbiAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xuICAgIHRoaXMubW9kYWxGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG9yZ1R5cGU6IFsnUlZPUkcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcHJvZ3JhbTogW251bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBvcmdhbml6YXRpb25OYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldXSxcbiAgICAgIGFkZHJlc3NUeXBlOiBbJ0JJTExJJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGFkZHJlc3M6IHRoaXMuZmIuZ3JvdXAodGhpcy5mb3JtU2VydmljZS5idWlsZEFkZHJlc3NGb3JtV2l0aENvdW50cnkoe30pKSxcbiAgICAgIGFyZWFDb2RlOiAnJyxcbiAgICAgIHBob25lTnVtYmVyVHlwZTogWydPRkZJQycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBwaG9uZU51bWJlcjogJycsXG4gICAgICBleHRlbnNpb246ICcnXG4gICAgfSk7XG4gICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnc3RhdGUnKT8uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoY291bnRyeT0+e1xuICAgICAgXG4gICAgICBpZihjb3VudHJ5ID09PSAnVVNBJyl7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3N0YXRlJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnc3RhdGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdwb3N0YWxDb2RlJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybignWzAtOV17NX0nKV0pO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdwb3N0YWxDb2RlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblN0YXRlJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduU3RhdGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduWmlwJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduWmlwJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ2ZvcmVpZ25aaXAnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduWmlwJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnc3RhdGUnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3N0YXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgncG9zdGFsQ29kZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgncG9zdGFsQ29kZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgICBcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJGcm9tRm9ybSgpOiBPRVBBT3JnYW5pemF0aW9uRmlsdGVyIHtcbiAgICBsZXQgZmlsdGVyOiBPRVBBT3JnYW5pemF0aW9uRmlsdGVyID0ge1xuICAgICAgbmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ29yZ2FuaXphdGlvbk5hbWUnKT8udmFsdWUsXG4gICAgICBwaG9uZU51bWJlcjp0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgncGhvbmVOdW1iZXInKT8udmFsdWUsXG4gICAgICBhZGRyZXNzOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2xpbmUxJyk/LnZhbHVlLFxuICAgICAgY2l0eTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjaXR5Jyk/LnZhbHVlLFxuICAgICAgc3RhdGU6dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSAnVVNBJyA/IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnc3RhdGUnKT8udmFsdWU6bnVsbCxcbiAgICAgIHppcENvZGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0gJ1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ3Bvc3RhbENvZGUnKT8udmFsdWUgOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2ZvcmVpZ25aaXAnKT8udmFsdWUsXG4gICAgICBmb3JlaWduU3RhdGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSAhPT0gJ1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy52YWx1ZTpudWxsLFxuICAgICAgY291bnRyeTp0aGlzLmZvcm1TZXJ2aWNlLmdldENvdW50cnlDb2RlKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSksXG4gICAgfTtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmdhbml6YXRpb25Gcm9tRm9ybSgpOiBPRVBBT3JnYW5pemF0aW9uIHtcbiAgICBsZXQgYWRkcmVzczogT0VQQUFkZHJlc3MgPSB7XG4gICAgICBhZGRyZXNzVHlwZTogeyBjb2RlOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzc1R5cGUnKT8udmFsdWUgfSxcbiAgICAgIHByb2dyYW06IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwcm9ncmFtJyk/LnZhbHVlLFxuICAgICAgYWRkcmVzczoge1xuICAgICAgICB0eXBlOnRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSAhPT0nVVNBJz8gJ0ZPUkVOJzonJyAsXG4gICAgICAgIGFkZHJlc3NMaW5lMTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdsaW5lMScpPy52YWx1ZSxcbiAgICAgICAgYWRkcmVzc0xpbmUyOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2xpbmUyJyk/LnZhbHVlLFxuICAgICAgICBjaXR5OiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NpdHknKT8udmFsdWUsXG4gICAgICAgIHN0YXRlOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUgPT09ICdVU0EnID8gdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdzdGF0ZScpPy52YWx1ZTpudWxsLFxuICAgICAgICB6aXA6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0gJ1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ3Bvc3RhbENvZGUnKT8udmFsdWU6dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdmb3JlaWduWmlwJyk/LnZhbHVlLFxuICAgICAgICBmb3JlaWduU3RhdGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSAhPT0gJ1VTQSc/dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdmb3JlaWduU3RhdGUnKT8udmFsdWU6bnVsbCxcbiAgICAgICAgY291bnRyeTp0aGlzLmZvcm1TZXJ2aWNlLmdldENvdW50cnlDb2RlKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSksXG4gICAgICB9XG4gICAgfVxuICAgIGxldCBwaG9uZTogT0VQQVBob25lTnVtYmVyID0ge1xuICAgICAgcGhvbmVOdW1iZXJUeXBlOiB7IGNvZGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwaG9uZU51bWJlclR5cGUnKT8udmFsdWUgfSxcbiAgICAgIHByb2dyYW06IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwcm9ncmFtJyk/LnZhbHVlLFxuICAgICAgcGhvbmVOdW1iZXI6IHtcbiAgICAgICAgcGhvbmVOdW1iZXI6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwaG9uZU51bWJlcicpPy52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gICAgbGV0IG9yZ2FuaXphdGlvbjogT0VQQU9yZ2FuaXphdGlvbiA9IHtcbiAgICAgIG5hbWU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdvcmdhbml6YXRpb25OYW1lJyk/LnZhbHVlLFxuICAgICAgb3JnYW5pemF0aW9uVHlwZTogeyBjb2RlOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnb3JnVHlwZScpPy52YWx1ZSB9LFxuICAgICAgYWRkcmVzc0xpc3Q6IFsgYWRkcmVzcyBdLFxuICAgICAgcGhvbmVOdW1iZXJMaXN0OiBbcGhvbmUgXVxuICAgIH07XG4gICAgcmV0dXJuIG9yZ2FuaXphdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlT3JnYW5pemF0aW9uQWZ0ZXJTZWFyY2goKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xuICAgIHRoaXMuYnVpbGRUYWJsZUhlYWRlcigpO1xuICAgIGxldCBmaWx0ZXIgPSB0aGlzLmdldEZpbHRlckZyb21Gb3JtKCk7XG4gICAgdGhpcy5pblByb2dyZXNzTXNnID0gJ0NoZWNraW5nIHRvIHNlZSBpZiBPcmdhbml6YXRpb24gZXhpc3RzLi4uJztcbiAgICB0aGlzLmVudGl0eVNlcnZpY2UubWF0Y2hPcmdhbml6YXRpb25zKGZpbHRlcikuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IG1hdGNoZXMgPT4ge1xuICAgICAgdGhpcy5pblByb2dyZXNzTXNnID0gJyc7XG4gICAgICBpZiAoIW1hdGNoZXMgfHwgbWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5zYXZlT3JnYW5pemF0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXRjaGVzLmZvckVhY2gob3JnYW5pemF0aW9uID0+IHtcbiAgICAgICAgICBsZXQgcm93ID0gdGhpcy5jb252ZXJ0T3JnYW5pemF0aW9uVG9UYWJsZVJvdyhvcmdhbml6YXRpb24pO1xuICAgICAgICAgIHRoaXMudGFibGVEYXRhLnB1c2gocm93KTtcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMudGFibGVEYXRhLnNsaWNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmluZm9NZXNzYWdlID0gJ1BsZWFzZSBjaGVjayB0aGUgdGFibGUgYWJvdmUgYW5kIHNlbGVjdCBhbiBvcmdhbml6YXRpb24gZnJvbSB0aGUgdGFibGUgaWYgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIE9yZ2FuaXphdGlvbiB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gY3JlYXRlLic7XG4gICAgICB9XG4gICAgfSwgZXJyb3I6IGVyciA9PiB7XG4gICAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnJztcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCBzZWFyY2hpbmcgZm9yIGV4aXN0aW5nIG9yZ2FuaXphdGlvbjogJyArIGVycjtcbiAgICB9fSk7XG4gIH1cblxucHJpdmF0ZSBidWlsZFRhYmxlSGVhZGVyKCl7XG4gICAgdGhpcy50YWJsZUhlYWRlciA9IHtcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICB7IHRpdGxlOiAnJywgaWQ6ICdzZWxlY3QnLCBzb3J0OiAnbm9uZScsIHNpbmdsZVNlbGVjdENvbHVtbjogdHJ1ZSwgY2xhc3NOYW1lOiAnc2VsZWN0LWNvbCcgfSxcbiAgICAgICAgICB7IHRpdGxlOiAnSUQnLCBpZDogJ2lkJywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyB0aXRsZTogJ1R5cGUnLCBpZDogJ3R5cGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSxcbiAgICAgICAgICB7IHRpdGxlOiAnTmFtZScsIGlkOiAnbmFtZScsIHNvcnQ6ICdub25lJywgZmlsdGVyYWJsZTogdHJ1ZSB9LFxuICAgICAgICAgIHsgdGl0bGU6ICdBZGRyZXNzJywgaWQ6ICdhZGRyZXNzJywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyB0aXRsZTogJ0NpdHknLCBpZDogJ2NpdHknLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSxcbiAgICAgICAgICBcbiAgICAgIF1cbiAgfTtcbiAgXG4gIGlmKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0gJ1VTQScpe1xuICAgIHRoaXMudGFibGVIZWFkZXIuY29sdW1ucy5wdXNoKHsgdGl0bGU6ICdTdGF0ZScsIGlkOiAnc3RhdGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnWmlwIENvZGUnLCBpZDogJ3ppcENvZGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnZm9yZWlnblN0YXRlJywgaWQ6ICdmb3JlaWduU3RhdGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnZm9yZWlnblppcCcsIGlkOiAnZm9yZWlnblppcCcsIHNvcnQ6ICdub25lJywgZmlsdGVyYWJsZTogdHJ1ZSB9KVxuICAgIHRoaXMudGFibGVIZWFkZXIuY29sdW1ucy5wdXNoKHsgdGl0bGU6ICdjb3VudHJ5JywgaWQ6ICdjb3VudHJ5Jywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0pO1xuICB9XG5cbiAgfVxuICAgIHByaXZhdGUgY29udmVydE9yZ2FuaXphdGlvblRvVGFibGVSb3cob3JnYW5pemF0aW9uOiBPRVBBT3JnYW5pemF0aW9uKTogT2VwYVRhYmxlUm93IHtcbiAgICBsZXQgY2VsbHM6QXJyYXk8YW55Pj1bXG4gICAgICAgIHsgaWQ6ICdpZCcsIHZhbHVlOiBvcmdhbml6YXRpb24uaWQgfSxcbiAgICAgICAgeyBpZDogJ3R5cGUnLCB2YWx1ZTogb3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvblR5cGUgPyBvcmdhbml6YXRpb24ub3JnYW5pemF0aW9uVHlwZS5uYW1lIDogJycgfSxcbiAgICAgICAgeyBpZDogJ25hbWUnLCB2YWx1ZTogb3JnYW5pemF0aW9uLm5hbWUgfSxcbiAgICAgICAgeyBpZDogJ2FkZHJlc3MnLCB2YWx1ZTogb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0ICYmIG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3M/LmFkZHJlc3NMaW5lMSAgOiAnJyB9LFxuICAgICAgICB7IGlkOiAnY2l0eScsIHZhbHVlOiBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3QgJiYgb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0Lmxlbmd0aCA+IDAgPyBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3RbMF0uYWRkcmVzcz8uY2l0eSAgOiAnJyB9XTtcbiAgICAgICAgaWYodGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSAnVVNBJyl7XG4gICAgICAgICAgY2VsbHMucHVzaCh7IGlkOiAnc3RhdGUnLCB2YWx1ZTogb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0ICYmIG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3M/LnN0YXRlICA6ICcnIH0pXG4gICAgICAgICAgY2VsbHMucHVzaCh7IGlkOiAnemlwQ29kZScsIHZhbHVlOiBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3QgJiYgb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0Lmxlbmd0aCA+IDAgPyBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3RbMF0uYWRkcmVzcz8uemlwICA6ICcnIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2VsbHMucHVzaCh7IGlkOiAnZm9yZWlnblN0YXRlJywgdmFsdWU6IG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdCAmJiBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5mb3JlaWduU3RhdGUgIDogJycgfSlcbiAgICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICdmb3JlaWduWmlwJywgdmFsdWU6IG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdCAmJiBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5mb3JlaWduWmlwICA6ICcnIH0pXG4gICAgICAgICAgY2VsbHMucHVzaCh7IGlkOiAnY291bnRyeScsIHZhbHVlOiBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3QgJiYgb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLmZvcm1TZXJ2aWNlLmdldENvdW50cnlOYW1lKG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5jb3VudHJ5IHx8ICcnKSAgOiAnJyB9KVxuICAgICAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2VsbHM6IGNlbGxzLFxuICAgICAgZGF0YVNvdXJjZTogb3JnYW5pemF0aW9uLFxuICAgICAgc2VsZWN0YWJsZTogdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzYXZlT3JnYW5pemF0aW9uKCkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5pblByb2dyZXNzTXNnID0gJ0NyZWF0aW5nIHJlY29yZCBmb3IgbmV3IG9yZ2FuaXphdGlvbi4uLic7XG4gICAgbGV0IG9yZ2FuaXphdGlvbiA9IHRoaXMuZ2V0T3JnYW5pemF0aW9uRnJvbUZvcm0oKTtcbiAgICAvL2NvbnNvbGUubG9nKFwib3JnYW5pemF0aW9uOlwiLEpTT04uc3RyaW5naWZ5KG9yZ2FuaXphdGlvbikpXG4gICAgdGhpcy5lbnRpdHlTZXJ2aWNlLmNyZWF0ZU9yZ2FuaXphdGlvbihvcmdhbml6YXRpb24pLnN1YnNjcmliZShvcmdhbml6YXRpb25JRCA9PiB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwib3JnYW5pemF0aW9uSUQ6XCIsSlNPTi5zdHJpbmdpZnkob3JnYW5pemF0aW9uSUQpKVxuICAgICAgaWYgKG9yZ2FuaXphdGlvbklEKSB7XG4gICAgICAgIHRoaXMuaW5Qcm9ncmVzc01zZyA9ICcnO1xuICAgICAgICBvcmdhbml6YXRpb24uaWQgPSBvcmdhbml6YXRpb25JRDtcbiAgICAgICAgdGhpcy5vbk9yZ2FuaXphdGlvbkNyZWF0ZWQuZW1pdChvcmdhbml6YXRpb24pO1xuICAgICAgfVxuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnJztcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCBjcmVhdGluZyBPcmdhbml6YXRpb246ICcgKyBlcnI7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dTZWxlY3QoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb24gPSBldmVudFswXS5kYXRhU291cmNlO1xuICB9XG5cbiAgcHVibGljIHNhdmVTZWxlY3RlZE9yZ2FuaXphdGlvbigpIHtcbiAgICB0aGlzLm9uT3JnYW5pemF0aW9uQ3JlYXRlZC5lbWl0KHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb24pO1xuICB9XG5cbiAgcHVibGljIGdldE1vZGFsRm9ybUdyb3VwKG5hbWU6IHN0cmluZykgOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzW25hbWVdIGFzIEZvcm1Hcm91cDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcyhuYW1lOiBzdHJpbmcpIDogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2lzLWludmFsaWQnIDogdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1tuYW1lXS5pbnZhbGlkXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RhbEZvcm1Hcm91cEhhc0Vycm9yKG5hbWU6IHN0cmluZywgZmllbGQ6IHN0cmluZykgOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1tuYW1lXS5oYXNFcnJvcihmaWVsZCk7XG4gIH1cbiAgXG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCIgaWQ9XCJvcmdhbml6YXRpb25DcmVhdGVNb2RhbFRpdGxlXCI+XG4gICAgPGgxIGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+Q3JlYXRlIE9yZ2FuaXphdGlvbjwvaDE+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgZmxvYXQtZW5kXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cImJzTW9kYWxSZWYuaGlkZSgpXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgPC9idXR0b24+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgYXJpYS1sYWJlbGxlZGJ5PVwib3JnYW5pemF0aW9uQ3JlYXRlTW9kYWxUaXRsZVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIW1vZGFsRm9ybUdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPkluaXRpYWxpemluZy4uLjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj48L3NwYW4+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGZvcm0gKm5nSWY9XCJtb2RhbEZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwibW9kYWxGb3JtR3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cIm9yZ1R5cGVTZWxlY3RcIj5Pcmdhbml6YXRpb24gVHlwZTwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3QgaWQ9XCJvcmdUeXBlU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwib3JnVHlwZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICBbbmdDbGFzc109XCJnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcygnb3JnVHlwZScpXCIgYXJpYS1kZXNjcmliZWRieT1cIm9yZ1R5cGVFcnJvclwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBvcmdhbml6YXRpb25UeXBlc1wiIFtuZ1ZhbHVlXT1cInQuY29kZVwiPnt7dC5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzbWFsbCBpZD1cIm9yZ1R5cGVFcnJvclwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcignb3JnVHlwZScsJ3JlcXVpcmVkJylcIj5Pcmdhbml6YXRpb24gVHlwZSBpcyByZXF1aXJlZDwvc21hbGw+XG5cbiAgICAgICAgPGxhYmVsIGZvcj1cInByb2dyYW1TZWxlY3RcIj5Qcm9ncmFtPC9sYWJlbD5cbiAgICAgICAgPHNlbGVjdCBpZD1cInByb2dyYW1TZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9ncmFtXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE1vZGFsRm9ybUdyb3VwSW52YWxpZENsYXNzKCdwcm9ncmFtJylcIiBhcmlhLWRlc2NyaWJlZGJ5PVwicHJvZ3JhbUVycm9yXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0IG9mIHByb2dyYW1zXCIgW25nVmFsdWVdPVwidFwiPnt7dC5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzbWFsbCBpZD1cInByb2dyYW1FcnJvclwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcigncHJvZ3JhbScsJ3JlcXVpcmVkJylcIj5Qcm9ncmFtIGlzIHJlcXVpcmVkPC9zbWFsbD5cblxuICAgICAgICA8bGFiZWwgZm9yPVwib3JnYW5pemF0aW9uTmFtZVwiPk9yZ2FuaXphdGlvbiBOYW1lPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJvcmdhbml6YXRpb25OYW1lXCIgaWQ9XCJvcmdhbml6YXRpb25OYW1lXCIgbWF4bGVuZ3RoPVwiNDBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE1vZGFsRm9ybUdyb3VwSW52YWxpZENsYXNzKCdvcmdhbml6YXRpb25OYW1lJylcIiBhcmlhLWRlc2NyaWJlZGJ5PVwib3JnYW5pemF0aW9uTmFtZUVycm9yXCI+XG4gICAgICAgIDxzbWFsbCBpZD1cIm9yZ2FuaXphdGlvbk5hbWVFcnJvclwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcignb3JnYW5pemF0aW9uTmFtZScsJ3JlcXVpcmVkJylcIj5Pcmdhbml6YXRpb24gaXMgcmVxdWlyZWQ8L3NtYWxsPlxuXG4gICAgICAgIDxsYWJlbCBmb3I9XCJQaG9uZUlucHV0XCI+UGhvbmUgTnVtYmVyPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbbmdDbGFzc109XCJnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcygncGhvbmVOdW1iZXInKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIih4eHgpIHh4eC14eHh4XCIgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVOdW1iZXJcIiBpZD1cIlBob25lSW5wdXRcIiBtYXNrPVwiKDAwMCkgMDAwLTAwMDBcIiBtaW5sZW5ndGg9XCIxMFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJwaG9uZU51bWJlckVycm9yIHBob25lTnVtYmVyTWlubGVuZ3RoRXJyb3JcIj5cbiAgICAgICAgPHNtYWxsIGlkPVwicGhvbmVOdW1iZXJFcnJvclwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcigncGhvbmVOdW1iZXInLCdyZXF1aXJlZCcpXCI+UGhvbmUgTnVtYmVyIGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgICAgPHNtYWxsIGlkPVwicGhvbmVOdW1iZXJNaW5sZW5ndGhFcnJvclwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcigncGhvbmVOdW1iZXInLCdtaW5sZW5ndGgnKVwiPlBsZWFzZSBlbnRlciBhIHZhbGlkIHBob25lIG51bWJlcjwvc21hbGw+XG4gICAgICAgICAgXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBob25lTnVtYmVyVHlwZVNlbGVjdFwiPlBob25lIE51bWJlciBUeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwicGhvbmVOdW1iZXJUeXBlU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVOdW1iZXJUeXBlXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE1vZGFsRm9ybUdyb3VwSW52YWxpZENsYXNzKCdwaG9uZU51bWJlclR5cGUnKVwiIGFyaWEtZGVzY3JpYmVkYnk9XCJwaG9uZU51bWJlclR5cGVFcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBwaG9uZU51bWJlclR5cGVzXCIgW25nVmFsdWVdPVwidC5jb2RlXCI+e3t0Lm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxzbWFsbCBpZD1cInBob25lTnVtYmVyVHlwZUVycm9yXCIgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRNb2RhbEZvcm1Hcm91cEhhc0Vycm9yKCdwaG9uZU51bWJlclR5cGUnLCdyZXF1aXJlZCcpXCI+UGhvbmUgTnVtYmVyIFR5cGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuXG4gICAgICAgIDxvZXBhLWFkZHJlc3MgW2dyb3VwXT1cImdldE1vZGFsRm9ybUdyb3VwKCdhZGRyZXNzJylcIiBbc2hvd1ZhbGlkYXRpb25dPVwidHJ1ZVwiIFtjaXR5TWF4TGVuZ3RoXSA9IFwiMjVcIj48L29lcGEtYWRkcmVzcz4gICBcblxuICAgICAgICA8bGFiZWwgZm9yPVwiYWRkcmVzc1R5cGVTZWxlY3RcIj5BZGRyZXNzIFR5cGU8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IGlkPVwiYWRkcmVzc1R5cGVTZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzVHlwZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBbbmdDbGFzc109XCJnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcygnYWRkcmVzc1R5cGUnKVwiIGFyaWEtZGVzY3JpYmVkYnk9XCJhZGRyZXNzVHlwZUVycm9yXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0IG9mIGFkZHJlc3NUeXBlc1wiIFtuZ1ZhbHVlXT1cInQuY29kZVwiPnt7dC5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzbWFsbCBpZD1cImFkZHJlc3NUeXBlRXJyb3JcIiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdldE1vZGFsRm9ybUdyb3VwSGFzRXJyb3IoJ2FkZHJlc3NUeXBlJywncmVxdWlyZWQnKVwiPkFkZHJlc3MgVHlwZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgIFxuICAgIDwvZm9ybT5cbiAgICA8ZGl2ICpuZ0lmPVwidGFibGVEYXRhICYmIHRhYmxlRGF0YS5sZW5ndGggPiAwXCIgY2xhc3M9XCJjYXJkXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgPGI+TWF0Y2hpbmcgT3JnYW5pemF0aW9uIExpc3QmbmJzcDs8L2I+PHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnlcIj57e3RhYmxlRGF0YS5sZW5ndGh9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgIDxvZXBhLXRhYmxlIHRhYmxlSWQ9XCJvcmdhbml6YXRpb25TZWFyY2hUYWJsZVwiIFtjb25maWddPVwidGFibGVDb25maWdcIiBbZGF0YV09XCJ0YWJsZURhdGFcIiBbaGVhZGVyXT1cInRhYmxlSGVhZGVyXCIgKHJvd1NlbGVjdGVkKT1cIm9uUm93U2VsZWN0KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvb2VwYS10YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZC1ibG9ja1wiPlxuICAgIDxkaXYgKm5nSWY9XCJpblByb2dyZXNzTXNnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XG4gICAgICAgICAgICB7e2luUHJvZ3Jlc3NNc2d9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiaW5mb01lc3NhZ2UgJiYgIWluUHJvZ3Jlc3NNc2dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cbiAgICAgICAgICAgIHt7aW5mb01lc3NhZ2V9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIj5cbiAgICAgICAgICAgIHt7ZXJyb3JNZXNzYWdlfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImluUHJvZ3Jlc3NNc2dcIj48c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj48L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIighdGFibGVEYXRhIHx8IHRhYmxlRGF0YS5sZW5ndGggPT09IDApICYmICFpblByb2dyZXNzTXNnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIlxuICAgICAgICAgICAgICAgIGlkPVwiU2F2ZU9yZ2FuaXphdGlvbkJ0blwiIFtkaXNhYmxlZF09XCIhbW9kYWxGb3JtR3JvdXAgfHwgbW9kYWxGb3JtR3JvdXAuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVPcmdhbml6YXRpb25BZnRlclNlYXJjaCgpXCIgYXJpYS1sYWJlbD1cIlNhdmUgbmV3IG9yZ2FuaXphdGlvblwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ0YWJsZURhdGEgJiYgdGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgIXNlbGVjdGVkT3JnYW5pemF0aW9uICYmICFpblByb2dyZXNzTXNnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIlxuICAgICAgICAgICAgICAgIGlkPVwiU2F2ZU9yZ2FuaXphdGlvbldpdGhvdXRTZWFyY2hCdG5cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtb2RhbEZvcm1Hcm91cC5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZU9yZ2FuaXphdGlvbigpXCIgYXJpYS1sYWJlbD1cIk5vIG1hdGNoLCBzYXZlIG5ldyBvcmdhbml6YXRpb25cIj5ObyBNYXRjaCwgU2F2ZSBOZXcgT3JnYW5pemF0aW9uPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwidGFibGVEYXRhICYmIHRhYmxlRGF0YS5sZW5ndGggPiAwICYmIHNlbGVjdGVkT3JnYW5pemF0aW9uICYmICFpblByb2dyZXNzTXNnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIlxuICAgICAgICAgICAgICAgIGlkPVwiU2F2ZVNlbGVjdGVkT3JnYW5pemF0aW9uQnRuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxGb3JtR3JvdXAuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVTZWxlY3RlZE9yZ2FuaXphdGlvbigpXCIgYXJpYS1sYWJlbD1cIlVzZSBzZWxlY3RlZCBvcmdhbml6YXRpb25cIj5Vc2UgU2VsZWN0ZWQgT3JnYW5pemF0aW9uPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiQ2FuY2VsT3JnYW5pemF0aW9uQnRuXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYnNNb2RhbFJlZi5oaWRlKClcIiBhcmlhLWxhYmVsPVwiQ2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLWNyZWF0ZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2VudGl0eS9vcmdhbml6YXRpb24tY3JlYXRlLW1vZGFsL29yZ2FuaXphdGlvbi1jcmVhdGUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9lbnRpdHkvb3JnYW5pemF0aW9uLWNyZWF0ZS1tb2RhbC9vcmdhbml6YXRpb24tY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxLQUFLLEVBQWMsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFlakQsTUFBTSxPQUFPLGdDQUFnQztJQXNCdkI7SUFBd0I7SUFDbEM7SUFDQTtJQXZCTCxjQUFjLENBQWE7SUFDekIsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLGFBQWEsR0FBVyxFQUFFLENBQUM7SUFDM0IsTUFBTSxDQUEwQjtJQUNoQyxpQkFBaUIsR0FBb0IsRUFBRSxDQUFDO0lBQ3hDLFFBQVEsR0FBa0IsRUFBRSxDQUFDO0lBQzdCLFlBQVksR0FBb0IsRUFBRSxDQUFDO0lBQ25DLGdCQUFnQixHQUFvQixFQUFFLENBQUM7SUFDdkMsb0JBQW9CLENBQStCO0lBRXJELFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQ2xDLFdBQVcs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LGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxnQ0FBZ0MsR0FBRyxHQUFHLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDbEQsQ0FBQztJQUVNLHdCQUF3QjtRQUM3QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFjLENBQUM7SUFDekQsQ0FBQztJQUVNLDZCQUE2QixDQUFDLElBQVk7UUFDL0MsT0FBTztZQUNMLFlBQVksRUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRU0seUJBQXlCLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDMUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQzt3R0E1U1UsZ0NBQWdDOzRGQUFoQyxnQ0FBZ0MsbUlDbkI3QywwcE5BZ0dNOzs0RkQ3RU8sZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLGdDQUFnQztvS0F3QmhDLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEVNUFRZLCBPYnNlcnZhYmxlLCBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT0VQQU9yZ2FuaXphdGlvbiwgT0VQQUFkZHJlc3MsIE9FUEFQaG9uZU51bWJlciwgT0VQQVByb2dyYW0gfSBmcm9tICdAb2hpb2VwYS9vZXBhLWViaXotbGliJztcbmltcG9ydCB7IEVudGl0eVNlcnZpY2UgfSBmcm9tICcuLi9lbnRpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBPRVBBT3JnYW5pemF0aW9uRmlsdGVyIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1lYml6LWxpYic7XG5pbXBvcnQgeyBPRVBBUmVmZXJlbmNlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IE9lcGFUYWJsZVJvdyB9IGZyb20gJy4uLy4uL3RhYmxlL29lcGEtdGFibGUtcm93JztcbmltcG9ydCB7IE9lcGFUYWJsZUhlYWRlciB9IGZyb20gJy4uLy4uL3RhYmxlL29lcGEtdGFibGUtaGVhZGVyJztcbmltcG9ydCB7IE9lcGFUYWJsZUNvbmZpZyB9IGZyb20gJy4uLy4uL3RhYmxlL29lcGEtdGFibGUtY29uZmlnJztcbmltcG9ydCB7IE9lcGFGb3Jtc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9vZXBhLWZvcm1zLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLW9yZ2FuaXphdGlvbi1jcmVhdGUtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vb3JnYW5pemF0aW9uLWNyZWF0ZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29yZ2FuaXphdGlvbi1jcmVhdGUtbW9kYWwuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvbkNyZWF0ZU1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbnB1YmxpYyBtb2RhbEZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcbiAgcHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpbmZvTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpblByb2dyZXNzTXNnOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGZpbHRlciE6IE9FUEFPcmdhbml6YXRpb25GaWx0ZXI7XG4gIHB1YmxpYyBvcmdhbml6YXRpb25UeXBlczogT0VQQVJlZmVyZW5jZVtdID0gW107XG4gIHB1YmxpYyBwcm9ncmFtczogT0VQQVByb2dyYW1bXSA9IFtdO1xuICBwdWJsaWMgYWRkcmVzc1R5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTtcbiAgcHVibGljIHBob25lTnVtYmVyVHlwZXM6IE9FUEFSZWZlcmVuY2VbXSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRPcmdhbml6YXRpb246IE9FUEFPcmdhbml6YXRpb24gfCB1bmRlZmluZWQ7XG5cbnB1YmxpYyB0YWJsZURhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgcHVibGljIHRhYmxlSGVhZGVyITogT2VwYVRhYmxlSGVhZGVyO1xuICBwdWJsaWMgdGFibGVDb25maWc6IE9lcGFUYWJsZUNvbmZpZyA9IHtcbiAgICByb3dzUGVyUGFnZTogNSxcbiAgICBjbGFzc05hbWVzOiBbJ3RhYmxlLXN0cmlwZWQnLCAndGFibGUtYm9yZGVyZWQnLCAndGFibGUtc20nXVxuICB9O1xuXG5cbiAgQE91dHB1dCgpIG9uT3JnYW5pemF0aW9uQ3JlYXRlZDogRXZlbnRFbWl0dGVyPE9FUEFPcmdhbml6YXRpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxPRVBBT3JnYW5pemF0aW9uPigpO1xuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsIHB1YmxpYyBic01vZGFsUmVmOiBCc01vZGFsUmVmLCBcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBPZXBhRm9ybXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW50aXR5U2VydmljZTogRW50aXR5U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5sb2FkUmVmZXJlbmNlRGF0YSgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByZXN1bHRzID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlRm9ybSgpOyAgICBcbiAgICB9LCBlcnJvcjogZXJyID0+IHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0FuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkOiAnICsgZXJyO1xuICAgIH19KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFJlZmVyZW5jZURhdGEoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBsZXQgdGFza3MgPSBbXTtcbiAgICB0YXNrcy5wdXNoKHRoaXMucmV0cmlldmVPcmdhbml6YXRpb25UeXBlcygpKTtcbiAgICB0YXNrcy5wdXNoKHRoaXMucmV0cmlldmVQcm9ncmFtcygpKTtcbiAgICB0YXNrcy5wdXNoKHRoaXMucmV0cmlldmVBZGRyZXNzVHlwZXMoKSk7XG4gICAgdGFza3MucHVzaCh0aGlzLnJldHJpZXZlUGhvbmVOdW1iZXJUeXBlcygpKTtcbiAgICByZXR1cm4gZm9ya0pvaW4odGFza3MpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyaWV2ZU9yZ2FuaXphdGlvblR5cGVzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5yZXRyaWV2ZU9yZ2FuaXphdGlvblR5cGVzKCkucGlwZShcbiAgICAgIG1hcCh0eXBlcyA9PiB7XG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblR5cGVzID0gW107XG4gICAgICBpZiAodHlwZXMgJiYgdHlwZXMubGVuZ3RoKSB7XG4gICAgICAgIHR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25UeXBlcy5wdXNoKHR5cGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm9yZ2FuaXphdGlvblR5cGVzLmxlbmd0aDtcbiAgICB9KSwgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyaWV2ZVByb2dyYW1zKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5yZXRyaWV2ZVByb2dyYW1zKCkucGlwZShcbiAgICAgIG1hcChwcm9ncmFtcyA9PiB7XG4gICAgICB0aGlzLnByb2dyYW1zID0gW107XG4gICAgICBpZiAocHJvZ3JhbXMgJiYgcHJvZ3JhbXMubGVuZ3RoKSB7XG4gICAgICAgIHByb2dyYW1zLmZvckVhY2gocHJvZ3JhbSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9ncmFtcy5wdXNoKHByb2dyYW0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnByb2dyYW1zLmxlbmd0aDtcbiAgICB9KSwgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRyaWV2ZUFkZHJlc3NUeXBlcygpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0eVNlcnZpY2UucmV0cmlldmVBZGRyZXNzVHlwZXMoKS5waXBlKFxuICAgICAgbWFwKHR5cGVzID0+IHtcbiAgICAgIHRoaXMuYWRkcmVzc1R5cGVzID0gW107XG4gICAgICBpZiAodHlwZXMgJiYgdHlwZXMubGVuZ3RoKSB7XG4gICAgICAgIHR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzVHlwZXMucHVzaCh0eXBlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hZGRyZXNzVHlwZXMubGVuZ3RoO1xuICAgIH0pLCBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdBbiBpbml0aWFsaXphdGlvbiBlcnJvciBvY2N1cnJlZDogJyArIGVycjtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlUGhvbmVOdW1iZXJUeXBlcygpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVudGl0eVNlcnZpY2UucmV0cmlldmVUZWxlcGhvbmVUeXBlcygpLnBpcGUoXG4gICAgICBtYXAodHlwZXMgPT4ge1xuICAgICAgdGhpcy5waG9uZU51bWJlclR5cGVzID0gW107XG4gICAgICBpZiAodHlwZXMgJiYgdHlwZXMubGVuZ3RoKSB7XG4gICAgICAgIHR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgICAgdGhpcy5waG9uZU51bWJlclR5cGVzLnB1c2godHlwZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGhvbmVOdW1iZXJUeXBlcy5sZW5ndGg7XG4gICAgfSksIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0FuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkOiAnICsgZXJyO1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH0pKTtcbiAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVGb3JtKCkge1xuICAgIHRoaXMubW9kYWxGb3JtR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG9yZ1R5cGU6IFsnUlZPUkcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcHJvZ3JhbTogW251bGwsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBvcmdhbml6YXRpb25OYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldXSxcbiAgICAgIGFkZHJlc3NUeXBlOiBbJ0JJTExJJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGFkZHJlc3M6IHRoaXMuZmIuZ3JvdXAodGhpcy5mb3JtU2VydmljZS5idWlsZEFkZHJlc3NGb3JtV2l0aENvdW50cnkoe30pKSxcbiAgICAgIGFyZWFDb2RlOiAnJyxcbiAgICAgIHBob25lTnVtYmVyVHlwZTogWydPRkZJQycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBwaG9uZU51bWJlcjogJycsXG4gICAgICBleHRlbnNpb246ICcnXG4gICAgfSk7XG4gICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnc3RhdGUnKT8uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoY291bnRyeT0+e1xuICAgICAgXG4gICAgICBpZihjb3VudHJ5ID09PSAnVVNBJyl7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3N0YXRlJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnc3RhdGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdwb3N0YWxDb2RlJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMucGF0dGVybignWzAtOV17NX0nKV0pO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdwb3N0YWxDb2RlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblN0YXRlJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduU3RhdGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduWmlwJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduWmlwJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ2ZvcmVpZ25aaXAnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduWmlwJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnc3RhdGUnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3N0YXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgncG9zdGFsQ29kZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgncG9zdGFsQ29kZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9XG4gICAgICBcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJGcm9tRm9ybSgpOiBPRVBBT3JnYW5pemF0aW9uRmlsdGVyIHtcbiAgICBsZXQgZmlsdGVyOiBPRVBBT3JnYW5pemF0aW9uRmlsdGVyID0ge1xuICAgICAgbmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ29yZ2FuaXphdGlvbk5hbWUnKT8udmFsdWUsXG4gICAgICBwaG9uZU51bWJlcjp0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgncGhvbmVOdW1iZXInKT8udmFsdWUsXG4gICAgICBhZGRyZXNzOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2xpbmUxJyk/LnZhbHVlLFxuICAgICAgY2l0eTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjaXR5Jyk/LnZhbHVlLFxuICAgICAgc3RhdGU6dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSAnVVNBJyA/IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnc3RhdGUnKT8udmFsdWU6bnVsbCxcbiAgICAgIHppcENvZGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0gJ1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ3Bvc3RhbENvZGUnKT8udmFsdWUgOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2ZvcmVpZ25aaXAnKT8udmFsdWUsXG4gICAgICBmb3JlaWduU3RhdGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSAhPT0gJ1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy52YWx1ZTpudWxsLFxuICAgICAgY291bnRyeTp0aGlzLmZvcm1TZXJ2aWNlLmdldENvdW50cnlDb2RlKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSksXG4gICAgfTtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmdhbml6YXRpb25Gcm9tRm9ybSgpOiBPRVBBT3JnYW5pemF0aW9uIHtcbiAgICBsZXQgYWRkcmVzczogT0VQQUFkZHJlc3MgPSB7XG4gICAgICBhZGRyZXNzVHlwZTogeyBjb2RlOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzc1R5cGUnKT8udmFsdWUgfSxcbiAgICAgIHByb2dyYW06IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwcm9ncmFtJyk/LnZhbHVlLFxuICAgICAgYWRkcmVzczoge1xuICAgICAgICB0eXBlOnRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSAhPT0nVVNBJz8gJ0ZPUkVOJzonJyAsXG4gICAgICAgIGFkZHJlc3NMaW5lMTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdsaW5lMScpPy52YWx1ZSxcbiAgICAgICAgYWRkcmVzc0xpbmUyOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2xpbmUyJyk/LnZhbHVlLFxuICAgICAgICBjaXR5OiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NpdHknKT8udmFsdWUsXG4gICAgICAgIHN0YXRlOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUgPT09ICdVU0EnID8gdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdzdGF0ZScpPy52YWx1ZTpudWxsLFxuICAgICAgICB6aXA6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0gJ1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ3Bvc3RhbENvZGUnKT8udmFsdWU6dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdmb3JlaWduWmlwJyk/LnZhbHVlLFxuICAgICAgICBmb3JlaWduU3RhdGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSAhPT0gJ1VTQSc/dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdmb3JlaWduU3RhdGUnKT8udmFsdWU6bnVsbCxcbiAgICAgICAgY291bnRyeTp0aGlzLmZvcm1TZXJ2aWNlLmdldENvdW50cnlDb2RlKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSksXG4gICAgICB9XG4gICAgfVxuICAgIGxldCBwaG9uZTogT0VQQVBob25lTnVtYmVyID0ge1xuICAgICAgcGhvbmVOdW1iZXJUeXBlOiB7IGNvZGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwaG9uZU51bWJlclR5cGUnKT8udmFsdWUgfSxcbiAgICAgIHByb2dyYW06IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwcm9ncmFtJyk/LnZhbHVlLFxuICAgICAgcGhvbmVOdW1iZXI6IHtcbiAgICAgICAgcGhvbmVOdW1iZXI6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwaG9uZU51bWJlcicpPy52YWx1ZVxuICAgICAgfVxuICAgIH07XG4gICAgbGV0IG9yZ2FuaXphdGlvbjogT0VQQU9yZ2FuaXphdGlvbiA9IHtcbiAgICAgIG5hbWU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdvcmdhbml6YXRpb25OYW1lJyk/LnZhbHVlLFxuICAgICAgb3JnYW5pemF0aW9uVHlwZTogeyBjb2RlOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnb3JnVHlwZScpPy52YWx1ZSB9LFxuICAgICAgYWRkcmVzc0xpc3Q6IFsgYWRkcmVzcyBdLFxuICAgICAgcGhvbmVOdW1iZXJMaXN0OiBbcGhvbmUgXVxuICAgIH07XG4gICAgcmV0dXJuIG9yZ2FuaXphdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlT3JnYW5pemF0aW9uQWZ0ZXJTZWFyY2goKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnRhYmxlRGF0YSA9IFtdO1xuICAgIHRoaXMuYnVpbGRUYWJsZUhlYWRlcigpO1xuICAgIGxldCBmaWx0ZXIgPSB0aGlzLmdldEZpbHRlckZyb21Gb3JtKCk7XG4gICAgdGhpcy5pblByb2dyZXNzTXNnID0gJ0NoZWNraW5nIHRvIHNlZSBpZiBPcmdhbml6YXRpb24gZXhpc3RzLi4uJztcbiAgICB0aGlzLmVudGl0eVNlcnZpY2UubWF0Y2hPcmdhbml6YXRpb25zKGZpbHRlcikuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IG1hdGNoZXMgPT4ge1xuICAgICAgdGhpcy5pblByb2dyZXNzTXNnID0gJyc7XG4gICAgICBpZiAoIW1hdGNoZXMgfHwgbWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5zYXZlT3JnYW5pemF0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXRjaGVzLmZvckVhY2gob3JnYW5pemF0aW9uID0+IHtcbiAgICAgICAgICBsZXQgcm93ID0gdGhpcy5jb252ZXJ0T3JnYW5pemF0aW9uVG9UYWJsZVJvdyhvcmdhbml6YXRpb24pO1xuICAgICAgICAgIHRoaXMudGFibGVEYXRhLnB1c2gocm93KTtcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMudGFibGVEYXRhLnNsaWNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmluZm9NZXNzYWdlID0gJ1BsZWFzZSBjaGVjayB0aGUgdGFibGUgYWJvdmUgYW5kIHNlbGVjdCBhbiBvcmdhbml6YXRpb24gZnJvbSB0aGUgdGFibGUgaWYgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIE9yZ2FuaXphdGlvbiB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gY3JlYXRlLic7XG4gICAgICB9XG4gICAgfSwgZXJyb3I6IGVyciA9PiB7XG4gICAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnJztcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCBzZWFyY2hpbmcgZm9yIGV4aXN0aW5nIG9yZ2FuaXphdGlvbjogJyArIGVycjtcbiAgICB9fSk7XG4gIH1cblxucHJpdmF0ZSBidWlsZFRhYmxlSGVhZGVyKCl7XG4gICAgdGhpcy50YWJsZUhlYWRlciA9IHtcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICB7IHRpdGxlOiAnJywgaWQ6ICdzZWxlY3QnLCBzb3J0OiAnbm9uZScsIHNpbmdsZVNlbGVjdENvbHVtbjogdHJ1ZSwgY2xhc3NOYW1lOiAnc2VsZWN0LWNvbCcgfSxcbiAgICAgICAgICB7IHRpdGxlOiAnSUQnLCBpZDogJ2lkJywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyB0aXRsZTogJ1R5cGUnLCBpZDogJ3R5cGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSxcbiAgICAgICAgICB7IHRpdGxlOiAnTmFtZScsIGlkOiAnbmFtZScsIHNvcnQ6ICdub25lJywgZmlsdGVyYWJsZTogdHJ1ZSB9LFxuICAgICAgICAgIHsgdGl0bGU6ICdBZGRyZXNzJywgaWQ6ICdhZGRyZXNzJywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyB0aXRsZTogJ0NpdHknLCBpZDogJ2NpdHknLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSxcbiAgICAgICAgICBcbiAgICAgIF1cbiAgfTtcbiAgXG4gIGlmKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0gJ1VTQScpe1xuICAgIHRoaXMudGFibGVIZWFkZXIuY29sdW1ucy5wdXNoKHsgdGl0bGU6ICdTdGF0ZScsIGlkOiAnc3RhdGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnWmlwIENvZGUnLCBpZDogJ3ppcENvZGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnZm9yZWlnblN0YXRlJywgaWQ6ICdmb3JlaWduU3RhdGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnZm9yZWlnblppcCcsIGlkOiAnZm9yZWlnblppcCcsIHNvcnQ6ICdub25lJywgZmlsdGVyYWJsZTogdHJ1ZSB9KVxuICAgIHRoaXMudGFibGVIZWFkZXIuY29sdW1ucy5wdXNoKHsgdGl0bGU6ICdjb3VudHJ5JywgaWQ6ICdjb3VudHJ5Jywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0pO1xuICB9XG5cbiAgfVxuICAgIHByaXZhdGUgY29udmVydE9yZ2FuaXphdGlvblRvVGFibGVSb3cob3JnYW5pemF0aW9uOiBPRVBBT3JnYW5pemF0aW9uKTogT2VwYVRhYmxlUm93IHtcbiAgICBsZXQgY2VsbHM6QXJyYXk8YW55Pj1bXG4gICAgICAgIHsgaWQ6ICdpZCcsIHZhbHVlOiBvcmdhbml6YXRpb24uaWQgfSxcbiAgICAgICAgeyBpZDogJ3R5cGUnLCB2YWx1ZTogb3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvblR5cGUgPyBvcmdhbml6YXRpb24ub3JnYW5pemF0aW9uVHlwZS5uYW1lIDogJycgfSxcbiAgICAgICAgeyBpZDogJ25hbWUnLCB2YWx1ZTogb3JnYW5pemF0aW9uLm5hbWUgfSxcbiAgICAgICAgeyBpZDogJ2FkZHJlc3MnLCB2YWx1ZTogb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0ICYmIG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3M/LmFkZHJlc3NMaW5lMSAgOiAnJyB9LFxuICAgICAgICB7IGlkOiAnY2l0eScsIHZhbHVlOiBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3QgJiYgb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0Lmxlbmd0aCA+IDAgPyBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3RbMF0uYWRkcmVzcz8uY2l0eSAgOiAnJyB9XTtcbiAgICAgICAgaWYodGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSAnVVNBJyl7XG4gICAgICAgICAgY2VsbHMucHVzaCh7IGlkOiAnc3RhdGUnLCB2YWx1ZTogb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0ICYmIG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3M/LnN0YXRlICA6ICcnIH0pXG4gICAgICAgICAgY2VsbHMucHVzaCh7IGlkOiAnemlwQ29kZScsIHZhbHVlOiBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3QgJiYgb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0Lmxlbmd0aCA+IDAgPyBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3RbMF0uYWRkcmVzcz8uemlwICA6ICcnIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2VsbHMucHVzaCh7IGlkOiAnZm9yZWlnblN0YXRlJywgdmFsdWU6IG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdCAmJiBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5mb3JlaWduU3RhdGUgIDogJycgfSlcbiAgICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICdmb3JlaWduWmlwJywgdmFsdWU6IG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdCAmJiBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5mb3JlaWduWmlwICA6ICcnIH0pXG4gICAgICAgICAgY2VsbHMucHVzaCh7IGlkOiAnY291bnRyeScsIHZhbHVlOiBvcmdhbml6YXRpb24uYWRkcmVzc0xpc3QgJiYgb3JnYW5pemF0aW9uLmFkZHJlc3NMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLmZvcm1TZXJ2aWNlLmdldENvdW50cnlOYW1lKG9yZ2FuaXphdGlvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5jb3VudHJ5IHx8ICcnKSAgOiAnJyB9KVxuICAgICAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2VsbHM6IGNlbGxzLFxuICAgICAgZGF0YVNvdXJjZTogb3JnYW5pemF0aW9uLFxuICAgICAgc2VsZWN0YWJsZTogdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzYXZlT3JnYW5pemF0aW9uKCkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5pblByb2dyZXNzTXNnID0gJ0NyZWF0aW5nIHJlY29yZCBmb3IgbmV3IG9yZ2FuaXphdGlvbi4uLic7XG4gICAgbGV0IG9yZ2FuaXphdGlvbiA9IHRoaXMuZ2V0T3JnYW5pemF0aW9uRnJvbUZvcm0oKTtcbiAgICAvL2NvbnNvbGUubG9nKFwib3JnYW5pemF0aW9uOlwiLEpTT04uc3RyaW5naWZ5KG9yZ2FuaXphdGlvbikpXG4gICAgdGhpcy5lbnRpdHlTZXJ2aWNlLmNyZWF0ZU9yZ2FuaXphdGlvbihvcmdhbml6YXRpb24pLnN1YnNjcmliZShvcmdhbml6YXRpb25JRCA9PiB7XG4gICAgICAvL2NvbnNvbGUubG9nKFwib3JnYW5pemF0aW9uSUQ6XCIsSlNPTi5zdHJpbmdpZnkob3JnYW5pemF0aW9uSUQpKVxuICAgICAgaWYgKG9yZ2FuaXphdGlvbklEKSB7XG4gICAgICAgIHRoaXMuaW5Qcm9ncmVzc01zZyA9ICcnO1xuICAgICAgICBvcmdhbml6YXRpb24uaWQgPSBvcmdhbml6YXRpb25JRDtcbiAgICAgICAgdGhpcy5vbk9yZ2FuaXphdGlvbkNyZWF0ZWQuZW1pdChvcmdhbml6YXRpb24pO1xuICAgICAgfVxuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnJztcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCBjcmVhdGluZyBPcmdhbml6YXRpb246ICcgKyBlcnI7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25Sb3dTZWxlY3QoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb24gPSBldmVudFswXS5kYXRhU291cmNlO1xuICB9XG5cbiAgcHVibGljIHNhdmVTZWxlY3RlZE9yZ2FuaXphdGlvbigpIHtcbiAgICB0aGlzLm9uT3JnYW5pemF0aW9uQ3JlYXRlZC5lbWl0KHRoaXMuc2VsZWN0ZWRPcmdhbml6YXRpb24pO1xuICB9XG5cbiAgcHVibGljIGdldE1vZGFsRm9ybUdyb3VwKG5hbWU6IHN0cmluZykgOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzW25hbWVdIGFzIEZvcm1Hcm91cDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcyhuYW1lOiBzdHJpbmcpIDogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2lzLWludmFsaWQnIDogdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1tuYW1lXS5pbnZhbGlkXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNb2RhbEZvcm1Hcm91cEhhc0Vycm9yKG5hbWU6IHN0cmluZywgZmllbGQ6IHN0cmluZykgOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1tuYW1lXS5oYXNFcnJvcihmaWVsZCk7XG4gIH1cbiAgXG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGgxIGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCIgaWQ9XCJvcmdhbml6YXRpb25DcmVhdGVNb2RhbFRpdGxlXCI+Q3JlYXRlIE9yZ2FuaXphdGlvbjwvaDE+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgZmxvYXQtZW5kXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cImJzTW9kYWxSZWYuaGlkZSgpXCIgdGFiaW5kZXg9XCIwXCI+XG4gICAgPC9idXR0b24+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgYXJpYS1sYWJlbGxlZGJ5PVwib3JnYW5pemF0aW9uQ3JlYXRlTW9kYWxUaXRsZVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIW1vZGFsRm9ybUdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPkluaXRpYWxpemluZy4uLjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj48c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj48L3NwYW4+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGZvcm0gKm5nSWY9XCJtb2RhbEZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwibW9kYWxGb3JtR3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cIm9yZ1R5cGVTZWxlY3RcIj5Pcmdhbml6YXRpb24gVHlwZTwvbGFiZWw+XG4gICAgICAgIDxzZWxlY3QgaWQ9XCJvcmdUeXBlU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwib3JnVHlwZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICBbbmdDbGFzc109XCJnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcygnb3JnVHlwZScpXCIgYXJpYS1kZXNjcmliZWRieT1cIm9yZ1R5cGVFcnJvclwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBvcmdhbml6YXRpb25UeXBlc1wiIFtuZ1ZhbHVlXT1cInQuY29kZVwiPnt7dC5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzbWFsbCBpZD1cIm9yZ1R5cGVFcnJvclwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcignb3JnVHlwZScsJ3JlcXVpcmVkJylcIj5Pcmdhbml6YXRpb24gVHlwZSBpcyByZXF1aXJlZDwvc21hbGw+XG5cbiAgICAgICAgPGxhYmVsIGZvcj1cInByb2dyYW1TZWxlY3RcIj5Qcm9ncmFtPC9sYWJlbD5cbiAgICAgICAgPHNlbGVjdCBpZD1cInByb2dyYW1TZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9ncmFtXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE1vZGFsRm9ybUdyb3VwSW52YWxpZENsYXNzKCdwcm9ncmFtJylcIiBhcmlhLWRlc2NyaWJlZGJ5PVwicHJvZ3JhbUVycm9yXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0IG9mIHByb2dyYW1zXCIgW25nVmFsdWVdPVwidFwiPnt7dC5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzbWFsbCBpZD1cInByb2dyYW1FcnJvclwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcigncHJvZ3JhbScsJ3JlcXVpcmVkJylcIj5Qcm9ncmFtIGlzIHJlcXVpcmVkPC9zbWFsbD5cblxuICAgICAgICA8bGFiZWwgZm9yPVwib3JnYW5pemF0aW9uTmFtZVwiPk9yZ2FuaXphdGlvbiBOYW1lPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJvcmdhbml6YXRpb25OYW1lXCIgaWQ9XCJvcmdhbml6YXRpb25OYW1lXCIgbWF4bGVuZ3RoPVwiNDBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE1vZGFsRm9ybUdyb3VwSW52YWxpZENsYXNzKCdvcmdhbml6YXRpb25OYW1lJylcIiBhcmlhLWRlc2NyaWJlZGJ5PVwib3JnYW5pemF0aW9uTmFtZUVycm9yXCI+XG4gICAgICAgIDxzbWFsbCBpZD1cIm9yZ2FuaXphdGlvbk5hbWVFcnJvclwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcignb3JnYW5pemF0aW9uTmFtZScsJ3JlcXVpcmVkJylcIj5Pcmdhbml6YXRpb24gaXMgcmVxdWlyZWQ8L3NtYWxsPlxuXG4gICAgICAgIDxsYWJlbCBmb3I9XCJQaG9uZUlucHV0XCI+UGhvbmUgTnVtYmVyPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbbmdDbGFzc109XCJnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcygncGhvbmVOdW1iZXInKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIih4eHgpIHh4eC14eHh4XCIgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVOdW1iZXJcIiBpZD1cIlBob25lSW5wdXRcIiBtYXNrPVwiKDAwMCkgMDAwLTAwMDBcIiBtaW5sZW5ndGg9XCIxMFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJwaG9uZU51bWJlckVycm9yIHBob25lTnVtYmVyTWlubGVuZ3RoRXJyb3JcIj5cbiAgICAgICAgPHNtYWxsIGlkPVwicGhvbmVOdW1iZXJFcnJvclwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcigncGhvbmVOdW1iZXInLCdyZXF1aXJlZCcpXCI+UGhvbmUgTnVtYmVyIGlzIHJlcXVpcmVkPC9zbWFsbD5cbiAgICAgICAgPHNtYWxsIGlkPVwicGhvbmVOdW1iZXJNaW5sZW5ndGhFcnJvclwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcigncGhvbmVOdW1iZXInLCdtaW5sZW5ndGgnKVwiPlBsZWFzZSBlbnRlciBhIHZhbGlkIHBob25lIG51bWJlcjwvc21hbGw+XG4gICAgICAgICAgXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBob25lTnVtYmVyVHlwZVNlbGVjdFwiPlBob25lIE51bWJlciBUeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwicGhvbmVOdW1iZXJUeXBlU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicGhvbmVOdW1iZXJUeXBlXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE1vZGFsRm9ybUdyb3VwSW52YWxpZENsYXNzKCdwaG9uZU51bWJlclR5cGUnKVwiIGFyaWEtZGVzY3JpYmVkYnk9XCJwaG9uZU51bWJlclR5cGVFcnJvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBwaG9uZU51bWJlclR5cGVzXCIgW25nVmFsdWVdPVwidC5jb2RlXCI+e3t0Lm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxzbWFsbCBpZD1cInBob25lTnVtYmVyVHlwZUVycm9yXCIgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRNb2RhbEZvcm1Hcm91cEhhc0Vycm9yKCdwaG9uZU51bWJlclR5cGUnLCdyZXF1aXJlZCcpXCI+UGhvbmUgTnVtYmVyIFR5cGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuXG4gICAgICAgIDxvZXBhLWFkZHJlc3MgW2dyb3VwXT1cImdldE1vZGFsRm9ybUdyb3VwKCdhZGRyZXNzJylcIiBbc2hvd1ZhbGlkYXRpb25dPVwidHJ1ZVwiIFtjaXR5TWF4TGVuZ3RoXSA9IFwiMjVcIj48L29lcGEtYWRkcmVzcz4gICBcblxuICAgICAgICA8bGFiZWwgZm9yPVwiYWRkcmVzc1R5cGVTZWxlY3RcIj5BZGRyZXNzIFR5cGU8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IGlkPVwiYWRkcmVzc1R5cGVTZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzVHlwZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBbbmdDbGFzc109XCJnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcygnYWRkcmVzc1R5cGUnKVwiIGFyaWEtZGVzY3JpYmVkYnk9XCJhZGRyZXNzVHlwZUVycm9yXCI+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0IG9mIGFkZHJlc3NUeXBlc1wiIFtuZ1ZhbHVlXT1cInQuY29kZVwiPnt7dC5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzbWFsbCBpZD1cImFkZHJlc3NUeXBlRXJyb3JcIiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdldE1vZGFsRm9ybUdyb3VwSGFzRXJyb3IoJ2FkZHJlc3NUeXBlJywncmVxdWlyZWQnKVwiPkFkZHJlc3MgVHlwZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgIFxuICAgIDwvZm9ybT5cbiAgICA8ZGl2ICpuZ0lmPVwidGFibGVEYXRhICYmIHRhYmxlRGF0YS5sZW5ndGggPiAwXCIgY2xhc3M9XCJjYXJkXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgPGI+TWF0Y2hpbmcgT3JnYW5pemF0aW9uIExpc3QmbmJzcDs8L2I+PHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnlcIj57e3RhYmxlRGF0YS5sZW5ndGh9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgIDxvZXBhLXRhYmxlIHRhYmxlSWQ9XCJvcmdhbml6YXRpb25TZWFyY2hUYWJsZVwiIFtjb25maWddPVwidGFibGVDb25maWdcIiBbZGF0YV09XCJ0YWJsZURhdGFcIiBbaGVhZGVyXT1cInRhYmxlSGVhZGVyXCIgKHJvd1NlbGVjdGVkKT1cIm9uUm93U2VsZWN0KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvb2VwYS10YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZC1ibG9ja1wiPlxuICAgIDxkaXYgKm5nSWY9XCJpblByb2dyZXNzTXNnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvXCI+XG4gICAgICAgICAgICB7e2luUHJvZ3Jlc3NNc2d9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiaW5mb01lc3NhZ2UgJiYgIWluUHJvZ3Jlc3NNc2dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cbiAgICAgICAgICAgIHt7aW5mb01lc3NhZ2V9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIj5cbiAgICAgICAgICAgIHt7ZXJyb3JNZXNzYWdlfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImluUHJvZ3Jlc3NNc2dcIj48c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj48L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIighdGFibGVEYXRhIHx8IHRhYmxlRGF0YS5sZW5ndGggPT09IDApICYmICFpblByb2dyZXNzTXNnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIlxuICAgICAgICAgICAgICAgIGlkPVwiU2F2ZU9yZ2FuaXphdGlvbkJ0blwiIFtkaXNhYmxlZF09XCIhbW9kYWxGb3JtR3JvdXAgfHwgbW9kYWxGb3JtR3JvdXAuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVPcmdhbml6YXRpb25BZnRlclNlYXJjaCgpXCIgYXJpYS1sYWJlbD1cIlNhdmUgbmV3IG9yZ2FuaXphdGlvblwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ0YWJsZURhdGEgJiYgdGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgIXNlbGVjdGVkT3JnYW5pemF0aW9uICYmICFpblByb2dyZXNzTXNnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIlxuICAgICAgICAgICAgICAgIGlkPVwiU2F2ZU9yZ2FuaXphdGlvbldpdGhvdXRTZWFyY2hCdG5cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtb2RhbEZvcm1Hcm91cC5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZU9yZ2FuaXphdGlvbigpXCIgYXJpYS1sYWJlbD1cIk5vIG1hdGNoLCBzYXZlIG5ldyBvcmdhbml6YXRpb25cIj5ObyBNYXRjaCwgU2F2ZSBOZXcgT3JnYW5pemF0aW9uPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwidGFibGVEYXRhICYmIHRhYmxlRGF0YS5sZW5ndGggPiAwICYmIHNlbGVjdGVkT3JnYW5pemF0aW9uICYmICFpblByb2dyZXNzTXNnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIlxuICAgICAgICAgICAgICAgIGlkPVwiU2F2ZVNlbGVjdGVkT3JnYW5pemF0aW9uQnRuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibW9kYWxGb3JtR3JvdXAuaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVTZWxlY3RlZE9yZ2FuaXphdGlvbigpXCIgYXJpYS1sYWJlbD1cIlVzZSBzZWxlY3RlZCBvcmdhbml6YXRpb25cIj5Vc2UgU2VsZWN0ZWQgT3JnYW5pemF0aW9uPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiQ2FuY2VsT3JnYW5pemF0aW9uQnRuXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYnNNb2RhbFJlZi5oaWRlKClcIiBhcmlhLWxhYmVsPVwiQ2FuY2VsXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
@@ -89,7 +89,7 @@ export class OrganizationSearchInputComponent {
89
89
  }));
90
90
  }
91
91
  advancedSearch() {
92
- let modal = this.modalService.show(OrganizationSearchModalComponent, { class: 'modal-xl', ignoreBackdropClick: true });
92
+ let modal = this.modalService.show(OrganizationSearchModalComponent, { ariaLabelledBy: 'organizationSearchModalTitle', class: 'modal-xl', ignoreBackdropClick: true });
93
93
  modal.content.onOrganizationSelected.subscribe(organization => {
94
94
  this.loadOrganizationInForm(organization);
95
95
  this.organizationSelected.emit(organization);
@@ -124,4 +124,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
124
124
  type: Output,
125
125
  args: ['organizationSelected']
126
126
  }] } });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLXNlYXJjaC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2VudGl0eS9vcmdhbml6YXRpb24tc2VhcmNoLWlucHV0L29yZ2FuaXphdGlvbi1zZWFyY2gtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9lbnRpdHkvb3JnYW5pemF0aW9uLXNlYXJjaC1pbnB1dC9vcmdhbml6YXRpb24tc2VhcmNoLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNM0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sa0VBQWtFLENBQUM7Ozs7Ozs7O0FBT3BILE1BQU0sT0FBTyxnQ0FBZ0M7SUFnQnZCO0lBQ1Y7SUFDQTtJQWpCVixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFVBQVUsQ0FBaUM7SUFDM0MsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFWCxLQUFLLENBQWE7SUFDVCxjQUFjLEdBQVcsRUFBRSxDQUFDO0lBQ3JDLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsS0FBSyxHQUFXLGNBQWMsQ0FBQztJQUNoQixvQkFBb0IsR0FBRyxFQUFFLENBQUM7SUFDckMsU0FBUyxHQUFHLEtBQUssQ0FBQztJ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QUFDLEVBQUU7WUFDaEcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0MsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTNGVSxnQ0FBZ0M7NEZBQWhDLGdDQUFnQyxxU0NqQjdDLDQ2REF3Qk07OzRGRFBPLGdDQUFnQztrQkFMNUMsU0FBUzsrQkFDRSxnQ0FBZ0M7b0pBVzFCLEtBQUs7c0JBQXBCLEtBQUs7dUJBQUMsT0FBTztnQkFDVyxjQUFjO3NCQUF0QyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFDUCxLQUFLO3NCQUFwQixLQUFLO3VCQUFDLE9BQU87Z0JBQ0UsS0FBSztzQkFBcEIsS0FBSzt1QkFBQyxPQUFPO2dCQUNpQixvQkFBb0I7c0JBQWxELEtBQUs7dUJBQUMsc0JBQXNCO2dCQUNULFNBQVM7c0JBQTVCLEtBQUs7dUJBQUMsV0FBVztnQkFFYyxvQkFBb0I7c0JBQW5ELE1BQU07dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHlwZWFoZWFkTWF0Y2ggfSBmcm9tICduZ3gtYm9vdHN0cmFwL3R5cGVhaGVhZCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVyZ2VNYXAsIG1hcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IEVudGl0eVNlcnZpY2UgfSBmcm9tICcuLi9lbnRpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBPRVBBT3JnYW5pemF0aW9uIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1lYml6LWxpYic7XG5pbXBvcnQgeyBPRVBBT3JnYW5pemF0aW9uRmlsdGVyIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1lYml6LWxpYic7XG5pbXBvcnQgeyBPcmdhbml6YXRpb25TZWFyY2hNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL29yZ2FuaXphdGlvbi1zZWFyY2gtbW9kYWwvb3JnYW5pemF0aW9uLXNlYXJjaC1tb2RhbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLW9yZ2FuaXphdGlvbi1zZWFyY2gtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vb3JnYW5pemF0aW9uLXNlYXJjaC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29yZ2FuaXphdGlvbi1zZWFyY2gtaW5wdXQuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvblNlYXJjaElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgbmFtZVNlYXJjaCA9ICcnO1xuICBuYW1lU291cmNlOiBPYnNlcnZhYmxlPE9FUEFPcmdhbml6YXRpb25bXT47XG4gIGNvbXBvbmVudElkOiBzdHJpbmcgPSAnJztcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgc2VhcmNoaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCdncm91cCcpIGdyb3VwITogRm9ybUdyb3VwO1xuICBASW5wdXQoJ29yZ2FuaXphdGlvbklEJykgb3JnYW5pemF0aW9uSUQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoJ2ZpZWxkJykgZmllbGQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoJ3RpdGxlJykgdGl0bGU6IHN0cmluZyA9ICdPcmdhbml6YXRpb24nO1xuICBASW5wdXQoJ2Vycm9yTWVzc2FnZUFkZGVuZHVtJykgZXJyb3JNZXNzYWdlQWRkZW5kdW0gPSAnJztcbiAgQElucHV0KCdyb3dMYXlvdXQnKSByb3dMYXlvdXQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCdvcmdhbml6YXRpb25TZWxlY3RlZCcpIG9yZ2FuaXphdGlvblNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8T0VQQU9yZ2FuaXphdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPE9FUEFPcmdhbml6YXRpb24+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpZFNlcnZpY2U6IE9lcGFDb21wb25lbnRJZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW50aXR5U2VydmljZTogRW50aXR5U2VydmljZSkge1xuICAgICAgdGhpcy5uYW1lU291cmNlID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQodGhpcy5ncm91cC5nZXQodGhpcy5maWVsZCk/LnZhbHVlKTtcbiAgICAgIH0pLnBpcGUobWVyZ2VNYXAoKHRva2VuOiBhbnkpID0+IHRoaXMuc2VhcmNoT3JnYW5pemF0aW9ucyh0b2tlbikpKTtcbiAgICAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29tcG9uZW50SWQgPSB0aGlzLmlkU2VydmljZS5nZXRDb21wb25lbnRJZCh0aGlzLmdyb3VwKTtcbiAgICBpZiAodGhpcy5vcmdhbml6YXRpb25JRCkge1xuICAgICAgY29uc3QgZmlsdGVyOiBPRVBBT3JnYW5pemF0aW9uRmlsdGVyID0ge1xuICAgICAgICBpZDogdGhpcy5vcmdhbml6YXRpb25JRFxuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5lbnRpdHlTZXJ2aWNlLnNlYXJjaE9yZ2FuaXphdGlvbnMoZmlsdGVyKS5zdWJzY3JpYmUob3JnYW5pemF0aW9uTGlzdCA9PiB7XG4gICAgICAgIGlmIChvcmdhbml6YXRpb25MaXN0ICYmIG9yZ2FuaXphdGlvbkxpc3QubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICB0aGlzLmxvYWRPcmdhbml6YXRpb25JbkZvcm0ob3JnYW5pemF0aW9uTGlzdFswXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6IFplcm8gb3IgbXVsdGlwbGUgb3JnYW5pemF0aW9ucyB3aWggaWQ6ICcgKyB0aGlzLm9yZ2FuaXphdGlvbklEO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICB9LCBlcnIgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdBbiBpbml0aWFsaXphdGlvbiBlcnJvciBvY2N1cnJlZDogJyArIGVycjtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmdyb3VwLmdldCh0aGlzLmZpZWxkKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlbGVjdGVkLmVtaXQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbk9yZ2FuaXphdGlvblNlbGVjdChlOiBUeXBlYWhlYWRNYXRjaCkge1xuICAgIGlmIChlLml0ZW0pIHtcbiAgICAgIHRoaXMubG9hZE9yZ2FuaXphdGlvbkluRm9ybShlLml0ZW0pO1xuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZWxlY3RlZC5lbWl0KGUuaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3JnYW5pemF0aW9uSW5Gb3JtKG9yZ2FuaXphdGlvbjogT0VQQU9yZ2FuaXphdGlvbikge1xuICAgIGxldCBkYXRhOiBhbnkgPSB7fTtcbiAgICBkYXRhW3RoaXMuZmllbGRdID0gb3JnYW5pemF0aW9uLm5hbWUgPyAob3JnYW5pemF0aW9uLm5hbWUgKyAnICgnICsgb3JnYW5pemF0aW9uLmlkICsgJyknKSA6ICcnO1xuICAgIGlmIChvcmdhbml6YXRpb24pIHtcbiAgICAgIHRoaXMuZ3JvdXAucGF0Y2hWYWx1ZShkYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaE9yZ2FuaXphdGlvbnModG9rZW46IGFueSk6IE9ic2VydmFibGU8T0VQQU9yZ2FuaXphdGlvbltdPiB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgY29uc3QgZmlsdGVyOiBPRVBBT3JnYW5pemF0aW9uRmlsdGVyID0ge1xuICAgICAgbmFtZTogaXNOYU4odG9rZW4pID8gdG9rZW4gOiB1bmRlZmluZWQsXG4gICAgICBpZDogaXNOYU4odG9rZW4pID8gdW5kZWZpbmVkIDogdG9rZW5cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5zZWFyY2hPcmdhbml6YXRpb25zKGZpbHRlcikucGlwZShcbiAgICAgIG1hcCgob3JnYW5pemF0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gb3JnYW5pemF0aW9ucztcbiAgICAgIH0pLCBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ1NlYXJjaCBmYWlsZWQ6ICcgKyBlcnI7XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZHZhbmNlZFNlYXJjaCgpIHtcbiAgICBsZXQgbW9kYWwgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KE9yZ2FuaXphdGlvblNlYXJjaE1vZGFsQ29tcG9uZW50LCB7Y2xhc3M6ICdtb2RhbC14bCcsaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZX0pO1xuICAgICg8T3JnYW5pemF0aW9uU2VhcmNoTW9kYWxDb21wb25lbnQ+bW9kYWwuY29udGVudCkub25Pcmdhbml6YXRpb25TZWxlY3RlZC5zdWJzY3JpYmUob3JnYW5pemF0aW9uID0+IHtcbiAgICAgIHRoaXMubG9hZE9yZ2FuaXphdGlvbkluRm9ybShvcmdhbml6YXRpb24pO1xuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZWxlY3RlZC5lbWl0KG9yZ2FuaXphdGlvbik7XG4gICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImdyb3VwXCIgY2xhc3M9XCJmb3JtLWdyb3VwXCIgW25nQ2xhc3NdPVwieydyb3cgdGV4dC1yaWdodCc6IHJvd0xheW91dH1cIj5cbiAgICA8bmctdGVtcGxhdGUgI29yZ2FuaXphdGlvblRlbXBsYXRlIGxldC1tb2RlbD1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICAgICAgICA8aDU+e3sgKG1vZGVsLm5hbWUgfHwgJycpICtcbiAgICAgICAgICAgIChtb2RlbC5hZGRyZXNzTGlzdCAmJiBtb2RlbC5hZGRyZXNzTGlzdFswXSA/ICgnIC0gJyArIG1vZGVsLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3MuYWRkcmVzc0xpbmUxICsgJywgJyArIG1vZGVsLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3MuY2l0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbW9kZWwuYWRkcmVzc0xpc3RbMF0uYWRkcmVzcy5zdGF0ZSkgOiAnJykgKyAnICgnICsgbW9kZWwuaWQgKyAnKScgfX08L2g1PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGxhYmVsIFtuZ0NsYXNzXT1cInsnY29sLXNtLTQgY29sLWZvcm0tbGFiZWwnOiByb3dMYXlvdXR9XCIgW2F0dHIuZm9yXT1cImNvbXBvbmVudElkICsgJ19Pcmdhbml6YXRpb25TZWFyY2gnXCIgaWQ9XCJvcmdhbml6YXRpb25TZWFyY2hMYWJlbFwiPlxuICAgICAgICB7e3RpdGxlfX1cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWFyY2hpbmdcIj48c3BhbiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBhcmlhLWxhYmVsPVwiU2VhcmNoaW5nXCI+PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wXCIgKGNsaWNrKT1cImFkdmFuY2VkU2VhcmNoKClcIiBhcmlhLWxhYmVsPVwiQWR2YW5jZWQgU2VhcmNoXCI+QWR2YW5jZWQgU2VhcmNoPC9idXR0b24+XG4gICAgPC9sYWJlbD5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnY29sLXNtLTgnOiByb3dMYXlvdXR9XCI+XG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJzZWFyY2hcIiBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOmdyb3VwLmNvbnRyb2xzW2ZpZWxkXT8uc3RhdHVzID09PSAnSU5WQUxJRCd9XCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGRcIiBbdHlwZWFoZWFkXT1cIm5hbWVTb3VyY2VcIiBbdHlwZWFoZWFkU2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICh0eXBlYWhlYWRPblNlbGVjdCk9XCJvbk9yZ2FuaXphdGlvblNlbGVjdCgkZXZlbnQpXCIgW2lkXT1cImNvbXBvbmVudElkICsgJ19Pcmdhbml6YXRpb25TZWFyY2gnXCJcbiAgICAgICAgICAgIFt0eXBlYWhlYWRJdGVtVGVtcGxhdGVdPVwib3JnYW5pemF0aW9uVGVtcGxhdGVcIiBbdHlwZWFoZWFkTWluTGVuZ3RoXT1cIjNcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBPcmdhbml6YXRpb25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIidvcmdhbml6YXRpb25TZWFyY2hMYWJlbCdcIiBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvbXBvbmVudElkICsgJ19Pcmdhbml6YXRpb25TZWFyY2hFcnJvcidcIj5cbiAgICAgICAgPHNtYWxsIGlkPVwie3tjb21wb25lbnRJZCArICdfT3JnYW5pemF0aW9uU2VhcmNoRXJyb3InfX1cIiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdyb3VwLmNvbnRyb2xzW2ZpZWxkXT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgICAgIHt7dGl0bGV9fSBpcyByZXF1aXJlZCB7e2Vycm9yTWVzc2FnZUFkZGVuZHVtfX1cbiAgICAgICAgPC9zbWFsbD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZVwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCI+XG4gICAge3tlcnJvck1lc3NhZ2V9fVxuPC9kaXY+Il19
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLXNlYXJjaC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2VudGl0eS9vcmdhbml6YXRpb24tc2VhcmNoLWlucHV0L29yZ2FuaXphdGlvbi1zZWFyY2gtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9lbnRpdHkvb3JnYW5pemF0aW9uLXNlYXJjaC1pbnB1dC9vcmdhbml6YXRpb24tc2VhcmNoLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNM0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sa0VBQWtFLENBQUM7Ozs7Ozs7O0FBT3BILE1BQU0sT0FBTyxnQ0FBZ0M7SUFnQnZCO0lBQ1Y7SUFDQTtJQWpCVixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFVBQVUsQ0FBaUM7SUFDM0MsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFWCxLQUFLLENBQWE7SUFDVCxjQUFjLEdBQVcsRUFBRSxDQUFDO0lBQ3JDLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsS0FBSyxHQUFXLGNBQWMsQ0FBQztJQUNoQixvQkFBb0IsR0FBRyxFQUFFLENBQUM7SUFDckMsU0FBUyxHQUFHLEtBQUssQ0FBQztJ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LENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2hHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzdDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0EzRlUsZ0NBQWdDOzRGQUFoQyxnQ0FBZ0MscVNDakI3Qyw0NkRBd0JNOzs0RkRQTyxnQ0FBZ0M7a0JBTDVDLFNBQVM7K0JBQ0UsZ0NBQWdDO29KQVcxQixLQUFLO3NCQUFwQixLQUFLO3VCQUFDLE9BQU87Z0JBQ1csY0FBYztzQkFBdEMsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ1AsS0FBSztzQkFBcEIsS0FBSzt1QkFBQyxPQUFPO2dCQUNFLEtBQUs7c0JBQXBCLEtBQUs7dUJBQUMsT0FBTztnQkFDaUIsb0JBQW9CO3NCQUFsRCxLQUFLO3VCQUFDLHNCQUFzQjtnQkFDVCxTQUFTO3NCQUE1QixLQUFLO3VCQUFDLFdBQVc7Z0JBRWMsb0JBQW9CO3NCQUFuRCxNQUFNO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFR5cGVhaGVhZE1hdGNoIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90eXBlYWhlYWQnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwLCBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgT2VwYUNvbXBvbmVudElkU2VydmljZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZW50aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgT0VQQU9yZ2FuaXphdGlvbiB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgT0VQQU9yZ2FuaXphdGlvbkZpbHRlciB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uU2VhcmNoTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9vcmdhbml6YXRpb24tc2VhcmNoLW1vZGFsL29yZ2FuaXphdGlvbi1zZWFyY2gtbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1vcmdhbml6YXRpb24tc2VhcmNoLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL29yZ2FuaXphdGlvbi1zZWFyY2gtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vcmdhbml6YXRpb24tc2VhcmNoLWlucHV0LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBPcmdhbml6YXRpb25TZWFyY2hJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG5hbWVTZWFyY2ggPSAnJztcbiAgbmFtZVNvdXJjZTogT2JzZXJ2YWJsZTxPRVBBT3JnYW5pemF0aW9uW10+O1xuICBjb21wb25lbnRJZDogc3RyaW5nID0gJyc7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHNlYXJjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnZ3JvdXAnKSBncm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCdvcmdhbml6YXRpb25JRCcpIG9yZ2FuaXphdGlvbklEOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCdmaWVsZCcpIGZpZWxkOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCd0aXRsZScpIHRpdGxlOiBzdHJpbmcgPSAnT3JnYW5pemF0aW9uJztcbiAgQElucHV0KCdlcnJvck1lc3NhZ2VBZGRlbmR1bScpIGVycm9yTWVzc2FnZUFkZGVuZHVtID0gJyc7XG4gIEBJbnB1dCgncm93TGF5b3V0Jykgcm93TGF5b3V0ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgnb3JnYW5pemF0aW9uU2VsZWN0ZWQnKSBvcmdhbml6YXRpb25TZWxlY3RlZDogRXZlbnRFbWl0dGVyPE9FUEFPcmdhbml6YXRpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxPRVBBT3JnYW5pemF0aW9uPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaWRTZXJ2aWNlOiBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGVudGl0eVNlcnZpY2U6IEVudGl0eVNlcnZpY2UpIHtcbiAgICAgIHRoaXMubmFtZVNvdXJjZSA9IG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICBvYnNlcnZlci5uZXh0KHRoaXMuZ3JvdXAuZ2V0KHRoaXMuZmllbGQpPy52YWx1ZSk7XG4gICAgICB9KS5waXBlKG1lcmdlTWFwKCh0b2tlbjogYW55KSA9PiB0aGlzLnNlYXJjaE9yZ2FuaXphdGlvbnModG9rZW4pKSk7XG4gICAgIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbXBvbmVudElkID0gdGhpcy5pZFNlcnZpY2UuZ2V0Q29tcG9uZW50SWQodGhpcy5ncm91cCk7XG4gICAgaWYgKHRoaXMub3JnYW5pemF0aW9uSUQpIHtcbiAgICAgIGNvbnN0IGZpbHRlcjogT0VQQU9yZ2FuaXphdGlvbkZpbHRlciA9IHtcbiAgICAgICAgaWQ6IHRoaXMub3JnYW5pemF0aW9uSURcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuZW50aXR5U2VydmljZS5zZWFyY2hPcmdhbml6YXRpb25zKGZpbHRlcikuc3Vic2NyaWJlKG9yZ2FuaXphdGlvbkxpc3QgPT4ge1xuICAgICAgICBpZiAob3JnYW5pemF0aW9uTGlzdCAmJiBvcmdhbml6YXRpb25MaXN0Lmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgdGhpcy5sb2FkT3JnYW5pemF0aW9uSW5Gb3JtKG9yZ2FuaXphdGlvbkxpc3RbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0FuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkOiBaZXJvIG9yIG11bHRpcGxlIG9yZ2FuaXphdGlvbnMgd2loIGlkOiAnICsgdGhpcy5vcmdhbml6YXRpb25JRDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5ncm91cC5nZXQodGhpcy5maWVsZCk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25TZWxlY3RlZC5lbWl0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25Pcmdhbml6YXRpb25TZWxlY3QoZTogVHlwZWFoZWFkTWF0Y2gpIHtcbiAgICBpZiAoZS5pdGVtKSB7XG4gICAgICB0aGlzLmxvYWRPcmdhbml6YXRpb25JbkZvcm0oZS5pdGVtKTtcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VsZWN0ZWQuZW1pdChlLml0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9yZ2FuaXphdGlvbkluRm9ybShvcmdhbml6YXRpb246IE9FUEFPcmdhbml6YXRpb24pIHtcbiAgICBsZXQgZGF0YTogYW55ID0ge307XG4gICAgZGF0YVt0aGlzLmZpZWxkXSA9IG9yZ2FuaXphdGlvbi5uYW1lID8gKG9yZ2FuaXphdGlvbi5uYW1lICsgJyAoJyArIG9yZ2FuaXphdGlvbi5pZCArICcpJykgOiAnJztcbiAgICBpZiAob3JnYW5pemF0aW9uKSB7XG4gICAgICB0aGlzLmdyb3VwLnBhdGNoVmFsdWUoZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWFyY2hPcmdhbml6YXRpb25zKHRva2VuOiBhbnkpOiBPYnNlcnZhYmxlPE9FUEFPcmdhbml6YXRpb25bXT4ge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGZpbHRlcjogT0VQQU9yZ2FuaXphdGlvbkZpbHRlciA9IHtcbiAgICAgIG5hbWU6IGlzTmFOKHRva2VuKSA/IHRva2VuIDogdW5kZWZpbmVkLFxuICAgICAgaWQ6IGlzTmFOKHRva2VuKSA/IHVuZGVmaW5lZCA6IHRva2VuXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVudGl0eVNlcnZpY2Uuc2VhcmNoT3JnYW5pemF0aW9ucyhmaWx0ZXIpLnBpcGUoXG4gICAgICBtYXAoKG9yZ2FuaXphdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9yZ2FuaXphdGlvbnM7XG4gICAgICB9KSwgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdTZWFyY2ggZmFpbGVkOiAnICsgZXJyO1xuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2goKSB7XG4gICAgbGV0IG1vZGFsID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyhPcmdhbml6YXRpb25TZWFyY2hNb2RhbENvbXBvbmVudCwgeyBhcmlhTGFiZWxsZWRCeTogJ29yZ2FuaXphdGlvblNlYXJjaE1vZGFsVGl0bGUnLCBjbGFzczogJ21vZGFsLXhsJyxpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlfSk7XG4gICAgKDxPcmdhbml6YXRpb25TZWFyY2hNb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5vbk9yZ2FuaXphdGlvblNlbGVjdGVkLnN1YnNjcmliZShvcmdhbml6YXRpb24gPT4ge1xuICAgICAgdGhpcy5sb2FkT3JnYW5pemF0aW9uSW5Gb3JtKG9yZ2FuaXphdGlvbik7XG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblNlbGVjdGVkLmVtaXQob3JnYW5pemF0aW9uKTtcbiAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICB9KTtcbiAgfVxuXG59XG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZ3JvdXBcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbbmdDbGFzc109XCJ7J3JvdyB0ZXh0LXJpZ2h0Jzogcm93TGF5b3V0fVwiPlxuICAgIDxuZy10ZW1wbGF0ZSAjb3JnYW5pemF0aW9uVGVtcGxhdGUgbGV0LW1vZGVsPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XG4gICAgICAgIDxoNT57eyAobW9kZWwubmFtZSB8fCAnJykgK1xuICAgICAgICAgICAgKG1vZGVsLmFkZHJlc3NMaXN0ICYmIG1vZGVsLmFkZHJlc3NMaXN0WzBdID8gKCcgLSAnICsgbW9kZWwuYWRkcmVzc0xpc3RbMF0uYWRkcmVzcy5hZGRyZXNzTGluZTEgKyAnLCAnICsgbW9kZWwuYWRkcmVzc0xpc3RbMF0uYWRkcmVzcy5jaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBtb2RlbC5hZGRyZXNzTGlzdFswXS5hZGRyZXNzLnN0YXRlKSA6ICcnKSArICcgKCcgKyBtb2RlbC5pZCArICcpJyB9fTwvaDU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bGFiZWwgW25nQ2xhc3NdPVwieydjb2wtc20tNCBjb2wtZm9ybS1sYWJlbCc6IHJvd0xheW91dH1cIiBbYXR0ci5mb3JdPVwiY29tcG9uZW50SWQgKyAnX09yZ2FuaXphdGlvblNlYXJjaCdcIiBpZD1cIm9yZ2FuaXphdGlvblNlYXJjaExhYmVsXCI+XG4gICAgICAgIHt7dGl0bGV9fVxuICAgICAgICA8c3BhbiAqbmdJZj1cInNlYXJjaGluZ1wiPjxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtbGFiZWw9XCJTZWFyY2hpbmdcIj48L3NwYW4+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGluayBwLTBcIiAoY2xpY2spPVwiYWR2YW5jZWRTZWFyY2goKVwiIGFyaWEtbGFiZWw9XCJBZHZhbmNlZCBTZWFyY2hcIj5BZHZhbmNlZCBTZWFyY2g8L2J1dHRvbj5cbiAgICA8L2xhYmVsPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydjb2wtc20tOCc6IHJvd0xheW91dH1cIj5cbiAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInNlYXJjaFwiIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6Z3JvdXAuY29udHJvbHNbZmllbGRdPy5zdGF0dXMgPT09ICdJTlZBTElEJ31cIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZFwiIFt0eXBlYWhlYWRdPVwibmFtZVNvdXJjZVwiIFt0eXBlYWhlYWRTY3JvbGxhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgKHR5cGVhaGVhZE9uU2VsZWN0KT1cIm9uT3JnYW5pemF0aW9uU2VsZWN0KCRldmVudClcIiBbaWRdPVwiY29tcG9uZW50SWQgKyAnX09yZ2FuaXphdGlvblNlYXJjaCdcIlxuICAgICAgICAgICAgW3R5cGVhaGVhZEl0ZW1UZW1wbGF0ZV09XCJvcmdhbml6YXRpb25UZW1wbGF0ZVwiIFt0eXBlYWhlYWRNaW5MZW5ndGhdPVwiM1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIE9yZ2FuaXphdGlvblwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiJ29yZ2FuaXphdGlvblNlYXJjaExhYmVsJ1wiIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiY29tcG9uZW50SWQgKyAnX09yZ2FuaXphdGlvblNlYXJjaEVycm9yJ1wiPlxuICAgICAgICA8c21hbGwgaWQ9XCJ7e2NvbXBvbmVudElkICsgJ19Pcmdhbml6YXRpb25TZWFyY2hFcnJvcid9fVwiIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbZmllbGRdPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAge3t0aXRsZX19IGlzIHJlcXVpcmVkIHt7ZXJyb3JNZXNzYWdlQWRkZW5kdW19fVxuICAgICAgICA8L3NtYWxsPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIj5cbiAgICB7e2Vycm9yTWVzc2FnZX19XG48L2Rpdj4iXX0=