@james_jayaraj/test-npm 0.9.5 → 0.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4698,10 +4698,10 @@ export class RxComponent {
4698
4698
  }
4699
4699
  }
4700
4700
  RxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RxComponent, deps: [{ token: i1.ApiService }, { token: i2.CommonServices }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i3.DatePipe }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
4701
- RxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RxComponent, selector: "app-rx", outputs: { closeEvent: "closeEvent", submitEvent: "submitEvent" }, host: { listeners: { "click": "onclick($event)" } }, viewQueries: [{ propertyName: "wrapperRef", first: true, predicate: ["MedicineDropdown"], descendants: true }, { propertyName: "prescribeDropdownRef", first: true, predicate: ["PrescribeDropdown"], descendants: true }, { propertyName: "doseRef", first: true, predicate: ["DoseDropdown"], descendants: true }, { propertyName: "freqRef", first: true, predicate: ["FreqDropdown"], descendants: true }, { propertyName: "stpRef", first: true, predicate: ["stpDropdown"], descendants: true }, { propertyName: "foodRef", first: true, predicate: ["FoodDropdown"], descendants: true }, { propertyName: "InstructionRef", first: true, predicate: ["InstructionDropdown"], descendants: true }, { propertyName: "routeRef", first: true, predicate: ["RouteDropdown"], descendants: true }, { propertyName: "purposeRef", first: true, predicate: ["PurposeDropdown"], descendants: true }, { propertyName: "selectActionDropdownRef", first: true, predicate: ["selectActionDropdown"], descendants: true }, { propertyName: "content", first: true, predicate: ["rxwidgets"], descendants: true, static: true }, { propertyName: "myTemplate", first: true, predicate: ["tooltipdemo"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["test"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #rxwidgets> </ng-template>\r\n<div class=\"new_rx_popup_mims\">\r\n <div\r\n class=\"ReactModal__Overlay ReactModal__Overlay--after-open React__Overlay_Open_Popup new_rx_mims_Overlay_Open_Popup\">\r\n <div class=\"ReactModal__Content ReactModal__Content--after-open React__Content new_rx_mims_React__Content\">\r\n <div class=\"popup new_rx_mims_ReactModal_popup\">\r\n <div>\r\n <app-splashscreen *ngIf=\"PopupScreenLoader\" [height]=\"'height-rx-spin'\"> </app-splashscreen>\r\n <div class=\"page-content\" *ngIf=\"!PopupScreenLoader\">\r\n <div class=\"new_rx_popup_header_box\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--2-col-tablet mdl-cell--3-col-phone new_rx_mobile_fullwidth rx_ipad_header_box_1\"\r\n [class]=\"commonServices.rxid != null && commonServices.rxid !=''?'mdl-cell--2-col':'mdl-cell--3-col'\"\r\n style=\"align-self: center\">\r\n <h3 class=\"new_rx_popup_header_box_text\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-hola-health-logo-1.png\" alt=\"hola_health\"\r\n style=\"width: auto;height: 37px;border-radius: 5px;\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-header-logo.png\" alt=\"\" />\r\n {{commonServices.editPrescription === true ? 'Edit Script' : 'New Script'}}\r\n </h3>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--4-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_desktop_title new_rx_mobile_fullwidth\"\r\n style=\"align-self: center;\">\r\n <p class=\"new_rx_popup_header_box_text\" style=\"justify-content: center;\">\r\n <span style=\"font-weight: 600;\">{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>/<span style=\"width: 100px;\">{{\r\n this.datePipe.transform(\r\n commonServices.patientDetails.dob,\r\n \"dd-MM-yyyy\"\r\n )\r\n }}</span>\r\n </p>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col-tablet mdl-cell--4-col-phone new_rx_popup_header_box_col new_rx_mobile_fullwidth rx_ipad_header_box_2 new_mobile_rx_top_bottom_0\"\r\n style=\"position: relative\"\r\n [class]=\"commonServices.rxid != null && commonServices.rxid !=''?'mdl-cell--6-col':'mdl-cell--5-col'\">\r\n <div class=\"new_rx_popup_btns\">\r\n <button (click)=\"close(null)\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored backButton new_mobile_rx_btn\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Close\r\n </button>\r\n <div style=\"display: inline-block;position: relative\"\r\n *ngIf=\"commonServices.rxid != null && commonServices.rxid !=''\">\r\n <button\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton select-action-btn new_mobile_rx_btn\"\r\n style=\"position: relative;width: 140px;display: flex;flex-direction: row;align-items: center;justify-content: center;padding: 10px !important\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\"\r\n (click)=\"selectActionDropdownopen()\">\r\n <ng-container *ngIf=\"selectionbtnLoader\">\r\n <p class=\"rx_loader_button m-v4\"\r\n style=\"width: 20px;height: 20px;margin: 0px !important;margin-right: 0px !important;margin-left: 0px !important;\">\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectionbtnLoader\">\r\n Select Action <i class=\"material-icons drp-icon\">expand_more</i>\r\n </ng-container>\r\n </button>\r\n <div #selectActionDropdown class=\"new_rx_Prescribe_btn_dropdown_list_box select-action-ul\"\r\n *ngIf=\"selectActionBtnDropdown == true\"\r\n [class]=\"{ M_list_box_show: selectActionBtnDropdown === true }\">\r\n <ul class=\"new_rx_Prescribe_btn_dropdown_list_ul\">\r\n <li\r\n (click)=\"commonServices.rxDetails.status.toLowerCase() == 'draft'?cancelDraft():cancelPrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,4)?'':'edit-disable-data'\">\r\n Cancel</li>\r\n <li (click)=\"printPrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,1)?'':'edit-disable-data'\">\r\n Print</li>\r\n <li (click)=\"reissuePrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,3)?'':'edit-disable-data'\">\r\n Re-Issue</li>\r\n <li (click)=\"ceasePrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,2)?'':'edit-disable-data'\">\r\n Cease</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <button *ngIf=\"page != 1\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored backButton new_mobile_rx_btn\"\r\n (click)=\"back()\" [disabled]=\"this.commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Back\r\n </button>\r\n <button *ngIf=\"page == 1\" (click)=\"pageNumberOneToNext()\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton new_mobile_rx_btn\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Next\r\n </button>\r\n <button class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored new_mobile_rx_btn\"\r\n [class]=\"abortdisable?'nextButton':'abortbutton'\" *ngIf=\"abortBtnFlag\" [disabled]=\"abortdisable\"\r\n (click)=\"prescripeAbort()\"><span *ngIf=\"abortdisable\" class=\"rx_loader\">\r\n <p class=\"rx_loader_button m-v4 rx_btn_spin\">\r\n </p>\r\n </span><span *ngIf=\"!abortdisable\">Abort</span></button>\r\n <div style=\"display: inline-block\" *ngIf=\"page == 2\">\r\n <button\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton new_mobile_rx_btn\"\r\n style=\"position: relative;width: 135px;display: flex;flex-direction: row;align-items: center;justify-content: center\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\"\r\n (click)=\"includeRtpmModal()\">\r\n <ng-container *ngIf=\"commonServices.prescribeMedLoader \">\r\n <p class=\"rx_loader_button m-v4\"\r\n style=\"width: 20px;height: 20px;margin: 0px !important;margin-right: 0px !important;margin-left: 0px !important;\">\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"!this.commonServices.prescribeMedLoader\">\r\n Prescribe <i class=\"material-icons drp-icon\">expand_more</i>\r\n </ng-container>\r\n </button>\r\n <div #PrescribeDropdown class=\"new_rx_Prescribe_btn_dropdown_list_box\"\r\n *ngIf=\"selectPBTNDropdown == true\" [class]=\"{ M_list_box_show: selectPBTNDropdown === true }\">\r\n <ul class=\"new_rx_Prescribe_btn_dropdown_list_ul\">\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\"\r\n (click)=\"MprescribeMed(1)\">E-Prescribe (Draft)</li>\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\" (click)=\"EprescripeSend(1)\" *ngIf=\"!this.commonServices.sendToPharmacy && !this.commonServices.emergencySupply\">E-Prescribe and Send</li>\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\" (click)=\"EprescripeSend(2)\">E-Prescribe and Print</li>\r\n <li [class]=\"{'edit-disable-data': (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'M'&& this.commonServices.rxDetails.status.toLowerCase() != 'draft')|| (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'E')}\"\r\n (click)=\"MprescribeMed(2)\">Prescribe (Draft)</li>\r\n <li [class]=\"{'edit-disable-data': (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase() == 'M'&& this.commonServices.rxDetails.status.toLowerCase() != 'draft') || (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'E')}\"\r\n (click)=\"prescripePrint()\">\r\n Prescribe and Print</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth rx_ipad_header_box_3 new_rx_mobile_title\"\r\n style=\"align-self: center\">\r\n <p class=\"new_rx_popup_header_box_text new_mobile_rx_popup_header_text\">\r\n <span style=\"font-weight: 600\">{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>/<span>{{\r\n this.datePipe.transform(\r\n commonServices.patientDetails.dob,\r\n \"dd-MM-yyyy\"\r\n )\r\n }}</span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"page == 1\" class=\"new_rx_popup_tab_1\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\" *ngIf=\"!commonServices.isMedicineRestrict\">\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div #MedicineDropdown style=\"position: relative\">\r\n <div style=\"position: relative\">\r\n <input autocomplete=\"off\" type=\"text\" name=\"medicine search\" placeholder=\"Search Medicines\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_1_input\"\r\n value=\"{{ mediSearchValue }}\" (input)=\"searchHandler($event)\"\r\n (click)=\"MedicineDropdownList()\" />\r\n <i class=\"material-icons md-24 new_rx_popup_tab_1_input_search\">search</i>\r\n <!-- <mat-icon class=\"new_rx_popup_tab_1_input_search\"></mat-icon> -->\r\n </div>\r\n <div class=\"new_rx_popup_tab_1_list_box\" [class]=\"{\r\n M_list_box_show: selectedMedicineDropdown === true\r\n }\">\r\n <div *ngIf=\"searchMedicineLoader\" class=\"loader\"></div>\r\n <div *ngIf=\"!searchMedicineLoader\" style=\"margin-bottom: 10px;\">\r\n <ul class=\"new_rx_popup_tab_1_list\">\r\n <li *ngFor=\"let medicineList of searchedMedicineList\" [class]=\"getcurrentid(medicineList)\"\r\n (click)=\"\r\n getProductListByName(\r\n medicineList['prodHiddenValue'],\r\n medicineList['prodDisplayValue'],\r\n medicineList['searchBase']\r\n )\r\n \" [innerHTML]=\"medicineList['prodDisplayValue']\"></li>\r\n <li *ngIf=\"searchedMedicineList.length == 0\">No Data</li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"PrimarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--2-col mdl-cell--2-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\"\r\n [class]=\"{'disabledRxContent':this.isNonPbsFlag||(commonServices.rxDetails!=null && commonServices.rxDetails!='' && commonServices.rxDetails.status!=null && commonServices.rxDetails.status!='' && commonServices.rxDetails.status.toLowerCase()!='draft')}\">\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxOnlyPBS\"\r\n (change)=\"onCheckboxChange()\" value=\"PBS/RPBS\" [disabled]=\"this.isNonPbsFlag\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\">PBS/RPBS</span></label>\r\n </div>\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxPrivate\"\r\n (change)=\"onCheckboxChange()\" value=\"Private\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\">Private</span></label>\r\n </div>\r\n </div>\r\n <!-- <div\r\n class=\"mdl-cell mdl-cell--2-col mdl-cell--2-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\"\r\n [class]=\"{'disabledRxContent':this.isNonPbsFlag||(commonServices.rxDetails!=null && commonServices.rxDetails!='' && commonServices.rxDetails.status!=null && commonServices.rxDetails.status!='' && commonServices.rxDetails.status.toLowerCase()!='draft')}\">\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxPrivate\"\r\n (change)=\"onCheckboxChange()\" value=\"Private\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\">Private</span></label>\r\n </div>\r\n </div> -->\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--6-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\">\r\n <div style=\"text-align: right\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\" style=\"margin-left: 8px;\">\r\n <span class=\"favourites-toggle-link\" (click)=\"$event.stopPropagation(); showFavourties()\">\r\n {{ showFavouriteMed ? 'Hide favourites' : 'Show favourites' }}\r\n </span>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--7-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div class=\"new_rx_popup_table_box\">\r\n <p class=\"new_rx_popup_tab_title\" style=\"padding: 5px 10px; margin: 0px\">\r\n Available Formulations:\r\n </p>\r\n <div *ngIf=\"!showFavouriteMed\">\r\n <div *ngIf=\"onclickMedicineLoader\" class=\"loader m-v4\"></div>\r\n <div *ngIf=\"!onclickMedicineLoader\">\r\n <div *ngIf=\"\r\n commonServices.selectedMedicineList == null ||\r\n commonServices.selectedMedicineList.length == 0\r\n \" class=\"noDataPrescribe\">\r\n <span>No Data</span>\r\n </div>\r\n <div class=\"new_rx_popup_box_container\" *ngFor=\"\r\n let med of commonServices.selectedMedicineList;\r\n index as i\r\n \">\r\n\r\n <div class=\"mdl-grid new_rx_popup_box\" [class]=\"getClassForMed(med)\"\r\n (click)=\"selectFormulation(med, i)\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_box_header\" [innerHTML]=\"med.productName\"></p>\r\n <p class=\"new_rx_popup_box_text\">\r\n <span><b>Quantity:</b>\r\n {{med.pbsType!=undefined && med.pbsType!=null && med.pbsType.toLowerCase() == \"non pbs\"\r\n ? med.numberOfPack + \"x\" + med.unitPerPack\r\n : med.maxQtyUnits\r\n }}</span><span><b>Rpts:</b> {{ med.repeats }}</span><span\r\n *ngIf=\"!commonServices.isMedicineRestrict\"><b>Restriction:</b>\r\n {{med.Restrictions!=undefined &&\r\n med.Restrictions != null && med.Restrictions != \"\"\r\n ? med.pbsType +\r\n \" (\" +\r\n getRestrictions(med.Restrictions) +\r\n \") \"\r\n : (med.pbsType!=undefined&&med.pbsType!=null?med.pbsType:\"\")\r\n }} </span><span><b>Generic Name: </b>\r\n <span [innerHTML]=\"med.genericName\"></span></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"SecondarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFavouriteMed\">\r\n\r\n <div *ngIf=\"onclickMedicineLoader\" class=\"loader m-v4\"></div>\r\n <div *ngIf=\"!onclickMedicineLoader\">\r\n <div *ngIf=\"\r\n commonServices.favouriteMedicineList == null ||\r\n commonServices.favouriteMedicineList.length == 0\r\n \" class=\"noDataPrescribe\">\r\n <span>No Favourites</span>\r\n </div>\r\n <div class=\"new_rx_popup_box_container\" *ngFor=\"\r\n let med of commonServices.favouriteMedicineList;\r\n index as i\r\n \">\r\n\r\n <div class=\"mdl-grid new_rx_popup_box\" [class]=\"getClassForFavouriteMed(med)\"\r\n (click)=\"favouriteMedicineLoading(med)\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_box_header\" [innerHTML]=\"med.productName\"></p>\r\n <p class=\"new_rx_popup_box_text\">\r\n <span><b>Quantity:</b>\r\n {{med.quantity}}\r\n </span><span><b>Rpts:</b> {{ med.repeats }}</span>\r\n <span *ngIf=\"!commonServices.isMedicineRestrict\"><b>Restriction:</b>\r\n {{med.restriction}}\r\n </span><span><b>Generic Name: </b>\r\n <span [innerHTML]=\"med.genericName\"></span></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"SecondarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"favMedicineLoader\" class=\"loader\"></div>\r\n <div *ngIf=\"!favMedicineLoader\"\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div class=\"mdl-grid new_rx_popup_tab_1_grid new_rx_popup_tab_1_box\"\r\n *ngIf=\"commonServices.selectedFormulation != null\">\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_tab_title\" style=\"margin-bottom: 5px\"\r\n [innerHTML]=\"commonServices.selectedFormulation != null&&commonServices.selectedFormulation.productName!=undefined && commonServices.selectedFormulation.productName!=null? commonServices.selectedFormulation.productName: ''\">\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col\">\r\n <p class=\"new_rx_popup_label\">\r\n Generic Name:<span\r\n [innerHTML]=\"commonServices.selectedFormulation != null&&commonServices.selectedFormulation.genericName!=undefined && commonServices.selectedFormulation.genericName!=null? commonServices.selectedFormulation.genericName : ''\"></span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\">\r\n <p class=\"new_rx_popup_label\" *ngIf=\"commonServices.isBrandName\">\r\n Brand Name:<span [innerHTML]=\"\r\n getBrandName(commonServices.selectedFormulation)\r\n \">\r\n </span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n Schedule:<span>{{\r\n commonServices.selectedFormulation != null &&\r\n commonServices.selectedFormulation.poisonClassification !=\r\n undefined && commonServices.selectedFormulation.poisonClassification!=null &&\r\n commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses!=undefined && commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses!=null && commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses.length>0\r\n ? commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses[0]\r\n : \"No Scheduled Information Available\"\r\n }}</span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n PBS Listing:<span>{{commonServices.selectedFormulation.pbsType!=undefined &&\r\n commonServices.selectedFormulation.pbsType!=null? commonServices.selectedFormulation.pbsType :\r\n '' }}\r\n {{\r\n commonServices.selectedFormulation.pbsCode!=undefined &&\r\n commonServices.selectedFormulation.pbsCode!=null\r\n ? \" (\" +\r\n commonServices.selectedFormulation.pbsCode +\r\n \")\"\r\n : \"\"\r\n }}</span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n <span style=\"margin:0px ;\">\r\n Max Quantity =\r\n {{getMaxQuantity()}}\r\n and Repeats =\r\n {{commonServices.selectedFormulation!=null? commonServices.selectedFormulation.repeats\r\n :\"\"}}</span>\r\n </p>\r\n\r\n <p class=\"new_rx_popup_label\" *ngIf=\"\r\n commonServices.selectedFormulation != null && commonServices.selectedFormulation.pregnancyCategory!=undefined && \r\n commonServices.selectedFormulation.pregnancyCategory != null && commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode!=undefined && commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode!=null\r\n \">\r\n Pregnancy Category:<span>{{\r\n commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode\r\n }}\r\n </span>\r\n <span *ngIf=\"commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote !=undefined && \r\n commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote != null &&\r\n commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote != ''\r\n \">\r\n AdditionalNote:\r\n <span *ngFor=\"\r\n let item of commonServices.selectedFormulation\r\n .pregnancyCategory.additionalNote\r\n \" [innerHTML]=\"item\">\r\n </span>\r\n </span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\" *ngIf=\"\r\n this.isShowRestrictions == true && commonServices.selectedFormulation.Restrictions!=undefined && \r\n commonServices.selectedFormulation.Restrictions != null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <p class=\"new_rx_popup_label\">Restrictions:</p>\r\n <ol style=\"margin: 0px; padding-left: 15px\" *ngIf=\"commonServices.selectedFormulation.Restrictions!=undefined && \r\n commonServices.selectedFormulation.Restrictions != null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <li class=\"new_rx_pop_aut_int\" *ngFor=\"\r\n let restriction of commonServices.selectedFormulation\r\n .Restrictions\r\n \">\r\n <p style=\"\r\n margin: 0px;\r\n display: flex;\r\n align-content: center;\r\n margin-bottom: 10px;\r\n \" *ngIf=\"\r\n restriction.restrictionPreview != null &&\r\n restriction.restrictionPreview != '' &&\r\n restriction.restrictionText != null &&\r\n restriction.restrictionText != ''\r\n \">\r\n <span class=\"rx_restrictionText\" *ngIf=\"restriction.restrictionText.length < 60\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n this.htmlToFormattedText(\r\n restriction.restrictionPreview\r\n )\r\n \"></span></span>\r\n <span class=\"rx_restrictionText\" *ngIf=\"restriction.restrictionText.length > 60\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n this.htmlToFormattedText(\r\n restriction.restrictionPreview\r\n ).substring(0, 60)\r\n \"></span>...\r\n <span>\r\n <a style=\"cursor: pointer; color: #ff9978\" id=\"show-tooltip-id\">Show\r\n More</a></span></span>\r\n <ng-template #tooltipdemo>\r\n <p class=\"rx_tooltip_inner_box\" [innerHTML]=\"restriction.restrictionText\"></p>\r\n </ng-template>\r\n </p>\r\n </li>\r\n </ol>\r\n </div>\r\n </div>\r\n\r\n <div class=\"new_rx_popup_tab_3_small_box\" [style.display]=\"isCurrentMedicineInFavourites() ? 'inline-flex' : null\"\r\n [style.width]=\"isCurrentMedicineInFavourites() ? 'max-content' : null\" *ngIf=\"commonServices.selectedFormulation != null\">\r\n <div style=\"display: inline-block;margin-right: 10px;\" class=\"new_rx_popup_header_box_col\">\r\n <button *ngIf=\"commonServices.selectedFormulation != null\" (click)=\"addToFavourites()\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored\"\r\n [class.nextButton]=\"!isCurrentMedicineInFavourites()\"\r\n [class.rmfavbutton]=\"isCurrentMedicineInFavourites()\">\r\n <span *ngIf=\"isCurrentMedicineInFavourites(); else addText\">\r\n Remove from favourites\r\n </span>\r\n <ng-template #addText>+ Add to favourites</ng-template>\r\n </button>\r\n </div>\r\n <div style=\"display: inline-block; margin-right: 10px\">\r\n <span class=\"new_rx_popup_label\">Quantity: </span><input autocomplete=\"off\" type=\"number\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" name=\"qty\"\r\n placeholder=\"\" class=\"new_rx_popup_tab_input\" step=\"1\" [min]=\"0\"\r\n [(ngModel)]=\"commonServices.quantityVal\" (keypress)=\"checkMobile($event)\"\r\n (input)=\"quantityChange()\" (paste)=\"$event.preventDefault()\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" />\r\n </div>\r\n <div style=\"display: inline-block\">\r\n <span class=\"new_rx_popup_label\">Repeats: </span><input autocomplete=\"off\" type=\"number\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true || commonServices.isMedicineRestrict}\"\r\n name=\"rpts\" placeholder=\"\" [min]=\"0\" (input)=\"repeatsChange()\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.repeatsVal\" (paste)=\"$event.preventDefault()\"\r\n (keypress)=\"checkMobile($event)\"\r\n [disabled]=\"commonServices.editPrescribedPrescription || commonServices.isMedicineRestrict\" />\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\"></div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">\r\n Dose:\r\n <span>\r\n <div class=\"rx_new_popup_checkbox\" style=\"margin-top: 0px\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\"><input autocomplete=\"off\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" type=\"checkbox\"\r\n id=\"checkbox1\" class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.unUsualDoseFlag\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400;font-size: 16px;margin-top: -7px;\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Unusual\r\n Dose</span></label>\r\n </div>\r\n </span>\r\n </p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selecteddose\" placeholder=\"Select Dose\"\r\n [(ngModel)]=\"commonServices.doseSearchValue\" (click)=\"doseDropdown()\" />\r\n <div #DoseDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectDoseDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <li (click)=\"selectDoseValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let dose of doseData\" (click)=\"selectDoseValue(dose)\" [class]=\"{\r\n heighlight: dose['text'] == commonServices.doseSearchValue\r\n }\">\r\n {{ dose[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Frequency:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedFrequency:\"\r\n placeholder=\"Select Frequency\" readOnly [(ngModel)]=\"commonServices.freqSearchValue\"\r\n (click)=\"freqDropdown()\" />\r\n <div #FreqDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectFreqDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectFrequencyValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let frequency of frequencyData\" (click)=\"selectFrequencyValue(frequency)\" [class]=\"{\r\n heighlight:\r\n frequency['text'] == commonServices.freqSearchValue\r\n }\">\r\n {{ frequency[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Food:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedFrequency:\"\r\n placeholder=\"Select Food\" readOnly [(ngModel)]=\"commonServices.foodSearchValue\"\r\n (click)=\"foodDropdown()\" />\r\n <div #FoodDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectFoodDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectFoodValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let food of foodData\" (click)=\"selectFoodValue(food)\" [class]=\"{\r\n heighlight: food['text'] == commonServices.foodSearchValue\r\n }\">\r\n {{ food[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Instruction:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"Instruction\"\r\n placeholder=\"Select Instruction\" [(ngModel)]=\"commonServices.InstructionSearchValue\"\r\n (click)=\"instructionDropdown()\" (change)=\"instructionOnChange()\"\r\n (keypress)=\"alphaRestriction($event)\" />\r\n <div #InstructionDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{M_list_box_show: selectInstructionDropdown === true}\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <ng-container *ngIf=\"selectInstructionDropdownList\">\r\n <li (click)=\"ChangeInstruction(null)\" class=\"p-12\"> </li>\r\n <li\r\n [class]=\"item.id == commonServices.complexId && item.text == commonServices.InstructionSearchValue ? 'heighlight' : ''\"\r\n *ngFor=\"let item of instructionData; index as i\" (click)=\"ChangeInstruction(item)\">\r\n {{ item.text }}\r\n <span *ngIf=\"item.userid !== 0\" class=\"span_icon\" style=\"float: right\">\r\n <i class=\"material-icons\" style=\"padding: 5px\"\r\n (click)=\"editInstruction(item.id, item)\">create</i><i class=\"material-icons\"\r\n style=\"margin-left: 10px; padding: 5px\"\r\n (click)=\"deleteInstruction(item.id)\">clear</i></span>\r\n </li>\r\n <li class=\"RX_ADD_dropdown_btn\" (click)=\"addNewInstruction()\">\r\n + Add Complex Instructions\r\n </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectInstructionDropdownList == false\">\r\n <div class=\"complex_instruction_box\">\r\n <p class=\"new_rx_popup_label\" style=\"font-size: 12px; margin: 0\">\r\n Complex Instruction:\r\n </p>\r\n <input autocomplete=\"off\"\r\n class=\"instruction_field_clr mdl-textfield__input new_rx_popup_tab_input \" type=\"text\"\r\n id=\"Instruction\" [(ngModel)]=\"commonServices.Instructiontiltle\"\r\n placeholder=\"Enter Complex Instruction\" />\r\n <p class=\"new_rx_popup_label\" style=\"font-size: 12px; margin: 0\">\r\n Complex Instruction Description:\r\n </p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" maxLength=\"500\"\r\n [(ngModel)]=\"tempInstructionDescription\" placeholder=\"Enter Complex Instruction Description\"\r\n class=\"instruction_field_clr w-100 new_rx_popup_tab_textarea\"></textarea>\r\n <div class=\"RX_ADD_dropdown_btn_1\">\r\n <button (click)=\"clearInstruction()\" class=\"rx-instruction-btn\">Cancel</button>\r\n <button (click)=\"saveInstruction()\" class=\"rx-instruction-btn\">Save</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Route:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedRoute:\"\r\n placeholder=\"Select Route\" [(ngModel)]=\"commonServices.routeSearchValue\" maxlength=\"50\"\r\n (click)=\"routeDropdown()\" (keypress)=\"alphaRestriction($event)\" />\r\n <div #RouteDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectRouteDropdown === true }\">\r\n <div style=\"padding: 10px; position: relative\">\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_route__input\" type=\"text\"\r\n placeholder=\"Search...\" [value]=\"routeDataFilter ? routeDataFilter : ''\"\r\n (keyup)=\"routeFilter($event)\" />\r\n <i class=\"material-icons md-24 new_rx_popup_tab_1_input_search rx-search-icon\">search</i>\r\n </div>\r\n <ul *ngIf=\"filterRouteItems(routeData, routeDataFilter).length != 0\"\r\n class=\"new_rx_popup_tab_1_list rx_dropdown rx_dropdown_route\">\r\n <li *ngFor=\"\r\n let route of filterRouteItems(routeData, routeDataFilter)\r\n \" (click)=\"selectRoutesearcValue(route)\" [class]=\"{\r\n heighlight:\r\n route['routeName'] == commonServices.routeSearchValue\r\n }\">\r\n {{ route[\"routeName\"] }}\r\n </li>\r\n </ul>\r\n <ul *ngIf=\"filterRouteItems(routeData, routeDataFilter).length == 0\"\r\n class=\"new_rx_popup_tab_1_list rx_dropdown rx_dropdown_route\">\r\n <li>no data</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Pro Re Nata Prescription:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.rxPRN\"\r\n (ngModelChange)=\"PRNChange(commonServices.rxPRN)\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Pro\r\n Re Nata\r\n Prescription</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Prescribe As:</p>\r\n <div class=\"rx_new_popup_checkbox\">\r\n <div class=\"rx_new_radiobox_button rx_radio_overall\">\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" class=\"mdl-radio__button custom-radio-button\"\r\n name=\"PrescribeAs\" [value]=\"'Private'\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'private'\" (click)=\"private()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Private</span></label>\r\n\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" checked=\"\"\r\n class=\"mdl-radio__button d-inline radio custom-radio-button\" name=\"PrescribeAs\"\r\n [value]=\"'PBS'\"\r\n [disabled]=\"prescribeAS_PBS || commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'pbs'\" (click)=\"PBS()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{ 'disabled-style': prescribeAS_PBS == true|| commonServices.isFetching || commonServices.editPrescribedPrescription === true}\">PBS</span>\r\n </label>\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" checked=\"\"\r\n class=\"mdl-radio__button d-inline radio custom-radio-button\" name=\"PrescribeAs\"\r\n [value]=\"'RPBS'\"\r\n [disabled]=\"prescribeAS_RPBS || commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'rpbs'\" (click)=\"RPBS()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{ 'disabled-style': prescribeAS_RPBS == true|| commonServices.isFetching || commonServices.editPrescribedPrescription === true}\">RPBS</span>\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"rx_new_popup_checkbox\" *ngIf=\"\r\n commonServices.selectedFormulation != null && commonServices.selectedFormulation.pbsType!=undefined && commonServices.selectedFormulation.pbsType!=null &&\r\n commonServices.selectedFormulation.pbsType.toLowerCase() === 'non pbs' &&\r\n commonServices.patientDetails.dvaNumber != null &&\r\n commonServices.patientDetails.dvaNumber != '' && isNonPbsFlag == false && !isPrescribeAsPrivateOnly\r\n \">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox\" class=\"check_box\"\r\n [checked]=\"commonServices.unlistedRA\" (click)=\"unlistedRA()\"\r\n [(ngModel)]=\"commonServices.unlistedRA\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" />\r\n <span class=\"mdl-checkbox__label check_box_label\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">\r\n Unlisted RA\r\n </span>\r\n </label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{\r\n M_CTG_box_hide: !(\r\n commonServices.patientDetails &&\r\n commonServices.patientDetails.patientCtgFlag == 0 &&\r\n commonServices.patientDetails.patientCtgCoPayment == 0 &&\r\n commonServices.PrescribeAS.toLowerCase() == 'pbs'\r\n )\r\n }\">\r\n <!-- <p class=\"new_rx_popup_label\">CTG/PBS Co Payment:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.CTGCoPayment\"\r\n [checked]=\"commonServices.CTGCoPayment == true\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">CTG/PBS\r\n Co Payment</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Script Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n id=\"RxScriptDate\" placeholder=\" ../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.scriptDate\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Start Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" id=\"RxStartDate\"\r\n placeholder=\" ../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.startDate\" (ngModelChange)=\"commonServices.rxEndDateCalculater()\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">End Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" id=\"RxEndDate\"\r\n placeholder=\"../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.endDate\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Days Between Repeats:</p>\r\n <input autocomplete=\"off\" (paste)=\"$event.preventDefault()\" placeholder=\"Enter Days Between Repeats\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true||commonServices.isMedicineRestrict}\"\r\n class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"number\" id=\"Daybetweenrepeats\" [min]=\"0\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription||commonServices.isMedicineRestrict\"\r\n [(ngModel)]=\"commonServices.daysBtnRepeatsVal\" (keypress)=\"checkMobile($event)\"\r\n (input)=\"dayschange()\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <div>\r\n <p class=\"new_rx_popup_label\">Purpose:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedPurpose:\"\r\n placeholder=\"Select Purpose\" readOnly [(ngModel)]=\"commonServices.purposeSearchValue\"\r\n (click)=\"purposeDropdown()\" />\r\n <div #PurposeDropdown class=\"new_rx_popup_tab_dropdown_list_box new_rx_popup_tab_purpose_box h-160p\"\r\n [class]=\"{ M_list_box_show: selectPurposeDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectPurposeValue(null)\" class=\"p-12\"></li>\r\n <li *ngFor=\"let purpose of purposeData\" (click)=\"selectPurposeValue(purpose)\" [class]=\"{\r\n heighlight:\r\n purpose['lookupText'] ==\r\n commonServices.purposeSearchValue\r\n }\">\r\n {{ purpose[\"lookupText\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{ M_CTG_box_hide: commonServices.isBrandName != true }\">\r\n <!-- <p class=\"new_rx_popup_label\">Substitution:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true || commonServices.isBrandName == false\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.BrandSubstitutesNotAllow\"\r\n (change)=\"this.brandSubstitutesNotAllow(commonServices.BrandSubstitutesNotAllow)\" [checked]=\"\r\n commonServices.BrandSubstitutesNotAllow\r\n ? commonServices.BrandSubstitutesNotAllow\r\n : false\r\n \" /><span class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Brand\r\n Substitution\r\n Not Permitted</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{ M_CTG_box_hide_brand: commonServices.lemi == true }\" id=\"brandnametooltip\"\r\n (mouseleave)=\"hideToolTip()\" (mouseenter)=\"showtooltip(commonServices.lemi,brandtooltip)\">\r\n <!-- <p class=\"new_rx_popup_label\">Brand Name:</p> -->\r\n <ng-template #brandtooltip><span class=\"include_brand_tooltip\">The selected product is LEMI\r\n identified. Therefore it may be\r\n prescribed by the brand name only.</span></ng-template>\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\" [class]=\"{\r\n M_CTG_box_hide_brand_name: commonServices.lemi == true || commonServices.isFetching == true || commonServices.editPrescribedPrescription === true\r\n }\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [checked]=\"commonServices.isBrandName\"\r\n [(ngModel)]=\"commonServices.isBrandName\"\r\n (change)=\"this.isChangeBrandName(commonServices.isBrandName)\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\">Include Brand\r\n Name</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Regulation 24:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.regulation24\"\r\n [checked]=\"commonServices.regulation24\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Regulation\r\n 24</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">DO NOT send to MySL:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.mySLConsent\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">DO\r\n NOT send to MySL</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">\r\n <!-- Pharmacy: -->\r\n <span>\r\n <div class=\"rx_new_popup_checkbox\" style=\"margin-top: 0px\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\"><input autocomplete=\"off\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" type=\"checkbox\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.sendToPharmacy\" (change)=\"sendToPharmacyChange()\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400;font-size: 16px;margin-top: -7px;\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Send\r\n to Pharmacy</span></label>\r\n </div>\r\n </span>\r\n </p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\" readonly\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selecteddose\" placeholder=\"Select Value\"\r\n [(ngModel)]=\"commonServices.sendToPharmacyValue\" (click)=\"stpValueDropdown()\"\r\n [class]=\"{ M_CTG_box_hide: commonServices.sendToPharmacy != true }\" />\r\n <div #stpDropdown class=\"new_rx_popup_tab_dropdown_list_box new_rx_popup_tab_stp_box h-93p\"\r\n [class]=\"{ M_list_box_show: selectstpDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <li (click)=\"selectStpValue(null)\" class=\"p-12\"></li>\r\n <li *ngFor=\"let sendtopharmacy of sendtopharmacyData\" (click)=\"selectStpValue(sendtopharmacy)\">\r\n {{ sendtopharmacy.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Emergency Supply:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.emergencySupply\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Emergency\r\n Supply</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"page == 2\" class=\"new_rx_popup_tab_2\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px; opacity: 1\">\r\n <div\r\n class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div style=\"width: 100%; padding: 0px\" class=\"mdl-grid\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <div class=\"mdl-grid new_rx_popup_tab_1_grid\">\r\n <div class=\"mdl-cell mdl-cell--12-col\">\r\n <p class=\"new_rx_popup_label\">RX</p>\r\n <p class=\"new_rx_popup_label_p\">\r\n <b [innerHTML]=\"commonServices.rxDisplayName\"></b>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\" style=\"margin: 0px\">Quantity: <span\r\n style=\"color: rgb(45, 45, 45); font-weight: 600\">{{ commonServices.quantityVal }}\r\n </span> Repeats: <span style=\"color: rgb(45, 45, 45); font-weight: 600\">\r\n {{ commonServices.repeatsVal }}</span> Default Quantity:{{getDefaultQuantity()}}\r\n Default Repeats:\r\n {{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.repeats!=null?commonServices.selectedFormulation.repeats:\"\"\r\n }}\r\n </p>\r\n <p *ngIf=\"commonServices.doseSearchValue != '' ||commonServices.freqSearchValue != ''\"\r\n class=\"new_rx_popup_label_p\">\r\n <span>{{ commonServices.doseSearchValue }} </span><span>{{ commonServices.freqSearchValue\r\n }}</span>\r\n </p>\r\n <p *ngIf=\"commonServices.foodSearchValue != ''\" class=\"new_rx_popup_label_p\">\r\n {{ commonServices.foodSearchValue }}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n {{InstructionDescription !=\"\" && InstructionDescription!=null?\r\n InstructionDescription:commonServices.InstructionSearchValue!=\"\" &&\r\n commonServices.InstructionSearchValue!=null?commonServices.InstructionSearchValue:\"\"}}\r\n </p>\r\n <p *ngIf=\"commonServices.routeSearchValue != ''\" class=\"new_rx_popup_label_p\">\r\n {{ commonServices.routeSearchValue }}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n P.R.N :\r\n <i *ngIf=\"commonServices.rxPRN\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.rxPRN\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Days Between Repeats:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.daysBtnRepeatsVal)\">{{commonServices.daysBtnRepeatsVal}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.daysBtnRepeatsVal)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Unusual Dose:\r\n <i *ngIf=\"commonServices.unUsualDoseFlag\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.unUsualDoseFlag\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Script Date:\r\n <span>{{this.commonServices.scriptDate|date:'dd-MM-yyyy'}}</span>\r\n\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Start Date:\r\n <span>{{this.commonServices.startDate|date:'dd-MM-yyyy'}}</span>, End Date:\r\n {{this.commonServices.endDate|date:'dd-MM-yyyy'}}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Prescribe As:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.PrescribeAS)\">{{commonServices.PrescribeAS}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.PrescribeAS)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Purpose:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.purposeSearchValue)\">{{commonServices.purposeSearchValue}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.purposeSearchValue)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Include Brand Name:\r\n <i *ngIf=\"commonServices.isBrandName\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.isBrandName\">-</span>,\r\n Brand Substitution Not Permitted:\r\n <i *ngIf=\"commonServices.BrandSubstitutesNotAllow\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.BrandSubstitutesNotAllow\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Regulation 24:\r\n <i *ngIf=\"commonServices.regulation24\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.regulation24\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n CTG/PBS Co Payment:\r\n <i *ngIf=\"commonServices.CTGCoPayment\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.CTGCoPayment\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n DO NOT send to MySL:\r\n <i *ngIf=\"commonServices.mySLConsent\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.mySLConsent\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Send to Pharmacy:\r\n <i *ngIf=\"commonServices.sendToPharmacy\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.sendToPharmacy\">-</span>, Send to Pharmacy Value:\r\n {{!commonServices.IsNullOrEmpty(commonServices.sendToPharmacyValue)?commonServices.sendToPharmacyValue:'-'}}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Emergency Supply:\r\n <i *ngIf=\"commonServices.emergencySupply\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.emergencySupply\">-</span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Note To Pharmacy:</p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"50\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.doctorNotes\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Annotation:</p>\r\n\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"500\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.annotation\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Reason For Prescription:</p>\r\n\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"50\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.prescriptionReason\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\" style=\"text-transform: capitalize;\">\r\n {{this.getStateAuthorityLabel(commonServices.patientDetails.state)}}\r\n </p>\r\n\r\n <p style=\"margin: 0px;margin-top: -8px;margin-bottom: 10px;\">\r\n <span class=\"state-txt-color new_rx_popup_label_p\">(Relevant to\r\n {{ commonServices.patientDetails.state }})</span>\r\n </p>\r\n\r\n <input autocomplete=\"off\" type=\"text\" name=\"approval\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.StateAuthorityNumber\" maxlength=\"25\"\r\n (keypress)=\"authorityNoValidation($event)\" (ngModelChange)=\"authorityNoChange($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{\r\n 'new_rx_no_authority':!showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',commonServices.PrescribeAS,commonServices.rxAuthority,commonServices.unlistedRA)\r\n }\">\r\n <div *ngIf=\"\r\n showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',\r\n commonServices.PrescribeAS,\r\n commonServices.rxAuthority,\r\n commonServices.unlistedRA\r\n )\r\n \">\r\n <div style=\"padding: 0px\" class=\"mdl-grid\">\r\n <div class=\"mdl-cell mdl-cell--8-col mdl-cell--6-col-tablet mdl-cell--4-col-phone\">\r\n <span class=\"new_rx_popup_label_New\">HOTLINE: <span\r\n class=\"new_rx_popup_label_span\">{{commonServices.PrescribeAS ==\r\n 'RPBS'?'1800552580':'1800888333'}}</span></span>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--4-col mdl-cell--2-col-tablet mdl-cell--4-col-phone\">\r\n <div style=\"text-align: right\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Prescriber Name:<span>{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Prescriber Number:<span>{{\r\n commonServices.physicianDetails.prescriberNumber\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Patient Medicare Number:<span>{{\r\n commonServices.patientDetails.medicareNumber\r\n ? commonServices.patientDetails.medicareNumber\r\n : \"\"\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Authority Form No:\r\n <span>{{\r\n commonServices.authorityFormNo\r\n ? commonServices.authorityFormNo\r\n : \"\"\r\n }}</span>\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Authority Item:</p>\r\n <p class=\"authority_item_text\" [innerHTML]=\"commonServices.rxDisplayName\"></p>\r\n\r\n <p class=\"new_rx_popup_label_p new_rx_popup_tab_smallBoxes\" style=\"margin: 0px\">\r\n Quantity:<span style=\"color: rgb(45, 45, 45); font-weight: 600\"> {{ commonServices.quantityVal\r\n }}</span> Repeats:<span style=\"color: rgb(45, 45, 45); font-weight: 600\">\r\n {{ commonServices.repeatsVal }}</span> Default\r\n Quantity:{{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.maxQtyUnits!=null?(commonServices.quantityWithUnitFlag?\"1\r\n x \":\"\")+commonServices.selectedFormulation.maxQtyUnits:\"\"}}\r\n Default\r\n Repeats:{{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.repeats!=null?\r\n commonServices.selectedFormulation.repeats:\"\"}}\r\n </p>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n PBS Listed Indication Authority:\r\n </p>\r\n <div class=\"w-100 new_rx_popup_tab_textarea\"\r\n style=\"min-height: 70px; max-height: 150px; overflow: auto\">\r\n <ul style=\"margin: 0px; padding-left: 15px;list-style: none;padding: 0px;\" *ngIf=\"\r\n this.isShowRestrictions == true &&\r\n commonServices.selectedFormulation.Restrictions !=\r\n null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <li style=\"font-size: 12px;padding: 0px 10px;margin-bottom: 10px;\"\r\n class=\"new_rx_pop_aut_int cursor\" *ngFor=\"\r\n let restriction of commonServices.selectedFormulation\r\n .Restrictions;\r\n index as i\r\n \" [class]=\"{\r\n new_rx_pop_aut_ins_select:\r\n commonServices.pbsListInstructionsId == i\r\n }\">\r\n <p style=\"\r\n margin: 0px;\r\n display: flex;\r\n align-content: center;\r\n margin-bottom: 10px;\r\n \" *ngIf=\"\r\n restriction.restrictionPreview != null &&\r\n restriction.restrictionPreview != '' &&\r\n restriction.restrictionText != null &&\r\n restriction.restrictionText != ''\r\n \">\r\n <span\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \">\r\n <span class=\"rx_restrictionText\" style=\"font-size: 12px;\"\r\n *ngIf=\"restriction.restrictionText.length < 80\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n htmlToFormattedText(\r\n restriction.restrictionPreview\r\n )\r\n \"></span></span></span>\r\n <span class=\"rx_restrictionText\" style=\"font-size: 12px;\"\r\n *ngIf=\"restriction.restrictionText.length > 80\"><b (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \">{{\r\n restriction.restrictionType }}</b> -\r\n <span (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \" [innerHTML]=\"\r\n htmlToFormattedText(\r\n restriction.restrictionPreview\r\n ).substring(0, 80)\r\n \"></span>...\r\n <span>\r\n </span>\r\n <a style=\"cursor: pointer; color: #ff9978\" id=\"show-tooltip-id\">Show\r\n More</a></span>\r\n <ng-template #tooltipdemo>\r\n <p class=\"rx_tooltip_inner_box\" [innerHTML]=\"restriction.restrictionText\"></p>\r\n </ng-template>\r\n </p>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\"\r\n style=\"padding: 0px\">\r\n <!-- <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">PBS Notes:</p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" maxlength=\"500\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n class=\"w-100 new_rx_popup_tab_textarea\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.pbsNotes\"></textarea>\r\n </div> -->\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Indication For This Authority:\r\n </p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" placeholder=\"\"\r\n [class]=\"{'edit-dsable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.pbsListInstructions\" (ngModelChange)=\"onInputChange($event)\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-100\"></textarea>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n {{\r\n getAuthorityLabel(commonServices.patientDetails.state)\r\n }}\r\n </p>\r\n <input autocomplete=\"off\" type=\"text\" name=\"approval\" placeholder=\"\"\r\n [class]=\"{'edit-dsable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.approvalNo\" (ngModelChange)=\"onInputchangeApprovalNo($event)\"\r\n (keypress)=\"authorityNoValidation($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"\r\n !showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',\r\n commonServices.PrescribeAS,\r\n commonServices.rxAuthority,\r\n commonServices.unlistedRA\r\n )\r\n \" style=\"width: 100%;\">\r\n <div style=\"text-align: right\" *ngIf=\"!commonServices.isMedicineRestrict\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n <div class=\"No_Authority_box\">\r\n <p>No Authority Required</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"rx_footer\">\r\n <div class=\"rx_footer_brand\">\r\n <p class=\"ml-10\"><span>Hola Consult | 1.0 <span *ngIf=\"commonServices.sandbox\">| <span\r\n class=\"rx_staging\">This is a sandbox environment</span></span></span></p>\r\n <p class=\"mt-15p\">\r\n <span class=\"rx_popup_footer_text\">\u00A9 2025 Hola Health, a brand of Packapill Pty Ltd | v\r\n 1.1.0 |\r\n <a href=\"https://hola.health/consult-terms\" target=\"_blank\">Terms</a> |\r\n <a href=\"https://hola.health/consult-privacy-policy\" target=\"_blank\">Privacy Policy</a> |\r\n <a href=\"mailto:support@hola.health\" target=\"_blank\">Help</a></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";.loader{border:4px solid #f3f3f3;border-radius:50%;border-top:4px solid #020202;width:30px;height:30px;animation:spin 1s linear infinite;margin-left:18px;margin-top:18px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.m-v4{margin-left:4vh}.rx_loader_button{border:2px solid #f3f3f3;border-radius:50%;border-top:4px solid #005760;width:30px;height:30px;animation:spin 1s linear infinite}.drp-icon{color:#fff;font-size:19px;margin-left:5px}.select-action-btn{display:flex;flex-direction:row;flex-wrap:nowrap;align-content:center;justify-content:center;align-items:center}.select-action-ul{width:80%}.new_rx_popup_mims .React__Overlay_Open_Popup{position:fixed;inset:0;background-color:#00000080!important}.new_rx_popup_mims .new_rx_mims_Overlay_Open_Popup{z-index:9999999!important}.new_rx_popup_mims .ReactModal__Overlay{overflow-y:auto!important}.new_rx_popup_mims .ReactModal_popup{width:100%;padding:0;margin:20px 0 0}.new_rx_popup_mims .ReactModal__Content{margin:auto}.edit-disable-data{pointer-events:none;opacity:.6}.new_rx_popup_btns{position:relative;display:flex;justify-content:flex-end;align-items:center}@media only screen and (max-width: 1023px){.rx_ipad_header_box_1{width:calc(35% - 16px)}.rx_ipad_header_box_2{width:calc(65% - 16px)}.rx_ipad_header_box_3{width:calc(100% - 16px)}.new_mobile_rx_popup_header_text{display:block;text-align:center}}@media screen and (max-width: 767px){.new_rx_popup_btns,.new_mobile_rx_popup_header_text{display:block;text-align:center}.new_mobile_rx_top_bottom_0{margin-top:0;margin-bottom:0}.new_mobile_rx_btn{margin-bottom:5px}}.favourites-toggle-link{color:#0077b6!important;text-decoration:underline;cursor:pointer!important;font-size:14px;font-weight:400;line-height:20px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;outline:none!important;-webkit-tap-highlight-color:transparent}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.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: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.SplashscreenComponent, selector: "app-splashscreen", inputs: ["height"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
4701
+ RxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RxComponent, selector: "app-rx", outputs: { closeEvent: "closeEvent", submitEvent: "submitEvent" }, host: { listeners: { "click": "onclick($event)" } }, viewQueries: [{ propertyName: "wrapperRef", first: true, predicate: ["MedicineDropdown"], descendants: true }, { propertyName: "prescribeDropdownRef", first: true, predicate: ["PrescribeDropdown"], descendants: true }, { propertyName: "doseRef", first: true, predicate: ["DoseDropdown"], descendants: true }, { propertyName: "freqRef", first: true, predicate: ["FreqDropdown"], descendants: true }, { propertyName: "stpRef", first: true, predicate: ["stpDropdown"], descendants: true }, { propertyName: "foodRef", first: true, predicate: ["FoodDropdown"], descendants: true }, { propertyName: "InstructionRef", first: true, predicate: ["InstructionDropdown"], descendants: true }, { propertyName: "routeRef", first: true, predicate: ["RouteDropdown"], descendants: true }, { propertyName: "purposeRef", first: true, predicate: ["PurposeDropdown"], descendants: true }, { propertyName: "selectActionDropdownRef", first: true, predicate: ["selectActionDropdown"], descendants: true }, { propertyName: "content", first: true, predicate: ["rxwidgets"], descendants: true, static: true }, { propertyName: "myTemplate", first: true, predicate: ["tooltipdemo"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["test"], descendants: true, static: true }], ngImport: i0, template: "<ng-template #rxwidgets> </ng-template>\r\n<div class=\"new_rx_popup_mims\">\r\n <div\r\n class=\"ReactModal__Overlay ReactModal__Overlay--after-open React__Overlay_Open_Popup new_rx_mims_Overlay_Open_Popup\">\r\n <div class=\"ReactModal__Content ReactModal__Content--after-open React__Content new_rx_mims_React__Content\">\r\n <div class=\"popup new_rx_mims_ReactModal_popup\">\r\n <div>\r\n <app-splashscreen *ngIf=\"PopupScreenLoader\" [height]=\"'height-rx-spin'\"> </app-splashscreen>\r\n <div class=\"page-content\" *ngIf=\"!PopupScreenLoader\">\r\n <div class=\"new_rx_popup_header_box\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--2-col-tablet mdl-cell--3-col-phone new_rx_mobile_fullwidth rx_ipad_header_box_1\"\r\n [class]=\"commonServices.rxid != null && commonServices.rxid !=''?'mdl-cell--2-col':'mdl-cell--3-col'\"\r\n style=\"align-self: center\">\r\n <h3 class=\"new_rx_popup_header_box_text\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-hola-health-logo-1.png\" alt=\"hola_health\"\r\n style=\"width: auto;height: 37px;border-radius: 5px;\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-header-logo.png\" alt=\"\" />\r\n {{commonServices.editPrescription === true ? 'Edit Script' : 'New Script'}}\r\n </h3>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--4-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_desktop_title new_rx_mobile_fullwidth\"\r\n style=\"align-self: center;\">\r\n <p class=\"new_rx_popup_header_box_text\" style=\"justify-content: center;\">\r\n <span style=\"font-weight: 600;\">{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>/<span style=\"width: 100px;\">{{\r\n this.datePipe.transform(\r\n commonServices.patientDetails.dob,\r\n \"dd-MM-yyyy\"\r\n )\r\n }}</span>\r\n </p>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col-tablet mdl-cell--4-col-phone new_rx_popup_header_box_col new_rx_mobile_fullwidth rx_ipad_header_box_2 new_mobile_rx_top_bottom_0\"\r\n style=\"position: relative\"\r\n [class]=\"commonServices.rxid != null && commonServices.rxid !=''?'mdl-cell--6-col':'mdl-cell--5-col'\">\r\n <div class=\"new_rx_popup_btns\">\r\n <button (click)=\"close(null)\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored backButton new_mobile_rx_btn\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Close\r\n </button>\r\n <div style=\"display: inline-block;position: relative\"\r\n *ngIf=\"commonServices.rxid != null && commonServices.rxid !=''\">\r\n <button\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton select-action-btn new_mobile_rx_btn\"\r\n style=\"position: relative;width: 140px;display: flex;flex-direction: row;align-items: center;justify-content: center;padding: 10px !important\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\"\r\n (click)=\"selectActionDropdownopen()\">\r\n <ng-container *ngIf=\"selectionbtnLoader\">\r\n <p class=\"rx_loader_button m-v4\"\r\n style=\"width: 20px;height: 20px;margin: 0px !important;margin-right: 0px !important;margin-left: 0px !important;\">\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectionbtnLoader\">\r\n Select Action <i class=\"material-icons drp-icon\">expand_more</i>\r\n </ng-container>\r\n </button>\r\n <div #selectActionDropdown class=\"new_rx_Prescribe_btn_dropdown_list_box select-action-ul\"\r\n *ngIf=\"selectActionBtnDropdown == true\"\r\n [class]=\"{ M_list_box_show: selectActionBtnDropdown === true }\">\r\n <ul class=\"new_rx_Prescribe_btn_dropdown_list_ul\">\r\n <li\r\n (click)=\"commonServices.rxDetails.status.toLowerCase() == 'draft'?cancelDraft():cancelPrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,4)?'':'edit-disable-data'\">\r\n Cancel</li>\r\n <li (click)=\"printPrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,1)?'':'edit-disable-data'\">\r\n Print</li>\r\n <li (click)=\"reissuePrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,3)?'':'edit-disable-data'\">\r\n Re-Issue</li>\r\n <li (click)=\"ceasePrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,2)?'':'edit-disable-data'\">\r\n Cease</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <button *ngIf=\"page != 1\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored backButton new_mobile_rx_btn\"\r\n (click)=\"back()\" [disabled]=\"this.commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Back\r\n </button>\r\n <button *ngIf=\"page == 1\" (click)=\"pageNumberOneToNext()\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton new_mobile_rx_btn\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Next\r\n </button>\r\n <button class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored new_mobile_rx_btn\"\r\n [class]=\"abortdisable?'nextButton':'abortbutton'\" *ngIf=\"abortBtnFlag\" [disabled]=\"abortdisable\"\r\n (click)=\"prescripeAbort()\"><span *ngIf=\"abortdisable\" class=\"rx_loader\">\r\n <p class=\"rx_loader_button m-v4 rx_btn_spin\">\r\n </p>\r\n </span><span *ngIf=\"!abortdisable\">Abort</span></button>\r\n <div style=\"display: inline-block\" *ngIf=\"page == 2\">\r\n <button\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton new_mobile_rx_btn\"\r\n style=\"position: relative;width: 135px;display: flex;flex-direction: row;align-items: center;justify-content: center\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\"\r\n (click)=\"includeRtpmModal()\">\r\n <ng-container *ngIf=\"commonServices.prescribeMedLoader \">\r\n <p class=\"rx_loader_button m-v4\"\r\n style=\"width: 20px;height: 20px;margin: 0px !important;margin-right: 0px !important;margin-left: 0px !important;\">\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"!this.commonServices.prescribeMedLoader\">\r\n Prescribe <i class=\"material-icons drp-icon\">expand_more</i>\r\n </ng-container>\r\n </button>\r\n <div #PrescribeDropdown class=\"new_rx_Prescribe_btn_dropdown_list_box\"\r\n *ngIf=\"selectPBTNDropdown == true\" [class]=\"{ M_list_box_show: selectPBTNDropdown === true }\">\r\n <ul class=\"new_rx_Prescribe_btn_dropdown_list_ul\">\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\"\r\n (click)=\"MprescribeMed(1)\">E-Prescribe (Draft)</li>\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\" (click)=\"EprescripeSend(1)\" *ngIf=\"!this.commonServices.sendToPharmacy && !this.commonServices.emergencySupply\">E-Prescribe and Send</li>\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\" (click)=\"EprescripeSend(2)\">E-Prescribe and Print</li>\r\n <li [class]=\"{'edit-disable-data': (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'M'&& this.commonServices.rxDetails.status.toLowerCase() != 'draft')|| (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'E')}\"\r\n (click)=\"MprescribeMed(2)\">Prescribe (Draft)</li>\r\n <li [class]=\"{'edit-disable-data': (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase() == 'M'&& this.commonServices.rxDetails.status.toLowerCase() != 'draft') || (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'E')}\"\r\n (click)=\"prescripePrint()\">\r\n Prescribe and Print</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth rx_ipad_header_box_3 new_rx_mobile_title\"\r\n style=\"align-self: center\">\r\n <p class=\"new_rx_popup_header_box_text new_mobile_rx_popup_header_text\">\r\n <span style=\"font-weight: 600\">{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>/<span>{{\r\n this.datePipe.transform(\r\n commonServices.patientDetails.dob,\r\n \"dd-MM-yyyy\"\r\n )\r\n }}</span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"page == 1\" class=\"new_rx_popup_tab_1\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\" *ngIf=\"!commonServices.isMedicineRestrict\">\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div #MedicineDropdown style=\"position: relative\">\r\n <div style=\"position: relative\">\r\n <input autocomplete=\"off\" type=\"text\" name=\"medicine search\" placeholder=\"Search Medicines\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_1_input\"\r\n value=\"{{ mediSearchValue }}\" (input)=\"searchHandler($event)\"\r\n (click)=\"MedicineDropdownList()\" />\r\n <i class=\"material-icons md-24 new_rx_popup_tab_1_input_search\">search</i>\r\n <!-- <mat-icon class=\"new_rx_popup_tab_1_input_search\"></mat-icon> -->\r\n </div>\r\n <div class=\"new_rx_popup_tab_1_list_box\" [class]=\"{\r\n M_list_box_show: selectedMedicineDropdown === true\r\n }\">\r\n <div *ngIf=\"searchMedicineLoader\" class=\"loader\"></div>\r\n <div *ngIf=\"!searchMedicineLoader\" style=\"margin-bottom: 10px;\">\r\n <ul class=\"new_rx_popup_tab_1_list\">\r\n <li *ngFor=\"let medicineList of searchedMedicineList\" [class]=\"getcurrentid(medicineList)\"\r\n (click)=\"\r\n getProductListByName(\r\n medicineList['prodHiddenValue'],\r\n medicineList['prodDisplayValue'],\r\n medicineList['searchBase']\r\n )\r\n \" [innerHTML]=\"medicineList['prodDisplayValue']\"></li>\r\n <li *ngIf=\"searchedMedicineList.length == 0\">No Data</li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"PrimarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--2-col mdl-cell--2-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\"\r\n [class]=\"{'disabledRxContent':this.isNonPbsFlag||(commonServices.rxDetails!=null && commonServices.rxDetails!='' && commonServices.rxDetails.status!=null && commonServices.rxDetails.status!='' && commonServices.rxDetails.status.toLowerCase()!='draft')}\">\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxOnlyPBS\"\r\n (change)=\"onCheckboxChange()\" value=\"PBS/RPBS\" [disabled]=\"this.isNonPbsFlag\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\">PBS/RPBS</span></label>\r\n </div>\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxPrivate\"\r\n (change)=\"onCheckboxChange()\" value=\"Private\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\">Private</span></label>\r\n </div>\r\n </div>\r\n <!-- <div\r\n class=\"mdl-cell mdl-cell--2-col mdl-cell--2-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\"\r\n [class]=\"{'disabledRxContent':this.isNonPbsFlag||(commonServices.rxDetails!=null && commonServices.rxDetails!='' && commonServices.rxDetails.status!=null && commonServices.rxDetails.status!='' && commonServices.rxDetails.status.toLowerCase()!='draft')}\">\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxPrivate\"\r\n (change)=\"onCheckboxChange()\" value=\"Private\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\">Private</span></label>\r\n </div>\r\n </div> -->\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--6-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\">\r\n <div style=\"text-align: right\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\" style=\"margin-left: 8px;\" *ngIf=\"!commonServices.editPrescribedPrescription\">\r\n <span class=\"favourites-toggle-link\" (click)=\"$event.stopPropagation(); showFavourties()\">\r\n {{ showFavouriteMed ? 'Hide favourites' : 'Show favourites' }}\r\n </span>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--7-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div class=\"new_rx_popup_table_box\">\r\n <p class=\"new_rx_popup_tab_title\" style=\"padding: 5px 10px; margin: 0px\">\r\n Available Formulations:\r\n </p>\r\n <div *ngIf=\"!showFavouriteMed\">\r\n <div *ngIf=\"onclickMedicineLoader\" class=\"loader m-v4\"></div>\r\n <div *ngIf=\"!onclickMedicineLoader\">\r\n <div *ngIf=\"\r\n commonServices.selectedMedicineList == null ||\r\n commonServices.selectedMedicineList.length == 0\r\n \" class=\"noDataPrescribe\">\r\n <span>No Data</span>\r\n </div>\r\n <div class=\"new_rx_popup_box_container\" *ngFor=\"\r\n let med of commonServices.selectedMedicineList;\r\n index as i\r\n \">\r\n\r\n <div class=\"mdl-grid new_rx_popup_box\" [class]=\"getClassForMed(med)\"\r\n (click)=\"selectFormulation(med, i)\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_box_header\" [innerHTML]=\"med.productName\"></p>\r\n <p class=\"new_rx_popup_box_text\">\r\n <span><b>Quantity:</b>\r\n {{med.pbsType!=undefined && med.pbsType!=null && med.pbsType.toLowerCase() == \"non pbs\"\r\n ? med.numberOfPack + \"x\" + med.unitPerPack\r\n : med.maxQtyUnits\r\n }}</span><span><b>Rpts:</b> {{ med.repeats }}</span><span\r\n *ngIf=\"!commonServices.isMedicineRestrict\"><b>Restriction:</b>\r\n {{med.Restrictions!=undefined &&\r\n med.Restrictions != null && med.Restrictions != \"\"\r\n ? med.pbsType +\r\n \" (\" +\r\n getRestrictions(med.Restrictions) +\r\n \") \"\r\n : (med.pbsType!=undefined&&med.pbsType!=null?med.pbsType:\"\")\r\n }} </span><span><b>Generic Name: </b>\r\n <span [innerHTML]=\"med.genericName\"></span></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"SecondarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFavouriteMed\">\r\n\r\n <div *ngIf=\"onclickMedicineLoader\" class=\"loader m-v4\"></div>\r\n <div *ngIf=\"!onclickMedicineLoader\">\r\n <div *ngIf=\"\r\n commonServices.favouriteMedicineList == null ||\r\n commonServices.favouriteMedicineList.length == 0\r\n \" class=\"noDataPrescribe\">\r\n <span>No Favourites</span>\r\n </div>\r\n <div class=\"new_rx_popup_box_container\" *ngFor=\"\r\n let med of commonServices.favouriteMedicineList;\r\n index as i\r\n \">\r\n\r\n <div class=\"mdl-grid new_rx_popup_box\" [class]=\"getClassForFavouriteMed(med)\"\r\n (click)=\"favouriteMedicineLoading(med)\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_box_header\" [innerHTML]=\"med.productName\"></p>\r\n <p class=\"new_rx_popup_box_text\">\r\n <span><b>Quantity:</b>\r\n {{med.quantity}}\r\n </span><span><b>Rpts:</b> {{ med.repeats }}</span>\r\n <span *ngIf=\"!commonServices.isMedicineRestrict\"><b>Restriction:</b>\r\n {{med.restriction}}\r\n </span><span><b>Generic Name: </b>\r\n <span [innerHTML]=\"med.genericName\"></span></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"SecondarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"favMedicineLoader\" class=\"loader\"></div>\r\n <div *ngIf=\"!favMedicineLoader\"\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div class=\"mdl-grid new_rx_popup_tab_1_grid new_rx_popup_tab_1_box\"\r\n *ngIf=\"commonServices.selectedFormulation != null\">\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_tab_title\" style=\"margin-bottom: 5px\"\r\n [innerHTML]=\"commonServices.selectedFormulation != null&&commonServices.selectedFormulation.productName!=undefined && commonServices.selectedFormulation.productName!=null? commonServices.selectedFormulation.productName: ''\">\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col\">\r\n <p class=\"new_rx_popup_label\">\r\n Generic Name:<span\r\n [innerHTML]=\"commonServices.selectedFormulation != null&&commonServices.selectedFormulation.genericName!=undefined && commonServices.selectedFormulation.genericName!=null? commonServices.selectedFormulation.genericName : ''\"></span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\">\r\n <p class=\"new_rx_popup_label\" *ngIf=\"commonServices.isBrandName\">\r\n Brand Name:<span [innerHTML]=\"\r\n getBrandName(commonServices.selectedFormulation)\r\n \">\r\n </span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n Schedule:<span>{{\r\n commonServices.selectedFormulation != null &&\r\n commonServices.selectedFormulation.poisonClassification !=\r\n undefined && commonServices.selectedFormulation.poisonClassification!=null &&\r\n commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses!=undefined && commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses!=null && commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses.length>0\r\n ? commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses[0]\r\n : \"No Scheduled Information Available\"\r\n }}</span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n PBS Listing:<span>{{commonServices.selectedFormulation.pbsType!=undefined &&\r\n commonServices.selectedFormulation.pbsType!=null? commonServices.selectedFormulation.pbsType :\r\n '' }}\r\n {{\r\n commonServices.selectedFormulation.pbsCode!=undefined &&\r\n commonServices.selectedFormulation.pbsCode!=null\r\n ? \" (\" +\r\n commonServices.selectedFormulation.pbsCode +\r\n \")\"\r\n : \"\"\r\n }}</span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n <span style=\"margin:0px ;\">\r\n Max Quantity =\r\n {{getMaxQuantity()}}\r\n and Repeats =\r\n {{commonServices.selectedFormulation!=null? commonServices.selectedFormulation.repeats\r\n :\"\"}}</span>\r\n </p>\r\n\r\n <p class=\"new_rx_popup_label\" *ngIf=\"\r\n commonServices.selectedFormulation != null && commonServices.selectedFormulation.pregnancyCategory!=undefined && \r\n commonServices.selectedFormulation.pregnancyCategory != null && commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode!=undefined && commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode!=null\r\n \">\r\n Pregnancy Category:<span>{{\r\n commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode\r\n }}\r\n </span>\r\n <span *ngIf=\"commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote !=undefined && \r\n commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote != null &&\r\n commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote != ''\r\n \">\r\n AdditionalNote:\r\n <span *ngFor=\"\r\n let item of commonServices.selectedFormulation\r\n .pregnancyCategory.additionalNote\r\n \" [innerHTML]=\"item\">\r\n </span>\r\n </span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\" *ngIf=\"\r\n this.isShowRestrictions == true && commonServices.selectedFormulation.Restrictions!=undefined && \r\n commonServices.selectedFormulation.Restrictions != null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <p class=\"new_rx_popup_label\">Restrictions:</p>\r\n <ol style=\"margin: 0px; padding-left: 15px\" *ngIf=\"commonServices.selectedFormulation.Restrictions!=undefined && \r\n commonServices.selectedFormulation.Restrictions != null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <li class=\"new_rx_pop_aut_int\" *ngFor=\"\r\n let restriction of commonServices.selectedFormulation\r\n .Restrictions\r\n \">\r\n <p style=\"\r\n margin: 0px;\r\n display: flex;\r\n align-content: center;\r\n margin-bottom: 10px;\r\n \" *ngIf=\"\r\n restriction.restrictionPreview != null &&\r\n restriction.restrictionPreview != '' &&\r\n restriction.restrictionText != null &&\r\n restriction.restrictionText != ''\r\n \">\r\n <span class=\"rx_restrictionText\" *ngIf=\"restriction.restrictionText.length < 60\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n this.htmlToFormattedText(\r\n restriction.restrictionPreview\r\n )\r\n \"></span></span>\r\n <span class=\"rx_restrictionText\" *ngIf=\"restriction.restrictionText.length > 60\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n this.htmlToFormattedText(\r\n restriction.restrictionPreview\r\n ).substring(0, 60)\r\n \"></span>...\r\n <span>\r\n <a style=\"cursor: pointer; color: #ff9978\" id=\"show-tooltip-id\">Show\r\n More</a></span></span>\r\n <ng-template #tooltipdemo>\r\n <p class=\"rx_tooltip_inner_box\" [innerHTML]=\"restriction.restrictionText\"></p>\r\n </ng-template>\r\n </p>\r\n </li>\r\n </ol>\r\n </div>\r\n </div>\r\n\r\n <div class=\"new_rx_popup_tab_3_small_box\" [style.display]=\"isCurrentMedicineInFavourites() ? 'inline-flex' : null\"\r\n [style.width]=\"isCurrentMedicineInFavourites() ? 'max-content' : null\" *ngIf=\"commonServices.selectedFormulation != null\">\r\n <div style=\"display: inline-block;margin-right: 10px;\" class=\"new_rx_popup_header_box_col\" *ngIf=\"!commonServices.editPrescribedPrescription\">\r\n <button *ngIf=\"commonServices.selectedFormulation != null\" (click)=\"addToFavourites()\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored\"\r\n [class.nextButton]=\"!isCurrentMedicineInFavourites()\"\r\n [class.rmfavbutton]=\"isCurrentMedicineInFavourites()\">\r\n <span *ngIf=\"isCurrentMedicineInFavourites(); else addText\">\r\n Remove from favourites\r\n </span>\r\n <ng-template #addText>+ Add to favourites</ng-template>\r\n </button>\r\n </div>\r\n <div style=\"display: inline-block; margin-right: 10px\">\r\n <span class=\"new_rx_popup_label\">Quantity: </span><input autocomplete=\"off\" type=\"number\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" name=\"qty\"\r\n placeholder=\"\" class=\"new_rx_popup_tab_input\" step=\"1\" [min]=\"0\"\r\n [(ngModel)]=\"commonServices.quantityVal\" (keypress)=\"checkMobile($event)\"\r\n (input)=\"quantityChange()\" (paste)=\"$event.preventDefault()\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" />\r\n </div>\r\n <div style=\"display: inline-block\">\r\n <span class=\"new_rx_popup_label\">Repeats: </span><input autocomplete=\"off\" type=\"number\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true || commonServices.isMedicineRestrict}\"\r\n name=\"rpts\" placeholder=\"\" [min]=\"0\" (input)=\"repeatsChange()\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.repeatsVal\" (paste)=\"$event.preventDefault()\"\r\n (keypress)=\"checkMobile($event)\"\r\n [disabled]=\"commonServices.editPrescribedPrescription || commonServices.isMedicineRestrict\" />\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\"></div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">\r\n Dose:\r\n <span>\r\n <div class=\"rx_new_popup_checkbox\" style=\"margin-top: 0px\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\"><input autocomplete=\"off\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" type=\"checkbox\"\r\n id=\"checkbox1\" class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.unUsualDoseFlag\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400;font-size: 16px;margin-top: -7px;\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Unusual\r\n Dose</span></label>\r\n </div>\r\n </span>\r\n </p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selecteddose\" placeholder=\"Select Dose\"\r\n [(ngModel)]=\"commonServices.doseSearchValue\" (click)=\"doseDropdown()\" />\r\n <div #DoseDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectDoseDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <li (click)=\"selectDoseValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let dose of doseData\" (click)=\"selectDoseValue(dose)\" [class]=\"{\r\n heighlight: dose['text'] == commonServices.doseSearchValue\r\n }\">\r\n {{ dose[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Frequency:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedFrequency:\"\r\n placeholder=\"Select Frequency\" readOnly [(ngModel)]=\"commonServices.freqSearchValue\"\r\n (click)=\"freqDropdown()\" />\r\n <div #FreqDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectFreqDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectFrequencyValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let frequency of frequencyData\" (click)=\"selectFrequencyValue(frequency)\" [class]=\"{\r\n heighlight:\r\n frequency['text'] == commonServices.freqSearchValue\r\n }\">\r\n {{ frequency[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Food:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedFrequency:\"\r\n placeholder=\"Select Food\" readOnly [(ngModel)]=\"commonServices.foodSearchValue\"\r\n (click)=\"foodDropdown()\" />\r\n <div #FoodDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectFoodDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectFoodValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let food of foodData\" (click)=\"selectFoodValue(food)\" [class]=\"{\r\n heighlight: food['text'] == commonServices.foodSearchValue\r\n }\">\r\n {{ food[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Instruction:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"Instruction\"\r\n placeholder=\"Select Instruction\" [(ngModel)]=\"commonServices.InstructionSearchValue\"\r\n (click)=\"instructionDropdown()\" (change)=\"instructionOnChange()\"\r\n (keypress)=\"alphaRestriction($event)\" />\r\n <div #InstructionDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{M_list_box_show: selectInstructionDropdown === true}\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <ng-container *ngIf=\"selectInstructionDropdownList\">\r\n <li (click)=\"ChangeInstruction(null)\" class=\"p-12\"> </li>\r\n <li\r\n [class]=\"item.id == commonServices.complexId && item.text == commonServices.InstructionSearchValue ? 'heighlight' : ''\"\r\n *ngFor=\"let item of instructionData; index as i\" (click)=\"ChangeInstruction(item)\">\r\n {{ item.text }}\r\n <span *ngIf=\"item.userid !== 0\" class=\"span_icon\" style=\"float: right\">\r\n <i class=\"material-icons\" style=\"padding: 5px\"\r\n (click)=\"editInstruction(item.id, item)\">create</i><i class=\"material-icons\"\r\n style=\"margin-left: 10px; padding: 5px\"\r\n (click)=\"deleteInstruction(item.id)\">clear</i></span>\r\n </li>\r\n <li class=\"RX_ADD_dropdown_btn\" (click)=\"addNewInstruction()\">\r\n + Add Complex Instructions\r\n </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectInstructionDropdownList == false\">\r\n <div class=\"complex_instruction_box\">\r\n <p class=\"new_rx_popup_label\" style=\"font-size: 12px; margin: 0\">\r\n Complex Instruction:\r\n </p>\r\n <input autocomplete=\"off\"\r\n class=\"instruction_field_clr mdl-textfield__input new_rx_popup_tab_input \" type=\"text\"\r\n id=\"Instruction\" [(ngModel)]=\"commonServices.Instructiontiltle\"\r\n placeholder=\"Enter Complex Instruction\" />\r\n <p class=\"new_rx_popup_label\" style=\"font-size: 12px; margin: 0\">\r\n Complex Instruction Description:\r\n </p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" maxLength=\"500\"\r\n [(ngModel)]=\"tempInstructionDescription\" placeholder=\"Enter Complex Instruction Description\"\r\n class=\"instruction_field_clr w-100 new_rx_popup_tab_textarea\"></textarea>\r\n <div class=\"RX_ADD_dropdown_btn_1\">\r\n <button (click)=\"clearInstruction()\" class=\"rx-instruction-btn\">Cancel</button>\r\n <button (click)=\"saveInstruction()\" class=\"rx-instruction-btn\">Save</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Route:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedRoute:\"\r\n placeholder=\"Select Route\" [(ngModel)]=\"commonServices.routeSearchValue\" maxlength=\"50\"\r\n (click)=\"routeDropdown()\" (keypress)=\"alphaRestriction($event)\" />\r\n <div #RouteDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectRouteDropdown === true }\">\r\n <div style=\"padding: 10px; position: relative\">\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_route__input\" type=\"text\"\r\n placeholder=\"Search...\" [value]=\"routeDataFilter ? routeDataFilter : ''\"\r\n (keyup)=\"routeFilter($event)\" />\r\n <i class=\"material-icons md-24 new_rx_popup_tab_1_input_search rx-search-icon\">search</i>\r\n </div>\r\n <ul *ngIf=\"filterRouteItems(routeData, routeDataFilter).length != 0\"\r\n class=\"new_rx_popup_tab_1_list rx_dropdown rx_dropdown_route\">\r\n <li *ngFor=\"\r\n let route of filterRouteItems(routeData, routeDataFilter)\r\n \" (click)=\"selectRoutesearcValue(route)\" [class]=\"{\r\n heighlight:\r\n route['routeName'] == commonServices.routeSearchValue\r\n }\">\r\n {{ route[\"routeName\"] }}\r\n </li>\r\n </ul>\r\n <ul *ngIf=\"filterRouteItems(routeData, routeDataFilter).length == 0\"\r\n class=\"new_rx_popup_tab_1_list rx_dropdown rx_dropdown_route\">\r\n <li>no data</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Pro Re Nata Prescription:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.rxPRN\"\r\n (ngModelChange)=\"PRNChange(commonServices.rxPRN)\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Pro\r\n Re Nata\r\n Prescription</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Prescribe As:</p>\r\n <div class=\"rx_new_popup_checkbox\">\r\n <div class=\"rx_new_radiobox_button rx_radio_overall\">\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" class=\"mdl-radio__button custom-radio-button\"\r\n name=\"PrescribeAs\" [value]=\"'Private'\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'private'\" (click)=\"private()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Private</span></label>\r\n\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" checked=\"\"\r\n class=\"mdl-radio__button d-inline radio custom-radio-button\" name=\"PrescribeAs\"\r\n [value]=\"'PBS'\"\r\n [disabled]=\"prescribeAS_PBS || commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'pbs'\" (click)=\"PBS()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{ 'disabled-style': prescribeAS_PBS == true|| commonServices.isFetching || commonServices.editPrescribedPrescription === true}\">PBS</span>\r\n </label>\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" checked=\"\"\r\n class=\"mdl-radio__button d-inline radio custom-radio-button\" name=\"PrescribeAs\"\r\n [value]=\"'RPBS'\"\r\n [disabled]=\"prescribeAS_RPBS || commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'rpbs'\" (click)=\"RPBS()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{ 'disabled-style': prescribeAS_RPBS == true|| commonServices.isFetching || commonServices.editPrescribedPrescription === true}\">RPBS</span>\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"rx_new_popup_checkbox\" *ngIf=\"\r\n commonServices.selectedFormulation != null && commonServices.selectedFormulation.pbsType!=undefined && commonServices.selectedFormulation.pbsType!=null &&\r\n commonServices.selectedFormulation.pbsType.toLowerCase() === 'non pbs' &&\r\n commonServices.patientDetails.dvaNumber != null &&\r\n commonServices.patientDetails.dvaNumber != '' && isNonPbsFlag == false && !isPrescribeAsPrivateOnly\r\n \">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox\" class=\"check_box\"\r\n [checked]=\"commonServices.unlistedRA\" (click)=\"unlistedRA()\"\r\n [(ngModel)]=\"commonServices.unlistedRA\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" />\r\n <span class=\"mdl-checkbox__label check_box_label\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">\r\n Unlisted RA\r\n </span>\r\n </label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{\r\n M_CTG_box_hide: !(\r\n commonServices.patientDetails &&\r\n commonServices.patientDetails.patientCtgFlag == 0 &&\r\n commonServices.patientDetails.patientCtgCoPayment == 0 &&\r\n commonServices.PrescribeAS.toLowerCase() == 'pbs'\r\n )\r\n }\">\r\n <!-- <p class=\"new_rx_popup_label\">CTG/PBS Co Payment:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.CTGCoPayment\"\r\n [checked]=\"commonServices.CTGCoPayment == true\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">CTG/PBS\r\n Co Payment</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Script Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n id=\"RxScriptDate\" placeholder=\" ../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.scriptDate\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Start Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" id=\"RxStartDate\"\r\n placeholder=\" ../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.startDate\" (ngModelChange)=\"commonServices.rxEndDateCalculater()\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">End Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" id=\"RxEndDate\"\r\n placeholder=\"../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.endDate\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Days Between Repeats:</p>\r\n <input autocomplete=\"off\" (paste)=\"$event.preventDefault()\" placeholder=\"Enter Days Between Repeats\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true||commonServices.isMedicineRestrict}\"\r\n class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"number\" id=\"Daybetweenrepeats\" [min]=\"0\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription||commonServices.isMedicineRestrict\"\r\n [(ngModel)]=\"commonServices.daysBtnRepeatsVal\" (keypress)=\"checkMobile($event)\"\r\n (input)=\"dayschange()\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <div>\r\n <p class=\"new_rx_popup_label\">Purpose:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedPurpose:\"\r\n placeholder=\"Select Purpose\" readOnly [(ngModel)]=\"commonServices.purposeSearchValue\"\r\n (click)=\"purposeDropdown()\" />\r\n <div #PurposeDropdown class=\"new_rx_popup_tab_dropdown_list_box new_rx_popup_tab_purpose_box h-160p\"\r\n [class]=\"{ M_list_box_show: selectPurposeDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectPurposeValue(null)\" class=\"p-12\"></li>\r\n <li *ngFor=\"let purpose of purposeData\" (click)=\"selectPurposeValue(purpose)\" [class]=\"{\r\n heighlight:\r\n purpose['lookupText'] ==\r\n commonServices.purposeSearchValue\r\n }\">\r\n {{ purpose[\"lookupText\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{ M_CTG_box_hide: commonServices.isBrandName != true }\">\r\n <!-- <p class=\"new_rx_popup_label\">Substitution:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true || commonServices.isBrandName == false\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.BrandSubstitutesNotAllow\"\r\n (change)=\"this.brandSubstitutesNotAllow(commonServices.BrandSubstitutesNotAllow)\" [checked]=\"\r\n commonServices.BrandSubstitutesNotAllow\r\n ? commonServices.BrandSubstitutesNotAllow\r\n : false\r\n \" /><span class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Brand\r\n Substitution\r\n Not Permitted</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{ M_CTG_box_hide_brand: commonServices.lemi == true }\" id=\"brandnametooltip\"\r\n (mouseleave)=\"hideToolTip()\" (mouseenter)=\"showtooltip(commonServices.lemi,brandtooltip)\">\r\n <!-- <p class=\"new_rx_popup_label\">Brand Name:</p> -->\r\n <ng-template #brandtooltip><span class=\"include_brand_tooltip\">The selected product is LEMI\r\n identified. Therefore it may be\r\n prescribed by the brand name only.</span></ng-template>\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\" [class]=\"{\r\n M_CTG_box_hide_brand_name: commonServices.lemi == true || commonServices.isFetching == true || commonServices.editPrescribedPrescription === true\r\n }\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [checked]=\"commonServices.isBrandName\"\r\n [(ngModel)]=\"commonServices.isBrandName\"\r\n (change)=\"this.isChangeBrandName(commonServices.isBrandName)\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\">Include Brand\r\n Name</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Regulation 24:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.regulation24\"\r\n [checked]=\"commonServices.regulation24\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Regulation\r\n 24</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">DO NOT send to MySL:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.mySLConsent\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">DO\r\n NOT send to MySL</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">\r\n <!-- Pharmacy: -->\r\n <span>\r\n <div class=\"rx_new_popup_checkbox\" style=\"margin-top: 0px\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\"><input autocomplete=\"off\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" type=\"checkbox\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.sendToPharmacy\" (change)=\"sendToPharmacyChange()\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400;font-size: 16px;margin-top: -7px;\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Send\r\n to Pharmacy</span></label>\r\n </div>\r\n </span>\r\n </p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\" readonly\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selecteddose\" placeholder=\"Select Value\"\r\n [(ngModel)]=\"commonServices.sendToPharmacyValue\" (click)=\"stpValueDropdown()\"\r\n [class]=\"{ M_CTG_box_hide: commonServices.sendToPharmacy != true }\" />\r\n <div #stpDropdown class=\"new_rx_popup_tab_dropdown_list_box new_rx_popup_tab_stp_box h-93p\"\r\n [class]=\"{ M_list_box_show: selectstpDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <li (click)=\"selectStpValue(null)\" class=\"p-12\"></li>\r\n <li *ngFor=\"let sendtopharmacy of sendtopharmacyData\" (click)=\"selectStpValue(sendtopharmacy)\">\r\n {{ sendtopharmacy.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Emergency Supply:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.emergencySupply\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Emergency\r\n Supply</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"page == 2\" class=\"new_rx_popup_tab_2\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px; opacity: 1\">\r\n <div\r\n class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div style=\"width: 100%; padding: 0px\" class=\"mdl-grid\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <div class=\"mdl-grid new_rx_popup_tab_1_grid\">\r\n <div class=\"mdl-cell mdl-cell--12-col\">\r\n <p class=\"new_rx_popup_label\">RX</p>\r\n <p class=\"new_rx_popup_label_p\">\r\n <b [innerHTML]=\"commonServices.rxDisplayName\"></b>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\" style=\"margin: 0px\">Quantity: <span\r\n style=\"color: rgb(45, 45, 45); font-weight: 600\">{{ commonServices.quantityVal }}\r\n </span> Repeats: <span style=\"color: rgb(45, 45, 45); font-weight: 600\">\r\n {{ commonServices.repeatsVal }}</span> Default Quantity:{{getDefaultQuantity()}}\r\n Default Repeats:\r\n {{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.repeats!=null?commonServices.selectedFormulation.repeats:\"\"\r\n }}\r\n </p>\r\n <p *ngIf=\"commonServices.doseSearchValue != '' ||commonServices.freqSearchValue != ''\"\r\n class=\"new_rx_popup_label_p\">\r\n <span>{{ commonServices.doseSearchValue }} </span><span>{{ commonServices.freqSearchValue\r\n }}</span>\r\n </p>\r\n <p *ngIf=\"commonServices.foodSearchValue != ''\" class=\"new_rx_popup_label_p\">\r\n {{ commonServices.foodSearchValue }}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n {{InstructionDescription !=\"\" && InstructionDescription!=null?\r\n InstructionDescription:commonServices.InstructionSearchValue!=\"\" &&\r\n commonServices.InstructionSearchValue!=null?commonServices.InstructionSearchValue:\"\"}}\r\n </p>\r\n <p *ngIf=\"commonServices.routeSearchValue != ''\" class=\"new_rx_popup_label_p\">\r\n {{ commonServices.routeSearchValue }}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n P.R.N :\r\n <i *ngIf=\"commonServices.rxPRN\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.rxPRN\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Days Between Repeats:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.daysBtnRepeatsVal)\">{{commonServices.daysBtnRepeatsVal}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.daysBtnRepeatsVal)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Unusual Dose:\r\n <i *ngIf=\"commonServices.unUsualDoseFlag\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.unUsualDoseFlag\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Script Date:\r\n <span>{{this.commonServices.scriptDate|date:'dd-MM-yyyy'}}</span>\r\n\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Start Date:\r\n <span>{{this.commonServices.startDate|date:'dd-MM-yyyy'}}</span>, End Date:\r\n {{this.commonServices.endDate|date:'dd-MM-yyyy'}}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Prescribe As:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.PrescribeAS)\">{{commonServices.PrescribeAS}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.PrescribeAS)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Purpose:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.purposeSearchValue)\">{{commonServices.purposeSearchValue}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.purposeSearchValue)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Include Brand Name:\r\n <i *ngIf=\"commonServices.isBrandName\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.isBrandName\">-</span>,\r\n Brand Substitution Not Permitted:\r\n <i *ngIf=\"commonServices.BrandSubstitutesNotAllow\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.BrandSubstitutesNotAllow\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Regulation 24:\r\n <i *ngIf=\"commonServices.regulation24\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.regulation24\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n CTG/PBS Co Payment:\r\n <i *ngIf=\"commonServices.CTGCoPayment\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.CTGCoPayment\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n DO NOT send to MySL:\r\n <i *ngIf=\"commonServices.mySLConsent\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.mySLConsent\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Send to Pharmacy:\r\n <i *ngIf=\"commonServices.sendToPharmacy\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.sendToPharmacy\">-</span>, Send to Pharmacy Value:\r\n {{!commonServices.IsNullOrEmpty(commonServices.sendToPharmacyValue)?commonServices.sendToPharmacyValue:'-'}}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Emergency Supply:\r\n <i *ngIf=\"commonServices.emergencySupply\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.emergencySupply\">-</span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Note To Pharmacy:</p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"50\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.doctorNotes\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Annotation:</p>\r\n\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"500\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.annotation\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Reason For Prescription:</p>\r\n\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"50\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.prescriptionReason\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\" style=\"text-transform: capitalize;\">\r\n {{this.getStateAuthorityLabel(commonServices.patientDetails.state)}}\r\n </p>\r\n\r\n <p style=\"margin: 0px;margin-top: -8px;margin-bottom: 10px;\">\r\n <span class=\"state-txt-color new_rx_popup_label_p\">(Relevant to\r\n {{ commonServices.patientDetails.state }})</span>\r\n </p>\r\n\r\n <input autocomplete=\"off\" type=\"text\" name=\"approval\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.StateAuthorityNumber\" maxlength=\"25\"\r\n (keypress)=\"authorityNoValidation($event)\" (ngModelChange)=\"authorityNoChange($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{\r\n 'new_rx_no_authority':!showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',commonServices.PrescribeAS,commonServices.rxAuthority,commonServices.unlistedRA)\r\n }\">\r\n <div *ngIf=\"\r\n showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',\r\n commonServices.PrescribeAS,\r\n commonServices.rxAuthority,\r\n commonServices.unlistedRA\r\n )\r\n \">\r\n <div style=\"padding: 0px\" class=\"mdl-grid\">\r\n <div class=\"mdl-cell mdl-cell--8-col mdl-cell--6-col-tablet mdl-cell--4-col-phone\">\r\n <span class=\"new_rx_popup_label_New\">HOTLINE: <span\r\n class=\"new_rx_popup_label_span\">{{commonServices.PrescribeAS ==\r\n 'RPBS'?'1800552580':'1800888333'}}</span></span>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--4-col mdl-cell--2-col-tablet mdl-cell--4-col-phone\">\r\n <div style=\"text-align: right\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Prescriber Name:<span>{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Prescriber Number:<span>{{\r\n commonServices.physicianDetails.prescriberNumber\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Patient Medicare Number:<span>{{\r\n commonServices.patientDetails.medicareNumber\r\n ? commonServices.patientDetails.medicareNumber\r\n : \"\"\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Authority Form No:\r\n <span>{{\r\n commonServices.authorityFormNo\r\n ? commonServices.authorityFormNo\r\n : \"\"\r\n }}</span>\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Authority Item:</p>\r\n <p class=\"authority_item_text\" [innerHTML]=\"commonServices.rxDisplayName\"></p>\r\n\r\n <p class=\"new_rx_popup_label_p new_rx_popup_tab_smallBoxes\" style=\"margin: 0px\">\r\n Quantity:<span style=\"color: rgb(45, 45, 45); font-weight: 600\"> {{ commonServices.quantityVal\r\n }}</span> Repeats:<span style=\"color: rgb(45, 45, 45); font-weight: 600\">\r\n {{ commonServices.repeatsVal }}</span> Default\r\n Quantity:{{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.maxQtyUnits!=null?(commonServices.quantityWithUnitFlag?\"1\r\n x \":\"\")+commonServices.selectedFormulation.maxQtyUnits:\"\"}}\r\n Default\r\n Repeats:{{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.repeats!=null?\r\n commonServices.selectedFormulation.repeats:\"\"}}\r\n </p>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n PBS Listed Indication Authority:\r\n </p>\r\n <div class=\"w-100 new_rx_popup_tab_textarea\"\r\n style=\"min-height: 70px; max-height: 150px; overflow: auto\">\r\n <ul style=\"margin: 0px; padding-left: 15px;list-style: none;padding: 0px;\" *ngIf=\"\r\n this.isShowRestrictions == true &&\r\n commonServices.selectedFormulation.Restrictions !=\r\n null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <li style=\"font-size: 12px;padding: 0px 10px;margin-bottom: 10px;\"\r\n class=\"new_rx_pop_aut_int cursor\" *ngFor=\"\r\n let restriction of commonServices.selectedFormulation\r\n .Restrictions;\r\n index as i\r\n \" [class]=\"{\r\n new_rx_pop_aut_ins_select:\r\n commonServices.pbsListInstructionsId == i\r\n }\">\r\n <p style=\"\r\n margin: 0px;\r\n display: flex;\r\n align-content: center;\r\n margin-bottom: 10px;\r\n \" *ngIf=\"\r\n restriction.restrictionPreview != null &&\r\n restriction.restrictionPreview != '' &&\r\n restriction.restrictionText != null &&\r\n restriction.restrictionText != ''\r\n \">\r\n <span\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \">\r\n <span class=\"rx_restrictionText\" style=\"font-size: 12px;\"\r\n *ngIf=\"restriction.restrictionText.length < 80\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n htmlToFormattedText(\r\n restriction.restrictionPreview\r\n )\r\n \"></span></span></span>\r\n <span class=\"rx_restrictionText\" style=\"font-size: 12px;\"\r\n *ngIf=\"restriction.restrictionText.length > 80\"><b (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \">{{\r\n restriction.restrictionType }}</b> -\r\n <span (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \" [innerHTML]=\"\r\n htmlToFormattedText(\r\n restriction.restrictionPreview\r\n ).substring(0, 80)\r\n \"></span>...\r\n <span>\r\n </span>\r\n <a style=\"cursor: pointer; color: #ff9978\" id=\"show-tooltip-id\">Show\r\n More</a></span>\r\n <ng-template #tooltipdemo>\r\n <p class=\"rx_tooltip_inner_box\" [innerHTML]=\"restriction.restrictionText\"></p>\r\n </ng-template>\r\n </p>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\"\r\n style=\"padding: 0px\">\r\n <!-- <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">PBS Notes:</p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" maxlength=\"500\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n class=\"w-100 new_rx_popup_tab_textarea\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.pbsNotes\"></textarea>\r\n </div> -->\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Indication For This Authority:\r\n </p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" placeholder=\"\"\r\n [class]=\"{'edit-dsable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.pbsListInstructions\" (ngModelChange)=\"onInputChange($event)\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-100\"></textarea>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n {{\r\n getAuthorityLabel(commonServices.patientDetails.state)\r\n }}\r\n </p>\r\n <input autocomplete=\"off\" type=\"text\" name=\"approval\" placeholder=\"\"\r\n [class]=\"{'edit-dsable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.approvalNo\" (ngModelChange)=\"onInputchangeApprovalNo($event)\"\r\n (keypress)=\"authorityNoValidation($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"\r\n !showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',\r\n commonServices.PrescribeAS,\r\n commonServices.rxAuthority,\r\n commonServices.unlistedRA\r\n )\r\n \" style=\"width: 100%;\">\r\n <div style=\"text-align: right\" *ngIf=\"!commonServices.isMedicineRestrict\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n <div class=\"No_Authority_box\">\r\n <p>No Authority Required</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"rx_footer\">\r\n <div class=\"rx_footer_brand\">\r\n <p class=\"ml-10\"><span>Hola Consult | 1.0 <span *ngIf=\"commonServices.sandbox\">| <span\r\n class=\"rx_staging\">This is a sandbox environment</span></span></span></p>\r\n <p class=\"mt-15p\">\r\n <span class=\"rx_popup_footer_text\">\u00A9 2025 Hola Health, a brand of Packapill Pty Ltd | v\r\n 1.1.0 |\r\n <a href=\"https://hola.health/consult-terms\" target=\"_blank\">Terms</a> |\r\n <a href=\"https://hola.health/consult-privacy-policy\" target=\"_blank\">Privacy Policy</a> |\r\n <a href=\"mailto:support@hola.health\" target=\"_blank\">Help</a></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";.loader{border:4px solid #f3f3f3;border-radius:50%;border-top:4px solid #020202;width:30px;height:30px;animation:spin 1s linear infinite;margin-left:18px;margin-top:18px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.m-v4{margin-left:4vh}.rx_loader_button{border:2px solid #f3f3f3;border-radius:50%;border-top:4px solid #005760;width:30px;height:30px;animation:spin 1s linear infinite}.drp-icon{color:#fff;font-size:19px;margin-left:5px}.select-action-btn{display:flex;flex-direction:row;flex-wrap:nowrap;align-content:center;justify-content:center;align-items:center}.select-action-ul{width:80%}.new_rx_popup_mims .React__Overlay_Open_Popup{position:fixed;inset:0;background-color:#00000080!important}.new_rx_popup_mims .new_rx_mims_Overlay_Open_Popup{z-index:9999999!important}.new_rx_popup_mims .ReactModal__Overlay{overflow-y:auto!important}.new_rx_popup_mims .ReactModal_popup{width:100%;padding:0;margin:20px 0 0}.new_rx_popup_mims .ReactModal__Content{margin:auto}.edit-disable-data{pointer-events:none;opacity:.6}.new_rx_popup_btns{position:relative;display:flex;justify-content:flex-end;align-items:center}@media only screen and (max-width: 1023px){.rx_ipad_header_box_1{width:calc(35% - 16px)}.rx_ipad_header_box_2{width:calc(65% - 16px)}.rx_ipad_header_box_3{width:calc(100% - 16px)}.new_mobile_rx_popup_header_text{display:block;text-align:center}}@media screen and (max-width: 767px){.new_rx_popup_btns,.new_mobile_rx_popup_header_text{display:block;text-align:center}.new_mobile_rx_top_bottom_0{margin-top:0;margin-bottom:0}.new_mobile_rx_btn{margin-bottom:5px}}.favourites-toggle-link{color:#0077b6!important;text-decoration:underline;cursor:pointer!important;font-size:14px;font-weight:400;line-height:20px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;outline:none!important;-webkit-tap-highlight-color:transparent}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.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: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.SplashscreenComponent, selector: "app-splashscreen", inputs: ["height"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
4702
4702
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RxComponent, decorators: [{
4703
4703
  type: Component,
4704
- args: [{ selector: 'app-rx', template: "<ng-template #rxwidgets> </ng-template>\r\n<div class=\"new_rx_popup_mims\">\r\n <div\r\n class=\"ReactModal__Overlay ReactModal__Overlay--after-open React__Overlay_Open_Popup new_rx_mims_Overlay_Open_Popup\">\r\n <div class=\"ReactModal__Content ReactModal__Content--after-open React__Content new_rx_mims_React__Content\">\r\n <div class=\"popup new_rx_mims_ReactModal_popup\">\r\n <div>\r\n <app-splashscreen *ngIf=\"PopupScreenLoader\" [height]=\"'height-rx-spin'\"> </app-splashscreen>\r\n <div class=\"page-content\" *ngIf=\"!PopupScreenLoader\">\r\n <div class=\"new_rx_popup_header_box\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--2-col-tablet mdl-cell--3-col-phone new_rx_mobile_fullwidth rx_ipad_header_box_1\"\r\n [class]=\"commonServices.rxid != null && commonServices.rxid !=''?'mdl-cell--2-col':'mdl-cell--3-col'\"\r\n style=\"align-self: center\">\r\n <h3 class=\"new_rx_popup_header_box_text\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-hola-health-logo-1.png\" alt=\"hola_health\"\r\n style=\"width: auto;height: 37px;border-radius: 5px;\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-header-logo.png\" alt=\"\" />\r\n {{commonServices.editPrescription === true ? 'Edit Script' : 'New Script'}}\r\n </h3>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--4-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_desktop_title new_rx_mobile_fullwidth\"\r\n style=\"align-self: center;\">\r\n <p class=\"new_rx_popup_header_box_text\" style=\"justify-content: center;\">\r\n <span style=\"font-weight: 600;\">{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>/<span style=\"width: 100px;\">{{\r\n this.datePipe.transform(\r\n commonServices.patientDetails.dob,\r\n \"dd-MM-yyyy\"\r\n )\r\n }}</span>\r\n </p>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col-tablet mdl-cell--4-col-phone new_rx_popup_header_box_col new_rx_mobile_fullwidth rx_ipad_header_box_2 new_mobile_rx_top_bottom_0\"\r\n style=\"position: relative\"\r\n [class]=\"commonServices.rxid != null && commonServices.rxid !=''?'mdl-cell--6-col':'mdl-cell--5-col'\">\r\n <div class=\"new_rx_popup_btns\">\r\n <button (click)=\"close(null)\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored backButton new_mobile_rx_btn\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Close\r\n </button>\r\n <div style=\"display: inline-block;position: relative\"\r\n *ngIf=\"commonServices.rxid != null && commonServices.rxid !=''\">\r\n <button\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton select-action-btn new_mobile_rx_btn\"\r\n style=\"position: relative;width: 140px;display: flex;flex-direction: row;align-items: center;justify-content: center;padding: 10px !important\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\"\r\n (click)=\"selectActionDropdownopen()\">\r\n <ng-container *ngIf=\"selectionbtnLoader\">\r\n <p class=\"rx_loader_button m-v4\"\r\n style=\"width: 20px;height: 20px;margin: 0px !important;margin-right: 0px !important;margin-left: 0px !important;\">\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectionbtnLoader\">\r\n Select Action <i class=\"material-icons drp-icon\">expand_more</i>\r\n </ng-container>\r\n </button>\r\n <div #selectActionDropdown class=\"new_rx_Prescribe_btn_dropdown_list_box select-action-ul\"\r\n *ngIf=\"selectActionBtnDropdown == true\"\r\n [class]=\"{ M_list_box_show: selectActionBtnDropdown === true }\">\r\n <ul class=\"new_rx_Prescribe_btn_dropdown_list_ul\">\r\n <li\r\n (click)=\"commonServices.rxDetails.status.toLowerCase() == 'draft'?cancelDraft():cancelPrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,4)?'':'edit-disable-data'\">\r\n Cancel</li>\r\n <li (click)=\"printPrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,1)?'':'edit-disable-data'\">\r\n Print</li>\r\n <li (click)=\"reissuePrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,3)?'':'edit-disable-data'\">\r\n Re-Issue</li>\r\n <li (click)=\"ceasePrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,2)?'':'edit-disable-data'\">\r\n Cease</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <button *ngIf=\"page != 1\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored backButton new_mobile_rx_btn\"\r\n (click)=\"back()\" [disabled]=\"this.commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Back\r\n </button>\r\n <button *ngIf=\"page == 1\" (click)=\"pageNumberOneToNext()\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton new_mobile_rx_btn\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Next\r\n </button>\r\n <button class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored new_mobile_rx_btn\"\r\n [class]=\"abortdisable?'nextButton':'abortbutton'\" *ngIf=\"abortBtnFlag\" [disabled]=\"abortdisable\"\r\n (click)=\"prescripeAbort()\"><span *ngIf=\"abortdisable\" class=\"rx_loader\">\r\n <p class=\"rx_loader_button m-v4 rx_btn_spin\">\r\n </p>\r\n </span><span *ngIf=\"!abortdisable\">Abort</span></button>\r\n <div style=\"display: inline-block\" *ngIf=\"page == 2\">\r\n <button\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton new_mobile_rx_btn\"\r\n style=\"position: relative;width: 135px;display: flex;flex-direction: row;align-items: center;justify-content: center\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\"\r\n (click)=\"includeRtpmModal()\">\r\n <ng-container *ngIf=\"commonServices.prescribeMedLoader \">\r\n <p class=\"rx_loader_button m-v4\"\r\n style=\"width: 20px;height: 20px;margin: 0px !important;margin-right: 0px !important;margin-left: 0px !important;\">\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"!this.commonServices.prescribeMedLoader\">\r\n Prescribe <i class=\"material-icons drp-icon\">expand_more</i>\r\n </ng-container>\r\n </button>\r\n <div #PrescribeDropdown class=\"new_rx_Prescribe_btn_dropdown_list_box\"\r\n *ngIf=\"selectPBTNDropdown == true\" [class]=\"{ M_list_box_show: selectPBTNDropdown === true }\">\r\n <ul class=\"new_rx_Prescribe_btn_dropdown_list_ul\">\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\"\r\n (click)=\"MprescribeMed(1)\">E-Prescribe (Draft)</li>\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\" (click)=\"EprescripeSend(1)\" *ngIf=\"!this.commonServices.sendToPharmacy && !this.commonServices.emergencySupply\">E-Prescribe and Send</li>\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\" (click)=\"EprescripeSend(2)\">E-Prescribe and Print</li>\r\n <li [class]=\"{'edit-disable-data': (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'M'&& this.commonServices.rxDetails.status.toLowerCase() != 'draft')|| (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'E')}\"\r\n (click)=\"MprescribeMed(2)\">Prescribe (Draft)</li>\r\n <li [class]=\"{'edit-disable-data': (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase() == 'M'&& this.commonServices.rxDetails.status.toLowerCase() != 'draft') || (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'E')}\"\r\n (click)=\"prescripePrint()\">\r\n Prescribe and Print</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth rx_ipad_header_box_3 new_rx_mobile_title\"\r\n style=\"align-self: center\">\r\n <p class=\"new_rx_popup_header_box_text new_mobile_rx_popup_header_text\">\r\n <span style=\"font-weight: 600\">{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>/<span>{{\r\n this.datePipe.transform(\r\n commonServices.patientDetails.dob,\r\n \"dd-MM-yyyy\"\r\n )\r\n }}</span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"page == 1\" class=\"new_rx_popup_tab_1\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\" *ngIf=\"!commonServices.isMedicineRestrict\">\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div #MedicineDropdown style=\"position: relative\">\r\n <div style=\"position: relative\">\r\n <input autocomplete=\"off\" type=\"text\" name=\"medicine search\" placeholder=\"Search Medicines\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_1_input\"\r\n value=\"{{ mediSearchValue }}\" (input)=\"searchHandler($event)\"\r\n (click)=\"MedicineDropdownList()\" />\r\n <i class=\"material-icons md-24 new_rx_popup_tab_1_input_search\">search</i>\r\n <!-- <mat-icon class=\"new_rx_popup_tab_1_input_search\"></mat-icon> -->\r\n </div>\r\n <div class=\"new_rx_popup_tab_1_list_box\" [class]=\"{\r\n M_list_box_show: selectedMedicineDropdown === true\r\n }\">\r\n <div *ngIf=\"searchMedicineLoader\" class=\"loader\"></div>\r\n <div *ngIf=\"!searchMedicineLoader\" style=\"margin-bottom: 10px;\">\r\n <ul class=\"new_rx_popup_tab_1_list\">\r\n <li *ngFor=\"let medicineList of searchedMedicineList\" [class]=\"getcurrentid(medicineList)\"\r\n (click)=\"\r\n getProductListByName(\r\n medicineList['prodHiddenValue'],\r\n medicineList['prodDisplayValue'],\r\n medicineList['searchBase']\r\n )\r\n \" [innerHTML]=\"medicineList['prodDisplayValue']\"></li>\r\n <li *ngIf=\"searchedMedicineList.length == 0\">No Data</li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"PrimarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--2-col mdl-cell--2-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\"\r\n [class]=\"{'disabledRxContent':this.isNonPbsFlag||(commonServices.rxDetails!=null && commonServices.rxDetails!='' && commonServices.rxDetails.status!=null && commonServices.rxDetails.status!='' && commonServices.rxDetails.status.toLowerCase()!='draft')}\">\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxOnlyPBS\"\r\n (change)=\"onCheckboxChange()\" value=\"PBS/RPBS\" [disabled]=\"this.isNonPbsFlag\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\">PBS/RPBS</span></label>\r\n </div>\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxPrivate\"\r\n (change)=\"onCheckboxChange()\" value=\"Private\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\">Private</span></label>\r\n </div>\r\n </div>\r\n <!-- <div\r\n class=\"mdl-cell mdl-cell--2-col mdl-cell--2-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\"\r\n [class]=\"{'disabledRxContent':this.isNonPbsFlag||(commonServices.rxDetails!=null && commonServices.rxDetails!='' && commonServices.rxDetails.status!=null && commonServices.rxDetails.status!='' && commonServices.rxDetails.status.toLowerCase()!='draft')}\">\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxPrivate\"\r\n (change)=\"onCheckboxChange()\" value=\"Private\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\">Private</span></label>\r\n </div>\r\n </div> -->\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--6-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\">\r\n <div style=\"text-align: right\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\" style=\"margin-left: 8px;\">\r\n <span class=\"favourites-toggle-link\" (click)=\"$event.stopPropagation(); showFavourties()\">\r\n {{ showFavouriteMed ? 'Hide favourites' : 'Show favourites' }}\r\n </span>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--7-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div class=\"new_rx_popup_table_box\">\r\n <p class=\"new_rx_popup_tab_title\" style=\"padding: 5px 10px; margin: 0px\">\r\n Available Formulations:\r\n </p>\r\n <div *ngIf=\"!showFavouriteMed\">\r\n <div *ngIf=\"onclickMedicineLoader\" class=\"loader m-v4\"></div>\r\n <div *ngIf=\"!onclickMedicineLoader\">\r\n <div *ngIf=\"\r\n commonServices.selectedMedicineList == null ||\r\n commonServices.selectedMedicineList.length == 0\r\n \" class=\"noDataPrescribe\">\r\n <span>No Data</span>\r\n </div>\r\n <div class=\"new_rx_popup_box_container\" *ngFor=\"\r\n let med of commonServices.selectedMedicineList;\r\n index as i\r\n \">\r\n\r\n <div class=\"mdl-grid new_rx_popup_box\" [class]=\"getClassForMed(med)\"\r\n (click)=\"selectFormulation(med, i)\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_box_header\" [innerHTML]=\"med.productName\"></p>\r\n <p class=\"new_rx_popup_box_text\">\r\n <span><b>Quantity:</b>\r\n {{med.pbsType!=undefined && med.pbsType!=null && med.pbsType.toLowerCase() == \"non pbs\"\r\n ? med.numberOfPack + \"x\" + med.unitPerPack\r\n : med.maxQtyUnits\r\n }}</span><span><b>Rpts:</b> {{ med.repeats }}</span><span\r\n *ngIf=\"!commonServices.isMedicineRestrict\"><b>Restriction:</b>\r\n {{med.Restrictions!=undefined &&\r\n med.Restrictions != null && med.Restrictions != \"\"\r\n ? med.pbsType +\r\n \" (\" +\r\n getRestrictions(med.Restrictions) +\r\n \") \"\r\n : (med.pbsType!=undefined&&med.pbsType!=null?med.pbsType:\"\")\r\n }} </span><span><b>Generic Name: </b>\r\n <span [innerHTML]=\"med.genericName\"></span></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"SecondarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFavouriteMed\">\r\n\r\n <div *ngIf=\"onclickMedicineLoader\" class=\"loader m-v4\"></div>\r\n <div *ngIf=\"!onclickMedicineLoader\">\r\n <div *ngIf=\"\r\n commonServices.favouriteMedicineList == null ||\r\n commonServices.favouriteMedicineList.length == 0\r\n \" class=\"noDataPrescribe\">\r\n <span>No Favourites</span>\r\n </div>\r\n <div class=\"new_rx_popup_box_container\" *ngFor=\"\r\n let med of commonServices.favouriteMedicineList;\r\n index as i\r\n \">\r\n\r\n <div class=\"mdl-grid new_rx_popup_box\" [class]=\"getClassForFavouriteMed(med)\"\r\n (click)=\"favouriteMedicineLoading(med)\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_box_header\" [innerHTML]=\"med.productName\"></p>\r\n <p class=\"new_rx_popup_box_text\">\r\n <span><b>Quantity:</b>\r\n {{med.quantity}}\r\n </span><span><b>Rpts:</b> {{ med.repeats }}</span>\r\n <span *ngIf=\"!commonServices.isMedicineRestrict\"><b>Restriction:</b>\r\n {{med.restriction}}\r\n </span><span><b>Generic Name: </b>\r\n <span [innerHTML]=\"med.genericName\"></span></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"SecondarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"favMedicineLoader\" class=\"loader\"></div>\r\n <div *ngIf=\"!favMedicineLoader\"\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div class=\"mdl-grid new_rx_popup_tab_1_grid new_rx_popup_tab_1_box\"\r\n *ngIf=\"commonServices.selectedFormulation != null\">\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_tab_title\" style=\"margin-bottom: 5px\"\r\n [innerHTML]=\"commonServices.selectedFormulation != null&&commonServices.selectedFormulation.productName!=undefined && commonServices.selectedFormulation.productName!=null? commonServices.selectedFormulation.productName: ''\">\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col\">\r\n <p class=\"new_rx_popup_label\">\r\n Generic Name:<span\r\n [innerHTML]=\"commonServices.selectedFormulation != null&&commonServices.selectedFormulation.genericName!=undefined && commonServices.selectedFormulation.genericName!=null? commonServices.selectedFormulation.genericName : ''\"></span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\">\r\n <p class=\"new_rx_popup_label\" *ngIf=\"commonServices.isBrandName\">\r\n Brand Name:<span [innerHTML]=\"\r\n getBrandName(commonServices.selectedFormulation)\r\n \">\r\n </span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n Schedule:<span>{{\r\n commonServices.selectedFormulation != null &&\r\n commonServices.selectedFormulation.poisonClassification !=\r\n undefined && commonServices.selectedFormulation.poisonClassification!=null &&\r\n commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses!=undefined && commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses!=null && commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses.length>0\r\n ? commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses[0]\r\n : \"No Scheduled Information Available\"\r\n }}</span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n PBS Listing:<span>{{commonServices.selectedFormulation.pbsType!=undefined &&\r\n commonServices.selectedFormulation.pbsType!=null? commonServices.selectedFormulation.pbsType :\r\n '' }}\r\n {{\r\n commonServices.selectedFormulation.pbsCode!=undefined &&\r\n commonServices.selectedFormulation.pbsCode!=null\r\n ? \" (\" +\r\n commonServices.selectedFormulation.pbsCode +\r\n \")\"\r\n : \"\"\r\n }}</span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n <span style=\"margin:0px ;\">\r\n Max Quantity =\r\n {{getMaxQuantity()}}\r\n and Repeats =\r\n {{commonServices.selectedFormulation!=null? commonServices.selectedFormulation.repeats\r\n :\"\"}}</span>\r\n </p>\r\n\r\n <p class=\"new_rx_popup_label\" *ngIf=\"\r\n commonServices.selectedFormulation != null && commonServices.selectedFormulation.pregnancyCategory!=undefined && \r\n commonServices.selectedFormulation.pregnancyCategory != null && commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode!=undefined && commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode!=null\r\n \">\r\n Pregnancy Category:<span>{{\r\n commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode\r\n }}\r\n </span>\r\n <span *ngIf=\"commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote !=undefined && \r\n commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote != null &&\r\n commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote != ''\r\n \">\r\n AdditionalNote:\r\n <span *ngFor=\"\r\n let item of commonServices.selectedFormulation\r\n .pregnancyCategory.additionalNote\r\n \" [innerHTML]=\"item\">\r\n </span>\r\n </span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\" *ngIf=\"\r\n this.isShowRestrictions == true && commonServices.selectedFormulation.Restrictions!=undefined && \r\n commonServices.selectedFormulation.Restrictions != null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <p class=\"new_rx_popup_label\">Restrictions:</p>\r\n <ol style=\"margin: 0px; padding-left: 15px\" *ngIf=\"commonServices.selectedFormulation.Restrictions!=undefined && \r\n commonServices.selectedFormulation.Restrictions != null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <li class=\"new_rx_pop_aut_int\" *ngFor=\"\r\n let restriction of commonServices.selectedFormulation\r\n .Restrictions\r\n \">\r\n <p style=\"\r\n margin: 0px;\r\n display: flex;\r\n align-content: center;\r\n margin-bottom: 10px;\r\n \" *ngIf=\"\r\n restriction.restrictionPreview != null &&\r\n restriction.restrictionPreview != '' &&\r\n restriction.restrictionText != null &&\r\n restriction.restrictionText != ''\r\n \">\r\n <span class=\"rx_restrictionText\" *ngIf=\"restriction.restrictionText.length < 60\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n this.htmlToFormattedText(\r\n restriction.restrictionPreview\r\n )\r\n \"></span></span>\r\n <span class=\"rx_restrictionText\" *ngIf=\"restriction.restrictionText.length > 60\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n this.htmlToFormattedText(\r\n restriction.restrictionPreview\r\n ).substring(0, 60)\r\n \"></span>...\r\n <span>\r\n <a style=\"cursor: pointer; color: #ff9978\" id=\"show-tooltip-id\">Show\r\n More</a></span></span>\r\n <ng-template #tooltipdemo>\r\n <p class=\"rx_tooltip_inner_box\" [innerHTML]=\"restriction.restrictionText\"></p>\r\n </ng-template>\r\n </p>\r\n </li>\r\n </ol>\r\n </div>\r\n </div>\r\n\r\n <div class=\"new_rx_popup_tab_3_small_box\" [style.display]=\"isCurrentMedicineInFavourites() ? 'inline-flex' : null\"\r\n [style.width]=\"isCurrentMedicineInFavourites() ? 'max-content' : null\" *ngIf=\"commonServices.selectedFormulation != null\">\r\n <div style=\"display: inline-block;margin-right: 10px;\" class=\"new_rx_popup_header_box_col\">\r\n <button *ngIf=\"commonServices.selectedFormulation != null\" (click)=\"addToFavourites()\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored\"\r\n [class.nextButton]=\"!isCurrentMedicineInFavourites()\"\r\n [class.rmfavbutton]=\"isCurrentMedicineInFavourites()\">\r\n <span *ngIf=\"isCurrentMedicineInFavourites(); else addText\">\r\n Remove from favourites\r\n </span>\r\n <ng-template #addText>+ Add to favourites</ng-template>\r\n </button>\r\n </div>\r\n <div style=\"display: inline-block; margin-right: 10px\">\r\n <span class=\"new_rx_popup_label\">Quantity: </span><input autocomplete=\"off\" type=\"number\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" name=\"qty\"\r\n placeholder=\"\" class=\"new_rx_popup_tab_input\" step=\"1\" [min]=\"0\"\r\n [(ngModel)]=\"commonServices.quantityVal\" (keypress)=\"checkMobile($event)\"\r\n (input)=\"quantityChange()\" (paste)=\"$event.preventDefault()\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" />\r\n </div>\r\n <div style=\"display: inline-block\">\r\n <span class=\"new_rx_popup_label\">Repeats: </span><input autocomplete=\"off\" type=\"number\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true || commonServices.isMedicineRestrict}\"\r\n name=\"rpts\" placeholder=\"\" [min]=\"0\" (input)=\"repeatsChange()\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.repeatsVal\" (paste)=\"$event.preventDefault()\"\r\n (keypress)=\"checkMobile($event)\"\r\n [disabled]=\"commonServices.editPrescribedPrescription || commonServices.isMedicineRestrict\" />\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\"></div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">\r\n Dose:\r\n <span>\r\n <div class=\"rx_new_popup_checkbox\" style=\"margin-top: 0px\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\"><input autocomplete=\"off\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" type=\"checkbox\"\r\n id=\"checkbox1\" class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.unUsualDoseFlag\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400;font-size: 16px;margin-top: -7px;\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Unusual\r\n Dose</span></label>\r\n </div>\r\n </span>\r\n </p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selecteddose\" placeholder=\"Select Dose\"\r\n [(ngModel)]=\"commonServices.doseSearchValue\" (click)=\"doseDropdown()\" />\r\n <div #DoseDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectDoseDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <li (click)=\"selectDoseValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let dose of doseData\" (click)=\"selectDoseValue(dose)\" [class]=\"{\r\n heighlight: dose['text'] == commonServices.doseSearchValue\r\n }\">\r\n {{ dose[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Frequency:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedFrequency:\"\r\n placeholder=\"Select Frequency\" readOnly [(ngModel)]=\"commonServices.freqSearchValue\"\r\n (click)=\"freqDropdown()\" />\r\n <div #FreqDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectFreqDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectFrequencyValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let frequency of frequencyData\" (click)=\"selectFrequencyValue(frequency)\" [class]=\"{\r\n heighlight:\r\n frequency['text'] == commonServices.freqSearchValue\r\n }\">\r\n {{ frequency[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Food:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedFrequency:\"\r\n placeholder=\"Select Food\" readOnly [(ngModel)]=\"commonServices.foodSearchValue\"\r\n (click)=\"foodDropdown()\" />\r\n <div #FoodDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectFoodDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectFoodValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let food of foodData\" (click)=\"selectFoodValue(food)\" [class]=\"{\r\n heighlight: food['text'] == commonServices.foodSearchValue\r\n }\">\r\n {{ food[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Instruction:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"Instruction\"\r\n placeholder=\"Select Instruction\" [(ngModel)]=\"commonServices.InstructionSearchValue\"\r\n (click)=\"instructionDropdown()\" (change)=\"instructionOnChange()\"\r\n (keypress)=\"alphaRestriction($event)\" />\r\n <div #InstructionDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{M_list_box_show: selectInstructionDropdown === true}\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <ng-container *ngIf=\"selectInstructionDropdownList\">\r\n <li (click)=\"ChangeInstruction(null)\" class=\"p-12\"> </li>\r\n <li\r\n [class]=\"item.id == commonServices.complexId && item.text == commonServices.InstructionSearchValue ? 'heighlight' : ''\"\r\n *ngFor=\"let item of instructionData; index as i\" (click)=\"ChangeInstruction(item)\">\r\n {{ item.text }}\r\n <span *ngIf=\"item.userid !== 0\" class=\"span_icon\" style=\"float: right\">\r\n <i class=\"material-icons\" style=\"padding: 5px\"\r\n (click)=\"editInstruction(item.id, item)\">create</i><i class=\"material-icons\"\r\n style=\"margin-left: 10px; padding: 5px\"\r\n (click)=\"deleteInstruction(item.id)\">clear</i></span>\r\n </li>\r\n <li class=\"RX_ADD_dropdown_btn\" (click)=\"addNewInstruction()\">\r\n + Add Complex Instructions\r\n </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectInstructionDropdownList == false\">\r\n <div class=\"complex_instruction_box\">\r\n <p class=\"new_rx_popup_label\" style=\"font-size: 12px; margin: 0\">\r\n Complex Instruction:\r\n </p>\r\n <input autocomplete=\"off\"\r\n class=\"instruction_field_clr mdl-textfield__input new_rx_popup_tab_input \" type=\"text\"\r\n id=\"Instruction\" [(ngModel)]=\"commonServices.Instructiontiltle\"\r\n placeholder=\"Enter Complex Instruction\" />\r\n <p class=\"new_rx_popup_label\" style=\"font-size: 12px; margin: 0\">\r\n Complex Instruction Description:\r\n </p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" maxLength=\"500\"\r\n [(ngModel)]=\"tempInstructionDescription\" placeholder=\"Enter Complex Instruction Description\"\r\n class=\"instruction_field_clr w-100 new_rx_popup_tab_textarea\"></textarea>\r\n <div class=\"RX_ADD_dropdown_btn_1\">\r\n <button (click)=\"clearInstruction()\" class=\"rx-instruction-btn\">Cancel</button>\r\n <button (click)=\"saveInstruction()\" class=\"rx-instruction-btn\">Save</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Route:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedRoute:\"\r\n placeholder=\"Select Route\" [(ngModel)]=\"commonServices.routeSearchValue\" maxlength=\"50\"\r\n (click)=\"routeDropdown()\" (keypress)=\"alphaRestriction($event)\" />\r\n <div #RouteDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectRouteDropdown === true }\">\r\n <div style=\"padding: 10px; position: relative\">\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_route__input\" type=\"text\"\r\n placeholder=\"Search...\" [value]=\"routeDataFilter ? routeDataFilter : ''\"\r\n (keyup)=\"routeFilter($event)\" />\r\n <i class=\"material-icons md-24 new_rx_popup_tab_1_input_search rx-search-icon\">search</i>\r\n </div>\r\n <ul *ngIf=\"filterRouteItems(routeData, routeDataFilter).length != 0\"\r\n class=\"new_rx_popup_tab_1_list rx_dropdown rx_dropdown_route\">\r\n <li *ngFor=\"\r\n let route of filterRouteItems(routeData, routeDataFilter)\r\n \" (click)=\"selectRoutesearcValue(route)\" [class]=\"{\r\n heighlight:\r\n route['routeName'] == commonServices.routeSearchValue\r\n }\">\r\n {{ route[\"routeName\"] }}\r\n </li>\r\n </ul>\r\n <ul *ngIf=\"filterRouteItems(routeData, routeDataFilter).length == 0\"\r\n class=\"new_rx_popup_tab_1_list rx_dropdown rx_dropdown_route\">\r\n <li>no data</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Pro Re Nata Prescription:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.rxPRN\"\r\n (ngModelChange)=\"PRNChange(commonServices.rxPRN)\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Pro\r\n Re Nata\r\n Prescription</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Prescribe As:</p>\r\n <div class=\"rx_new_popup_checkbox\">\r\n <div class=\"rx_new_radiobox_button rx_radio_overall\">\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" class=\"mdl-radio__button custom-radio-button\"\r\n name=\"PrescribeAs\" [value]=\"'Private'\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'private'\" (click)=\"private()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Private</span></label>\r\n\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" checked=\"\"\r\n class=\"mdl-radio__button d-inline radio custom-radio-button\" name=\"PrescribeAs\"\r\n [value]=\"'PBS'\"\r\n [disabled]=\"prescribeAS_PBS || commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'pbs'\" (click)=\"PBS()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{ 'disabled-style': prescribeAS_PBS == true|| commonServices.isFetching || commonServices.editPrescribedPrescription === true}\">PBS</span>\r\n </label>\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" checked=\"\"\r\n class=\"mdl-radio__button d-inline radio custom-radio-button\" name=\"PrescribeAs\"\r\n [value]=\"'RPBS'\"\r\n [disabled]=\"prescribeAS_RPBS || commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'rpbs'\" (click)=\"RPBS()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{ 'disabled-style': prescribeAS_RPBS == true|| commonServices.isFetching || commonServices.editPrescribedPrescription === true}\">RPBS</span>\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"rx_new_popup_checkbox\" *ngIf=\"\r\n commonServices.selectedFormulation != null && commonServices.selectedFormulation.pbsType!=undefined && commonServices.selectedFormulation.pbsType!=null &&\r\n commonServices.selectedFormulation.pbsType.toLowerCase() === 'non pbs' &&\r\n commonServices.patientDetails.dvaNumber != null &&\r\n commonServices.patientDetails.dvaNumber != '' && isNonPbsFlag == false && !isPrescribeAsPrivateOnly\r\n \">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox\" class=\"check_box\"\r\n [checked]=\"commonServices.unlistedRA\" (click)=\"unlistedRA()\"\r\n [(ngModel)]=\"commonServices.unlistedRA\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" />\r\n <span class=\"mdl-checkbox__label check_box_label\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">\r\n Unlisted RA\r\n </span>\r\n </label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{\r\n M_CTG_box_hide: !(\r\n commonServices.patientDetails &&\r\n commonServices.patientDetails.patientCtgFlag == 0 &&\r\n commonServices.patientDetails.patientCtgCoPayment == 0 &&\r\n commonServices.PrescribeAS.toLowerCase() == 'pbs'\r\n )\r\n }\">\r\n <!-- <p class=\"new_rx_popup_label\">CTG/PBS Co Payment:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.CTGCoPayment\"\r\n [checked]=\"commonServices.CTGCoPayment == true\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">CTG/PBS\r\n Co Payment</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Script Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n id=\"RxScriptDate\" placeholder=\" ../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.scriptDate\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Start Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" id=\"RxStartDate\"\r\n placeholder=\" ../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.startDate\" (ngModelChange)=\"commonServices.rxEndDateCalculater()\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">End Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" id=\"RxEndDate\"\r\n placeholder=\"../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.endDate\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Days Between Repeats:</p>\r\n <input autocomplete=\"off\" (paste)=\"$event.preventDefault()\" placeholder=\"Enter Days Between Repeats\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true||commonServices.isMedicineRestrict}\"\r\n class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"number\" id=\"Daybetweenrepeats\" [min]=\"0\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription||commonServices.isMedicineRestrict\"\r\n [(ngModel)]=\"commonServices.daysBtnRepeatsVal\" (keypress)=\"checkMobile($event)\"\r\n (input)=\"dayschange()\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <div>\r\n <p class=\"new_rx_popup_label\">Purpose:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedPurpose:\"\r\n placeholder=\"Select Purpose\" readOnly [(ngModel)]=\"commonServices.purposeSearchValue\"\r\n (click)=\"purposeDropdown()\" />\r\n <div #PurposeDropdown class=\"new_rx_popup_tab_dropdown_list_box new_rx_popup_tab_purpose_box h-160p\"\r\n [class]=\"{ M_list_box_show: selectPurposeDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectPurposeValue(null)\" class=\"p-12\"></li>\r\n <li *ngFor=\"let purpose of purposeData\" (click)=\"selectPurposeValue(purpose)\" [class]=\"{\r\n heighlight:\r\n purpose['lookupText'] ==\r\n commonServices.purposeSearchValue\r\n }\">\r\n {{ purpose[\"lookupText\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{ M_CTG_box_hide: commonServices.isBrandName != true }\">\r\n <!-- <p class=\"new_rx_popup_label\">Substitution:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true || commonServices.isBrandName == false\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.BrandSubstitutesNotAllow\"\r\n (change)=\"this.brandSubstitutesNotAllow(commonServices.BrandSubstitutesNotAllow)\" [checked]=\"\r\n commonServices.BrandSubstitutesNotAllow\r\n ? commonServices.BrandSubstitutesNotAllow\r\n : false\r\n \" /><span class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Brand\r\n Substitution\r\n Not Permitted</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{ M_CTG_box_hide_brand: commonServices.lemi == true }\" id=\"brandnametooltip\"\r\n (mouseleave)=\"hideToolTip()\" (mouseenter)=\"showtooltip(commonServices.lemi,brandtooltip)\">\r\n <!-- <p class=\"new_rx_popup_label\">Brand Name:</p> -->\r\n <ng-template #brandtooltip><span class=\"include_brand_tooltip\">The selected product is LEMI\r\n identified. Therefore it may be\r\n prescribed by the brand name only.</span></ng-template>\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\" [class]=\"{\r\n M_CTG_box_hide_brand_name: commonServices.lemi == true || commonServices.isFetching == true || commonServices.editPrescribedPrescription === true\r\n }\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [checked]=\"commonServices.isBrandName\"\r\n [(ngModel)]=\"commonServices.isBrandName\"\r\n (change)=\"this.isChangeBrandName(commonServices.isBrandName)\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\">Include Brand\r\n Name</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Regulation 24:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.regulation24\"\r\n [checked]=\"commonServices.regulation24\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Regulation\r\n 24</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">DO NOT send to MySL:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.mySLConsent\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">DO\r\n NOT send to MySL</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">\r\n <!-- Pharmacy: -->\r\n <span>\r\n <div class=\"rx_new_popup_checkbox\" style=\"margin-top: 0px\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\"><input autocomplete=\"off\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" type=\"checkbox\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.sendToPharmacy\" (change)=\"sendToPharmacyChange()\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400;font-size: 16px;margin-top: -7px;\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Send\r\n to Pharmacy</span></label>\r\n </div>\r\n </span>\r\n </p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\" readonly\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selecteddose\" placeholder=\"Select Value\"\r\n [(ngModel)]=\"commonServices.sendToPharmacyValue\" (click)=\"stpValueDropdown()\"\r\n [class]=\"{ M_CTG_box_hide: commonServices.sendToPharmacy != true }\" />\r\n <div #stpDropdown class=\"new_rx_popup_tab_dropdown_list_box new_rx_popup_tab_stp_box h-93p\"\r\n [class]=\"{ M_list_box_show: selectstpDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <li (click)=\"selectStpValue(null)\" class=\"p-12\"></li>\r\n <li *ngFor=\"let sendtopharmacy of sendtopharmacyData\" (click)=\"selectStpValue(sendtopharmacy)\">\r\n {{ sendtopharmacy.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Emergency Supply:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.emergencySupply\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Emergency\r\n Supply</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"page == 2\" class=\"new_rx_popup_tab_2\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px; opacity: 1\">\r\n <div\r\n class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div style=\"width: 100%; padding: 0px\" class=\"mdl-grid\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <div class=\"mdl-grid new_rx_popup_tab_1_grid\">\r\n <div class=\"mdl-cell mdl-cell--12-col\">\r\n <p class=\"new_rx_popup_label\">RX</p>\r\n <p class=\"new_rx_popup_label_p\">\r\n <b [innerHTML]=\"commonServices.rxDisplayName\"></b>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\" style=\"margin: 0px\">Quantity: <span\r\n style=\"color: rgb(45, 45, 45); font-weight: 600\">{{ commonServices.quantityVal }}\r\n </span> Repeats: <span style=\"color: rgb(45, 45, 45); font-weight: 600\">\r\n {{ commonServices.repeatsVal }}</span> Default Quantity:{{getDefaultQuantity()}}\r\n Default Repeats:\r\n {{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.repeats!=null?commonServices.selectedFormulation.repeats:\"\"\r\n }}\r\n </p>\r\n <p *ngIf=\"commonServices.doseSearchValue != '' ||commonServices.freqSearchValue != ''\"\r\n class=\"new_rx_popup_label_p\">\r\n <span>{{ commonServices.doseSearchValue }} </span><span>{{ commonServices.freqSearchValue\r\n }}</span>\r\n </p>\r\n <p *ngIf=\"commonServices.foodSearchValue != ''\" class=\"new_rx_popup_label_p\">\r\n {{ commonServices.foodSearchValue }}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n {{InstructionDescription !=\"\" && InstructionDescription!=null?\r\n InstructionDescription:commonServices.InstructionSearchValue!=\"\" &&\r\n commonServices.InstructionSearchValue!=null?commonServices.InstructionSearchValue:\"\"}}\r\n </p>\r\n <p *ngIf=\"commonServices.routeSearchValue != ''\" class=\"new_rx_popup_label_p\">\r\n {{ commonServices.routeSearchValue }}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n P.R.N :\r\n <i *ngIf=\"commonServices.rxPRN\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.rxPRN\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Days Between Repeats:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.daysBtnRepeatsVal)\">{{commonServices.daysBtnRepeatsVal}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.daysBtnRepeatsVal)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Unusual Dose:\r\n <i *ngIf=\"commonServices.unUsualDoseFlag\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.unUsualDoseFlag\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Script Date:\r\n <span>{{this.commonServices.scriptDate|date:'dd-MM-yyyy'}}</span>\r\n\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Start Date:\r\n <span>{{this.commonServices.startDate|date:'dd-MM-yyyy'}}</span>, End Date:\r\n {{this.commonServices.endDate|date:'dd-MM-yyyy'}}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Prescribe As:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.PrescribeAS)\">{{commonServices.PrescribeAS}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.PrescribeAS)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Purpose:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.purposeSearchValue)\">{{commonServices.purposeSearchValue}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.purposeSearchValue)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Include Brand Name:\r\n <i *ngIf=\"commonServices.isBrandName\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.isBrandName\">-</span>,\r\n Brand Substitution Not Permitted:\r\n <i *ngIf=\"commonServices.BrandSubstitutesNotAllow\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.BrandSubstitutesNotAllow\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Regulation 24:\r\n <i *ngIf=\"commonServices.regulation24\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.regulation24\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n CTG/PBS Co Payment:\r\n <i *ngIf=\"commonServices.CTGCoPayment\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.CTGCoPayment\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n DO NOT send to MySL:\r\n <i *ngIf=\"commonServices.mySLConsent\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.mySLConsent\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Send to Pharmacy:\r\n <i *ngIf=\"commonServices.sendToPharmacy\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.sendToPharmacy\">-</span>, Send to Pharmacy Value:\r\n {{!commonServices.IsNullOrEmpty(commonServices.sendToPharmacyValue)?commonServices.sendToPharmacyValue:'-'}}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Emergency Supply:\r\n <i *ngIf=\"commonServices.emergencySupply\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.emergencySupply\">-</span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Note To Pharmacy:</p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"50\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.doctorNotes\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Annotation:</p>\r\n\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"500\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.annotation\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Reason For Prescription:</p>\r\n\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"50\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.prescriptionReason\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\" style=\"text-transform: capitalize;\">\r\n {{this.getStateAuthorityLabel(commonServices.patientDetails.state)}}\r\n </p>\r\n\r\n <p style=\"margin: 0px;margin-top: -8px;margin-bottom: 10px;\">\r\n <span class=\"state-txt-color new_rx_popup_label_p\">(Relevant to\r\n {{ commonServices.patientDetails.state }})</span>\r\n </p>\r\n\r\n <input autocomplete=\"off\" type=\"text\" name=\"approval\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.StateAuthorityNumber\" maxlength=\"25\"\r\n (keypress)=\"authorityNoValidation($event)\" (ngModelChange)=\"authorityNoChange($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{\r\n 'new_rx_no_authority':!showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',commonServices.PrescribeAS,commonServices.rxAuthority,commonServices.unlistedRA)\r\n }\">\r\n <div *ngIf=\"\r\n showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',\r\n commonServices.PrescribeAS,\r\n commonServices.rxAuthority,\r\n commonServices.unlistedRA\r\n )\r\n \">\r\n <div style=\"padding: 0px\" class=\"mdl-grid\">\r\n <div class=\"mdl-cell mdl-cell--8-col mdl-cell--6-col-tablet mdl-cell--4-col-phone\">\r\n <span class=\"new_rx_popup_label_New\">HOTLINE: <span\r\n class=\"new_rx_popup_label_span\">{{commonServices.PrescribeAS ==\r\n 'RPBS'?'1800552580':'1800888333'}}</span></span>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--4-col mdl-cell--2-col-tablet mdl-cell--4-col-phone\">\r\n <div style=\"text-align: right\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Prescriber Name:<span>{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Prescriber Number:<span>{{\r\n commonServices.physicianDetails.prescriberNumber\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Patient Medicare Number:<span>{{\r\n commonServices.patientDetails.medicareNumber\r\n ? commonServices.patientDetails.medicareNumber\r\n : \"\"\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Authority Form No:\r\n <span>{{\r\n commonServices.authorityFormNo\r\n ? commonServices.authorityFormNo\r\n : \"\"\r\n }}</span>\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Authority Item:</p>\r\n <p class=\"authority_item_text\" [innerHTML]=\"commonServices.rxDisplayName\"></p>\r\n\r\n <p class=\"new_rx_popup_label_p new_rx_popup_tab_smallBoxes\" style=\"margin: 0px\">\r\n Quantity:<span style=\"color: rgb(45, 45, 45); font-weight: 600\"> {{ commonServices.quantityVal\r\n }}</span> Repeats:<span style=\"color: rgb(45, 45, 45); font-weight: 600\">\r\n {{ commonServices.repeatsVal }}</span> Default\r\n Quantity:{{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.maxQtyUnits!=null?(commonServices.quantityWithUnitFlag?\"1\r\n x \":\"\")+commonServices.selectedFormulation.maxQtyUnits:\"\"}}\r\n Default\r\n Repeats:{{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.repeats!=null?\r\n commonServices.selectedFormulation.repeats:\"\"}}\r\n </p>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n PBS Listed Indication Authority:\r\n </p>\r\n <div class=\"w-100 new_rx_popup_tab_textarea\"\r\n style=\"min-height: 70px; max-height: 150px; overflow: auto\">\r\n <ul style=\"margin: 0px; padding-left: 15px;list-style: none;padding: 0px;\" *ngIf=\"\r\n this.isShowRestrictions == true &&\r\n commonServices.selectedFormulation.Restrictions !=\r\n null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <li style=\"font-size: 12px;padding: 0px 10px;margin-bottom: 10px;\"\r\n class=\"new_rx_pop_aut_int cursor\" *ngFor=\"\r\n let restriction of commonServices.selectedFormulation\r\n .Restrictions;\r\n index as i\r\n \" [class]=\"{\r\n new_rx_pop_aut_ins_select:\r\n commonServices.pbsListInstructionsId == i\r\n }\">\r\n <p style=\"\r\n margin: 0px;\r\n display: flex;\r\n align-content: center;\r\n margin-bottom: 10px;\r\n \" *ngIf=\"\r\n restriction.restrictionPreview != null &&\r\n restriction.restrictionPreview != '' &&\r\n restriction.restrictionText != null &&\r\n restriction.restrictionText != ''\r\n \">\r\n <span\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \">\r\n <span class=\"rx_restrictionText\" style=\"font-size: 12px;\"\r\n *ngIf=\"restriction.restrictionText.length < 80\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n htmlToFormattedText(\r\n restriction.restrictionPreview\r\n )\r\n \"></span></span></span>\r\n <span class=\"rx_restrictionText\" style=\"font-size: 12px;\"\r\n *ngIf=\"restriction.restrictionText.length > 80\"><b (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \">{{\r\n restriction.restrictionType }}</b> -\r\n <span (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \" [innerHTML]=\"\r\n htmlToFormattedText(\r\n restriction.restrictionPreview\r\n ).substring(0, 80)\r\n \"></span>...\r\n <span>\r\n </span>\r\n <a style=\"cursor: pointer; color: #ff9978\" id=\"show-tooltip-id\">Show\r\n More</a></span>\r\n <ng-template #tooltipdemo>\r\n <p class=\"rx_tooltip_inner_box\" [innerHTML]=\"restriction.restrictionText\"></p>\r\n </ng-template>\r\n </p>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\"\r\n style=\"padding: 0px\">\r\n <!-- <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">PBS Notes:</p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" maxlength=\"500\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n class=\"w-100 new_rx_popup_tab_textarea\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.pbsNotes\"></textarea>\r\n </div> -->\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Indication For This Authority:\r\n </p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" placeholder=\"\"\r\n [class]=\"{'edit-dsable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.pbsListInstructions\" (ngModelChange)=\"onInputChange($event)\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-100\"></textarea>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n {{\r\n getAuthorityLabel(commonServices.patientDetails.state)\r\n }}\r\n </p>\r\n <input autocomplete=\"off\" type=\"text\" name=\"approval\" placeholder=\"\"\r\n [class]=\"{'edit-dsable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.approvalNo\" (ngModelChange)=\"onInputchangeApprovalNo($event)\"\r\n (keypress)=\"authorityNoValidation($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"\r\n !showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',\r\n commonServices.PrescribeAS,\r\n commonServices.rxAuthority,\r\n commonServices.unlistedRA\r\n )\r\n \" style=\"width: 100%;\">\r\n <div style=\"text-align: right\" *ngIf=\"!commonServices.isMedicineRestrict\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n <div class=\"No_Authority_box\">\r\n <p>No Authority Required</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"rx_footer\">\r\n <div class=\"rx_footer_brand\">\r\n <p class=\"ml-10\"><span>Hola Consult | 1.0 <span *ngIf=\"commonServices.sandbox\">| <span\r\n class=\"rx_staging\">This is a sandbox environment</span></span></span></p>\r\n <p class=\"mt-15p\">\r\n <span class=\"rx_popup_footer_text\">\u00A9 2025 Hola Health, a brand of Packapill Pty Ltd | v\r\n 1.1.0 |\r\n <a href=\"https://hola.health/consult-terms\" target=\"_blank\">Terms</a> |\r\n <a href=\"https://hola.health/consult-privacy-policy\" target=\"_blank\">Privacy Policy</a> |\r\n <a href=\"mailto:support@hola.health\" target=\"_blank\">Help</a></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";.loader{border:4px solid #f3f3f3;border-radius:50%;border-top:4px solid #020202;width:30px;height:30px;animation:spin 1s linear infinite;margin-left:18px;margin-top:18px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.m-v4{margin-left:4vh}.rx_loader_button{border:2px solid #f3f3f3;border-radius:50%;border-top:4px solid #005760;width:30px;height:30px;animation:spin 1s linear infinite}.drp-icon{color:#fff;font-size:19px;margin-left:5px}.select-action-btn{display:flex;flex-direction:row;flex-wrap:nowrap;align-content:center;justify-content:center;align-items:center}.select-action-ul{width:80%}.new_rx_popup_mims .React__Overlay_Open_Popup{position:fixed;inset:0;background-color:#00000080!important}.new_rx_popup_mims .new_rx_mims_Overlay_Open_Popup{z-index:9999999!important}.new_rx_popup_mims .ReactModal__Overlay{overflow-y:auto!important}.new_rx_popup_mims .ReactModal_popup{width:100%;padding:0;margin:20px 0 0}.new_rx_popup_mims .ReactModal__Content{margin:auto}.edit-disable-data{pointer-events:none;opacity:.6}.new_rx_popup_btns{position:relative;display:flex;justify-content:flex-end;align-items:center}@media only screen and (max-width: 1023px){.rx_ipad_header_box_1{width:calc(35% - 16px)}.rx_ipad_header_box_2{width:calc(65% - 16px)}.rx_ipad_header_box_3{width:calc(100% - 16px)}.new_mobile_rx_popup_header_text{display:block;text-align:center}}@media screen and (max-width: 767px){.new_rx_popup_btns,.new_mobile_rx_popup_header_text{display:block;text-align:center}.new_mobile_rx_top_bottom_0{margin-top:0;margin-bottom:0}.new_mobile_rx_btn{margin-bottom:5px}}.favourites-toggle-link{color:#0077b6!important;text-decoration:underline;cursor:pointer!important;font-size:14px;font-weight:400;line-height:20px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;outline:none!important;-webkit-tap-highlight-color:transparent}\n"] }]
4704
+ args: [{ selector: 'app-rx', template: "<ng-template #rxwidgets> </ng-template>\r\n<div class=\"new_rx_popup_mims\">\r\n <div\r\n class=\"ReactModal__Overlay ReactModal__Overlay--after-open React__Overlay_Open_Popup new_rx_mims_Overlay_Open_Popup\">\r\n <div class=\"ReactModal__Content ReactModal__Content--after-open React__Content new_rx_mims_React__Content\">\r\n <div class=\"popup new_rx_mims_ReactModal_popup\">\r\n <div>\r\n <app-splashscreen *ngIf=\"PopupScreenLoader\" [height]=\"'height-rx-spin'\"> </app-splashscreen>\r\n <div class=\"page-content\" *ngIf=\"!PopupScreenLoader\">\r\n <div class=\"new_rx_popup_header_box\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--2-col-tablet mdl-cell--3-col-phone new_rx_mobile_fullwidth rx_ipad_header_box_1\"\r\n [class]=\"commonServices.rxid != null && commonServices.rxid !=''?'mdl-cell--2-col':'mdl-cell--3-col'\"\r\n style=\"align-self: center\">\r\n <h3 class=\"new_rx_popup_header_box_text\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-hola-health-logo-1.png\" alt=\"hola_health\"\r\n style=\"width: auto;height: 37px;border-radius: 5px;\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-header-logo.png\" alt=\"\" />\r\n {{commonServices.editPrescription === true ? 'Edit Script' : 'New Script'}}\r\n </h3>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--4-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_desktop_title new_rx_mobile_fullwidth\"\r\n style=\"align-self: center;\">\r\n <p class=\"new_rx_popup_header_box_text\" style=\"justify-content: center;\">\r\n <span style=\"font-weight: 600;\">{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>/<span style=\"width: 100px;\">{{\r\n this.datePipe.transform(\r\n commonServices.patientDetails.dob,\r\n \"dd-MM-yyyy\"\r\n )\r\n }}</span>\r\n </p>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col-tablet mdl-cell--4-col-phone new_rx_popup_header_box_col new_rx_mobile_fullwidth rx_ipad_header_box_2 new_mobile_rx_top_bottom_0\"\r\n style=\"position: relative\"\r\n [class]=\"commonServices.rxid != null && commonServices.rxid !=''?'mdl-cell--6-col':'mdl-cell--5-col'\">\r\n <div class=\"new_rx_popup_btns\">\r\n <button (click)=\"close(null)\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored backButton new_mobile_rx_btn\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Close\r\n </button>\r\n <div style=\"display: inline-block;position: relative\"\r\n *ngIf=\"commonServices.rxid != null && commonServices.rxid !=''\">\r\n <button\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton select-action-btn new_mobile_rx_btn\"\r\n style=\"position: relative;width: 140px;display: flex;flex-direction: row;align-items: center;justify-content: center;padding: 10px !important\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\"\r\n (click)=\"selectActionDropdownopen()\">\r\n <ng-container *ngIf=\"selectionbtnLoader\">\r\n <p class=\"rx_loader_button m-v4\"\r\n style=\"width: 20px;height: 20px;margin: 0px !important;margin-right: 0px !important;margin-left: 0px !important;\">\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectionbtnLoader\">\r\n Select Action <i class=\"material-icons drp-icon\">expand_more</i>\r\n </ng-container>\r\n </button>\r\n <div #selectActionDropdown class=\"new_rx_Prescribe_btn_dropdown_list_box select-action-ul\"\r\n *ngIf=\"selectActionBtnDropdown == true\"\r\n [class]=\"{ M_list_box_show: selectActionBtnDropdown === true }\">\r\n <ul class=\"new_rx_Prescribe_btn_dropdown_list_ul\">\r\n <li\r\n (click)=\"commonServices.rxDetails.status.toLowerCase() == 'draft'?cancelDraft():cancelPrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,4)?'':'edit-disable-data'\">\r\n Cancel</li>\r\n <li (click)=\"printPrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,1)?'':'edit-disable-data'\">\r\n Print</li>\r\n <li (click)=\"reissuePrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,3)?'':'edit-disable-data'\">\r\n Re-Issue</li>\r\n <li (click)=\"ceasePrescribeMed()\"\r\n [class]=\"checkStatusAndScripttype(this.commonServices.rxDetails.scriptType,this.commonServices.rxDetails.status,2)?'':'edit-disable-data'\">\r\n Cease</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <button *ngIf=\"page != 1\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored backButton new_mobile_rx_btn\"\r\n (click)=\"back()\" [disabled]=\"this.commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Back\r\n </button>\r\n <button *ngIf=\"page == 1\" (click)=\"pageNumberOneToNext()\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton new_mobile_rx_btn\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\">\r\n Next\r\n </button>\r\n <button class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored new_mobile_rx_btn\"\r\n [class]=\"abortdisable?'nextButton':'abortbutton'\" *ngIf=\"abortBtnFlag\" [disabled]=\"abortdisable\"\r\n (click)=\"prescripeAbort()\"><span *ngIf=\"abortdisable\" class=\"rx_loader\">\r\n <p class=\"rx_loader_button m-v4 rx_btn_spin\">\r\n </p>\r\n </span><span *ngIf=\"!abortdisable\">Abort</span></button>\r\n <div style=\"display: inline-block\" *ngIf=\"page == 2\">\r\n <button\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored nextButton new_mobile_rx_btn\"\r\n style=\"position: relative;width: 135px;display: flex;flex-direction: row;align-items: center;justify-content: center\"\r\n [disabled]=\"commonServices.prescribeMedLoader || selectionbtnLoader\"\r\n (click)=\"includeRtpmModal()\">\r\n <ng-container *ngIf=\"commonServices.prescribeMedLoader \">\r\n <p class=\"rx_loader_button m-v4\"\r\n style=\"width: 20px;height: 20px;margin: 0px !important;margin-right: 0px !important;margin-left: 0px !important;\">\r\n </p>\r\n </ng-container>\r\n <ng-container *ngIf=\"!this.commonServices.prescribeMedLoader\">\r\n Prescribe <i class=\"material-icons drp-icon\">expand_more</i>\r\n </ng-container>\r\n </button>\r\n <div #PrescribeDropdown class=\"new_rx_Prescribe_btn_dropdown_list_box\"\r\n *ngIf=\"selectPBTNDropdown == true\" [class]=\"{ M_list_box_show: selectPBTNDropdown === true }\">\r\n <ul class=\"new_rx_Prescribe_btn_dropdown_list_ul\">\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\"\r\n (click)=\"MprescribeMed(1)\">E-Prescribe (Draft)</li>\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\" (click)=\"EprescripeSend(1)\" *ngIf=\"!this.commonServices.sendToPharmacy && !this.commonServices.emergencySupply\">E-Prescribe and Send</li>\r\n <li [class]=\"{'edit-disable-data': ePrescriptionValidation()}\" (click)=\"EprescripeSend(2)\">E-Prescribe and Print</li>\r\n <li [class]=\"{'edit-disable-data': (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'M'&& this.commonServices.rxDetails.status.toLowerCase() != 'draft')|| (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'E')}\"\r\n (click)=\"MprescribeMed(2)\">Prescribe (Draft)</li>\r\n <li [class]=\"{'edit-disable-data': (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase() == 'M'&& this.commonServices.rxDetails.status.toLowerCase() != 'draft') || (commonServices.editPrescription === true && commonServices.rxDetails.scriptType.toUpperCase()== 'E')}\"\r\n (click)=\"prescripePrint()\">\r\n Prescribe and Print</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth rx_ipad_header_box_3 new_rx_mobile_title\"\r\n style=\"align-self: center\">\r\n <p class=\"new_rx_popup_header_box_text new_mobile_rx_popup_header_text\">\r\n <span style=\"font-weight: 600\">{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>/<span>{{\r\n this.datePipe.transform(\r\n commonServices.patientDetails.dob,\r\n \"dd-MM-yyyy\"\r\n )\r\n }}</span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"page == 1\" class=\"new_rx_popup_tab_1\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\" *ngIf=\"!commonServices.isMedicineRestrict\">\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div #MedicineDropdown style=\"position: relative\">\r\n <div style=\"position: relative\">\r\n <input autocomplete=\"off\" type=\"text\" name=\"medicine search\" placeholder=\"Search Medicines\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_1_input\"\r\n value=\"{{ mediSearchValue }}\" (input)=\"searchHandler($event)\"\r\n (click)=\"MedicineDropdownList()\" />\r\n <i class=\"material-icons md-24 new_rx_popup_tab_1_input_search\">search</i>\r\n <!-- <mat-icon class=\"new_rx_popup_tab_1_input_search\"></mat-icon> -->\r\n </div>\r\n <div class=\"new_rx_popup_tab_1_list_box\" [class]=\"{\r\n M_list_box_show: selectedMedicineDropdown === true\r\n }\">\r\n <div *ngIf=\"searchMedicineLoader\" class=\"loader\"></div>\r\n <div *ngIf=\"!searchMedicineLoader\" style=\"margin-bottom: 10px;\">\r\n <ul class=\"new_rx_popup_tab_1_list\">\r\n <li *ngFor=\"let medicineList of searchedMedicineList\" [class]=\"getcurrentid(medicineList)\"\r\n (click)=\"\r\n getProductListByName(\r\n medicineList['prodHiddenValue'],\r\n medicineList['prodDisplayValue'],\r\n medicineList['searchBase']\r\n )\r\n \" [innerHTML]=\"medicineList['prodDisplayValue']\"></li>\r\n <li *ngIf=\"searchedMedicineList.length == 0\">No Data</li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"PrimarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--2-col mdl-cell--2-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\"\r\n [class]=\"{'disabledRxContent':this.isNonPbsFlag||(commonServices.rxDetails!=null && commonServices.rxDetails!='' && commonServices.rxDetails.status!=null && commonServices.rxDetails.status!='' && commonServices.rxDetails.status.toLowerCase()!='draft')}\">\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxOnlyPBS\"\r\n (change)=\"onCheckboxChange()\" value=\"PBS/RPBS\" [disabled]=\"this.isNonPbsFlag\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\">PBS/RPBS</span></label>\r\n </div>\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxPrivate\"\r\n (change)=\"onCheckboxChange()\" value=\"Private\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\">Private</span></label>\r\n </div>\r\n </div>\r\n <!-- <div\r\n class=\"mdl-cell mdl-cell--2-col mdl-cell--2-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\"\r\n [class]=\"{'disabledRxContent':this.isNonPbsFlag||(commonServices.rxDetails!=null && commonServices.rxDetails!='' && commonServices.rxDetails.status!=null && commonServices.rxDetails.status!='' && commonServices.rxDetails.status.toLowerCase()!='draft')}\">\r\n <div class=\"rx_new_popup_checkbox new_mobile_rx_top_bottom_0\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"rxPrivate\"\r\n (change)=\"onCheckboxChange()\" value=\"Private\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\">Private</span></label>\r\n </div>\r\n </div> -->\r\n <div\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--6-col-phone new_rx_mobile_fullwidth new_mobile_rx_top_bottom_0\">\r\n <div style=\"text-align: right\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\" style=\"margin-left: 8px;\" *ngIf=\"!commonServices.editPrescribedPrescription\">\r\n <span class=\"favourites-toggle-link\" (click)=\"$event.stopPropagation(); showFavourties()\">\r\n {{ showFavouriteMed ? 'Hide favourites' : 'Show favourites' }}\r\n </span>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--7-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div class=\"new_rx_popup_table_box\">\r\n <p class=\"new_rx_popup_tab_title\" style=\"padding: 5px 10px; margin: 0px\">\r\n Available Formulations:\r\n </p>\r\n <div *ngIf=\"!showFavouriteMed\">\r\n <div *ngIf=\"onclickMedicineLoader\" class=\"loader m-v4\"></div>\r\n <div *ngIf=\"!onclickMedicineLoader\">\r\n <div *ngIf=\"\r\n commonServices.selectedMedicineList == null ||\r\n commonServices.selectedMedicineList.length == 0\r\n \" class=\"noDataPrescribe\">\r\n <span>No Data</span>\r\n </div>\r\n <div class=\"new_rx_popup_box_container\" *ngFor=\"\r\n let med of commonServices.selectedMedicineList;\r\n index as i\r\n \">\r\n\r\n <div class=\"mdl-grid new_rx_popup_box\" [class]=\"getClassForMed(med)\"\r\n (click)=\"selectFormulation(med, i)\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_box_header\" [innerHTML]=\"med.productName\"></p>\r\n <p class=\"new_rx_popup_box_text\">\r\n <span><b>Quantity:</b>\r\n {{med.pbsType!=undefined && med.pbsType!=null && med.pbsType.toLowerCase() == \"non pbs\"\r\n ? med.numberOfPack + \"x\" + med.unitPerPack\r\n : med.maxQtyUnits\r\n }}</span><span><b>Rpts:</b> {{ med.repeats }}</span><span\r\n *ngIf=\"!commonServices.isMedicineRestrict\"><b>Restriction:</b>\r\n {{med.Restrictions!=undefined &&\r\n med.Restrictions != null && med.Restrictions != \"\"\r\n ? med.pbsType +\r\n \" (\" +\r\n getRestrictions(med.Restrictions) +\r\n \") \"\r\n : (med.pbsType!=undefined&&med.pbsType!=null?med.pbsType:\"\")\r\n }} </span><span><b>Generic Name: </b>\r\n <span [innerHTML]=\"med.genericName\"></span></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"SecondarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFavouriteMed\">\r\n\r\n <div *ngIf=\"onclickMedicineLoader\" class=\"loader m-v4\"></div>\r\n <div *ngIf=\"!onclickMedicineLoader\">\r\n <div *ngIf=\"\r\n commonServices.favouriteMedicineList == null ||\r\n commonServices.favouriteMedicineList.length == 0\r\n \" class=\"noDataPrescribe\">\r\n <span>No Favourites</span>\r\n </div>\r\n <div class=\"new_rx_popup_box_container\" *ngFor=\"\r\n let med of commonServices.favouriteMedicineList;\r\n index as i\r\n \">\r\n\r\n <div class=\"mdl-grid new_rx_popup_box\" [class]=\"getClassForFavouriteMed(med)\"\r\n (click)=\"favouriteMedicineLoading(med)\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_box_header\" [innerHTML]=\"med.productName\"></p>\r\n <p class=\"new_rx_popup_box_text\">\r\n <span><b>Quantity:</b>\r\n {{med.quantity}}\r\n </span><span><b>Rpts:</b> {{ med.repeats }}</span>\r\n <span *ngIf=\"!commonServices.isMedicineRestrict\"><b>Restriction:</b>\r\n {{med.restriction}}\r\n </span><span><b>Generic Name: </b>\r\n <span [innerHTML]=\"med.genericName\"></span></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"SecondarySearchSpinner\" class=\"loader ml-load-45\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"favMedicineLoader\" class=\"loader\"></div>\r\n <div *ngIf=\"!favMedicineLoader\"\r\n class=\"mdl-cell mdl-cell--5-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div class=\"mdl-grid new_rx_popup_tab_1_grid new_rx_popup_tab_1_box\"\r\n *ngIf=\"commonServices.selectedFormulation != null\">\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_tab_title\" style=\"margin-bottom: 5px\"\r\n [innerHTML]=\"commonServices.selectedFormulation != null&&commonServices.selectedFormulation.productName!=undefined && commonServices.selectedFormulation.productName!=null? commonServices.selectedFormulation.productName: ''\">\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col\">\r\n <p class=\"new_rx_popup_label\">\r\n Generic Name:<span\r\n [innerHTML]=\"commonServices.selectedFormulation != null&&commonServices.selectedFormulation.genericName!=undefined && commonServices.selectedFormulation.genericName!=null? commonServices.selectedFormulation.genericName : ''\"></span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\">\r\n <p class=\"new_rx_popup_label\" *ngIf=\"commonServices.isBrandName\">\r\n Brand Name:<span [innerHTML]=\"\r\n getBrandName(commonServices.selectedFormulation)\r\n \">\r\n </span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n Schedule:<span>{{\r\n commonServices.selectedFormulation != null &&\r\n commonServices.selectedFormulation.poisonClassification !=\r\n undefined && commonServices.selectedFormulation.poisonClassification!=null &&\r\n commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses!=undefined && commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses!=null && commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses.length>0\r\n ? commonServices.selectedFormulation.poisonClassification\r\n .poisonClasses[0]\r\n : \"No Scheduled Information Available\"\r\n }}</span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n PBS Listing:<span>{{commonServices.selectedFormulation.pbsType!=undefined &&\r\n commonServices.selectedFormulation.pbsType!=null? commonServices.selectedFormulation.pbsType :\r\n '' }}\r\n {{\r\n commonServices.selectedFormulation.pbsCode!=undefined &&\r\n commonServices.selectedFormulation.pbsCode!=null\r\n ? \" (\" +\r\n commonServices.selectedFormulation.pbsCode +\r\n \")\"\r\n : \"\"\r\n }}</span>\r\n </p>\r\n <p class=\"new_rx_popup_label\">\r\n <span style=\"margin:0px ;\">\r\n Max Quantity =\r\n {{getMaxQuantity()}}\r\n and Repeats =\r\n {{commonServices.selectedFormulation!=null? commonServices.selectedFormulation.repeats\r\n :\"\"}}</span>\r\n </p>\r\n\r\n <p class=\"new_rx_popup_label\" *ngIf=\"\r\n commonServices.selectedFormulation != null && commonServices.selectedFormulation.pregnancyCategory!=undefined && \r\n commonServices.selectedFormulation.pregnancyCategory != null && commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode!=undefined && commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode!=null\r\n \">\r\n Pregnancy Category:<span>{{\r\n commonServices.selectedFormulation.pregnancyCategory\r\n .categoryCode\r\n }}\r\n </span>\r\n <span *ngIf=\"commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote !=undefined && \r\n commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote != null &&\r\n commonServices.selectedFormulation.pregnancyCategory\r\n .additionalNote != ''\r\n \">\r\n AdditionalNote:\r\n <span *ngFor=\"\r\n let item of commonServices.selectedFormulation\r\n .pregnancyCategory.additionalNote\r\n \" [innerHTML]=\"item\">\r\n </span>\r\n </span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col\" *ngIf=\"\r\n this.isShowRestrictions == true && commonServices.selectedFormulation.Restrictions!=undefined && \r\n commonServices.selectedFormulation.Restrictions != null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <p class=\"new_rx_popup_label\">Restrictions:</p>\r\n <ol style=\"margin: 0px; padding-left: 15px\" *ngIf=\"commonServices.selectedFormulation.Restrictions!=undefined && \r\n commonServices.selectedFormulation.Restrictions != null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <li class=\"new_rx_pop_aut_int\" *ngFor=\"\r\n let restriction of commonServices.selectedFormulation\r\n .Restrictions\r\n \">\r\n <p style=\"\r\n margin: 0px;\r\n display: flex;\r\n align-content: center;\r\n margin-bottom: 10px;\r\n \" *ngIf=\"\r\n restriction.restrictionPreview != null &&\r\n restriction.restrictionPreview != '' &&\r\n restriction.restrictionText != null &&\r\n restriction.restrictionText != ''\r\n \">\r\n <span class=\"rx_restrictionText\" *ngIf=\"restriction.restrictionText.length < 60\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n this.htmlToFormattedText(\r\n restriction.restrictionPreview\r\n )\r\n \"></span></span>\r\n <span class=\"rx_restrictionText\" *ngIf=\"restriction.restrictionText.length > 60\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n this.htmlToFormattedText(\r\n restriction.restrictionPreview\r\n ).substring(0, 60)\r\n \"></span>...\r\n <span>\r\n <a style=\"cursor: pointer; color: #ff9978\" id=\"show-tooltip-id\">Show\r\n More</a></span></span>\r\n <ng-template #tooltipdemo>\r\n <p class=\"rx_tooltip_inner_box\" [innerHTML]=\"restriction.restrictionText\"></p>\r\n </ng-template>\r\n </p>\r\n </li>\r\n </ol>\r\n </div>\r\n </div>\r\n\r\n <div class=\"new_rx_popup_tab_3_small_box\" [style.display]=\"isCurrentMedicineInFavourites() ? 'inline-flex' : null\"\r\n [style.width]=\"isCurrentMedicineInFavourites() ? 'max-content' : null\" *ngIf=\"commonServices.selectedFormulation != null\">\r\n <div style=\"display: inline-block;margin-right: 10px;\" class=\"new_rx_popup_header_box_col\" *ngIf=\"!commonServices.editPrescribedPrescription\">\r\n <button *ngIf=\"commonServices.selectedFormulation != null\" (click)=\"addToFavourites()\"\r\n class=\"mdl-button mdl-js-button mdl-button--raised mdl-button--colored\"\r\n [class.nextButton]=\"!isCurrentMedicineInFavourites()\"\r\n [class.rmfavbutton]=\"isCurrentMedicineInFavourites()\">\r\n <span *ngIf=\"isCurrentMedicineInFavourites(); else addText\">\r\n Remove from favourites\r\n </span>\r\n <ng-template #addText>+ Add to favourites</ng-template>\r\n </button>\r\n </div>\r\n <div style=\"display: inline-block; margin-right: 10px\">\r\n <span class=\"new_rx_popup_label\">Quantity: </span><input autocomplete=\"off\" type=\"number\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" name=\"qty\"\r\n placeholder=\"\" class=\"new_rx_popup_tab_input\" step=\"1\" [min]=\"0\"\r\n [(ngModel)]=\"commonServices.quantityVal\" (keypress)=\"checkMobile($event)\"\r\n (input)=\"quantityChange()\" (paste)=\"$event.preventDefault()\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" />\r\n </div>\r\n <div style=\"display: inline-block\">\r\n <span class=\"new_rx_popup_label\">Repeats: </span><input autocomplete=\"off\" type=\"number\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true || commonServices.isMedicineRestrict}\"\r\n name=\"rpts\" placeholder=\"\" [min]=\"0\" (input)=\"repeatsChange()\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.repeatsVal\" (paste)=\"$event.preventDefault()\"\r\n (keypress)=\"checkMobile($event)\"\r\n [disabled]=\"commonServices.editPrescribedPrescription || commonServices.isMedicineRestrict\" />\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\"></div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">\r\n Dose:\r\n <span>\r\n <div class=\"rx_new_popup_checkbox\" style=\"margin-top: 0px\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\"><input autocomplete=\"off\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" type=\"checkbox\"\r\n id=\"checkbox1\" class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.unUsualDoseFlag\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400;font-size: 16px;margin-top: -7px;\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Unusual\r\n Dose</span></label>\r\n </div>\r\n </span>\r\n </p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selecteddose\" placeholder=\"Select Dose\"\r\n [(ngModel)]=\"commonServices.doseSearchValue\" (click)=\"doseDropdown()\" />\r\n <div #DoseDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectDoseDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <li (click)=\"selectDoseValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let dose of doseData\" (click)=\"selectDoseValue(dose)\" [class]=\"{\r\n heighlight: dose['text'] == commonServices.doseSearchValue\r\n }\">\r\n {{ dose[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Frequency:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedFrequency:\"\r\n placeholder=\"Select Frequency\" readOnly [(ngModel)]=\"commonServices.freqSearchValue\"\r\n (click)=\"freqDropdown()\" />\r\n <div #FreqDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectFreqDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectFrequencyValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let frequency of frequencyData\" (click)=\"selectFrequencyValue(frequency)\" [class]=\"{\r\n heighlight:\r\n frequency['text'] == commonServices.freqSearchValue\r\n }\">\r\n {{ frequency[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Food:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedFrequency:\"\r\n placeholder=\"Select Food\" readOnly [(ngModel)]=\"commonServices.foodSearchValue\"\r\n (click)=\"foodDropdown()\" />\r\n <div #FoodDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectFoodDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectFoodValue(null)\" class=\"p-12\"> </li>\r\n <li *ngFor=\"let food of foodData\" (click)=\"selectFoodValue(food)\" [class]=\"{\r\n heighlight: food['text'] == commonServices.foodSearchValue\r\n }\">\r\n {{ food[\"text\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Instruction:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"Instruction\"\r\n placeholder=\"Select Instruction\" [(ngModel)]=\"commonServices.InstructionSearchValue\"\r\n (click)=\"instructionDropdown()\" (change)=\"instructionOnChange()\"\r\n (keypress)=\"alphaRestriction($event)\" />\r\n <div #InstructionDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{M_list_box_show: selectInstructionDropdown === true}\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <ng-container *ngIf=\"selectInstructionDropdownList\">\r\n <li (click)=\"ChangeInstruction(null)\" class=\"p-12\"> </li>\r\n <li\r\n [class]=\"item.id == commonServices.complexId && item.text == commonServices.InstructionSearchValue ? 'heighlight' : ''\"\r\n *ngFor=\"let item of instructionData; index as i\" (click)=\"ChangeInstruction(item)\">\r\n {{ item.text }}\r\n <span *ngIf=\"item.userid !== 0\" class=\"span_icon\" style=\"float: right\">\r\n <i class=\"material-icons\" style=\"padding: 5px\"\r\n (click)=\"editInstruction(item.id, item)\">create</i><i class=\"material-icons\"\r\n style=\"margin-left: 10px; padding: 5px\"\r\n (click)=\"deleteInstruction(item.id)\">clear</i></span>\r\n </li>\r\n <li class=\"RX_ADD_dropdown_btn\" (click)=\"addNewInstruction()\">\r\n + Add Complex Instructions\r\n </li>\r\n </ng-container>\r\n <ng-container *ngIf=\"selectInstructionDropdownList == false\">\r\n <div class=\"complex_instruction_box\">\r\n <p class=\"new_rx_popup_label\" style=\"font-size: 12px; margin: 0\">\r\n Complex Instruction:\r\n </p>\r\n <input autocomplete=\"off\"\r\n class=\"instruction_field_clr mdl-textfield__input new_rx_popup_tab_input \" type=\"text\"\r\n id=\"Instruction\" [(ngModel)]=\"commonServices.Instructiontiltle\"\r\n placeholder=\"Enter Complex Instruction\" />\r\n <p class=\"new_rx_popup_label\" style=\"font-size: 12px; margin: 0\">\r\n Complex Instruction Description:\r\n </p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" maxLength=\"500\"\r\n [(ngModel)]=\"tempInstructionDescription\" placeholder=\"Enter Complex Instruction Description\"\r\n class=\"instruction_field_clr w-100 new_rx_popup_tab_textarea\"></textarea>\r\n <div class=\"RX_ADD_dropdown_btn_1\">\r\n <button (click)=\"clearInstruction()\" class=\"rx-instruction-btn\">Cancel</button>\r\n <button (click)=\"saveInstruction()\" class=\"rx-instruction-btn\">Save</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">Route:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedRoute:\"\r\n placeholder=\"Select Route\" [(ngModel)]=\"commonServices.routeSearchValue\" maxlength=\"50\"\r\n (click)=\"routeDropdown()\" (keypress)=\"alphaRestriction($event)\" />\r\n <div #RouteDropdown class=\"new_rx_popup_tab_dropdown_list_box\"\r\n [class]=\"{ M_list_box_show: selectRouteDropdown === true }\">\r\n <div style=\"padding: 10px; position: relative\">\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_route__input\" type=\"text\"\r\n placeholder=\"Search...\" [value]=\"routeDataFilter ? routeDataFilter : ''\"\r\n (keyup)=\"routeFilter($event)\" />\r\n <i class=\"material-icons md-24 new_rx_popup_tab_1_input_search rx-search-icon\">search</i>\r\n </div>\r\n <ul *ngIf=\"filterRouteItems(routeData, routeDataFilter).length != 0\"\r\n class=\"new_rx_popup_tab_1_list rx_dropdown rx_dropdown_route\">\r\n <li *ngFor=\"\r\n let route of filterRouteItems(routeData, routeDataFilter)\r\n \" (click)=\"selectRoutesearcValue(route)\" [class]=\"{\r\n heighlight:\r\n route['routeName'] == commonServices.routeSearchValue\r\n }\">\r\n {{ route[\"routeName\"] }}\r\n </li>\r\n </ul>\r\n <ul *ngIf=\"filterRouteItems(routeData, routeDataFilter).length == 0\"\r\n class=\"new_rx_popup_tab_1_list rx_dropdown rx_dropdown_route\">\r\n <li>no data</li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Pro Re Nata Prescription:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.rxPRN\"\r\n (ngModelChange)=\"PRNChange(commonServices.rxPRN)\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Pro\r\n Re Nata\r\n Prescription</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Prescribe As:</p>\r\n <div class=\"rx_new_popup_checkbox\">\r\n <div class=\"rx_new_radiobox_button rx_radio_overall\">\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" class=\"mdl-radio__button custom-radio-button\"\r\n name=\"PrescribeAs\" [value]=\"'Private'\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'private'\" (click)=\"private()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Private</span></label>\r\n\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" checked=\"\"\r\n class=\"mdl-radio__button d-inline radio custom-radio-button\" name=\"PrescribeAs\"\r\n [value]=\"'PBS'\"\r\n [disabled]=\"prescribeAS_PBS || commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'pbs'\" (click)=\"PBS()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{ 'disabled-style': prescribeAS_PBS == true|| commonServices.isFetching || commonServices.editPrescribedPrescription === true}\">PBS</span>\r\n </label>\r\n <label class=\"rx_radio_label\">\r\n <input autocomplete=\"off\" type=\"radio\" checked=\"\"\r\n class=\"mdl-radio__button d-inline radio custom-radio-button\" name=\"PrescribeAs\"\r\n [value]=\"'RPBS'\"\r\n [disabled]=\"prescribeAS_RPBS || commonServices.isFetching || commonServices.editPrescribedPrescription === true\"\r\n [checked]=\"commonServices.PrescribeAS.toLowerCase() === 'rpbs'\" (click)=\"RPBS()\"\r\n [(ngModel)]=\"commonServices.PrescribeAS\" /><span class=\"mdl-radio__label radio_txt\"\r\n [class]=\"{ 'disabled-style': prescribeAS_RPBS == true|| commonServices.isFetching || commonServices.editPrescribedPrescription === true}\">RPBS</span>\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"rx_new_popup_checkbox\" *ngIf=\"\r\n commonServices.selectedFormulation != null && commonServices.selectedFormulation.pbsType!=undefined && commonServices.selectedFormulation.pbsType!=null &&\r\n commonServices.selectedFormulation.pbsType.toLowerCase() === 'non pbs' &&\r\n commonServices.patientDetails.dvaNumber != null &&\r\n commonServices.patientDetails.dvaNumber != '' && isNonPbsFlag == false && !isPrescribeAsPrivateOnly\r\n \">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox\" class=\"check_box\"\r\n [checked]=\"commonServices.unlistedRA\" (click)=\"unlistedRA()\"\r\n [(ngModel)]=\"commonServices.unlistedRA\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" />\r\n <span class=\"mdl-checkbox__label check_box_label\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">\r\n Unlisted RA\r\n </span>\r\n </label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{\r\n M_CTG_box_hide: !(\r\n commonServices.patientDetails &&\r\n commonServices.patientDetails.patientCtgFlag == 0 &&\r\n commonServices.patientDetails.patientCtgCoPayment == 0 &&\r\n commonServices.PrescribeAS.toLowerCase() == 'pbs'\r\n )\r\n }\">\r\n <!-- <p class=\"new_rx_popup_label\">CTG/PBS Co Payment:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.CTGCoPayment\"\r\n [checked]=\"commonServices.CTGCoPayment == true\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">CTG/PBS\r\n Co Payment</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Script Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n id=\"RxScriptDate\" placeholder=\" ../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.scriptDate\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Start Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" id=\"RxStartDate\"\r\n placeholder=\" ../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.startDate\" (ngModelChange)=\"commonServices.rxEndDateCalculater()\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">End Date:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"date\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\" id=\"RxEndDate\"\r\n placeholder=\"../../....\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.endDate\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Days Between Repeats:</p>\r\n <input autocomplete=\"off\" (paste)=\"$event.preventDefault()\" placeholder=\"Enter Days Between Repeats\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true||commonServices.isMedicineRestrict}\"\r\n class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"number\" id=\"Daybetweenrepeats\" [min]=\"0\"\r\n [disabled]=\"commonServices.isFetching || commonServices.editPrescribedPrescription||commonServices.isMedicineRestrict\"\r\n [(ngModel)]=\"commonServices.daysBtnRepeatsVal\" (keypress)=\"checkMobile($event)\"\r\n (input)=\"dayschange()\" />\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <div>\r\n <p class=\"new_rx_popup_label\">Purpose:</p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selectedPurpose:\"\r\n placeholder=\"Select Purpose\" readOnly [(ngModel)]=\"commonServices.purposeSearchValue\"\r\n (click)=\"purposeDropdown()\" />\r\n <div #PurposeDropdown class=\"new_rx_popup_tab_dropdown_list_box new_rx_popup_tab_purpose_box h-160p\"\r\n [class]=\"{ M_list_box_show: selectPurposeDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\">\r\n <li (click)=\"selectPurposeValue(null)\" class=\"p-12\"></li>\r\n <li *ngFor=\"let purpose of purposeData\" (click)=\"selectPurposeValue(purpose)\" [class]=\"{\r\n heighlight:\r\n purpose['lookupText'] ==\r\n commonServices.purposeSearchValue\r\n }\">\r\n {{ purpose[\"lookupText\"] }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{ M_CTG_box_hide: commonServices.isBrandName != true }\">\r\n <!-- <p class=\"new_rx_popup_label\">Substitution:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox1\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true || commonServices.isBrandName == false\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.BrandSubstitutesNotAllow\"\r\n (change)=\"this.brandSubstitutesNotAllow(commonServices.BrandSubstitutesNotAllow)\" [checked]=\"\r\n commonServices.BrandSubstitutesNotAllow\r\n ? commonServices.BrandSubstitutesNotAllow\r\n : false\r\n \" /><span class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Brand\r\n Substitution\r\n Not Permitted</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{ M_CTG_box_hide_brand: commonServices.lemi == true }\" id=\"brandnametooltip\"\r\n (mouseleave)=\"hideToolTip()\" (mouseenter)=\"showtooltip(commonServices.lemi,brandtooltip)\">\r\n <!-- <p class=\"new_rx_popup_label\">Brand Name:</p> -->\r\n <ng-template #brandtooltip><span class=\"include_brand_tooltip\">The selected product is LEMI\r\n identified. Therefore it may be\r\n prescribed by the brand name only.</span></ng-template>\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\" [class]=\"{\r\n M_CTG_box_hide_brand_name: commonServices.lemi == true || commonServices.isFetching == true || commonServices.editPrescribedPrescription === true\r\n }\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [checked]=\"commonServices.isBrandName\"\r\n [(ngModel)]=\"commonServices.isBrandName\"\r\n (change)=\"this.isChangeBrandName(commonServices.isBrandName)\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400; font-size: 16px\">Include Brand\r\n Name</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Regulation 24:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\" [(ngModel)]=\"commonServices.regulation24\"\r\n [checked]=\"commonServices.regulation24\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Regulation\r\n 24</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\"\r\n [class]=\"{ disabledRxContent: commonServices.isFetching}\">\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">DO NOT send to MySL:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.mySLConsent\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">DO\r\n NOT send to MySL</span></label>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n style=\"position: relative\">\r\n <p class=\"new_rx_popup_label\">\r\n <!-- Pharmacy: -->\r\n <span>\r\n <div class=\"rx_new_popup_checkbox\" style=\"margin-top: 0px\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\"><input autocomplete=\"off\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\" type=\"checkbox\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.sendToPharmacy\" (change)=\"sendToPharmacyChange()\" /><span\r\n class=\"mdl-checkbox__label\" style=\"font-weight: 400;font-size: 16px;margin-top: -7px;\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Send\r\n to Pharmacy</span></label>\r\n </div>\r\n </span>\r\n </p>\r\n <input autocomplete=\"off\" class=\"mdl-textfield__input new_rx_popup_tab_input\" type=\"text\" readonly\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" id=\"selecteddose\" placeholder=\"Select Value\"\r\n [(ngModel)]=\"commonServices.sendToPharmacyValue\" (click)=\"stpValueDropdown()\"\r\n [class]=\"{ M_CTG_box_hide: commonServices.sendToPharmacy != true }\" />\r\n <div #stpDropdown class=\"new_rx_popup_tab_dropdown_list_box new_rx_popup_tab_stp_box h-93p\"\r\n [class]=\"{ M_list_box_show: selectstpDropdown === true }\">\r\n <ul class=\"new_rx_popup_tab_1_list rx_dropdown\" style=\"margin-bottom: 0px\">\r\n <li (click)=\"selectStpValue(null)\" class=\"p-12\"></li>\r\n <li *ngFor=\"let sendtopharmacy of sendtopharmacyData\" (click)=\"selectStpValue(sendtopharmacy)\">\r\n {{ sendtopharmacy.name }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--3-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <!-- <p class=\"new_rx_popup_label\">Emergency Supply:</p> -->\r\n <div class=\"rx_new_popup_checkbox m-t-36\">\r\n <label class=\"mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect\">\r\n <input autocomplete=\"off\" type=\"checkbox\" id=\"checkbox2\"\r\n [disabled]=\"commonServices.editPrescribedPrescription === true\"\r\n class=\"mdl-checkbox__input rx_new_group_checkbox\"\r\n [(ngModel)]=\"commonServices.emergencySupply\" /><span class=\"mdl-checkbox__label\"\r\n style=\"font-weight: 400; font-size: 16px\"\r\n [class]=\"{'disabled-style': commonServices.isFetching == true || commonServices.editPrescribedPrescription === true}\">Emergency\r\n Supply</span></label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"page == 2\" class=\"new_rx_popup_tab_2\">\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px; opacity: 1\">\r\n <div\r\n class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <div style=\"width: 100%; padding: 0px\" class=\"mdl-grid\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <div class=\"mdl-grid new_rx_popup_tab_1_grid\">\r\n <div class=\"mdl-cell mdl-cell--12-col\">\r\n <p class=\"new_rx_popup_label\">RX</p>\r\n <p class=\"new_rx_popup_label_p\">\r\n <b [innerHTML]=\"commonServices.rxDisplayName\"></b>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\" style=\"margin: 0px\">Quantity: <span\r\n style=\"color: rgb(45, 45, 45); font-weight: 600\">{{ commonServices.quantityVal }}\r\n </span> Repeats: <span style=\"color: rgb(45, 45, 45); font-weight: 600\">\r\n {{ commonServices.repeatsVal }}</span> Default Quantity:{{getDefaultQuantity()}}\r\n Default Repeats:\r\n {{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.repeats!=null?commonServices.selectedFormulation.repeats:\"\"\r\n }}\r\n </p>\r\n <p *ngIf=\"commonServices.doseSearchValue != '' ||commonServices.freqSearchValue != ''\"\r\n class=\"new_rx_popup_label_p\">\r\n <span>{{ commonServices.doseSearchValue }} </span><span>{{ commonServices.freqSearchValue\r\n }}</span>\r\n </p>\r\n <p *ngIf=\"commonServices.foodSearchValue != ''\" class=\"new_rx_popup_label_p\">\r\n {{ commonServices.foodSearchValue }}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n {{InstructionDescription !=\"\" && InstructionDescription!=null?\r\n InstructionDescription:commonServices.InstructionSearchValue!=\"\" &&\r\n commonServices.InstructionSearchValue!=null?commonServices.InstructionSearchValue:\"\"}}\r\n </p>\r\n <p *ngIf=\"commonServices.routeSearchValue != ''\" class=\"new_rx_popup_label_p\">\r\n {{ commonServices.routeSearchValue }}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n P.R.N :\r\n <i *ngIf=\"commonServices.rxPRN\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.rxPRN\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Days Between Repeats:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.daysBtnRepeatsVal)\">{{commonServices.daysBtnRepeatsVal}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.daysBtnRepeatsVal)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Unusual Dose:\r\n <i *ngIf=\"commonServices.unUsualDoseFlag\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.unUsualDoseFlag\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Script Date:\r\n <span>{{this.commonServices.scriptDate|date:'dd-MM-yyyy'}}</span>\r\n\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Start Date:\r\n <span>{{this.commonServices.startDate|date:'dd-MM-yyyy'}}</span>, End Date:\r\n {{this.commonServices.endDate|date:'dd-MM-yyyy'}}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Prescribe As:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.PrescribeAS)\">{{commonServices.PrescribeAS}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.PrescribeAS)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">Purpose:\r\n <span\r\n *ngIf=\"!commonServices.IsNullOrEmpty(commonServices.purposeSearchValue)\">{{commonServices.purposeSearchValue}}</span>\r\n <span *ngIf=\"commonServices.IsNullOrEmpty(commonServices.purposeSearchValue)\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Include Brand Name:\r\n <i *ngIf=\"commonServices.isBrandName\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.isBrandName\">-</span>,\r\n Brand Substitution Not Permitted:\r\n <i *ngIf=\"commonServices.BrandSubstitutesNotAllow\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.BrandSubstitutesNotAllow\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Regulation 24:\r\n <i *ngIf=\"commonServices.regulation24\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.regulation24\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n CTG/PBS Co Payment:\r\n <i *ngIf=\"commonServices.CTGCoPayment\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.CTGCoPayment\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n DO NOT send to MySL:\r\n <i *ngIf=\"commonServices.mySLConsent\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.mySLConsent\">-</span>\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Send to Pharmacy:\r\n <i *ngIf=\"commonServices.sendToPharmacy\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.sendToPharmacy\">-</span>, Send to Pharmacy Value:\r\n {{!commonServices.IsNullOrEmpty(commonServices.sendToPharmacyValue)?commonServices.sendToPharmacyValue:'-'}}\r\n </p>\r\n <p class=\"new_rx_popup_label_p\">\r\n Emergency Supply:\r\n <i *ngIf=\"commonServices.emergencySupply\" class=\"material-icons icon-done\"\r\n style=\"color: #0077b6\">check</i>\r\n <span *ngIf=\"!commonServices.emergencySupply\">-</span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Note To Pharmacy:</p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"50\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.doctorNotes\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Annotation:</p>\r\n\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"500\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.annotation\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">Reason For Prescription:</p>\r\n\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"3\" maxlength=\"50\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"this.commonServices.prescriptionReason\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-535p\"></textarea>\r\n </div>\r\n\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\" style=\"text-transform: capitalize;\">\r\n {{this.getStateAuthorityLabel(commonServices.patientDetails.state)}}\r\n </p>\r\n\r\n <p style=\"margin: 0px;margin-top: -8px;margin-bottom: 10px;\">\r\n <span class=\"state-txt-color new_rx_popup_label_p\">(Relevant to\r\n {{ commonServices.patientDetails.state }})</span>\r\n </p>\r\n\r\n <input autocomplete=\"off\" type=\"text\" name=\"approval\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.StateAuthorityNumber\" maxlength=\"25\"\r\n (keypress)=\"authorityNoValidation($event)\" (ngModelChange)=\"authorityNoChange($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\"\r\n [class]=\"{\r\n 'new_rx_no_authority':!showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',commonServices.PrescribeAS,commonServices.rxAuthority,commonServices.unlistedRA)\r\n }\">\r\n <div *ngIf=\"\r\n showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',\r\n commonServices.PrescribeAS,\r\n commonServices.rxAuthority,\r\n commonServices.unlistedRA\r\n )\r\n \">\r\n <div style=\"padding: 0px\" class=\"mdl-grid\">\r\n <div class=\"mdl-cell mdl-cell--8-col mdl-cell--6-col-tablet mdl-cell--4-col-phone\">\r\n <span class=\"new_rx_popup_label_New\">HOTLINE: <span\r\n class=\"new_rx_popup_label_span\">{{commonServices.PrescribeAS ==\r\n 'RPBS'?'1800552580':'1800888333'}}</span></span>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--4-col mdl-cell--2-col-tablet mdl-cell--4-col-phone\">\r\n <div style=\"text-align: right\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Prescriber Name:<span>{{\r\n commonServices.patientDetails.firstName +\r\n \" \" +\r\n commonServices.patientDetails.lastName\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Prescriber Number:<span>{{\r\n commonServices.physicianDetails.prescriberNumber\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Patient Medicare Number:<span>{{\r\n commonServices.patientDetails.medicareNumber\r\n ? commonServices.patientDetails.medicareNumber\r\n : \"\"\r\n }}</span>\r\n </p>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--6-col mdl-cell--4-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Authority Form No:\r\n <span>{{\r\n commonServices.authorityFormNo\r\n ? commonServices.authorityFormNo\r\n : \"\"\r\n }}</span>\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"width: 100%; padding: 0px\">\r\n <div\r\n class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone new_rx_mobile_fullwidth\">\r\n <p class=\"new_rx_popup_label\">Authority Item:</p>\r\n <p class=\"authority_item_text\" [innerHTML]=\"commonServices.rxDisplayName\"></p>\r\n\r\n <p class=\"new_rx_popup_label_p new_rx_popup_tab_smallBoxes\" style=\"margin: 0px\">\r\n Quantity:<span style=\"color: rgb(45, 45, 45); font-weight: 600\"> {{ commonServices.quantityVal\r\n }}</span> Repeats:<span style=\"color: rgb(45, 45, 45); font-weight: 600\">\r\n {{ commonServices.repeatsVal }}</span> Default\r\n Quantity:{{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.maxQtyUnits!=null?(commonServices.quantityWithUnitFlag?\"1\r\n x \":\"\")+commonServices.selectedFormulation.maxQtyUnits:\"\"}}\r\n Default\r\n Repeats:{{commonServices.selectedFormulation!=null&&commonServices.selectedFormulation.repeats!=null?\r\n commonServices.selectedFormulation.repeats:\"\"}}\r\n </p>\r\n\r\n </div>\r\n </div>\r\n <div class=\"mdl-grid\" style=\"padding: 0px\">\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n PBS Listed Indication Authority:\r\n </p>\r\n <div class=\"w-100 new_rx_popup_tab_textarea\"\r\n style=\"min-height: 70px; max-height: 150px; overflow: auto\">\r\n <ul style=\"margin: 0px; padding-left: 15px;list-style: none;padding: 0px;\" *ngIf=\"\r\n this.isShowRestrictions == true &&\r\n commonServices.selectedFormulation.Restrictions !=\r\n null &&\r\n commonServices.selectedFormulation.Restrictions != ''\r\n \">\r\n <li style=\"font-size: 12px;padding: 0px 10px;margin-bottom: 10px;\"\r\n class=\"new_rx_pop_aut_int cursor\" *ngFor=\"\r\n let restriction of commonServices.selectedFormulation\r\n .Restrictions;\r\n index as i\r\n \" [class]=\"{\r\n new_rx_pop_aut_ins_select:\r\n commonServices.pbsListInstructionsId == i\r\n }\">\r\n <p style=\"\r\n margin: 0px;\r\n display: flex;\r\n align-content: center;\r\n margin-bottom: 10px;\r\n \" *ngIf=\"\r\n restriction.restrictionPreview != null &&\r\n restriction.restrictionPreview != '' &&\r\n restriction.restrictionText != null &&\r\n restriction.restrictionText != ''\r\n \">\r\n <span\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \">\r\n <span class=\"rx_restrictionText\" style=\"font-size: 12px;\"\r\n *ngIf=\"restriction.restrictionText.length < 80\"><b>{{\r\n restriction.restrictionType }}</b> -\r\n <span [innerHTML]=\"\r\n htmlToFormattedText(\r\n restriction.restrictionPreview\r\n )\r\n \"></span></span></span>\r\n <span class=\"rx_restrictionText\" style=\"font-size: 12px;\"\r\n *ngIf=\"restriction.restrictionText.length > 80\"><b (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \">{{\r\n restriction.restrictionType }}</b> -\r\n <span (click)=\"\r\n indicationAuthority(\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.maxQtyUnits:'',\r\n commonServices.quantityVal,\r\n commonServices.selectedFormulation!=null?commonServices.selectedFormulation.repeats:'',\r\n commonServices.repeatsVal,\r\n i,\r\n restriction\r\n )\r\n \" [innerHTML]=\"\r\n htmlToFormattedText(\r\n restriction.restrictionPreview\r\n ).substring(0, 80)\r\n \"></span>...\r\n <span>\r\n </span>\r\n <a style=\"cursor: pointer; color: #ff9978\" id=\"show-tooltip-id\">Show\r\n More</a></span>\r\n <ng-template #tooltipdemo>\r\n <p class=\"rx_tooltip_inner_box\" [innerHTML]=\"restriction.restrictionText\"></p>\r\n </ng-template>\r\n </p>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\"\r\n style=\"padding: 0px\">\r\n <!-- <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">PBS Notes:</p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" maxlength=\"500\" placeholder=\"\"\r\n [class]=\"{'edit-disable-data': commonServices.editPrescribedPrescription === true}\"\r\n class=\"w-100 new_rx_popup_tab_textarea\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.pbsNotes\"></textarea>\r\n </div> -->\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n Indication For This Authority:\r\n </p>\r\n <textarea autocomplete=\"off\" name=\"\" id=\"\" rows=\"2\" placeholder=\"\"\r\n [class]=\"{'edit-dsable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\"\r\n [(ngModel)]=\"commonServices.pbsListInstructions\" (ngModelChange)=\"onInputChange($event)\"\r\n class=\"w-100 new_rx_popup_tab_textarea rx-m-w-100\"></textarea>\r\n </div>\r\n <div class=\"mdl-cell mdl-cell--12-col mdl-cell--8-col-tablet mdl-cell--4-col-phone\">\r\n <p class=\"new_rx_popup_label\">\r\n {{\r\n getAuthorityLabel(commonServices.patientDetails.state)\r\n }}\r\n </p>\r\n <input autocomplete=\"off\" type=\"text\" name=\"approval\" placeholder=\"\"\r\n [class]=\"{'edit-dsable-data': commonServices.editPrescribedPrescription === true}\"\r\n [disabled]=\"commonServices.editPrescribedPrescription\" class=\"new_rx_popup_tab_input\"\r\n [(ngModel)]=\"commonServices.approvalNo\" (ngModelChange)=\"onInputchangeApprovalNo($event)\"\r\n (keypress)=\"authorityNoValidation($event)\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"\r\n !showAuthorityBox(\r\n commonServices.selectedFormulation!=null? commonServices.selectedFormulation.Restrictions:'',\r\n commonServices.PrescribeAS,\r\n commonServices.rxAuthority,\r\n commonServices.unlistedRA\r\n )\r\n \" style=\"width: 100%;\">\r\n <div style=\"text-align: right\" *ngIf=\"!commonServices.isMedicineRestrict\">\r\n <img src=\"https://passets.hola.health/rx-widgets/rx-mims.png\" alt=\"MIMS logo\"\r\n style=\"width: 80px; height: auto\" />\r\n </div>\r\n <div class=\"No_Authority_box\">\r\n <p>No Authority Required</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"rx_footer\">\r\n <div class=\"rx_footer_brand\">\r\n <p class=\"ml-10\"><span>Hola Consult | 1.0 <span *ngIf=\"commonServices.sandbox\">| <span\r\n class=\"rx_staging\">This is a sandbox environment</span></span></span></p>\r\n <p class=\"mt-15p\">\r\n <span class=\"rx_popup_footer_text\">\u00A9 2025 Hola Health, a brand of Packapill Pty Ltd | v\r\n 1.1.0 |\r\n <a href=\"https://hola.health/consult-terms\" target=\"_blank\">Terms</a> |\r\n <a href=\"https://hola.health/consult-privacy-policy\" target=\"_blank\">Privacy Policy</a> |\r\n <a href=\"mailto:support@hola.health\" target=\"_blank\">Help</a></span>\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";.loader{border:4px solid #f3f3f3;border-radius:50%;border-top:4px solid #020202;width:30px;height:30px;animation:spin 1s linear infinite;margin-left:18px;margin-top:18px}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.m-v4{margin-left:4vh}.rx_loader_button{border:2px solid #f3f3f3;border-radius:50%;border-top:4px solid #005760;width:30px;height:30px;animation:spin 1s linear infinite}.drp-icon{color:#fff;font-size:19px;margin-left:5px}.select-action-btn{display:flex;flex-direction:row;flex-wrap:nowrap;align-content:center;justify-content:center;align-items:center}.select-action-ul{width:80%}.new_rx_popup_mims .React__Overlay_Open_Popup{position:fixed;inset:0;background-color:#00000080!important}.new_rx_popup_mims .new_rx_mims_Overlay_Open_Popup{z-index:9999999!important}.new_rx_popup_mims .ReactModal__Overlay{overflow-y:auto!important}.new_rx_popup_mims .ReactModal_popup{width:100%;padding:0;margin:20px 0 0}.new_rx_popup_mims .ReactModal__Content{margin:auto}.edit-disable-data{pointer-events:none;opacity:.6}.new_rx_popup_btns{position:relative;display:flex;justify-content:flex-end;align-items:center}@media only screen and (max-width: 1023px){.rx_ipad_header_box_1{width:calc(35% - 16px)}.rx_ipad_header_box_2{width:calc(65% - 16px)}.rx_ipad_header_box_3{width:calc(100% - 16px)}.new_mobile_rx_popup_header_text{display:block;text-align:center}}@media screen and (max-width: 767px){.new_rx_popup_btns,.new_mobile_rx_popup_header_text{display:block;text-align:center}.new_mobile_rx_top_bottom_0{margin-top:0;margin-bottom:0}.new_mobile_rx_btn{margin-bottom:5px}}.favourites-toggle-link{color:#0077b6!important;text-decoration:underline;cursor:pointer!important;font-size:14px;font-weight:400;line-height:20px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;outline:none!important;-webkit-tap-highlight-color:transparent}\n"] }]
4705
4705
  }], ctorParameters: function () { return [{ type: i1.ApiService }, { type: i2.CommonServices }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i3.DatePipe }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { wrapperRef: [{
4706
4706
  type: ViewChild,
4707
4707
  args: ['MedicineDropdown', { static: false }]
@@ -4749,4 +4749,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
4749
4749
  type: HostListener,
4750
4750
  args: ['click', ['$event']]
4751
4751
  }] } });
4752
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaG9sYS1yeC9zcmMvbGliL3J4L3J4LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2hvbGEtcngvc3JjL2xpYi9yeC9yeC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBMEIsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUcxSyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUUxSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxrRkFBa0YsQ0FBQztBQUMzSSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUNySSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7O0FBUTNFLE1BQU0sT0FBTyxXQUFXO0lBcUd0QixZQUNTLFVBQXNCLEVBQ3RCLGNBQThCLEVBQzdCLFVBQXNCLEVBQ3RCLFlBQStCLEVBQ2hDLFFBQWtCLEVBQ2pCLFFBQW1CLEVBQ25CLEtBQWlCLEVBQ2pCLGdCQUFrQztRQVBuQyxlQUFVLEdBQVYs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LG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1SixVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDN0osVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FB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QWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNsTyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbE8sdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEksMkJBQTJCLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFD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QUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbE8sdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEksMkJBQTJCLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMscUJB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QyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNHLE9BQU87c0JBQXBELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDUyxjQUFjO3NCQUFsRSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDSixRQUFRO3NCQUF0RCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0ksVUFBVTtzQkFBMUQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRXJDLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFUCx1QkFBdUI7c0JBRHRCLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQXFGVixPQUFPO3NCQUFoRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ2QsVUFBVTtzQkFBbkMsU0FBUzt1QkFBQyxhQUFhO2dCQUNhLE9BQU87c0JBQTNDLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFvQ25DLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlcyB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbW1vbic7XHJcbmltcG9ydCB7IEJyYW5kSW5jbHVkZUNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kLWluY2x1ZGUvYnJhbmQtaW5jbHVkZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdmFpbGFibGVGb3JtdWxhdGlvbnNDb21wb25lbnQgfSBmcm9tICcuLi9icmFuZC1pbmNsdWRlL2F2YWlsYWJsZS1mb3JtdWxhdGlvbnMvYXZhaWxhYmxlLWZvcm11bGF0aW9ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElzQXV0aG9yaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vaXMtYXV0aG9yaXR5L2lzLWF1dGhvcml0eS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZWFsVGltZVByZXNjcmlwdGlvbk1vbml0b3JpbmdDb21wb25lbnQgfSBmcm9tICcuLi9yZWFsLXRpbWUtcHJlc2NyaXB0aW9uLW1vbml0b3JpbmcvcmVhbC10aW1lLXByZXNjcmlwdGlvbi1tb25pdG9yaW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbmZpcm1QYXRpZW50Q29udGFjdERldGFpbHNDb21wb25lbnQgfSBmcm9tICcuLi9jb25maXJtLXBhdGllbnQtY29udGFjdC1kZXRhaWxzL2NvbmZpcm0tcGF0aWVudC1jb250YWN0LWRldGFpbHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGFzc3dvcmRDb21wb25lbnQgfSBmcm9tICcuLi9wYXNzd29yZC9wYXNzd29yZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBjb25maWcsIGVycm9yY29uZmlnIH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2NvbmZpZyc7XHJcbmltcG9ydCB7IENlYXNlUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9jZWFzZS1wb3B1cC9jZWFzZS1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZWlzc3VlUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9yZWlzc3VlLXBvcHVwL3JlaXNzdWUtcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xvc2VQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2Nsb3NlLXBvcHVwL2Nsb3NlLXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcngnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yeC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcnguY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJ4Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdNZWRpY2luZURyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIHdyYXBwZXJSZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ1ByZXNjcmliZURyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByZXNjcmliZURyb3Bkb3duUmVmITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdEb3NlRHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgZG9zZVJlZiE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnRnJlcURyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIGZyZXFSZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3N0cERyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIHN0cFJlZiE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnRm9vZERyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIGZvb2RSZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ0luc3RydWN0aW9uRHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgSW5zdHJ1Y3Rpb25SZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ1JvdXRlRHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgcm91dGVSZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ1B1cnBvc2VEcm9wZG93bicsIHsgc3RhdGljOiBmYWxzZSB9KSBwdXJwb3NlUmVmITogRWxlbWVudFJlZjtcclxuXHJcbiAgQE91dHB1dCgpIGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHN1Ym1pdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEFjdGlvbkRyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgc2VsZWN0QWN0aW9uRHJvcGRvd25SZWYhOiBFbGVtZW50UmVmO1xyXG4gIHNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgZG9zZURhdGEgPSBbXTtcclxuICBmcmVxdWVuY3lEYXRhID0gW107XHJcbiAgc2VuZHRvcGhhcm1hY3lEYXRhOiBhbnkgPSBbXTtcclxuICBmb29kRGF0YSA9IFtdO1xyXG4gIHB1cnBvc2VEYXRhID0gW107XHJcbiAgcm91dGVEYXRhID0gW107XHJcbiAgY2Vhc2VEYXRhID0gW107XHJcbiAgaW5zdHJ1Y3Rpb25EYXRhOiBhbnkgPSBbXTtcclxuICByb3V0ZURhdGFGaWx0ZXIgPSAnJztcclxuICBJbnN0cnVjdGlvbklkID0gJyc7XHJcbiAgLy8gdGltZXI6IGFueTtcclxuICAvL3dhaXRUaW1lID0gMjUwMDtcclxuICBpc1N0aWxsU2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgcGFnZSA9IDE7XHJcbiAgc2VsZWN0ZWRNZWRpY2luZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgc2VsZWN0UEJUTkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgc2VsZWN0RG9zZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgc2VsZWN0RnJlcURyb3Bkb3duID0gZmFsc2U7XHJcbiAgc2VsZWN0c3RwRHJvcGRvd24gPSBmYWxzZTtcclxuICBzZWxlY3RGb29kRHJvcGRvd24gPSBmYWxzZTtcclxuICBzZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSB0cnVlO1xyXG4gIHNlbGVjdFJvdXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICBzZWxlY3RQdXJwb3NlRHJvcGRvd24gPSBmYWxzZTtcclxuICBtZWRpU2VhcmNoVmFsdWUgPSAnJztcclxuICBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uID0gJyc7XHJcbiAgc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICBmYXZNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gIHNlYXJjaGVkTWVkaWNpbmVMaXN0OiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWw6IGFueSA9IFtdO1xyXG4gIG9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gIHJ4T25seVBCUyA9IGZhbHNlO1xyXG4gIHJ4UHJpdmF0ZSA9IGZhbHNlO1xyXG4gIHJlc3RyaWN0aW9ucyA9IG51bGw7XHJcbiAgaXNTaG93UmVzdHJpY3Rpb25zID0gZmFsc2U7XHJcbiAgcHJlc2NyaWJlQVNfUEJTID0gdHJ1ZTtcclxuICBwcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICBicmFuZE1lZGljcHJvZHVjdElkID0gJyc7XHJcbiAgYnJhbmRNZWRpY3Bic0NvZGUgPSAnJztcclxuICBicmFuZE1lZGljUXR5ID0gJyc7XHJcbiAgYnJhbmRNZWRpY1JlcCA9ICcnO1xyXG4gIHNlbGVjdGVkQnJhbmRJbmRleCA9ICcnO1xyXG4gIG1vbGVjdWxlTmFtZVRleHQgPSAnJztcclxuICBtb2xlY3VsZU5hbWVUeXBlID0gJyc7XHJcbiAgbW9sZWN1bGVTdHJlbmd0aFRleHQgPSAnJztcclxuICBpc1J0cG1OZXh0ID0gZmFsc2U7XHJcbiAgc2VsZWN0aW9uYnRuTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICBpc05vblBic0ZsYWc6IGFueSA9IGZhbHNlO1xyXG4gIGFib3J0QnRuRmxhZyA9IGZhbHNlO1xyXG4gIGFib3J0ZGlzYWJsZSA9IGZhbHNlO1xyXG4gIHJlc3BvbnNlRGF0YTogYW55ID0ge1xyXG4gICAgaXNBYm9ydDogZmFsc2UsXHJcbiAgICBpc1ByZXNjcmliZTogZmFsc2UsXHJcbiAgICBhYm9ydFN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgcHJlc2NyaWJlU3VjY2VzczogZmFsc2UsXHJcbiAgICBwcmVzY3JpYmVkYXRhOiBcIlwiLFxyXG4gICAgYWJvcnRNc2c6IFwiXCIsXHJcbiAgICBQcmVzY3JpYmVNc2c6IFwiXCIsXHJcbiAgICBwcmVzY3JpYmVFcnJvcjogZmFsc2UsXHJcbiAgICBhYm9ydEVycm9yOiBmYWxzZSxcclxuICAgIHByZXNjcmliZUVycl9jb2RlOiBcIlwiLFxyXG4gICAgYWJvcnRFcnJfY29kZTogXCJcIixcclxuICAgIGJvZHk6IFwiXCJcclxuICB9XHJcbiAgcHJvZEhpZGRlbk5hbWUgPSBcIlwiO1xyXG4gIFByb2R1Y3RUeXBlID0gXCJcIjtcclxuICBQcm9kdWN0U2VhcmNoTmFtZSA9IFwiXCI7XHJcbiAgc2VhcmNoTWVkaWNpbmVzTGVuZ3RoOiBhbnkgPSBcIlwiO1xyXG4gIHNlYXJjaE1lZGljaW5lc1BhZ2VOdW1iZXIgPSAxO1xyXG4gIHNlYXJjaEJ5bmFtZUxlbmd0aDogYW55ID0gXCJcIjtcclxuICBzZWFyY2hCeW5hbWVQYWdlTnVtYmVyID0gMTtcclxuICBpc2VwcmlzY3JpYmVwcmludCA9IGZhbHNlO1xyXG4gIGVkaXRJbnN0cnVjdGlvbkZsYWcgPSBmYWxzZTtcclxuICBQcmltYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gIFNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICBwcmVzY3JpYmVBU19SUEJTX1VSQSA9IHRydWU7XHJcbiAgdGVtcEluc3RydWN0aW9uRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gIGlzUHJlc2NyaWJlQXNQcml2YXRlT25seSA9IGZhbHNlO1xyXG4gIHRlbXBBdXRob3JpdHlGb3JtTm8gPSBcIlwiO1xyXG4gIGNsaWVudElkOiBhbnkgPSBcIlwiO1xyXG4gIHNob3dGYXZvdXJpdGVNZWQgPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdyeHdpZGdldHMnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250ZW50ITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sdGlwZGVtbycpIG15VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rlc3QnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0b29sdGlwITogbnVsbDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlLFxyXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2VzOiBDb21tb25TZXJ2aWNlcyxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgY2hhbmdlZGV0ZWN0OiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSB2aWV3UmVmQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICkge1xyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXBvcF93aWQnLCBgMTIwMHB4YCk7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcG9wdXB3JywgYDEyMDBweGApO1xyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWhlYWRlcnBhZGRpbmcnLCBgMHB4YCk7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcG9wdXBoJywgYDY1MHB4YCk7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taGVhZGVyZm9udHdlaWdodCcsIGA0MDBgKTtcclxuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcclxuICAgICAgICB0aGlzLmhpZGVUb29sVGlwKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGlkZVRvb2xUaXAoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy50b29sdGlwKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMudG9vbHRpcCk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJoaWRlVG9vbFRpcFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbmNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NOYW1lID09IFwicnhfdG9vbHRpcF9pbm5lcl9ib3hcIiB8fCBldmVudC50YXJnZXQuY2xhc3NOYW1lLmluY2x1ZGVzKFwiX19yZWFjdF9jb21wb25lbnRfdG9vbHRpcFwiKSkge1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChldmVudC50YXJnZXQuaWQgPT0gJ3Nob3ctdG9vbHRpcC1pZCcpIHtcclxuICAgICAgICAgIHRoaXMuaGlkZVRvb2xUaXAoKTtcclxuICAgICAgICAgIGlmICh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7IHRoaXMuY3JlYXRlVG9vbFRpcChldmVudCkgfVxyXG4gICAgICAgIH0gZWxzZSB7IHRoaXMuaGlkZVRvb2xUaXAoKTsgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIm9uY2xpY2tcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY2xpZW50SWQgPSB0aGlzLmNvbW1vblNlcnZpY2VzLmdldENyZWRldGlhbCgpO1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmlwdGlvbikge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xvc2VFcnJvclJlc3BvbnNlID0gbnVsbDtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLmdldEFsbE1pbXNWYWx1ZSgpO1xyXG4gICAgICB0aGlzLmdldEluc3RydWN0aW9uVmFsdWVzKCk7XHJcbiAgICAgIHRoaXMuZ2V0RmF2b3VydGllc0xpc3QoKTtcclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmlwdGlvbikge1xyXG4gICAgICAgIHRoaXMuc2V0RWRpdFZhbHVlcyh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0KVxyXG4gICAgICAgICAgdGhpcy5nZXRSZXN0cmljdGVkTWVkaWNpbmUoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscyA9IHt9O1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuaWhpTnVtYmVyID0gdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5paGlOdW1iZXIgPT0gbnVsbCB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmloaU51bWJlciA9PSB1bmRlZmluZWQgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5paGlOdW1iZXIgPT0gXCJcIiA/IDAgOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmloaU51bWJlclxyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5ocGlvTnVtYmVyID0gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMuaHBpb051bWJlciA9PSBudWxsIHx8IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLmhwaW9OdW1iZXIgPT0gdW5kZWZpbmVkIHx8IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLmhwaW9OdW1iZXIgPT0gXCJcIiA/IDAgOiB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5ocGlvTnVtYmVyXHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy5ocGlpTnVtYmVyID0gdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLmhwaWlOdW1iZXIgPT0gbnVsbCB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMuaHBpaU51bWJlciA9PSB1bmRlZmluZWQgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLmhwaWlOdW1iZXIgPT0gXCJcIiA/IDAgOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMuaHBpaU51bWJlclxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJuZ09uSW5pdFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlc3RyaWN0ZWRNZWRpY2luZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuUEhZU0lDSUFOLkdFVF9SRVNUUklDVEVEX01FRElDSU5FKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlOyB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiUnhDb21wb25lbnRcIiwgXCJnZXRSZXN0cmljdGVkTWVkaWNpbmVcIik7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCA9IHJlcy5yZXNwb25zZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHM/LnByb2R1Y3RJZCkpIHtcclxuICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0LmZpbmRJbmRleCgoeDogeyBwcm9kdWN0SWQ6IGFueTsgfSkgPT4geC5wcm9kdWN0SWQgPT0gTnVtYmVyKHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnByb2R1Y3RJZCkpO1xyXG4gICAgICAgICAgICAgIHZhciBzZWxlY3RlZGRhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRkYXRhKSAmJiBzZWxlY3RlZGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdC51bnNoaWZ0KHNlbGVjdGVkZGF0YVswXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0UmVzdHJpY3RlZE1lZGljaW5lXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldFJlc3RyaWN0ZWRNZWRpY2luZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBbXTtcclxuICAgICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldFJlc3RyaWN0ZWRNZWRpY2luZVwiKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0UmVzdHJpY3RlZE1lZGljaW5lXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoZGF0YTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeGlkID0gXCJcIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWFyY2hBcGlTdG9wRmxhZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IGRhdGEgIT0gbnVsbCA/IGRhdGEgOiB0aGlzLmNvbW1vblNlcnZpY2VzLmNsb3NlRXJyb3JSZXNwb25zZSAhPSBudWxsIHx8IHRoaXMuY29tbW9uU2VydmljZXMuY2xvc2VFcnJvclJlc3BvbnNlICE9IHVuZGVmaW5lZCA/IHRoaXMuY29tbW9uU2VydmljZXMuY2xvc2VFcnJvclJlc3BvbnNlIDogbnVsbDtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbG9zZUVycm9yUmVzcG9uc2UgPSBudWxsO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlbW92ZUVyclRvYXN0KCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuICAgICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJjbG9zZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNlYXNlUHJlc2NyaWJlTWVkKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tTdGF0dXNBbmRTY3JpcHR0eXBlKHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnNjcmlwdFR5cGUsIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cywgMikpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID0gZmFsc2U7IHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oQ2Vhc2VQb3B1cENvbXBvbmVudCwgdGhpcy5jb250ZW50LCB0aGlzLmNlYXNlRGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAhPSBudWxsICYmIHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKFwiXCIsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCB0cnVlLCByZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImNlYXNlUHJlc2NyaWJlTWVkXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsUHJlc2NyaWJlTWVkKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tTdGF0dXNBbmRTY3JpcHR0eXBlKHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnNjcmlwdFR5cGUsIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cywgNCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID0gZmFsc2U7IHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oQ2xvc2VQb3B1cENvbXBvbmVudCwgdGhpcy5jb250ZW50LCAxKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICE9IG51bGwgJiYgcmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoXCJcIiwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHRydWUsIHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChyZXMgIT0gbnVsbCAmJiByZXMuaXNEaXNwZW5zZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKENvbmZpcm1QYXRpZW50Q29udGFjdERldGFpbHNDb21wb25lbnQsIHRoaXMuY29udGVudCwgMikuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmIGRhdGEuZmxhZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKENlYXNlUG9wdXBDb21wb25lbnQsIHRoaXMuY29udGVudCwgdGhpcy5jZWFzZURhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCAmJiByZXNwb25zZS5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoXCJcIiwgcmVzcG9uc2UucmVzcG9uc2VfbWVzc2FnZSwgdHJ1ZSwgcmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiY2FuY2VsUHJlc2NyaWJlTWVkXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsRHJhZnQoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja1N0YXR1c0FuZFNjcmlwdHR5cGUodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZSwgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLCA0KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aW9uQnRuRHJvcGRvd24gPSBmYWxzZTsgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZGlhbG9nb3BlbihDbG9zZVBvcHVwQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIDIpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgIT0gbnVsbCAmJiByZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShcIlwiLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgdHJ1ZSwgcmVzLmRhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJjYW5jZWxEcmFmdFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlaXNzdWVQcmVzY3JpYmVNZWQoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja1N0YXR1c0FuZFNjcmlwdHR5cGUodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZSwgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLCAzKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aW9uQnRuRHJvcGRvd24gPSBmYWxzZTsgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZGlhbG9nb3BlbihSZWlzc3VlUG9wdXBDb21wb25lbnQsIHRoaXMuY29udGVudCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAhPSBudWxsICYmIHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKFwiXCIsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCB0cnVlLCByZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInJlaXNzdWVQcmVzY3JpYmVNZWRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmludFByZXNjcmliZU1lZCgpIHtcclxuICAgIHZhciBwYXlsb2FkID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja1N0YXR1c0FuZFNjcmlwdHR5cGUodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZSwgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLCAxKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aW9uQnRuRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbmJ0bkxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgICByZXF1ZXN0X3R5cGU6IFwicGFyYW1ldGVyXCIsXHJcbiAgICAgICAgICByeElkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4aWQsXHJcbiAgICAgICAgICB0eXBlOiBcIjFcIixcclxuICAgICAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5HZXQoY29uZmlnLlBIWVNJQ0lBTi5SWF9QUklOVCArIHRoaXMuY29tbW9uU2VydmljZXMucnhpZCArIFwiJnR5cGU9MSZjbGllbnRJZD1cIiArIHRoaXMuY2xpZW50SWQpLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXNwb25zZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiUnhDb21wb25lbnRcIiwgXCJwcmludFByZXNjcmliZU1lZFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXRvYihyZXNwb25zZS5maWxlKS5zcGxpdCgnJykubWFwKGNoYXIgPT4gY2hhci5jaGFyQ29kZUF0KDApKSk7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBiYmIgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL3BkZlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmJiKTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbmV3V2luZG93ID0gd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdXaW5kb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdXaW5kb3cuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW50V2FybmluZ1BvcCgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShcIlwiLCByZXNwb25zZS5yZXNwb25zZV9tZXNzYWdlLCB0cnVlLCByZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXNwb25zZS5yZXNwb25zZV9tZXNzYWdlLCByZXNwb25zZS5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJpbnRQcmVzY3JpYmVNZWRcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UsICdlcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzcG9uc2UuZXJyb3JfY29kZSwgcmVzcG9uc2UucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uYnRuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25idG5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcmludFByZXNjcmliZU1lZFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25idG5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcmludFByZXNjcmliZU1lZFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb25idG5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcmludFByZXNjcmliZU1lZFwiLCBwYXlsb2FkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrU3RhdHVzQW5kU2NyaXB0dHlwZShzY3JpcHR0eXBlOiBhbnksIHN0YXR1czogYW55LCBmbGFnOiBhbnkpOiBCb29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHN0YXR1cykgJiYgc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT0gJ3ByZXNjcmliZWQnKSB7XHJcbiAgICAgICAgaWYgKGZsYWcgPT0gMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmbGFnID09IDIpIHtcclxuICAgICAgICAgIHJldHVybiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNjcmlwdHR5cGUpICYmIHNjcmlwdHR5cGUudG9Mb3dlckNhc2UoKSA9PSAnZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmbGFnID09IDMpIHtcclxuICAgICAgICAgIHJldHVybiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNjcmlwdHR5cGUpICYmIHNjcmlwdHR5cGUudG9Mb3dlckNhc2UoKSA9PSAnZScgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3kgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5ID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmxhZyA9PSA0KSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzdGF0dXMpICYmIHN0YXR1cy50b0xvd2VyQ2FzZSgpID09ICdkcmFmdCcgJiYgZmxhZyA9PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImNoZWNrU3RhdHVzQW5kU2NyaXB0dHlwZVwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGFnZU51bWJlck9uZVRvTmV4dCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzUwLm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzUwLmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl81MC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl81MC5tZXNzYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlID0gU3RyaW5nKHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSkudHJpbSgpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRvc2VTZWFyY2hWYWx1ZSA9IFN0cmluZyh0aGlzLmNvbW1vblNlcnZpY2VzLmRvc2VTZWFyY2hWYWx1ZSkudHJpbSgpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZSA9IFN0cmluZyh0aGlzLmNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZS50cmltKCkpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSA9IFN0cmluZyh0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSkudHJpbSgpO1xyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZG9zZVNlYXJjaFZhbHVlKSAmJiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZm9vZFNlYXJjaFZhbHVlKSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZnJlcVNlYXJjaFZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzU0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzU0LmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl81NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl81NC5tZXNzYWdlKTtcclxuICAgICAgICB0aGlzLmNsZWFySW5zdHJ1Y3Rpb24oKTtcclxuICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCkgfHwgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCkgPD0gMCB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBcIm5hblwiKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNTUubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNTUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzU1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzU1Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCA9PSBcIk5hTlwiKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsID0gXCIwXCI7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucm91dGVTZWFyY2hWYWx1ZSA9IFN0cmluZyh0aGlzLmNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWUpLnRyaW0oKTtcclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNzUubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNzUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzc1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzc1Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdERhdGUpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNDcubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNDcuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzQ3LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzQ3Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc3RhcnREYXRlKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzQ4Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzQ4LmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl80OC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl80OC5tZXNzYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmVuZERhdGUpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNDkubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNDkuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzQ5LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzQ5Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdldFRyYWRlTmFtZURpc3BsYXkoKTtcclxuICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMudG9Mb3dlckNhc2UoKSAhPSAnZHJhZnQnICYmIHRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlbW92ZUVyclRvYXN0KCk7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5wYWdlICsgMTtcclxuICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICB2YXIgc2NoZWR1bGVOdW1iZXIgPSB0aGlzLmNvbW1vblNlcnZpY2VzLmdldFNjaGVkdWxlTnVtYmVyKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgbGV0IHJlc3RlY3RlZFN0YXRlcyA9IFsnTlNXJywgJ0FDVCcsICdXQScsICdRTEQnLCAnTlQnLCAnVEFTJ107XHJcbiAgICAgICAgbGV0IHBhdGllbnRTdGF0ZXMgPSB0aGlzLmdldFN0YXRlQ29kZUZyb21TdGF0ZU5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5zdGF0ZSkudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAoc2NoZWR1bGVOdW1iZXIudG9Mb3dlckNhc2UoKSA9PSBcInM4XCIgJiYgcmVzdGVjdGVkU3RhdGVzLmluZGV4T2YocGF0aWVudFN0YXRlcykgIT0gLTEgJiYgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsKSA+IDApIHtcclxuICAgICAgICAgIGlmICgodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwpIHx8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwpID09IDApKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gZXJyb3Jjb25maWcuZXJyb3JfNTYubWVzc2FnZS5yZXBsYWNlKFwiJDBcIiwgcGF0aWVudFN0YXRlcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKG1lc3NhZ2UsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNTYuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl81Ni5jb2RlLCBtZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc3RhdGVTY2hlZHVsZU51bWJlciA9IHRoaXMuZ2V0U3RhdGVTY2hlZHVsZU51bWJlcih0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pO1xyXG4gICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHN0YXRlU2NoZWR1bGVOdW1iZXIpICE9IG51bGwgJiYgc3RhdGVTY2hlZHVsZU51bWJlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBpZiAocGF0aWVudFN0YXRlcy50b0xvd2VyQ2FzZSgpID09IFwidGFzXCIgJiYgc3RhdGVTY2hlZHVsZU51bWJlclswXS5pbmRleE9mKFwiUzREXCIpICE9IC0xICYmIHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCkgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsID09IFwiXCIgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCA9PSBudWxsIHx8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwpID09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82OC5tZXNzYWdlLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY4LmNvZGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82OC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82OC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAocGF0aWVudFN0YXRlcy50b0xvd2VyQ2FzZSgpID09IFwibnN3XCIgJiYgc3RhdGVTY2hlZHVsZU51bWJlclswXS5pbmRleE9mKFwiUzRCXCIpICE9IC0xICYmIHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCkgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsID09IFwiXCIgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCA9PSBudWxsIHx8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwpID09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82OS5tZXNzYWdlLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY5LmNvZGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82OS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82OS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICgodGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVZhbHVlKSkpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82Ni5tZXNzYWdlLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY2LmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82Ni5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82Ni5tZXNzYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dBdXRob3JpdHlCb3godGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucywgdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUywgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSwgdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObyA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zID0gXCJcIjtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnNJZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdmFyIHJ4RGlzcGxheU5hbWUgPSB0aGlzLmdldFRyYWRlTmFtZSgpO1xyXG4gICAgICAvLyBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wID09IHRydWUgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID09IHRydWUgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0udG9Mb3dlckNhc2UoKSA9PSAnZ2F1emUnKSB7XHJcbiAgICAgIC8vICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWUgPSB0aGlzLmdldEV4dGVtcFRUUE5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKTtcclxuICAgICAgLy8gICAgIHRoaXMuY29tbW9uU2VydmljZXMuZW9wRGlzcGxheU5hbWUgPSB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWU7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSA9IHJ4RGlzcGxheU5hbWU7XHJcbiAgICAgIC8vICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVvcERpc3BsYXlOYW1lID0gcnhEaXNwbGF5TmFtZTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gcnhEaXNwbGF5TmFtZS50cmltKCkgKyAnICcgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybS50cmltKCkgKyAnICcgKyAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1vbGVjdWxlU3RyZW5ndGggPT0gbnVsbCA/ICcnIDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1vbGVjdWxlU3RyZW5ndGgudHJpbSgpICsgdGhpcy5yeFN0cmVuZ3RoY2FsY3VsYXRpb24odGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSk7XHJcbiAgICAgIC8vICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSA9IHJ4RGlzcGxheU5hbWUudHJpbSgpICsgJyAnICsgKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tb2xlY3VsZVN0cmVuZ3RoID09IG51bGwgPyAnJyA6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tb2xlY3VsZVN0cmVuZ3RoLnRyaW0oKSArIHRoaXMucnhTdHJlbmd0aGNhbGN1bGF0aW9uKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbikpO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIHZhciBwcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUgPSB0aGlzLmdldFRyYWRlTmFtZSgpO1xyXG4gICAgICAvLyBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wID09IHRydWUgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID09IHRydWUgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0udG9Mb3dlckNhc2UoKSA9PSAnZ2F1emUnKSB7XHJcbiAgICAgIC8vICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlKSB7XHJcbiAgICAgIC8vICAgICBsZXQgZXh0ZW1wVFRQTmFtZSA9IHRoaXMuZ2V0RXh0ZW1wVFRQTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pO1xyXG4gICAgICAvLyAgICAgbGV0IFBJdGVtVGhyZWUgPSBleHRlbXBUVFBOYW1lLmxhc3RJbmRleE9mKCdbJyk7XHJcbiAgICAgIC8vICAgICBsZXQgUEl0ZW1UaHJlZTEgPSBleHRlbXBUVFBOYW1lLnNsaWNlKDAsIFBJdGVtVGhyZWUpO1xyXG4gICAgICAvLyAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUgPSBQSXRlbVRocmVlMS50cmltKCk7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgIGxldCBQSXRlbVRocmVlMiA9IHByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZS5sYXN0SW5kZXhPZignWycpO1xyXG4gICAgICAvLyAgICAgbGV0IFBJdGVtVGhyZWUzID0gcHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlLnNsaWNlKDAsIFBJdGVtVGhyZWUyKTtcclxuICAgICAgLy8gICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlID0gUEl0ZW1UaHJlZTMudHJpbSgpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgLy8gICB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZSA9IHByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZS50cmltKCkgKyAnICcgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybSArICcgJyArICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubW9sZWN1bGVTdHJlbmd0aCA9PSBudWxsID8gJycgOiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubW9sZWN1bGVTdHJlbmd0aC50cmltKCkgKyB0aGlzLnJ4U3RyZW5ndGhjYWxjdWxhdGlvbk5ldyh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pKTtcclxuICAgICAgLy8gfVxyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlLnRvTG93ZXJDYXNlKCkgIT0gJ25vbiBwYnMnICYmIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMudG9Mb3dlckNhc2UoKSAhPSAncHJpdmF0ZScgJiYgKCghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlXaXRoVW5pdEZsYWcgPyBwYXJzZUZsb2F0KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cykgKyAwLjUgOiAxKSA8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwpIHx8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzKSA8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCkpKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oSXNBdXRob3JpdHlDb21wb25lbnQsIHRoaXMuY29udGVudCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4QXV0aG9yaXR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObyA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnMgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2xlY3VsZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYWNncywgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1vbGVjdWxlU3RyZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSBmYWxzZSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmxtYmMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5jbHVkZWJyYW5kcG9wb3BlbigpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvc2VGcmVxVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlV2FyaW5nUG9wT3BlbihzY2hlZHVsZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVkdWxlTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT0gXCJzOFwiICYmIHRoaXMuY29tbW9uU2VydmljZXMuaXNTOFdhcm5pbmdOZXh0ID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TOFdhcmluZ1BvcE9wZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlbW92ZUVyclRvYXN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvc2VGcmVxVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVdhcmluZ1BvcE9wZW4oc2NoZWR1bGVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlZHVsZU51bWJlci50b0xvd2VyQ2FzZSgpID09IFwiczhcIiAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmlzUzhXYXJuaW5nTmV4dCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLlM4V2FyaW5nUG9wT3BlbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhBdXRob3JpdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yZW1vdmVFcnJUb2FzdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5wYWdlICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5V2l0aFVuaXRGbGFnID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzIDogMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCA9IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEVuZERhdGVDYWxjdWxhdGVyKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRvc2VGcmVxVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVdhcmluZ1BvcE9wZW4oc2NoZWR1bGVOdW1iZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVtb3ZlRXJyVG9hc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgKyAxO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSBmYWxzZSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmxtYmMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbmNsdWRlYnJhbmRwb3BvcGVuKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRvc2VGcmVxVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVXYXJpbmdQb3BPcGVuKHNjaGVkdWxlTnVtYmVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2NoZWR1bGVOdW1iZXIudG9Mb3dlckNhc2UoKSA9PSBcInM4XCIgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1M4V2FybmluZ05leHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuUzhXYXJpbmdQb3BPcGVuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yZW1vdmVFcnJUb2FzdCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZSArIDE7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRvc2VGcmVxVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlV2FyaW5nUG9wT3BlbihcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlbW92ZUVyclRvYXN0KCk7XHJcbiAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgKyAxO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwYWdlTnVtYmVyT25lVG9OZXh0XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5jbHVkZWJyYW5kcG9wb3BlbigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMubW9sZWN1bGUodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFjZ3MsIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tb2xlY3VsZVN0cmVuZ3RoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKEJyYW5kSW5jbHVkZUNvbXBvbmVudCwgdGhpcy5jb250ZW50KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEJyYW5kRm9ybXVsYXRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb247XHJcbiAgICAgICAgICB2YXIgbW9sZWN1bGVkYXRhID0ge1xyXG4gICAgICAgICAgICBtb2xlY3VsZU5hbWVUZXh0OiB0aGlzLm1vbGVjdWxlTmFtZVRleHQsXHJcbiAgICAgICAgICAgIG1vbGVjdWxlTmFtZVR5cGU6IHRoaXMubW9sZWN1bGVOYW1lVHlwZSxcclxuICAgICAgICAgICAgbW9sZWN1bGVTdHJlbmd0aFRleHQ6IHRoaXMubW9sZWN1bGVTdHJlbmd0aFRleHQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkTWVkaWNpbmVMaXN0OiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZGlhbG9nb3BlbihBdmFpbGFibGVGb3JtdWxhdGlvbnNDb21wb25lbnQsIHRoaXMuY29udGVudCwgbW9sZWN1bGVkYXRhKS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWwucmVzcG9uc2VmbGFnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEJyYW5kRm9ybXVsYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEJyYW5kRm9ybXVsYXRpb24gIT0gJycgJiZcclxuICAgICAgICAgICAgICAgIHZhbC5mbGFnXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkNvbmZpcm1BbHRlckJyYW5kKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkQnJhbmRGb3JtdWxhdGlvbiAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEJyYW5kRm9ybXVsYXRpb24gIT0gJydcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRCcmFuZEZvcm11bGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCcmFuZEluZGV4ICE9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRCcmFuZEluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgOiAwXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyYW5kTWVkaWNwcm9kdWN0SWQgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRNZWRpY3Bic0NvZGUgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRNZWRpY1F0eSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icmFuZE1lZGljUmVwID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYnJhbmRNZWRpY3Byb2R1Y3RJZCA9ICcnO1xyXG4gICAgICAgICAgICAgIHRoaXMuYnJhbmRNZWRpY3Bic0NvZGUgPSAnJztcclxuICAgICAgICAgICAgICB0aGlzLmJyYW5kTWVkaWNRdHkgPSAnJztcclxuICAgICAgICAgICAgICB0aGlzLmJyYW5kTWVkaWNSZXAgPSAnJztcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YXIgc2NoZWR1bGVOdW1iZXIgPSB0aGlzLmNvbW1vblNlcnZpY2VzLmdldFNjaGVkdWxlTnVtYmVyKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgICBpZiAodGhpcy5kb3NlRnJlcVZhbGlkYXRpb24oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlV2FyaW5nUG9wT3BlbihzY2hlZHVsZU51bWJlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVkdWxlTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT0gXCJzOFwiICYmIHRoaXMuY29tbW9uU2VydmljZXMuaXNTOFdhcm5pbmdOZXh0ID09IHRydWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLlM4V2FyaW5nUG9wT3BlbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVtb3ZlRXJyVG9hc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaW5jbHVkZWJyYW5kcG9wb3BlblwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvc2VGcmVxVmFsaWRhdGlvbigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUpIHx8IHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSkgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZm9vZFNlYXJjaFZhbHVlKSB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlKSB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZG9zZUZyZXFWYWxpZGF0aW9uXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgUzhXYXJpbmdQb3BPcGVuKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIGRhdGEgPSBcIldhcm5pbmchIFRoaXMgaXMgYW4gUzggZHJ1Zy4gWW91IG1pZ2h0IG5lZWQgdG8gaGFuZCB3cml0ZSB5b3VyIHNpZ25hdHVyZSwgcXVhbnRpdHkgaW4gd29yZHMgYW5kIGZpZ3VyZXMgYW5kL29yIG90aGVyIGRldGFpbHMgYXMgcGVyIHRoZSBzdGF0ZSByZWd1bGF0aW9uc1wiO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oUmVhbFRpbWVQcmVzY3JpcHRpb25Nb25pdG9yaW5nQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIGRhdGEpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1M4V2FybmluZ05leHQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVtb3ZlRXJyVG9hc3QoKTtcclxuICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZSArIDE7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiUzhXYXJpbmdQb3BPcGVuXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVXYXJpbmdQb3BPcGVuKHNjaGVkdWxlTnVtYmVyOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBkYXRhID0gXCJFbnN1cmUgYWxsIG5lY2Vzc2FyeSBmaWVsZHMgYXJlIGZpbGxlZCB0byBhdm9pZCBwaGFybWFjeSByZWplY3Rpb24gZHVlIHRvIGluY29tcGxldGUgaW5mb3JtYXRpb24gLSBEb3NlLCBGcmVxdWVuY3ksIFJvdXRlIGV0Yy5cIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKFJlYWxUaW1lUHJlc2NyaXB0aW9uTW9uaXRvcmluZ0NvbXBvbmVudCwgdGhpcy5jb250ZW50LCBkYXRhKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzY2hlZHVsZU51bWJlcikgJiYgc2NoZWR1bGVOdW1iZXIudG9Mb3dlckNhc2UoKSA9PSBcInM4XCIgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1M4V2FybmluZ05leHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLlM4V2FyaW5nUG9wT3BlbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVtb3ZlRXJyVG9hc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5wYWdlICsgMTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJ2YWxpZGF0ZVdhcmluZ1BvcE9wZW5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBDb25maXJtQWx0ZXJCcmFuZChtZWQ6IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuYnJhbmRNZWRpY3Byb2R1Y3RJZCA9ICcnO1xyXG4gICAgICB0aGlzLmJyYW5kTWVkaWNwYnNDb2RlID0gJyc7XHJcbiAgICAgIHRoaXMuYnJhbmRNZWRpY1F0eSA9ICcnO1xyXG4gICAgICB0aGlzLmJyYW5kTWVkaWNSZXAgPSAnJztcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25EYXRhT25jaGFuZ2VvZk1lZGljaW5lKG1lZCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgdmFyIE1lZCA9IFtdO1xyXG4gICAgICBNZWQucHVzaChtZWQpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gTWVkO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCA9IE1lZDtcclxuICAgICAgdGhpcy5zZWxlY3RGb3JtdWxhdGlvbihtZWQsIDApO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJDb25maXJtQWx0ZXJCcmFuZFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vbGVjdWxlKGFjZ3M6IGFueSwgbW9sZWN1bGVTdHJlbmd0aDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShhY2dzKSkge1xyXG4gICAgICAgIGlmIChhY2dzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICBpZiAoYWNnc1swXS5hY2dOYW1lLmluZGV4T2YoJysnKSAhPSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vbGVjdWxlTmFtZVRleHQgPSBhY2dzWzBdLmFjZ05hbWU7XHJcbiAgICAgICAgICAgIHRoaXMubW9sZWN1bGVOYW1lVHlwZSA9ICdTMic7XHJcbiAgICAgICAgICAgIHRoaXMubW9sZWN1bGVTdHJlbmd0aFRleHQgPSBtb2xlY3VsZVN0cmVuZ3RoO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tb2xlY3VsZU5hbWVUZXh0ID0gYWNnc1swXS5hY2dOYW1lO1xyXG4gICAgICAgICAgICB0aGlzLm1vbGVjdWxlTmFtZVR5cGUgPSAnUzEnO1xyXG4gICAgICAgICAgICB0aGlzLm1vbGVjdWxlU3RyZW5ndGhUZXh0ID0gbW9sZWN1bGVTdHJlbmd0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKDEgPCBhY2dzLmxlbmd0aCkge1xyXG4gICAgICAgICAgdmFyIG1vbGVjdWxlcyA9IFtdO1xyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG1vbGVjdWxlcy5wdXNoKGFjZ3NbaV0uYWNnTmFtZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm1vbGVjdWxlTmFtZVRleHQgPSBtb2xlY3VsZXMuam9pbignLCcpO1xyXG4gICAgICAgICAgdGhpcy5tb2xlY3VsZU5hbWVUeXBlID0gJ00nO1xyXG4gICAgICAgICAgdGhpcy5tb2xlY3VsZVN0cmVuZ3RoVGV4dCA9IG1vbGVjdWxlU3RyZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubW9sZWN1bGVOYW1lVGV4dCA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIm1vbGVjdWxlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmFjaygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMucGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiYmFja1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE1lZGljaW5lRHJvcGRvd25MaXN0KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAvLyB0aGlzLnNob3dGYXZvdXJpdGVNZWQgPSBmYWxzZTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIk1lZGljaW5lRHJvcGRvd25MaXN0XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJlc2NyaWJlRHJvcGRvd24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNlbGVjdFBCVE5Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlUEJUTik7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaWJlRHJvcGRvd25cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBY3Rpb25Ecm9wZG93bm9wZW4oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGVBY3Rpb25CdG4pO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlbGVjdEFjdGlvbkRyb3Bkb3duXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG9zZURyb3Bkb3duKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3REb3NlRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZURvc2UpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImRvc2VEcm9wZG93blwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZyZXFEcm9wZG93bigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0RnJlcURyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGVGcmVxKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJmcmVxRHJvcGRvd25cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdHBWYWx1ZURyb3Bkb3duKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RzdHBEcm9wZG93biA9IHRydWU7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlc3RwKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzdHBWYWx1ZURyb3Bkb3duXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9vZERyb3Bkb3duKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RGb29kRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZUZvb2QpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImZvb2REcm9wZG93blwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluc3RydWN0aW9uRHJvcGRvd24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZUluc3RydWN0aW9uKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJpbnN0cnVjdGlvbkRyb3Bkb3duXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm91dGVEcm9wZG93bigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Um91dGVEcm9wZG93biA9IHRydWU7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGVQdXJwb3NlKTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGVSb3V0ZSk7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicm91dGVEcm9wZG93blwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1cnBvc2VEcm9wZG93bigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0UHVycG9zZURyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGVQdXJwb3NlKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwdXJwb3NlRHJvcGRvd25cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMud3JhcHBlclJlZiAhPSBudWxsICYmIHRoaXMud3JhcHBlclJlZiAhPSB1bmRlZmluZWQgJiYgdGhpcy53cmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQgJiZcclxuICAgICAgICAhdGhpcy53cmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaGFuZGxlQ2xpY2tPdXRzaWRlXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZUFjdGlvbkJ0biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RBY3Rpb25Ecm9wZG93blJlZiAhPSBudWxsICYmIHRoaXMuc2VsZWN0QWN0aW9uRHJvcGRvd25SZWYgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0QWN0aW9uRHJvcGRvd25SZWYubmF0aXZlRWxlbWVudCAmJlxyXG4gICAgICAgICF0aGlzLnNlbGVjdEFjdGlvbkRyb3Bkb3duUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaGFuZGxlQ2xpY2tPdXRzaWRlQWN0aW9uQnRuXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2tPdXRzaWRlUEJUTiA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wcmVzY3JpYmVEcm9wZG93blJlZiAhPSBudWxsICYmIHRoaXMucHJlc2NyaWJlRHJvcGRvd25SZWYgIT0gdW5kZWZpbmVkICYmIHRoaXMucHJlc2NyaWJlRHJvcGRvd25SZWYubmF0aXZlRWxlbWVudCAmJlxyXG4gICAgICAgICF0aGlzLnByZXNjcmliZURyb3Bkb3duUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFBCVE5Ecm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaGFuZGxlQ2xpY2tPdXRzaWRlUEJUTlwiKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBoYW5kbGVDbGlja091dHNpZGVEb3NlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmRvc2VSZWYgIT0gbnVsbCAmJiB0aGlzLmRvc2VSZWYgIT0gdW5kZWZpbmVkICYmIHRoaXMuZG9zZVJlZi5uYXRpdmVFbGVtZW50ICYmXHJcbiAgICAgICAgIXRoaXMuZG9zZVJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3REb3NlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImhhbmRsZUNsaWNrT3V0c2lkZURvc2VcIik7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgaGFuZGxlQ2xpY2tPdXRzaWRlRnJlcSA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mcmVxUmVmICE9IG51bGwgJiYgdGhpcy5mcmVxUmVmICE9IHVuZGVmaW5lZCAmJiB0aGlzLmZyZXFSZWYubmF0aXZlRWxlbWVudCAmJlxyXG4gICAgICAgICF0aGlzLmZyZXFSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RnJlcURyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJoYW5kbGVDbGlja091dHNpZGVGcmVxXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZXN0cCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zdHBSZWYgIT0gbnVsbCAmJiB0aGlzLnN0cFJlZiAhPSB1bmRlZmluZWQgJiYgdGhpcy5zdHBSZWYubmF0aXZlRWxlbWVudCAmJlxyXG4gICAgICAgICF0aGlzLnN0cFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RzdHBEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaGFuZGxlQ2xpY2tPdXRzaWRlc3RwXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZUZvb2QgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZm9vZFJlZiAhPSBudWxsICYmIHRoaXMuZm9vZFJlZiAhPSB1bmRlZmluZWQgJiYgdGhpcy5mb29kUmVmLm5hdGl2ZUVsZW1lbnQgJiZcclxuICAgICAgICAhdGhpcy5mb29kUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEZvb2REcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaGFuZGxlQ2xpY2tPdXRzaWRlRm9vZFwiKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBoYW5kbGVDbGlja091dHNpZGVJbnN0cnVjdGlvbiA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5JbnN0cnVjdGlvblJlZiAhPSBudWxsICYmIHRoaXMuSW5zdHJ1Y3Rpb25SZWYgIT0gdW5kZWZpbmVkICYmIHRoaXMuSW5zdHJ1Y3Rpb25SZWYubmF0aXZlRWxlbWVudCAmJiAhdGhpcy5JbnN0cnVjdGlvblJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgJiYgIXRoaXMuZWRpdEluc3RydWN0aW9uRmxhZykge1xyXG4gICAgICAgICAgdGhpcy5JbnN0cnVjdGlvbkRlc2NyaXB0aW9uID0gXCJcIlxyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb250aWx0bGUgPSBcIlwiO1xyXG4gICAgICAgICAgdGhpcy50ZW1wSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZWRpdEluc3RydWN0aW9uRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IGZhbHNlOyB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd25MaXN0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImhhbmRsZUNsaWNrT3V0c2lkZUluc3RydWN0aW9uXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZVJvdXRlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnJvdXRlUmVmICE9IG51bGwgJiYgdGhpcy5yb3V0ZVJlZiAhPSB1bmRlZmluZWQgJiYgdGhpcy5yb3V0ZVJlZi5uYXRpdmVFbGVtZW50ICYmXHJcbiAgICAgICAgIXRoaXMucm91dGVSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0Um91dGVEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGVEYXRhRmlsdGVyID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJoYW5kbGVDbGlja091dHNpZGVSb3V0ZVwiKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBoYW5kbGVDbGlja091dHNpZGVQdXJwb3NlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnB1cnBvc2VSZWYgIT0gbnVsbCAmJiB0aGlzLnB1cnBvc2VSZWYgIT0gdW5kZWZpbmVkICYmIHRoaXMucHVycG9zZVJlZi5uYXRpdmVFbGVtZW50ICYmXHJcbiAgICAgICAgIXRoaXMucHVycG9zZVJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RQdXJwb3NlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImhhbmRsZUNsaWNrT3V0c2lkZVB1cnBvc2VcIik7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gR2VuZXJhbCBTZWFyY2hcclxuICBzZWFyY2hIYW5kbGVyKGU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25EYXRhKCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVzTGVuZ3RoID0gMDtcclxuICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZXNQYWdlTnVtYmVyID0gMTtcclxuICAgICAgbGV0IGdldE1lZGljaW5lc1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVEcm9wZG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLlByaW1hcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuc2hvd0Zhdm91cml0ZU1lZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMubWVkaVNlYXJjaFZhbHVlID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgIGlmIChlLnRhcmdldC52YWx1ZS50cmltKCkubGVuZ3RoIDwgMykge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlLnRhcmdldC52YWx1ZS5sZW5ndGggPj0gMykge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgLy90aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBpZiAoIXRoaXMuaXNTdGlsbFNlYXJjaGluZykge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hNZWRzKGdldE1lZGljaW5lc1ZhbHVlLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcclxuICAgICAgICAvLyB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gICB0aGlzLnNlYXJjaE1lZHMoZ2V0TWVkaWNpbmVzVmFsdWUpO1xyXG4gICAgICAgIC8vIH0sIHRoaXMud2FpdFRpbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZWFyY2hIYW5kbGVyXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHNlYXJjaE1lZHMoZ2V0TWVkaWNpbmVzVmFsdWU6IGFueSkge1xyXG4gICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIGlmICh0aGlzLm1lZGlTZWFyY2hWYWx1ZS50cmltKCkubGVuZ3RoIDwgMyB8fCBnZXRNZWRpY2luZXNWYWx1ZS50cmltKCkubGVuZ3RoIDwgMykge1xyXG4gICAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIHJlcXVlc3RfdHlwZTogXCJwYXJhbWV0ZXJcIixcclxuICAgICAgICBwcm9kdWN0TmFtZTogZ2V0TWVkaWNpbmVzVmFsdWVcclxuICAgICAgfVxyXG4gICAgICB0aGlzLlByb2R1Y3RTZWFyY2hOYW1lID0gZ2V0TWVkaWNpbmVzVmFsdWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VhcmNoQXBpU3RvcEZsYWcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuR0VUX01FRFNfQllfU0VBUkNIICsgJz9wcm9kdWN0TmFtZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGdldE1lZGljaW5lc1ZhbHVlKSArICcmcGFnZT0xJm5vT2ZSZWM9MTAnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hlZE1lZGljaW5lTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7IHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcInNlYXJjaE1lZHNcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0ID0gcmVzLnJlc3BvbnNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IHJlcy5yZXNwb25zZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1lZGlTZWFyY2hWYWx1ZS50cmltKCkubGVuZ3RoIDwgMykge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZ2V0TWVkaWNpbmVzVmFsdWUudHJpbSgpICE9IHRoaXMubWVkaVNlYXJjaFZhbHVlLnRyaW0oKSAmJiB0aGlzLm1lZGlTZWFyY2hWYWx1ZS50cmltKCkubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlU2VhcmNoKHRoaXMubWVkaVNlYXJjaFZhbHVlLnRyaW0oKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QubGVuZ3RoID4gNyB8fCByZXMucmVzcG9uc2UubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2UubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLk1JTVNQcmltYXJ5U2VhcmNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwic2VhcmNoTWVkc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4ocmVzLnJlc3BvbnNlX21lc3NhZ2UsICdlcnJvcicsIHJlcy5lcnJvcl9jb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICB0aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2VhcmNoTWVkc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlYXJjaE1lZHNcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlOyB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlYXJjaE1lZHNcIiwgcGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb21wbGV0ZVNlYXJjaChnZXRNZWRpY2luZXNWYWx1ZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hNZWRzKGdldE1lZGljaW5lc1ZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiY29tcGxldGVTZWFyY2hcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0dldCBQcm9kdWN0IERldGFpbFxyXG4gIGdldFByb2R1Y3RMaXN0QnlOYW1lKHByb2RIaWRkZW5WYWx1ZTogYW55LCBwcm9kdWN0TmFtZTogYW55LCBzZWFyY2hCYXNlOiBhbnkpIHtcclxuICAgIHZhciBwYXlsb2FkID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLk1JTVNTZWNvbmRhcnlhcGkpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5NSU1TU2Vjb25kYXJ5YXBpLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWFyY2hCeW5hbWVQYWdlTnVtYmVyID0gMTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubWVkaVNlYXJjaFZhbHVlID0gdGhpcy5odG1sVG9UZXh0Q29udmVydChwcm9kdWN0TmFtZSk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBbXTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25EYXRhT25jaGFuZ2VvZk1lZGljaW5lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbik7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiA9IG51bGw7XHJcbiAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB2YXIgdHlwZSA9IHNlYXJjaEJhc2UudG9Mb3dlckNhc2UoKSA9PSAnYnJhbmRrZXknID8gJ0JLJyA6IHNlYXJjaEJhc2UudG9Mb3dlckNhc2UoKSA9PSAncHJvZHBhY2trZXknID8gJ1BQSycgOiBzZWFyY2hCYXNlLnRvTG93ZXJDYXNlKCkgPT0gJ3ZpcnR1YWxuYW1lJyA/ICdWTicgOiBzZWFyY2hCYXNlLnRvTG93ZXJDYXNlKCkgPT0gJ3Byb2R1Y3RrZXknID8gJ1BLJyA6IHNlYXJjaEJhc2UudG9Mb3dlckNhc2UoKSA9PSAncHJvZHVjdGtleWFjdGl2ZWluZ3JlZGllbnQnID8gJ1BLQScgOiBzZWFyY2hCYXNlLnRvTG93ZXJDYXNlKCkgPT0gJ2Z1bGxwaScgPyAnRlBJJyA6ICdQTic7XHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgcmVxdWVzdF90eXBlOiBcInBhcmFtZXRlclwiLFxyXG4gICAgICAgIHByb2R1Y3ROYW1lOiBwcm9kSGlkZGVuVmFsdWUsXHJcbiAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICBwcmVzY3JpYmVyVHlwZTogXCJNUFwiXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcm9kSGlkZGVuTmFtZSA9IHByb2RIaWRkZW5WYWx1ZTtcclxuICAgICAgdGhpcy5Qcm9kdWN0VHlwZSA9IHR5cGU7XHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5HZXQoY29uZmlnLkdFVF9NRURTX0JZX05BTUUgKyAnP3Byb2R1Y3ROYW1lPScgKyBlbmNvZGVVUklDb21wb25lbnQocHJvZEhpZGRlblZhbHVlKSArICcmdHlwZT0nICsgdHlwZSArICcmcHJlc2NyaWJlclR5cGU9TVAmcGFnZT0nICsgdGhpcy5zZWFyY2hCeW5hbWVQYWdlTnVtYmVyICsgJyZub09mUmVjPTEwJykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hCeW5hbWVMZW5ndGggPSAwOyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsID0gW107IHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlOyB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiUnhDb21wb25lbnRcIiwgXCJnZXRQcm9kdWN0TGlzdEJ5TmFtZVwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuc2VhcmNoQXBpU3RvcEZsYWcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBbXTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IHJlcy5yZXNwb25zZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsID0gcmVzLnJlc3BvbnNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pc05vblBic0ZsYWcpIHtcclxuICAgICAgICAgICAgLy8gICB0aGlzLnJ4T25seU5PTlBCU0ZpbHRlcigpO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgIGlmICh0aGlzLnJ4T25seVBCUyA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnJ4T25seVBCU0ZpbHRlcigpO1xyXG4gICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgLy8gICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSByZXMucmVzcG9uc2U7XHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIHRoaXMub25DaGVja2JveENoYW5nZSgpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0KSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0Lmxlbmd0aCA8PSAzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vbmNsaWNrTWVkaWNpbmVMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMucmVzcG9uc2UpICYmIHJlcy5yZXNwb25zZS5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuTUlNU1NlY29uZGFyeVNlYXJjaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5vbmNsaWNrTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcImdldFByb2R1Y3RMaXN0QnlOYW1lXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoQnluYW1lTGVuZ3RoID0gMDtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsID0gW107XHJcbiAgICAgICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldFByb2R1Y3RMaXN0QnlOYW1lXCIsIHBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoQnluYW1lTGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBbXTtcclxuICAgICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldFByb2R1Y3RMaXN0QnlOYW1lXCIsIHBheWxvYWQpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvciwgXCJlcnJvclwiLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IDA7XHJcbiAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0UHJvZHVjdExpc3RCeU5hbWVcIiwgcGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrYm94Q2hhbmdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMucnhPbmx5UEJTICYmIHRoaXMucnhQcml2YXRlKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdCA9IHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsLmZpbHRlcigoeDogYW55KSA9PiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHgucGJzVHlwZSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMucnhPbmx5UEJTKSB7XHJcbiAgICAgICAgdGhpcy5yeE9ubHlQQlMgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsKSlcclxuICAgICAgICAgIHRoaXMucnhPbmx5UEJTRmlsdGVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5yeFByaXZhdGUpIHtcclxuICAgICAgICB0aGlzLnJ4T25seVBCUyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsKSlcclxuICAgICAgICAgIHRoaXMucnhPbmx5Tk9OUEJTRmlsdGVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yeE9ubHlQQlMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJ4UHJpdmF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbC5maWx0ZXIoKHg6IGFueSkgPT4gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh4LnBic1R5cGUpKTtcclxuICAgICAgfVxyXG4gICAgICAvLyB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIm9uQ2hlY2tib3hDaGFuZ2VcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByeE9ubHlQQlNGaWx0ZXIoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCkgJiYgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbC5maWx0ZXIoKHg6IGFueSkgPT4gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh4LnBic1R5cGUpICYmIHgucGJzVHlwZSAhPSAnbm9uIFBCUycpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicnhPbmx5UEJTRmlsdGVyXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcnhPbmx5Tk9OUEJTRmlsdGVyKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsICE9ICcnICYmIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsICE9IG51bGwgJiYgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbC5maWx0ZXIoKHg6IGFueSkgPT4gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh4LnBic1R5cGUpICYmIHgucGJzVHlwZS50b0xvd2VyQ2FzZSgpID09ICdub24gcGJzJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJyeE9ubHlOT05QQlNGaWx0ZXJcIik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldENsYXNzRm9yTWVkKG1lZDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgaXNTZWxlY3RlZEZvcm11bGF0aW9uO1xyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICBpc1NlbGVjdGVkRm9ybXVsYXRpb24gPSB0aGlzLklzU2VsZWN0Rm9ybXVsYXRpb24obWVkKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpc1NlbGVjdGVkRm9ybXVsYXRpb24gPSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3RJZCAhPSBudWxsICYmXHJcbiAgICAgICAgICBtZWQucHJvZHVjdElkID09IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0SWQgJiZcclxuICAgICAgICAgIG1lZC5wYnNDb2RlID09IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlICYmXHJcbiAgICAgICAgICBtZWQucHJvZHVjdE5hbWUgPT0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lICYmXHJcbiAgICAgICAgICBtZWQucmVwZWF0cyA9PSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0cyAmJlxyXG4gICAgICAgICAgbWVkLm1heFF0eVVuaXRzID09IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWRGb3JtdWxhdGlvblxyXG4gICAgICAgID8gJ21kbC1ncmlkIG5ld19yeF9wb3B1cF9ib3ggUlhfaGlnaGxpZ2h0J1xyXG4gICAgICAgIDogJ21kbC1ncmlkIG5ld19yeF9wb3B1cF9ib3gnO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRDbGFzc0Zvck1lZFwiKTtcclxuICAgICAgcmV0dXJuIFwibWRsLWdyaWQgbmV3X3J4X3BvcHVwX2JveFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2xhc3NGb3JGYXZvdXJpdGVNZWQobWVkOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwicXVhbnRpdHlcIiwodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUhPXVuZGVmaW5lZCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZSE9bnVsbCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZS50b0xvd2VyQ2FzZSgpID09IFwibm9uIHBic1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubnVtYmVyT2ZQYWNrICsgXCJ4XCIgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24udW5pdFBlclBhY2spXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cykudG9TdHJpbmcoKSk7XHJcbiAgICAgIHZhciBpc1NlbGVjdGVkRm9ybXVsYXRpb247XHJcbiAgICAgICAgaXNTZWxlY3RlZEZvcm11bGF0aW9uID0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGwgJiZcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0SWQgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgbWVkLnByb2R1Y3RJZCA9PSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdElkICYmXHJcbiAgICAgICAgICAobWVkLnBic0NvZGUhPW51bGw/bWVkLnBic0NvZGU6XCJcIikgPT0gKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlIT1udWxsP3RoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlOlwiXCIpICYmXHJcbiAgICAgICAgICBtZWQucHJvZHVjdE5hbWUgPT0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lICYmXHJcbiAgICAgICAgICBtZWQucmVwZWF0cyA9PSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0cyAmJlxyXG4gICAgICAgICAgbWVkLnF1YW50aXR5ID09ICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZSE9dW5kZWZpbmVkICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlIT1udWxsICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlLnRvTG93ZXJDYXNlKCkgPT0gXCJub24gcGJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5udW1iZXJPZlBhY2sgKyBcInhcIiArIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi51bml0UGVyUGFjaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzKS50b1N0cmluZygpO1xyXG5cclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWRGb3JtdWxhdGlvblxyXG4gICAgICAgID8gJ21kbC1ncmlkIG5ld19yeF9wb3B1cF9ib3ggUlhfaGlnaGxpZ2h0J1xyXG4gICAgICAgIDogJ21kbC1ncmlkIG5ld19yeF9wb3B1cF9ib3gnO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRDbGFzc0Zvck1lZFwiKTtcclxuICAgICAgcmV0dXJuIFwibWRsLWdyaWQgbmV3X3J4X3BvcHVwX2JveFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgSXNTZWxlY3RGb3JtdWxhdGlvbihtZWQ6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZC5nZW5lcmljTmFtZSkgPyBtZWQuZ2VuZXJpY05hbWUgOiBcIlwiKSA9PVxyXG4gICAgICAgICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZ2VuZXJpY05hbWUpID9cclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSA6IFwiXCIpICYmXHJcbiAgICAgICAgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkLnByb2R1Y3RJZCkgPyBtZWQucHJvZHVjdElkIDogXCJcIikgPT1cclxuICAgICAgICAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LnByb2R1Y3RJZCkgP1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3RJZCA6IFwiXCIpICYmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZC5yZXBlYXRzKSA/XHJcbiAgICAgICAgICAgIG1lZC5yZXBlYXRzIDogXCJcIikgPT0gKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5yZXBlYXRzKSA/XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlcGVhdHMgOiBcIlwiKSAmJiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShtZWQubWF4UXR5VW5pdHMpID9cclxuICAgICAgICAgICAgICAgIG1lZC5tYXhRdHlVbml0cyA6IFwiXCIpID09ICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubWF4UXR5VW5pdHMpXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzIDogXCJcIikpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiSXNTZWxlY3RGb3JtdWxhdGlvblwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Y3VycmVudGlkKG1lZDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tZWRpU2VhcmNoVmFsdWUgIT0gbnVsbCAmJiBtZWQucHJvZERpc3BsYXlWYWx1ZSA9PSB0aGlzLm1lZGlTZWFyY2hWYWx1ZSA/ICdoZWlnaGxpZ2h0JyA6ICcnO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRjdXJyZW50aWRcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVzdHJpY3Rpb25zKHJlc3RyaWN0aW9uczogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgcmVzdHJpY3Rpb25MaXN0ID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdHJpY3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGluZCA9IHJlc3RyaWN0aW9uTGlzdC5pbmRleE9mKHJlc3RyaWN0aW9uc1tpXVsncmVzdHJpY3Rpb25UeXBlJ10pO1xyXG4gICAgICAgIGlmIChpbmQgPT0gLTEpIHtcclxuICAgICAgICAgIHJlc3RyaWN0aW9uTGlzdC5wdXNoKHJlc3RyaWN0aW9uc1tpXVsncmVzdHJpY3Rpb25UeXBlJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdHJpY3Rpb25MaXN0LnRvU3RyaW5nKCk7XHJcbiAgICAgIC8vICAgIGxldCByZXN0cmljdGlvbnMgPSBbXTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0UmVzdHJpY3Rpb25zXCIpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTWltc1ZhbHVlKCkge1xyXG4gICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgcmVxdWVzdF90eXBlOiBcInBhcmFtZXRlclwiLFxyXG4gICAgICAgIHVzZXJJZDogdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCxcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5HZXQoY29uZmlnLlBIWVNJQ0lBTi5HRVRfQUxMTUlNU1ZBTFVFICsgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCArIFwiJmNsaWVudElkPVwiICsgdGhpcy5jbGllbnRJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcImdldEFsbE1pbXNWYWx1ZVwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kb3NlRGF0YSA9IHJlcy5kb3NlICE9IG51bGwgPyByZXMuZG9zZSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeURhdGEgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcy5mcmVxdWVuY3kpID8gcmVzLmZyZXF1ZW5jeSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmZvb2REYXRhID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMuZm9vZCkgPyByZXMuZm9vZCA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnB1cnBvc2VEYXRhID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMucHVycG9zZSkgIT0gbnVsbCA/IHJlcy5wdXJwb3NlIDogW107XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVEYXRhID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMucm91dGUpICE9IG51bGwgPyByZXMucm91dGUgOiBbXTtcclxuICAgICAgICAgICAgdGhpcy5jZWFzZURhdGEgPSByZXMuY2Vhc2UgIT0gbnVsbCA/IHJlcy5jZWFzZSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNlYXNlRGF0YSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzLmNlYXNlKSAhPSBudWxsID8gcmVzLmNlYXNlIDogW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZHRvcGhhcm1hY3lEYXRhID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMuc2VuZFRvUGFybWFjeU1hc3RlcikgIT0gbnVsbCA/IHJlcy5zZW5kVG9QYXJtYWN5TWFzdGVyIDogW107XHJcbiAgICAgICAgICAgIHRoaXMudGVtcEF1dGhvcml0eUZvcm1ObyA9IHJlcy5hdXRob3JpdHlGb3JtLmF1dGhvcml0eUZvcm1ObztcclxuICAgICAgICAgICAgbGV0IHJlZlZhbEF1dGggPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID8gdGhpcy5nZXRBZGRBdXRoVmFsdWUoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMuYXV0aG9yaXR5Rm9ybSkgPyAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcy5hdXRob3JpdHlGb3JtLmF1dGhvcml0eUZvcm1ObykgPyByZXMuYXV0aG9yaXR5Rm9ybS5hdXRob3JpdHlGb3JtTm8gOiBbXSA6IFtdKSA6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHM/LnBic0R2YUF1dGhvcml0eU51bWJlcikgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMucGJzRHZhQXV0aG9yaXR5TnVtYmVyICE9IDAgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5wYnNEdmFBdXRob3JpdHlOdW1iZXIgOiBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmF1dGhvcml0eUZvcm1ObyA9IHJlZlZhbEF1dGg7XHJcbiAgICAgICAgICAgIHRoaXMuaXNOb25QYnNGbGFnID0gdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcy5pc05vblBic0ZsYWcpIHx8IHJlcy5pc05vblBic0ZsYWcgPT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc1ByZXNjcmliZUFzUHJpdmF0ZU9ubHkgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcy5pc1ByZXNjcmliZUFzUHJpdmF0ZU9ubHkpID8gcmVzLmlzUHJlc2NyaWJlQXNQcml2YXRlT25seSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QWxsTWltc1ZhbHVlXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QWxsTWltc1ZhbHVlXCIsIHBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QWxsTWltc1ZhbHVlXCIsIHBheWxvYWQpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvciwgXCJlcnJvclwiLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QWxsTWltc1ZhbHVlXCIsIHBheWxvYWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm91dGVGaWx0ZXIoZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnJvdXRlRGF0YUZpbHRlciA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJyb3V0ZUZpbHRlclwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlclJvdXRlSXRlbXMoYXJyOiBhbnksIHF1ZXJ5OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhcnIuZmlsdGVyKChlOiBhbnkpID0+XHJcbiAgICAgICAgZS5yb3V0ZU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJmaWx0ZXJSb3V0ZUl0ZW1zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9HZXQgaW5zdHJ1Y3Rpb24gdmFsdWVcclxuICBnZXRJbnN0cnVjdGlvblZhbHVlcygpIHtcclxuICAgIHZhciBwYXlsb2FkID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIHJlcXVlc3RfdHlwZTogXCJwYXJhbWV0ZXJcIixcclxuICAgICAgICB1c2VySWQ6IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy51c2VySWRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuR2V0KGNvbmZpZy5QSFlTSUNJQU4uR0VUX0lOU1RSVUNUSU9OX1ZBTFVFICsgXCI/dXNlcklkPVwiICsgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcImdldEluc3RydWN0aW9uVmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSByZXMucmVzcG9uc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25EYXRhID0gaW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcImdldEluc3RydWN0aW9uVmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0SW5zdHJ1Y3Rpb25WYWx1ZXNcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRJbnN0cnVjdGlvblZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRJbnN0cnVjdGlvblZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vRWRpdCBJbnN0cnVjdGlvbiB2YWx1ZVxyXG4gIGVkaXRJbnN0cnVjdGlvbihpZDogbnVtYmVyLCBkYXRhOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSA9IGRhdGEudGV4dDtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvbnRpbHRsZSA9IGRhdGEudGV4dDtcclxuICAgICAgdGhpcy50ZW1wSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XHJcbiAgICAgIHRoaXMuSW5zdHJ1Y3Rpb25JZCA9IGRhdGEuaWQ7XHJcbiAgICAgIHRoaXMuSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XHJcbiAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lZGl0SW5zdHJ1Y3Rpb25GbGFnID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJlZGl0SW5zdHJ1Y3Rpb25cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBsaXN0IHNlbGVjdCBpbiBJbnN0cnVjdGlvblxyXG4gIENoYW5nZUluc3RydWN0aW9uKGRhdGE6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZGF0YT8udGV4dCkgPyBkYXRhLnRleHQgOiAnJztcclxuICAgICAgdGhpcy5JbnN0cnVjdGlvbkRlc2NyaXB0aW9uID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShkYXRhPy5kZXNjcmlwdGlvbikgPyBkYXRhLmRlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pbnN0VmFsID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShkYXRhPy52YWx1ZSkgPyBkYXRhLnZhbHVlIDogXCJcIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jb21wbGV4SWQgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGRhdGE/LnZhbHVlKSA/IGRhdGEuaWQgOiBcIlwiO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJDaGFuZ2VJbnN0cnVjdGlvblwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluc3RydWN0aW9uT25DaGFuZ2UoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLkluc3RydWN0aW9uRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImluc3RydWN0aW9uT25DaGFuZ2VcIik7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gY2xlYXIgSW5zdHJ1Y3Rpb24gaW4gSW5zdHJ1Y3Rpb25cclxuICBjbGVhckluc3RydWN0aW9uKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvbnRpbHRsZSA9IFwiXCI7XHJcbiAgICAgIHRoaXMudGVtcEluc3RydWN0aW9uRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICB0aGlzLkluc3RydWN0aW9uRGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJjbGVhckluc3RydWN0aW9uXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc2F2ZSBpbnN0cnVjdGlvbiB2YWx1ZVxyXG4gIHNhdmVJbnN0cnVjdGlvbigpIHtcclxuICAgIHZhciBwYXlsb2FkID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KFN0cmluZyh0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9udGlsdGxlKS50cmltKCkpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNTIubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNTIuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzUyLmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzUyLm1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KFN0cmluZyh0aGlzLnRlbXBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uKS50cmltKCkpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNTEubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNTEuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzUxLmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzUxLm1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB2YXIgYm9keSA9IHtcclxuICAgICAgICB0ZXh0OiB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9udGlsdGxlLnRyaW0oKSxcclxuICAgICAgICB2YWx1ZTogJzEnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnRlbXBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uLnRyaW0oKSxcclxuICAgICAgICBzdGF0dXM6ICcwJyxcclxuICAgICAgICB1c2VySWQ6IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy51c2VySWQsXHJcbiAgICAgIH07XHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgYm9keTogYm9keSxcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIHJlcXVlc3RfdHlwZTogXCJwYXJhbWV0ZXJcIixcclxuICAgICAgICAgIHVzZXJJZDogdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCxcclxuICAgICAgICAgIGlkOiB0aGlzLkluc3RydWN0aW9uSWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuSW5zdHJ1Y3Rpb25JZCAhPSBudWxsICYmIHRoaXMuSW5zdHJ1Y3Rpb25JZCAhPSAnJykge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY29tcGxleElkID0gcGFyc2VJbnQodGhpcy5JbnN0cnVjdGlvbklkKTtcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuUHV0TmV3KGJvZHksIGNvbmZpZy5QSFlTSUNJQU4uVVBEQVRFX0lOU1RSVUNUSU9OX1ZBTFVFICsgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCArICcmaWQ9JyArIHRoaXMuSW5zdHJ1Y3Rpb25JZCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlOyB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5JbnN0cnVjdGlvbkRlc2NyaXB0aW9uID0gdGhpcy50ZW1wSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUgPSB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9udGlsdGxlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRJbnN0cnVjdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShyZXMuZXJyb3JfY29kZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzYXZlSW5zdHJ1Y3Rpb25cIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXlsb2FkID0gYm9keTtcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuUG9zdChib2R5LCBjb25maWcuUEhZU0lDSUFOLkFERF9JTlNUUlVDVElPTl9WQUxVRSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlOyB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jb21wbGV4SWQgPSAwO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb250aWx0bGUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgIHRoaXMudGVtcEluc3RydWN0aW9uRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRJbnN0cnVjdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShyZXMuZXJyb3JfY29kZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzYXZlSW5zdHJ1Y3Rpb25cIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzYXZlSW5zdHJ1Y3Rpb25cIiwgcGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBEZWxldGUgaW5zdHJ1Y3Rpb25cclxuICBkZWxldGVJbnN0cnVjdGlvbihpZDogTnVtYmVyKSB7XHJcbiAgICB2YXIgcGF5bG9hZCA9IHt9O1xyXG4gICAgdHJ5IHtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICByZXF1ZXN0X3R5cGU6IFwicGFyYW1ldGVyXCIsXHJcbiAgICAgICAgdXNlcklkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMudXNlcklkLFxyXG4gICAgICAgIGlkOiBpZFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5QdXROZXcoJycsIGNvbmZpZy5QSFlTSUNJQU4uREVMRVRFX0lOU1RSVUNUSU9OX1ZBTFVFICsgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCArICcmaWQ9JyArIGlkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcImRlbGV0ZUluc3RydWN0aW9uXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb250aWx0bGUgPSBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5nZXRJbnN0cnVjdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJkZWxldGVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4ocmVzLnJlc3BvbnNlX21lc3NhZ2UsICdlcnJvcicsIHJlcy5lcnJvcl9jb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImRlbGV0ZUluc3RydWN0aW9uXCIsIHBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZGVsZXRlSW5zdHJ1Y3Rpb25cIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZGVsZXRlSW5zdHJ1Y3Rpb25cIiwgcGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgbmV3IEluc3RydWN0aW9uXHJcbiAgYWRkTmV3SW5zdHJ1Y3Rpb24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvbnRpbHRsZSA9IFwiXCI7XHJcbiAgICAgIHRoaXMudGVtcEluc3RydWN0aW9uRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICB0aGlzLkluc3RydWN0aW9uRGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgdGhpcy5JbnN0cnVjdGlvbklkID0gJyc7XHJcbiAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJhZGROZXdJbnN0cnVjdGlvblwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHNlbGVjdCByb3V0ZSB2YWx1ZVxyXG4gIHNlbGVjdFJvdXRlc2VhcmNWYWx1ZShyb3V0ZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNlbGVjdFJvdXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyb3V0ZT8ucm91dGVOYW1lKSA/IHJvdXRlLnJvdXRlTmFtZSA6ICcnO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlbGVjdFJvdXRlc2VhcmNWYWx1ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHNlbGVjdCBEb3NlIHZhbHVlXHJcbiAgc2VsZWN0RG9zZVZhbHVlKGRvc2U6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3REb3NlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGRvc2U/LnRleHQpID8gZG9zZS50ZXh0IDogXCJcIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlVmFsdWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGRvc2U/LnZhbHVlKSA/IGRvc2UudmFsdWUgOiBcIlwiO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZWxlY3REb3NlVmFsdWVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzZWxlY3QgRnJlcXVlbmN5IHZhbHVlXHJcbiAgc2VsZWN0RnJlcXVlbmN5VmFsdWUoZnJlcXVlbmN5OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0RnJlcURyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZnJlcVNlYXJjaFZhbHVlID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShmcmVxdWVuY3k/LnRleHQpID8gZnJlcXVlbmN5LnRleHQgOiBcIlwiO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFWYWx1ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZnJlcXVlbmN5Py52YWx1ZSkgPyBmcmVxdWVuY3kudmFsdWUgOiBcIlwiO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZWxlY3RGcmVxdWVuY3lWYWx1ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHNlbGVjdCBGb29kIHZhbHVlXHJcbiAgc2VsZWN0Rm9vZFZhbHVlKGZvb2Q6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RGb29kRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5mb29kU2VhcmNoVmFsdWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZvb2Q/LnRleHQpID8gZm9vZC50ZXh0IDogXCJcIjtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZWxlY3RGb29kVmFsdWVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RTdHBWYWx1ZShzdHA6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RzdHBEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbmRUb1BoYXJtYWN5VmFsdWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHN0cD8ubmFtZSkgPyBzdHAubmFtZSA6ICcnO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlbGVjdFN0cFZhbHVlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9zZWxlY3QgUHVycG9zZSB2YWx1ZVxyXG4gIHNlbGVjdFB1cnBvc2VWYWx1ZShwdXJwb3NlOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0UHVycG9zZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wdXJwb3NlU2VhcmNoVmFsdWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHB1cnBvc2U/Lmxvb2t1cFRleHQpID8gcHVycG9zZS5sb29rdXBUZXh0IDogJyc7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY29tcGxleElkID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShwdXJwb3NlPy5pZCkgPyBwdXJwb3NlLmlkIDogXCJcIjtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZWxlY3RQdXJwb3NlVmFsdWVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBRdWFudGl0eSBjaGFuZ2VcclxuICBxdWFudGl0eUNoYW5nZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhFbmREYXRlQ2FsY3VsYXRlcigpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNvbnZlcnRxdWFudGl0eXZhbCA9IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwsIDEwKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCA9IGNvbnZlcnRxdWFudGl0eXZhbC50b1N0cmluZygpO1xyXG4gICAgICAvL3RoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwgPSB0aGlzLnJvdW5kRGF0YShwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsKSkudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInF1YW50aXR5Q2hhbmdlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tNb2JpbGUoZXZ0OiBhbnkpOiBhbnkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIGNoYXJDb2RlID0gKGV2dC53aGljaCkgPyBldnQud2hpY2ggOiBldnQua2V5Q29kZTtcclxuICAgICAgaWYgKGNoYXJDb2RlID4gMzEgJiYgKGNoYXJDb2RlIDwgNDcgfHwgY2hhckNvZGUgPiA1NykpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiY2hlY2tNb2JpbGVcIik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRheXNjaGFuZ2UoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCAhPSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgY29udmVydGRheXNjaGFuZ2UgPSBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsLCAxMCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCA9IGNvbnZlcnRkYXlzY2hhbmdlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImRheXNjaGFuZ2VcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXBlYXRzQ2hhbmdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9IGZhbHNlO1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCkpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb252ZXJ0cmVwZWF0c3ZhbCA9IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCwgMTApO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlcGVhdHNWYWwgPSBjb252ZXJ0cmVwZWF0c3ZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInJlcGVhdHNDaGFuZ2VcIik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vdW5saXN0ZWQgY2hlY2sgYm94XHJcbiAgdW5saXN0ZWRSQSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1JQQlMnO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnVubGlzdGVkUkEgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUHJpdmF0ZSc7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInVubGlzdGVkUkFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUyA9ICdQcml2YXRlJztcclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUlBCUyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5DVEdDb1BheW1lbnQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcml2YXRlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgUEJTKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUyA9ICdQQlMnO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIlBCU1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFJQQlMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1JQQlMnO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkNUR0NvUGF5bWVudCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIlJQQlNcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3NlbGVjdGVkIG1lZGljaW5lXHJcbiAgc2VsZWN0Rm9ybXVsYXRpb24obWVkOiBhbnksIGluZGV4OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiA9IG1lZDtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25EYXRhT25jaGFuZ2VvZk1lZGljaW5lKG1lZCk7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzUzhXYXJuaW5nTmV4dCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXN0cmljdGlvbnMgPSBtZWQuUmVzdHJpY3Rpb25zICYmIG1lZC5SZXN0cmljdGlvbnMubGVuZ3RoICE9IDAgPyBtZWQuUmVzdHJpY3Rpb25zWzBdIDogbnVsbDtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmxlbWkgPSBtZWQuYWlwICE9IG51bGwgPyBtZWQuYWlwLmxlbWkgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmxtYmMgPSBtZWQuYWlwICE9IG51bGwgPyBtZWQuYWlwLmxtYmMgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID0gbWVkLmFpcCAhPSBudWxsID8gbWVkLmFpcC5sZW1pIDogZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChtZWQuUmVzdHJpY3Rpb25zICYmIG1lZC5SZXN0cmljdGlvbnMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgIHZhciByZXN0cmljdGlvbkxpc3RzID0gbWVkLlJlc3RyaWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgZS5yZXN0cmljdGlvblByZXZpZXcgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgIGUucmVzdHJpY3Rpb25UZXh0ICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICBlLnJlc3RyaWN0aW9uUHJldmlldyAhPSAnJyAmJlxyXG4gICAgICAgICAgICAgIGUucmVzdHJpY3Rpb25UZXh0ICE9ICcnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKHJlc3RyaWN0aW9uTGlzdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzU2hvd1Jlc3RyaWN0aW9ucyA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzU2hvd1Jlc3RyaWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmlzU2hvd1Jlc3RyaWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vIGlmICh0aGlzLnN0YXRlLnNlbGVjdGVkSW5kZXggIT0gaW5kZXgpIHtcclxuICAgICAgLy8gICB0aGlzLmNsZWFyTWVkaWNhbFByZXNjcmlwdGlvbkRhdGFPbmNoYW5nZW9mTWVkaWNpbmUobWVkKTtcclxuICAgICAgLy8gfVxyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1J0cG1OZXh0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5hdXRob3JpdHlGb3JtTm8gPSB0aGlzLmdldEFkZEF1dGhWYWx1ZSh0aGlzLnRlbXBBdXRob3JpdHlGb3JtTm8pO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgdGhpcy5lbmFibGVQcmVzY3JpYmVBcyhtZWQpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkQnJhbmRGb3JtdWxhdGlvbiA9IG51bGw7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2VsZWN0Rm9ybXVsYXRpb25cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3NlbGVjdGVkIEZhdm91cml0ZSBtZWRpY2luZVxyXG4gIHNlbGVjdEZhdm91cml0ZUZvcm11bGF0aW9uKG1lZDogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBtZWQ7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YU9uY2hhbmdlb2ZNZWRpY2luZShtZWQpO1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0KSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1M4V2FybmluZ05leHQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzdHJpY3Rpb25zID0gbWVkLlJlc3RyaWN0aW9ucyAmJiBtZWQuUmVzdHJpY3Rpb25zLmxlbmd0aCAhPSAwID8gbWVkLlJlc3RyaWN0aW9uc1swXSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID0gbWVkLmFpcCAhPSBudWxsID8gbWVkLmFpcC5sZW1pIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5sbWJjID0gbWVkLmFpcCAhPSBudWxsID8gbWVkLmFpcC5sbWJjIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9IG1lZC5haXAgIT0gbnVsbCA/IG1lZC5haXAubGVtaSA6IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAobWVkLlJlc3RyaWN0aW9ucyAmJiBtZWQuUmVzdHJpY3Rpb25zLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICB2YXIgcmVzdHJpY3Rpb25MaXN0cyA9IG1lZC5SZXN0cmljdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgIGUucmVzdHJpY3Rpb25QcmV2aWV3ICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICBlLnJlc3RyaWN0aW9uVGV4dCAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgZS5yZXN0cmljdGlvblByZXZpZXcgIT0gJycgJiZcclxuICAgICAgICAgICAgICBlLnJlc3RyaWN0aW9uVGV4dCAhPSAnJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChyZXN0cmljdGlvbkxpc3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pc1Nob3dSZXN0cmljdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc1Nob3dSZXN0cmljdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pc1Nob3dSZXN0cmljdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNSdHBtTmV4dCA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuYXV0aG9yaXR5Rm9ybU5vID0gdGhpcy5nZXRBZGRBdXRoVmFsdWUodGhpcy50ZW1wQXV0aG9yaXR5Rm9ybU5vKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEVuZERhdGVDYWxjdWxhdGVyKCk7XHJcbiAgICAgIHRoaXMuZW5hYmxlUHJlc2NyaWJlQXMobWVkKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEJyYW5kRm9ybXVsYXRpb24gPSBudWxsO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlbGVjdEZhdm91cml0ZUZvcm11bGF0aW9uXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QnJhbmROYW1lKHNlbGVjdGVkRm9ybXVsYXRpb246IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbikpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uLmFtdCkgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQubGVuZ3RoICE9IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS50cE5hbWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBOYW1lO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uLmJyYW5kPy5icmFuZE5hbWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRGb3JtdWxhdGlvbi5icmFuZC5icmFuZE5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QnJhbmROYW1lXCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZVByZXNjcmliZUFzKG1lZDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBpZiAobWVkLnBic1R5cGUudG9Mb3dlckNhc2UoKSA9PSBcIm5vbiBwYnNcIiB8fCB0aGlzLmlzUHJlc2NyaWJlQXNQcml2YXRlT25seSkge1xyXG4gICAgICAvLyAgIHRoaXMucHJlc2NyaWJlQVNfUEJTID0gdHJ1ZTtcclxuICAgICAgLy8gICB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSB0cnVlO1xyXG4gICAgICAvLyAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUHJpdmF0ZSc7XHJcbiAgICAgIC8vIH0gZWxzZVxyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShtZWQ/LnBic1R5cGUpICYmIG1lZC5wYnNUeXBlLnRvVXBwZXJDYXNlKCkgPT0gXCJQQlMvUlBCU1wiICYmICF0aGlzLmlzUHJlc2NyaWJlQXNQcml2YXRlT25seSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5tZWRpY2FyZU51bWJlcikgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5kdmFOdW1iZXIpKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1JQQlMnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5tZWRpY2FyZU51bWJlcikpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19QQlMgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUyA9ICdQQlMnO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHM/LmR2YU51bWJlcikpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19QQlMgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUlBCUyc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUlBCUyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUHJpdmF0ZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkPy5wYnNUeXBlKSAmJiBtZWQucGJzVHlwZS50b1VwcGVyQ2FzZSgpID09IFwiUlBCU1wiICYmICF0aGlzLmlzUHJlc2NyaWJlQXNQcml2YXRlT25seSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5kdmFOdW1iZXIpKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUlBCUyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUlBCUyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1ByaXZhdGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZD8ucGJzVHlwZSkgJiYgbWVkLnBic1R5cGUudG9VcHBlckNhc2UoKSA9PSBcIlBCU1wiICYmICF0aGlzLmlzUHJlc2NyaWJlQXNQcml2YXRlT25seSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5tZWRpY2FyZU51bWJlcikgfHwgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5kdmFOdW1iZXIpKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUEJTJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19QQlMgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUHJpdmF0ZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkPy5wYnNUeXBlKSAmJiAobWVkLnBic1R5cGUudG9VcHBlckNhc2UoKSA9PSBcIkVYVEVNUE9SQU5FT1VTIFBSRVBBUkFUSU9OU1wiIHx8IG1lZC5wYnNUeXBlLnRvVXBwZXJDYXNlKCkgPT0gXCJTRUNUSU9OIDEwMFwiKSAmJiAhdGhpcy5pc1ByZXNjcmliZUFzUHJpdmF0ZU9ubHkgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0KSB7XHJcbiAgICAgICAgaWYgKCghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHM/Lm1lZGljYXJlTnVtYmVyKSB8fCAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHM/LmR2YU51bWJlcikpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkPy5wYnNDb2RlKSAmJiBtZWQucGJzQ29kZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUEJTJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19QQlMgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUHJpdmF0ZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkPy5wYnNUeXBlKSAmJiBtZWQucGJzVHlwZS50b1VwcGVyQ2FzZSgpID09IFwiUEFMTElBVElWRSBDQVJFXCIgJiYgIXRoaXMuaXNQcmVzY3JpYmVBc1ByaXZhdGVPbmx5ICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmR2YU51bWJlciAhPSBudWxsICYmIHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuZHZhTnVtYmVyICE9ICcnICYmIG1lZC5wYnNDb2RlICE9IFwiXCIpIHtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUEJTID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUlBCUyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5tZWRpY2FyZU51bWJlcikgfHwgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5kdmFOdW1iZXIpKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZD8ucGJzQ29kZSkgJiYgbWVkLnBic0NvZGUgIT0gXCJcIikge1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19QQlMgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUlBCUyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1BCUyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUlBCUyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1ByaXZhdGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1ByaXZhdGUnO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGVsc2UgaWYgKG1lZC5wYnNUeXBlLnRvVXBwZXJDYXNlKCkgPT0gXCJTRUNUSU9OIDEwMFwiKSB7XHJcbiAgICAgIC8vICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMubWVkaWNhcmVOdW1iZXIgIT0gXCJcIiAmJlxyXG4gICAgICAvLyAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5tZWRpY2FyZU51bWJlciAhPSBudWxsICYmIG1lZC5wYnNDb2RlICE9IFwiXCIgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5kdmFOdW1iZXIgIT0gbnVsbCAmJlxyXG4gICAgICAvLyAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5kdmFOdW1iZXIgIT0gJycgJiYgbWVkLnBic0NvZGUgIT0gXCJcIikge1xyXG4gICAgICAvLyB0aGlzLnByZXNjcmliZUFTX1BCUyA9IGZhbHNlO1xyXG4gICAgICAvLyB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSB0cnVlO1xyXG4gICAgICAvLyB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1BCUyc7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5wcmVzY3JpYmVBU19QQlMgPSB0cnVlO1xyXG4gICAgICAvLyB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSB0cnVlO1xyXG4gICAgICAvLyB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1ByaXZhdGUnO1xyXG4gICAgICAvLyAgICAgdGhpcy5zZXRTdGF0ZSh7IHByZXNjcmliZUFTX1BCUzogdHJ1ZSwgcHJlc2NyaWJlQVNfUlBCUzogdHJ1ZSwgUHJlc2NyaWJlQVM6IFwiUHJpdmF0ZVwiIH0pO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJlbmFibGVQcmVzY3JpYmVBc1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRyYWRlTmFtZSgpOiBhbnkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gdmFyIHNlbGVjdGVkRm9ybXVsYXRpb246YW55ID0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCkge1xyXG4gICAgICAgIHZhciB0cmFkZU5hbWUgPSAnJztcclxuICAgICAgICB2YXIgYW10X3RwTmFtZSA9IHRoaXMuZ2V0QnJhbmROYW1lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgdmFyIHRCcmFuZE5hbWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGFtdF90cE5hbWUpID8gYW10X3RwTmFtZSA6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5icmFuZD8uYnJhbmROYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5icmFuZC5icmFuZE5hbWUgOiBcIlwiO1xyXG4gICAgICAgIC8vdmFyIGFtdF90cHBOYW1lID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10KSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10Lmxlbmd0aCAhPSAwICYmIHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwcHMpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwcy5sZW5ndGggIT0gMCA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwc1swXS50cHBOYW1lIDogJyc7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmdlbmVyaWNOYW1lKSB8fCAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZG9zYWdlRm9ybSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0udG9Mb3dlckNhc2UoKSA9PSAnZ2F1emUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUgOiBcIlwiO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUgPT0gZmFsc2UgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID09IGZhbHNlICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIHRyYWRlTmFtZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5nZW5lcmljTmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZ2VuZXJpY05hbWUgOiBcIlwiO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0cmFkZU5hbWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSB0cnVlICYmIHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSBmYWxzZSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICB0cmFkZU5hbWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZ2VuZXJpY05hbWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lICsgJygnICsgdEJyYW5kTmFtZSArICcpJyA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYWRlTmFtZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID09IGZhbHNlICYmIHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIHRyYWRlTmFtZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5nZW5lcmljTmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZ2VuZXJpY05hbWUgOiBcIlwiO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0cmFkZU5hbWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSB0cnVlICYmIHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIHRyYWRlTmFtZSA9IHRCcmFuZE5hbWU7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYWRlTmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBlbHNlIGlmIChJc0V4dGVtcCA9PSB0cnVlICYmIGxlbWkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyAgIHRyYWRlTmFtZSA9IGFtdF90cHBOYW1lICE9IG51bGwgJiYgYW10X3RwcE5hbWUgIT0gXCJcIiA/IGFtdF90cHBOYW1lIDogdGhpcy5zdGF0ZS5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgLy8gICByZXR1cm4gdHJhZGVOYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAvLyBlbHNlIGlmIChJc0V4dGVtcCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIC8vICAgdHJhZGVOYW1lID0gdGhpcy5zdGF0ZS5zZWxlY3RlZEZvcm11bGF0aW9uLmZvcm11bGEgPT0gbnVsbCA/IHRoaXMuc3RhdGUuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZS50cmltKCkgOiB0aGlzLnN0YXRlLnNlbGVjdGVkRm9ybXVsYXRpb24uZm9ybXVsYTtcclxuICAgICAgICAgICAgLy8gICByZXR1cm4gdHJhZGVOYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHRyYWRlTmFtZSA9IHRoaXMuZ2V0RXh0ZW1wVFRQTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0cmFkZU5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJhZGVOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRUcmFkZU5hbWVcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VHJhZGVOYW1lRGlzcGxheSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICB2YXIgYW10X3RwTmFtZSA9IHRoaXMuZ2V0QnJhbmROYW1lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgdmFyIHRCcmFuZE5hbWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGFtdF90cE5hbWUpID8gYW10X3RwTmFtZSA6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5icmFuZD8uYnJhbmROYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5icmFuZC5icmFuZE5hbWUgOiBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5nZW5lcmljTmFtZSkpIHtcclxuICAgICAgICAgIC8vIGxldCBQSXRlbVRocmVlMiA9IHByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZS5sYXN0SW5kZXhPZihcIltcIik7XHJcbiAgICAgICAgICAvLyBsZXQgUEl0ZW1UaHJlZTMgPSBwcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUuc2xpY2UoMCwgUEl0ZW1UaHJlZTIpO1xyXG4gICAgICAgICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUgPSBQSXRlbVRocmVlMiA+PSAwID8gUEl0ZW1UaHJlZTMudHJpbSgpIDogcHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gdGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSA6IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gdHJ1ZSB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLmxlbWkgPT0gdHJ1ZSB8fCAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0gIT0gbnVsbCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybS50b0xvd2VyQ2FzZSgpID09IFwiZ2F1emVcIikpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybS50b0xvd2VyQ2FzZSgpID09IFwiZ2F1emVcIikge1xyXG4gICAgICAgICAgICAvLyBsZXQgUEl0ZW1UaHJlZTIgPSBwcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUubGFzdEluZGV4T2YoXCJbXCIpO1xyXG4gICAgICAgICAgICAvLyBsZXQgUEl0ZW1UaHJlZTMgPSBwcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUuc2xpY2UoMCwgUEl0ZW1UaHJlZTIpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZSA9IFBJdGVtVGhyZWUyID49IDAgPyBQSXRlbVRocmVlMy50cmltKCkgOiBwcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZW9wRGlzcGxheU5hbWUgPSB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUgOiBcIlwiO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gbGV0IFBJdGVtVGhyZWUgPSBleHRlbXBUVFBOYW1lLmxhc3RJbmRleE9mKFwiW1wiKTtcclxuICAgICAgICAgICAgLy8gbGV0IFBJdGVtVGhyZWUxID0gZXh0ZW1wVFRQTmFtZS5zbGljZSgwLCBQSXRlbVRocmVlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSA9IHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSA9IHRoaXMuZ2V0RXh0ZW1wVFRQTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pLnRyaW0oKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUgPSBQSXRlbVRocmVlID49IDAgPyBQSXRlbVRocmVlMS50cmltKCkgOiBleHRlbXBUVFBOYW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YXIgbXBwTmFtZSA9IHRoaXMuZ2V0TVBQTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pO1xyXG4gICAgICAgICAgdmFyIFNhY2hldE9yUHVtcCA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5zdHJTYWNoZXRPclB1bXApID8gXCIgXCIgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uc3RyU2FjaGV0T3JQdW1wIDogXCJcIjtcclxuICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1wcE5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID09IHRydWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVvcERpc3BsYXlOYW1lID0gdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gKG1wcE5hbWUudHJpbSgpICsgXCJcIiArIFNhY2hldE9yUHVtcCArICcgKCcgKyB0QnJhbmROYW1lICsgJyknKS50cmltKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSA9IHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSA9IChtcHBOYW1lLnRyaW0oKSArIFwiXCIgKyBTYWNoZXRPclB1bXApLnRyaW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIHN0cmVuZ3RoID0gdGhpcy5yeFN0cmVuZ3RoY2FsY3VsYXRpb24odGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKTtcclxuICAgICAgICAgICAgdmFyIGRpc3BOYW1lID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LkRpc3BOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5EaXNwTmFtZS50cmltKCkgOiBcIlwiO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gKGRpc3BOYW1lICsgXCIgXCIgKyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybS50cmltKCkgKyBcIiBcIiA6IFwiXCIpICsgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodEJyYW5kTmFtZSkgPyAnKCcgKyB0QnJhbmROYW1lICsgJykgJyA6IFwiXCIpICsgc3RyZW5ndGgpLnRyaW0oKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVvcERpc3BsYXlOYW1lID0gKGRpc3BOYW1lICsgXCIgXCIgKyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0QnJhbmROYW1lKSA/ICcoJyArIHRCcmFuZE5hbWUgKyAnKSAnIDogXCJcIikgKyBzdHJlbmd0aCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlID0gZGlzcE5hbWUgKyBcIiBcIiArICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtLnRyaW0oKSArIFwiIFwiIDogXCJcIikgKyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0QnJhbmROYW1lKSA/ICcoJyArIHRCcmFuZE5hbWUgKyAnKSAnIDogXCJcIikgKyB0aGlzLnJ4U3RyZW5ndGhjYWxjdWxhdGlvbk5ldyh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkQnJhbmRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gKGRpc3BOYW1lICsgXCIgXCIgKyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybS50cmltKCkgOiBcIlwiKSArIFwiIFwiICsgc3RyZW5ndGgpLnRyaW0oKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVvcERpc3BsYXlOYW1lID0gKGRpc3BOYW1lICsgXCIgXCIgKyBzdHJlbmd0aCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlID0gZGlzcE5hbWUgKyBcIiBcIiArICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtLnRyaW0oKSA6IFwiXCIpICsgXCIgXCIgKyB0aGlzLnJ4U3RyZW5ndGhjYWxjdWxhdGlvbk5ldyh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkQnJhbmRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gdGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUgOiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWUgPSB0aGlzLmNvbW1vblNlcnZpY2VzLmVvcERpc3BsYXlOYW1lID0gXCJcIjtcclxuICAgICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUgPSBcIlwiO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0VHJhZGVOYW1lRGlzcGxheVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE1QUE5hbWUoc2VsZWN0ZWRGb3JtdWxhdGlvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uKSAmJiAodHlwZW9mIHNlbGVjdGVkRm9ybXVsYXRpb24pID09PSAnb2JqZWN0JyAmJiBzZWxlY3RlZEZvcm11bGF0aW9uLmNvbnN0cnVjdG9yID09PSBPYmplY3QgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uPy5hbXQpICYmIHNlbGVjdGVkRm9ybXVsYXRpb24uYW10Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXT8ubXBwcykgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwcy5sZW5ndGggPiAwICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwc1swXT8ubXBwTmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwc1swXS5tcHBOYW1lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldE1QUE5hbWVcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbUdlbmVyaWNJbnRlbnRpb24obGVtaTogYm9vbGVhbiwgaXNCcmFuZE5hbWU6IGJvb2xlYW4sIGlzRXh0ZW1wOiBib29sZWFuKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAobGVtaSA9PSB0cnVlICYmIGlzQnJhbmROYW1lID09IHRydWUgJiYgaXNFeHRlbXAgIT0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiAnQic7XHJcbiAgICAgIH0gZWxzZSBpZiAobGVtaSA9PSB0cnVlICYmIGlzQnJhbmROYW1lID09IGZhbHNlICYmIGlzRXh0ZW1wICE9IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gJ0cnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAnRyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0SXRlbUdlbmVyaWNJbnRlbnRpb25cIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcnhTdHJlbmd0aGNhbGN1bGF0aW9uKGZvcm11bGF0aW9uOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZvcm11bGF0aW9uKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5KSAmJiBmb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eSAhPSAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZm9ybXVsYXRpb24uaXRlbVN0cmVuZ3RoUXVhbnRpdHludW1iZXJPZlBhY2spICYmIGZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5bnVtYmVyT2ZQYWNrICE9IDApIHtcclxuICAgICAgICAgIHJldHVybiAoKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZm9ybXVsYXRpb24uc3RyU2FjaGV0T3JQdW1wKSA/IGZvcm11bGF0aW9uLnN0clNhY2hldE9yUHVtcCA6IFwiXCIpICsgJyBbJyArIGZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5ICsgJ10nICsgJyB4ICcgKyBmb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eW51bWJlck9mUGFjaykudHJpbSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gKCghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZvcm11bGF0aW9uLnN0clNhY2hldE9yUHVtcCkgPyBmb3JtdWxhdGlvbi5zdHJTYWNoZXRPclB1bXAgOiBcIlwiKSArICcgWycgKyBmb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eSArICddJykudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicnhTdHJlbmd0aGNhbGN1bGF0aW9uXCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHJ4U3RyZW5ndGhjYWxjdWxhdGlvbk5ldyhmb3JtdWxhdGlvbjogYW55KSB7XHJcbiAgLy8gICB0cnkge1xyXG4gIC8vICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShmb3JtdWxhdGlvbikgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShmb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eSkgJiYgZm9ybXVsYXRpb24uaXRlbVN0cmVuZ3RoUXVhbnRpdHkgIT0gMCkge1xyXG4gIC8vICAgICAgIHJldHVybiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZvcm11bGF0aW9uLnN0clNhY2hldE9yUHVtcCkgPyBmb3JtdWxhdGlvbi5zdHJTYWNoZXRPclB1bXAgOiBcIlwiO1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIHJldHVybiAnJztcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAvLyAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJyeFN0cmVuZ3RoY2FsY3VsYXRpb25OZXdcIik7XHJcbiAgLy8gICAgIHJldHVybiBcIlwiO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgc2hvd0F1dGhvcml0eUJveChSZXN0cmljdGlvbnM6IGFueSwgUHJlc2NyaWJlQVM6IGFueSwgcnhBdXRob3JpdHk6IGFueSwgdW5saXN0ZWRSQTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoUmVzdHJpY3Rpb25zKSAmJiBSZXN0cmljdGlvbnMubGVuZ3RoID4gMCAmJiBSZXN0cmljdGlvbnNbMF0ucmVzdHJpY3Rpb25UeXBlLnRvTG93ZXJDYXNlKCkgIT0gJ3Jlc3RyaWN0ZWQnICYmIFJlc3RyaWN0aW9uc1swXS5yZXN0cmljdGlvblR5cGUudG9Mb3dlckNhc2UoKSAhPSAndW5yZXN0cmljdGVkJyAmJiBQcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdwYnMnKSB8fCAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShSZXN0cmljdGlvbnMpICYmIFJlc3RyaWN0aW9ucy5sZW5ndGggPiAwICYmIFJlc3RyaWN0aW9uc1swXS5yZXN0cmljdGlvblR5cGUudG9Mb3dlckNhc2UoKSAhPSAncmVzdHJpY3RlZCcgJiYgUmVzdHJpY3Rpb25zWzBdLnJlc3RyaWN0aW9uVHlwZS50b0xvd2VyQ2FzZSgpICE9ICd1bnJlc3RyaWN0ZWQnICYmIFByZXNjcmliZUFTLnRvTG93ZXJDYXNlKCkgPT0gJ3JwYnMnKSB8fCAocnhBdXRob3JpdHkgPT0gdHJ1ZSAmJiBQcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdwYnMnKSB8fCAocnhBdXRob3JpdHkgPT0gdHJ1ZSAmJiBQcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdycGJzJykpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChQcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdycGJzJyAmJiB1bmxpc3RlZFJBID09IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2hvd0F1dGhvcml0eUJveFwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGlyZWN0aW9ucygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBkaXJlY3Rpb25zID0gJyc7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZG9zZVNlYXJjaFZhbHVlKSkge1xyXG4gICAgICAgIGRpcmVjdGlvbnMgPSB0aGlzLmNvbW1vblNlcnZpY2VzLmRvc2VTZWFyY2hWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSkpIHtcclxuICAgICAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucyArICcgJyArIHRoaXMuY29tbW9uU2VydmljZXMuZnJlcVNlYXJjaFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZm9vZFNlYXJjaFZhbHVlKSkge1xyXG4gICAgICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zICsgJyAnICsgdGhpcy5jb21tb25TZXJ2aWNlcy5mb29kU2VhcmNoVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5JbnN0cnVjdGlvbkRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zICsgJyAnICsgdGhpcy5JbnN0cnVjdGlvbkRlc2NyaXB0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlKSkge1xyXG4gICAgICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zICsgJyAnICsgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkaXJlY3Rpb25zLnRyaW0oKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0RGlyZWN0aW9uc1wiKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3N0YXRlIG5hbWUgZnVsbCBmb3JtXHJcbiAgZ2V0U3RhdGVOYW1lRnJvbVN0YXRlQ29kZShydHBtc3RhdGVOYW1lOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHN3aXRjaCAocnRwbXN0YXRlTmFtZSAmJiBydHBtc3RhdGVOYW1lICE9ICcnID8gcnRwbXN0YXRlTmFtZS50b1VwcGVyQ2FzZSgpIDogJycpIHtcclxuICAgICAgICBjYXNlICdOU1cnOlxyXG4gICAgICAgICAgcmV0dXJuICdOZXcgU291dGggV2FsZXMnO1xyXG4gICAgICAgIGNhc2UgJ1FMRCc6XHJcbiAgICAgICAgICByZXR1cm4gJ1F1ZWVuc2xhbmQnO1xyXG4gICAgICAgIGNhc2UgJ1NBJzpcclxuICAgICAgICAgIHJldHVybiAnU291dGggQXVzdHJhbGlhJztcclxuICAgICAgICBjYXNlICdUQVMnOlxyXG4gICAgICAgICAgcmV0dXJuICdUYXNtYW5pYSc7XHJcbiAgICAgICAgY2FzZSAnVklDJzpcclxuICAgICAgICAgIHJldHVybiAnVmljdG9yaWEnO1xyXG4gICAgICAgIGNhc2UgJ1dBJzpcclxuICAgICAgICAgIHJldHVybiAnV2VzdGVybiBBdXN0cmFsaWEnO1xyXG4gICAgICAgIGNhc2UgJ0FDVCc6XHJcbiAgICAgICAgICByZXR1cm4gJ0F1c3RyYWxpYW4gQ2FwaXRhbCBUZXJyaXRvcnknO1xyXG4gICAgICAgIGNhc2UgJ05UJzpcclxuICAgICAgICAgIHJldHVybiAnTm9ydGhlcm4gVGVycml0b3J5JztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIHJ0cG1zdGF0ZU5hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0U3RhdGVOYW1lRnJvbVN0YXRlQ29kZVwiKTtcclxuICAgICAgcmV0dXJuIHJ0cG1zdGF0ZU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3N1cGVyc2NyaXB0IGNvZGVcclxuICBzaHJpbmtTdXBlclNjcmlwdENvZGUgPSAoaW5wdXQ6IGFueSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGR1cHJlc3VsdCA9IGlucHV0O1xyXG4gICAgICBsZXQgYSA9IGlucHV0LnNwbGl0KCc8c3VwPicpO1xyXG5cclxuICAgICAgLy8gc2VhcmNoIGZvciBwYXR0ZXJuIGluIGFcclxuICAgICAgbGV0IGNvdW50ID0gYS5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgLy8gaWYgbWF0Y2ggZm91bmQgaW5jcmVhc2UgY291bnRcclxuICAgICAgICBsZXQgc3RhcnQgPSAnPHN1cD4nO1xyXG4gICAgICAgIGxldCBlbmQgPSAnPC9zdXA+JztcclxuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IGR1cHJlc3VsdC5pbmRleE9mKHN0YXJ0KSArIHN0YXJ0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgZW5kSW5kZXggPSBkdXByZXN1bHQuaW5kZXhPZihlbmQsIHN0YXJ0SW5kZXgpO1xyXG4gICAgICAgIGxldCBleHRyYWN0ZWRWYWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoc3RhcnRJbmRleCAhPSAtMSAmJiBlbmRJbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgZXh0cmFjdGVkVmFsdWUgPSBkdXByZXN1bHQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0cmluZ051bWJlciA9IHRoaXMuY29udmVydFRvU3VwZXJzY3JpcHQoZXh0cmFjdGVkVmFsdWUpO1xyXG5cclxuICAgICAgICBsZXQgcmVzdWx0ID0gJ1RoZSBudW1iZXIgJyArIHN0cmluZ051bWJlciArICcgaXMgc3VwZXJzY3JpcHRlZC4nO1xyXG5cclxuICAgICAgICAvLyBkdXByZXN1bHQgPSBkdXByZXN1bHQucmVwbGFjZSgvPHN1cD4uKjxcXC9zdXA+LywgJzxzdXA+PC9zdXA+Jyk7XHJcbiAgICAgICAgLy8gZHVwcmVzdWx0ID0gZHVwcmVzdWx0LnJlcGxhY2VGaXJzdChcIlxcXFw8c3VwPi4qP1xcXFw8L3N1cD5cIiwgXCI8c3VwPlwiICsgXCJcIiArIFwiPC9zdXA+XCIpO1xyXG4gICAgICAgIGR1cHJlc3VsdCA9IGR1cHJlc3VsdC5yZXBsYWNlKFxyXG4gICAgICAgICAgJzxzdXA+JyArIGV4dHJhY3RlZFZhbHVlICsgJzwvc3VwPicsXHJcbiAgICAgICAgICBzdHJpbmdOdW1iZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHJldHVybiBkdXByZXN1bHQ7XHJcbiAgICAgIHJldHVybiB0aGlzLnNocmlua1N1YlNjcmlwdENvZGUoZHVwcmVzdWx0KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2hyaW5rU3VwZXJTY3JpcHRDb2RlXCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvL3N1YnNjcmlwdCBjb2RlXHJcbiAgc2hyaW5rU3ViU2NyaXB0Q29kZSA9IChpbnB1dDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgZHVwcmVzdWx0ID0gaW5wdXQ7XHJcbiAgICAgIGxldCBhID0gaW5wdXQuc3BsaXQoJzxzdWI+Jyk7XHJcblxyXG4gICAgICAvLyBzZWFyY2ggZm9yIHBhdHRlcm4gaW4gYVxyXG4gICAgICBsZXQgY291bnQgPSBhLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAvLyBpZiBtYXRjaCBmb3VuZCBpbmNyZWFzZSBjb3VudFxyXG4gICAgICAgIGxldCBzdGFydCA9ICc8c3ViPic7XHJcbiAgICAgICAgbGV0IGVuZCA9ICc8L3N1Yj4nO1xyXG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gZHVwcmVzdWx0LmluZGV4T2Yoc3RhcnQpICsgc3RhcnQubGVuZ3RoO1xyXG4gICAgICAgIGxldCBlbmRJbmRleCA9IGR1cHJlc3VsdC5pbmRleE9mKGVuZCwgc3RhcnRJbmRleCk7XHJcbiAgICAgICAgbGV0IGV4dHJhY3RlZFZhbHVlID0gJyc7XHJcblxyXG4gICAgICAgIGlmIChzdGFydEluZGV4ICE9IC0xICYmIGVuZEluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICBleHRyYWN0ZWRWYWx1ZSA9IGR1cHJlc3VsdC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RyaW5nTnVtYmVyID0gdGhpcy5zdWJzY3JpcHROdW1iZXJzKGV4dHJhY3RlZFZhbHVlKTtcclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICdUaGUgbnVtYmVyICcgKyBzdHJpbmdOdW1iZXIgKyAnIGlzIHN1cGVyc2NyaXB0ZWQuJztcclxuICAgICAgICAvLyBkdXByZXN1bHQgPSBkdXByZXN1bHQucmVwbGFjZSgvPHN1cD4uKjxcXC9zdXA+LywgJzxzdXA+PC9zdXA+Jyk7XHJcbiAgICAgICAgLy8gZHVwcmVzdWx0ID0gZHVwcmVzdWx0LnJlcGxhY2VGaXJzdChcIlxcXFw8c3VwPi4qP1xcXFw8L3N1cD5cIiwgXCI8c3VwPlwiICsgXCJcIiArIFwiPC9zdXA+XCIpO1xyXG4gICAgICAgIGR1cHJlc3VsdCA9IGR1cHJlc3VsdC5yZXBsYWNlKFxyXG4gICAgICAgICAgJzxzdWI+JyArIGV4dHJhY3RlZFZhbHVlICsgJzwvc3ViPicsXHJcbiAgICAgICAgICBzdHJpbmdOdW1iZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkdXByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNocmlua1N1YlNjcmlwdENvZGVcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnZlcnRUb1N1cGVyc2NyaXB0ID0gKGlucHV0OiBhbnkpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHN1cGVyc2NyaXB0RGlnaXRzOiBhbnkgPSB7XHJcbiAgICAgICAgJzAnOiAnXFx1MjA3MCcsXHJcbiAgICAgICAgJzEnOiAnXFx1MDBCOScsXHJcbiAgICAgICAgJzInOiAnXFx1MDBCMicsXHJcbiAgICAgICAgJzMnOiAnXFx1MDBCMycsXHJcbiAgICAgICAgJzQnOiAnXFx1MjA3NCcsXHJcbiAgICAgICAgJzUnOiAnXFx1MjA3NScsXHJcbiAgICAgICAgJzYnOiAnXFx1MjA3NicsXHJcbiAgICAgICAgJzcnOiAnXFx1MjA3NycsXHJcbiAgICAgICAgJzgnOiAnXFx1MjA3OCcsXHJcbiAgICAgICAgJzknOiAnXFx1MjA3OScsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBsZXQgb3V0cHV0ID0gJyc7XHJcbiAgICAgIGZvciAobGV0IGNoYXIgb2YgaW5wdXQpIHtcclxuICAgICAgICBpZiAoY2hhciBpbiBzdXBlcnNjcmlwdERpZ2l0cykge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IHN1cGVyc2NyaXB0RGlnaXRzW2NoYXJdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gY2hhcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiY29udmVydFRvU3VwZXJzY3JpcHRcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHN1YnNjcmlwdE51bWJlcnMoc3RyOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBzdWJzY3JpcHRzOiBhbnkgPSB7XHJcbiAgICAgICAgJzAnOiAnXFx1MjA4MCcsXHJcbiAgICAgICAgJzEnOiAnXFx1MjA4MScsXHJcbiAgICAgICAgJzInOiAnXFx1MjA4MicsXHJcbiAgICAgICAgJzMnOiAnXFx1MjA4MycsXHJcbiAgICAgICAgJzQnOiAnXFx1MjA4NCcsXHJcbiAgICAgICAgJzUnOiAnXFx1MjA4NScsXHJcbiAgICAgICAgJzYnOiAnXFx1MjA4NicsXHJcbiAgICAgICAgJzcnOiAnXFx1MjA4NycsXHJcbiAgICAgICAgJzgnOiAnXFx1MjA4OCcsXHJcbiAgICAgICAgJzknOiAnXFx1MjA4OScsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgcmVzdWx0ID0gJyc7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHN1YnNjcmlwdHNbc3RyW2ldXSkge1xyXG4gICAgICAgICAgcmVzdWx0ICs9IHN1YnNjcmlwdHNbc3RyW2ldXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0ICs9IHN0cltpXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic3Vic2NyaXB0TnVtYmVyc1wiKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBdXRob3JpdHlMYWJlbChzdGF0ZU5hbWU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIHN0YXRlID0gdGhpcy5nZXRTdGF0ZUNvZGVGcm9tU3RhdGVOYW1lKHN0YXRlTmFtZSk7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgIGNhc2UgJ05TVyc6XHJcbiAgICAgICAgICByZXR1cm4gJ0FwcHJvdmFsIE51bWJlcic7XHJcbiAgICAgICAgY2FzZSAnUUxEJzpcclxuICAgICAgICAgIHJldHVybiAnQXBwcm92YWwgTnVtYmVyJztcclxuICAgICAgICBjYXNlICdTQSc6XHJcbiAgICAgICAgICByZXR1cm4gJ0FwcHJvdmFsIE51bWJlcic7XHJcbiAgICAgICAgY2FzZSAnVEFTJzpcclxuICAgICAgICAgIHJldHVybiAnQXBwcm92YWwgTnVtYmVyJztcclxuICAgICAgICBjYXNlICdWSUMnOlxyXG4gICAgICAgICAgcmV0dXJuICdBcHByb3ZhbCBOdW1iZXInO1xyXG4gICAgICAgIGNhc2UgJ1dBJzpcclxuICAgICAgICAgIHJldHVybiAnQXBwcm92YWwgTnVtYmVyJztcclxuICAgICAgICBjYXNlICdBQ1QnOlxyXG4gICAgICAgICAgcmV0dXJuICdBcHByb3ZhbCBOdW1iZXInO1xyXG4gICAgICAgIGNhc2UgJ05UJzpcclxuICAgICAgICAgIHJldHVybiAnQXBwcm92YWwgTnVtYmVyJztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuICdBcHByb3ZhbCBOdW1iZXInO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldEF1dGhvcml0eUxhYmVsXCIpO1xyXG4gICAgICByZXR1cm4gc3RhdGVOYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGVBdXRob3JpdHlMYWJlbChzdGF0ZU5hbWU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIHN0YXRlID0gdGhpcy5nZXRTdGF0ZUNvZGVGcm9tU3RhdGVOYW1lKHN0YXRlTmFtZSk7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgIGNhc2UgJ05TVyc6XHJcbiAgICAgICAgICByZXR1cm4gJ0F1dGhvcmlzYXRpb24gbnVtYmVyJztcclxuICAgICAgICBjYXNlICdRTEQnOlxyXG4gICAgICAgICAgcmV0dXJuICdBcHByb3ZhbCBudW1iZXInO1xyXG4gICAgICAgIGNhc2UgJ1NBJzpcclxuICAgICAgICAgIHJldHVybiAnUGVybWl0IG51bWJlcic7XHJcbiAgICAgICAgY2FzZSAnVEFTJzpcclxuICAgICAgICAgIHJldHVybiAnQXV0aG9yaXR5IG51bWJlcic7XHJcbiAgICAgICAgY2FzZSAnVklDJzpcclxuICAgICAgICAgIHJldHVybiAnV2FycmFudCBudW1iZXInO1xyXG4gICAgICAgIGNhc2UgJ1dBJzpcclxuICAgICAgICAgIHJldHVybiAnQXV0aG9yaXR5IG51bWJlcic7XHJcbiAgICAgICAgY2FzZSAnQUNUJzpcclxuICAgICAgICAgIHJldHVybiAnQXBwcm92YWwgbnVtYmVyJztcclxuICAgICAgICBjYXNlICdOVCc6XHJcbiAgICAgICAgICByZXR1cm4gJ0F1dGhvcmlzYXRpb24gbnVtYmVyJztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuICdBdXRob3Jpc2F0aW9uIG51bWJlcic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0U3RhdGVBdXRob3JpdHlMYWJlbFwiKTtcclxuICAgICAgcmV0dXJuIHN0YXRlTmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEV4dGVtcFRUUE5hbWUoc2VsZWN0ZWRGb3JtdWxhdGlvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uKSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQpICYmIHNlbGVjdGVkRm9ybXVsYXRpb24uYW10Lmxlbmd0aCAhPSAwICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwcykgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwcHNbMF0udHBwTmFtZSkpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNlbGVjdGVkRm9ybXVsYXRpb24uaXRlbVN0cmVuZ3RoUXVhbnRpdHludW1iZXJPZlBhY2spICYmIHNlbGVjdGVkRm9ybXVsYXRpb24uaXRlbVN0cmVuZ3RoUXVhbnRpdHludW1iZXJPZlBhY2sgIT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID09IHRydWUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwc1swXS50cHBOYW1lO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwc1swXS50cHBOYW1lICsgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eSkgPyAnIFsnICsgc2VsZWN0ZWRGb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eSArICddJyArICcgeCAnIDogXCJcIikgKyBzZWxlY3RlZEZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5bnVtYmVyT2ZQYWNrKS50cmltKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmxlbWkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS50cHBzWzBdLnRwcE5hbWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChzZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS50cHBzWzBdLnRwcE5hbWUgKyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5KSA/ICcgWycgKyBzZWxlY3RlZEZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5ICsgJ10nIDogXCJcIikpLnRyaW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uPy5wcm9kdWN0TmFtZSkgPyBzZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lLnRyaW0oKSA6IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldEV4dGVtcFRUUE5hbWVcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm91bmREYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciByb3VuZF9WYWwgPSBNYXRoLnJvdW5kKHZhbHVlKTtcclxuICAgICAgaWYgKHJvdW5kX1ZhbCA8IDApIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcm91bmRfVmFsMSA9IHJvdW5kX1ZhbC50b1N0cmluZygpO1xyXG4gICAgICAgIC8vIHJvdW5kX1ZhbCA9IHBhcnNlSW50KHJvdW5kX1ZhbDEsMTApO1xyXG4gICAgICAgIHJldHVybiByb3VuZF9WYWwxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInJvdW5kRGF0YVwiKTtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlcnhNZWRpY2FyZUNhcmQobWVkaWNhcmVOdW1iZXI6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIG1lZGljYXJlQ2FyZCA9ICcnO1xyXG4gICAgICBtZWRpY2FyZUNhcmQgPSBtZWRpY2FyZU51bWJlci5zbGljZSgwLCAxMCk7XHJcbiAgICAgIHJldHVybiBtZWRpY2FyZUNhcmQ7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImVyeE1lZGljYXJlQ2FyZFwiKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlcnhNZWRpY2FyZUlSTihtZWRpY2FyZU51bWJlcjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgbWVkaWNhcmVDYXJkSVJOID0gJyc7XHJcbiAgICAgIG1lZGljYXJlQ2FyZElSTiA9IG1lZGljYXJlTnVtYmVyLnNsaWNlKC0xKTtcclxuICAgICAgcmV0dXJuIG1lZGljYXJlQ2FyZElSTjtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZXJ4TWVkaWNhcmVJUk5cIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VW51c3VhbFF0eUZsYWcoc0Zvcm11bGF0aW9uOiBhbnksIHF1YW50aXR5VmFsOiBhbnksIFByZXNjcmliZUFTOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChQcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdwYnMnIHx8IFByZXNjcmliZUFTLnRvTG93ZXJDYXNlKCkgPT0gJ3JwYnMnKSB7XHJcbiAgICAgICAgaWYgKHNGb3JtdWxhdGlvbi5tYXhRdHlVbml0cyAhPSBxdWFudGl0eVZhbCkge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZXRVbnVzdWFsUXR5RmxhZ1wiKTtcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3N0YXRlIG5hbWUgZnJvbSBhZGRyZXNzXHJcbiAgZ2V0U3RhdGVDb2RlRnJvbVN0YXRlTmFtZShzdGF0ZU5hbWU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc3dpdGNoIChzdGF0ZU5hbWUudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgIGNhc2UgJ25ldyBzb3V0aCB3YWxlcyc6XHJcbiAgICAgICAgICByZXR1cm4gJ05TVyc7XHJcbiAgICAgICAgY2FzZSAncXVlZW5zbGFuZCc6XHJcbiAgICAgICAgICByZXR1cm4gJ1FMRCc7XHJcbiAgICAgICAgY2FzZSAnc291dGggYXVzdHJhbGlhJzpcclxuICAgICAgICAgIHJldHVybiAnU0EnO1xyXG4gICAgICAgIGNhc2UgJ3Rhc21hbmlhJzpcclxuICAgICAgICAgIHJldHVybiAnVEFTJztcclxuICAgICAgICBjYXNlICd2aWN0b3JpYSc6XHJcbiAgICAgICAgICByZXR1cm4gJ1ZJQyc7XHJcbiAgICAgICAgY2FzZSAnd2VzdGVybiBhdXN0cmFsaWEnOlxyXG4gICAgICAgICAgcmV0dXJuICdXQSc7XHJcbiAgICAgICAgY2FzZSAnYXVzdHJhbGlhbiBjYXBpdGFsIHRlcnJpdG9yeSc6XHJcbiAgICAgICAgICByZXR1cm4gJ0FDVCc7XHJcbiAgICAgICAgY2FzZSAnbm9ydGhlcm4gdGVycml0b3J5JzpcclxuICAgICAgICAgIHJldHVybiAnTlQnO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4gc3RhdGVOYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldFN0YXRlQ29kZUZyb21TdGF0ZU5hbWVcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0R2VuZGVyKGdlbmRlcjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgZ2VuZGVyVGV4dCA9ICdOb3QgQXZhaWxhYmxlJztcclxuICAgICAgZ2VuZGVyVGV4dCA9XHJcbiAgICAgICAgZ2VuZGVyLnRvTG93ZXJDYXNlKCkgPT0gJ20nID8gJ01hbGUnIDogZ2VuZGVyLnRvTG93ZXJDYXNlKCkgPT0gJ2YnID8gJ0ZlbWFsZScgOiAnTm90IEF2YWlsYWJsZSc7XHJcbiAgICAgIHJldHVybiBnZW5kZXJUZXh0O1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRHZW5kZXJcIik7XHJcbiAgICAgIHJldHVybiAnTm90IEF2YWlsYWJsZSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRHZW5kZXJDb2RlKGdlbmRlcjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgZ2VuZGVyQ29kZSA9ICdOb3QgQXZhaWxhYmxlJztcclxuICAgICAgZ2VuZGVyQ29kZSA9IGdlbmRlci50b0xvd2VyQ2FzZSgpID09ICdtJyA/ICdNJyA6IGdlbmRlci50b0xvd2VyQ2FzZSgpID09ICdmJyA/ICdGJyA6ICdVJztcclxuICAgICAgcmV0dXJuIGdlbmRlckNvZGU7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldEdlbmRlckNvZGVcIik7XHJcbiAgICAgIHJldHVybiAnVSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYWQodmFsdWU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHZhbHVlIDwgMTAgPyAnMCcgKyB2YWx1ZSA6IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwYWRcIik7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE9mZnNldCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgLy8gdmFyIGRhdGUgPSB0aGlzLnN0YXRlLnN0YXJ0RGF0ZTtcclxuICAgICAgdmFyIHNpZ24gPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgPiAwID8gJy0nIDogJysnO1xyXG4gICAgICB2YXIgb2Zmc2V0ID0gTWF0aC5hYnMoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcclxuICAgICAgdmFyIGhvdXJzID0gdGhpcy5wYWQoTWF0aC5mbG9vcihvZmZzZXQgLyA2MCkpO1xyXG4gICAgICB2YXIgbWludXRlcyA9IHRoaXMucGFkKG9mZnNldCAlIDYwKTtcclxuICAgICAgcmV0dXJuIGhvdXJzICsgJzonICsgbWludXRlcztcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0T2Zmc2V0XCIpO1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBodG1sVG9Gb3JtYXR0ZWRUZXh0KHJlc3RyaWN0aW9uOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiByZXN0cmljdGlvbi5yZXBsYWNlKC88YnIgXFwvPi9nLCAnKicpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJodG1sVG9Gb3JtYXR0ZWRUZXh0XCIpO1xyXG4gICAgICByZXR1cm4gcmVzdHJpY3Rpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBicmFuZFN1YnN0aXR1dGVzTm90QWxsb3coQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93ID0gQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93O1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvd1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFBSTkNoYW5nZShQUk46IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeFBSTiA9IFBSTjtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJQUk5DaGFuZ2VcIik7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaXNDaGFuZ2VCcmFuZE5hbWUoaXNCcmFuZE5hbWU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9IGlzQnJhbmROYW1lO1xyXG4gICAgICBpZiAoIWlzQnJhbmROYW1lKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5CcmFuZFN1YnN0aXR1dGVzTm90QWxsb3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImlzQ2hhbmdlQnJhbmROYW1lXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VuZFRvUGhhcm1hY3lDaGFuZ2UoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3kpXHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVZhbHVlID0gXCJcIjtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZW5kVG9QaGFybWFjeUNoYW5nZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluY2x1ZGVSdHBtTW9kYWwoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5pc1J0cG1OZXh0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl81MC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl81MC5jb2RlKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl81MC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl81MC5tZXNzYWdlKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMpKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pICYmIEFycmF5LmlzQXJyYXkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uWydydHBtU3RhdGVzJ10pICYmICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb25bJ3J0cG1TdGF0ZXMnXSBhcyBhbnlbXSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgaXNSdHBtU3RhdGVzID0gKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvblsncnRwbVN0YXRlcyddIGFzIGFueVtdKS5pbmNsdWRlcyh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnN0YXRlKTtcclxuICAgICAgICAgICAgaWYgKGlzUnRwbVN0YXRlcykge1xyXG4gICAgICAgICAgICAgIHZhciBkYXRhID0gXCJUaGUgc2VsZWN0ZWQgZHJ1ZyBjb21lcyB1bmRlciBSZWFsIFRpbWUgUHJlc2NyaXB0aW9uIE1vbml0b3JpbmcgKFJUUE0pIGluIFwiICsgdGhpcy5nZXRTdGF0ZU5hbWVGcm9tU3RhdGVDb2RlKHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuc3RhdGUpICsgXCIuIFBsZWFzZSByZXZpZXcuXCJcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oUmVhbFRpbWVQcmVzY3JpcHRpb25Nb25pdG9yaW5nQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIGRhdGEpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNSdHBtTmV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZXNjcmliZURyb3Bkb3duKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVEcm9wZG93bigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByZXNjcmliZURyb3Bkb3duKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlRHJvcGRvd24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wcmVzY3JpYmVEcm9wZG93bigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImluY2x1ZGVSdHBtTW9kYWxcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBFcHJlc2NyaXBlU2VuZChmbGFnOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5lUHJlc2NyaXB0aW9uVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlID0gJ0UnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0UEJUTkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hYm9ydGRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZmxhZyA9PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmlzZXByaXNjcmliZXByaW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dBdXRob3JpdHlCb3godGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucywgdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUywgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSwgdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTLnRvTG93ZXJDYXNlKCkgPT09IFwicGJzXCIgJiYgdGhpcy5nZXRTdGF0ZUNvZGVGcm9tU3RhdGVOYW1lKHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuc3RhdGUpLnRvVXBwZXJDYXNlKCkgPT0gXCJOU1dcIikge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKFBhc3N3b3JkQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIDEpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5lbWVyZ2VuY3lTdXBwbHkgJiYgZmxhZyAhPSAyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkNvbmZpcm1QYXRpZW50UG9wdXAoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhudW1iZXIgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeGVtYWlsSWQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1ByaW50QXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlc2NyaWJlTWVkKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3kgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5ICYmIGZsYWcgIT0gMikge1xyXG4gICAgICAgICAgICB0aGlzLkNvbmZpcm1QYXRpZW50UG9wdXAoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeG51bWJlciA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhlbWFpbElkID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1ByaW50QXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB2YXIgc2NoZWR1bGVOdW1iZXIgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QgPyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBvaXNvbkNsYXNzaWZpY2F0aW9uKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucG9pc29uQ2xhc3NpZmljYXRpb24ucG9pc29uQ2xhc3Nlcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzWzBdKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzWzBdLnRvTG93ZXJDYXNlKCkgPT0gJ3Vuc2NoZWR1bGVkJyA/ICcnIDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBvaXNvbkNsYXNzaWZpY2F0aW9uLnBvaXNvbkNsYXNzZXNbMF0gOiAnJykgOiBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0ICYmIHNjaGVkdWxlTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT0gJ3M4JyAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMuaXNQYXNzd29yZENoZWNrKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKFBhc3N3b3JkQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIDIpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VDb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVNZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnByZXNjcmliZU1lZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiRXByZXNjcmlwZVNlbmRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBDb25maXJtUGF0aWVudFBvcHVwKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKENvbmZpcm1QYXRpZW50Q29udGFjdERldGFpbHNDb21wb25lbnQsIHRoaXMuY29udGVudCwgMSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zY2hlZHVsZU51bWJlci50b0xvd2VyQ2FzZSgpID09ICdzOCcgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLmlzUGFzc3dvcmRDaGVjaykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oUGFzc3dvcmRDb21wb25lbnQsIHRoaXMuY29udGVudCwgMikuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNQcmludEF2YWlsYWJsZSA9IHJlc3BvbnNlLmlzUHJpbnRBdmFpbGFibGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gcmVzcG9uc2UuQWRkcmVzc1NlbmRUb0FkZFR5cGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4bnVtYmVyID0gcmVzcG9uc2UucnhudW1iZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4ZW1haWxJZCA9IHJlc3BvbnNlLnJ4ZW1haWxJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlc2NyaWJlTWVkKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNQcmludEF2YWlsYWJsZSA9IHJlc3BvbnNlLmlzUHJpbnRBdmFpbGFibGU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuQWRkcmVzc1NlbmRUb0FkZFR5cGUgPSByZXNwb25zZS5BZGRyZXNzU2VuZFRvQWRkVHlwZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeG51bWJlciA9IHJlc3BvbnNlLnJ4bnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4ZW1haWxJZCA9IHJlc3BvbnNlLnJ4ZW1haWxJZDtcclxuICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVNZWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlID0gJyc7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzUHJpbnRBdmFpbGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuQWRkcmVzc1NlbmRUb0FkZFR5cGUgPSBcIlwiO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeG51bWJlciA9IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4ZW1haWxJZCA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiQ29uZmlybVBhdGllbnRQb3B1cFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByZXNjcmlwZVByaW50KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCh0aGlzLmNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpcHRpb24gPT09IHRydWUgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscz8uc2NyaXB0VHlwZSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZS50b1VwcGVyQ2FzZSgpID09ICdNJyAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzPy5zdGF0dXMpICYmIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9ICdkcmFmdCcpIHx8ICh0aGlzLmNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpcHRpb24gPT09IHRydWUgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscz8uc2NyaXB0VHlwZSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZS50b1VwcGVyQ2FzZSgpID09ICdFJykpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hYm9ydGRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlID0gJ00nO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzUHJpbnRBdmFpbGFibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gXCJTTVNcIjtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB2YXIgc2NoZWR1bGVOdW1iZXIgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QgPyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBvaXNvbkNsYXNzaWZpY2F0aW9uKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucG9pc29uQ2xhc3NpZmljYXRpb24ucG9pc29uQ2xhc3Nlcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzWzBdKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzWzBdLnRvTG93ZXJDYXNlKCkgPT0gJ3Vuc2NoZWR1bGVkJyA/ICcnIDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBvaXNvbkNsYXNzaWZpY2F0aW9uLnBvaXNvbkNsYXNzZXNbMF0gOiAnJykgOiBcIlwiO1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0ICYmIHNjaGVkdWxlTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT0gJ3M4JyAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMuaXNQYXNzd29yZENoZWNrKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKFBhc3N3b3JkQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsMikuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5yZXNwb25zZUNvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXNjcmliZU1lZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucHJlc2NyaWJlTWVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaXBlUHJpbnRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmRpY2F0aW9uQXV0aG9yaXR5KG1heFF0eVVuaXRzOiBhbnksIHF1YW50aXR5VmFsOiBhbnksIHJlcGVhdHM6IGFueSwgcmVwZWF0c1ZhbDogYW55LCBpbmRleDogYW55LCByZXN0cmljdGlvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMpICYmIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09ICdwcmVzY3JpYmVkJyAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9ucyA9ICcnO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHZhciB0ZW1wRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICB2YXIgcmVwbGFjZXZhbHVlID0gdGhpcy5odG1sVG9Gb3JtYXR0ZWRUZXh0KHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVGV4dCk7XHJcbiAgICAgIHRlbXBEaXZFbGVtZW50LmlubmVySFRNTCA9IHJlcGxhY2V2YWx1ZTtcclxuICAgICAgdmFyIHZhbHVlID0gdGVtcERpdkVsZW1lbnQudGV4dENvbnRlbnQgfHwgdGVtcERpdkVsZW1lbnQuaW5uZXJUZXh0IHx8ICcnO1xyXG4gICAgICBpZiAoKCF0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5V2l0aFVuaXRGbGFnID8gcGFyc2VGbG9hdChtYXhRdHlVbml0cykgOiAxKSA8IHBhcnNlSW50KHF1YW50aXR5VmFsKSB8fCBwYXJzZUludChyZXBlYXRzKSA8IHBhcnNlSW50KHJlcGVhdHNWYWwpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgPSBpbmRleDtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8gPSAnJztcclxuICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgPSBpbmRleDtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8gPSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCA/IHJlc3RyaWN0aW9uLnN0cmVhbWxpbmVkQ29kZSA6ICcnO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJpbmRpY2F0aW9uQXV0aG9yaXR5XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TWF4UXVhbnRpdHkoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LnBic1R5cGUpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlLnRvTG93ZXJDYXNlKCkgPT0gXCJub24gcGJzXCIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm51bWJlck9mUGFjayArIFwieFwiICsgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnVuaXRQZXJQYWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubnVtYmVyT2ZQYWNrKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/Lm51bWJlck9mUGFjayAhPSAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm51bWJlck9mUGFjaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5tYXhRdHlVbml0cykpXHJcbiAgICAgICAgICByZXR1cm4gKHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlXaXRoVW5pdEZsYWcgPyBcIjEgeCBcIiA6IFwiXCIpICsgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0TWF4UXVhbnRpdHlcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdFF1YW50aXR5KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0ICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5udW1iZXJPZlBhY2spICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubnVtYmVyT2ZQYWNrICE9IDApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm51bWJlck9mUGFjaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/Lm1heFF0eVVuaXRzKSkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVdpdGhVbml0RmxhZyA/IFwiMSB4IFwiIDogXCJcIikgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubWF4UXR5VW5pdHNcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0RGVmYXVsdFF1YW50aXR5XCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvbklucHV0Q2hhbmdlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9ucyA9IG5ld1ZhbHVlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIm9uSW5wdXRDaGFuZ2VcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbklucHV0Y2hhbmdlQXBwcm92YWxObyhuZXdWYWx1ZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObyA9IG5ld1ZhbHVlLnJlcGxhY2UoL1teYS16QS1aIDAtOV0vZywgXCJcIikucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJvbklucHV0Y2hhbmdlQXBwcm92YWxOb1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFkZEF1dGhWYWx1ZShudW06IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobnVtKSkge1xyXG4gICAgICAgIGNvbnN0IGFyck9mRGlnaXRzID0gQXJyYXkuZnJvbShTdHJpbmcobnVtKSwgTnVtYmVyKTtcclxuICAgICAgICBsZXQgdmFsdWVPZkF1dGhvcml0eUFyciA9IHRoaXMuYWRkQXV0aFZhbHVlKGFyck9mRGlnaXRzKTtcclxuICAgICAgICBsZXQgZ2V0UmVtYWluZGVyVmFsdWUgPSB2YWx1ZU9mQXV0aG9yaXR5QXJyICUgOTtcclxuICAgICAgICBsZXQgYWRkUmVtYWluZGVyVmFsdWVBdExhc3QgPSAnJyArIG51bSArIGdldFJlbWFpbmRlclZhbHVlLnRvRml4ZWQoKTtcclxuICAgICAgICByZXR1cm4gYWRkUmVtYWluZGVyVmFsdWVBdExhc3Q7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QWRkQXV0aFZhbHVlXCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF1dGhWYWx1ZShhcnJPZkRpZ2l0czogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgYWRkZWRWYWx1ZSA9IDA7XHJcbiAgICAgIGFyck9mRGlnaXRzLm1hcCgobnVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICBhZGRlZFZhbHVlID0gbnVtICsgYWRkZWRWYWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBhZGRlZFZhbHVlO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJhZGRBdXRoVmFsdWVcIik7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy90aGUgYmVsb3cgY29kZSB3aWxsIGhpdCB0aGUgZVJYIGFuZCByZXR1cm4gdGhlIHZhbHVlIHdpdGggYmFyY29kZVxyXG4gIHByZXNjcmliZU1lZCgpIHtcclxuICAgIHZhciBib2R5ID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5zaG93QXV0aG9yaXR5Qm94KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMsIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMsIHRoaXMuY29tbW9uU2VydmljZXMucnhBdXRob3JpdHksIHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5hcHByb3ZhbE5vKSkge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNTMubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNTMuY29kZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNTMuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNTMubWVzc2FnZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdFR5cGUudG9Mb3dlckNhc2UoKSA9PSBcImVcIikge1xyXG4gICAgICAgIHRoaXMuYWJvcnRCdG5GbGFnID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdFBCVE5Ecm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZU1lZExvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gdHJ1ZTtcclxuICAgICAgdmFyIHBhdGllbnREZXRhaWxzID0gdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscztcclxuICAgICAgdmFyIHBoeXNpY2lhbkRldGFpbHMgPSB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHM7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm11bGF0aW9uID0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uO1xyXG4gICAgICB2YXIgbWVkaWNhcmVDYXJkID0gJyc7XHJcbiAgICAgIGlmIChwYXRpZW50RGV0YWlscy5tZWRpY2FyZU51bWJlcikge1xyXG4gICAgICAgIHZhciBtZWRObzEgPSBwYXRpZW50RGV0YWlscy5tZWRpY2FyZU51bWJlci5yZXBsYWNlKC8gL2csICcnKTtcclxuICAgICAgICBtZWRObzEgPSBtZWRObzEucmVwbGFjZSgvXy9nLCAnJyk7XHJcbiAgICAgICAgbWVkTm8xID0gbWVkTm8xLnJlcGxhY2UoLy0vZywgJycpO1xyXG4gICAgICAgIG1lZGljYXJlQ2FyZCA9IG1lZE5vMTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgcGJzTWFudWZhY3R1cmVyQ29kZVNldCA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbikgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNNYW51ZmFjdHVyZXJDb2RlcykgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNNYW51ZmFjdHVyZXJDb2Rlcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNlbGVjdGVkRm9ybXVsYXRpb24ucGJzTWFudWZhY3R1cmVyQ29kZXNbMF0pID8gc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNNYW51ZmFjdHVyZXJDb2Rlc1swXSA6ICcnO1xyXG4gICAgICBsZXQgY2hlY2tBdXRob3JpdHlCb3ggPSB0aGlzLnNob3dBdXRob3JpdHlCb3goc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMsIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMsIHRoaXMuY29tbW9uU2VydmljZXMucnhBdXRob3JpdHksIHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSk7XHJcbiAgICAgIGJvZHkgPSB7XHJcbiAgICAgICAgaXNTaG93QXV0aG9yaXR5OiB0aGlzLmNvbW1vblNlcnZpY2VzLmlzU2hvd0F1dGhvcml0eSxcclxuICAgICAgICBwYnNMaXN0SW5zdHJ1Y3Rpb25zOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9ucykgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnMgOiBcIlwiLFxyXG4gICAgICAgIGlzQnJhbmROYW1lOiB0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lLFxyXG4gICAgICAgIGluY2x1ZGVCcmFuZEZsYWc6IHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUsXHJcbiAgICAgICAgcmVzdHJpY3RlZFBic1NlbGVjdGVkSW5kZXg6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgKyAxIDogJycsXHJcbiAgICAgICAgcnhJZDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4aWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5yeGlkIDogJycsXHJcbiAgICAgICAgbUFQYXRpZW50SWQ6IHRoaXMuY29tbW9uU2VydmljZXMudmVuZG9yUGF0aWVudElkLFxyXG4gICAgICAgIG1BUGhhcm1hY2lzdElkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnZlbmRvclBoeXNpY2lhbklkLFxyXG4gICAgICAgIG1BRmFjaWxpdHlJZDogdGhpcy5jb21tb25TZXJ2aWNlcy52ZW5kb3JGYWNpbGl0eUlkLFxyXG4gICAgICAgIHByaXZhY3lTdGF0ZW1lbnQ6IHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0VHlwZS50b0xvd2VyQ2FzZSgpID09ICdlJyA/IDAgOiAxLFxyXG4gICAgICAgIGhwaUk6IHBoeXNpY2lhbkRldGFpbHMuaHBpaU51bWJlcixcclxuICAgICAgICBwcmVzY3JpYmVyTnVtYmVyOiBwaHlzaWNpYW5EZXRhaWxzLnByZXNjcmliZXJOdW1iZXIsXHJcbiAgICAgICAgcHJlc2NyaWJlckFocHJhTnVtYmVyOiBwaHlzaWNpYW5EZXRhaWxzLnByZXNjcmliZXJBaHByYU51bWJlcixcclxuICAgICAgICBwcmVzY3JpYmVyR2l2ZW5OYW1lczogcGh5c2ljaWFuRGV0YWlscy5maXJzdE5hbWUsXHJcbiAgICAgICAgcHJlc2NyaWJlckZhbWlseU5hbWU6IHBoeXNpY2lhbkRldGFpbHMubGFzdE5hbWUsXHJcbiAgICAgICAgcHJlc2NyaWJlckhvbWVNb2JpbGU6IHBoeXNpY2lhbkRldGFpbHMubW9iaWxlUGhvbmUsXHJcbiAgICAgICAgcHJlc2NyaWJlckhvbWVFbWFpbDogcGh5c2ljaWFuRGV0YWlscy5lbWFpbCxcclxuICAgICAgICBvcmdIcGlPOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLmhwaW9OdW1iZXIpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMuaHBpb051bWJlciA6ICcnLFxyXG4gICAgICAgIG9yZ05hbWU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnTmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdOYW1lIDogJycsXHJcbiAgICAgICAgb3JnRW1haWw6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnRW1haWwpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnRW1haWwgOiAnJyxcclxuICAgICAgICBvcmdQb3N0YWxBZGRyZXNzTGluZTE6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc0xpbmUxKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NMaW5lMSA6ICcnLFxyXG4gICAgICAgIG9yZ1Bvc3RhbEFkZHJlc3NMaW5lMjogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzTGluZTIpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc0xpbmUyIDogJycsXHJcbiAgICAgICAgb3JnUG9zdGFsQWRkcmVzc1N1YnVyYjogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzU3VidXJiKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NTdWJ1cmIgOiAnJyxcclxuICAgICAgICBvcmdQb3N0YWxBZGRyZXNzUG9zdENvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc1Bvc3RDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NQb3N0Q29kZSA6ICcnLFxyXG4gICAgICAgIG9yZ1Bvc3RhbEFkZHJlc3NTdGF0ZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzU3RhdGUpID8gdGhpcy5nZXRTdGF0ZUNvZGVGcm9tU3RhdGVOYW1lKHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NTdGF0ZSkgOiAnJyxcclxuICAgICAgICBpaGk6IHBhdGllbnREZXRhaWxzLmloaU51bWJlcixcclxuICAgICAgICBtZWRpY2FyZU51bWJlcjogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShtZWRpY2FyZUNhcmQpID8gdGhpcy5lcnhNZWRpY2FyZUNhcmQobWVkaWNhcmVDYXJkKSA6ICcnLFxyXG4gICAgICAgIG1lZGljYXJlSXJuOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZGljYXJlQ2FyZCkgPyB0aGlzLmVyeE1lZGljYXJlSVJOKG1lZGljYXJlQ2FyZCkgOiAnJyxcclxuICAgICAgICBtZWRpY2FyZU51bWJlckV4cGlyeTogcGF0aWVudERldGFpbHMubWVkaWNhcmVFeHBpcnksXHJcbiAgICAgICAgZGF0ZU9mQmlydGg6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHBhdGllbnREZXRhaWxzLmRvYiwgJ3l5eXktTU0tZGQnKSxcclxuICAgICAgICBmYW1pbHlOYW1lOiBwYXRpZW50RGV0YWlscy5sYXN0TmFtZSxcclxuICAgICAgICBnaXZlbk5hbWVzOiBwYXRpZW50RGV0YWlscy5maXJzdE5hbWUsXHJcbiAgICAgICAgcGF0aWVudFVzZXJJZFN0cmluZzogdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5wYXRpZW50VXNlcklkLFxyXG4gICAgICAgIHVzZXJJZFN0cmluZzogdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCxcclxuICAgICAgICBnZW5kZXJDb2RlOiB0aGlzLmdldEdlbmRlckNvZGUocGF0aWVudERldGFpbHMuZ2VuZGVyKSxcclxuICAgICAgICBob21lTW9iaWxlOiBwYXRpZW50RGV0YWlscy5waG9uZSxcclxuICAgICAgICBob21lRW1haWw6IHBhdGllbnREZXRhaWxzLmVtYWlsLFxyXG4gICAgICAgIGFkZHJlc3NMaW5lMTogcGF0aWVudERldGFpbHMuYWRkcmVzczEsXHJcbiAgICAgICAgYWRkcmVzc0xpbmUyOiBwYXRpZW50RGV0YWlscy5hZGRyZXNzMixcclxuICAgICAgICBhZGRyZXNzU3VidXJiOiBwYXRpZW50RGV0YWlscy5jaXR5LFxyXG4gICAgICAgIGFkZHJlc3NQb3N0Q29kZTogcGF0aWVudERldGFpbHMucG9zdENvZGUsXHJcbiAgICAgICAgYWRkcmVzc1N0YXRlOiB0aGlzLmdldFN0YXRlQ29kZUZyb21TdGF0ZU5hbWUocGF0aWVudERldGFpbHMuc3RhdGUpLFxyXG4gICAgICAgIHByZXNjcmlwdGlvbldyaXR0ZW5EYXRlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0RGF0ZSkgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdERhdGUsICd5eXl5LU1NLWRkJykgOiBcIlwiLFxyXG4gICAgICAgIGZvcm1UZXh0OiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNlbGVjdGVkRm9ybXVsYXRpb24/LmRvc2FnZUZvcm0pID8gc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtIDogXCJcIixcclxuICAgICAgICBzdHJlbmd0aDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uPy5tb2xlY3VsZVN0cmVuZ3RoKSA/IHNlbGVjdGVkRm9ybXVsYXRpb24ubW9sZWN1bGVTdHJlbmd0aCA6IFwiIFwiLFxyXG4gICAgICAgIGRpcmVjdGlvbnM6IHRoaXMuZ2V0RGlyZWN0aW9ucygpLFxyXG4gICAgICAgIGJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvd2VkOiB0aGlzLmNvbW1vblNlcnZpY2VzLkJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvdyA9PSB0cnVlID8gMCA6IDEsXHJcbiAgICAgICAgbWF4aW11bU51bWJlck9mUmVwZWF0czogdGhpcy5jb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsLFxyXG4gICAgICAgIG1pbmltdW1JbnRlcnZhbEJldHdlZW5SZXBlYXRzOiB0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsICE9IHVuZGVmaW5lZCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsICE9IG51bGwgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCAhPSBcIlwiID8gcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCkgOiBcIi0xXCIsXHJcbiAgICAgICAgcGF0aWVudEN0Z0ZsYWc6IHRoaXMuY29tbW9uU2VydmljZXMuQ1RHQ29QYXltZW50ID09IHRydWUgPyAwIDogMSxcclxuICAgICAgICBwYnNJdGVtQ29kZUNvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlIDogXCJcIixcclxuICAgICAgICBwYnNJdGVtQ29kZVRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNDb2RlVGV4dCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzQ29kZVRleHQgOiBcIlwiLFxyXG4gICAgICAgIHBic0l0ZW1NYW51ZmFjdHVyZXI6IHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUgPyBwYnNNYW51ZmFjdHVyZXJDb2RlU2V0IDogJycsXHJcbiAgICAgICAgc3RhdGVBdXRob3JpdHlOdW1iZXI6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5TdGF0ZUF1dGhvcml0eU51bWJlcikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLlN0YXRlQXV0aG9yaXR5TnVtYmVyLnRyaW0oKSA6ICcnLFxyXG4gICAgICAgIHJlYXNvbkZvclRoZXJhcGV1dGljR29vZDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmlwdGlvblJlYXNvbikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmlwdGlvblJlYXNvbi50cmltKCkgOiAnJyxcclxuICAgICAgICB1bnVzdWFsUXR5RmxhZzogdGhpcy5zZXRVbnVzdWFsUXR5RmxhZyh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24sIHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwsIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMpLFxyXG4gICAgICAgIHF1YW50aXR5T2ZUaGVyYXBldXRpY0dvb2RRdWFudGl0eTogcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCksXHJcbiAgICAgICAgY29tcGxleEluc3RydWN0aW9uczogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlLnRyaW0oKSA6IFwiXCIsXHJcbiAgICAgICAgYW10TXBwQ29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LkFNVE1QUENvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLkFNVE1QUENvZGUgOiBcIlwiLFxyXG4gICAgICAgIGFtdE1wcE5hbWU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXQpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQubGVuZ3RoICE9IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLm1wcHMpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwc1swXS5tcHBOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwc1swXS5tcHBOYW1lIDogJycsXHJcbiAgICAgICAgYW10VHBwQ29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LkFNVFRQUENvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLkFNVFRQUENvZGUgOiBcIlwiLFxyXG4gICAgICAgIGFtdFRwcE5hbWU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXQpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQubGVuZ3RoICE9IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwcHMpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwc1swXS50cHBOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwc1swXS50cHBOYW1lIDogJycsXHJcbiAgICAgICAgYW10VHBDb2RlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uQU1UVFBDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5BTVRUUENvZGUgOiBcIlwiLFxyXG4gICAgICAgIGFtdFRwTmFtZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmFtdCkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdC5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBOYW1lIDogJycsXHJcbiAgICAgICAgYW10Q29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmFtdCkgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10LmFtdGNvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdC5hbXRjb2RlIDogJycsXHJcbiAgICAgICAgdGhlcmVwZXV0aWNHb29kSWRlbnRpZmljYXRpb25NaW1zQ29kZTogJycsXHJcbiAgICAgICAgdGhlcmVwZXV0aWNHb29kSWRlbnRpZmljYXRpb25Mb2NhbENvZGU6ICcnLFxyXG4gICAgICAgIC8vIHRoZXJlcGV1dGljR29vZElkZW50aWZpY2F0aW9uRWFuQ29kZTogXCJcIixcclxuICAgICAgICB0aGVyZXBldXRpY0dvb2RJZGVudGlmaWNhdGlvbkVhblRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlLnRvTG93ZXJDYXNlKCkgPT0gJ25vbiBwYnMnICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSA6ICcnLFxyXG4gICAgICAgIHByZXNjcmliZXJPY2N1cGF0aW9uQ29kZTogcGh5c2ljaWFuRGV0YWlscy5vY2N1cGF0aW9uQ29kZSxcclxuICAgICAgICBwcmVzY3JpYmVyT2NjdXBhdGlvblRleHQ6IHBoeXNpY2lhbkRldGFpbHMub2NjdXBhdGlvblRleHQsXHJcbiAgICAgICAgcHJlc2NyaWJlclBlcnNvblRpdGxlOiBwaHlzaWNpYW5EZXRhaWxzLnByZWZpeCxcclxuICAgICAgICBwcmVzY3JpYmVyUXVhbGlmaWNhdGlvbnM6IHBoeXNpY2lhbkRldGFpbHMuc3VmZml4LFxyXG4gICAgICAgIG9yZ1Bob25lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ01vYmlsZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdNb2JpbGUgOiAnJyxcclxuICAgICAgICBvcmdGYXg6ICcnLFxyXG4gICAgICAgIGxvY2FsU3lzdGVtSUQ6IHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMucGF0aWVudFVzZXJJZCxcclxuICAgICAgICBhZGRyZXNzU2VuZFRvQWRkVHlwZTogdGhpcy5jb21tb25TZXJ2aWNlcy5BZGRyZXNzU2VuZFRvQWRkVHlwZSxcclxuICAgICAgICBhZGRyZXNzRW1haWw6IHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4ZW1haWxJZCkgPyBwYXRpZW50RGV0YWlscy5lbWFpbCA6IHRoaXMuY29tbW9uU2VydmljZXMucnhlbWFpbElkLFxyXG4gICAgICAgIGFkZHJlc3NTbXM6IHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4bnVtYmVyKSA/IHBhdGllbnREZXRhaWxzLnBob25lIDogdGhpcy5jb21tb25TZXJ2aWNlcy5yeG51bWJlcixcclxuICAgICAgICBnZW5kZXJUZXh0OiB0aGlzLmdldEdlbmRlcihwYXRpZW50RGV0YWlscy5nZW5kZXIpLFxyXG4gICAgICAgIGFkZHJlc3NMaW5lMzogJycsXHJcbiAgICAgICAgcHJlc2NyaXB0aW9uV3JpdHRlblV0Y1RpbWU6ICcwMS0wMS0xOTcwIDA5OjA2OjA5JywgLy8gcHJlc2NyaXB0aW9uV3JpdHRlblV0Y1RpbWU6IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQoXCJNTS1ERC15eXl5IGhoOm1tOnNzXCIpLFxyXG4gICAgICAgIHByZXNjcmlwdGlvbldyaXR0ZW5VdGNPZmZzZXQ6IHRoaXMuZ2V0T2Zmc2V0KCksXHJcbiAgICAgICAgcHJlc2NyaXB0aW9uRXhwaXJlc1ZhbHVlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZW5kRGF0ZSkgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNvbW1vblNlcnZpY2VzLmVuZERhdGUsICdNTS9kZC95eXl5JykgOiBcIlwiLFxyXG4gICAgICAgIGFjdGl2ZUluZ3JlZGllbnQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSA6IFwiXCIsXHJcbiAgICAgICAgZm9ybUNvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0pID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0gOiBcIlwiLFxyXG4gICAgICAgIGZvcm11bGE6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmZvcm11bGEpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmZvcm11bGEgOiBcIlwiLFxyXG4gICAgICAgIGFkZGl0aW9uYWxDb21tZW50czogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmRvY3Rvck5vdGVzKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZG9jdG9yTm90ZXMudHJpbSgpIDogXCJcIixcclxuICAgICAgICBhc2xDb25zZW50OiAxLFxyXG4gICAgICAgIHByZXNjcmlwdGlvbk5vdGVEZXRhaWxOb3RlOiB0aGlzLmNvbW1vblNlcnZpY2VzLnB1cnBvc2VTZWFyY2hWYWx1ZS50cmltKCksXHJcbiAgICAgICAgZHZhTnVtYmVyOiBwYXRpZW50RGV0YWlscy5kdmFOdW1iZXIsXHJcbiAgICAgICAgZHZhVHlwZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmR2YUNhcmRUeXBlKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmR2YUNhcmRUeXBlLnRvTG93ZXJDYXNlKCkgIT0gJ25vbmUnID8gcGF0aWVudERldGFpbHMuZHZhQ2FyZFR5cGUuc2xpY2UoMCwgMSkudG9VcHBlckNhc2UoKSA6ICcnLFxyXG4gICAgICAgIHBic0FwcHJvdmFsTnVtYmVyOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObykgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8udHJpbSgpIDogJycsIC8vaW5mb3JtIHRvIHN0ZXBoZW5cclxuICAgICAgICByb3V0ZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlLnRyaW0oKSA6ICcnLFxyXG4gICAgICAgIC8vcHJvdmlkZXJOdW1iZXI6JycsXHJcbiAgICAgICAgcHJlc2NyaWJlclR5cGU6IHBoeXNpY2lhbkRldGFpbHMucHJlc2NyaWJlclR5cGUsXHJcbiAgICAgICAgbWVkaWNpbmVOYW1lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ucHJvZHVjdE5hbWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lIDogXCJcIixcclxuICAgICAgICBicmFuZE5hbWU6IHRoaXMuZ2V0QnJhbmROYW1lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiksXHJcbiAgICAgICAgZ2VuZXJpY05hbWU6IHRoaXMuaHRtbFRvVGV4dENvbnZlcnQoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LklzRXh0ZW1wKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gdHJ1ZSA/IHRoaXMuZ2V0RXh0ZW1wVFRQTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pIDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmdlbmVyaWNOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSA6IHRoaXMuZ2V0RXh0ZW1wTVBQTmFtZSgpKSxcclxuICAgICAgICAvL2l0ZW1HZW5lcmljSW50ZW50aW9uOiBnZXRJdGVtR2VuZXJpY0ludGVudGlvbih0aGlzLnN0YXRlLmxlbWksdGhpcy5zdGF0ZS5pc0JyYW5kTmFtZSx0aGlzLnN0YXRlLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSksXHJcbiAgICAgICAgaXRlbUdlbmVyaWNJbnRlbnRpb246IHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCAhPSB0cnVlID8gJ0InIDogJ0cnLFxyXG4gICAgICAgIHNjaGVkdWxlTnVtYmVyOiB0aGlzLnBheUxvYWRTdGF0ZVNjaGVkdWxlTnVtYmVyKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbikgIT0gXCJcIiA/IHRoaXMucGF5TG9hZFN0YXRlU2NoZWR1bGVOdW1iZXIodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSA6IHRoaXMuY29tbW9uU2VydmljZXMuZ2V0U2NoZWR1bGVOdW1iZXIodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSxcclxuICAgICAgICBkb2N0b3JOb3RlczogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmRvY3Rvck5vdGVzKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZG9jdG9yTm90ZXMudHJpbSgpIDogXCJcIixcclxuICAgICAgICByZWd1bGF0aW9uMjQ6IHRoaXMuY29tbW9uU2VydmljZXMucmVndWxhdGlvbjI0ID09IGZhbHNlID8gMSA6IDAsXHJcbiAgICAgICAgaXNFeHRlbXA6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiAhPSBudWxsICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCAhPSBudWxsID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wID09IHRydWUgPyAwIDogMSA6IDEsXHJcbiAgICAgICAgLy8gZXh0ZW1wb3JhbmVvdXNEZXNjcmlwdGlvbjogdGhpcy5zdGF0ZS5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGwgJiYgdGhpcy5zdGF0ZS5zZWxlY3RlZEZvcm11bGF0aW9uLkV4dGVtcG9yYW5lb3VzRGVzY3JpcHRpb24gIT0gJycgPyB0aGlzLnN0YXRlLnNlbGVjdGVkRm9ybXVsYXRpb24uRXh0ZW1wb3JhbmVvdXNEZXNjcmlwdGlvbiA6ICcnLFxyXG4gICAgICAgIGV4dGVtcG9yYW5lb3VzRGVzY3JpcHRpb246IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSB0cnVlID8gdGhpcy5nZXRFeHRlbXBUVFBOYW1lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbikgOiAnJyxcclxuICAgICAgICBhbm5vdGF0aW9uOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuYW5ub3RhdGlvbikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmFubm90YXRpb24udHJpbSgpIDogXCJcIixcclxuICAgICAgICB1blVzdWFsRG9zZUZsYWc6IHRoaXMuY29tbW9uU2VydmljZXMudW5Vc3VhbERvc2VGbGFnID09IGZhbHNlID8gMSA6IDAsXHJcbiAgICAgICAgdHJhZGVOYW1lOiB0aGlzLmh0bWxUb1RleHRDb252ZXJ0KHRoaXMuZ2V0VHJhZGVOYW1lKCkpLFxyXG4gICAgICAgIC8vcmVzdHJpY3Rpb25zOiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zICE9IG51bGwgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucyAhPSAnJyA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXN0cmljdGlvbnMgOiAnJyxcclxuICAgICAgICAvLyBwcmVzY3JpYmVyUGVyc29uVGl0bGU6IHBoeXNpY2lhbkRldGFpbHMucHJlZml4LFxyXG4gICAgICAgIG1heGltdW1JbnRlcnZhbEJldHdlZW5SZXBlYXRzOiAnJyxcclxuICAgICAgICBjb21wbGV4SWQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuY29tcGxleElkKSA/IHRoaXMuY29tbW9uU2VydmljZXMuY29tcGxleElkIDogMCxcclxuICAgICAgICB2aXNpdElkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnZpc2l0SWQsXHJcbiAgICAgICAgc2NyaXB0VHlwZTogdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlLFxyXG4gICAgICAgIGRvc2U6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUgOiBcIlwiLFxyXG4gICAgICAgIGZyZXF1ZW5jeTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSA6IFwiXCIsXHJcbiAgICAgICAgZm9vZDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZSA6IFwiXCIsXHJcbiAgICAgICAgcHJlc2NyaWJlQXM6IHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMsXHJcbiAgICAgICAgcHJuOiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4UFJOID09IGZhbHNlID8gMSA6IDAsXHJcbiAgICAgICAgc2NyaXB0RGF0ZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdERhdGUpID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHREYXRlLCAneXl5eS1NTS1kZCcpIDogXCJcIixcclxuICAgICAgICBzdGFydERhdGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zdGFydERhdGUpID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jb21tb25TZXJ2aWNlcy5zdGFydERhdGUsICdNTS9kZC95eXl5JykgOiBcIlwiLFxyXG4gICAgICAgIHB1cnBvc2U6IHRoaXMuY29tbW9uU2VydmljZXMucHVycG9zZVNlYXJjaFZhbHVlLnRyaW0oKSxcclxuICAgICAgICBwYnNOb3RlczogdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNOb3RlcyxcclxuICAgICAgICBpc0FjdGl2ZTogMCxcclxuICAgICAgICBwcm9kdWN0SWQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wcm9kdWN0SWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3RJZCA6IFwiXCIsXHJcbiAgICAgICAgYW10VGV4dDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmZvcm11bGEpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmZvcm11bGEgOiBcIlwiLFxyXG4gICAgICAgIHF1YW50aXR5T2ZUaGVyYXBldXRpY0dvb2REb3NlVW5pdENvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5kb3NhZ2VGb3JtKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtIDogXCJcIixcclxuICAgICAgICBxdWFudGl0eU9mVGhlcmFwZXV0aWNHb29kRG9zZVVuaXRUZXh0OiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZG9zYWdlRm9ybSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybSA6IFwiXCIsXHJcbiAgICAgICAgcHJlc2NyaWJlclJvbGVDb2RlOiAnJyxcclxuICAgICAgICBwcmVzY3JpYmVyUm9sZVRleHQ6ICcnLFxyXG4gICAgICAgIG9yZ0hpY0xvY2F0aW9uSWQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnSGljTG9jYXRpb25JZCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdIaWNMb2NhdGlvbklkIDogJycsXHJcbiAgICAgICAgb3JnUm9sZUNvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUm9sZUNvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUm9sZUNvZGUgOiAnJyxcclxuICAgICAgICBvcmdSb2xlVGV4dDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdSb2xlVGV4dCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdSb2xlVGV4dCA6ICcnLFxyXG4gICAgICAgIGF1dGhvcml0eUFwcHJvdmFsTnVtYmVyOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObykgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8udHJpbSgpIDogJycsXHJcbiAgICAgICAgYXV0aG9yaXR5QXBwcm92YWxOdW1iZXJGbGFnOiBwYXJzZUZsb2F0KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cykgPCBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsKSB8fCBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0cykgPCBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLnJlcGVhdHNWYWwpID8gMSA6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucykgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucy5sZW5ndGggPiAwICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9uc1t0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnNJZF0uc3RyZWFtbGluZWRDb2RlKSAmJiBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zW3RoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9uc0lkXS5zdHJlYW1saW5lZENvZGUpID09IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObykgPyAwIDogMSxcclxuICAgICAgICAvLyBwYnNBdXRob3JpdHlQcmVzY3JpcHRpb25OdW1iZXI6dGhpcy5zdGF0ZS5hcHByb3ZhbE5vID8gdGhpcy5zdGF0ZS5hcHByb3ZhbE5vIDogXCJcIixcclxuICAgICAgICAvLyBzdHJlYW1saW5lZEF1dGhvcml0eUFwcHJvdmFsTnVtYmVyOiB0aGlzLnN0YXRlLmFwcHJvdmFsTm9cclxuICAgICAgICAvLyAgID8gdGhpcy5zdGF0ZS5hcHByb3ZhbE5vXHJcbiAgICAgICAgLy8gICA6IFwiXCIsXHJcbiAgICAgICAgLy8gcGJzQXV0aG9yaXR5QXBwcm92YWxOdW1iZXI6IFwiXCIsXHJcbiAgICAgICAgLy9iYXJjb2RlXHJcbiAgICAgICAgLy9zY3JpcHROdW1iZXI6IFwiXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuc2hyaW5rU3VwZXJTY3JpcHRDb2RlKHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSksXHJcbiAgICAgICAgZW9wRGlzcGxheU5hbWU6IHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0VHlwZS50b0xvd2VyQ2FzZSgpID09IFwiZVwiID8gdGhpcy5zaHJpbmtTdXBlclNjcmlwdENvZGUodGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSkgOiB0aGlzLnNocmlua1N1cGVyU2NyaXB0Q29kZSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWUpLFxyXG4gICAgICAgIGl0ZW1TdHJlbmd0aFhtbDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/Lkl0ZW1TdHJlbmd0aFhtbCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXRlbVN0cmVuZ3RoWG1sIDogXCIgXCIsXHJcbiAgICAgICAgLy9hdXRob3JpdHlWYWx1ZVxyXG4gICAgICAgIHBic0R2YUF1dGhvcml0eU51bWJlcjogY2hlY2tBdXRob3JpdHlCb3ggPyB0aGlzLmNvbW1vblNlcnZpY2VzLmF1dGhvcml0eUZvcm1ObyA6IDAsXHJcbiAgICAgICAgcHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlOiB0aGlzLmh0bWxUb1RleHRDb252ZXJ0KHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSksLy90aGlzLnNocmlua1N1cGVyU2NyaXB0Q29kZSh0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZSksXHJcbiAgICAgICAgcHJlc2NyaWJlZEl0ZW1SZXNlcnZlZEZvdXI6IHRoaXMuc2hvd0F1dGhvcml0eUJveCh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zLCB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTLCB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4QXV0aG9yaXR5LCB0aGlzLmNvbW1vblNlcnZpY2VzLnVubGlzdGVkUkEpICYmIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMudG9Mb3dlckNhc2UoKSA9PT0gXCJwYnNcIiAmJiB0aGlzLmdldFN0YXRlQ29kZUZyb21TdGF0ZU5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5zdGF0ZSkudG9VcHBlckNhc2UoKSA9PSBcIk5TV1wiICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0VHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImVcIiA/IHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlZEl0ZW1SZXNlcnZlZEZvdXIgOiAnJyxcclxuICAgICAgICB1bmxpc3RlZEl0ZW1SZXBhdEF1dGhvcml0eTogdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgaXNQcmludEF2YWlsYWJsZTogdGhpcy5jb21tb25TZXJ2aWNlcy5pc1ByaW50QXZhaWxhYmxlLFxyXG4gICAgICAgIHByZXNjcmliZWRJdGVtUmVzZXJ2ZWRPbmU6IHRoaXMuY29tbW9uU2VydmljZXMuZ2V0U2NoZWR1bGVOdW1iZXIodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKS50b0xvd2VyQ2FzZSgpID09IFwiczhcIiA/IHRoaXMubnVtYmVyVG9Xb3JkKHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwpKSA6ICcnLFxyXG4gICAgICAgIG15U0xDb25zZW50OiB0aGlzLmNvbW1vblNlcnZpY2VzLm15U0xDb25zZW50LFxyXG4gICAgICAgIHNlbmRUb1BoYXJtYWN5OiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbmRUb1BoYXJtYWN5LFxyXG4gICAgICAgIHNlbmRUb1BoYXJtYWN5VmFsdWU6IHRoaXMuY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3lWYWx1ZSxcclxuICAgICAgICBlbWVyZ2VuY3lTdXBwbHk6IHRoaXMuY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5LFxyXG4gICAgICAgIG1vbGVjdWxlU3RyZW5ndGhHcmlkOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubW9sZWN1bGVTdHJlbmd0aEdyaWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1vbGVjdWxlU3RyZW5ndGhHcmlkIDogJycsXHJcbiAgICAgICAgZW50aXR5SWQ6IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy5lbnRpdHlJZCxcclxuICAgICAgICBpc1ByZXNjcmliZUFuZFByaW50OiB0aGlzLmlzZXByaXNjcmliZXByaW50LFxyXG4gICAgICAgIGFtdENvZGVTeXN0ZW06ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXRDb2RlU3lzdGVtKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRDb2RlU3lzdGVtIDogXCJcIixcclxuICAgICAgICBhbXRWZXJzaW9uOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uYW10VmVyc2lvbikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10VmVyc2lvbiA6IFwiXCIsXHJcbiAgICAgICAgcXVhbnRpdHlXaXRoVW5pdDogdGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVdpdGhVbml0RmxhZyAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubWF4UXR5VW5pdHMpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzIDogXCJcIixcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlbW92ZUVyclRvYXN0KCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLlBvc3QoYm9keSwgY29uZmlnLlBIWVNJQ0lBTi5QUkVTQ1JJQkUpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmlzUHJlc2NyaWJlID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycl9jb2RlID0gZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZTtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEuUHJlc2NyaWJlTXNnID0gZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZTtcclxuICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaWJlTWVkXCIsIGJvZHkpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVTdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5QcmVzY3JpYmVNc2cgPSByZXMucmVzcG9uc2VfbWVzc2FnZTtcclxuICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlZGF0YSA9IHJlcztcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRFbmREYXRlQWhlYWQoKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc1ByaW50QXZhaWxhYmxlICE9IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyZXMuaXNBb3J0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hYm9ydEJ0bkZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShyZXMuZXJyb3JfY29kZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcInByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oUmVhbFRpbWVQcmVzY3JpcHRpb25Nb25pdG9yaW5nQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIHJlcy5yZXNwb25zZV9tZXNzYWdlKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlcy5yeGlkID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9tZXNzYWdlICE9IG51bGwgJiYgcmVzLnJlc3BvbnNlX21lc3NhZ2UgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycl9jb2RlID0gcmVzLmVycm9yX2NvZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5QcmVzY3JpYmVNc2cgPSByZXMucmVzcG9uc2VfbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaWJlTWVkXCIsIGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycl9jb2RlID0gZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLlByZXNjcmliZU1zZyA9IGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiUnhDb21wb25lbnRcIiwgXCJwcmVzY3JpYmVNZWRcIiwgYm9keSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKHRoaXMucmVzcG9uc2VEYXRhLmlzQWJvcnQpIHx8ICF0aGlzLmFib3J0ZGlzYWJsZSlcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVzcG9uc2VNZXNzYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5pc1ByZXNjcmliZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLlByZXNjcmliZU1zZyA9IGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcjtcclxuICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVFcnJfY29kZSA9IGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGVcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zZURhdGEuaXNBYm9ydCB8fCAhdGhpcy5hYm9ydGRpc2FibGUpXHJcbiAgICAgICAgICB0aGlzLnNob3dSZXNwb25zZU1lc3NhZ2UoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaWJlTWVkXCIsIGJvZHkpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuYWJvcnRCdG5GbGFnID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcmVzY3JpYmVNZWRcIiwgYm9keSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBNcHJlc2NyaWJlTWVkKGlkOiBudW1iZXIpIHtcclxuICAgIHZhciBib2R5ID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoaWQgPT0gMSkge1xyXG4gICAgICAgIGlmICh0aGlzLmVQcmVzY3JpcHRpb25WYWxpZGF0aW9uKCkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlkID09IDIpIHtcclxuICAgICAgICBpZiAoKHRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmlwdGlvbiA9PT0gdHJ1ZSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzPy5zY3JpcHRUeXBlKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLnRvVXBwZXJDYXNlKCkgPT0gJ00nICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHM/LnN0YXR1cykgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLnRvTG93ZXJDYXNlKCkgIT0gJ2RyYWZ0JykgfHwgKHRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmlwdGlvbiA9PT0gdHJ1ZSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzPy5zY3JpcHRUeXBlKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLnRvVXBwZXJDYXNlKCkgPT0gJ0UnKSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgaWYgKGlkID09IDEpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdFR5cGUgPSBcIkVcIjtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gXCJTTVNcIjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdFR5cGUgPSBcIk1cIjtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zaG93QXV0aG9yaXR5Qm94KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMsIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMsIHRoaXMuY29tbW9uU2VydmljZXMucnhBdXRob3JpdHksIHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5hcHByb3ZhbE5vKSkge1xyXG4gICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNTMubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNTMuY29kZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNTMuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNTMubWVzc2FnZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0UEJUTkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSB0cnVlO1xyXG4gICAgICB2YXIgcGF0aWVudERldGFpbHMgPSB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzO1xyXG4gICAgICB2YXIgcGh5c2ljaWFuRGV0YWlscyA9IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscztcclxuICAgICAgdmFyIHNlbGVjdGVkRm9ybXVsYXRpb24gPSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb247XHJcbiAgICAgIHZhciBtZWRpY2FyZUNhcmQgPSAnJztcclxuICAgICAgaWYgKHBhdGllbnREZXRhaWxzLm1lZGljYXJlTnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIG1lZE5vMSA9IHBhdGllbnREZXRhaWxzLm1lZGljYXJlTnVtYmVyLnJlcGxhY2UoLyAvZywgJycpO1xyXG4gICAgICAgIG1lZE5vMSA9IG1lZE5vMS5yZXBsYWNlKC9fL2csICcnKTtcclxuICAgICAgICBtZWRObzEgPSBtZWRObzEucmVwbGFjZSgvLS9nLCAnJyk7XHJcbiAgICAgICAgbWVkaWNhcmVDYXJkID0gbWVkTm8xO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBwYnNNYW51ZmFjdHVyZXJDb2RlU2V0ID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNNYW51ZmFjdHVyZXJDb2RlcykgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNNYW51ZmFjdHVyZXJDb2Rlcy5sZW5ndGggIT0gMCA/IHNlbGVjdGVkRm9ybXVsYXRpb24ucGJzTWFudWZhY3R1cmVyQ29kZXNbMF0gOiAnJztcclxuXHJcbiAgICAgIGxldCBjaGVja0F1dGhvcml0eUJveCA9IHRoaXMuc2hvd0F1dGhvcml0eUJveChcclxuICAgICAgICBzZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucyxcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTLFxyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhBdXRob3JpdHksXHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBXHJcbiAgICAgICk7XHJcbiAgICAgIGJvZHkgPSB7XHJcbiAgICAgICAgcnhJZDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4aWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5yeGlkIDogJycsXHJcbiAgICAgICAgaXNTaG93QXV0aG9yaXR5OiB0aGlzLmNvbW1vblNlcnZpY2VzLmlzU2hvd0F1dGhvcml0eSxcclxuICAgICAgICBwYnNMaXN0SW5zdHJ1Y3Rpb25zOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9ucykgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnMgOiBcIlwiLFxyXG4gICAgICAgIGlzQnJhbmROYW1lOiB0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lLFxyXG4gICAgICAgIGluY2x1ZGVCcmFuZEZsYWc6IHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUsXHJcbiAgICAgICAgcmVzdHJpY3RlZFBic1NlbGVjdGVkSW5kZXg6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgKyAxIDogXCJcIixcclxuICAgICAgICBtQVBhdGllbnRJZDogdGhpcy5jb21tb25TZXJ2aWNlcy52ZW5kb3JQYXRpZW50SWQsXHJcbiAgICAgICAgbUFQaGFybWFjaXN0SWQ6IHRoaXMuY29tbW9uU2VydmljZXMudmVuZG9yUGh5c2ljaWFuSWQsXHJcbiAgICAgICAgbUFGYWNpbGl0eUlkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnZlbmRvckZhY2lsaXR5SWQsXHJcbiAgICAgICAgcHJpdmFjeVN0YXRlbWVudDogdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlLnRvTG93ZXJDYXNlKCkgPT0gJ2UnID8gMCA6IDEsXHJcbiAgICAgICAgaHBpSTogcGh5c2ljaWFuRGV0YWlscy5ocGlpTnVtYmVyLFxyXG4gICAgICAgIHByZXNjcmliZXJOdW1iZXI6IHBoeXNpY2lhbkRldGFpbHMucHJlc2NyaWJlck51bWJlcixcclxuICAgICAgICBwcmVzY3JpYmVyQWhwcmFOdW1iZXI6IHBoeXNpY2lhbkRldGFpbHMucHJlc2NyaWJlckFocHJhTnVtYmVyLFxyXG4gICAgICAgIHByZXNjcmliZXJHaXZlbk5hbWVzOiBwaHlzaWNpYW5EZXRhaWxzLmZpcnN0TmFtZSxcclxuICAgICAgICBwcmVzY3JpYmVyRmFtaWx5TmFtZTogcGh5c2ljaWFuRGV0YWlscy5sYXN0TmFtZSxcclxuICAgICAgICBwcmVzY3JpYmVySG9tZU1vYmlsZTogcGh5c2ljaWFuRGV0YWlscy5tb2JpbGVQaG9uZSxcclxuICAgICAgICBwcmVzY3JpYmVySG9tZUVtYWlsOiBwaHlzaWNpYW5EZXRhaWxzLmVtYWlsLFxyXG4gICAgICAgIG9yZ0hwaU86ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMuaHBpb051bWJlcikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5ocGlvTnVtYmVyIDogJycsXHJcbiAgICAgICAgb3JnTmFtZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ05hbWUgOiAnJyxcclxuICAgICAgICBvcmdFbWFpbDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdFbWFpbCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdFbWFpbCA6ICcnLFxyXG4gICAgICAgIG9yZ1Bvc3RhbEFkZHJlc3NMaW5lMTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzTGluZTEpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc0xpbmUxIDogJycsXHJcbiAgICAgICAgb3JnUG9zdGFsQWRkcmVzc0xpbmUyOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NMaW5lMikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzTGluZTIgOiAnJyxcclxuICAgICAgICBvcmdQb3N0YWxBZGRyZXNzU3VidXJiOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NTdWJ1cmIpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc1N1YnVyYiA6ICcnLFxyXG4gICAgICAgIG9yZ1Bvc3RhbEFkZHJlc3NQb3N0Q29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzUG9zdENvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc1Bvc3RDb2RlIDogJycsXHJcbiAgICAgICAgb3JnUG9zdGFsQWRkcmVzc1N0YXRlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NTdGF0ZSkgPyB0aGlzLmdldFN0YXRlQ29kZUZyb21TdGF0ZU5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc1N0YXRlKSA6ICcnLFxyXG4gICAgICAgIGloaTogcGF0aWVudERldGFpbHMuaWhpTnVtYmVyLFxyXG4gICAgICAgIG1lZGljYXJlTnVtYmVyOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZGljYXJlQ2FyZCkgPyB0aGlzLmVyeE1lZGljYXJlQ2FyZChtZWRpY2FyZUNhcmQpIDogJycsXHJcbiAgICAgICAgbWVkaWNhcmVJcm46ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkaWNhcmVDYXJkKSA/IHRoaXMuZXJ4TWVkaWNhcmVJUk4obWVkaWNhcmVDYXJkKSA6ICcnLFxyXG4gICAgICAgIG1lZGljYXJlTnVtYmVyRXhwaXJ5OiBwYXRpZW50RGV0YWlscy5tZWRpY2FyZUV4cGlyeSxcclxuICAgICAgICBkYXRlT2ZCaXJ0aDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocGF0aWVudERldGFpbHMuZG9iLCAneXl5eS1NTS1kZCcpLFxyXG4gICAgICAgIGZhbWlseU5hbWU6IHBhdGllbnREZXRhaWxzLmxhc3ROYW1lLFxyXG4gICAgICAgIGdpdmVuTmFtZXM6IHBhdGllbnREZXRhaWxzLmZpcnN0TmFtZSxcclxuICAgICAgICBwYXRpZW50VXNlcklkU3RyaW5nOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnBhdGllbnRVc2VySWQsXHJcbiAgICAgICAgdXNlcklkU3RyaW5nOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMudXNlcklkLFxyXG4gICAgICAgIGdlbmRlckNvZGU6IHRoaXMuZ2V0R2VuZGVyQ29kZShwYXRpZW50RGV0YWlscy5nZW5kZXIpLFxyXG4gICAgICAgIGhvbWVNb2JpbGU6IHBhdGllbnREZXRhaWxzLnBob25lLFxyXG4gICAgICAgIGhvbWVFbWFpbDogcGF0aWVudERldGFpbHMuZW1haWwsXHJcbiAgICAgICAgYWRkcmVzc0xpbmUxOiBwYXRpZW50RGV0YWlscy5hZGRyZXNzMSxcclxuICAgICAgICBhZGRyZXNzTGluZTI6IHBhdGllbnREZXRhaWxzLmFkZHJlc3MyLFxyXG4gICAgICAgIGFkZHJlc3NTdWJ1cmI6IHBhdGllbnREZXRhaWxzLmNpdHksXHJcbiAgICAgICAgYWRkcmVzc1Bvc3RDb2RlOiBwYXRpZW50RGV0YWlscy5wb3N0Q29kZSxcclxuICAgICAgICBhZGRyZXNzU3RhdGU6IHRoaXMuZ2V0U3RhdGVDb2RlRnJvbVN0YXRlTmFtZShwYXRpZW50RGV0YWlscy5zdGF0ZSksXHJcbiAgICAgICAgcHJlc2NyaXB0aW9uV3JpdHRlbkRhdGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHREYXRlKSA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0RGF0ZSwgJ3l5eXktTU0tZGQnKSA6IFwiXCIsXHJcbiAgICAgICAgZm9ybVRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZG9zYWdlRm9ybSkgPyBzZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0gOiBcIlwiLFxyXG4gICAgICAgIHN0cmVuZ3RoOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNlbGVjdGVkRm9ybXVsYXRpb24/Lm1vbGVjdWxlU3RyZW5ndGgpID8gc2VsZWN0ZWRGb3JtdWxhdGlvbi5tb2xlY3VsZVN0cmVuZ3RoIDogXCIgXCIsXHJcbiAgICAgICAgZGlyZWN0aW9uczogdGhpcy5nZXREaXJlY3Rpb25zKCksXHJcbiAgICAgICAgYnJhbmRTdWJzdGl0dXRlc05vdEFsbG93ZWQ6IHRoaXMuY29tbW9uU2VydmljZXMuQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93ID09IHRydWUgPyAwIDogMSxcclxuICAgICAgICBtYXhpbXVtTnVtYmVyT2ZSZXBlYXRzOiB0aGlzLmNvbW1vblNlcnZpY2VzLnJlcGVhdHNWYWwsXHJcbiAgICAgICAgbWluaW11bUludGVydmFsQmV0d2VlblJlcGVhdHM6IHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwgIT0gdW5kZWZpbmVkICYmIHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwgIT0gbnVsbCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsICE9IFwiXCIgPyBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsKSA6IFwiLTFcIixcclxuICAgICAgICBwYXRpZW50Q3RnRmxhZzogdGhpcy5jb21tb25TZXJ2aWNlcy5DVEdDb1BheW1lbnQgPT0gdHJ1ZSA/IDAgOiAxLFxyXG4gICAgICAgIHBic0l0ZW1Db2RlQ29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LnBic0NvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic0NvZGUgOiBcIlwiLFxyXG4gICAgICAgIHBic0l0ZW1Db2RlVGV4dDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LnBic0NvZGVUZXh0KSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlVGV4dCA6IFwiXCIsXHJcbiAgICAgICAgcGJzSXRlbU1hbnVmYWN0dXJlcjogdGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA/IHBic01hbnVmYWN0dXJlckNvZGVTZXQgOiAnJyxcclxuICAgICAgICBzdGF0ZUF1dGhvcml0eU51bWJlcjogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLlN0YXRlQXV0aG9yaXR5TnVtYmVyKSA/IHRoaXMuY29tbW9uU2VydmljZXMuU3RhdGVBdXRob3JpdHlOdW1iZXIudHJpbSgpIDogXCJcIixcclxuICAgICAgICByZWFzb25Gb3JUaGVyYXBldXRpY0dvb2Q6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpcHRpb25SZWFzb24pID8gdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpcHRpb25SZWFzb24udHJpbSgpIDogXCJcIixcclxuICAgICAgICB1bnVzdWFsUXR5RmxhZzogdGhpcy5zZXRVbnVzdWFsUXR5RmxhZyh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24sIHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwsIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMpLFxyXG4gICAgICAgIHF1YW50aXR5T2ZUaGVyYXBldXRpY0dvb2RRdWFudGl0eTogcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCksXHJcbiAgICAgICAgY29tcGxleEluc3RydWN0aW9uczogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlLnRyaW0oKSA6IFwiXCIsXHJcbiAgICAgICAgYW10TXBwQ29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LkFNVE1QUENvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLkFNVE1QUENvZGUgOiBcIlwiLFxyXG4gICAgICAgIGFtdE1wcE5hbWU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXQpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQubGVuZ3RoID4gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwcykgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS5tcHBzLmxlbmd0aCA+IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLm1wcHNbMF0ubXBwTmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLm1wcHNbMF0ubXBwTmFtZSA6ICcnLFxyXG4gICAgICAgIGFtdFRwcENvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5BTVRUUFBDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5BTVRUUFBDb2RlIDogXCJcIixcclxuICAgICAgICBhbXRUcHBOYW1lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uYW10KSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwcHMpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwcy5sZW5ndGggPiAwICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS50cHBzWzBdLnRwcE5hbWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS50cHBzWzBdLnRwcE5hbWUgOiAnJyxcclxuICAgICAgICBhbXRUcENvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5BTVRUUENvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLkFNVFRQQ29kZSA6IFwiXCIsXHJcbiAgICAgICAgYW10VHBOYW1lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uYW10KSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwTmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwTmFtZSA6ICcnLFxyXG4gICAgICAgIGFtdENvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdC5hbXRjb2RlIDogJycsXHJcbiAgICAgICAgdGhlcmVwZXV0aWNHb29kSWRlbnRpZmljYXRpb25NaW1zQ29kZTogJycsXHJcbiAgICAgICAgdGhlcmVwZXV0aWNHb29kSWRlbnRpZmljYXRpb25Mb2NhbENvZGU6ICcnLFxyXG4gICAgICAgIC8vIHRoZXJlcGV1dGljR29vZElkZW50aWZpY2F0aW9uRWFuQ29kZTogXCJcIixcclxuICAgICAgICB0aGVyZXBldXRpY0dvb2RJZGVudGlmaWNhdGlvbkVhblRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNUeXBlKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZS50b0xvd2VyQ2FzZSgpID09ICdub24gcGJzJyAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUgOiAnJyxcclxuICAgICAgICBwcmVzY3JpYmVyT2NjdXBhdGlvbkNvZGU6IHBoeXNpY2lhbkRldGFpbHMub2NjdXBhdGlvbkNvZGUsXHJcbiAgICAgICAgcHJlc2NyaWJlck9jY3VwYXRpb25UZXh0OiBwaHlzaWNpYW5EZXRhaWxzLm9jY3VwYXRpb25UZXh0LFxyXG4gICAgICAgIHByZXNjcmliZXJQZXJzb25UaXRsZTogcGh5c2ljaWFuRGV0YWlscy5wcmVmaXgsXHJcbiAgICAgICAgcHJlc2NyaWJlclF1YWxpZmljYXRpb25zOiBwaHlzaWNpYW5EZXRhaWxzLnN1ZmZpeCxcclxuICAgICAgICBvcmdQaG9uZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdNb2JpbGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnTW9iaWxlIDogJycsXHJcbiAgICAgICAgb3JnRmF4OiAnJyxcclxuICAgICAgICBsb2NhbFN5c3RlbUlEOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnBhdGllbnRVc2VySWQsXHJcbiAgICAgICAgYWRkcmVzc1NlbmRUb0FkZFR5cGU6IHRoaXMuY29tbW9uU2VydmljZXMuQWRkcmVzc1NlbmRUb0FkZFR5cGUsXHJcbiAgICAgICAgYWRkcmVzc0VtYWlsOiB0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeGVtYWlsSWQpID8gcGF0aWVudERldGFpbHMuZW1haWwgOiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4ZW1haWxJZCxcclxuICAgICAgICBhZGRyZXNzU21zOiB0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeG51bWJlcikgPyBwYXRpZW50RGV0YWlscy5waG9uZSA6IHRoaXMuY29tbW9uU2VydmljZXMucnhudW1iZXIsXHJcbiAgICAgICAgZ2VuZGVyVGV4dDogdGhpcy5nZXRHZW5kZXIocGF0aWVudERldGFpbHMuZ2VuZGVyKSxcclxuICAgICAgICBhZGRyZXNzTGluZTM6ICcnLFxyXG4gICAgICAgIHByZXNjcmlwdGlvbldyaXR0ZW5VdGNUaW1lOiAnMDEtMDEtMTk3MCAwOTowNjowOScsIC8vIHByZXNjcmlwdGlvbldyaXR0ZW5VdGNUaW1lOiBtb21lbnQobmV3IERhdGUoKSkuZm9ybWF0KFwiTU0tREQteXl5eSBoaDptbTpzc1wiKSxcclxuICAgICAgICBwcmVzY3JpcHRpb25Xcml0dGVuVXRjT2Zmc2V0OiB0aGlzLmdldE9mZnNldCgpLFxyXG4gICAgICAgIHByZXNjcmlwdGlvbkV4cGlyZXNWYWx1ZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmVuZERhdGUpID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jb21tb25TZXJ2aWNlcy5lbmREYXRlLCAnTU0vZGQveXl5eScpIDogXCJcIixcclxuICAgICAgICBhY3RpdmVJbmdyZWRpZW50OiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZ2VuZXJpY05hbWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lIDogXCJcIixcclxuICAgICAgICBmb3JtQ29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmRvc2FnZUZvcm0pID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0gOiBcIlwiLFxyXG4gICAgICAgIGZvcm11bGE6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5mb3JtdWxhKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5mb3JtdWxhIDogXCJcIixcclxuICAgICAgICBhZGRpdGlvbmFsQ29tbWVudHM6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5kb2N0b3JOb3RlcykgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmRvY3Rvck5vdGVzLnRyaW0oKSA6IFwiXCIsXHJcbiAgICAgICAgYXNsQ29uc2VudDogMSxcclxuICAgICAgICBwcmVzY3JpcHRpb25Ob3RlRGV0YWlsTm90ZTogdGhpcy5jb21tb25TZXJ2aWNlcy5wdXJwb3NlU2VhcmNoVmFsdWUsXHJcbiAgICAgICAgZHZhTnVtYmVyOiBwYXRpZW50RGV0YWlscy5kdmFOdW1iZXIsXHJcbiAgICAgICAgZHZhVHlwZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShwYXRpZW50RGV0YWlscy5kdmFDYXJkVHlwZSkgJiYgcGF0aWVudERldGFpbHMuZHZhQ2FyZFR5cGUudG9Mb3dlckNhc2UoKSAhPSAnbm9uZScgPyBwYXRpZW50RGV0YWlscy5kdmFDYXJkVHlwZS5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpIDogJycsXHJcbiAgICAgICAgcGJzQXBwcm92YWxOdW1iZXI6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5hcHByb3ZhbE5vKSA/IHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObyA6ICcnLFxyXG4gICAgICAgIHJvdXRlOiB0aGlzLmNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWUgIT0gJy0nID8gdGhpcy5jb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlIDogJycsXHJcbiAgICAgICAgLy9wcm92aWRlck51bWJlcjonJyxcclxuICAgICAgICBwcmVzY3JpYmVyVHlwZTogcGh5c2ljaWFuRGV0YWlscy5wcmVzY3JpYmVyVHlwZSxcclxuICAgICAgICBtZWRpY2luZU5hbWU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUgOiBcIlwiLFxyXG4gICAgICAgIGJyYW5kTmFtZTogdGhpcy5nZXRCcmFuZE5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSxcclxuICAgICAgICBnZW5lcmljTmFtZTogdGhpcy5odG1sVG9UZXh0Q29udmVydCghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uSXNFeHRlbXApICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSB0cnVlID8gdGhpcy5nZXRFeHRlbXBUVFBOYW1lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbikgOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZ2VuZXJpY05hbWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lIDogdGhpcy5nZXRFeHRlbXBNUFBOYW1lKCkpLFxyXG4gICAgICAgIC8vaXRlbUdlbmVyaWNJbnRlbnRpb246IGdldEl0ZW1HZW5lcmljSW50ZW50aW9uKHRoaXMuc3RhdGUubGVtaSx0aGlzLnN0YXRlLmlzQnJhbmROYW1lLHRoaXMuc3RhdGUuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlKSxcclxuICAgICAgICBpdGVtR2VuZXJpY0ludGVudGlvbjogdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID09IHRydWUgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wICE9IHRydWUgPyAnQicgOiAnRycsXHJcbiAgICAgICAgc2NoZWR1bGVOdW1iZXI6IHRoaXMucGF5TG9hZFN0YXRlU2NoZWR1bGVOdW1iZXIodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSAhPSBcIlwiID8gdGhpcy5wYXlMb2FkU3RhdGVTY2hlZHVsZU51bWJlcih0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pIDogdGhpcy5jb21tb25TZXJ2aWNlcy5nZXRTY2hlZHVsZU51bWJlcih0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pLFxyXG4gICAgICAgIGRvY3Rvck5vdGVzOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZG9jdG9yTm90ZXMpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5kb2N0b3JOb3Rlcy50cmltKCkgOiBcIlwiLFxyXG4gICAgICAgIHJlZ3VsYXRpb24yNDogdGhpcy5jb21tb25TZXJ2aWNlcy5yZWd1bGF0aW9uMjQgPT0gZmFsc2UgPyAxIDogMCxcclxuICAgICAgICBpc0V4dGVtcDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGwgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wICE9IG51bGwgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gdHJ1ZSA/IDAgOiAxIDogMSxcclxuICAgICAgICAvLyBleHRlbXBvcmFuZW91c0Rlc2NyaXB0aW9uOiB0aGlzLnN0YXRlLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCAmJiB0aGlzLnN0YXRlLnNlbGVjdGVkRm9ybXVsYXRpb24uRXh0ZW1wb3JhbmVvdXNEZXNjcmlwdGlvbiAhPSAnJyA/IHRoaXMuc3RhdGUuc2VsZWN0ZWRGb3JtdWxhdGlvbi5FeHRlbXBvcmFuZW91c0Rlc2NyaXB0aW9uIDogJycsXHJcbiAgICAgICAgZXh0ZW1wb3JhbmVvdXNEZXNjcmlwdGlvbjogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wID09IHRydWUgPyB0aGlzLmdldEV4dGVtcFRUUE5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSA6ICcnLFxyXG4gICAgICAgIGFubm90YXRpb246ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5hbm5vdGF0aW9uKSA/IHRoaXMuY29tbW9uU2VydmljZXMuYW5ub3RhdGlvbi50cmltKCkgOiBcIlwiLFxyXG4gICAgICAgIHVuVXN1YWxEb3NlRmxhZzogdGhpcy5jb21tb25TZXJ2aWNlcy51blVzdWFsRG9zZUZsYWcgPT0gZmFsc2UgPyAxIDogMCxcclxuICAgICAgICB0cmFkZU5hbWU6IHRoaXMuaHRtbFRvVGV4dENvbnZlcnQodGhpcy5nZXRUcmFkZU5hbWUoKSksXHJcbiAgICAgICAgLy9yZXN0cmljdGlvbnM6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMgIT0gbnVsbCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zICE9ICcnID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlc3RyaWN0aW9ucyA6ICcnLFxyXG4gICAgICAgIC8vIHByZXNjcmliZXJQZXJzb25UaXRsZTogcGh5c2ljaWFuRGV0YWlscy5wcmVmaXgsXHJcbiAgICAgICAgbWF4aW11bUludGVydmFsQmV0d2VlblJlcGVhdHM6ICcnLFxyXG4gICAgICAgIGNvbXBsZXhJZDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5jb21wbGV4SWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5jb21wbGV4SWQgOiAwLFxyXG4gICAgICAgIHZpc2l0SWQ6IHRoaXMuY29tbW9uU2VydmljZXMudmlzaXRJZCxcclxuICAgICAgICBzY3JpcHRUeXBlOiB0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdFR5cGUsXHJcbiAgICAgICAgZG9zZTogdGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUsXHJcbiAgICAgICAgZnJlcXVlbmN5OiB0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSxcclxuICAgICAgICBmb29kOiB0aGlzLmNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZSxcclxuICAgICAgICBwcmVzY3JpYmVBczogdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUyxcclxuICAgICAgICBwcm46IHRoaXMuY29tbW9uU2VydmljZXMucnhQUk4gPT0gZmFsc2UgPyAxIDogMCxcclxuICAgICAgICBzY3JpcHREYXRlOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdERhdGUsICd5eXl5LU1NLWRkJyksXHJcbiAgICAgICAgc3RhcnREYXRlOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNvbW1vblNlcnZpY2VzLnN0YXJ0RGF0ZSwgJ01NL2RkL3l5eXknKSxcclxuICAgICAgICBwdXJwb3NlOiB0aGlzLmNvbW1vblNlcnZpY2VzLnB1cnBvc2VTZWFyY2hWYWx1ZS50cmltKCksXHJcbiAgICAgICAgcGJzTm90ZXM6IHRoaXMuY29tbW9uU2VydmljZXMucGJzTm90ZXMsXHJcbiAgICAgICAgaXNBY3RpdmU6IDAsXHJcbiAgICAgICAgcHJvZHVjdElkOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ucHJvZHVjdElkKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0SWQgOiBcIlwiLFxyXG4gICAgICAgIGFtdFRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5mb3JtdWxhKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5mb3JtdWxhIDogXCJcIixcclxuICAgICAgICBxdWFudGl0eU9mVGhlcmFwZXV0aWNHb29kRG9zZVVuaXRDb2RlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZG9zYWdlRm9ybSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybSA6IFwiXCIsXHJcbiAgICAgICAgcXVhbnRpdHlPZlRoZXJhcGV1dGljR29vZERvc2VVbml0VGV4dDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmRvc2FnZUZvcm0pID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0gOiBcIlwiLFxyXG4gICAgICAgIHByZXNjcmliZXJSb2xlQ29kZTogJycsXHJcbiAgICAgICAgcHJlc2NyaWJlclJvbGVUZXh0OiAnJyxcclxuICAgICAgICBvcmdIaWNMb2NhdGlvbklkOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ0hpY0xvY2F0aW9uSWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnSGljTG9jYXRpb25JZCA6ICcnLFxyXG4gICAgICAgIG9yZ1JvbGVDb2RlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1JvbGVDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1JvbGVDb2RlIDogJycsXHJcbiAgICAgICAgb3JnUm9sZVRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUm9sZVRleHQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUm9sZVRleHQgOiAnJyxcclxuICAgICAgICBhdXRob3JpdHlBcHByb3ZhbE51bWJlcjogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8pID8gdGhpcy5jb21tb25TZXJ2aWNlcy5hcHByb3ZhbE5vLnRyaW0oKSA6ICcnLFxyXG4gICAgICAgIGF1dGhvcml0eUFwcHJvdmFsTnVtYmVyRmxhZzogcGFyc2VGbG9hdCh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubWF4UXR5VW5pdHMpIDwgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCkgfHwgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlcGVhdHMpIDwgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsKSA/IDEgOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMubGVuZ3RoID4gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9uc0lkKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnNbdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWRdLnN0cmVhbWxpbmVkQ29kZSkgJiYgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9uc1t0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnNJZF0uc3RyZWFtbGluZWRDb2RlKSA9PSBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8pID8gMCA6IDEsXHJcbiAgICAgICAgc3RhdHVzOiBcIkRyYWZ0XCIsXHJcbiAgICAgICAgLy8gcGJzQXV0aG9yaXR5UHJlc2NyaXB0aW9uTnVtYmVyOnRoaXMuc3RhdGUuYXBwcm92YWxObyA/IHRoaXMuc3RhdGUuYXBwcm92YWxObyA6IFwiXCIsXHJcbiAgICAgICAgLy8gc3RyZWFtbGluZWRBdXRob3JpdHlBcHByb3ZhbE51bWJlcjogdGhpcy5zdGF0ZS5hcHByb3ZhbE5vPyB0aGlzLnN0YXRlLmFwcHJvdmFsTm86IFwiXCIsXHJcbiAgICAgICAgLy8gcGJzQXV0aG9yaXR5QXBwcm92YWxOdW1iZXI6IFwiXCIsXHJcbiAgICAgICAgLy9iYXJjb2RlXHJcbiAgICAgICAgLy9zY3JpcHROdW1iZXI6IFwiXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuc2hyaW5rU3VwZXJTY3JpcHRDb2RlKHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSksXHJcbiAgICAgICAgZW9wRGlzcGxheU5hbWU6IHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0VHlwZS50b0xvd2VyQ2FzZSgpID09IFwiZVwiID8gdGhpcy5zaHJpbmtTdXBlclNjcmlwdENvZGUodGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSkgOiB0aGlzLnNocmlua1N1cGVyU2NyaXB0Q29kZSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWUpLFxyXG4gICAgICAgIGl0ZW1TdHJlbmd0aFhtbDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/Lkl0ZW1TdHJlbmd0aFhtbCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXRlbVN0cmVuZ3RoWG1sIDogXCIgXCIsXHJcbiAgICAgICAgLy9hdXRob3JpdHlWYWx1ZVxyXG4gICAgICAgIHBic0R2YUF1dGhvcml0eU51bWJlcjogY2hlY2tBdXRob3JpdHlCb3ggPyB0aGlzLmNvbW1vblNlcnZpY2VzLmF1dGhvcml0eUZvcm1ObyA6IDAsXHJcbiAgICAgICAgcHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlOiB0aGlzLmh0bWxUb1RleHRDb252ZXJ0KHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSksLy90aGlzLnNocmlua1N1cGVyU2NyaXB0Q29kZSh0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZSksXHJcbiAgICAgICAgdW5saXN0ZWRJdGVtUmVwYXRBdXRob3JpdHk6IHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgIHByZXNjcmliZWRJdGVtUmVzZXJ2ZWRPbmU6IHRoaXMuY29tbW9uU2VydmljZXMuZ2V0U2NoZWR1bGVOdW1iZXIodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKS50b0xvd2VyQ2FzZSgpID09IFwiczhcIiA/IHRoaXMubnVtYmVyVG9Xb3JkKHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwpKSA6ICcnLFxyXG4gICAgICAgIG15U0xDb25zZW50OiB0aGlzLmNvbW1vblNlcnZpY2VzLm15U0xDb25zZW50LFxyXG4gICAgICAgIHNlbmRUb1BoYXJtYWN5OiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbmRUb1BoYXJtYWN5LFxyXG4gICAgICAgIHNlbmRUb1BoYXJtYWN5VmFsdWU6IHRoaXMuY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3lWYWx1ZSxcclxuICAgICAgICBlbWVyZ2VuY3lTdXBwbHk6IHRoaXMuY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5LFxyXG4gICAgICAgIG1vbGVjdWxlU3RyZW5ndGhHcmlkOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubW9sZWN1bGVTdHJlbmd0aEdyaWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1vbGVjdWxlU3RyZW5ndGhHcmlkIDogJycsXHJcbiAgICAgICAgZW50aXR5SWQ6IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy5lbnRpdHlJZCxcclxuICAgICAgICBpc1ByZXNjcmliZUFuZFByaW50OiB0aGlzLmlzZXByaXNjcmliZXByaW50LFxyXG4gICAgICAgIGFtdENvZGVTeXN0ZW06ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXRDb2RlU3lzdGVtKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRDb2RlU3lzdGVtIDogXCJcIixcclxuICAgICAgICBhbXRWZXJzaW9uOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uYW10VmVyc2lvbikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10VmVyc2lvbiA6IFwiXCIsXHJcbiAgICAgICAgcXVhbnRpdHlXaXRoVW5pdDogdGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVdpdGhVbml0RmxhZyAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubWF4UXR5VW5pdHMpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzIDogXCJcIixcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZU1lZExvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVtb3ZlRXJyVG9hc3QoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuUG9zdChib2R5LCBjb25maWcuUEhZU0lDSUFOLk1fUFJFU0NSSUJFKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwiTXByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoXCJcIiwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHRydWUsIHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICB0aGlzLmNsb3NlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX21lc3NhZ2UgIT0gbnVsbCAmJiByZXMucmVzcG9uc2VfbWVzc2FnZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwiTXByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHJlcy5yZXNwb25zZV9tZXNzYWdlLCAnZXJyb3InLCByZXMuZXJyb3JfY29kZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcIk1wcmVzY3JpYmVNZWRcIiwgYm9keSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJNcHJlc2NyaWJlTWVkXCIsIGJvZHkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiTXByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvciwgXCJlcnJvclwiLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiTXByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZVRvb2xUaXAoZXZlbnQ6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnRvb2x0aXAsICdfX3JlYWN0X2NvbXBvbmVudF90b29sdGlwJyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwLCAndHlwZS1kYXJrJyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwLCAncGxhY2UtbGVmdCcpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcCwgJ3otaW5kZXgnLCAnOTk5OTk5OTknKTtcclxuICAgICAgY29uc3Qgdmlld1JlZiA9IHRoaXMudmlld1JlZkNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5teVRlbXBsYXRlKTtcclxuICAgICAgdmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIGNvbnN0IHRvb2x0aXBDb250ZW50ID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh2aWV3UmVmLnJvb3ROb2RlcykgJiYgdmlld1JlZi5yb290Tm9kZXMubGVuZ3RoICE9IDAgPyB2aWV3UmVmLnJvb3ROb2Rlc1swXSA6IFwiXCI7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy50b29sdGlwLCB0b29sdGlwQ29udGVudCk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLnRvb2x0aXApO1xyXG4gICAgICB2YXIgdG9vbDogYW55ID0gdGhpcy50b29sdGlwO1xyXG4gICAgICB2YXIgbGVmdCA9IGV2ZW50LnggLSAodG9vbC5jbGllbnRXaWR0aCArIDE1KTtcclxuICAgICAgdmFyIGhlaWdodHZhbHVlID0gZXZlbnQueSAtICh0b29sLmNsaWVudEhlaWdodCAvIDIpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcCwgJ2xlZnQnLCBsZWZ0ICsgJ3B4Jyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwLCAndG9wJywgaGVpZ2h0dmFsdWUgKyAncHgnKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiY3JlYXRlVG9vbFRpcFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3d0b29sdGlwKGxlbWlwcm9kdWN0OiBib29sZWFuLCBicmFuZHRvb2x0aXA6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGxlbWlwcm9kdWN0KSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudG9vbHRpcCwgJ2xlbWktdG9vbHRpcCcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwLCAndHlwZS1kYXJrJyk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3UmVmID0gdGhpcy52aWV3UmVmQ29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhicmFuZHRvb2x0aXApO1xyXG4gICAgICAgIHZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHZhciBteWRvbTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJicmFuZG5hbWV0b29sdGlwXCIpO1xyXG4gICAgICAgIHZhciByZWN0ID0gbXlkb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcENvbnRlbnQgPSB2aWV3UmVmLnJvb3ROb2Rlc1swXTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMudG9vbHRpcCwgdG9vbHRpcENvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLnRvb2x0aXApO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwLCAnbGVmdCcsIHJlY3QubGVmdCArICdweCcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwLCAndG9wJywgcmVjdC50b3AgLSBteWRvbS5vZmZzZXRIZWlnaHQgLSAxMCArICdweCcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwLCAnd2lkdGgnLCBteWRvbS5jbGllbnRXaWR0aCArICdweCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNob3d0b29sdGlwXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9lZGl0IHJ4XHJcbiAgc2V0RWRpdFZhbHVlcyhyeExpc3Q6IGFueSkge1xyXG4gICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSB0cnVlO1xyXG4gICAgICByeExpc3QucGJzSXRlbUNvZGVDb2RlID0gcnhMaXN0LnBic0l0ZW1Db2RlQ29kZSAhPSBudWxsID8gcnhMaXN0LnBic0l0ZW1Db2RlQ29kZSA6IFwiXCI7XHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgcmVxdWVzdF90eXBlOiBcInBhcmFtZXRlclwiLFxyXG4gICAgICAgIHByb2R1Y3RJZDogcnhMaXN0LnByb2R1Y3RJZCxcclxuICAgICAgICBwYnNDb2RlOiByeExpc3QucGJzSXRlbUNvZGVDb2RlLFxyXG4gICAgICAgIHJ4SWQ6IHRoaXMuY29tbW9uU2VydmljZXMucnhpZFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuR2V0KGNvbmZpZy5QSFlTSUNJQU4uR0VUX01FRF9ERVRfQllfSUQgKyBcIj9wcm9kdWN0SWQ9XCIgKyByeExpc3QucHJvZHVjdElkICsgXCImcGJzQ29kZT1cIiArICh0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCA/IHJ4TGlzdC5wYnNJdGVtQ29kZUNvZGUgOiBcIlwiKSArIFwiJnJ4SWQ9XCIgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4aWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTsgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCB0aGlzLnJlc3BvbnNlRGF0YS5wYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgdmFyIGVkaXRSZXN0cmljdEZsYWcgPSAodGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyeExpc3Q/LnN0YXR1cykgJiYgcnhMaXN0LnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9IFwiZHJhZnRcIikgfHwgIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0ID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoZWRpdFJlc3RyaWN0RmxhZykge1xyXG4gICAgICAgICAgICAgIHZhciBNZWQgPSBbXTtcclxuICAgICAgICAgICAgICBNZWQucHVzaChyZXMucmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBNZWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBNZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRSZXN0cmljdGVkTWVkaWNpbmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZvcm11bGF0aW9uKHJlcy5yZXNwb25zZSwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLm1lZGlTZWFyY2hWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0gMTtcclxuICAgICAgICAgICAgdGhpcy5yeE9ubHlQQlMgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCA9IHJ4TGlzdC5xdWFudGl0eU9mVGhlcmFwZXV0aWNHb29kUXVhbnRpdHk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCA9IHJ4TGlzdC5tYXhpbXVtTnVtYmVyT2ZSZXBlYXRzID8gcnhMaXN0Lm1heGltdW1OdW1iZXJPZlJlcGVhdHMgOiBcIjBcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUgPSByeExpc3QuZG9zZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5mcmVxU2VhcmNoVmFsdWUgPSByeExpc3QuZnJlcXVlbmN5ID8gcnhMaXN0LmZyZXF1ZW5jeSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZm9vZFNlYXJjaFZhbHVlID0gcnhMaXN0LmZvb2QgPyByeExpc3QuZm9vZCA6IFwiXCI7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJ4TGlzdC5jb21wbGV4SW5zdHJ1Y3Rpb25zKSAmJiB0aGlzLmluc3RydWN0aW9uRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmluc3RydWN0aW9uRGF0YS5maWx0ZXIoKCh4OiB7IHRleHQ6IGFueTsgfSkgPT4geC50ZXh0ID09IHJ4TGlzdC5jb21wbGV4SW5zdHJ1Y3Rpb25zKSk7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUgPSByeExpc3QuY29tcGxleEluc3RydWN0aW9ucztcclxuICAgICAgICAgICAgICAgIHRoaXMuSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZGF0YVswXS5kZXNjcmlwdGlvbikgPyBkYXRhWzBdLmRlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUgPSByeExpc3QuY29tcGxleEluc3RydWN0aW9ucztcclxuICAgICAgICAgICAgICAgIHRoaXMuSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LmNvbXBsZXhJbnN0cnVjdGlvbnMpID8gcnhMaXN0LmNvbXBsZXhJbnN0cnVjdGlvbnMgOiBcIlwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jb21wbGV4SWQgPSByeExpc3QuY29tcGxleElkID8gcnhMaXN0LmNvbXBsZXhJZCA6IDA7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucm91dGVTZWFyY2hWYWx1ZSA9IHJ4TGlzdC5yb3V0ZSA/IHJ4TGlzdC5yb3V0ZSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhQUk4gPSByeExpc3QucHJuID09IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSByeExpc3QucHJlc2NyaWJlQXM7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0RGF0ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LnNjcmlwdERhdGUpID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocnhMaXN0LnNjcmlwdERhdGUsICd5eXl5LU1NLWRkJykgOiBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnN0YXJ0RGF0ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LnN0YXJ0RGF0ZSkgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyeExpc3Quc3RhcnREYXRlLCAneXl5eS1NTS1kZCcpIDogXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lbmREYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocnhMaXN0LnByZXNjcmlwdGlvbkV4cGlyZXNWYWx1ZSwgJ3l5eXktTU0tZGQnKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCA9IHJ4TGlzdC5taW5pbXVtSW50ZXJ2YWxCZXR3ZWVuUmVwZWF0cyA9PSAtMSA/ICcnIDogcnhMaXN0Lm1pbmltdW1JbnRlcnZhbEJldHdlZW5SZXBlYXRzO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnB1cnBvc2VTZWFyY2hWYWx1ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LnB1cnBvc2UpID8gcnhMaXN0LnB1cnBvc2UgOiBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvdyA9IHJ4TGlzdC5icmFuZFN1YnN0aXR1dGVzTm90QWxsb3dlZCA9PSAwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmFubm90YXRpb24gPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJ4TGlzdC5hbm5vdGF0aW9uKSA/IHJ4TGlzdC5hbm5vdGF0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kb2N0b3JOb3RlcyA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LmRvY3Rvck5vdGVzKSA/IHJ4TGlzdC5kb2N0b3JOb3RlcyA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaXB0aW9uUmVhc29uID0gcnhMaXN0LnJlYXNvbkZvclRoZXJhcGV1dGljR29vZDtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNOb3RlcyA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LnBic05vdGVzKSA/IHJ4TGlzdC5wYnNOb3RlcyA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9uc0F1dCA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObyA9IHJ4TGlzdC5hdXRob3JpdHlBcHByb3ZhbE51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeSA9IHJ4TGlzdC5zZW5kVG9QaGFybWFjeTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVZhbHVlID0gcnhMaXN0LnNlbmRUb1BoYXJtYWN5VmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5ID0gcnhMaXN0LmVtZXJnZW5jeVN1cHBseTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5teVNMQ29uc2VudCA9IHJ4TGlzdC5teVNMQ29uc2VudDtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlZ3VsYXRpb24yNCA9IHJ4TGlzdC5yZWd1bGF0aW9uMjQgPT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlID0gcnhMaXN0LnNjcmlwdFR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuQ1RHQ29QYXltZW50ID0gcnhMaXN0LnBhdGllbnRDdGdGbGFnID09IDAgPyB0cnVlIDogZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMucmVzcG9uc2UuYWlwKSA/IHJlcy5yZXNwb25zZS5haXAubGVtaSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmxtYmMgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcy5yZXNwb25zZS5haXApID8gcmVzLnJlc3BvbnNlLmFpcC5sbWJjIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudW5Vc3VhbERvc2VGbGFnID0gcnhMaXN0LnVuVXN1YWxEb3NlRmxhZyA9PSAwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlN0YXRlQXV0aG9yaXR5TnVtYmVyID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyeExpc3Quc3RhdGVBdXRob3JpdHlOdW1iZXIpID8gcnhMaXN0LnN0YXRlQXV0aG9yaXR5TnVtYmVyIDogXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgPSByeExpc3QucmVzdHJpY3RlZFBic1NlbGVjdGVkSW5kZXggIT0gMCA/IHJ4TGlzdC5yZXN0cmljdGVkUGJzU2VsZWN0ZWRJbmRleCAtIDEgOiBudWxsOyB0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnMgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJ4TGlzdC5wYnNMaXN0SW5zdHJ1Y3Rpb25zKSA/IHJ4TGlzdC5wYnNMaXN0SW5zdHJ1Y3Rpb25zIDogJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUgPSByeExpc3QuaXNCcmFuZE5hbWUgPyByeExpc3QuaXNCcmFuZE5hbWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1Nob3dBdXRob3JpdHkgPSByeExpc3QuaXNTaG93QXV0aG9yaXR5ID8gcnhMaXN0LmlzU2hvd0F1dGhvcml0eSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmF1dGhvcml0eUZvcm1ObyA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LnBic0R2YUF1dGhvcml0eU51bWJlcikgJiYgcnhMaXN0LnBic0R2YUF1dGhvcml0eU51bWJlciAhPSAwID8gcnhMaXN0LnBic0R2YUF1dGhvcml0eU51bWJlciA6IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChyeExpc3QuaXNTaG93QXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIGlmIChyeExpc3Quc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT0gXCJwcmVzY3JpYmVkXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyeExpc3Quc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT0gXCJjZWFzZWRcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHJ4TGlzdC5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PSBcImNhbmNlbGxlZFwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlZGl0UmVzdHJpY3RGbGFnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJzZXRFZGl0VmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZXRFZGl0VmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vZW5hYmxlIGUtcHJlc2NyaXB0aW9uXHJcbiAgZVByZXNjcmlwdGlvblZhbGlkYXRpb24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHM/LnNjcmlwdFR5cGUpICYmIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnNjcmlwdFR5cGUudG9VcHBlckNhc2UoKSA9PSAnTScpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscz8uc2NyaXB0VHlwZSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZS50b1VwcGVyQ2FzZSgpID09ICdFJyAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzPy5zdGF0dXMpICYmIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09ICdkcmFmdCcgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLmVQcmVzY3JpcHRpb25BbGxvd2VkID09IDAgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy52ZW5kb3JQYXRpZW50Q29uc2VudCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5jcmVhdGVQYXRpZW50UmVzcG9uc2UuaXNfaHBpb192YWxpZCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmNyZWF0ZVBhdGllbnRSZXNwb25zZS5pc19ocGlpX3ZhbGlkICYmIHRoaXMuY29tbW9uU2VydmljZXMuY3JlYXRlUGF0aWVudFJlc3BvbnNlLmlzX2loaV92YWxpZCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMuZVByZXNjcmlwdGlvbkFsbG93ZWQgPT0gMCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnZlbmRvclBhdGllbnRDb25zZW50ID09IHRydWUpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImVQcmVzY3JpcHRpb25WYWxpZGF0aW9uXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0ZVNjaGVkdWxlTnVtYmVyKHNlbGVjdGVkRm9ybXVsYXRpb246IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCAmJiBzZWxlY3RlZEZvcm11bGF0aW9uLnN0YXRlU2NoZWR1bGVzICE9IG51bGwgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5zdGF0ZVNjaGVkdWxlcyAhPSBcIlwiKSB7XHJcbiAgICAgICAgdmFyIHN0YXRlU2NoZWR1bGVMaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZEZvcm11bGF0aW9uLnN0YXRlU2NoZWR1bGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoc3RhdGVTY2hlZHVsZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzdGF0ZVNjaGVkdWxlTGlzdC5jb25jYXQoc2VsZWN0ZWRGb3JtdWxhdGlvbi5zdGF0ZVNjaGVkdWxlc1tpXS5zY2hlZHVsZXMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RhdGVTY2hlZHVsZUxpc3QucHVzaChzZWxlY3RlZEZvcm11bGF0aW9uLnN0YXRlU2NoZWR1bGVzW2ldLnNjaGVkdWxlcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdGF0ZVNjaGVkdWxlTGlzdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0U3RhdGVTY2hlZHVsZU51bWJlclwiKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXV0aG9yaXR5Tm9WYWxpZGF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBrZXl2YWx1ZSA9IGV2ZW50LmNoYXJDb2RlO1xyXG4gICAgICByZXR1cm4gKChrZXl2YWx1ZSA+IDY0ICYmIGtleXZhbHVlIDwgOTEpIHx8IChrZXl2YWx1ZSA+IDk2ICYmIGtleXZhbHVlIDwgMTIzKSB8fCAoa2V5dmFsdWUgPj0gNDggJiYga2V5dmFsdWUgPD0gNTcpKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiYXV0aG9yaXR5Tm9WYWxpZGF0aW9uXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYXlMb2FkU3RhdGVTY2hlZHVsZU51bWJlcihTY2hlZHVsZU51bWJlcjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgc3RhdGVTY2hlZHVsZU51bWJlciA9IHRoaXMuZ2V0U3RhdGVTY2hlZHVsZU51bWJlcihTY2hlZHVsZU51bWJlcik7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHN0YXRlU2NoZWR1bGVOdW1iZXIpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RhdGVDb2RlRnJvbVN0YXRlTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnN0YXRlKS50b1VwcGVyQ2FzZSgpID09IFwiVEFTXCIgJiYgc3RhdGVTY2hlZHVsZU51bWJlci5sZW5ndGggIT0gMCAmJiBzdGF0ZVNjaGVkdWxlTnVtYmVyWzBdLmluZGV4T2YoXCJTNERcIikgIT0gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBcIlM0RFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRTdGF0ZUNvZGVGcm9tU3RhdGVOYW1lKHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuc3RhdGUpLnRvVXBwZXJDYXNlKCkgPT0gXCJOU1dcIiAmJiBzdGF0ZVNjaGVkdWxlTnVtYmVyLmxlbmd0aCAhPSAwICYmIHN0YXRlU2NoZWR1bGVOdW1iZXJbMF0uaW5kZXhPZihcIlM0QlwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiUzRCXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwYXlMb2FkU3RhdGVTY2hlZHVsZU51bWJlclwiKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmVzY3JpcGVBYm9ydCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBwYXlsb2FkID0ge1xyXG4gICAgICAgIHJlcXVlc3RfdHlwZTogXCJwYXJhbWV0ZXJcIixcclxuICAgICAgICB1c2VySWQ6IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy51c2VySWQsXHJcbiAgICAgICAgcGF0VXNlcklkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnBhdGllbnRVc2VySWRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFib3J0ZGlzYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuUEhZU0lDSUFOLlJYX1BSRVNDUklCRV9BQk9SVCArIFwiP3VzZXJJZD1cIiArIHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy51c2VySWQgKyBcIiZwYXRVc2VySWQ9XCIgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnBhdGllbnRVc2VySWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEuaXNBYm9ydCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEuYWJvcnRFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyX2NvZGUgPSBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydE1zZyA9IGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiUnhDb21wb25lbnRcIiwgXCJwcmVzY3JpcGVBYm9ydFwiLCB0aGlzLnJlc3BvbnNlRGF0YS5wYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0U3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEuYWJvcnRNc2cgPSByZXMucmVzcG9uc2VfbWVzc2FnZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlcy5yeGlkID0gXCJcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydEVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydEVycl9jb2RlID0gcmVzLmVycm9yX2NvZGU7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEuYWJvcnRNc2cgPSByZXMucmVzcG9uc2VfbWVzc2FnZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJwcmVzY3JpcGVBYm9ydFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VEYXRhLmlzUHJlc2NyaWJlKVxyXG4gICAgICAgICAgICB0aGlzLnNob3dSZXNwb25zZU1lc3NhZ2UoKTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuYWJvcnRCdG5GbGFnID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInByZXNjcmlwZUFib3J0XCIsIHBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmlzQWJvcnQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0TXNnID0gZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyX2NvZGUgPSBlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlXHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VEYXRhLmlzUHJlc2NyaWJlKVxyXG4gICAgICAgICAgdGhpcy5zaG93UmVzcG9uc2VNZXNzYWdlKCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcmVzY3JpcGVBYm9ydFwiLCBwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmFib3J0QnRuRmxhZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaXBlQWJvcnRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93UmVzcG9uc2VNZXNzYWdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydFN1Y2Nlc3MgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShcIlwiLCB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhLnJlc3BvbnNlX21lc3NhZ2UsIHRydWUsIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZWRhdGEuZGF0YSk7XHJcbiAgICAgICAgdGhpcy5jbG9zZSh0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhLmRhdGEpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmlzUHJpbnRBdmFpbGFibGUgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlZGF0YS5maWxlX3VybCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldCh0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhLmZpbGVfdXJsKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzcG9uc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcInNob3dSZXNwb25zZU1lc3NhZ2VcIiwgdGhpcy5yZXNwb25zZURhdGEucGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGF0b2IocmVzcG9uc2UuZmlsZSkuc3BsaXQoJycpLm1hcChjaGFyID0+IGNoYXIuY2hhckNvZGVBdCgwKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGJiYiA9IG5ldyBCbG9iKFtieXRlQXJyYXldLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vcGRmXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmJiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1dpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1dpbmRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdXaW5kb3cuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW50V2FybmluZ1BvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJzaG93UmVzcG9uc2VNZXNzYWdlXCIsIHRoaXMucmVzcG9uc2VEYXRhLnBheWxvYWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4ocmVzcG9uc2UucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgdGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlZGF0YS5lcnJvcl9jb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZSh0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhLmVycm9yX2NvZGUsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2hvd1Jlc3BvbnNlTWVzc2FnZVwiLCB0aGlzLnJlc3BvbnNlRGF0YS5wYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZU1lZExvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNob3dSZXNwb25zZU1lc3NhZ2VcIiwgdGhpcy5yZXNwb25zZURhdGEucGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydFN1Y2Nlc3MgJiYgdGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlRXJyb3IpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4odGhpcy5yZXNwb25zZURhdGEuYWJvcnRNc2csICdzdWNjZXNzJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoKHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZVN1Y2Nlc3MgJiYgIXRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyb3IgJiYgIXRoaXMucmVzcG9uc2VEYXRhLmFib3J0U3VjY2VzcykpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3Blbih0aGlzLnJlc3BvbnNlRGF0YS5QcmVzY3JpYmVNc2csICdzdWNjZXNzJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoKHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycm9yICYmICF0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydEVycm9yICYmICF0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydFN1Y2Nlc3MpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4odGhpcy5yZXNwb25zZURhdGEuUHJlc2NyaWJlTXNnLCAnZXJyb3InLCB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVFcnJfY29kZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlU3VjY2VzcyAmJiB0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydEVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4odGhpcy5yZXNwb25zZURhdGEuUHJlc2NyaWJlTXNnLCAnc3VjY2VzcycpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHRoaXMucmVzcG9uc2VEYXRhLmFib3J0TXNnLCBcImVycm9yXCIsIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyX2NvZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycm9yICYmIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyb3IpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3Blbih0aGlzLnJlc3BvbnNlRGF0YS5QcmVzY3JpYmVNc2csICdlcnJvcicsIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycl9jb2RlKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3Blbih0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydE1zZywgXCJlcnJvclwiLCB0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydEVycl9jb2RlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVTdWNjZXNzICYmIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0U3VjY2Vzcykge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHRoaXMucmVzcG9uc2VEYXRhLmFib3J0TXNnLCBcInN1Y2Nlc3NcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5hYm9ydEJ0bkZsYWcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc2VwcmlzY3JpYmVwcmludCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YS5pc0Fib3J0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmlzUHJlc2NyaWJlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0U3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVFcnJvciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVTdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5yZXNwb25zZURhdGEuUHJlc2NyaWJlTXNnID0gXCJcIjtcclxuICAgICAgdGhpcy5yZXNwb25zZURhdGEuYWJvcnRNc2cgPSBcIlwiO1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhID0gXCJcIjtcclxuICAgICAgdGhpcy5yZXNwb25zZURhdGEucGF5bG9hZCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2hvd1Jlc3BvbnNlTWVzc2FnZVwiLCB0aGlzLnJlc3BvbnNlRGF0YS5wYXlsb2FkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE1JTVNQcmltYXJ5U2VhcmNoKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgICAgaWYgKCF0aGlzLmlzU3RpbGxTZWFyY2hpbmcgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuc2VhcmNoQXBpU3RvcEZsYWcpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hNZWRpY2luZXNMZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiBcInBhcmFtZXRlclwiLFxyXG4gICAgICAgICAgICBwcm9kdWN0TmFtZTogdGhpcy5Qcm9kdWN0U2VhcmNoTmFtZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNTdGlsbFNlYXJjaGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5QcmltYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMubWVkaVNlYXJjaFZhbHVlLnRyaW0oKS5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuUHJpbWFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWFyY2hBcGlTdG9wRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QubGVuZ3RoIDwgOClcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuUHJpbWFyeVNlYXJjaFNwaW5uZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZXNQYWdlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLk1JTVNQcmltYXJ5YXBpID0gdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuR0VUX01FRFNfQllfU0VBUkNIICsgJz9wcm9kdWN0TmFtZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuUHJvZHVjdFNlYXJjaE5hbWUpICsgJyZwYWdlPScgKyB0aGlzLnNlYXJjaE1lZGljaW5lc1BhZ2VOdW1iZXIgKyAnJm5vT2ZSZWM9MTAnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGlsbFNlYXJjaGluZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlByaW1hcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5QcmltYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZXNMZW5ndGggPSAwOyB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwiTUlNU1ByaW1hcnlTZWFyY2hcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IHJlcy5yZXNwb25zZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByZXMucmVzcG9uc2UuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0LmZpbHRlcigoeDogYW55KSA9PiB4LnByb2REaXNwbGF5VmFsdWUgPT0gZGF0YS5wcm9kRGlzcGxheVZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2R1Y3QgPSB2YWwucHJvZEhpZGRlblZhbHVlLmluY2x1ZGVzKGRhdGEucHJvZEhpZGRlblZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnNlYXJjaEJhc2UudG9Mb3dlckNhc2UoKSA9PSAnYnJhbmRrZXknID8gJ0JLJyA6IGRhdGEuc2VhcmNoQmFzZS50b0xvd2VyQ2FzZSgpID09ICdwcm9kcGFja2tleScgPyAnUFBLJyA6IGRhdGEuc2VhcmNoQmFzZS50b0xvd2VyQ2FzZSgpID09ICd2aXJ0dWFsbmFtZScgPyAnVk4nIDogZGF0YS5zZWFyY2hCYXNlLnRvTG93ZXJDYXNlKCkgPT0gJ3Byb2R1Y3RrZXknID8gJ1BLJyA6IGRhdGEuc2VhcmNoQmFzZS50b0xvd2VyQ2FzZSgpID09ICdwcm9kdWN0a2V5YWN0aXZlaW5ncmVkaWVudCcgPyAnUEtBJyA6IGRhdGEuc2VhcmNoQmFzZS50b0xvd2VyQ2FzZSgpID09ICdmdWxscGknID8gJ0ZQSScgOiAnUE4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2R1Y3QgJiYgdHlwZSAhPSAnUEtBJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5wcm9kSGlkZGVuVmFsdWUgKz0gJywnICsgZGF0YS5wcm9kSGlkZGVuVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QubGVuZ3RoID4gNyB8fCByZXMucmVzcG9uc2UubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLlByaW1hcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2UubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QubGVuZ3RoIDwgOCAmJiB0aGlzLmlzU3RpbGxTZWFyY2hpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5NSU1TUHJpbWFyeVNlYXJjaCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlByaW1hcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJwcmltYXJ5TUlNU1NlYXJjaFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHJlcy5yZXNwb25zZV9tZXNzYWdlLCAnZXJyb3InLCByZXMuZXJyb3JfY29kZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuUHJpbWFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJpbWFyeU1JTVNTZWFyY2hcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLlByaW1hcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVzTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInByaW1hcnlNSU1TU2VhcmNoXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuUHJpbWFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZXNMZW5ndGggPSAwO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJpbWFyeU1JTVNTZWFyY2hcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBNSU1TU2Vjb25kYXJ5U2VhcmNoKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmlzU3RpbGxTZWFyY2hpbmcgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuc2VhcmNoQXBpU3RvcEZsYWcpIHtcclxuICAgICAgICB2YXIgcGF5bG9hZCA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCAhPSAwICYmIHRoaXMuUHJvZHVjdFR5cGUudG9Mb3dlckNhc2UoKSAhPSBcInBrXCIgJiYgdGhpcy5Qcm9kdWN0VHlwZS50b0xvd2VyQ2FzZSgpICE9IFwicG5cIiAmJiB0aGlzLlByb2R1Y3RUeXBlLnRvTG93ZXJDYXNlKCkgIT0gXCJ2blwiICYmIHRoaXMuUHJvZHVjdFR5cGUudG9Mb3dlckNhc2UoKSAhPSBcImZwaVwiKSB7XHJcbiAgICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGU6IFwicGFyYW1ldGVyXCIsXHJcbiAgICAgICAgICAgIHByb2R1Y3ROYW1lOiB0aGlzLnByb2RIaWRkZW5OYW1lLFxyXG4gICAgICAgICAgICB0eXBlOiB0aGlzLlByb2R1Y3RUeXBlLFxyXG4gICAgICAgICAgICBwcmVzY3JpYmVyVHlwZTogXCJNUFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdC5sZW5ndGggPD0gMylcclxuICAgICAgICAgICAgdGhpcy5vbmNsaWNrTWVkaWNpbmVMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLlNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hCeW5hbWVQYWdlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLk1JTVNTZWNvbmRhcnlhcGkgPSB0aGlzLmFwaVNlcnZpY2UuR2V0KGNvbmZpZy5HRVRfTUVEU19CWV9OQU1FICsgJz9wcm9kdWN0TmFtZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMucHJvZEhpZGRlbk5hbWUpICsgJyZ0eXBlPScgKyB0aGlzLlByb2R1Y3RUeXBlICsgJyZwcmVzY3JpYmVyVHlwZT1NUCZwYWdlPScgKyB0aGlzLnNlYXJjaEJ5bmFtZVBhZ2VOdW1iZXIgKyAnJm5vT2ZSZWM9MTAnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlYXJjaEFwaVN0b3BGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTsgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcIk1JTVNTZWNvbmRhcnlTZWFyY2hcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWFyY2hBcGlTdG9wRmxhZykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2UubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hCeW5hbWVQYWdlTnVtYmVyID0gMTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5vbmNsaWNrTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcmVzLnJlc3BvbnNlLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IHJlcy5yZXNwb25zZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGlmICh0aGlzLmlzTm9uUGJzRmxhZykge1xyXG4gICAgICAgICAgICAgICAgICAvLyAgIHRoaXMucnhPbmx5Tk9OUEJTRmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vICAgaWYgKHRoaXMucnhPbmx5UEJTID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucnhPbmx5UEJTRmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdCA9IHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsO1xyXG4gICAgICAgICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hlY2tib3hDaGFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdCkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdC5sZW5ndGggPD0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmNsaWNrTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzLnJlc3BvbnNlKSAmJiByZXMucmVzcG9uc2UubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLk1JTVNTZWNvbmRhcnlTZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlYXJjaEFwaVN0b3BGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcIk1JTVNTZWNvbmRhcnlTZWFyY2hcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hCeW5hbWVMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIk1JTVNTZWNvbmRhcnlTZWFyY2hcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWFyY2hBcGlTdG9wRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiTUlNU1NlY29uZGFyeVNlYXJjaFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLlNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiTUlNU1NlY29uZGFyeVNlYXJjaFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaW50V2FybmluZ1BvcCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBkYXRhID0gXCJQbGVhc2UgZW5hYmxlIHBvcHVwIG9uIHRoZSBicm93c2VyIHRvIHZpZXcvcHJpbnQgdGhlIHByZXNjcmlwdGlvbi5cIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKFJlYWxUaW1lUHJlc2NyaXB0aW9uTW9uaXRvcmluZ0NvbXBvbmVudCwgdGhpcy5jb250ZW50LCBkYXRhKS5zdWJzY3JpYmUoKHJlcykgPT4geyB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJpbnRXYXJuaW5nUG9wXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbnVtYmVyVG9Xb3JkKG46IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKG4gPCAwKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgdmFyIHNpbmdsZV9kaWdpdCA9IFsnJywgJ09uZScsICdUd28nLCAnVGhyZWUnLCAnRm91cicsICdGaXZlJywgJ1NpeCcsICdTZXZlbicsICdFaWdodCcsICdOaW5lJ11cclxuICAgICAgdmFyIGRvdWJsZV9kaWdpdCA9IFsnVGVuJywgJ0VsZXZlbicsICdUd2VsdmUnLCAnVGhpcnRlZW4nLCAnRm91cnRlZW4nLCAnRmlmdGVlbicsICdTaXh0ZWVuJywgJ1NldmVudGVlbicsICdFaWdodGVlbicsICdOaW5ldGVlbiddXHJcbiAgICAgIHZhciBiZWxvd19odW5kcmVkID0gWydUd2VudHknLCAnVGhpcnR5JywgJ0ZvcnR5JywgJ0ZpZnR5JywgJ1NpeHR5JywgJ1NldmVudHknLCAnRWlnaHR5JywgJ05pbmV0eSddXHJcbiAgICAgIGlmIChuID09PSAwKSByZXR1cm4gJ1plcm8nO1xyXG4gICAgICBmdW5jdGlvbiB0cmFuc2xhdGUobjogYW55KSB7XHJcbiAgICAgICAgdmFyIHdvcmQ6IGFueSA9ICcnXHJcbiAgICAgICAgaWYgKG4gPCAxMCkge1xyXG4gICAgICAgICAgd29yZCA9IHNpbmdsZV9kaWdpdFtuXSArICcgJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChuIDwgMjApIHtcclxuICAgICAgICAgIHdvcmQgPSBkb3VibGVfZGlnaXRbbiAtIDEwXSArICcgJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChuIDwgMTAwKSB7XHJcbiAgICAgICAgICB2YXIgcmVtID0gdHJhbnNsYXRlKG4gJSAxMClcclxuICAgICAgICAgIHdvcmQgPSBiZWxvd19odW5kcmVkWyhuIC0gbiAlIDEwKSAvIDEwIC0gMl0gKyAnICcgKyByZW1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobiA8IDEwMDApIHtcclxuICAgICAgICAgIHdvcmQgPSBzaW5nbGVfZGlnaXRbTWF0aC50cnVuYyhuIC8gMTAwKV0gKyAnIEh1bmRyZWQgJyArIHRyYW5zbGF0ZShuICUgMTAwKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChuIDwgMTAwMDAwMCkge1xyXG4gICAgICAgICAgd29yZCA9IHRyYW5zbGF0ZShuIC8gMTAwMCkudHJpbSgpICsgJyBUaG91c2FuZCAnICsgdHJhbnNsYXRlKG4gJSAxMDAwKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChuIDwgMTAwMDAwMDAwMCkge1xyXG4gICAgICAgICAgd29yZCA9IHRyYW5zbGF0ZShuIC8gMTAwMDAwMCkudHJpbSgpICsgJyBNaWxsaW9uICcgKyB0cmFuc2xhdGUobiAlIDEwMDAwMDApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd29yZCA9IHRyYW5zbGF0ZShuIC8gMTAwMDAwMDAwMCkudHJpbSgpICsgJyBCaWxsaW9uICcgKyB0cmFuc2xhdGUobiAlIDEwMDAwMDAwMDApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB3b3JkXHJcbiAgICAgIH1cclxuICAgICAgdmFyIHJlc3VsdCA9IHRyYW5zbGF0ZShuKVxyXG4gICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJudW1iZXJUb1dvcmRcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RXh0ZW1wTVBQTmFtZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbikgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQubGVuZ3RoICE9IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdPy5tcHBzKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLm1wcHMubGVuZ3RoID4gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwc1swXT8ubXBwTmFtZSkpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLm1wcHNbMF0ubXBwTmFtZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUudHJpbSgpIDogXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0RXh0ZW1wTVBQTmFtZVwiKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBodG1sVG9UZXh0Q29udmVydCh2YWx1ZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB0bXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgdG1wLmlubmVySFRNTCA9IHZhbHVlO1xyXG4gICAgICByZXR1cm4gdG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgJyc7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImh0bWxUb1RleHRDb252ZXJ0XCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGF1dGhvcml0eU5vQ2hhbmdlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5TdGF0ZUF1dGhvcml0eU51bWJlciA9IHZhbHVlLnJlcGxhY2UoL1teYS16QS1aIDAtOV0vZywgXCJcIikucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJhdXRob3JpdHlOb0NoYW5nZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFscGhhUmVzdHJpY3Rpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIGtleXZhbHVlID0gZXZlbnQuY2hhckNvZGU7XHJcbiAgICAgIHJldHVybiAoKGtleXZhbHVlID4gNjQgJiYga2V5dmFsdWUgPCA5MSkgfHwgKGtleXZhbHVlID4gOTYgJiYga2V5dmFsdWUgPCAxMjMpIHx8IChrZXl2YWx1ZSA+PSA0OCAmJiBrZXl2YWx1ZSA8PSA1NykgfHwga2V5dmFsdWUgPT0gMzIpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJhbHBoYVJlc3RyaWN0aW9uXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFkZFRvRmF2b3VyaXRlcygpIHtcclxuICAgIGNvbnN0IGlzSW5GYXZvdXJpdGVzID0gdGhpcy5pc0N1cnJlbnRNZWRpY2luZUluRmF2b3VyaXRlcygpO1xyXG4gICAgY29uc3QgaXNBZGRpbmcgPSAhaXNJbkZhdm91cml0ZXM7XHJcbiAgICB2YXIgcGh5c2ljaWFuRGV0YWlscyA9IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscztcclxuICAgIHZhciBib2R5ID0ge1xyXG4gICAgICB1c2VySWRTdHJpbmc6IHBoeXNpY2lhbkRldGFpbHMudXNlcklkLFxyXG4gICAgICBwcm9kdWN0SWQ6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0SWQsXHJcbiAgICAgIHByb2R1Y3ROYW1lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSk/dGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lOlwiXCIsXHJcbiAgICAgIHF1YW50aXR5OiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ucGJzVHlwZSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUgPT0gXCJub24gUEJTXCIgPyAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm51bWJlck9mUGFjayArIFwieFwiICsgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnVuaXRQZXJQYWNrKSA6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cyxcclxuICAgICAgcmVwZWF0czogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlcGVhdHMsXHJcbiAgICAgIHJlc3RyaWN0aW9uOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3Q/KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMgIT0gbnVsbCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zICE9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZSArIFwiIChcIiArIHRoaXMuZ2V0UmVzdHJpY3Rpb25zKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMpICsgXCIpIFwiXHJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUpOlwiXCIsXHJcbiAgICAgIGdlbmVyaWNOYW1lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSk/dGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lOlwiXCIsXHJcbiAgICAgICBwYnNDb2RlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ucGJzQ29kZSk/dGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNDb2RlOlwiXCIsXHJcbiAgICAgIGFjdGl2ZTogaXNBZGRpbmcsXHJcbiAgICAgIHJlc3RyaWN0ZWRNZWRpY2luZTogdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3RcclxuICAgIH1cclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuUG9zdChib2R5LCBjb25maWcuUEhZU0lDSUFOLkFERF9GQVZPVVJJVEVfTUVESUNJTkUpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcIkFkZEZhdm91cml0ZXNcIiwgYm9keSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0ID0gcmVzLmZhdm91cnRpZXNMaXN0IHx8IFtdO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMub3JpZ2luYWxGYXZvdXJpdGVNZWRpY2luZUxpc3QgPSByZXMuZmF2b3VydGllc0xpc3QgfHwgW107XHJcbiAgICAgICAgICAgICAgaWYgKCFpc0FkZGluZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25GYXZvdXJpdGVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGYXZvdXJpdGVNZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXMuZmF2b3VydGllc0xpc3QgfHwgcmVzLmZhdm91cnRpZXNMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihcclxuICAgICAgICAgICAgICAgICAgICBcIk5vIG1vcmUgZmF2b3VyaXRlcyByZW1haW5pbmcuIFlvdSBjYW4gYWRkIG1lZGljaW5lcyB0byBmYXZvdXJpdGVzIGZyb20gdGhlIHNlYXJjaCByZXN1bHRzLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaW5mb1wiXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwiQWRkRmF2b3VyaXRlc1wiLCBib2R5KTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJBZGRGYXZvdXJpdGVzXCIsIGJvZHkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHJlcy5yZXNwb25zZV9tZXNzYWdlLCAnZXJyb3InLCByZXMuZXJyb3JfY29kZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIkFkZEZhdm91cml0ZXNcIiwgYm9keSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJBZGRGYXZvdXJpdGVzXCIsIGJvZHkpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gICBnZXRGYXZvdXJ0aWVzTGlzdCgpIHtcclxuICAgIHZhciBwYXlsb2FkID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBwYXlsb2FkID0gdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZDtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuUEhZU0lDSUFOLkdFVF9GQVZPVVJJVEVfTUVESUNJTkVfTElTVCArIFwiP3VzZXJJZFN0cmluZz1cIiArIHBheWxvYWQrXCImcmVzdHJpY3RlZE1lZGljaW5lPVwiK3RoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0RmF2b3VydGllc0xpc3RcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0ID0gcmVzLmZhdm91cml0ZXNMaXN0O1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLm9yaWdpbmFsRmF2b3VyaXRlTWVkaWNpbmVMaXN0ID0gcmVzLmZhdm91cml0ZXNMaXN0O1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5mYXZvdXJpdGVNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5vcmlnaW5hbEZhdm91cml0ZU1lZGljaW5lTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcImdldEZhdm91cnRpZXNMaXN0XCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0RmF2b3VydGllc0xpc3RcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRGYXZvdXJ0aWVzTGlzdFwiLCBwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldEZhdm91cnRpZXNMaXN0XCIsIHBheWxvYWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0Zhdm91cnRpZXMoKSB7XHJcbiAgICB0aGlzLnNob3dGYXZvdXJpdGVNZWQgPSAhdGhpcy5zaG93RmF2b3VyaXRlTWVkO1xyXG4gICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLk1JTVNQcmltYXJ5YXBpKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuTUlNU1ByaW1hcnlhcGkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLk1JTVNTZWNvbmRhcnlhcGkpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5NSU1TU2Vjb25kYXJ5YXBpLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dGYXZvdXJpdGVNZWQpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uID0gbnVsbDtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCA9IFtdO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmZhdm91cml0ZU1lZGljaW5lTGlzdCA9IFtdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0ID0gdGhpcy5jb21tb25TZXJ2aWNlcy5vcmlnaW5hbEZhdm91cml0ZU1lZGljaW5lTGlzdDtcclxuICAgIH1cclxuICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25GYXZvdXJpdGVEYXRhKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBudWxsO1xyXG4gICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5QcmltYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWFyY2hNZWRpY2luZXNMZW5ndGggPSAwO1xyXG4gICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWFyY2hBcGlTdG9wRmxhZyA9IHRydWU7XHJcbiAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICBcclxuICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgIHRoaXMuY29tbW9uU2VydmljZXMubWVkaVNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMubWVkaVNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vRmF2b3VyaXRlTWVkaWNpbmUgTG9hZGluZ1xyXG4gIGZhdm91cml0ZU1lZGljaW5lTG9hZGluZyhyeExpc3Q6IGFueSkge1xyXG4gICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmKCF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCl7XHJcbiAgICAgIHJ4TGlzdC5wYnNDb2RlID0gcnhMaXN0LnBic0NvZGUgIT0gbnVsbCA/IHJ4TGlzdC5wYnNDb2RlIDogXCJcIjtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICByZXF1ZXN0X3R5cGU6IFwicGFyYW1ldGVyXCIsXHJcbiAgICAgICAgcHJvZHVjdElkOiByeExpc3QucHJvZHVjdElkLFxyXG4gICAgICAgIHBic0NvZGU6IHJ4TGlzdC5wYnNDb2RlLFxyXG4gICAgICAgIHJ4SWQ6IDBcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5mYXZNZWRpY2luZUxvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuUEhZU0lDSUFOLkdFVF9NRURfREVUX0JZX0lEICsgXCI/cHJvZHVjdElkPVwiICsgcnhMaXN0LnByb2R1Y3RJZCArIFwiJnBic0NvZGU9XCIgKyAodGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QgPyByeExpc3QucGJzQ29kZSA6IFwiXCIpICsgXCImcnhJZD1cIiArIDApLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmF2TWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCB0aGlzLnJlc3BvbnNlRGF0YS5wYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5mYXZNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgTWVkID0gW107XHJcbiAgICAgICAgICAgIE1lZC5wdXNoKHJlcy5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBNZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsID0gTWVkO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBNZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YU9uY2hhbmdlb2ZNZWRpY2luZShNZWQpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZvcm11bGF0aW9uKHJlcy5yZXNwb25zZSwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLm1lZGlTZWFyY2hWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMubWVkaVNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hlZE1lZGljaW5lTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSAxO1xyXG4gICAgICAgICAgICB0aGlzLnJ4T25seVBCUyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmF2TWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJzZXRFZGl0VmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuZmF2TWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmZhdk1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmF2TWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB2YXIgc2VsZWN0ZWRkYXRhID0gbnVsbDtcclxuICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyeExpc3Q/LnByb2R1Y3RJZCkpIHtcclxuICAgICAgICAgIHNlbGVjdGVkZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QuZmlsdGVyKCh4OiB7IHByb2R1Y3RJZDogYW55OyB9KSA9PiB4LnByb2R1Y3RJZCA9PSBOdW1iZXIocnhMaXN0LnByb2R1Y3RJZCkpO1xyXG4gICAgICAgICAgLy8gc2VsZWN0ZWRkYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiA9IHNlbGVjdGVkZGF0YVswXTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YU9uY2hhbmdlb2ZNZWRpY2luZShzZWxlY3RlZGRhdGFbMF0pO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzUnRwbU5leHQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5hdXRob3JpdHlGb3JtTm8gPSB0aGlzLmdldEFkZEF1dGhWYWx1ZSh0aGlzLnRlbXBBdXRob3JpdHlGb3JtTm8pO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEVuZERhdGVDYWxjdWxhdGVyKCk7XHJcbiAgICAgICAgICB0aGlzLmVuYWJsZVByZXNjcmliZUFzKHNlbGVjdGVkZGF0YVswXSk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkQnJhbmRGb3JtdWxhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmZhdk1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZXRFZGl0VmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgIGlzQ3VycmVudE1lZGljaW5lSW5GYXZvdXJpdGVzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gfHwgIXRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0IHx8IHRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2VzLmZhdm91cml0ZU1lZGljaW5lTGlzdC5zb21lKChmYXZNZWQ6IHsgcHJvZHVjdElkOiBhbnk7IHBic0NvZGU6IGFueTsgcHJvZHVjdE5hbWU6IGFueTsgfSkgPT4gXHJcbiAgICAgIGZhdk1lZC5wcm9kdWN0SWQudG9TdHJpbmcoKSA9PT0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3RJZC50b1N0cmluZygpICYmXHJcbiAgICAgICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZhdk1lZC5wYnNDb2RlKT9mYXZNZWQucGJzQ29kZTpcIlwiKSA9PT0gKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlOlwiXCIpICYmXHJcbiAgICAgIGZhdk1lZC5wcm9kdWN0TmFtZSA9PT0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlICNyeHdpZGdldHM+IDwvbmctdGVtcGxhdGU+XHJcbjxkaXYgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbWltc1wiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiUmVhY3RNb2RhbF9fT3ZlcmxheSBSZWFjdE1vZGFsX19PdmVybGF5LS1hZnRlci1vcGVuIFJlYWN0X19PdmVybGF5X09wZW5fUG9wdXAgbmV3X3J4X21pbXNfT3ZlcmxheV9PcGVuX1BvcHVwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiUmVhY3RNb2RhbF9fQ29udGVudCBSZWFjdE1vZGFsX19Db250ZW50LS1hZnRlci1vcGVuIFJlYWN0X19Db250ZW50IG5ld19yeF9taW1zX1JlYWN0X19Db250ZW50XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cCBuZXdfcnhfbWltc19SZWFjdE1vZGFsX3BvcHVwXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxhcHAtc3BsYXNoc2NyZWVuICpuZ0lmPVwiUG9wdXBTY3JlZW5Mb2FkZXJcIiBbaGVpZ2h0XT1cIidoZWlnaHQtcngtc3BpbidcIj4gPC9hcHAtc3BsYXNoc2NyZWVuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtY29udGVudFwiICpuZ0lmPVwiIVBvcHVwU2NyZWVuTG9hZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXdfcnhfcG9wdXBfaGVhZGVyX2JveFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0yLWNvbC10YWJsZXQgbWRsLWNlbGwtLTMtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoIHJ4X2lwYWRfaGVhZGVyX2JveF8xXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbW1vblNlcnZpY2VzLnJ4aWQgIT0gbnVsbCAmJiBjb21tb25TZXJ2aWNlcy5yeGlkICE9Jyc/J21kbC1jZWxsLS0yLWNvbCc6J21kbC1jZWxsLS0zLWNvbCdcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImFsaWduLXNlbGY6IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJuZXdfcnhfcG9wdXBfaGVhZGVyX2JveF90ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Bhc3NldHMuaG9sYS5oZWFsdGgvcngtd2lkZ2V0cy9yeC1ob2xhLWhlYWx0aC1sb2dvLTEucG5nXCIgYWx0PVwiaG9sYV9oZWFsdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogYXV0bztoZWlnaHQ6IDM3cHg7Ym9yZGVyLXJhZGl1czogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wYXNzZXRzLmhvbGEuaGVhbHRoL3J4LXdpZGdldHMvcngtaGVhZGVyLWxvZ28ucG5nXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7e2NvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpcHRpb24gPT09IHRydWUgPyAnRWRpdCBTY3JpcHQnIDogJ05ldyBTY3JpcHQnfX1cclxuICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS00LWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfZGVza3RvcF90aXRsZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYWxpZ24tc2VsZjogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9oZWFkZXJfYm94X3RleHRcIiBzdHlsZT1cImp1c3RpZnktY29udGVudDogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDYwMDtcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuZmlyc3ROYW1lICtcclxuICAgICAgICAgICAgICAgICAgICAgIFwiIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmxhc3ROYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj4vPHNwYW4gc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuZG9iLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJkZC1NTS15eXl5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCAgbWRsLWNlbGwtLTUtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X3BvcHVwX2hlYWRlcl9ib3hfY29sIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoIHJ4X2lwYWRfaGVhZGVyX2JveF8yIG5ld19tb2JpbGVfcnhfdG9wX2JvdHRvbV8wXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29tbW9uU2VydmljZXMucnhpZCAhPSBudWxsICYmIGNvbW1vblNlcnZpY2VzLnJ4aWQgIT0nJz8nbWRsLWNlbGwtLTYtY29sJzonbWRsLWNlbGwtLTUtY29sJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV3X3J4X3BvcHVwX2J0bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZShudWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1idXR0b24gbWRsLWpzLWJ1dHRvbiBtZGwtYnV0dG9uLS1yYWlzZWQgbWRsLWJ1dHRvbi0tY29sb3JlZCBiYWNrQnV0dG9uIG5ld19tb2JpbGVfcnhfYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgfHwgc2VsZWN0aW9uYnRuTG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBDbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7cG9zaXRpb246IHJlbGF0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tbW9uU2VydmljZXMucnhpZCAhPSBudWxsICYmIGNvbW1vblNlcnZpY2VzLnJ4aWQgIT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1idXR0b24gbWRsLWpzLWJ1dHRvbiBtZGwtYnV0dG9uLS1yYWlzZWQgbWRsLWJ1dHRvbi0tY29sb3JlZCBuZXh0QnV0dG9uIHNlbGVjdC1hY3Rpb24tYnRuIG5ld19tb2JpbGVfcnhfYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7d2lkdGg6IDE0MHB4O2Rpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IHJvdzthbGlnbi1pdGVtczogY2VudGVyO2p1c3RpZnktY29udGVudDogY2VudGVyO3BhZGRpbmc6IDEwcHggIWltcG9ydGFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgfHwgc2VsZWN0aW9uYnRuTG9hZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFjdGlvbkRyb3Bkb3dub3BlbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25idG5Mb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInJ4X2xvYWRlcl9idXR0b24gbS12NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyMHB4O2hlaWdodDogMjBweDttYXJnaW46IDBweCAhaW1wb3J0YW50O21hcmdpbi1yaWdodDogMHB4ICFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6IDBweCAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0aW9uYnRuTG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IEFjdGlvbiA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGRycC1pY29uXCI+ZXhwYW5kX21vcmU8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNzZWxlY3RBY3Rpb25Ecm9wZG93biBjbGFzcz1cIm5ld19yeF9QcmVzY3JpYmVfYnRuX2Ryb3Bkb3duX2xpc3RfYm94IHNlbGVjdC1hY3Rpb24tdWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieyBNX2xpc3RfYm94X3Nob3c6IHNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID09PSB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmV3X3J4X1ByZXNjcmliZV9idG5fZHJvcGRvd25fbGlzdF91bFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PSAnZHJhZnQnP2NhbmNlbERyYWZ0KCk6Y2FuY2VsUHJlc2NyaWJlTWVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNoZWNrU3RhdHVzQW5kU2NyaXB0dHlwZSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cyw0KT8nJzonZWRpdC1kaXNhYmxlLWRhdGEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWw8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwicHJpbnRQcmVzY3JpYmVNZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2hlY2tTdGF0dXNBbmRTY3JpcHR0eXBlKHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnNjcmlwdFR5cGUsdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLDEpPycnOidlZGl0LWRpc2FibGUtZGF0YSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW50PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cInJlaXNzdWVQcmVzY3JpYmVNZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2hlY2tTdGF0dXNBbmRTY3JpcHR0eXBlKHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnNjcmlwdFR5cGUsdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLDMpPycnOidlZGl0LWRpc2FibGUtZGF0YSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlLUlzc3VlPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImNlYXNlUHJlc2NyaWJlTWVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNoZWNrU3RhdHVzQW5kU2NyaXB0dHlwZSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cywyKT8nJzonZWRpdC1kaXNhYmxlLWRhdGEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZWFzZTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicGFnZSAhPSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWJ1dHRvbiBtZGwtanMtYnV0dG9uIG1kbC1idXR0b24tLXJhaXNlZCBtZGwtYnV0dG9uLS1jb2xvcmVkIGJhY2tCdXR0b24gbmV3X21vYmlsZV9yeF9idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiIFtkaXNhYmxlZF09XCJ0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZU1lZExvYWRlciB8fCBzZWxlY3Rpb25idG5Mb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIEJhY2tcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicGFnZSA9PSAxXCIgKGNsaWNrKT1cInBhZ2VOdW1iZXJPbmVUb05leHQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1idXR0b24gbWRsLWpzLWJ1dHRvbiBtZGwtYnV0dG9uLS1yYWlzZWQgbWRsLWJ1dHRvbi0tY29sb3JlZCBuZXh0QnV0dG9uIG5ld19tb2JpbGVfcnhfYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgfHwgc2VsZWN0aW9uYnRuTG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBOZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1kbC1idXR0b24gbWRsLWpzLWJ1dHRvbiBtZGwtYnV0dG9uLS1yYWlzZWQgbWRsLWJ1dHRvbi0tY29sb3JlZCBuZXdfbW9iaWxlX3J4X2J0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWJvcnRkaXNhYmxlPyduZXh0QnV0dG9uJzonYWJvcnRidXR0b24nXCIgKm5nSWY9XCJhYm9ydEJ0bkZsYWdcIiBbZGlzYWJsZWRdPVwiYWJvcnRkaXNhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmVzY3JpcGVBYm9ydCgpXCI+PHNwYW4gKm5nSWY9XCJhYm9ydGRpc2FibGVcIiBjbGFzcz1cInJ4X2xvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInJ4X2xvYWRlcl9idXR0b24gbS12NCByeF9idG5fc3BpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PHNwYW4gKm5nSWY9XCIhYWJvcnRkaXNhYmxlXCI+QWJvcnQ8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9ja1wiICpuZ0lmPVwicGFnZSA9PSAyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWJ1dHRvbiBtZGwtanMtYnV0dG9uIG1kbC1idXR0b24tLXJhaXNlZCBtZGwtYnV0dG9uLS1jb2xvcmVkIG5leHRCdXR0b24gbmV3X21vYmlsZV9yeF9idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTt3aWR0aDogMTM1cHg7ZGlzcGxheTogZmxleDtmbGV4LWRpcmVjdGlvbjogcm93O2FsaWduLWl0ZW1zOiBjZW50ZXI7anVzdGlmeS1jb250ZW50OiBjZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyIHx8IHNlbGVjdGlvbmJ0bkxvYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbmNsdWRlUnRwbU1vZGFsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnByZXNjcmliZU1lZExvYWRlciBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInJ4X2xvYWRlcl9idXR0b24gbS12NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyMHB4O2hlaWdodDogMjBweDttYXJnaW46IDBweCAhaW1wb3J0YW50O21hcmdpbi1yaWdodDogMHB4ICFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6IDBweCAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzY3JpYmUgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBkcnAtaWNvblwiPmV4cGFuZF9tb3JlPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAjUHJlc2NyaWJlRHJvcGRvd24gY2xhc3M9XCJuZXdfcnhfUHJlc2NyaWJlX2J0bl9kcm9wZG93bl9saXN0X2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0UEJUTkRyb3Bkb3duID09IHRydWVcIiBbY2xhc3NdPVwieyBNX2xpc3RfYm94X3Nob3c6IHNlbGVjdFBCVE5Ecm9wZG93biA9PT0gdHJ1ZSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5ld19yeF9QcmVzY3JpYmVfYnRuX2Ryb3Bkb3duX2xpc3RfdWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBlUHJlc2NyaXB0aW9uVmFsaWRhdGlvbigpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiTXByZXNjcmliZU1lZCgxKVwiPkUtUHJlc2NyaWJlIChEcmFmdCk8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGVQcmVzY3JpcHRpb25WYWxpZGF0aW9uKCl9XCIgKGNsaWNrKT1cIkVwcmVzY3JpcGVTZW5kKDEpXCIgKm5nSWY9XCIhdGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5lbWVyZ2VuY3lTdXBwbHlcIj5FLVByZXNjcmliZSBhbmQgU2VuZDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogZVByZXNjcmlwdGlvblZhbGlkYXRpb24oKX1cIiAoY2xpY2spPVwiRXByZXNjcmlwZVNlbmQoMilcIj5FLVByZXNjcmliZSBhbmQgUHJpbnQ8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IChjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID09PSB0cnVlICYmIGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLnRvVXBwZXJDYXNlKCk9PSAnTScmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMudG9Mb3dlckNhc2UoKSAhPSAnZHJhZnQnKXx8IChjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID09PSB0cnVlICYmIGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLnRvVXBwZXJDYXNlKCk9PSAnRScpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiTXByZXNjcmliZU1lZCgyKVwiPlByZXNjcmliZSAoRHJhZnQpPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiAoY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmlwdGlvbiA9PT0gdHJ1ZSAmJiBjb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZS50b1VwcGVyQ2FzZSgpID09ICdNJyYmIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9ICdkcmFmdCcpIHx8IChjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID09PSB0cnVlICYmIGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLnRvVXBwZXJDYXNlKCk9PSAnRScpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJlc2NyaXBlUHJpbnQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlc2NyaWJlIGFuZCBQcmludDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGggcnhfaXBhZF9oZWFkZXJfYm94XzMgbmV3X3J4X21vYmlsZV90aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYWxpZ24tc2VsZjogY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2hlYWRlcl9ib3hfdGV4dCBuZXdfbW9iaWxlX3J4X3BvcHVwX2hlYWRlcl90ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogNjAwXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmZpcnN0TmFtZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIiBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5sYXN0TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+LzxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmRvYixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiZGQtTU0teXl5eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFnZSA9PSAxXCIgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzFcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcHhcIiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3RcIj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tNS1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAjTWVkaWNpbmVEcm9wZG93biBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJtZWRpY2luZSBzZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBNZWRpY2luZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl8xX2lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyBtZWRpU2VhcmNoVmFsdWUgfX1cIiAoaW5wdXQpPVwic2VhcmNoSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIk1lZGljaW5lRHJvcGRvd25MaXN0KClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBtZC0yNCBuZXdfcnhfcG9wdXBfdGFiXzFfaW5wdXRfc2VhcmNoXCI+c2VhcmNoPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzFfaW5wdXRfc2VhcmNoXCI+PC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfMV9saXN0X2JveFwiIFtjbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgIE1fbGlzdF9ib3hfc2hvdzogc2VsZWN0ZWRNZWRpY2luZURyb3Bkb3duID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoTWVkaWNpbmVMb2FkZXJcIiBjbGFzcz1cImxvYWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzZWFyY2hNZWRpY2luZUxvYWRlclwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl8xX2xpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG1lZGljaW5lTGlzdCBvZiBzZWFyY2hlZE1lZGljaW5lTGlzdFwiIFtjbGFzc109XCJnZXRjdXJyZW50aWQobWVkaWNpbmVMaXN0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFByb2R1Y3RMaXN0QnlOYW1lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGljaW5lTGlzdFsncHJvZEhpZGRlblZhbHVlJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWNpbmVMaXN0Wydwcm9kRGlzcGxheVZhbHVlJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWNpbmVMaXN0WydzZWFyY2hCYXNlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCIgW2lubmVySFRNTF09XCJtZWRpY2luZUxpc3RbJ3Byb2REaXNwbGF5VmFsdWUnXVwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwic2VhcmNoZWRNZWRpY2luZUxpc3QubGVuZ3RoID09IDBcIj5ObyBEYXRhPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlByaW1hcnlTZWFyY2hTcGlubmVyXCIgY2xhc3M9XCJsb2FkZXIgbWwtbG9hZC00NVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0yLWNvbCBtZGwtY2VsbC0tMi1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aCBuZXdfbW9iaWxlX3J4X3RvcF9ib3R0b21fMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2Rpc2FibGVkUnhDb250ZW50Jzp0aGlzLmlzTm9uUGJzRmxhZ3x8KGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscyE9bnVsbCAmJiBjb21tb25TZXJ2aWNlcy5yeERldGFpbHMhPScnICYmIGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMhPW51bGwgJiYgY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cyE9JycgJiYgY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpIT0nZHJhZnQnKX1cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveCBuZXdfbW9iaWxlX3J4X3RvcF9ib3R0b21fMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInJ4T25seVBCU1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgpXCIgdmFsdWU9XCJQQlMvUlBCU1wiIFtkaXNhYmxlZF09XCJ0aGlzLmlzTm9uUGJzRmxhZ1wiIC8+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2xhYmVsXCIgc3R5bGU9XCJmb250LXdlaWdodDogNDAwOyBmb250LXNpemU6IDE2cHhcIj5QQlMvUlBCUzwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveCBuZXdfbW9iaWxlX3J4X3RvcF9ib3R0b21fMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94MlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInJ4UHJpdmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgpXCIgdmFsdWU9XCJQcml2YXRlXCIgLz48c3BhbiBjbGFzcz1cIm1kbC1jaGVja2JveF9fbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7IGZvbnQtc2l6ZTogMTZweFwiPlByaXZhdGU8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0yLWNvbCBtZGwtY2VsbC0tMi1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aCBuZXdfbW9iaWxlX3J4X3RvcF9ib3R0b21fMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2Rpc2FibGVkUnhDb250ZW50Jzp0aGlzLmlzTm9uUGJzRmxhZ3x8KGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscyE9bnVsbCAmJiBjb21tb25TZXJ2aWNlcy5yeERldGFpbHMhPScnICYmIGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMhPW51bGwgJiYgY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cyE9JycgJiYgY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpIT0nZHJhZnQnKX1cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveCBuZXdfbW9iaWxlX3J4X3RvcF9ib3R0b21fMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94MlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInJ4UHJpdmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgpXCIgdmFsdWU9XCJQcml2YXRlXCIgLz48c3BhbiBjbGFzcz1cIm1kbC1jaGVja2JveF9fbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7IGZvbnQtc2l6ZTogMTZweFwiPlByaXZhdGU8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTUtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTYtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoIG5ld19tb2JpbGVfcnhfdG9wX2JvdHRvbV8wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wYXNzZXRzLmhvbGEuaGVhbHRoL3J4LXdpZGdldHMvcngtbWltcy5wbmdcIiBhbHQ9XCJNSU1TIGxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogODBweDsgaGVpZ2h0OiBhdXRvXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDhweDtcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmF2b3VyaXRlcy10b2dnbGUtbGlua1wiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHNob3dGYXZvdXJ0aWVzKClcIj5cclxuICAgICAgICAgICAgICAgICAge3sgc2hvd0Zhdm91cml0ZU1lZCA/ICdIaWRlIGZhdm91cml0ZXMnIDogJ1Nob3cgZmF2b3VyaXRlcycgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcHhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tNy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJsZV9ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfdGl0bGVcIiBzdHlsZT1cInBhZGRpbmc6IDVweCAxMHB4OyBtYXJnaW46IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmxlIEZvcm11bGF0aW9uczpcclxuICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzaG93RmF2b3VyaXRlTWVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib25jbGlja01lZGljaW5lTG9hZGVyXCIgY2xhc3M9XCJsb2FkZXIgbS12NFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFvbmNsaWNrTWVkaWNpbmVMb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID09IG51bGwgfHxcclxuICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdC5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cIm5vRGF0YVByZXNjcmliZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPk5vIERhdGE8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV3X3J4X3BvcHVwX2JveF9jb250YWluZXJcIiAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbWVkIG9mIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4IGFzIGlcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZCBuZXdfcnhfcG9wdXBfYm94XCIgW2NsYXNzXT1cImdldENsYXNzRm9yTWVkKG1lZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEZvcm11bGF0aW9uKG1lZCwgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMTItY29sIG1kbC1jZWxsLS04LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2JveF9oZWFkZXJcIiBbaW5uZXJIVE1MXT1cIm1lZC5wcm9kdWN0TmFtZVwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfYm94X3RleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48Yj5RdWFudGl0eTo8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21lZC5wYnNUeXBlIT11bmRlZmluZWQgJiYgbWVkLnBic1R5cGUhPW51bGwgJiYgbWVkLnBic1R5cGUudG9Mb3dlckNhc2UoKSA9PSBcIm5vbiBwYnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtZWQubnVtYmVyT2ZQYWNrICsgXCJ4XCIgKyBtZWQudW5pdFBlclBhY2tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbWVkLm1heFF0eVVuaXRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj48c3Bhbj48Yj5ScHRzOjwvYj4ge3sgbWVkLnJlcGVhdHMgfX08L3NwYW4+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdFwiPjxiPlJlc3RyaWN0aW9uOjwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bWVkLlJlc3RyaWN0aW9ucyE9dW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWQuUmVzdHJpY3Rpb25zICE9IG51bGwgJiYgbWVkLlJlc3RyaWN0aW9ucyAhPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1lZC5wYnNUeXBlICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIChcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZXN0cmljdGlvbnMobWVkLlJlc3RyaWN0aW9ucykgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIpIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChtZWQucGJzVHlwZSE9dW5kZWZpbmVkJiZtZWQucGJzVHlwZSE9bnVsbD9tZWQucGJzVHlwZTpcIlwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0gPC9zcGFuPjxzcGFuPjxiPkdlbmVyaWMgTmFtZTogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJtZWQuZ2VuZXJpY05hbWVcIj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJTZWNvbmRhcnlTZWFyY2hTcGlubmVyXCIgY2xhc3M9XCJsb2FkZXIgbWwtbG9hZC00NVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dGYXZvdXJpdGVNZWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib25jbGlja01lZGljaW5lTG9hZGVyXCIgY2xhc3M9XCJsb2FkZXIgbS12NFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFvbmNsaWNrTWVkaWNpbmVMb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLmZhdm91cml0ZU1lZGljaW5lTGlzdCA9PSBudWxsIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0Lmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICAgICAgICAgIFwiIGNsYXNzPVwibm9EYXRhUHJlc2NyaWJlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Tm8gRmF2b3VyaXRlczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXdfcnhfcG9wdXBfYm94X2NvbnRhaW5lclwiICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtZWQgb2YgY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIGluZGV4IGFzIGlcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZCBuZXdfcnhfcG9wdXBfYm94XCIgW2NsYXNzXT1cImdldENsYXNzRm9yRmF2b3VyaXRlTWVkKG1lZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZhdm91cml0ZU1lZGljaW5lTG9hZGluZyhtZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9ib3hfaGVhZGVyXCIgW2lubmVySFRNTF09XCJtZWQucHJvZHVjdE5hbWVcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2JveF90ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PGI+UXVhbnRpdHk6PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ttZWQucXVhbnRpdHl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48c3Bhbj48Yj5ScHRzOjwvYj4ge3sgbWVkLnJlcGVhdHMgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0XCI+PGI+UmVzdHJpY3Rpb246PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ttZWQucmVzdHJpY3Rpb259fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48c3Bhbj48Yj5HZW5lcmljIE5hbWU6IDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibWVkLmdlbmVyaWNOYW1lXCI+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lclwiIGNsYXNzPVwibG9hZGVyIG1sLWxvYWQtNDVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZhdk1lZGljaW5lTG9hZGVyXCIgY2xhc3M9XCJsb2FkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZmF2TWVkaWNpbmVMb2FkZXJcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS01LWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWQgbmV3X3J4X3BvcHVwX3RhYl8xX2dyaWQgbmV3X3J4X3BvcHVwX3RhYl8xX2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTYtY29sIG1kbC1jZWxsLS04LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfdGl0bGVcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDVweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiAhPSBudWxsJiZjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lIT11bmRlZmluZWQgJiYgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSE9bnVsbD8gY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZTogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTYtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmljIE5hbWU6PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCYmY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSE9dW5kZWZpbmVkICYmIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZ2VuZXJpY05hbWUhPW51bGw/IGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZ2VuZXJpY05hbWUgOiAnJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIiAqbmdJZj1cImNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5kIE5hbWU6PHNwYW4gW2lubmVySFRNTF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGdldEJyYW5kTmFtZShjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTY2hlZHVsZTo8c3Bhbj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucG9pc29uQ2xhc3NpZmljYXRpb24gIT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgJiYgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbiE9bnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucG9pc29uQ2xhc3NpZmljYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAucG9pc29uQ2xhc3NlcyE9dW5kZWZpbmVkICYmIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucG9pc29uQ2xhc3NpZmljYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAucG9pc29uQ2xhc3NlcyE9bnVsbCAmJiBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBvaXNvbkNsYXNzaWZpY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnBvaXNvbkNsYXNzZXMubGVuZ3RoPjBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucG9pc29uQ2xhc3NpZmljYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAucG9pc29uQ2xhc3Nlc1swXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJObyBTY2hlZHVsZWQgSW5mb3JtYXRpb24gQXZhaWxhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFBCUyBMaXN0aW5nOjxzcGFuPnt7Y29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlIT11bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUhPW51bGw/IGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJycgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzQ29kZSE9dW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlIT1udWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIiAoXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzQ29kZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luOjBweCA7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgTWF4IFF1YW50aXR5ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldE1heFF1YW50aXR5KCl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBSZXBlYXRzID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24hPW51bGw/IGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDpcIlwifX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCAmJiBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByZWduYW5jeUNhdGVnb3J5IT11bmRlZmluZWQgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcmVnbmFuY3lDYXRlZ29yeSAhPSBudWxsICYmIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJlZ25hbmN5Q2F0ZWdvcnlcclxuICAgICAgICAgICAgICAgICAgICAuY2F0ZWdvcnlDb2RlIT11bmRlZmluZWQgJiYgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcmVnbmFuY3lDYXRlZ29yeVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRlZ29yeUNvZGUhPW51bGxcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFByZWduYW5jeSBDYXRlZ29yeTo8c3Bhbj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJlZ25hbmN5Q2F0ZWdvcnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuY2F0ZWdvcnlDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJlZ25hbmN5Q2F0ZWdvcnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZGl0aW9uYWxOb3RlICE9dW5kZWZpbmVkICYmIFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcmVnbmFuY3lDYXRlZ29yeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkaXRpb25hbE5vdGUgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcmVnbmFuY3lDYXRlZ29yeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkaXRpb25hbE5vdGUgIT0gJydcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsTm90ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5wcmVnbmFuY3lDYXRlZ29yeS5hZGRpdGlvbmFsTm90ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCIgW2lubmVySFRNTF09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0xMi1jb2xcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd1Jlc3RyaWN0aW9ucyA9PSB0cnVlICYmIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zIT11bmRlZmluZWQgJiYgXHJcbiAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMgIT0gJydcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5SZXN0cmljdGlvbnM6PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG9sIHN0eWxlPVwibWFyZ2luOiAwcHg7IHBhZGRpbmctbGVmdDogMTVweFwiICpuZ0lmPVwiY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMhPXVuZGVmaW5lZCAmJiBcclxuICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucyAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMgIT0gJydcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5ld19yeF9wb3BfYXV0X2ludFwiICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3RyaWN0aW9uIG9mIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgLlJlc3RyaWN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblByZXZpZXcgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblByZXZpZXcgIT0gJycgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UZXh0ICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UZXh0ICE9ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnhfcmVzdHJpY3Rpb25UZXh0XCIgKm5nSWY9XCJyZXN0cmljdGlvbi5yZXN0cmljdGlvblRleHQubGVuZ3RoIDwgNjBcIj48Yj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVHlwZSB9fTwvYj4gLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5odG1sVG9Gb3JtYXR0ZWRUZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblByZXZpZXdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyeF9yZXN0cmljdGlvblRleHRcIiAqbmdJZj1cInJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVGV4dC5sZW5ndGggPiA2MFwiPjxiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UeXBlIH19PC9iPiAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmh0bWxUb0Zvcm1hdHRlZFRleHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uUHJldmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zdWJzdHJpbmcoMCwgNjApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+PC9zcGFuPi4uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgY29sb3I6ICNmZjk5NzhcIiBpZD1cInNob3ctdG9vbHRpcC1pZFwiPlNob3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vcmU8L2E+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcGRlbW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicnhfdG9vbHRpcF9pbm5lcl9ib3hcIiBbaW5uZXJIVE1MXT1cInJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVGV4dFwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9vbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl8zX3NtYWxsX2JveFwiIFtzdHlsZS5kaXNwbGF5XT1cImlzQ3VycmVudE1lZGljaW5lSW5GYXZvdXJpdGVzKCkgPyAnaW5saW5lLWZsZXgnIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiaXNDdXJyZW50TWVkaWNpbmVJbkZhdm91cml0ZXMoKSA/ICdtYXgtY29udGVudCcgOiBudWxsXCIgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDogMTBweDtcIiBjbGFzcz1cIm5ld19yeF9wb3B1cF9oZWFkZXJfYm94X2NvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbFwiIChjbGljayk9XCJhZGRUb0Zhdm91cml0ZXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtYnV0dG9uIG1kbC1qcy1idXR0b24gbWRsLWJ1dHRvbi0tcmFpc2VkIG1kbC1idXR0b24tLWNvbG9yZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm5leHRCdXR0b25dPVwiIWlzQ3VycmVudE1lZGljaW5lSW5GYXZvdXJpdGVzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnJtZmF2YnV0dG9uXT1cImlzQ3VycmVudE1lZGljaW5lSW5GYXZvdXJpdGVzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpc0N1cnJlbnRNZWRpY2luZUluRmF2b3VyaXRlcygpOyBlbHNlIGFkZFRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgZnJvbSBmYXZvdXJpdGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhZGRUZXh0PisgQWRkIHRvIGZhdm91cml0ZXM8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luLXJpZ2h0OiAxMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlF1YW50aXR5OiA8L3NwYW4+PGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiIG5hbWU9XCJxdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlwiIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl9pbnB1dFwiIHN0ZXA9XCIxXCIgW21pbl09XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbFwiIChrZXlwcmVzcyk9XCJjaGVja01vYmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInF1YW50aXR5Q2hhbmdlKClcIiAocGFzdGUpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+UmVwZWF0czogPC9zcGFuPjxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZSB8fCBjb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3R9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJwdHNcIiBwbGFjZWhvbGRlcj1cIlwiIFttaW5dPVwiMFwiIChpbnB1dCk9XCJyZXBlYXRzQ2hhbmdlKClcIiBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfaW5wdXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLnJlcGVhdHNWYWxcIiAocGFzdGUpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwiY2hlY2tNb2JpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiB8fCBjb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3RcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcHhcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgZGlzYWJsZWRSeENvbnRlbnQ6IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmd9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICBEb3NlOlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveFwiIHN0eWxlPVwibWFyZ2luLXRvcDogMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj48aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNoZWNrYm94MVwiIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy51blVzdWFsRG9zZUZsYWdcIiAvPjxzcGFuIGNsYXNzPVwibWRsLWNoZWNrYm94X19sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7Zm9udC1zaXplOiAxNnB4O21hcmdpbi10b3A6IC03cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2Rpc2FibGVkLXN0eWxlJzogY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9PSB0cnVlIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiPlVudXN1YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvc2U8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJtZGwtdGV4dGZpZWxkX19pbnB1dCBuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIiBpZD1cInNlbGVjdGVkZG9zZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuZG9zZVNlYXJjaFZhbHVlXCIgKGNsaWNrKT1cImRvc2VEcm9wZG93bigpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAjRG9zZURyb3Bkb3duIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl9kcm9wZG93bl9saXN0X2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgTV9saXN0X2JveF9zaG93OiBzZWxlY3REb3NlRHJvcGRvd24gPT09IHRydWUgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfMV9saXN0IHJ4X2Ryb3Bkb3duXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwic2VsZWN0RG9zZVZhbHVlKG51bGwpXCIgY2xhc3M9XCJwLTEyXCI+IDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRvc2Ugb2YgZG9zZURhdGFcIiAoY2xpY2spPVwic2VsZWN0RG9zZVZhbHVlKGRvc2UpXCIgW2NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaGxpZ2h0OiBkb3NlWyd0ZXh0J10gPT0gY29tbW9uU2VydmljZXMuZG9zZVNlYXJjaFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZG9zZVtcInRleHRcIl0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPkZyZXF1ZW5jeTo8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cIm1kbC10ZXh0ZmllbGRfX2lucHV0IG5ld19yeF9wb3B1cF90YWJfaW5wdXRcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiIGlkPVwic2VsZWN0ZWRGcmVxdWVuY3k6XCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBGcmVxdWVuY3lcIiByZWFkT25seSBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZyZXFEcm9wZG93bigpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAjRnJlcURyb3Bkb3duIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl9kcm9wZG93bl9saXN0X2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgTV9saXN0X2JveF9zaG93OiBzZWxlY3RGcmVxRHJvcGRvd24gPT09IHRydWUgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfMV9saXN0IHJ4X2Ryb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cInNlbGVjdEZyZXF1ZW5jeVZhbHVlKG51bGwpXCIgY2xhc3M9XCJwLTEyXCI+IDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGZyZXF1ZW5jeSBvZiBmcmVxdWVuY3lEYXRhXCIgKGNsaWNrKT1cInNlbGVjdEZyZXF1ZW5jeVZhbHVlKGZyZXF1ZW5jeSlcIiBbY2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdobGlnaHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICBmcmVxdWVuY3lbJ3RleHQnXSA9PSBjb21tb25TZXJ2aWNlcy5mcmVxU2VhcmNoVmFsdWVcclxuICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmcmVxdWVuY3lbXCJ0ZXh0XCJdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5Gb29kOjwvcD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwibWRsLXRleHRmaWVsZF9faW5wdXQgbmV3X3J4X3BvcHVwX3RhYl9pbnB1dFwiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCIgaWQ9XCJzZWxlY3RlZEZyZXF1ZW5jeTpcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEZvb2RcIiByZWFkT25seSBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZvb2REcm9wZG93bigpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAjRm9vZERyb3Bkb3duIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl9kcm9wZG93bl9saXN0X2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgTV9saXN0X2JveF9zaG93OiBzZWxlY3RGb29kRHJvcGRvd24gPT09IHRydWUgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfMV9saXN0IHJ4X2Ryb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cInNlbGVjdEZvb2RWYWx1ZShudWxsKVwiIGNsYXNzPVwicC0xMlwiPiA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBmb29kIG9mIGZvb2REYXRhXCIgKGNsaWNrKT1cInNlbGVjdEZvb2RWYWx1ZShmb29kKVwiIFtjbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2hsaWdodDogZm9vZFsndGV4dCddID09IGNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvb2RbXCJ0ZXh0XCJdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5JbnN0cnVjdGlvbjo8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cIm1kbC10ZXh0ZmllbGRfX2lucHV0IG5ld19yeF9wb3B1cF90YWJfaW5wdXRcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiIGlkPVwiSW5zdHJ1Y3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEluc3RydWN0aW9uXCIgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5zdHJ1Y3Rpb25Ecm9wZG93bigpXCIgKGNoYW5nZSk9XCJpbnN0cnVjdGlvbk9uQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJhbHBoYVJlc3RyaWN0aW9uKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICNJbnN0cnVjdGlvbkRyb3Bkb3duIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl9kcm9wZG93bl9saXN0X2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIntNX2xpc3RfYm94X3Nob3c6IHNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPT09IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl8xX2xpc3QgcnhfZHJvcGRvd25cIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdEluc3RydWN0aW9uRHJvcGRvd25MaXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiQ2hhbmdlSW5zdHJ1Y3Rpb24obnVsbClcIiBjbGFzcz1cInAtMTJcIj4gPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uaWQgPT0gY29tbW9uU2VydmljZXMuY29tcGxleElkICYmIGl0ZW0udGV4dCA9PSBjb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlID8gJ2hlaWdobGlnaHQnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGluc3RydWN0aW9uRGF0YTsgaW5kZXggYXMgaVwiIChjbGljayk9XCJDaGFuZ2VJbnN0cnVjdGlvbihpdGVtKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGV4dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS51c2VyaWQgIT09IDBcIiBjbGFzcz1cInNwYW5faWNvblwiIHN0eWxlPVwiZmxvYXQ6IHJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgc3R5bGU9XCJwYWRkaW5nOiA1cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdEluc3RydWN0aW9uKGl0ZW0uaWQsIGl0ZW0pXCI+Y3JlYXRlPC9pPjxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxMHB4OyBwYWRkaW5nOiA1cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlSW5zdHJ1Y3Rpb24oaXRlbS5pZClcIj5jbGVhcjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIlJYX0FERF9kcm9wZG93bl9idG5cIiAoY2xpY2spPVwiYWRkTmV3SW5zdHJ1Y3Rpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgQWRkIENvbXBsZXggSW5zdHJ1Y3Rpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duTGlzdCA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29tcGxleF9pbnN0cnVjdGlvbl9ib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4OyBtYXJnaW46IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXggSW5zdHJ1Y3Rpb246XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnN0cnVjdGlvbl9maWVsZF9jbHIgbWRsLXRleHRmaWVsZF9faW5wdXQgbmV3X3J4X3BvcHVwX3RhYl9pbnB1dCBcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIkluc3RydWN0aW9uXCIgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvbnRpbHRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIENvbXBsZXggSW5zdHJ1Y3Rpb25cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCIgc3R5bGU9XCJmb250LXNpemU6IDEycHg7IG1hcmdpbjogMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGxleCBJbnN0cnVjdGlvbiBEZXNjcmlwdGlvbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGF1dG9jb21wbGV0ZT1cIm9mZlwiIG5hbWU9XCJcIiBpZD1cIlwiIHJvd3M9XCIyXCIgbWF4TGVuZ3RoPVwiNTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcEluc3RydWN0aW9uRGVzY3JpcHRpb25cIiBwbGFjZWhvbGRlcj1cIkVudGVyIENvbXBsZXggSW5zdHJ1Y3Rpb24gRGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnN0cnVjdGlvbl9maWVsZF9jbHIgdy0xMDAgbmV3X3J4X3BvcHVwX3RhYl90ZXh0YXJlYVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlJYX0FERF9kcm9wZG93bl9idG5fMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJJbnN0cnVjdGlvbigpXCIgY2xhc3M9XCJyeC1pbnN0cnVjdGlvbi1idG5cIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNhdmVJbnN0cnVjdGlvbigpXCIgY2xhc3M9XCJyeC1pbnN0cnVjdGlvbi1idG5cIj5TYXZlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlJvdXRlOjwvcD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwibWRsLXRleHRmaWVsZF9faW5wdXQgbmV3X3J4X3BvcHVwX3RhYl9pbnB1dFwiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCIgaWQ9XCJzZWxlY3RlZFJvdXRlOlwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUm91dGVcIiBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWVcIiBtYXhsZW5ndGg9XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJvdXRlRHJvcGRvd24oKVwiIChrZXlwcmVzcyk9XCJhbHBoYVJlc3RyaWN0aW9uKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICNSb3V0ZURyb3Bkb3duIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl9kcm9wZG93bl9saXN0X2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgTV9saXN0X2JveF9zaG93OiBzZWxlY3RSb3V0ZURyb3Bkb3duID09PSB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMTBweDsgcG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJtZGwtdGV4dGZpZWxkX19pbnB1dCBuZXdfcnhfcm91dGVfX2lucHV0XCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIFt2YWx1ZV09XCJyb3V0ZURhdGFGaWx0ZXIgPyByb3V0ZURhdGFGaWx0ZXIgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJyb3V0ZUZpbHRlcigkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbWQtMjQgbmV3X3J4X3BvcHVwX3RhYl8xX2lucHV0X3NlYXJjaCByeC1zZWFyY2gtaWNvblwiPnNlYXJjaDwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgKm5nSWY9XCJmaWx0ZXJSb3V0ZUl0ZW1zKHJvdXRlRGF0YSwgcm91dGVEYXRhRmlsdGVyKS5sZW5ndGggIT0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfMV9saXN0IHJ4X2Ryb3Bkb3duIHJ4X2Ryb3Bkb3duX3JvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJvdXRlIG9mIGZpbHRlclJvdXRlSXRlbXMocm91dGVEYXRhLCByb3V0ZURhdGFGaWx0ZXIpXHJcbiAgICAgICAgICAgICAgICAgIFwiIChjbGljayk9XCJzZWxlY3RSb3V0ZXNlYXJjVmFsdWUocm91dGUpXCIgW2NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaGxpZ2h0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgcm91dGVbJ3JvdXRlTmFtZSddID09IGNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWVcclxuICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyByb3V0ZVtcInJvdXRlTmFtZVwiXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCAqbmdJZj1cImZpbHRlclJvdXRlSXRlbXMocm91dGVEYXRhLCByb3V0ZURhdGFGaWx0ZXIpLmxlbmd0aCA9PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl8xX2xpc3QgcnhfZHJvcGRvd24gcnhfZHJvcGRvd25fcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaT5ubyBkYXRhPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+UHJvIFJlIE5hdGEgUHJlc2NyaXB0aW9uOjwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9uZXdfcG9wdXBfY2hlY2tib3ggbS10LTM2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWRsLWNoZWNrYm94IG1kbC1qcy1jaGVja2JveCBtZGwtanMtcmlwcGxlLWVmZmVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3gxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2lucHV0IHJ4X25ld19ncm91cF9jaGVja2JveFwiIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMucnhQUk5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJQUk5DaGFuZ2UoY29tbW9uU2VydmljZXMucnhQUk4pXCIgLz48c3BhbiBjbGFzcz1cIm1kbC1jaGVja2JveF9fbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7IGZvbnQtc2l6ZTogMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2Rpc2FibGVkLXN0eWxlJzogY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9PSB0cnVlIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiPlByb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZSBOYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFByZXNjcmlwdGlvbjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlByZXNjcmliZSBBczo8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9uZXdfcG9wdXBfY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnhfbmV3X3JhZGlvYm94X2J1dHRvbiByeF9yYWRpb19vdmVyYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyeF9yYWRpb19sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInJhZGlvXCIgY2xhc3M9XCJtZGwtcmFkaW9fX2J1dHRvbiBjdXN0b20tcmFkaW8tYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiUHJlc2NyaWJlQXNcIiBbdmFsdWVdPVwiJ1ByaXZhdGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMudG9Mb3dlckNhc2UoKSA9PT0gJ3ByaXZhdGUnXCIgKGNsaWNrKT1cInByaXZhdGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBU1wiIC8+PHNwYW4gY2xhc3M9XCJtZGwtcmFkaW9fX2xhYmVsIHJhZGlvX3R4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZGlzYWJsZWQtc3R5bGUnOiBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID09IHRydWUgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCI+UHJpdmF0ZTwvc3Bhbj48L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJ4X3JhZGlvX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwicmFkaW9cIiBjaGVja2VkPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1yYWRpb19fYnV0dG9uIGQtaW5saW5lIHJhZGlvIGN1c3RvbS1yYWRpby1idXR0b25cIiBuYW1lPVwiUHJlc2NyaWJlQXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCInUEJTJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByZXNjcmliZUFTX1BCUyB8fCBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09PSAncGJzJ1wiIChjbGljayk9XCJQQlMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBU1wiIC8+PHNwYW4gY2xhc3M9XCJtZGwtcmFkaW9fX2xhYmVsIHJhZGlvX3R4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgJ2Rpc2FibGVkLXN0eWxlJzogcHJlc2NyaWJlQVNfUEJTID09IHRydWV8fCBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiPlBCUzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyeF9yYWRpb19sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInJhZGlvXCIgY2hlY2tlZD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtcmFkaW9fX2J1dHRvbiBkLWlubGluZSByYWRpbyBjdXN0b20tcmFkaW8tYnV0dG9uXCIgbmFtZT1cIlByZXNjcmliZUFzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiJ1JQQlMnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJlc2NyaWJlQVNfUlBCUyB8fCBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09PSAncnBicydcIiAoY2xpY2spPVwiUlBCUygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTXCIgLz48c3BhbiBjbGFzcz1cIm1kbC1yYWRpb19fbGFiZWwgcmFkaW9fdHh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieyAnZGlzYWJsZWQtc3R5bGUnOiBwcmVzY3JpYmVBU19SUEJTID09IHRydWV8fCBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiPlJQQlM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveFwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGwgJiYgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlIT11bmRlZmluZWQgJiYgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlIT1udWxsICYmXHJcbiAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ25vbiBwYnMnICYmXHJcbiAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5kdmFOdW1iZXIgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuZHZhTnVtYmVyICE9ICcnICYmIGlzTm9uUGJzRmxhZyA9PSBmYWxzZSAmJiAhaXNQcmVzY3JpYmVBc1ByaXZhdGVPbmx5XHJcbiAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWRsLWNoZWNrYm94IG1kbC1qcy1jaGVja2JveCBtZGwtanMtcmlwcGxlLWVmZmVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3hcIiBjbGFzcz1cImNoZWNrX2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImNvbW1vblNlcnZpY2VzLnVubGlzdGVkUkFcIiAoY2xpY2spPVwidW5saXN0ZWRSQSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWRsLWNoZWNrYm94X19sYWJlbCBjaGVja19ib3hfbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydkaXNhYmxlZC1zdHlsZSc6IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPT0gdHJ1ZSB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVW5saXN0ZWQgUkFcclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgTV9DVEdfYm94X2hpZGU6ICEoXHJcbiAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscyAmJlxyXG4gICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMucGF0aWVudEN0Z0ZsYWcgPT0gMCAmJlxyXG4gICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMucGF0aWVudEN0Z0NvUGF5bWVudCA9PSAwICYmXHJcbiAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdwYnMnXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5DVEcvUEJTIENvIFBheW1lbnQ6PC9wPiAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveCBtLXQtMzZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZGwtY2hlY2tib3ggbWRsLWpzLWNoZWNrYm94IG1kbC1qcy1yaXBwbGUtZWZmZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjaGVja2JveDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jaGVja2JveF9faW5wdXQgcnhfbmV3X2dyb3VwX2NoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5DVEdDb1BheW1lbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb21tb25TZXJ2aWNlcy5DVEdDb1BheW1lbnQgPT0gdHJ1ZVwiIC8+PHNwYW4gY2xhc3M9XCJtZGwtY2hlY2tib3hfX2xhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDogNDAwOyBmb250LXNpemU6IDE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydkaXNhYmxlZC1zdHlsZSc6IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPT0gdHJ1ZSB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIj5DVEcvUEJTXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENvIFBheW1lbnQ8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcHhcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgZGlzYWJsZWRSeENvbnRlbnQ6IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmd9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+U2NyaXB0IERhdGU6PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJtZGwtdGV4dGZpZWxkX19pbnB1dCBuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCIgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cIlJ4U2NyaXB0RGF0ZVwiIHBsYWNlaG9sZGVyPVwiIC4uLy4uLy4uLi5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLnNjcmlwdERhdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+U3RhcnQgRGF0ZTo8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cIm1kbC10ZXh0ZmllbGRfX2lucHV0IG5ld19yeF9wb3B1cF90YWJfaW5wdXRcIiB0eXBlPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIiBpZD1cIlJ4U3RhcnREYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIiAuLi8uLi8uLi4uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5zdGFydERhdGVcIiAobmdNb2RlbENoYW5nZSk9XCJjb21tb25TZXJ2aWNlcy5yeEVuZERhdGVDYWxjdWxhdGVyKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+RW5kIERhdGU6PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJtZGwtdGV4dGZpZWxkX19pbnB1dCBuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCIgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCIgaWQ9XCJSeEVuZERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLi4vLi4vLi4uLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuZW5kRGF0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5EYXlzIEJldHdlZW4gUmVwZWF0czo8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiAocGFzdGUpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiBwbGFjZWhvbGRlcj1cIkVudGVyIERheXMgQmV0d2VlbiBSZXBlYXRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfHxjb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3R9XCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC10ZXh0ZmllbGRfX2lucHV0IG5ld19yeF9wb3B1cF90YWJfaW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgaWQ9XCJEYXliZXR3ZWVucmVwZWF0c1wiIFttaW5dPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb258fGNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbFwiIChrZXlwcmVzcyk9XCJjaGVja01vYmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZGF5c2NoYW5nZSgpXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5QdXJwb3NlOjwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJtZGwtdGV4dGZpZWxkX19pbnB1dCBuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCIgaWQ9XCJzZWxlY3RlZFB1cnBvc2U6XCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFB1cnBvc2VcIiByZWFkT25seSBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLnB1cnBvc2VTZWFyY2hWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHVycG9zZURyb3Bkb3duKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgI1B1cnBvc2VEcm9wZG93biBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfZHJvcGRvd25fbGlzdF9ib3ggbmV3X3J4X3BvcHVwX3RhYl9wdXJwb3NlX2JveCBoLTE2MHBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgTV9saXN0X2JveF9zaG93OiBzZWxlY3RQdXJwb3NlRHJvcGRvd24gPT09IHRydWUgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl8xX2xpc3QgcnhfZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJzZWxlY3RQdXJwb3NlVmFsdWUobnVsbClcIiBjbGFzcz1cInAtMTJcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHB1cnBvc2Ugb2YgcHVycG9zZURhdGFcIiAoY2xpY2spPVwic2VsZWN0UHVycG9zZVZhbHVlKHB1cnBvc2UpXCIgW2NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdobGlnaHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1cnBvc2VbJ2xvb2t1cFRleHQnXSA9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5wdXJwb3NlU2VhcmNoVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcHVycG9zZVtcImxvb2t1cFRleHRcIl0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgTV9DVEdfYm94X2hpZGU6IGNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lICE9IHRydWUgfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+U3Vic3RpdHV0aW9uOjwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9uZXdfcG9wdXBfY2hlY2tib3ggbS10LTM2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWRsLWNoZWNrYm94IG1kbC1qcy1jaGVja2JveCBtZGwtanMtcmlwcGxlLWVmZmVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3gxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlIHx8IGNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID09IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2lucHV0IHJ4X25ld19ncm91cF9jaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0aGlzLmJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvdyhjb21tb25TZXJ2aWNlcy5CcmFuZFN1YnN0aXR1dGVzTm90QWxsb3cpXCIgW2NoZWNrZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGNvbW1vblNlcnZpY2VzLkJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICBcIiAvPjxzcGFuIGNsYXNzPVwibWRsLWNoZWNrYm94X19sYWJlbFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDsgZm9udC1zaXplOiAxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZGlzYWJsZWQtc3R5bGUnOiBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID09IHRydWUgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCI+QnJhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgU3Vic3RpdHV0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vdCBQZXJtaXR0ZWQ8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieyBNX0NUR19ib3hfaGlkZV9icmFuZDogY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlIH1cIiBpZD1cImJyYW5kbmFtZXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJoaWRlVG9vbFRpcCgpXCIgKG1vdXNlZW50ZXIpPVwic2hvd3Rvb2x0aXAoY29tbW9uU2VydmljZXMubGVtaSxicmFuZHRvb2x0aXApXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5CcmFuZCBOYW1lOjwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmR0b29sdGlwPjxzcGFuIGNsYXNzPVwiaW5jbHVkZV9icmFuZF90b29sdGlwXCI+VGhlIHNlbGVjdGVkIHByb2R1Y3QgaXMgTEVNSVxyXG4gICAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllZC4gVGhlcmVmb3JlIGl0IG1heSBiZVxyXG4gICAgICAgICAgICAgICAgICAgICAgcHJlc2NyaWJlZCBieSB0aGUgYnJhbmQgbmFtZSBvbmx5Ljwvc3Bhbj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnhfbmV3X3BvcHVwX2NoZWNrYm94IG0tdC0zNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIiBbY2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICBNX0NUR19ib3hfaGlkZV9icmFuZF9uYW1lOiBjb21tb25TZXJ2aWNlcy5sZW1pID09IHRydWUgfHwgY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9PSB0cnVlIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjaGVja2JveDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jaGVja2JveF9faW5wdXQgcnhfbmV3X2dyb3VwX2NoZWNrYm94XCIgW2NoZWNrZWRdPVwiY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0aGlzLmlzQ2hhbmdlQnJhbmROYW1lKGNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lKVwiIC8+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2xhYmVsXCIgc3R5bGU9XCJmb250LXdlaWdodDogNDAwOyBmb250LXNpemU6IDE2cHhcIj5JbmNsdWRlIEJyYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlJlZ3VsYXRpb24gMjQ6PC9wPiAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveCBtLXQtMzZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZGwtY2hlY2tib3ggbWRsLWpzLWNoZWNrYm94IG1kbC1qcy1yaXBwbGUtZWZmZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjaGVja2JveDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jaGVja2JveF9faW5wdXQgcnhfbmV3X2dyb3VwX2NoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5yZWd1bGF0aW9uMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb21tb25TZXJ2aWNlcy5yZWd1bGF0aW9uMjRcIiAvPjxzcGFuIGNsYXNzPVwibWRsLWNoZWNrYm94X19sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDsgZm9udC1zaXplOiAxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZGlzYWJsZWQtc3R5bGUnOiBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID09IHRydWUgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCI+UmVndWxhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAyNDwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDBweFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwieyBkaXNhYmxlZFJ4Q29udGVudDogY29tbW9uU2VydmljZXMuaXNGZXRjaGluZ31cIj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPkRPIE5PVCBzZW5kIHRvIE15U0w6PC9wPiAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveCBtLXQtMzZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZGwtY2hlY2tib3ggbWRsLWpzLWNoZWNrYm94IG1kbC1qcy1yaXBwbGUtZWZmZWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJjaGVja2JveDJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jaGVja2JveF9faW5wdXQgcnhfbmV3X2dyb3VwX2NoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5teVNMQ29uc2VudFwiIC8+PHNwYW4gY2xhc3M9XCJtZGwtY2hlY2tib3hfX2xhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDogNDAwOyBmb250LXNpemU6IDE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydkaXNhYmxlZC1zdHlsZSc6IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPT0gdHJ1ZSB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIj5ET1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBOT1Qgc2VuZCB0byBNeVNMPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFBoYXJtYWN5OiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9uZXdfcG9wdXBfY2hlY2tib3hcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZGwtY2hlY2tib3ggbWRsLWpzLWNoZWNrYm94IG1kbC1qcy1yaXBwbGUtZWZmZWN0XCI+PGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWVcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2lucHV0IHJ4X25ld19ncm91cF9jaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLnNlbmRUb1BoYXJtYWN5XCIgKGNoYW5nZSk9XCJzZW5kVG9QaGFybWFjeUNoYW5nZSgpXCIgLz48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2xhYmVsXCIgc3R5bGU9XCJmb250LXdlaWdodDogNDAwO2ZvbnQtc2l6ZTogMTZweDttYXJnaW4tdG9wOiAtN3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydkaXNhYmxlZC1zdHlsZSc6IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPT0gdHJ1ZSB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIj5TZW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBQaGFybWFjeTwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cIm1kbC10ZXh0ZmllbGRfX2lucHV0IG5ld19yeF9wb3B1cF90YWJfaW5wdXRcIiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiIGlkPVwic2VsZWN0ZWRkb3NlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3lWYWx1ZVwiIChjbGljayk9XCJzdHBWYWx1ZURyb3Bkb3duKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7IE1fQ1RHX2JveF9oaWRlOiBjb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeSAhPSB0cnVlIH1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICNzdHBEcm9wZG93biBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfZHJvcGRvd25fbGlzdF9ib3ggbmV3X3J4X3BvcHVwX3RhYl9zdHBfYm94IGgtOTNwXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieyBNX2xpc3RfYm94X3Nob3c6IHNlbGVjdHN0cERyb3Bkb3duID09PSB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzFfbGlzdCByeF9kcm9wZG93blwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cInNlbGVjdFN0cFZhbHVlKG51bGwpXCIgY2xhc3M9XCJwLTEyXCI+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgc2VuZHRvcGhhcm1hY3kgb2Ygc2VuZHRvcGhhcm1hY3lEYXRhXCIgKGNsaWNrKT1cInNlbGVjdFN0cFZhbHVlKHNlbmR0b3BoYXJtYWN5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZW5kdG9waGFybWFjeS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5FbWVyZ2VuY3kgU3VwcGx5OjwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9uZXdfcG9wdXBfY2hlY2tib3ggbS10LTM2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWRsLWNoZWNrYm94IG1kbC1qcy1jaGVja2JveCBtZGwtanMtcmlwcGxlLWVmZmVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3gyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2lucHV0IHJ4X25ld19ncm91cF9jaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5XCIgLz48c3BhbiBjbGFzcz1cIm1kbC1jaGVja2JveF9fbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7IGZvbnQtc2l6ZTogMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2Rpc2FibGVkLXN0eWxlJzogY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9PSB0cnVlIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiPkVtZXJnZW5jeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTdXBwbHk8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYWdlID09IDJcIiBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfMlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDBweDsgb3BhY2l0eTogMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS02LWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDBweFwiIGNsYXNzPVwibWRsLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1ncmlkIG5ld19yeF9wb3B1cF90YWJfMV9ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMTItY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5SWDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBbaW5uZXJIVE1MXT1cImNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWVcIj48L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIiBzdHlsZT1cIm1hcmdpbjogMHB4XCI+UXVhbnRpdHk6IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6IHJnYig0NSwgNDUsIDQ1KTsgZm9udC13ZWlnaHQ6IDYwMFwiPnt7IGNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IFJlcGVhdHM6IDxzcGFuIHN0eWxlPVwiY29sb3I6IHJnYig0NSwgNDUsIDQ1KTsgZm9udC13ZWlnaHQ6IDYwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsIH19PC9zcGFuPiBEZWZhdWx0IFF1YW50aXR5Ont7Z2V0RGVmYXVsdFF1YW50aXR5KCl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBSZXBlYXRzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uIT1udWxsJiZjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlcGVhdHMhPW51bGw/Y29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzOlwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY29tbW9uU2VydmljZXMuZG9zZVNlYXJjaFZhbHVlICE9ICcnIHx8Y29tbW9uU2VydmljZXMuZnJlcVNlYXJjaFZhbHVlICE9ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbW1vblNlcnZpY2VzLmRvc2VTZWFyY2hWYWx1ZSB9fSA8L3NwYW4+PHNwYW4+e3sgY29tbW9uU2VydmljZXMuZnJlcVNlYXJjaFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZSAhPSAnJ1wiIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e0luc3RydWN0aW9uRGVzY3JpcHRpb24gIT1cIlwiICYmIEluc3RydWN0aW9uRGVzY3JpcHRpb24hPW51bGw/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uOmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUhPVwiXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUhPW51bGw/Y29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZTpcIlwifX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlICE9ICcnXCIgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29tbW9uU2VydmljZXMucm91dGVTZWFyY2hWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQLlIuTiA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnJ4UFJOXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBpY29uLWRvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjMDA3N2I2XCI+Y2hlY2s8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5yeFBSTlwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5EYXlzIEJldHdlZW4gUmVwZWF0czpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwpXCI+e3tjb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsKVwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVudXN1YWwgRG9zZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29tbW9uU2VydmljZXMudW5Vc3VhbERvc2VGbGFnXCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBpY29uLWRvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjMDA3N2I2XCI+Y2hlY2s8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy51blVzdWFsRG9zZUZsYWdcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+U2NyaXB0IERhdGU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3RoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0RGF0ZXxkYXRlOidkZC1NTS15eXl5J319PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfcFwiPlN0YXJ0IERhdGU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e3RoaXMuY29tbW9uU2VydmljZXMuc3RhcnREYXRlfGRhdGU6J2RkLU1NLXl5eXknfX08L3NwYW4+LCBFbmQgRGF0ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGhpcy5jb21tb25TZXJ2aWNlcy5lbmREYXRlfGRhdGU6J2RkLU1NLXl5eXknfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfcFwiPlByZXNjcmliZSBBczpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMpXCI+e3tjb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBU319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTKVwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5QdXJwb3NlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShjb21tb25TZXJ2aWNlcy5wdXJwb3NlU2VhcmNoVmFsdWUpXCI+e3tjb21tb25TZXJ2aWNlcy5wdXJwb3NlU2VhcmNoVmFsdWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShjb21tb25TZXJ2aWNlcy5wdXJwb3NlU2VhcmNoVmFsdWUpXCI+LTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSBCcmFuZCBOYW1lOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaWNvbi1kb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogIzAwNzdiNlwiPmNoZWNrPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWVcIj4tPC9zcGFuPixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5kIFN1YnN0aXR1dGlvbiBOb3QgUGVybWl0dGVkOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5CcmFuZFN1YnN0aXR1dGVzTm90QWxsb3dcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGljb24tZG9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICMwMDc3YjZcIj5jaGVjazwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbW1vblNlcnZpY2VzLkJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvd1wiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ3VsYXRpb24gMjQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnJlZ3VsYXRpb24yNFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaWNvbi1kb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogIzAwNzdiNlwiPmNoZWNrPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29tbW9uU2VydmljZXMucmVndWxhdGlvbjI0XCI+LTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1RHL1BCUyBDbyBQYXltZW50OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5DVEdDb1BheW1lbnRcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGljb24tZG9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICMwMDc3YjZcIj5jaGVjazwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbW1vblNlcnZpY2VzLkNUR0NvUGF5bWVudFwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERPIE5PVCBzZW5kIHRvIE15U0w6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbW1vblNlcnZpY2VzLm15U0xDb25zZW50XCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBpY29uLWRvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjMDA3N2I2XCI+Y2hlY2s8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5teVNMQ29uc2VudFwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQgdG8gUGhhcm1hY3k6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnNlbmRUb1BoYXJtYWN5XCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBpY29uLWRvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjMDA3N2I2XCI+Y2hlY2s8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVwiPi08L3NwYW4+LCBTZW5kIHRvIFBoYXJtYWN5IFZhbHVlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3shY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShjb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVZhbHVlKT9jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVZhbHVlOictJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtZXJnZW5jeSBTdXBwbHk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbW1vblNlcnZpY2VzLmVtZXJnZW5jeVN1cHBseVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaWNvbi1kb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogIzAwNzdiNlwiPmNoZWNrPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5XCI+LTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5Ob3RlIFRvIFBoYXJtYWN5OjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBhdXRvY29tcGxldGU9XCJvZmZcIiBuYW1lPVwiXCIgaWQ9XCJcIiByb3dzPVwiM1wiIG1heGxlbmd0aD1cIjUwXCIgcGxhY2Vob2xkZXI9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGhpcy5jb21tb25TZXJ2aWNlcy5kb2N0b3JOb3Rlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgbmV3X3J4X3BvcHVwX3RhYl90ZXh0YXJlYSByeC1tLXctNTM1cFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMTItY29sIG1kbC1jZWxsLS04LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPkFubm90YXRpb246PC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBhdXRvY29tcGxldGU9XCJvZmZcIiBuYW1lPVwiXCIgaWQ9XCJcIiByb3dzPVwiM1wiIG1heGxlbmd0aD1cIjUwMFwiIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRoaXMuY29tbW9uU2VydmljZXMuYW5ub3RhdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgbmV3X3J4X3BvcHVwX3RhYl90ZXh0YXJlYSByeC1tLXctNTM1cFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMTItY29sIG1kbC1jZWxsLS04LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlJlYXNvbiBGb3IgUHJlc2NyaXB0aW9uOjwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgYXV0b2NvbXBsZXRlPVwib2ZmXCIgbmFtZT1cIlwiIGlkPVwiXCIgcm93cz1cIjNcIiBtYXhsZW5ndGg9XCI1MFwiIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaXB0aW9uUmVhc29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBuZXdfcnhfcG9wdXBfdGFiX3RleHRhcmVhIHJ4LW0tdy01MzVwXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS02LWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIiBzdHlsZT1cInRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RoaXMuZ2V0U3RhdGVBdXRob3JpdHlMYWJlbChjb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5zdGF0ZSl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOiAwcHg7bWFyZ2luLXRvcDogLThweDttYXJnaW4tYm90dG9tOiAxMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0YXRlLXR4dC1jb2xvciBuZXdfcnhfcG9wdXBfbGFiZWxfcFwiPihSZWxldmFudCB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnN0YXRlIH19KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiYXBwcm92YWxcIiBwbGFjZWhvbGRlcj1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCIgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5TdGF0ZUF1dGhvcml0eU51bWJlclwiIG1heGxlbmd0aD1cIjI1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImF1dGhvcml0eU5vVmFsaWRhdGlvbigkZXZlbnQpXCIgKG5nTW9kZWxDaGFuZ2UpPVwiYXV0aG9yaXR5Tm9DaGFuZ2UoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTYtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIntcclxuICAgICAgICAgICAgJ25ld19yeF9ub19hdXRob3JpdHknOiFzaG93QXV0aG9yaXR5Qm94KFxyXG4gICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24hPW51bGw/IGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zOicnLGNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTLGNvbW1vblNlcnZpY2VzLnJ4QXV0aG9yaXR5LGNvbW1vblNlcnZpY2VzLnVubGlzdGVkUkEpXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgc2hvd0F1dGhvcml0eUJveChcclxuICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbD8gIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zOicnLFxyXG4gICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUyxcclxuICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucnhBdXRob3JpdHksXHJcbiAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnVubGlzdGVkUkFcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMHB4XCIgY2xhc3M9XCJtZGwtZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS04LWNvbCBtZGwtY2VsbC0tNi1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9OZXdcIj5IT1RMSU5FOiA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfc3BhblwiPnt7Y29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSUEJTJz8nMTgwMDU1MjU4MCc6JzE4MDA4ODgzMzMnfX08L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTQtY29sIG1kbC1jZWxsLS0yLWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wYXNzZXRzLmhvbGEuaGVhbHRoL3J4LXdpZGdldHMvcngtbWltcy5wbmdcIiBhbHQ9XCJNSU1TIGxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogODBweDsgaGVpZ2h0OiBhdXRvXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWRcIiBzdHlsZT1cInBhZGRpbmc6IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS02LWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNjcmliZXIgTmFtZTo8c3Bhbj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuZmlyc3ROYW1lICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmxhc3ROYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTYtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlc2NyaWJlciBOdW1iZXI6PHNwYW4+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMucHJlc2NyaWJlck51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS02LWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFBhdGllbnQgTWVkaWNhcmUgTnVtYmVyOjxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5tZWRpY2FyZU51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5tZWRpY2FyZU51bWJlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTYtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aG9yaXR5IEZvcm0gTm86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLmF1dGhvcml0eUZvcm1Ob1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb21tb25TZXJ2aWNlcy5hdXRob3JpdHlGb3JtTm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0xMi1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5BdXRob3JpdHkgSXRlbTo8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiYXV0aG9yaXR5X2l0ZW1fdGV4dFwiIFtpbm5lckhUTUxdPVwiY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZVwiPjwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3AgbmV3X3J4X3BvcHVwX3RhYl9zbWFsbEJveGVzXCIgc3R5bGU9XCJtYXJnaW46IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFF1YW50aXR5OjxzcGFuIHN0eWxlPVwiY29sb3I6IHJnYig0NSwgNDUsIDQ1KTsgZm9udC13ZWlnaHQ6IDYwMFwiPiB7eyBjb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+IFJlcGVhdHM6PHNwYW4gc3R5bGU9XCJjb2xvcjogcmdiKDQ1LCA0NSwgNDUpOyBmb250LXdlaWdodDogNjAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsIH19PC9zcGFuPiBEZWZhdWx0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUXVhbnRpdHk6e3tjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uIT1udWxsJiZjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzIT1udWxsPyhjb21tb25TZXJ2aWNlcy5xdWFudGl0eVdpdGhVbml0RmxhZz9cIjFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB4IFwiOlwiXCIpK2NvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubWF4UXR5VW5pdHM6XCJcIn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFJlcGVhdHM6e3tjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uIT1udWxsJiZjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlcGVhdHMhPW51bGw/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzOlwiXCJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1ncmlkXCIgc3R5bGU9XCJwYWRkaW5nOiAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMTItY29sIG1kbC1jZWxsLS04LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUEJTIExpc3RlZCBJbmRpY2F0aW9uIEF1dGhvcml0eTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgbmV3X3J4X3BvcHVwX3RhYl90ZXh0YXJlYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4taGVpZ2h0OiA3MHB4OyBtYXgtaGVpZ2h0OiAxNTBweDsgb3ZlcmZsb3c6IGF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgc3R5bGU9XCJtYXJnaW46IDBweDsgcGFkZGluZy1sZWZ0OiAxNXB4O2xpc3Qtc3R5bGU6IG5vbmU7cGFkZGluZzogMHB4O1wiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93UmVzdHJpY3Rpb25zID09IHRydWUgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMgIT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zICE9ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDtwYWRkaW5nOiAwcHggMTBweDttYXJnaW4tYm90dG9tOiAxMHB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmV3X3J4X3BvcF9hdXRfaW50IGN1cnNvclwiICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN0cmljdGlvbiBvZiBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC5SZXN0cmljdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBbY2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19yeF9wb3BfYXV0X2luc19zZWxlY3Q6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgPT0gaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblByZXZpZXcgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25QcmV2aWV3ICE9ICcnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblRleHQgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UZXh0ICE9ICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0aW9uQXV0aG9yaXR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbD8gY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0czonJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbD8gY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzOicnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnhfcmVzdHJpY3Rpb25UZXh0XCIgc3R5bGU9XCJmb250LXNpemU6IDEycHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyZXN0cmljdGlvbi5yZXN0cmljdGlvblRleHQubGVuZ3RoIDwgODBcIj48Yj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVHlwZSB9fTwvYj4gLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxUb0Zvcm1hdHRlZFRleHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblByZXZpZXdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPjwvc3Bhbj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnhfcmVzdHJpY3Rpb25UZXh0XCIgc3R5bGU9XCJmb250LXNpemU6IDEycHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UZXh0Lmxlbmd0aCA+IDgwXCI+PGIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGlvbkF1dGhvcml0eShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbD9jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzOicnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbD9jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlcGVhdHM6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnJlcGVhdHNWYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UeXBlIH19PC9iPiAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0aW9uQXV0aG9yaXR5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uIT1udWxsP2NvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubWF4UXR5VW5pdHM6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uIT1udWxsP2NvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0czonJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBbaW5uZXJIVE1MXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxUb0Zvcm1hdHRlZFRleHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblByZXZpZXdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnN1YnN0cmluZygwLCA4MClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+PC9zcGFuPi4uLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgY29sb3I6ICNmZjk5NzhcIiBpZD1cInNob3ctdG9vbHRpcC1pZFwiPlNob3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9yZTwvYT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwZGVtbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicnhfdG9vbHRpcF9pbm5lcl9ib3hcIiBbaW5uZXJIVE1MXT1cInJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVGV4dFwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicGFkZGluZzogMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0xMi1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlBCUyBOb3Rlczo8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGF1dG9jb21wbGV0ZT1cIm9mZlwiIG5hbWU9XCJcIiBpZD1cIlwiIHJvd3M9XCIyXCIgbWF4bGVuZ3RoPVwiNTAwXCIgcGxhY2Vob2xkZXI9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMCBuZXdfcnhfcG9wdXBfdGFiX3RleHRhcmVhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLnBic05vdGVzXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRpY2F0aW9uIEZvciBUaGlzIEF1dGhvcml0eTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGF1dG9jb21wbGV0ZT1cIm9mZlwiIG5hbWU9XCJcIiBpZD1cIlwiIHJvd3M9XCIyXCIgcGxhY2Vob2xkZXI9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25JbnB1dENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgbmV3X3J4X3BvcHVwX3RhYl90ZXh0YXJlYSByeC1tLXctMTAwXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMTItY29sIG1kbC1jZWxsLS04LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRBdXRob3JpdHlMYWJlbChjb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5zdGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJhcHByb3ZhbFwiIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZHNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCIgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuYXBwcm92YWxOb1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uSW5wdXRjaGFuZ2VBcHByb3ZhbE5vKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImF1dGhvcml0eU5vVmFsaWRhdGlvbigkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICFzaG93QXV0aG9yaXR5Qm94KFxyXG4gICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uIT1udWxsPyBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9uczonJyxcclxuICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnJ4QXV0aG9yaXR5LFxyXG4gICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wYXNzZXRzLmhvbGEuaGVhbHRoL3J4LXdpZGdldHMvcngtbWltcy5wbmdcIiBhbHQ9XCJNSU1TIGxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiA4MHB4OyBoZWlnaHQ6IGF1dG9cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJOb19BdXRob3JpdHlfYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cD5ObyBBdXRob3JpdHkgUmVxdWlyZWQ8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnhfZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9mb290ZXJfYnJhbmRcIj5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1sLTEwXCI+PHNwYW4+SG9sYSBDb25zdWx0IHwgMS4wIDxzcGFuICpuZ0lmPVwiY29tbW9uU2VydmljZXMuc2FuZGJveFwiPnwgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnhfc3RhZ2luZ1wiPlRoaXMgaXMgYSBzYW5kYm94IGVudmlyb25tZW50PC9zcGFuPjwvc3Bhbj48L3NwYW4+PC9wPlxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwibXQtMTVwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJ4X3BvcHVwX2Zvb3Rlcl90ZXh0XCI+wqkgMjAyNSBIb2xhIEhlYWx0aCwgYSBicmFuZCBvZiBQYWNrYXBpbGwgUHR5IEx0ZCB8IHZcclxuICAgICAgICAgICAgICAgICAgMS4xLjAgfFxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwiaHR0cHM6Ly9ob2xhLmhlYWx0aC9jb25zdWx0LXRlcm1zXCIgdGFyZ2V0PVwiX2JsYW5rXCI+VGVybXM8L2E+IHxcclxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vaG9sYS5oZWFsdGgvY29uc3VsdC1wcml2YWN5LXBvbGljeVwiIHRhcmdldD1cIl9ibGFua1wiPlByaXZhY3kgUG9saWN5PC9hPiB8XHJcbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJtYWlsdG86c3VwcG9ydEBob2xhLmhlYWx0aFwiIHRhcmdldD1cIl9ibGFua1wiPkhlbHA8L2E+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
4752
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaG9sYS1yeC9zcmMvbGliL3J4L3J4LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2hvbGEtcngvc3JjL2xpYi9yeC9yeC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBMEIsU0FBUyxFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUcxSyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUUxSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxrRkFBa0YsQ0FBQztBQUMzSSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSw4RUFBOEUsQ0FBQztBQUNySSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7O0FBUTNFLE1BQU0sT0FBTyxXQUFXO0lBcUd0QixZQUNTLFVBQXNCLEVBQ3RCLGNBQThCLEVBQzdCLFVBQXNCLEVBQ3RCLFlBQStCLEVBQ2hDLFFBQWtCLEVBQ2pCLFFBQW1CLEVBQ25CLEtBQWlCLEVBQ2pCLGdCQUFrQztRQVBuQyxlQUFVLEdBQVYs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LG1CQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1SixVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDN0osVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FB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QWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNsTyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbE8sdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEksMkJBQTJCLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFD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QUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbE8sdUJBQXVCLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDeEksMkJBQTJCLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMscUJB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QyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNHLE9BQU87c0JBQXBELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDUyxjQUFjO3NCQUFsRSxTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDSixRQUFRO3NCQUF0RCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0ksVUFBVTtzQkFBMUQsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRXJDLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFUCx1QkFBdUI7c0JBRHRCLFNBQVM7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQXFGVixPQUFPO3NCQUFoRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ2QsVUFBVTtzQkFBbkMsU0FBUzt1QkFBQyxhQUFhO2dCQUNhLE9BQU87c0JBQTNDLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFvQ25DLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlcyB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbW1vbic7XHJcbmltcG9ydCB7IEJyYW5kSW5jbHVkZUNvbXBvbmVudCB9IGZyb20gJy4uL2JyYW5kLWluY2x1ZGUvYnJhbmQtaW5jbHVkZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdmFpbGFibGVGb3JtdWxhdGlvbnNDb21wb25lbnQgfSBmcm9tICcuLi9icmFuZC1pbmNsdWRlL2F2YWlsYWJsZS1mb3JtdWxhdGlvbnMvYXZhaWxhYmxlLWZvcm11bGF0aW9ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElzQXV0aG9yaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vaXMtYXV0aG9yaXR5L2lzLWF1dGhvcml0eS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZWFsVGltZVByZXNjcmlwdGlvbk1vbml0b3JpbmdDb21wb25lbnQgfSBmcm9tICcuLi9yZWFsLXRpbWUtcHJlc2NyaXB0aW9uLW1vbml0b3JpbmcvcmVhbC10aW1lLXByZXNjcmlwdGlvbi1tb25pdG9yaW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbmZpcm1QYXRpZW50Q29udGFjdERldGFpbHNDb21wb25lbnQgfSBmcm9tICcuLi9jb25maXJtLXBhdGllbnQtY29udGFjdC1kZXRhaWxzL2NvbmZpcm0tcGF0aWVudC1jb250YWN0LWRldGFpbHMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGFzc3dvcmRDb21wb25lbnQgfSBmcm9tICcuLi9wYXNzd29yZC9wYXNzd29yZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBjb25maWcsIGVycm9yY29uZmlnIH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2NvbmZpZyc7XHJcbmltcG9ydCB7IENlYXNlUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9jZWFzZS1wb3B1cC9jZWFzZS1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZWlzc3VlUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9yZWlzc3VlLXBvcHVwL3JlaXNzdWUtcG9wdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xvc2VQb3B1cENvbXBvbmVudCB9IGZyb20gJy4uL2Nsb3NlLXBvcHVwL2Nsb3NlLXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtcngnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yeC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcnguY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFJ4Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdNZWRpY2luZURyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIHdyYXBwZXJSZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ1ByZXNjcmliZURyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByZXNjcmliZURyb3Bkb3duUmVmITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdEb3NlRHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgZG9zZVJlZiE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnRnJlcURyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIGZyZXFSZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3N0cERyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIHN0cFJlZiE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnRm9vZERyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIGZvb2RSZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ0luc3RydWN0aW9uRHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgSW5zdHJ1Y3Rpb25SZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ1JvdXRlRHJvcGRvd24nLCB7IHN0YXRpYzogZmFsc2UgfSkgcm91dGVSZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ1B1cnBvc2VEcm9wZG93bicsIHsgc3RhdGljOiBmYWxzZSB9KSBwdXJwb3NlUmVmITogRWxlbWVudFJlZjtcclxuXHJcbiAgQE91dHB1dCgpIGNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHN1Ym1pdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ3NlbGVjdEFjdGlvbkRyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgc2VsZWN0QWN0aW9uRHJvcGRvd25SZWYhOiBFbGVtZW50UmVmO1xyXG4gIHNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgZG9zZURhdGEgPSBbXTtcclxuICBmcmVxdWVuY3lEYXRhID0gW107XHJcbiAgc2VuZHRvcGhhcm1hY3lEYXRhOiBhbnkgPSBbXTtcclxuICBmb29kRGF0YSA9IFtdO1xyXG4gIHB1cnBvc2VEYXRhID0gW107XHJcbiAgcm91dGVEYXRhID0gW107XHJcbiAgY2Vhc2VEYXRhID0gW107XHJcbiAgaW5zdHJ1Y3Rpb25EYXRhOiBhbnkgPSBbXTtcclxuICByb3V0ZURhdGFGaWx0ZXIgPSAnJztcclxuICBJbnN0cnVjdGlvbklkID0gJyc7XHJcbiAgLy8gdGltZXI6IGFueTtcclxuICAvL3dhaXRUaW1lID0gMjUwMDtcclxuICBpc1N0aWxsU2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgcGFnZSA9IDE7XHJcbiAgc2VsZWN0ZWRNZWRpY2luZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgc2VsZWN0UEJUTkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgc2VsZWN0RG9zZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgc2VsZWN0RnJlcURyb3Bkb3duID0gZmFsc2U7XHJcbiAgc2VsZWN0c3RwRHJvcGRvd24gPSBmYWxzZTtcclxuICBzZWxlY3RGb29kRHJvcGRvd24gPSBmYWxzZTtcclxuICBzZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSB0cnVlO1xyXG4gIHNlbGVjdFJvdXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICBzZWxlY3RQdXJwb3NlRHJvcGRvd24gPSBmYWxzZTtcclxuICBtZWRpU2VhcmNoVmFsdWUgPSAnJztcclxuICBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uID0gJyc7XHJcbiAgc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICBmYXZNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gIHNlYXJjaGVkTWVkaWNpbmVMaXN0OiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWw6IGFueSA9IFtdO1xyXG4gIG9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gIHJ4T25seVBCUyA9IGZhbHNlO1xyXG4gIHJ4UHJpdmF0ZSA9IGZhbHNlO1xyXG4gIHJlc3RyaWN0aW9ucyA9IG51bGw7XHJcbiAgaXNTaG93UmVzdHJpY3Rpb25zID0gZmFsc2U7XHJcbiAgcHJlc2NyaWJlQVNfUEJTID0gdHJ1ZTtcclxuICBwcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICBicmFuZE1lZGljcHJvZHVjdElkID0gJyc7XHJcbiAgYnJhbmRNZWRpY3Bic0NvZGUgPSAnJztcclxuICBicmFuZE1lZGljUXR5ID0gJyc7XHJcbiAgYnJhbmRNZWRpY1JlcCA9ICcnO1xyXG4gIHNlbGVjdGVkQnJhbmRJbmRleCA9ICcnO1xyXG4gIG1vbGVjdWxlTmFtZVRleHQgPSAnJztcclxuICBtb2xlY3VsZU5hbWVUeXBlID0gJyc7XHJcbiAgbW9sZWN1bGVTdHJlbmd0aFRleHQgPSAnJztcclxuICBpc1J0cG1OZXh0ID0gZmFsc2U7XHJcbiAgc2VsZWN0aW9uYnRuTG9hZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICBpc05vblBic0ZsYWc6IGFueSA9IGZhbHNlO1xyXG4gIGFib3J0QnRuRmxhZyA9IGZhbHNlO1xyXG4gIGFib3J0ZGlzYWJsZSA9IGZhbHNlO1xyXG4gIHJlc3BvbnNlRGF0YTogYW55ID0ge1xyXG4gICAgaXNBYm9ydDogZmFsc2UsXHJcbiAgICBpc1ByZXNjcmliZTogZmFsc2UsXHJcbiAgICBhYm9ydFN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgcHJlc2NyaWJlU3VjY2VzczogZmFsc2UsXHJcbiAgICBwcmVzY3JpYmVkYXRhOiBcIlwiLFxyXG4gICAgYWJvcnRNc2c6IFwiXCIsXHJcbiAgICBQcmVzY3JpYmVNc2c6IFwiXCIsXHJcbiAgICBwcmVzY3JpYmVFcnJvcjogZmFsc2UsXHJcbiAgICBhYm9ydEVycm9yOiBmYWxzZSxcclxuICAgIHByZXNjcmliZUVycl9jb2RlOiBcIlwiLFxyXG4gICAgYWJvcnRFcnJfY29kZTogXCJcIixcclxuICAgIGJvZHk6IFwiXCJcclxuICB9XHJcbiAgcHJvZEhpZGRlbk5hbWUgPSBcIlwiO1xyXG4gIFByb2R1Y3RUeXBlID0gXCJcIjtcclxuICBQcm9kdWN0U2VhcmNoTmFtZSA9IFwiXCI7XHJcbiAgc2VhcmNoTWVkaWNpbmVzTGVuZ3RoOiBhbnkgPSBcIlwiO1xyXG4gIHNlYXJjaE1lZGljaW5lc1BhZ2VOdW1iZXIgPSAxO1xyXG4gIHNlYXJjaEJ5bmFtZUxlbmd0aDogYW55ID0gXCJcIjtcclxuICBzZWFyY2hCeW5hbWVQYWdlTnVtYmVyID0gMTtcclxuICBpc2VwcmlzY3JpYmVwcmludCA9IGZhbHNlO1xyXG4gIGVkaXRJbnN0cnVjdGlvbkZsYWcgPSBmYWxzZTtcclxuICBQcmltYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gIFNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICBwcmVzY3JpYmVBU19SUEJTX1VSQSA9IHRydWU7XHJcbiAgdGVtcEluc3RydWN0aW9uRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gIGlzUHJlc2NyaWJlQXNQcml2YXRlT25seSA9IGZhbHNlO1xyXG4gIHRlbXBBdXRob3JpdHlGb3JtTm8gPSBcIlwiO1xyXG4gIGNsaWVudElkOiBhbnkgPSBcIlwiO1xyXG4gIHNob3dGYXZvdXJpdGVNZWQgPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdyeHdpZGdldHMnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250ZW50ITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCd0b29sdGlwZGVtbycpIG15VGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3Rlc3QnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0b29sdGlwITogbnVsbDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlLFxyXG4gICAgcHVibGljIGNvbW1vblNlcnZpY2VzOiBDb21tb25TZXJ2aWNlcyxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgY2hhbmdlZGV0ZWN0OiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSB2aWV3UmVmQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICkge1xyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXBvcF93aWQnLCBgMTIwMHB4YCk7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcG9wdXB3JywgYDEyMDBweGApO1xyXG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWhlYWRlcnBhZGRpbmcnLCBgMHB4YCk7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tcG9wdXBoJywgYDY1MHB4YCk7XHJcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0taGVhZGVyZm9udHdlaWdodCcsIGA0MDBgKTtcclxuICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcclxuICAgICAgICB0aGlzLmhpZGVUb29sVGlwKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGlkZVRvb2xUaXAoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy50b29sdGlwKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMudG9vbHRpcCk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJoaWRlVG9vbFRpcFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbmNsaWNrKGV2ZW50OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NOYW1lID09IFwicnhfdG9vbHRpcF9pbm5lcl9ib3hcIiB8fCBldmVudC50YXJnZXQuY2xhc3NOYW1lLmluY2x1ZGVzKFwiX19yZWFjdF9jb21wb25lbnRfdG9vbHRpcFwiKSkge1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChldmVudC50YXJnZXQuaWQgPT0gJ3Nob3ctdG9vbHRpcC1pZCcpIHtcclxuICAgICAgICAgIHRoaXMuaGlkZVRvb2xUaXAoKTtcclxuICAgICAgICAgIGlmICh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7IHRoaXMuY3JlYXRlVG9vbFRpcChldmVudCkgfVxyXG4gICAgICAgIH0gZWxzZSB7IHRoaXMuaGlkZVRvb2xUaXAoKTsgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIm9uY2xpY2tcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY2xpZW50SWQgPSB0aGlzLmNvbW1vblNlcnZpY2VzLmdldENyZWRldGlhbCgpO1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmlwdGlvbikge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xvc2VFcnJvclJlc3BvbnNlID0gbnVsbDtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLmdldEFsbE1pbXNWYWx1ZSgpO1xyXG4gICAgICB0aGlzLmdldEluc3RydWN0aW9uVmFsdWVzKCk7XHJcbiAgICAgIHRoaXMuZ2V0RmF2b3VydGllc0xpc3QoKTtcclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmlwdGlvbikge1xyXG4gICAgICAgIHRoaXMuc2V0RWRpdFZhbHVlcyh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0KVxyXG4gICAgICAgICAgdGhpcy5nZXRSZXN0cmljdGVkTWVkaWNpbmUoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscyA9IHt9O1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuaWhpTnVtYmVyID0gdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5paGlOdW1iZXIgPT0gbnVsbCB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmloaU51bWJlciA9PSB1bmRlZmluZWQgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5paGlOdW1iZXIgPT0gXCJcIiA/IDAgOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmloaU51bWJlclxyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5ocGlvTnVtYmVyID0gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMuaHBpb051bWJlciA9PSBudWxsIHx8IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLmhwaW9OdW1iZXIgPT0gdW5kZWZpbmVkIHx8IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLmhwaW9OdW1iZXIgPT0gXCJcIiA/IDAgOiB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5ocGlvTnVtYmVyXHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy5ocGlpTnVtYmVyID0gdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLmhwaWlOdW1iZXIgPT0gbnVsbCB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMuaHBpaU51bWJlciA9PSB1bmRlZmluZWQgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLmhwaWlOdW1iZXIgPT0gXCJcIiA/IDAgOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMuaHBpaU51bWJlclxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJuZ09uSW5pdFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJlc3RyaWN0ZWRNZWRpY2luZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuUEhZU0lDSUFOLkdFVF9SRVNUUklDVEVEX01FRElDSU5FKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlOyB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiUnhDb21wb25lbnRcIiwgXCJnZXRSZXN0cmljdGVkTWVkaWNpbmVcIik7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCA9IHJlcy5yZXNwb25zZTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHM/LnByb2R1Y3RJZCkpIHtcclxuICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0LmZpbmRJbmRleCgoeDogeyBwcm9kdWN0SWQ6IGFueTsgfSkgPT4geC5wcm9kdWN0SWQgPT0gTnVtYmVyKHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnByb2R1Y3RJZCkpO1xyXG4gICAgICAgICAgICAgIHZhciBzZWxlY3RlZGRhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRkYXRhKSAmJiBzZWxlY3RlZGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdC51bnNoaWZ0KHNlbGVjdGVkZGF0YVswXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0UmVzdHJpY3RlZE1lZGljaW5lXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldFJlc3RyaWN0ZWRNZWRpY2luZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBbXTtcclxuICAgICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldFJlc3RyaWN0ZWRNZWRpY2luZVwiKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0UmVzdHJpY3RlZE1lZGljaW5lXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoZGF0YTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeGlkID0gXCJcIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWFyY2hBcGlTdG9wRmxhZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHZhciB2YWx1ZSA9IGRhdGEgIT0gbnVsbCA/IGRhdGEgOiB0aGlzLmNvbW1vblNlcnZpY2VzLmNsb3NlRXJyb3JSZXNwb25zZSAhPSBudWxsIHx8IHRoaXMuY29tbW9uU2VydmljZXMuY2xvc2VFcnJvclJlc3BvbnNlICE9IHVuZGVmaW5lZCA/IHRoaXMuY29tbW9uU2VydmljZXMuY2xvc2VFcnJvclJlc3BvbnNlIDogbnVsbDtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbG9zZUVycm9yUmVzcG9uc2UgPSBudWxsO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlbW92ZUVyclRvYXN0KCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuICAgICAgdGhpcy5jbG9zZUV2ZW50LmVtaXQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJjbG9zZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNlYXNlUHJlc2NyaWJlTWVkKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tTdGF0dXNBbmRTY3JpcHR0eXBlKHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnNjcmlwdFR5cGUsIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cywgMikpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID0gZmFsc2U7IHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oQ2Vhc2VQb3B1cENvbXBvbmVudCwgdGhpcy5jb250ZW50LCB0aGlzLmNlYXNlRGF0YSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAhPSBudWxsICYmIHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKFwiXCIsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCB0cnVlLCByZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImNlYXNlUHJlc2NyaWJlTWVkXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsUHJlc2NyaWJlTWVkKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tTdGF0dXNBbmRTY3JpcHR0eXBlKHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnNjcmlwdFR5cGUsIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cywgNCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID0gZmFsc2U7IHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oQ2xvc2VQb3B1cENvbXBvbmVudCwgdGhpcy5jb250ZW50LCAxKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICE9IG51bGwgJiYgcmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoXCJcIiwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHRydWUsIHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZShyZXMuZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChyZXMgIT0gbnVsbCAmJiByZXMuaXNEaXNwZW5zZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKENvbmZpcm1QYXRpZW50Q29udGFjdERldGFpbHNDb21wb25lbnQsIHRoaXMuY29udGVudCwgMikuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmIGRhdGEuZmxhZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKENlYXNlUG9wdXBDb21wb25lbnQsIHRoaXMuY29udGVudCwgdGhpcy5jZWFzZURhdGEpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgIT0gbnVsbCAmJiByZXNwb25zZS5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoXCJcIiwgcmVzcG9uc2UucmVzcG9uc2VfbWVzc2FnZSwgdHJ1ZSwgcmVzcG9uc2UuZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiY2FuY2VsUHJlc2NyaWJlTWVkXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsRHJhZnQoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja1N0YXR1c0FuZFNjcmlwdHR5cGUodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZSwgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLCA0KSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aW9uQnRuRHJvcGRvd24gPSBmYWxzZTsgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZGlhbG9nb3BlbihDbG9zZVBvcHVwQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIDIpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgIT0gbnVsbCAmJiByZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShcIlwiLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgdHJ1ZSwgcmVzLmRhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKHJlcy5kYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJjYW5jZWxEcmFmdFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlaXNzdWVQcmVzY3JpYmVNZWQoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja1N0YXR1c0FuZFNjcmlwdHR5cGUodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZSwgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLCAzKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aW9uQnRuRHJvcGRvd24gPSBmYWxzZTsgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZGlhbG9nb3BlbihSZWlzc3VlUG9wdXBDb21wb25lbnQsIHRoaXMuY29udGVudCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAhPSBudWxsICYmIHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKFwiXCIsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCB0cnVlLCByZXMuZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2UocmVzLmRhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInJlaXNzdWVQcmVzY3JpYmVNZWRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmludFByZXNjcmliZU1lZCgpIHtcclxuICAgIHZhciBwYXlsb2FkID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja1N0YXR1c0FuZFNjcmlwdHR5cGUodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZSwgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLCAxKSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0QWN0aW9uQnRuRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbmJ0bkxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgICByZXF1ZXN0X3R5cGU6IFwicGFyYW1ldGVyXCIsXHJcbiAgICAgICAgICByeElkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4aWQsXHJcbiAgICAgICAgICB0eXBlOiBcIjFcIixcclxuICAgICAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5HZXQoY29uZmlnLlBIWVNJQ0lBTi5SWF9QUklOVCArIHRoaXMuY29tbW9uU2VydmljZXMucnhpZCArIFwiJnR5cGU9MSZjbGllbnRJZD1cIiArIHRoaXMuY2xpZW50SWQpLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXNwb25zZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiUnhDb21wb25lbnRcIiwgXCJwcmludFByZXNjcmliZU1lZFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXRvYihyZXNwb25zZS5maWxlKS5zcGxpdCgnJykubWFwKGNoYXIgPT4gY2hhci5jaGFyQ29kZUF0KDApKSk7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBiYmIgPSBuZXcgQmxvYihbYnl0ZUFycmF5XSwgeyB0eXBlOiBcImFwcGxpY2F0aW9uL3BkZlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmJiKTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbmV3V2luZG93ID0gd2luZG93Lm9wZW4odXJsLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdXaW5kb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdXaW5kb3cuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW50V2FybmluZ1BvcCgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShcIlwiLCByZXNwb25zZS5yZXNwb25zZV9tZXNzYWdlLCB0cnVlLCByZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXNwb25zZS5yZXNwb25zZV9tZXNzYWdlLCByZXNwb25zZS5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJpbnRQcmVzY3JpYmVNZWRcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UsICdlcnJvcicpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzcG9uc2UuZXJyb3JfY29kZSwgcmVzcG9uc2UucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uYnRuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25idG5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcmludFByZXNjcmliZU1lZFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25idG5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcmludFByZXNjcmliZU1lZFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5zZWxlY3Rpb25idG5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcmludFByZXNjcmliZU1lZFwiLCBwYXlsb2FkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrU3RhdHVzQW5kU2NyaXB0dHlwZShzY3JpcHR0eXBlOiBhbnksIHN0YXR1czogYW55LCBmbGFnOiBhbnkpOiBCb29sZWFuIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHN0YXR1cykgJiYgc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT0gJ3ByZXNjcmliZWQnKSB7XHJcbiAgICAgICAgaWYgKGZsYWcgPT0gMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmbGFnID09IDIpIHtcclxuICAgICAgICAgIHJldHVybiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNjcmlwdHR5cGUpICYmIHNjcmlwdHR5cGUudG9Mb3dlckNhc2UoKSA9PSAnZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmbGFnID09IDMpIHtcclxuICAgICAgICAgIHJldHVybiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNjcmlwdHR5cGUpICYmIHNjcmlwdHR5cGUudG9Mb3dlckNhc2UoKSA9PSAnZScgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3kgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5ID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmxhZyA9PSA0KSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzdGF0dXMpICYmIHN0YXR1cy50b0xvd2VyQ2FzZSgpID09ICdkcmFmdCcgJiYgZmxhZyA9PSA0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImNoZWNrU3RhdHVzQW5kU2NyaXB0dHlwZVwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGFnZU51bWJlck9uZVRvTmV4dCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzUwLm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzUwLmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl81MC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl81MC5tZXNzYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlID0gU3RyaW5nKHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSkudHJpbSgpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRvc2VTZWFyY2hWYWx1ZSA9IFN0cmluZyh0aGlzLmNvbW1vblNlcnZpY2VzLmRvc2VTZWFyY2hWYWx1ZSkudHJpbSgpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZSA9IFN0cmluZyh0aGlzLmNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZS50cmltKCkpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSA9IFN0cmluZyh0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSkudHJpbSgpO1xyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZG9zZVNlYXJjaFZhbHVlKSAmJiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZm9vZFNlYXJjaFZhbHVlKSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZnJlcVNlYXJjaFZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzU0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzU0LmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl81NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl81NC5tZXNzYWdlKTtcclxuICAgICAgICB0aGlzLmNsZWFySW5zdHJ1Y3Rpb24oKTtcclxuICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCkgfHwgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCkgPD0gMCB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSBcIm5hblwiKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNTUubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNTUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzU1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzU1Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCA9PSBcIk5hTlwiKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsID0gXCIwXCI7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucm91dGVTZWFyY2hWYWx1ZSA9IFN0cmluZyh0aGlzLmNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWUpLnRyaW0oKTtcclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNzUubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNzUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzc1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzc1Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdERhdGUpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNDcubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNDcuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzQ3LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzQ3Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc3RhcnREYXRlKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzQ4Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzQ4LmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl80OC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl80OC5tZXNzYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmVuZERhdGUpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNDkubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNDkuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzQ5LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzQ5Lm1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdldFRyYWRlTmFtZURpc3BsYXkoKTtcclxuICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMudG9Mb3dlckNhc2UoKSAhPSAnZHJhZnQnICYmIHRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlbW92ZUVyclRvYXN0KCk7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5wYWdlICsgMTtcclxuICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICB2YXIgc2NoZWR1bGVOdW1iZXIgPSB0aGlzLmNvbW1vblNlcnZpY2VzLmdldFNjaGVkdWxlTnVtYmVyKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgbGV0IHJlc3RlY3RlZFN0YXRlcyA9IFsnTlNXJywgJ0FDVCcsICdXQScsICdRTEQnLCAnTlQnLCAnVEFTJ107XHJcbiAgICAgICAgbGV0IHBhdGllbnRTdGF0ZXMgPSB0aGlzLmdldFN0YXRlQ29kZUZyb21TdGF0ZU5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5zdGF0ZSkudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBpZiAoc2NoZWR1bGVOdW1iZXIudG9Mb3dlckNhc2UoKSA9PSBcInM4XCIgJiYgcmVzdGVjdGVkU3RhdGVzLmluZGV4T2YocGF0aWVudFN0YXRlcykgIT0gLTEgJiYgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsKSA+IDApIHtcclxuICAgICAgICAgIGlmICgodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwpIHx8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwpID09IDApKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gZXJyb3Jjb25maWcuZXJyb3JfNTYubWVzc2FnZS5yZXBsYWNlKFwiJDBcIiwgcGF0aWVudFN0YXRlcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKG1lc3NhZ2UsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNTYuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl81Ni5jb2RlLCBtZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc3RhdGVTY2hlZHVsZU51bWJlciA9IHRoaXMuZ2V0U3RhdGVTY2hlZHVsZU51bWJlcih0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pO1xyXG4gICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHN0YXRlU2NoZWR1bGVOdW1iZXIpICE9IG51bGwgJiYgc3RhdGVTY2hlZHVsZU51bWJlci5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBpZiAocGF0aWVudFN0YXRlcy50b0xvd2VyQ2FzZSgpID09IFwidGFzXCIgJiYgc3RhdGVTY2hlZHVsZU51bWJlclswXS5pbmRleE9mKFwiUzREXCIpICE9IC0xICYmIHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCkgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsID09IFwiXCIgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCA9PSBudWxsIHx8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwpID09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82OC5tZXNzYWdlLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY4LmNvZGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82OC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82OC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAocGF0aWVudFN0YXRlcy50b0xvd2VyQ2FzZSgpID09IFwibnN3XCIgJiYgc3RhdGVTY2hlZHVsZU51bWJlclswXS5pbmRleE9mKFwiUzRCXCIpICE9IC0xICYmIHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCkgPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsID09IFwiXCIgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCA9PSBudWxsIHx8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwpID09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82OS5tZXNzYWdlLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY5LmNvZGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82OS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82OS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICgodGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVZhbHVlKSkpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82Ni5tZXNzYWdlLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY2LmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82Ni5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82Ni5tZXNzYWdlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dBdXRob3JpdHlCb3godGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucywgdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUywgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSwgdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObyA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zID0gXCJcIjtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnNJZCA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgLy8gdmFyIHJ4RGlzcGxheU5hbWUgPSB0aGlzLmdldFRyYWRlTmFtZSgpO1xyXG4gICAgICAvLyBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wID09IHRydWUgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID09IHRydWUgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0udG9Mb3dlckNhc2UoKSA9PSAnZ2F1emUnKSB7XHJcbiAgICAgIC8vICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWUgPSB0aGlzLmdldEV4dGVtcFRUUE5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKTtcclxuICAgICAgLy8gICAgIHRoaXMuY29tbW9uU2VydmljZXMuZW9wRGlzcGxheU5hbWUgPSB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWU7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSA9IHJ4RGlzcGxheU5hbWU7XHJcbiAgICAgIC8vICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVvcERpc3BsYXlOYW1lID0gcnhEaXNwbGF5TmFtZTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gcnhEaXNwbGF5TmFtZS50cmltKCkgKyAnICcgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybS50cmltKCkgKyAnICcgKyAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1vbGVjdWxlU3RyZW5ndGggPT0gbnVsbCA/ICcnIDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1vbGVjdWxlU3RyZW5ndGgudHJpbSgpICsgdGhpcy5yeFN0cmVuZ3RoY2FsY3VsYXRpb24odGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSk7XHJcbiAgICAgIC8vICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSA9IHJ4RGlzcGxheU5hbWUudHJpbSgpICsgJyAnICsgKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tb2xlY3VsZVN0cmVuZ3RoID09IG51bGwgPyAnJyA6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tb2xlY3VsZVN0cmVuZ3RoLnRyaW0oKSArIHRoaXMucnhTdHJlbmd0aGNhbGN1bGF0aW9uKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbikpO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIHZhciBwcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUgPSB0aGlzLmdldFRyYWRlTmFtZSgpO1xyXG4gICAgICAvLyBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wID09IHRydWUgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID09IHRydWUgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0udG9Mb3dlckNhc2UoKSA9PSAnZ2F1emUnKSB7XHJcbiAgICAgIC8vICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlKSB7XHJcbiAgICAgIC8vICAgICBsZXQgZXh0ZW1wVFRQTmFtZSA9IHRoaXMuZ2V0RXh0ZW1wVFRQTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pO1xyXG4gICAgICAvLyAgICAgbGV0IFBJdGVtVGhyZWUgPSBleHRlbXBUVFBOYW1lLmxhc3RJbmRleE9mKCdbJyk7XHJcbiAgICAgIC8vICAgICBsZXQgUEl0ZW1UaHJlZTEgPSBleHRlbXBUVFBOYW1lLnNsaWNlKDAsIFBJdGVtVGhyZWUpO1xyXG4gICAgICAvLyAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUgPSBQSXRlbVRocmVlMS50cmltKCk7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gICAgIGxldCBQSXRlbVRocmVlMiA9IHByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZS5sYXN0SW5kZXhPZignWycpO1xyXG4gICAgICAvLyAgICAgbGV0IFBJdGVtVGhyZWUzID0gcHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlLnNsaWNlKDAsIFBJdGVtVGhyZWUyKTtcclxuICAgICAgLy8gICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlID0gUEl0ZW1UaHJlZTMudHJpbSgpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgLy8gICB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZSA9IHByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZS50cmltKCkgKyAnICcgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybSArICcgJyArICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubW9sZWN1bGVTdHJlbmd0aCA9PSBudWxsID8gJycgOiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubW9sZWN1bGVTdHJlbmd0aC50cmltKCkgKyB0aGlzLnJ4U3RyZW5ndGhjYWxjdWxhdGlvbk5ldyh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pKTtcclxuICAgICAgLy8gfVxyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlLnRvTG93ZXJDYXNlKCkgIT0gJ25vbiBwYnMnICYmIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMudG9Mb3dlckNhc2UoKSAhPSAncHJpdmF0ZScgJiYgKCghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlXaXRoVW5pdEZsYWcgPyBwYXJzZUZsb2F0KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cykgKyAwLjUgOiAxKSA8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwpIHx8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzKSA8IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCkpKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oSXNBdXRob3JpdHlDb21wb25lbnQsIHRoaXMuY29udGVudCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4QXV0aG9yaXR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObyA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnMgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5tb2xlY3VsZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYWNncywgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1vbGVjdWxlU3RyZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSBmYWxzZSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmxtYmMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5jbHVkZWJyYW5kcG9wb3BlbigpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvc2VGcmVxVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlV2FyaW5nUG9wT3BlbihzY2hlZHVsZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVkdWxlTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT0gXCJzOFwiICYmIHRoaXMuY29tbW9uU2VydmljZXMuaXNTOFdhcm5pbmdOZXh0ID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5TOFdhcmluZ1BvcE9wZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlbW92ZUVyclRvYXN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvc2VGcmVxVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVdhcmluZ1BvcE9wZW4oc2NoZWR1bGVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlZHVsZU51bWJlci50b0xvd2VyQ2FzZSgpID09IFwiczhcIiAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmlzUzhXYXJuaW5nTmV4dCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLlM4V2FyaW5nUG9wT3BlbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhBdXRob3JpdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yZW1vdmVFcnJUb2FzdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5wYWdlICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5V2l0aFVuaXRGbGFnID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzIDogMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCA9IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEVuZERhdGVDYWxjdWxhdGVyKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRvc2VGcmVxVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVdhcmluZ1BvcE9wZW4oc2NoZWR1bGVOdW1iZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVtb3ZlRXJyVG9hc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgKyAxO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSBmYWxzZSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmxtYmMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5pbmNsdWRlYnJhbmRwb3BvcGVuKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLmRvc2VGcmVxVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVXYXJpbmdQb3BPcGVuKHNjaGVkdWxlTnVtYmVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2NoZWR1bGVOdW1iZXIudG9Mb3dlckNhc2UoKSA9PSBcInM4XCIgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1M4V2FybmluZ05leHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuUzhXYXJpbmdQb3BPcGVuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yZW1vdmVFcnJUb2FzdCgpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZSArIDE7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRvc2VGcmVxVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlV2FyaW5nUG9wT3BlbihcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlbW92ZUVyclRvYXN0KCk7XHJcbiAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgKyAxO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwYWdlTnVtYmVyT25lVG9OZXh0XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5jbHVkZWJyYW5kcG9wb3BlbigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMubW9sZWN1bGUodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFjZ3MsIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tb2xlY3VsZVN0cmVuZ3RoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKEJyYW5kSW5jbHVkZUNvbXBvbmVudCwgdGhpcy5jb250ZW50KS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEJyYW5kRm9ybXVsYXRpb24gPVxyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb247XHJcbiAgICAgICAgICB2YXIgbW9sZWN1bGVkYXRhID0ge1xyXG4gICAgICAgICAgICBtb2xlY3VsZU5hbWVUZXh0OiB0aGlzLm1vbGVjdWxlTmFtZVRleHQsXHJcbiAgICAgICAgICAgIG1vbGVjdWxlTmFtZVR5cGU6IHRoaXMubW9sZWN1bGVOYW1lVHlwZSxcclxuICAgICAgICAgICAgbW9sZWN1bGVTdHJlbmd0aFRleHQ6IHRoaXMubW9sZWN1bGVTdHJlbmd0aFRleHQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkTWVkaWNpbmVMaXN0OiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZGlhbG9nb3BlbihBdmFpbGFibGVGb3JtdWxhdGlvbnNDb21wb25lbnQsIHRoaXMuY29udGVudCwgbW9sZWN1bGVkYXRhKS5zdWJzY3JpYmUoKHZhbDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWwucmVzcG9uc2VmbGFnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEJyYW5kRm9ybXVsYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEJyYW5kRm9ybXVsYXRpb24gIT0gJycgJiZcclxuICAgICAgICAgICAgICAgIHZhbC5mbGFnXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkNvbmZpcm1BbHRlckJyYW5kKFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkQnJhbmRGb3JtdWxhdGlvbiAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEJyYW5kRm9ybXVsYXRpb24gIT0gJydcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRCcmFuZEZvcm11bGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCcmFuZEluZGV4ICE9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRCcmFuZEluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgOiAwXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJyYW5kTWVkaWNwcm9kdWN0SWQgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRNZWRpY3Bic0NvZGUgPSAnJztcclxuICAgICAgICAgICAgICAgIHRoaXMuYnJhbmRNZWRpY1F0eSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icmFuZE1lZGljUmVwID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYnJhbmRNZWRpY3Byb2R1Y3RJZCA9ICcnO1xyXG4gICAgICAgICAgICAgIHRoaXMuYnJhbmRNZWRpY3Bic0NvZGUgPSAnJztcclxuICAgICAgICAgICAgICB0aGlzLmJyYW5kTWVkaWNRdHkgPSAnJztcclxuICAgICAgICAgICAgICB0aGlzLmJyYW5kTWVkaWNSZXAgPSAnJztcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YXIgc2NoZWR1bGVOdW1iZXIgPSB0aGlzLmNvbW1vblNlcnZpY2VzLmdldFNjaGVkdWxlTnVtYmVyKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgICBpZiAodGhpcy5kb3NlRnJlcVZhbGlkYXRpb24oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlV2FyaW5nUG9wT3BlbihzY2hlZHVsZU51bWJlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVkdWxlTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT0gXCJzOFwiICYmIHRoaXMuY29tbW9uU2VydmljZXMuaXNTOFdhcm5pbmdOZXh0ID09IHRydWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLlM4V2FyaW5nUG9wT3BlbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVtb3ZlRXJyVG9hc3QoKTtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2UgPSB0aGlzLnBhZ2UgKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaW5jbHVkZWJyYW5kcG9wb3BlblwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvc2VGcmVxVmFsaWRhdGlvbigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUpIHx8IHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSkgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZm9vZFNlYXJjaFZhbHVlKSB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlKSB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZG9zZUZyZXFWYWxpZGF0aW9uXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgUzhXYXJpbmdQb3BPcGVuKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIGRhdGEgPSBcIldhcm5pbmchIFRoaXMgaXMgYW4gUzggZHJ1Zy4gWW91IG1pZ2h0IG5lZWQgdG8gaGFuZCB3cml0ZSB5b3VyIHNpZ25hdHVyZSwgcXVhbnRpdHkgaW4gd29yZHMgYW5kIGZpZ3VyZXMgYW5kL29yIG90aGVyIGRldGFpbHMgYXMgcGVyIHRoZSBzdGF0ZSByZWd1bGF0aW9uc1wiO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oUmVhbFRpbWVQcmVzY3JpcHRpb25Nb25pdG9yaW5nQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIGRhdGEpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1M4V2FybmluZ05leHQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVtb3ZlRXJyVG9hc3QoKTtcclxuICAgICAgICAgIHRoaXMucGFnZSA9IHRoaXMucGFnZSArIDE7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiUzhXYXJpbmdQb3BPcGVuXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVXYXJpbmdQb3BPcGVuKHNjaGVkdWxlTnVtYmVyOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBkYXRhID0gXCJFbnN1cmUgYWxsIG5lY2Vzc2FyeSBmaWVsZHMgYXJlIGZpbGxlZCB0byBhdm9pZCBwaGFybWFjeSByZWplY3Rpb24gZHVlIHRvIGluY29tcGxldGUgaW5mb3JtYXRpb24gLSBEb3NlLCBGcmVxdWVuY3ksIFJvdXRlIGV0Yy5cIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKFJlYWxUaW1lUHJlc2NyaXB0aW9uTW9uaXRvcmluZ0NvbXBvbmVudCwgdGhpcy5jb250ZW50LCBkYXRhKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzY2hlZHVsZU51bWJlcikgJiYgc2NoZWR1bGVOdW1iZXIudG9Mb3dlckNhc2UoKSA9PSBcInM4XCIgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1M4V2FybmluZ05leHQgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLlM4V2FyaW5nUG9wT3BlbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVtb3ZlRXJyVG9hc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5wYWdlICsgMTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJ2YWxpZGF0ZVdhcmluZ1BvcE9wZW5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBDb25maXJtQWx0ZXJCcmFuZChtZWQ6IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuYnJhbmRNZWRpY3Byb2R1Y3RJZCA9ICcnO1xyXG4gICAgICB0aGlzLmJyYW5kTWVkaWNwYnNDb2RlID0gJyc7XHJcbiAgICAgIHRoaXMuYnJhbmRNZWRpY1F0eSA9ICcnO1xyXG4gICAgICB0aGlzLmJyYW5kTWVkaWNSZXAgPSAnJztcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25EYXRhT25jaGFuZ2VvZk1lZGljaW5lKG1lZCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgdmFyIE1lZCA9IFtdO1xyXG4gICAgICBNZWQucHVzaChtZWQpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gTWVkO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCA9IE1lZDtcclxuICAgICAgdGhpcy5zZWxlY3RGb3JtdWxhdGlvbihtZWQsIDApO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJDb25maXJtQWx0ZXJCcmFuZFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vbGVjdWxlKGFjZ3M6IGFueSwgbW9sZWN1bGVTdHJlbmd0aDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShhY2dzKSkge1xyXG4gICAgICAgIGlmIChhY2dzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICBpZiAoYWNnc1swXS5hY2dOYW1lLmluZGV4T2YoJysnKSAhPSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vbGVjdWxlTmFtZVRleHQgPSBhY2dzWzBdLmFjZ05hbWU7XHJcbiAgICAgICAgICAgIHRoaXMubW9sZWN1bGVOYW1lVHlwZSA9ICdTMic7XHJcbiAgICAgICAgICAgIHRoaXMubW9sZWN1bGVTdHJlbmd0aFRleHQgPSBtb2xlY3VsZVN0cmVuZ3RoO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tb2xlY3VsZU5hbWVUZXh0ID0gYWNnc1swXS5hY2dOYW1lO1xyXG4gICAgICAgICAgICB0aGlzLm1vbGVjdWxlTmFtZVR5cGUgPSAnUzEnO1xyXG4gICAgICAgICAgICB0aGlzLm1vbGVjdWxlU3RyZW5ndGhUZXh0ID0gbW9sZWN1bGVTdHJlbmd0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKDEgPCBhY2dzLmxlbmd0aCkge1xyXG4gICAgICAgICAgdmFyIG1vbGVjdWxlcyA9IFtdO1xyXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG1vbGVjdWxlcy5wdXNoKGFjZ3NbaV0uYWNnTmFtZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm1vbGVjdWxlTmFtZVRleHQgPSBtb2xlY3VsZXMuam9pbignLCcpO1xyXG4gICAgICAgICAgdGhpcy5tb2xlY3VsZU5hbWVUeXBlID0gJ00nO1xyXG4gICAgICAgICAgdGhpcy5tb2xlY3VsZVN0cmVuZ3RoVGV4dCA9IG1vbGVjdWxlU3RyZW5ndGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubW9sZWN1bGVOYW1lVGV4dCA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIm1vbGVjdWxlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmFjaygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMucGFnZSA9IDE7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiYmFja1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE1lZGljaW5lRHJvcGRvd25MaXN0KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAvLyB0aGlzLnNob3dGYXZvdXJpdGVNZWQgPSBmYWxzZTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIk1lZGljaW5lRHJvcGRvd25MaXN0XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJlc2NyaWJlRHJvcGRvd24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNlbGVjdFBCVE5Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlUEJUTik7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaWJlRHJvcGRvd25cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBY3Rpb25Ecm9wZG93bm9wZW4oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGVBY3Rpb25CdG4pO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlbGVjdEFjdGlvbkRyb3Bkb3duXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG9zZURyb3Bkb3duKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3REb3NlRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZURvc2UpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImRvc2VEcm9wZG93blwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZyZXFEcm9wZG93bigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0RnJlcURyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGVGcmVxKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJmcmVxRHJvcGRvd25cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdHBWYWx1ZURyb3Bkb3duKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RzdHBEcm9wZG93biA9IHRydWU7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlc3RwKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzdHBWYWx1ZURyb3Bkb3duXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9vZERyb3Bkb3duKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RGb29kRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZUZvb2QpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImZvb2REcm9wZG93blwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluc3RydWN0aW9uRHJvcGRvd24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZUluc3RydWN0aW9uKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJpbnN0cnVjdGlvbkRyb3Bkb3duXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm91dGVEcm9wZG93bigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Um91dGVEcm9wZG93biA9IHRydWU7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGVQdXJwb3NlKTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGVSb3V0ZSk7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicm91dGVEcm9wZG93blwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1cnBvc2VEcm9wZG93bigpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0UHVycG9zZURyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgdGhpcy5oYW5kbGVDbGlja091dHNpZGVQdXJwb3NlKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwdXJwb3NlRHJvcGRvd25cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMud3JhcHBlclJlZiAhPSBudWxsICYmIHRoaXMud3JhcHBlclJlZiAhPSB1bmRlZmluZWQgJiYgdGhpcy53cmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQgJiZcclxuICAgICAgICAhdGhpcy53cmFwcGVyUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaGFuZGxlQ2xpY2tPdXRzaWRlXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZUFjdGlvbkJ0biA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RBY3Rpb25Ecm9wZG93blJlZiAhPSBudWxsICYmIHRoaXMuc2VsZWN0QWN0aW9uRHJvcGRvd25SZWYgIT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0QWN0aW9uRHJvcGRvd25SZWYubmF0aXZlRWxlbWVudCAmJlxyXG4gICAgICAgICF0aGlzLnNlbGVjdEFjdGlvbkRyb3Bkb3duUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaGFuZGxlQ2xpY2tPdXRzaWRlQWN0aW9uQnRuXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2tPdXRzaWRlUEJUTiA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wcmVzY3JpYmVEcm9wZG93blJlZiAhPSBudWxsICYmIHRoaXMucHJlc2NyaWJlRHJvcGRvd25SZWYgIT0gdW5kZWZpbmVkICYmIHRoaXMucHJlc2NyaWJlRHJvcGRvd25SZWYubmF0aXZlRWxlbWVudCAmJlxyXG4gICAgICAgICF0aGlzLnByZXNjcmliZURyb3Bkb3duUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFBCVE5Ecm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaGFuZGxlQ2xpY2tPdXRzaWRlUEJUTlwiKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBoYW5kbGVDbGlja091dHNpZGVEb3NlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmRvc2VSZWYgIT0gbnVsbCAmJiB0aGlzLmRvc2VSZWYgIT0gdW5kZWZpbmVkICYmIHRoaXMuZG9zZVJlZi5uYXRpdmVFbGVtZW50ICYmXHJcbiAgICAgICAgIXRoaXMuZG9zZVJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3REb3NlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImhhbmRsZUNsaWNrT3V0c2lkZURvc2VcIik7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgaGFuZGxlQ2xpY2tPdXRzaWRlRnJlcSA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5mcmVxUmVmICE9IG51bGwgJiYgdGhpcy5mcmVxUmVmICE9IHVuZGVmaW5lZCAmJiB0aGlzLmZyZXFSZWYubmF0aXZlRWxlbWVudCAmJlxyXG4gICAgICAgICF0aGlzLmZyZXFSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0RnJlcURyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJoYW5kbGVDbGlja091dHNpZGVGcmVxXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZXN0cCA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zdHBSZWYgIT0gbnVsbCAmJiB0aGlzLnN0cFJlZiAhPSB1bmRlZmluZWQgJiYgdGhpcy5zdHBSZWYubmF0aXZlRWxlbWVudCAmJlxyXG4gICAgICAgICF0aGlzLnN0cFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RzdHBEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaGFuZGxlQ2xpY2tPdXRzaWRlc3RwXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZUZvb2QgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZm9vZFJlZiAhPSBudWxsICYmIHRoaXMuZm9vZFJlZiAhPSB1bmRlZmluZWQgJiYgdGhpcy5mb29kUmVmLm5hdGl2ZUVsZW1lbnQgJiZcclxuICAgICAgICAhdGhpcy5mb29kUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdEZvb2REcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiaGFuZGxlQ2xpY2tPdXRzaWRlRm9vZFwiKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBoYW5kbGVDbGlja091dHNpZGVJbnN0cnVjdGlvbiA9IChldmVudDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5JbnN0cnVjdGlvblJlZiAhPSBudWxsICYmIHRoaXMuSW5zdHJ1Y3Rpb25SZWYgIT0gdW5kZWZpbmVkICYmIHRoaXMuSW5zdHJ1Y3Rpb25SZWYubmF0aXZlRWxlbWVudCAmJiAhdGhpcy5JbnN0cnVjdGlvblJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgJiYgIXRoaXMuZWRpdEluc3RydWN0aW9uRmxhZykge1xyXG4gICAgICAgICAgdGhpcy5JbnN0cnVjdGlvbkRlc2NyaXB0aW9uID0gXCJcIlxyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb250aWx0bGUgPSBcIlwiO1xyXG4gICAgICAgICAgdGhpcy50ZW1wSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZWRpdEluc3RydWN0aW9uRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IGZhbHNlOyB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd25MaXN0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImhhbmRsZUNsaWNrT3V0c2lkZUluc3RydWN0aW9uXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGhhbmRsZUNsaWNrT3V0c2lkZVJvdXRlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnJvdXRlUmVmICE9IG51bGwgJiYgdGhpcy5yb3V0ZVJlZiAhPSB1bmRlZmluZWQgJiYgdGhpcy5yb3V0ZVJlZi5uYXRpdmVFbGVtZW50ICYmXHJcbiAgICAgICAgIXRoaXMucm91dGVSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0Um91dGVEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGVEYXRhRmlsdGVyID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJoYW5kbGVDbGlja091dHNpZGVSb3V0ZVwiKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBoYW5kbGVDbGlja091dHNpZGVQdXJwb3NlID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnB1cnBvc2VSZWYgIT0gbnVsbCAmJiB0aGlzLnB1cnBvc2VSZWYgIT0gdW5kZWZpbmVkICYmIHRoaXMucHVycG9zZVJlZi5uYXRpdmVFbGVtZW50ICYmXHJcbiAgICAgICAgIXRoaXMucHVycG9zZVJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RQdXJwb3NlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImhhbmRsZUNsaWNrT3V0c2lkZVB1cnBvc2VcIik7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gR2VuZXJhbCBTZWFyY2hcclxuICBzZWFyY2hIYW5kbGVyKGU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25EYXRhKCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVzTGVuZ3RoID0gMDtcclxuICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZXNQYWdlTnVtYmVyID0gMTtcclxuICAgICAgbGV0IGdldE1lZGljaW5lc1ZhbHVlID0gZS50YXJnZXQudmFsdWUudHJpbSgpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVEcm9wZG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLlByaW1hcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuc2hvd0Zhdm91cml0ZU1lZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMubWVkaVNlYXJjaFZhbHVlID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgIGlmIChlLnRhcmdldC52YWx1ZS50cmltKCkubGVuZ3RoIDwgMykge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlLnRhcmdldC52YWx1ZS5sZW5ndGggPj0gMykge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgLy90aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBpZiAoIXRoaXMuaXNTdGlsbFNlYXJjaGluZykge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hNZWRzKGdldE1lZGljaW5lc1ZhbHVlLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcclxuICAgICAgICAvLyB0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gICB0aGlzLnNlYXJjaE1lZHMoZ2V0TWVkaWNpbmVzVmFsdWUpO1xyXG4gICAgICAgIC8vIH0sIHRoaXMud2FpdFRpbWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZWFyY2hIYW5kbGVyXCIpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHNlYXJjaE1lZHMoZ2V0TWVkaWNpbmVzVmFsdWU6IGFueSkge1xyXG4gICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIGlmICh0aGlzLm1lZGlTZWFyY2hWYWx1ZS50cmltKCkubGVuZ3RoIDwgMyB8fCBnZXRNZWRpY2luZXNWYWx1ZS50cmltKCkubGVuZ3RoIDwgMykge1xyXG4gICAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIHJlcXVlc3RfdHlwZTogXCJwYXJhbWV0ZXJcIixcclxuICAgICAgICBwcm9kdWN0TmFtZTogZ2V0TWVkaWNpbmVzVmFsdWVcclxuICAgICAgfVxyXG4gICAgICB0aGlzLlByb2R1Y3RTZWFyY2hOYW1lID0gZ2V0TWVkaWNpbmVzVmFsdWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VhcmNoQXBpU3RvcEZsYWcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuR0VUX01FRFNfQllfU0VBUkNIICsgJz9wcm9kdWN0TmFtZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGdldE1lZGljaW5lc1ZhbHVlKSArICcmcGFnZT0xJm5vT2ZSZWM9MTAnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hlZE1lZGljaW5lTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7IHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcInNlYXJjaE1lZHNcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0ID0gcmVzLnJlc3BvbnNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IHJlcy5yZXNwb25zZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1lZGlTZWFyY2hWYWx1ZS50cmltKCkubGVuZ3RoIDwgMykge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZ2V0TWVkaWNpbmVzVmFsdWUudHJpbSgpICE9IHRoaXMubWVkaVNlYXJjaFZhbHVlLnRyaW0oKSAmJiB0aGlzLm1lZGlTZWFyY2hWYWx1ZS50cmltKCkubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlU2VhcmNoKHRoaXMubWVkaVNlYXJjaFZhbHVlLnRyaW0oKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QubGVuZ3RoID4gNyB8fCByZXMucmVzcG9uc2UubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2UubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLk1JTVNQcmltYXJ5U2VhcmNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwic2VhcmNoTWVkc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4ocmVzLnJlc3BvbnNlX21lc3NhZ2UsICdlcnJvcicsIHJlcy5lcnJvcl9jb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICB0aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2VhcmNoTWVkc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlYXJjaE1lZHNcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlOyB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlYXJjaE1lZHNcIiwgcGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb21wbGV0ZVNlYXJjaChnZXRNZWRpY2luZXNWYWx1ZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmlzU3RpbGxTZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hNZWRzKGdldE1lZGljaW5lc1ZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiY29tcGxldGVTZWFyY2hcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0dldCBQcm9kdWN0IERldGFpbFxyXG4gIGdldFByb2R1Y3RMaXN0QnlOYW1lKHByb2RIaWRkZW5WYWx1ZTogYW55LCBwcm9kdWN0TmFtZTogYW55LCBzZWFyY2hCYXNlOiBhbnkpIHtcclxuICAgIHZhciBwYXlsb2FkID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLk1JTVNTZWNvbmRhcnlhcGkpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5NSU1TU2Vjb25kYXJ5YXBpLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWFyY2hCeW5hbWVQYWdlTnVtYmVyID0gMTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubWVkaVNlYXJjaFZhbHVlID0gdGhpcy5odG1sVG9UZXh0Q29udmVydChwcm9kdWN0TmFtZSk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBbXTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25EYXRhT25jaGFuZ2VvZk1lZGljaW5lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbik7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiA9IG51bGw7XHJcbiAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB2YXIgdHlwZSA9IHNlYXJjaEJhc2UudG9Mb3dlckNhc2UoKSA9PSAnYnJhbmRrZXknID8gJ0JLJyA6IHNlYXJjaEJhc2UudG9Mb3dlckNhc2UoKSA9PSAncHJvZHBhY2trZXknID8gJ1BQSycgOiBzZWFyY2hCYXNlLnRvTG93ZXJDYXNlKCkgPT0gJ3ZpcnR1YWxuYW1lJyA/ICdWTicgOiBzZWFyY2hCYXNlLnRvTG93ZXJDYXNlKCkgPT0gJ3Byb2R1Y3RrZXknID8gJ1BLJyA6IHNlYXJjaEJhc2UudG9Mb3dlckNhc2UoKSA9PSAncHJvZHVjdGtleWFjdGl2ZWluZ3JlZGllbnQnID8gJ1BLQScgOiBzZWFyY2hCYXNlLnRvTG93ZXJDYXNlKCkgPT0gJ2Z1bGxwaScgPyAnRlBJJyA6ICdQTic7XHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgcmVxdWVzdF90eXBlOiBcInBhcmFtZXRlclwiLFxyXG4gICAgICAgIHByb2R1Y3ROYW1lOiBwcm9kSGlkZGVuVmFsdWUsXHJcbiAgICAgICAgdHlwZTogdHlwZSxcclxuICAgICAgICBwcmVzY3JpYmVyVHlwZTogXCJNUFwiXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wcm9kSGlkZGVuTmFtZSA9IHByb2RIaWRkZW5WYWx1ZTtcclxuICAgICAgdGhpcy5Qcm9kdWN0VHlwZSA9IHR5cGU7XHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5HZXQoY29uZmlnLkdFVF9NRURTX0JZX05BTUUgKyAnP3Byb2R1Y3ROYW1lPScgKyBlbmNvZGVVUklDb21wb25lbnQocHJvZEhpZGRlblZhbHVlKSArICcmdHlwZT0nICsgdHlwZSArICcmcHJlc2NyaWJlclR5cGU9TVAmcGFnZT0nICsgdGhpcy5zZWFyY2hCeW5hbWVQYWdlTnVtYmVyICsgJyZub09mUmVjPTEwJykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hCeW5hbWVMZW5ndGggPSAwOyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsID0gW107IHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlOyB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiUnhDb21wb25lbnRcIiwgXCJnZXRQcm9kdWN0TGlzdEJ5TmFtZVwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuc2VhcmNoQXBpU3RvcEZsYWcpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBbXTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IHJlcy5yZXNwb25zZS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsID0gcmVzLnJlc3BvbnNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pc05vblBic0ZsYWcpIHtcclxuICAgICAgICAgICAgLy8gICB0aGlzLnJ4T25seU5PTlBCU0ZpbHRlcigpO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgIGlmICh0aGlzLnJ4T25seVBCUyA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnJ4T25seVBCU0ZpbHRlcigpO1xyXG4gICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgLy8gICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSByZXMucmVzcG9uc2U7XHJcbiAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIHRoaXMub25DaGVja2JveENoYW5nZSgpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0KSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0Lmxlbmd0aCA8PSAzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vbmNsaWNrTWVkaWNpbmVMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMucmVzcG9uc2UpICYmIHJlcy5yZXNwb25zZS5sZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuTUlNU1NlY29uZGFyeVNlYXJjaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5vbmNsaWNrTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcImdldFByb2R1Y3RMaXN0QnlOYW1lXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoQnluYW1lTGVuZ3RoID0gMDtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsID0gW107XHJcbiAgICAgICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldFByb2R1Y3RMaXN0QnlOYW1lXCIsIHBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoQnluYW1lTGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBbXTtcclxuICAgICAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldFByb2R1Y3RMaXN0QnlOYW1lXCIsIHBheWxvYWQpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvciwgXCJlcnJvclwiLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IDA7XHJcbiAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0UHJvZHVjdExpc3RCeU5hbWVcIiwgcGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoZWNrYm94Q2hhbmdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMucnhPbmx5UEJTICYmIHRoaXMucnhQcml2YXRlKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdCA9IHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsLmZpbHRlcigoeDogYW55KSA9PiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHgucGJzVHlwZSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMucnhPbmx5UEJTKSB7XHJcbiAgICAgICAgdGhpcy5yeE9ubHlQQlMgPSB0cnVlO1xyXG4gICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsKSlcclxuICAgICAgICAgIHRoaXMucnhPbmx5UEJTRmlsdGVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5yeFByaXZhdGUpIHtcclxuICAgICAgICB0aGlzLnJ4T25seVBCUyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsKSlcclxuICAgICAgICAgIHRoaXMucnhPbmx5Tk9OUEJTRmlsdGVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yeE9ubHlQQlMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJ4UHJpdmF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbC5maWx0ZXIoKHg6IGFueSkgPT4gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh4LnBic1R5cGUpKTtcclxuICAgICAgfVxyXG4gICAgICAvLyB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIm9uQ2hlY2tib3hDaGFuZ2VcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByeE9ubHlQQlNGaWx0ZXIoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCkgJiYgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbC5maWx0ZXIoKHg6IGFueSkgPT4gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh4LnBic1R5cGUpICYmIHgucGJzVHlwZSAhPSAnbm9uIFBCUycpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicnhPbmx5UEJTRmlsdGVyXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcnhPbmx5Tk9OUEJTRmlsdGVyKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsICE9ICcnICYmIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsICE9IG51bGwgJiYgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbC5maWx0ZXIoKHg6IGFueSkgPT4gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh4LnBic1R5cGUpICYmIHgucGJzVHlwZS50b0xvd2VyQ2FzZSgpID09ICdub24gcGJzJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJyeE9ubHlOT05QQlNGaWx0ZXJcIik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldENsYXNzRm9yTWVkKG1lZDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgaXNTZWxlY3RlZEZvcm11bGF0aW9uO1xyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICBpc1NlbGVjdGVkRm9ybXVsYXRpb24gPSB0aGlzLklzU2VsZWN0Rm9ybXVsYXRpb24obWVkKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpc1NlbGVjdGVkRm9ybXVsYXRpb24gPSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCAmJlxyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3RJZCAhPSBudWxsICYmXHJcbiAgICAgICAgICBtZWQucHJvZHVjdElkID09IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0SWQgJiZcclxuICAgICAgICAgIG1lZC5wYnNDb2RlID09IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlICYmXHJcbiAgICAgICAgICBtZWQucHJvZHVjdE5hbWUgPT0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lICYmXHJcbiAgICAgICAgICBtZWQucmVwZWF0cyA9PSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0cyAmJlxyXG4gICAgICAgICAgbWVkLm1heFF0eVVuaXRzID09IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWRGb3JtdWxhdGlvblxyXG4gICAgICAgID8gJ21kbC1ncmlkIG5ld19yeF9wb3B1cF9ib3ggUlhfaGlnaGxpZ2h0J1xyXG4gICAgICAgIDogJ21kbC1ncmlkIG5ld19yeF9wb3B1cF9ib3gnO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRDbGFzc0Zvck1lZFwiKTtcclxuICAgICAgcmV0dXJuIFwibWRsLWdyaWQgbmV3X3J4X3BvcHVwX2JveFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2xhc3NGb3JGYXZvdXJpdGVNZWQobWVkOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwicXVhbnRpdHlcIiwodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUhPXVuZGVmaW5lZCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZSE9bnVsbCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZS50b0xvd2VyQ2FzZSgpID09IFwibm9uIHBic1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubnVtYmVyT2ZQYWNrICsgXCJ4XCIgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24udW5pdFBlclBhY2spXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cykudG9TdHJpbmcoKSk7XHJcbiAgICAgIHZhciBpc1NlbGVjdGVkRm9ybXVsYXRpb247XHJcbiAgICAgICAgaXNTZWxlY3RlZEZvcm11bGF0aW9uID0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGwgJiZcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0SWQgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgbWVkLnByb2R1Y3RJZCA9PSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdElkICYmXHJcbiAgICAgICAgICAobWVkLnBic0NvZGUhPW51bGw/bWVkLnBic0NvZGU6XCJcIikgPT0gKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlIT1udWxsP3RoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlOlwiXCIpICYmXHJcbiAgICAgICAgICBtZWQucHJvZHVjdE5hbWUgPT0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lICYmXHJcbiAgICAgICAgICBtZWQucmVwZWF0cyA9PSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0cyAmJlxyXG4gICAgICAgICAgbWVkLnF1YW50aXR5ID09ICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZSE9dW5kZWZpbmVkICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlIT1udWxsICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlLnRvTG93ZXJDYXNlKCkgPT0gXCJub24gcGJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5udW1iZXJPZlBhY2sgKyBcInhcIiArIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi51bml0UGVyUGFjaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzKS50b1N0cmluZygpO1xyXG5cclxuICAgICAgcmV0dXJuIGlzU2VsZWN0ZWRGb3JtdWxhdGlvblxyXG4gICAgICAgID8gJ21kbC1ncmlkIG5ld19yeF9wb3B1cF9ib3ggUlhfaGlnaGxpZ2h0J1xyXG4gICAgICAgIDogJ21kbC1ncmlkIG5ld19yeF9wb3B1cF9ib3gnO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRDbGFzc0Zvck1lZFwiKTtcclxuICAgICAgcmV0dXJuIFwibWRsLWdyaWQgbmV3X3J4X3BvcHVwX2JveFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgSXNTZWxlY3RGb3JtdWxhdGlvbihtZWQ6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZC5nZW5lcmljTmFtZSkgPyBtZWQuZ2VuZXJpY05hbWUgOiBcIlwiKSA9PVxyXG4gICAgICAgICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZ2VuZXJpY05hbWUpID9cclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSA6IFwiXCIpICYmXHJcbiAgICAgICAgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkLnByb2R1Y3RJZCkgPyBtZWQucHJvZHVjdElkIDogXCJcIikgPT1cclxuICAgICAgICAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LnByb2R1Y3RJZCkgP1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3RJZCA6IFwiXCIpICYmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZC5yZXBlYXRzKSA/XHJcbiAgICAgICAgICAgIG1lZC5yZXBlYXRzIDogXCJcIikgPT0gKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5yZXBlYXRzKSA/XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlcGVhdHMgOiBcIlwiKSAmJiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShtZWQubWF4UXR5VW5pdHMpID9cclxuICAgICAgICAgICAgICAgIG1lZC5tYXhRdHlVbml0cyA6IFwiXCIpID09ICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubWF4UXR5VW5pdHMpXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzIDogXCJcIikpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiSXNTZWxlY3RGb3JtdWxhdGlvblwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Y3VycmVudGlkKG1lZDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tZWRpU2VhcmNoVmFsdWUgIT0gbnVsbCAmJiBtZWQucHJvZERpc3BsYXlWYWx1ZSA9PSB0aGlzLm1lZGlTZWFyY2hWYWx1ZSA/ICdoZWlnaGxpZ2h0JyA6ICcnO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRjdXJyZW50aWRcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UmVzdHJpY3Rpb25zKHJlc3RyaWN0aW9uczogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgcmVzdHJpY3Rpb25MaXN0ID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdHJpY3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGluZCA9IHJlc3RyaWN0aW9uTGlzdC5pbmRleE9mKHJlc3RyaWN0aW9uc1tpXVsncmVzdHJpY3Rpb25UeXBlJ10pO1xyXG4gICAgICAgIGlmIChpbmQgPT0gLTEpIHtcclxuICAgICAgICAgIHJlc3RyaWN0aW9uTGlzdC5wdXNoKHJlc3RyaWN0aW9uc1tpXVsncmVzdHJpY3Rpb25UeXBlJ10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzdHJpY3Rpb25MaXN0LnRvU3RyaW5nKCk7XHJcbiAgICAgIC8vICAgIGxldCByZXN0cmljdGlvbnMgPSBbXTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0UmVzdHJpY3Rpb25zXCIpO1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTWltc1ZhbHVlKCkge1xyXG4gICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgcmVxdWVzdF90eXBlOiBcInBhcmFtZXRlclwiLFxyXG4gICAgICAgIHVzZXJJZDogdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCxcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5HZXQoY29uZmlnLlBIWVNJQ0lBTi5HRVRfQUxMTUlNU1ZBTFVFICsgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCArIFwiJmNsaWVudElkPVwiICsgdGhpcy5jbGllbnRJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcImdldEFsbE1pbXNWYWx1ZVwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5kb3NlRGF0YSA9IHJlcy5kb3NlICE9IG51bGwgPyByZXMuZG9zZSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmZyZXF1ZW5jeURhdGEgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcy5mcmVxdWVuY3kpID8gcmVzLmZyZXF1ZW5jeSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmZvb2REYXRhID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMuZm9vZCkgPyByZXMuZm9vZCA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnB1cnBvc2VEYXRhID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMucHVycG9zZSkgIT0gbnVsbCA/IHJlcy5wdXJwb3NlIDogW107XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVEYXRhID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMucm91dGUpICE9IG51bGwgPyByZXMucm91dGUgOiBbXTtcclxuICAgICAgICAgICAgdGhpcy5jZWFzZURhdGEgPSByZXMuY2Vhc2UgIT0gbnVsbCA/IHJlcy5jZWFzZSA6IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNlYXNlRGF0YSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzLmNlYXNlKSAhPSBudWxsID8gcmVzLmNlYXNlIDogW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZHRvcGhhcm1hY3lEYXRhID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMuc2VuZFRvUGFybWFjeU1hc3RlcikgIT0gbnVsbCA/IHJlcy5zZW5kVG9QYXJtYWN5TWFzdGVyIDogW107XHJcbiAgICAgICAgICAgIHRoaXMudGVtcEF1dGhvcml0eUZvcm1ObyA9IHJlcy5hdXRob3JpdHlGb3JtLmF1dGhvcml0eUZvcm1ObztcclxuICAgICAgICAgICAgbGV0IHJlZlZhbEF1dGggPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID8gdGhpcy5nZXRBZGRBdXRoVmFsdWUoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMuYXV0aG9yaXR5Rm9ybSkgPyAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcy5hdXRob3JpdHlGb3JtLmF1dGhvcml0eUZvcm1ObykgPyByZXMuYXV0aG9yaXR5Rm9ybS5hdXRob3JpdHlGb3JtTm8gOiBbXSA6IFtdKSA6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHM/LnBic0R2YUF1dGhvcml0eU51bWJlcikgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMucGJzRHZhQXV0aG9yaXR5TnVtYmVyICE9IDAgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5wYnNEdmFBdXRob3JpdHlOdW1iZXIgOiBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmF1dGhvcml0eUZvcm1ObyA9IHJlZlZhbEF1dGg7XHJcbiAgICAgICAgICAgIHRoaXMuaXNOb25QYnNGbGFnID0gdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcy5pc05vblBic0ZsYWcpIHx8IHJlcy5pc05vblBic0ZsYWcgPT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc1ByZXNjcmliZUFzUHJpdmF0ZU9ubHkgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcy5pc1ByZXNjcmliZUFzUHJpdmF0ZU9ubHkpID8gcmVzLmlzUHJlc2NyaWJlQXNQcml2YXRlT25seSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QWxsTWltc1ZhbHVlXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QWxsTWltc1ZhbHVlXCIsIHBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QWxsTWltc1ZhbHVlXCIsIHBheWxvYWQpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvciwgXCJlcnJvclwiLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QWxsTWltc1ZhbHVlXCIsIHBheWxvYWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm91dGVGaWx0ZXIoZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnJvdXRlRGF0YUZpbHRlciA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJyb3V0ZUZpbHRlclwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlclJvdXRlSXRlbXMoYXJyOiBhbnksIHF1ZXJ5OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBhcnIuZmlsdGVyKChlOiBhbnkpID0+XHJcbiAgICAgICAgZS5yb3V0ZU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJmaWx0ZXJSb3V0ZUl0ZW1zXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9HZXQgaW5zdHJ1Y3Rpb24gdmFsdWVcclxuICBnZXRJbnN0cnVjdGlvblZhbHVlcygpIHtcclxuICAgIHZhciBwYXlsb2FkID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIHJlcXVlc3RfdHlwZTogXCJwYXJhbWV0ZXJcIixcclxuICAgICAgICB1c2VySWQ6IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy51c2VySWRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuR2V0KGNvbmZpZy5QSFlTSUNJQU4uR0VUX0lOU1RSVUNUSU9OX1ZBTFVFICsgXCI/dXNlcklkPVwiICsgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcImdldEluc3RydWN0aW9uVmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb24gPSByZXMucmVzcG9uc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb25EYXRhID0gaW5zdHJ1Y3Rpb247XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcImdldEluc3RydWN0aW9uVmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0SW5zdHJ1Y3Rpb25WYWx1ZXNcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRJbnN0cnVjdGlvblZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRJbnN0cnVjdGlvblZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vRWRpdCBJbnN0cnVjdGlvbiB2YWx1ZVxyXG4gIGVkaXRJbnN0cnVjdGlvbihpZDogbnVtYmVyLCBkYXRhOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSA9IGRhdGEudGV4dDtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvbnRpbHRsZSA9IGRhdGEudGV4dDtcclxuICAgICAgdGhpcy50ZW1wSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XHJcbiAgICAgIHRoaXMuSW5zdHJ1Y3Rpb25JZCA9IGRhdGEuaWQ7XHJcbiAgICAgIHRoaXMuSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9IGRhdGEuZGVzY3JpcHRpb247XHJcbiAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lZGl0SW5zdHJ1Y3Rpb25GbGFnID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJlZGl0SW5zdHJ1Y3Rpb25cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBsaXN0IHNlbGVjdCBpbiBJbnN0cnVjdGlvblxyXG4gIENoYW5nZUluc3RydWN0aW9uKGRhdGE6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZGF0YT8udGV4dCkgPyBkYXRhLnRleHQgOiAnJztcclxuICAgICAgdGhpcy5JbnN0cnVjdGlvbkRlc2NyaXB0aW9uID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShkYXRhPy5kZXNjcmlwdGlvbikgPyBkYXRhLmRlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pbnN0VmFsID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShkYXRhPy52YWx1ZSkgPyBkYXRhLnZhbHVlIDogXCJcIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jb21wbGV4SWQgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGRhdGE/LnZhbHVlKSA/IGRhdGEuaWQgOiBcIlwiO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJDaGFuZ2VJbnN0cnVjdGlvblwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluc3RydWN0aW9uT25DaGFuZ2UoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLkluc3RydWN0aW9uRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImluc3RydWN0aW9uT25DaGFuZ2VcIik7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gY2xlYXIgSW5zdHJ1Y3Rpb24gaW4gSW5zdHJ1Y3Rpb25cclxuICBjbGVhckluc3RydWN0aW9uKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvbnRpbHRsZSA9IFwiXCI7XHJcbiAgICAgIHRoaXMudGVtcEluc3RydWN0aW9uRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICB0aGlzLkluc3RydWN0aW9uRGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJjbGVhckluc3RydWN0aW9uXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gc2F2ZSBpbnN0cnVjdGlvbiB2YWx1ZVxyXG4gIHNhdmVJbnN0cnVjdGlvbigpIHtcclxuICAgIHZhciBwYXlsb2FkID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KFN0cmluZyh0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9udGlsdGxlKS50cmltKCkpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNTIubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNTIuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzUyLmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzUyLm1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KFN0cmluZyh0aGlzLnRlbXBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uKS50cmltKCkpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNTEubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNTEuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzUxLmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzUxLm1lc3NhZ2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB2YXIgYm9keSA9IHtcclxuICAgICAgICB0ZXh0OiB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9udGlsdGxlLnRyaW0oKSxcclxuICAgICAgICB2YWx1ZTogJzEnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnRlbXBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uLnRyaW0oKSxcclxuICAgICAgICBzdGF0dXM6ICcwJyxcclxuICAgICAgICB1c2VySWQ6IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy51c2VySWQsXHJcbiAgICAgIH07XHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgYm9keTogYm9keSxcclxuICAgICAgICBwYXJhbXM6IHtcclxuICAgICAgICAgIHJlcXVlc3RfdHlwZTogXCJwYXJhbWV0ZXJcIixcclxuICAgICAgICAgIHVzZXJJZDogdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCxcclxuICAgICAgICAgIGlkOiB0aGlzLkluc3RydWN0aW9uSWRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuSW5zdHJ1Y3Rpb25JZCAhPSBudWxsICYmIHRoaXMuSW5zdHJ1Y3Rpb25JZCAhPSAnJykge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY29tcGxleElkID0gcGFyc2VJbnQodGhpcy5JbnN0cnVjdGlvbklkKTtcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuUHV0TmV3KGJvZHksIGNvbmZpZy5QSFlTSUNJQU4uVVBEQVRFX0lOU1RSVUNUSU9OX1ZBTFVFICsgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCArICcmaWQ9JyArIHRoaXMuSW5zdHJ1Y3Rpb25JZCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlOyB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5JbnN0cnVjdGlvbkRlc2NyaXB0aW9uID0gdGhpcy50ZW1wSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbjtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUgPSB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9udGlsdGxlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRJbnN0cnVjdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShyZXMuZXJyb3JfY29kZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzYXZlSW5zdHJ1Y3Rpb25cIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXlsb2FkID0gYm9keTtcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuUG9zdChib2R5LCBjb25maWcuUEhZU0lDSUFOLkFERF9JTlNUUlVDVElPTl9WQUxVRSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlOyB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jb21wbGV4SWQgPSAwO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSA9ICcnO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb250aWx0bGUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgIHRoaXMudGVtcEluc3RydWN0aW9uRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRJbnN0cnVjdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShyZXMuZXJyb3JfY29kZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNhdmVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd24gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzYXZlSW5zdHJ1Y3Rpb25cIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzYXZlSW5zdHJ1Y3Rpb25cIiwgcGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBEZWxldGUgaW5zdHJ1Y3Rpb25cclxuICBkZWxldGVJbnN0cnVjdGlvbihpZDogTnVtYmVyKSB7XHJcbiAgICB2YXIgcGF5bG9hZCA9IHt9O1xyXG4gICAgdHJ5IHtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICByZXF1ZXN0X3R5cGU6IFwicGFyYW1ldGVyXCIsXHJcbiAgICAgICAgdXNlcklkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMudXNlcklkLFxyXG4gICAgICAgIGlkOiBpZFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5QdXROZXcoJycsIGNvbmZpZy5QSFlTSUNJQU4uREVMRVRFX0lOU1RSVUNUSU9OX1ZBTFVFICsgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCArICcmaWQ9JyArIGlkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcImRlbGV0ZUluc3RydWN0aW9uXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEluc3RydWN0aW9uRHJvcGRvd25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb250aWx0bGUgPSBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5nZXRJbnN0cnVjdGlvblZhbHVlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJkZWxldGVJbnN0cnVjdGlvblwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4ocmVzLnJlc3BvbnNlX21lc3NhZ2UsICdlcnJvcicsIHJlcy5lcnJvcl9jb2RlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImRlbGV0ZUluc3RydWN0aW9uXCIsIHBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZGVsZXRlSW5zdHJ1Y3Rpb25cIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZGVsZXRlSW5zdHJ1Y3Rpb25cIiwgcGF5bG9hZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBhZGQgbmV3IEluc3RydWN0aW9uXHJcbiAgYWRkTmV3SW5zdHJ1Y3Rpb24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUgPSAnJztcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvbnRpbHRsZSA9IFwiXCI7XHJcbiAgICAgIHRoaXMudGVtcEluc3RydWN0aW9uRGVzY3JpcHRpb24gPSBcIlwiO1xyXG4gICAgICB0aGlzLkluc3RydWN0aW9uRGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgdGhpcy5JbnN0cnVjdGlvbklkID0gJyc7XHJcbiAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJhZGROZXdJbnN0cnVjdGlvblwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHNlbGVjdCByb3V0ZSB2YWx1ZVxyXG4gIHNlbGVjdFJvdXRlc2VhcmNWYWx1ZShyb3V0ZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNlbGVjdFJvdXRlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyb3V0ZT8ucm91dGVOYW1lKSA/IHJvdXRlLnJvdXRlTmFtZSA6ICcnO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlbGVjdFJvdXRlc2VhcmNWYWx1ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHNlbGVjdCBEb3NlIHZhbHVlXHJcbiAgc2VsZWN0RG9zZVZhbHVlKGRvc2U6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3REb3NlRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGRvc2U/LnRleHQpID8gZG9zZS50ZXh0IDogXCJcIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlVmFsdWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGRvc2U/LnZhbHVlKSA/IGRvc2UudmFsdWUgOiBcIlwiO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZWxlY3REb3NlVmFsdWVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBzZWxlY3QgRnJlcXVlbmN5IHZhbHVlXHJcbiAgc2VsZWN0RnJlcXVlbmN5VmFsdWUoZnJlcXVlbmN5OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0RnJlcURyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZnJlcVNlYXJjaFZhbHVlID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShmcmVxdWVuY3k/LnRleHQpID8gZnJlcXVlbmN5LnRleHQgOiBcIlwiO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFWYWx1ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZnJlcXVlbmN5Py52YWx1ZSkgPyBmcmVxdWVuY3kudmFsdWUgOiBcIlwiO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZWxlY3RGcmVxdWVuY3lWYWx1ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHNlbGVjdCBGb29kIHZhbHVlXHJcbiAgc2VsZWN0Rm9vZFZhbHVlKGZvb2Q6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RGb29kRHJvcGRvd24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5mb29kU2VhcmNoVmFsdWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZvb2Q/LnRleHQpID8gZm9vZC50ZXh0IDogXCJcIjtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZWxlY3RGb29kVmFsdWVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RTdHBWYWx1ZShzdHA6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZWxlY3RzdHBEcm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbmRUb1BoYXJtYWN5VmFsdWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHN0cD8ubmFtZSkgPyBzdHAubmFtZSA6ICcnO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlbGVjdFN0cFZhbHVlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9zZWxlY3QgUHVycG9zZSB2YWx1ZVxyXG4gIHNlbGVjdFB1cnBvc2VWYWx1ZShwdXJwb3NlOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0UHVycG9zZURyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wdXJwb3NlU2VhcmNoVmFsdWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHB1cnBvc2U/Lmxvb2t1cFRleHQpID8gcHVycG9zZS5sb29rdXBUZXh0IDogJyc7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY29tcGxleElkID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShwdXJwb3NlPy5pZCkgPyBwdXJwb3NlLmlkIDogXCJcIjtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZWxlY3RQdXJwb3NlVmFsdWVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBRdWFudGl0eSBjaGFuZ2VcclxuICBxdWFudGl0eUNoYW5nZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhFbmREYXRlQ2FsY3VsYXRlcigpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNvbnZlcnRxdWFudGl0eXZhbCA9IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwsIDEwKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCA9IGNvbnZlcnRxdWFudGl0eXZhbC50b1N0cmluZygpO1xyXG4gICAgICAvL3RoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwgPSB0aGlzLnJvdW5kRGF0YShwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsKSkudG9TdHJpbmcoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInF1YW50aXR5Q2hhbmdlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tNb2JpbGUoZXZ0OiBhbnkpOiBhbnkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIGNoYXJDb2RlID0gKGV2dC53aGljaCkgPyBldnQud2hpY2ggOiBldnQua2V5Q29kZTtcclxuICAgICAgaWYgKGNoYXJDb2RlID4gMzEgJiYgKGNoYXJDb2RlIDwgNDcgfHwgY2hhckNvZGUgPiA1NykpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiY2hlY2tNb2JpbGVcIik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRheXNjaGFuZ2UoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCAhPSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgY29udmVydGRheXNjaGFuZ2UgPSBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsLCAxMCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCA9IGNvbnZlcnRkYXlzY2hhbmdlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImRheXNjaGFuZ2VcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXBlYXRzQ2hhbmdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9IGZhbHNlO1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCkpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjb252ZXJ0cmVwZWF0c3ZhbCA9IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCwgMTApO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlcGVhdHNWYWwgPSBjb252ZXJ0cmVwZWF0c3ZhbC50b1N0cmluZygpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInJlcGVhdHNDaGFuZ2VcIik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vdW5saXN0ZWQgY2hlY2sgYm94XHJcbiAgdW5saXN0ZWRSQSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1JQQlMnO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnVubGlzdGVkUkEgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUHJpdmF0ZSc7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInVubGlzdGVkUkFcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUyA9ICdQcml2YXRlJztcclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUlBCUyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5DVEdDb1BheW1lbnQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcml2YXRlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgUEJTKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUyA9ICdQQlMnO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIlBCU1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFJQQlMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1JQQlMnO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkNUR0NvUGF5bWVudCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIlJQQlNcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3NlbGVjdGVkIG1lZGljaW5lXHJcbiAgc2VsZWN0Rm9ybXVsYXRpb24obWVkOiBhbnksIGluZGV4OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiA9IG1lZDtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25EYXRhT25jaGFuZ2VvZk1lZGljaW5lKG1lZCk7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzUzhXYXJuaW5nTmV4dCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXN0cmljdGlvbnMgPSBtZWQuUmVzdHJpY3Rpb25zICYmIG1lZC5SZXN0cmljdGlvbnMubGVuZ3RoICE9IDAgPyBtZWQuUmVzdHJpY3Rpb25zWzBdIDogbnVsbDtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmxlbWkgPSBtZWQuYWlwICE9IG51bGwgPyBtZWQuYWlwLmxlbWkgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmxtYmMgPSBtZWQuYWlwICE9IG51bGwgPyBtZWQuYWlwLmxtYmMgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID0gbWVkLmFpcCAhPSBudWxsID8gbWVkLmFpcC5sZW1pIDogZmFsc2U7XHJcblxyXG4gICAgICAgIGlmIChtZWQuUmVzdHJpY3Rpb25zICYmIG1lZC5SZXN0cmljdGlvbnMubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgIHZhciByZXN0cmljdGlvbkxpc3RzID0gbWVkLlJlc3RyaWN0aW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgZS5yZXN0cmljdGlvblByZXZpZXcgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgIGUucmVzdHJpY3Rpb25UZXh0ICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICBlLnJlc3RyaWN0aW9uUHJldmlldyAhPSAnJyAmJlxyXG4gICAgICAgICAgICAgIGUucmVzdHJpY3Rpb25UZXh0ICE9ICcnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKHJlc3RyaWN0aW9uTGlzdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmlzU2hvd1Jlc3RyaWN0aW9ucyA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzU2hvd1Jlc3RyaWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmlzU2hvd1Jlc3RyaWN0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vIGlmICh0aGlzLnN0YXRlLnNlbGVjdGVkSW5kZXggIT0gaW5kZXgpIHtcclxuICAgICAgLy8gICB0aGlzLmNsZWFyTWVkaWNhbFByZXNjcmlwdGlvbkRhdGFPbmNoYW5nZW9mTWVkaWNpbmUobWVkKTtcclxuICAgICAgLy8gfVxyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1J0cG1OZXh0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5hdXRob3JpdHlGb3JtTm8gPSB0aGlzLmdldEFkZEF1dGhWYWx1ZSh0aGlzLnRlbXBBdXRob3JpdHlGb3JtTm8pO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RW5kRGF0ZUNhbGN1bGF0ZXIoKTtcclxuICAgICAgdGhpcy5lbmFibGVQcmVzY3JpYmVBcyhtZWQpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkQnJhbmRGb3JtdWxhdGlvbiA9IG51bGw7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2VsZWN0Rm9ybXVsYXRpb25cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3NlbGVjdGVkIEZhdm91cml0ZSBtZWRpY2luZVxyXG4gIHNlbGVjdEZhdm91cml0ZUZvcm11bGF0aW9uKG1lZDogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBtZWQ7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YU9uY2hhbmdlb2ZNZWRpY2luZShtZWQpO1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0KSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1M4V2FybmluZ05leHQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzdHJpY3Rpb25zID0gbWVkLlJlc3RyaWN0aW9ucyAmJiBtZWQuUmVzdHJpY3Rpb25zLmxlbmd0aCAhPSAwID8gbWVkLlJlc3RyaWN0aW9uc1swXSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID0gbWVkLmFpcCAhPSBudWxsID8gbWVkLmFpcC5sZW1pIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5sbWJjID0gbWVkLmFpcCAhPSBudWxsID8gbWVkLmFpcC5sbWJjIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9IG1lZC5haXAgIT0gbnVsbCA/IG1lZC5haXAubGVtaSA6IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAobWVkLlJlc3RyaWN0aW9ucyAmJiBtZWQuUmVzdHJpY3Rpb25zLmxlbmd0aCAhPSAwKSB7XHJcbiAgICAgICAgICB2YXIgcmVzdHJpY3Rpb25MaXN0cyA9IG1lZC5SZXN0cmljdGlvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgIGUucmVzdHJpY3Rpb25QcmV2aWV3ICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICBlLnJlc3RyaWN0aW9uVGV4dCAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgZS5yZXN0cmljdGlvblByZXZpZXcgIT0gJycgJiZcclxuICAgICAgICAgICAgICBlLnJlc3RyaWN0aW9uVGV4dCAhPSAnJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChyZXN0cmljdGlvbkxpc3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pc1Nob3dSZXN0cmljdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc1Nob3dSZXN0cmljdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pc1Nob3dSZXN0cmljdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNSdHBtTmV4dCA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuYXV0aG9yaXR5Rm9ybU5vID0gdGhpcy5nZXRBZGRBdXRoVmFsdWUodGhpcy50ZW1wQXV0aG9yaXR5Rm9ybU5vKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEVuZERhdGVDYWxjdWxhdGVyKCk7XHJcbiAgICAgIHRoaXMuZW5hYmxlUHJlc2NyaWJlQXMobWVkKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEJyYW5kRm9ybXVsYXRpb24gPSBudWxsO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNlbGVjdEZhdm91cml0ZUZvcm11bGF0aW9uXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QnJhbmROYW1lKHNlbGVjdGVkRm9ybXVsYXRpb246IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbikpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uLmFtdCkgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQubGVuZ3RoICE9IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS50cE5hbWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBOYW1lO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uLmJyYW5kPy5icmFuZE5hbWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRGb3JtdWxhdGlvbi5icmFuZC5icmFuZE5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QnJhbmROYW1lXCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZVByZXNjcmliZUFzKG1lZDogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBpZiAobWVkLnBic1R5cGUudG9Mb3dlckNhc2UoKSA9PSBcIm5vbiBwYnNcIiB8fCB0aGlzLmlzUHJlc2NyaWJlQXNQcml2YXRlT25seSkge1xyXG4gICAgICAvLyAgIHRoaXMucHJlc2NyaWJlQVNfUEJTID0gdHJ1ZTtcclxuICAgICAgLy8gICB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSB0cnVlO1xyXG4gICAgICAvLyAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUHJpdmF0ZSc7XHJcbiAgICAgIC8vIH0gZWxzZVxyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShtZWQ/LnBic1R5cGUpICYmIG1lZC5wYnNUeXBlLnRvVXBwZXJDYXNlKCkgPT0gXCJQQlMvUlBCU1wiICYmICF0aGlzLmlzUHJlc2NyaWJlQXNQcml2YXRlT25seSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5tZWRpY2FyZU51bWJlcikgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5kdmFOdW1iZXIpKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1JQQlMnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5tZWRpY2FyZU51bWJlcikpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19QQlMgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUyA9ICdQQlMnO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHM/LmR2YU51bWJlcikpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19QQlMgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUlBCUyc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUlBCUyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUHJpdmF0ZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkPy5wYnNUeXBlKSAmJiBtZWQucGJzVHlwZS50b1VwcGVyQ2FzZSgpID09IFwiUlBCU1wiICYmICF0aGlzLmlzUHJlc2NyaWJlQXNQcml2YXRlT25seSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5kdmFOdW1iZXIpKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUlBCUyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUlBCUyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1ByaXZhdGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZD8ucGJzVHlwZSkgJiYgbWVkLnBic1R5cGUudG9VcHBlckNhc2UoKSA9PSBcIlBCU1wiICYmICF0aGlzLmlzUHJlc2NyaWJlQXNQcml2YXRlT25seSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5tZWRpY2FyZU51bWJlcikgfHwgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5kdmFOdW1iZXIpKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUEJTJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19QQlMgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUHJpdmF0ZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkPy5wYnNUeXBlKSAmJiAobWVkLnBic1R5cGUudG9VcHBlckNhc2UoKSA9PSBcIkVYVEVNUE9SQU5FT1VTIFBSRVBBUkFUSU9OU1wiIHx8IG1lZC5wYnNUeXBlLnRvVXBwZXJDYXNlKCkgPT0gXCJTRUNUSU9OIDEwMFwiKSAmJiAhdGhpcy5pc1ByZXNjcmliZUFzUHJpdmF0ZU9ubHkgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0KSB7XHJcbiAgICAgICAgaWYgKCghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHM/Lm1lZGljYXJlTnVtYmVyKSB8fCAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHM/LmR2YU51bWJlcikpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkPy5wYnNDb2RlKSAmJiBtZWQucGJzQ29kZSAhPSBcIlwiKSB7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUEJTJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19QQlMgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUHJpdmF0ZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkPy5wYnNUeXBlKSAmJiBtZWQucGJzVHlwZS50b1VwcGVyQ2FzZSgpID09IFwiUEFMTElBVElWRSBDQVJFXCIgJiYgIXRoaXMuaXNQcmVzY3JpYmVBc1ByaXZhdGVPbmx5ICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmR2YU51bWJlciAhPSBudWxsICYmIHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuZHZhTnVtYmVyICE9ICcnICYmIG1lZC5wYnNDb2RlICE9IFwiXCIpIHtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUEJTID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSAnUlBCUyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5tZWRpY2FyZU51bWJlcikgfHwgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzPy5kdmFOdW1iZXIpKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZD8ucGJzQ29kZSkgJiYgbWVkLnBic0NvZGUgIT0gXCJcIikge1xyXG4gICAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19QQlMgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUlBCUyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1BCUyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUEJTID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlQVNfUlBCUyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1ByaXZhdGUnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnByZXNjcmliZUFTX1BCUyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcmVzY3JpYmVBU19SUEJTID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1ByaXZhdGUnO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGVsc2UgaWYgKG1lZC5wYnNUeXBlLnRvVXBwZXJDYXNlKCkgPT0gXCJTRUNUSU9OIDEwMFwiKSB7XHJcbiAgICAgIC8vICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMubWVkaWNhcmVOdW1iZXIgIT0gXCJcIiAmJlxyXG4gICAgICAvLyAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5tZWRpY2FyZU51bWJlciAhPSBudWxsICYmIG1lZC5wYnNDb2RlICE9IFwiXCIgfHwgdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5kdmFOdW1iZXIgIT0gbnVsbCAmJlxyXG4gICAgICAvLyAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5kdmFOdW1iZXIgIT0gJycgJiYgbWVkLnBic0NvZGUgIT0gXCJcIikge1xyXG4gICAgICAvLyB0aGlzLnByZXNjcmliZUFTX1BCUyA9IGZhbHNlO1xyXG4gICAgICAvLyB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSB0cnVlO1xyXG4gICAgICAvLyB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1BCUyc7XHJcbiAgICAgIC8vICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5wcmVzY3JpYmVBU19QQlMgPSB0cnVlO1xyXG4gICAgICAvLyB0aGlzLnByZXNjcmliZUFTX1JQQlMgPSB0cnVlO1xyXG4gICAgICAvLyB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID0gJ1ByaXZhdGUnO1xyXG4gICAgICAvLyAgICAgdGhpcy5zZXRTdGF0ZSh7IHByZXNjcmliZUFTX1BCUzogdHJ1ZSwgcHJlc2NyaWJlQVNfUlBCUzogdHJ1ZSwgUHJlc2NyaWJlQVM6IFwiUHJpdmF0ZVwiIH0pO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJlbmFibGVQcmVzY3JpYmVBc1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRyYWRlTmFtZSgpOiBhbnkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gdmFyIHNlbGVjdGVkRm9ybXVsYXRpb246YW55ID0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCkge1xyXG4gICAgICAgIHZhciB0cmFkZU5hbWUgPSAnJztcclxuICAgICAgICB2YXIgYW10X3RwTmFtZSA9IHRoaXMuZ2V0QnJhbmROYW1lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgdmFyIHRCcmFuZE5hbWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGFtdF90cE5hbWUpID8gYW10X3RwTmFtZSA6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5icmFuZD8uYnJhbmROYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5icmFuZC5icmFuZE5hbWUgOiBcIlwiO1xyXG4gICAgICAgIC8vdmFyIGFtdF90cHBOYW1lID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10KSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10Lmxlbmd0aCAhPSAwICYmIHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwcHMpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwcy5sZW5ndGggIT0gMCA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwc1swXS50cHBOYW1lIDogJyc7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmdlbmVyaWNOYW1lKSB8fCAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZG9zYWdlRm9ybSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0udG9Mb3dlckNhc2UoKSA9PSAnZ2F1emUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUgOiBcIlwiO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUgPT0gZmFsc2UgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID09IGZhbHNlICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIHRyYWRlTmFtZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5nZW5lcmljTmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZ2VuZXJpY05hbWUgOiBcIlwiO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0cmFkZU5hbWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSB0cnVlICYmIHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSBmYWxzZSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICB0cmFkZU5hbWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZ2VuZXJpY05hbWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lICsgJygnICsgdEJyYW5kTmFtZSArICcpJyA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYWRlTmFtZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID09IGZhbHNlICYmIHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIHRyYWRlTmFtZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5nZW5lcmljTmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZ2VuZXJpY05hbWUgOiBcIlwiO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0cmFkZU5hbWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSB0cnVlICYmIHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgIHRyYWRlTmFtZSA9IHRCcmFuZE5hbWU7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRyYWRlTmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBlbHNlIGlmIChJc0V4dGVtcCA9PSB0cnVlICYmIGxlbWkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyAgIHRyYWRlTmFtZSA9IGFtdF90cHBOYW1lICE9IG51bGwgJiYgYW10X3RwcE5hbWUgIT0gXCJcIiA/IGFtdF90cHBOYW1lIDogdGhpcy5zdGF0ZS5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgLy8gICByZXR1cm4gdHJhZGVOYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAvLyBlbHNlIGlmIChJc0V4dGVtcCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIC8vICAgdHJhZGVOYW1lID0gdGhpcy5zdGF0ZS5zZWxlY3RlZEZvcm11bGF0aW9uLmZvcm11bGEgPT0gbnVsbCA/IHRoaXMuc3RhdGUuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZS50cmltKCkgOiB0aGlzLnN0YXRlLnNlbGVjdGVkRm9ybXVsYXRpb24uZm9ybXVsYTtcclxuICAgICAgICAgICAgLy8gICByZXR1cm4gdHJhZGVOYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHRyYWRlTmFtZSA9IHRoaXMuZ2V0RXh0ZW1wVFRQTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pO1xyXG4gICAgICAgICAgICAgIHJldHVybiB0cmFkZU5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJhZGVOYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRUcmFkZU5hbWVcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VHJhZGVOYW1lRGlzcGxheSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QpIHtcclxuICAgICAgICB2YXIgYW10X3RwTmFtZSA9IHRoaXMuZ2V0QnJhbmROYW1lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgdmFyIHRCcmFuZE5hbWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGFtdF90cE5hbWUpID8gYW10X3RwTmFtZSA6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5icmFuZD8uYnJhbmROYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5icmFuZC5icmFuZE5hbWUgOiBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5nZW5lcmljTmFtZSkpIHtcclxuICAgICAgICAgIC8vIGxldCBQSXRlbVRocmVlMiA9IHByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZS5sYXN0SW5kZXhPZihcIltcIik7XHJcbiAgICAgICAgICAvLyBsZXQgUEl0ZW1UaHJlZTMgPSBwcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUuc2xpY2UoMCwgUEl0ZW1UaHJlZTIpO1xyXG4gICAgICAgICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUgPSBQSXRlbVRocmVlMiA+PSAwID8gUEl0ZW1UaHJlZTMudHJpbSgpIDogcHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gdGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSA6IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gdHJ1ZSB8fCB0aGlzLmNvbW1vblNlcnZpY2VzLmxlbWkgPT0gdHJ1ZSB8fCAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0gIT0gbnVsbCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybS50b0xvd2VyQ2FzZSgpID09IFwiZ2F1emVcIikpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybS50b0xvd2VyQ2FzZSgpID09IFwiZ2F1emVcIikge1xyXG4gICAgICAgICAgICAvLyBsZXQgUEl0ZW1UaHJlZTIgPSBwcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUubGFzdEluZGV4T2YoXCJbXCIpO1xyXG4gICAgICAgICAgICAvLyBsZXQgUEl0ZW1UaHJlZTMgPSBwcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUuc2xpY2UoMCwgUEl0ZW1UaHJlZTIpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZSA9IFBJdGVtVGhyZWUyID49IDAgPyBQSXRlbVRocmVlMy50cmltKCkgOiBwcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZW9wRGlzcGxheU5hbWUgPSB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWUgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUgOiBcIlwiO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gbGV0IFBJdGVtVGhyZWUgPSBleHRlbXBUVFBOYW1lLmxhc3RJbmRleE9mKFwiW1wiKTtcclxuICAgICAgICAgICAgLy8gbGV0IFBJdGVtVGhyZWUxID0gZXh0ZW1wVFRQTmFtZS5zbGljZSgwLCBQSXRlbVRocmVlKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSA9IHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSA9IHRoaXMuZ2V0RXh0ZW1wVFRQTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pLnRyaW0oKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUgPSBQSXRlbVRocmVlID49IDAgPyBQSXRlbVRocmVlMS50cmltKCkgOiBleHRlbXBUVFBOYW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2YXIgbXBwTmFtZSA9IHRoaXMuZ2V0TVBQTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pO1xyXG4gICAgICAgICAgdmFyIFNhY2hldE9yUHVtcCA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5zdHJTYWNoZXRPclB1bXApID8gXCIgXCIgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uc3RyU2FjaGV0T3JQdW1wIDogXCJcIjtcclxuICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1wcE5hbWUpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lID09IHRydWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVvcERpc3BsYXlOYW1lID0gdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gKG1wcE5hbWUudHJpbSgpICsgXCJcIiArIFNhY2hldE9yUHVtcCArICcgKCcgKyB0QnJhbmROYW1lICsgJyknKS50cmltKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSA9IHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSA9IChtcHBOYW1lLnRyaW0oKSArIFwiXCIgKyBTYWNoZXRPclB1bXApLnRyaW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIHN0cmVuZ3RoID0gdGhpcy5yeFN0cmVuZ3RoY2FsY3VsYXRpb24odGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKTtcclxuICAgICAgICAgICAgdmFyIGRpc3BOYW1lID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LkRpc3BOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5EaXNwTmFtZS50cmltKCkgOiBcIlwiO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gKGRpc3BOYW1lICsgXCIgXCIgKyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybS50cmltKCkgKyBcIiBcIiA6IFwiXCIpICsgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodEJyYW5kTmFtZSkgPyAnKCcgKyB0QnJhbmROYW1lICsgJykgJyA6IFwiXCIpICsgc3RyZW5ndGgpLnRyaW0oKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVvcERpc3BsYXlOYW1lID0gKGRpc3BOYW1lICsgXCIgXCIgKyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0QnJhbmROYW1lKSA/ICcoJyArIHRCcmFuZE5hbWUgKyAnKSAnIDogXCJcIikgKyBzdHJlbmd0aCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlID0gZGlzcE5hbWUgKyBcIiBcIiArICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtLnRyaW0oKSArIFwiIFwiIDogXCJcIikgKyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0QnJhbmROYW1lKSA/ICcoJyArIHRCcmFuZE5hbWUgKyAnKSAnIDogXCJcIikgKyB0aGlzLnJ4U3RyZW5ndGhjYWxjdWxhdGlvbk5ldyh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkQnJhbmRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gKGRpc3BOYW1lICsgXCIgXCIgKyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybS50cmltKCkgOiBcIlwiKSArIFwiIFwiICsgc3RyZW5ndGgpLnRyaW0oKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVvcERpc3BsYXlOYW1lID0gKGRpc3BOYW1lICsgXCIgXCIgKyBzdHJlbmd0aCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlID0gZGlzcE5hbWUgKyBcIiBcIiArICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtLnRyaW0oKSA6IFwiXCIpICsgXCIgXCIgKyB0aGlzLnJ4U3RyZW5ndGhjYWxjdWxhdGlvbk5ldyh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkQnJhbmRGb3JtdWxhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lID0gdGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUgOiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWUgPSB0aGlzLmNvbW1vblNlcnZpY2VzLmVvcERpc3BsYXlOYW1lID0gXCJcIjtcclxuICAgICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVkSXRlbVJlc2VydmVkVGhyZWUgPSBcIlwiO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0VHJhZGVOYW1lRGlzcGxheVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE1QUE5hbWUoc2VsZWN0ZWRGb3JtdWxhdGlvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uKSAmJiAodHlwZW9mIHNlbGVjdGVkRm9ybXVsYXRpb24pID09PSAnb2JqZWN0JyAmJiBzZWxlY3RlZEZvcm11bGF0aW9uLmNvbnN0cnVjdG9yID09PSBPYmplY3QgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uPy5hbXQpICYmIHNlbGVjdGVkRm9ybXVsYXRpb24uYW10Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXT8ubXBwcykgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwcy5sZW5ndGggPiAwICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwc1swXT8ubXBwTmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwc1swXS5tcHBOYW1lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldE1QUE5hbWVcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbUdlbmVyaWNJbnRlbnRpb24obGVtaTogYm9vbGVhbiwgaXNCcmFuZE5hbWU6IGJvb2xlYW4sIGlzRXh0ZW1wOiBib29sZWFuKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAobGVtaSA9PSB0cnVlICYmIGlzQnJhbmROYW1lID09IHRydWUgJiYgaXNFeHRlbXAgIT0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiAnQic7XHJcbiAgICAgIH0gZWxzZSBpZiAobGVtaSA9PSB0cnVlICYmIGlzQnJhbmROYW1lID09IGZhbHNlICYmIGlzRXh0ZW1wICE9IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gJ0cnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAnRyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0SXRlbUdlbmVyaWNJbnRlbnRpb25cIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcnhTdHJlbmd0aGNhbGN1bGF0aW9uKGZvcm11bGF0aW9uOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZvcm11bGF0aW9uKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5KSAmJiBmb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eSAhPSAwKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZm9ybXVsYXRpb24uaXRlbVN0cmVuZ3RoUXVhbnRpdHludW1iZXJPZlBhY2spICYmIGZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5bnVtYmVyT2ZQYWNrICE9IDApIHtcclxuICAgICAgICAgIHJldHVybiAoKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZm9ybXVsYXRpb24uc3RyU2FjaGV0T3JQdW1wKSA/IGZvcm11bGF0aW9uLnN0clNhY2hldE9yUHVtcCA6IFwiXCIpICsgJyBbJyArIGZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5ICsgJ10nICsgJyB4ICcgKyBmb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eW51bWJlck9mUGFjaykudHJpbSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gKCghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZvcm11bGF0aW9uLnN0clNhY2hldE9yUHVtcCkgPyBmb3JtdWxhdGlvbi5zdHJTYWNoZXRPclB1bXAgOiBcIlwiKSArICcgWycgKyBmb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eSArICddJykudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicnhTdHJlbmd0aGNhbGN1bGF0aW9uXCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIHJ4U3RyZW5ndGhjYWxjdWxhdGlvbk5ldyhmb3JtdWxhdGlvbjogYW55KSB7XHJcbiAgLy8gICB0cnkge1xyXG4gIC8vICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShmb3JtdWxhdGlvbikgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShmb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eSkgJiYgZm9ybXVsYXRpb24uaXRlbVN0cmVuZ3RoUXVhbnRpdHkgIT0gMCkge1xyXG4gIC8vICAgICAgIHJldHVybiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZvcm11bGF0aW9uLnN0clNhY2hldE9yUHVtcCkgPyBmb3JtdWxhdGlvbi5zdHJTYWNoZXRPclB1bXAgOiBcIlwiO1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIHJldHVybiAnJztcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAvLyAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJyeFN0cmVuZ3RoY2FsY3VsYXRpb25OZXdcIik7XHJcbiAgLy8gICAgIHJldHVybiBcIlwiO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgc2hvd0F1dGhvcml0eUJveChSZXN0cmljdGlvbnM6IGFueSwgUHJlc2NyaWJlQVM6IGFueSwgcnhBdXRob3JpdHk6IGFueSwgdW5saXN0ZWRSQTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoUmVzdHJpY3Rpb25zKSAmJiBSZXN0cmljdGlvbnMubGVuZ3RoID4gMCAmJiBSZXN0cmljdGlvbnNbMF0ucmVzdHJpY3Rpb25UeXBlLnRvTG93ZXJDYXNlKCkgIT0gJ3Jlc3RyaWN0ZWQnICYmIFJlc3RyaWN0aW9uc1swXS5yZXN0cmljdGlvblR5cGUudG9Mb3dlckNhc2UoKSAhPSAndW5yZXN0cmljdGVkJyAmJiBQcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdwYnMnKSB8fCAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShSZXN0cmljdGlvbnMpICYmIFJlc3RyaWN0aW9ucy5sZW5ndGggPiAwICYmIFJlc3RyaWN0aW9uc1swXS5yZXN0cmljdGlvblR5cGUudG9Mb3dlckNhc2UoKSAhPSAncmVzdHJpY3RlZCcgJiYgUmVzdHJpY3Rpb25zWzBdLnJlc3RyaWN0aW9uVHlwZS50b0xvd2VyQ2FzZSgpICE9ICd1bnJlc3RyaWN0ZWQnICYmIFByZXNjcmliZUFTLnRvTG93ZXJDYXNlKCkgPT0gJ3JwYnMnKSB8fCAocnhBdXRob3JpdHkgPT0gdHJ1ZSAmJiBQcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdwYnMnKSB8fCAocnhBdXRob3JpdHkgPT0gdHJ1ZSAmJiBQcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdycGJzJykpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChQcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdycGJzJyAmJiB1bmxpc3RlZFJBID09IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2hvd0F1dGhvcml0eUJveFwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGlyZWN0aW9ucygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBkaXJlY3Rpb25zID0gJyc7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZG9zZVNlYXJjaFZhbHVlKSkge1xyXG4gICAgICAgIGRpcmVjdGlvbnMgPSB0aGlzLmNvbW1vblNlcnZpY2VzLmRvc2VTZWFyY2hWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSkpIHtcclxuICAgICAgICBkaXJlY3Rpb25zID0gZGlyZWN0aW9ucyArICcgJyArIHRoaXMuY29tbW9uU2VydmljZXMuZnJlcVNlYXJjaFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZm9vZFNlYXJjaFZhbHVlKSkge1xyXG4gICAgICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zICsgJyAnICsgdGhpcy5jb21tb25TZXJ2aWNlcy5mb29kU2VhcmNoVmFsdWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5JbnN0cnVjdGlvbkRlc2NyaXB0aW9uKSkge1xyXG4gICAgICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zICsgJyAnICsgdGhpcy5JbnN0cnVjdGlvbkRlc2NyaXB0aW9uO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlKSkge1xyXG4gICAgICAgIGRpcmVjdGlvbnMgPSBkaXJlY3Rpb25zICsgJyAnICsgdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkaXJlY3Rpb25zLnRyaW0oKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0RGlyZWN0aW9uc1wiKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3N0YXRlIG5hbWUgZnVsbCBmb3JtXHJcbiAgZ2V0U3RhdGVOYW1lRnJvbVN0YXRlQ29kZShydHBtc3RhdGVOYW1lOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHN3aXRjaCAocnRwbXN0YXRlTmFtZSAmJiBydHBtc3RhdGVOYW1lICE9ICcnID8gcnRwbXN0YXRlTmFtZS50b1VwcGVyQ2FzZSgpIDogJycpIHtcclxuICAgICAgICBjYXNlICdOU1cnOlxyXG4gICAgICAgICAgcmV0dXJuICdOZXcgU291dGggV2FsZXMnO1xyXG4gICAgICAgIGNhc2UgJ1FMRCc6XHJcbiAgICAgICAgICByZXR1cm4gJ1F1ZWVuc2xhbmQnO1xyXG4gICAgICAgIGNhc2UgJ1NBJzpcclxuICAgICAgICAgIHJldHVybiAnU291dGggQXVzdHJhbGlhJztcclxuICAgICAgICBjYXNlICdUQVMnOlxyXG4gICAgICAgICAgcmV0dXJuICdUYXNtYW5pYSc7XHJcbiAgICAgICAgY2FzZSAnVklDJzpcclxuICAgICAgICAgIHJldHVybiAnVmljdG9yaWEnO1xyXG4gICAgICAgIGNhc2UgJ1dBJzpcclxuICAgICAgICAgIHJldHVybiAnV2VzdGVybiBBdXN0cmFsaWEnO1xyXG4gICAgICAgIGNhc2UgJ0FDVCc6XHJcbiAgICAgICAgICByZXR1cm4gJ0F1c3RyYWxpYW4gQ2FwaXRhbCBUZXJyaXRvcnknO1xyXG4gICAgICAgIGNhc2UgJ05UJzpcclxuICAgICAgICAgIHJldHVybiAnTm9ydGhlcm4gVGVycml0b3J5JztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIHJ0cG1zdGF0ZU5hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0U3RhdGVOYW1lRnJvbVN0YXRlQ29kZVwiKTtcclxuICAgICAgcmV0dXJuIHJ0cG1zdGF0ZU5hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3N1cGVyc2NyaXB0IGNvZGVcclxuICBzaHJpbmtTdXBlclNjcmlwdENvZGUgPSAoaW5wdXQ6IGFueSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGR1cHJlc3VsdCA9IGlucHV0O1xyXG4gICAgICBsZXQgYSA9IGlucHV0LnNwbGl0KCc8c3VwPicpO1xyXG5cclxuICAgICAgLy8gc2VhcmNoIGZvciBwYXR0ZXJuIGluIGFcclxuICAgICAgbGV0IGNvdW50ID0gYS5sZW5ndGggLSAxO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgLy8gaWYgbWF0Y2ggZm91bmQgaW5jcmVhc2UgY291bnRcclxuICAgICAgICBsZXQgc3RhcnQgPSAnPHN1cD4nO1xyXG4gICAgICAgIGxldCBlbmQgPSAnPC9zdXA+JztcclxuICAgICAgICBsZXQgc3RhcnRJbmRleCA9IGR1cHJlc3VsdC5pbmRleE9mKHN0YXJ0KSArIHN0YXJ0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgZW5kSW5kZXggPSBkdXByZXN1bHQuaW5kZXhPZihlbmQsIHN0YXJ0SW5kZXgpO1xyXG4gICAgICAgIGxldCBleHRyYWN0ZWRWYWx1ZSA9ICcnO1xyXG5cclxuICAgICAgICBpZiAoc3RhcnRJbmRleCAhPSAtMSAmJiBlbmRJbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgZXh0cmFjdGVkVmFsdWUgPSBkdXByZXN1bHQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHN0cmluZ051bWJlciA9IHRoaXMuY29udmVydFRvU3VwZXJzY3JpcHQoZXh0cmFjdGVkVmFsdWUpO1xyXG5cclxuICAgICAgICBsZXQgcmVzdWx0ID0gJ1RoZSBudW1iZXIgJyArIHN0cmluZ051bWJlciArICcgaXMgc3VwZXJzY3JpcHRlZC4nO1xyXG5cclxuICAgICAgICAvLyBkdXByZXN1bHQgPSBkdXByZXN1bHQucmVwbGFjZSgvPHN1cD4uKjxcXC9zdXA+LywgJzxzdXA+PC9zdXA+Jyk7XHJcbiAgICAgICAgLy8gZHVwcmVzdWx0ID0gZHVwcmVzdWx0LnJlcGxhY2VGaXJzdChcIlxcXFw8c3VwPi4qP1xcXFw8L3N1cD5cIiwgXCI8c3VwPlwiICsgXCJcIiArIFwiPC9zdXA+XCIpO1xyXG4gICAgICAgIGR1cHJlc3VsdCA9IGR1cHJlc3VsdC5yZXBsYWNlKFxyXG4gICAgICAgICAgJzxzdXA+JyArIGV4dHJhY3RlZFZhbHVlICsgJzwvc3VwPicsXHJcbiAgICAgICAgICBzdHJpbmdOdW1iZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIHJldHVybiBkdXByZXN1bHQ7XHJcbiAgICAgIHJldHVybiB0aGlzLnNocmlua1N1YlNjcmlwdENvZGUoZHVwcmVzdWx0KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2hyaW5rU3VwZXJTY3JpcHRDb2RlXCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvL3N1YnNjcmlwdCBjb2RlXHJcbiAgc2hyaW5rU3ViU2NyaXB0Q29kZSA9IChpbnB1dDogYW55KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgZHVwcmVzdWx0ID0gaW5wdXQ7XHJcbiAgICAgIGxldCBhID0gaW5wdXQuc3BsaXQoJzxzdWI+Jyk7XHJcblxyXG4gICAgICAvLyBzZWFyY2ggZm9yIHBhdHRlcm4gaW4gYVxyXG4gICAgICBsZXQgY291bnQgPSBhLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcclxuICAgICAgICAvLyBpZiBtYXRjaCBmb3VuZCBpbmNyZWFzZSBjb3VudFxyXG4gICAgICAgIGxldCBzdGFydCA9ICc8c3ViPic7XHJcbiAgICAgICAgbGV0IGVuZCA9ICc8L3N1Yj4nO1xyXG4gICAgICAgIGxldCBzdGFydEluZGV4ID0gZHVwcmVzdWx0LmluZGV4T2Yoc3RhcnQpICsgc3RhcnQubGVuZ3RoO1xyXG4gICAgICAgIGxldCBlbmRJbmRleCA9IGR1cHJlc3VsdC5pbmRleE9mKGVuZCwgc3RhcnRJbmRleCk7XHJcbiAgICAgICAgbGV0IGV4dHJhY3RlZFZhbHVlID0gJyc7XHJcblxyXG4gICAgICAgIGlmIChzdGFydEluZGV4ICE9IC0xICYmIGVuZEluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICBleHRyYWN0ZWRWYWx1ZSA9IGR1cHJlc3VsdC5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc3RyaW5nTnVtYmVyID0gdGhpcy5zdWJzY3JpcHROdW1iZXJzKGV4dHJhY3RlZFZhbHVlKTtcclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICdUaGUgbnVtYmVyICcgKyBzdHJpbmdOdW1iZXIgKyAnIGlzIHN1cGVyc2NyaXB0ZWQuJztcclxuICAgICAgICAvLyBkdXByZXN1bHQgPSBkdXByZXN1bHQucmVwbGFjZSgvPHN1cD4uKjxcXC9zdXA+LywgJzxzdXA+PC9zdXA+Jyk7XHJcbiAgICAgICAgLy8gZHVwcmVzdWx0ID0gZHVwcmVzdWx0LnJlcGxhY2VGaXJzdChcIlxcXFw8c3VwPi4qP1xcXFw8L3N1cD5cIiwgXCI8c3VwPlwiICsgXCJcIiArIFwiPC9zdXA+XCIpO1xyXG4gICAgICAgIGR1cHJlc3VsdCA9IGR1cHJlc3VsdC5yZXBsYWNlKFxyXG4gICAgICAgICAgJzxzdWI+JyArIGV4dHJhY3RlZFZhbHVlICsgJzwvc3ViPicsXHJcbiAgICAgICAgICBzdHJpbmdOdW1iZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBkdXByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNocmlua1N1YlNjcmlwdENvZGVcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnZlcnRUb1N1cGVyc2NyaXB0ID0gKGlucHV0OiBhbnkpID0+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHN1cGVyc2NyaXB0RGlnaXRzOiBhbnkgPSB7XHJcbiAgICAgICAgJzAnOiAnXFx1MjA3MCcsXHJcbiAgICAgICAgJzEnOiAnXFx1MDBCOScsXHJcbiAgICAgICAgJzInOiAnXFx1MDBCMicsXHJcbiAgICAgICAgJzMnOiAnXFx1MDBCMycsXHJcbiAgICAgICAgJzQnOiAnXFx1MjA3NCcsXHJcbiAgICAgICAgJzUnOiAnXFx1MjA3NScsXHJcbiAgICAgICAgJzYnOiAnXFx1MjA3NicsXHJcbiAgICAgICAgJzcnOiAnXFx1MjA3NycsXHJcbiAgICAgICAgJzgnOiAnXFx1MjA3OCcsXHJcbiAgICAgICAgJzknOiAnXFx1MjA3OScsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBsZXQgb3V0cHV0ID0gJyc7XHJcbiAgICAgIGZvciAobGV0IGNoYXIgb2YgaW5wdXQpIHtcclxuICAgICAgICBpZiAoY2hhciBpbiBzdXBlcnNjcmlwdERpZ2l0cykge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IHN1cGVyc2NyaXB0RGlnaXRzW2NoYXJdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gY2hhcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiY29udmVydFRvU3VwZXJzY3JpcHRcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHN1YnNjcmlwdE51bWJlcnMoc3RyOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBzdWJzY3JpcHRzOiBhbnkgPSB7XHJcbiAgICAgICAgJzAnOiAnXFx1MjA4MCcsXHJcbiAgICAgICAgJzEnOiAnXFx1MjA4MScsXHJcbiAgICAgICAgJzInOiAnXFx1MjA4MicsXHJcbiAgICAgICAgJzMnOiAnXFx1MjA4MycsXHJcbiAgICAgICAgJzQnOiAnXFx1MjA4NCcsXHJcbiAgICAgICAgJzUnOiAnXFx1MjA4NScsXHJcbiAgICAgICAgJzYnOiAnXFx1MjA4NicsXHJcbiAgICAgICAgJzcnOiAnXFx1MjA4NycsXHJcbiAgICAgICAgJzgnOiAnXFx1MjA4OCcsXHJcbiAgICAgICAgJzknOiAnXFx1MjA4OScsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB2YXIgcmVzdWx0ID0gJyc7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHN1YnNjcmlwdHNbc3RyW2ldXSkge1xyXG4gICAgICAgICAgcmVzdWx0ICs9IHN1YnNjcmlwdHNbc3RyW2ldXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0ICs9IHN0cltpXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic3Vic2NyaXB0TnVtYmVyc1wiKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRBdXRob3JpdHlMYWJlbChzdGF0ZU5hbWU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIHN0YXRlID0gdGhpcy5nZXRTdGF0ZUNvZGVGcm9tU3RhdGVOYW1lKHN0YXRlTmFtZSk7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgIGNhc2UgJ05TVyc6XHJcbiAgICAgICAgICByZXR1cm4gJ0FwcHJvdmFsIE51bWJlcic7XHJcbiAgICAgICAgY2FzZSAnUUxEJzpcclxuICAgICAgICAgIHJldHVybiAnQXBwcm92YWwgTnVtYmVyJztcclxuICAgICAgICBjYXNlICdTQSc6XHJcbiAgICAgICAgICByZXR1cm4gJ0FwcHJvdmFsIE51bWJlcic7XHJcbiAgICAgICAgY2FzZSAnVEFTJzpcclxuICAgICAgICAgIHJldHVybiAnQXBwcm92YWwgTnVtYmVyJztcclxuICAgICAgICBjYXNlICdWSUMnOlxyXG4gICAgICAgICAgcmV0dXJuICdBcHByb3ZhbCBOdW1iZXInO1xyXG4gICAgICAgIGNhc2UgJ1dBJzpcclxuICAgICAgICAgIHJldHVybiAnQXBwcm92YWwgTnVtYmVyJztcclxuICAgICAgICBjYXNlICdBQ1QnOlxyXG4gICAgICAgICAgcmV0dXJuICdBcHByb3ZhbCBOdW1iZXInO1xyXG4gICAgICAgIGNhc2UgJ05UJzpcclxuICAgICAgICAgIHJldHVybiAnQXBwcm92YWwgTnVtYmVyJztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuICdBcHByb3ZhbCBOdW1iZXInO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldEF1dGhvcml0eUxhYmVsXCIpO1xyXG4gICAgICByZXR1cm4gc3RhdGVOYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGVBdXRob3JpdHlMYWJlbChzdGF0ZU5hbWU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIHN0YXRlID0gdGhpcy5nZXRTdGF0ZUNvZGVGcm9tU3RhdGVOYW1lKHN0YXRlTmFtZSk7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgIGNhc2UgJ05TVyc6XHJcbiAgICAgICAgICByZXR1cm4gJ0F1dGhvcmlzYXRpb24gbnVtYmVyJztcclxuICAgICAgICBjYXNlICdRTEQnOlxyXG4gICAgICAgICAgcmV0dXJuICdBcHByb3ZhbCBudW1iZXInO1xyXG4gICAgICAgIGNhc2UgJ1NBJzpcclxuICAgICAgICAgIHJldHVybiAnUGVybWl0IG51bWJlcic7XHJcbiAgICAgICAgY2FzZSAnVEFTJzpcclxuICAgICAgICAgIHJldHVybiAnQXV0aG9yaXR5IG51bWJlcic7XHJcbiAgICAgICAgY2FzZSAnVklDJzpcclxuICAgICAgICAgIHJldHVybiAnV2FycmFudCBudW1iZXInO1xyXG4gICAgICAgIGNhc2UgJ1dBJzpcclxuICAgICAgICAgIHJldHVybiAnQXV0aG9yaXR5IG51bWJlcic7XHJcbiAgICAgICAgY2FzZSAnQUNUJzpcclxuICAgICAgICAgIHJldHVybiAnQXBwcm92YWwgbnVtYmVyJztcclxuICAgICAgICBjYXNlICdOVCc6XHJcbiAgICAgICAgICByZXR1cm4gJ0F1dGhvcmlzYXRpb24gbnVtYmVyJztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuICdBdXRob3Jpc2F0aW9uIG51bWJlcic7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0U3RhdGVBdXRob3JpdHlMYWJlbFwiKTtcclxuICAgICAgcmV0dXJuIHN0YXRlTmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEV4dGVtcFRUUE5hbWUoc2VsZWN0ZWRGb3JtdWxhdGlvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uKSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQpICYmIHNlbGVjdGVkRm9ybXVsYXRpb24uYW10Lmxlbmd0aCAhPSAwICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwcykgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwcHNbMF0udHBwTmFtZSkpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNlbGVjdGVkRm9ybXVsYXRpb24uaXRlbVN0cmVuZ3RoUXVhbnRpdHludW1iZXJPZlBhY2spICYmIHNlbGVjdGVkRm9ybXVsYXRpb24uaXRlbVN0cmVuZ3RoUXVhbnRpdHludW1iZXJPZlBhY2sgIT0gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID09IHRydWUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwc1swXS50cHBOYW1lO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwc1swXS50cHBOYW1lICsgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eSkgPyAnIFsnICsgc2VsZWN0ZWRGb3JtdWxhdGlvbi5pdGVtU3RyZW5ndGhRdWFudGl0eSArICddJyArICcgeCAnIDogXCJcIikgKyBzZWxlY3RlZEZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5bnVtYmVyT2ZQYWNrKS50cmltKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmxlbWkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS50cHBzWzBdLnRwcE5hbWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChzZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS50cHBzWzBdLnRwcE5hbWUgKyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5KSA/ICcgWycgKyBzZWxlY3RlZEZvcm11bGF0aW9uLml0ZW1TdHJlbmd0aFF1YW50aXR5ICsgJ10nIDogXCJcIikpLnRyaW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uPy5wcm9kdWN0TmFtZSkgPyBzZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lLnRyaW0oKSA6IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldEV4dGVtcFRUUE5hbWVcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm91bmREYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciByb3VuZF9WYWwgPSBNYXRoLnJvdW5kKHZhbHVlKTtcclxuICAgICAgaWYgKHJvdW5kX1ZhbCA8IDApIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB2YXIgcm91bmRfVmFsMSA9IHJvdW5kX1ZhbC50b1N0cmluZygpO1xyXG4gICAgICAgIC8vIHJvdW5kX1ZhbCA9IHBhcnNlSW50KHJvdW5kX1ZhbDEsMTApO1xyXG4gICAgICAgIHJldHVybiByb3VuZF9WYWwxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInJvdW5kRGF0YVwiKTtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlcnhNZWRpY2FyZUNhcmQobWVkaWNhcmVOdW1iZXI6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIG1lZGljYXJlQ2FyZCA9ICcnO1xyXG4gICAgICBtZWRpY2FyZUNhcmQgPSBtZWRpY2FyZU51bWJlci5zbGljZSgwLCAxMCk7XHJcbiAgICAgIHJldHVybiBtZWRpY2FyZUNhcmQ7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImVyeE1lZGljYXJlQ2FyZFwiKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlcnhNZWRpY2FyZUlSTihtZWRpY2FyZU51bWJlcjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgbWVkaWNhcmVDYXJkSVJOID0gJyc7XHJcbiAgICAgIG1lZGljYXJlQ2FyZElSTiA9IG1lZGljYXJlTnVtYmVyLnNsaWNlKC0xKTtcclxuICAgICAgcmV0dXJuIG1lZGljYXJlQ2FyZElSTjtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZXJ4TWVkaWNhcmVJUk5cIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VW51c3VhbFF0eUZsYWcoc0Zvcm11bGF0aW9uOiBhbnksIHF1YW50aXR5VmFsOiBhbnksIFByZXNjcmliZUFTOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChQcmVzY3JpYmVBUy50b0xvd2VyQ2FzZSgpID09ICdwYnMnIHx8IFByZXNjcmliZUFTLnRvTG93ZXJDYXNlKCkgPT0gJ3JwYnMnKSB7XHJcbiAgICAgICAgaWYgKHNGb3JtdWxhdGlvbi5tYXhRdHlVbml0cyAhPSBxdWFudGl0eVZhbCkge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZXRVbnVzdWFsUXR5RmxhZ1wiKTtcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3N0YXRlIG5hbWUgZnJvbSBhZGRyZXNzXHJcbiAgZ2V0U3RhdGVDb2RlRnJvbVN0YXRlTmFtZShzdGF0ZU5hbWU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgc3dpdGNoIChzdGF0ZU5hbWUudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgIGNhc2UgJ25ldyBzb3V0aCB3YWxlcyc6XHJcbiAgICAgICAgICByZXR1cm4gJ05TVyc7XHJcbiAgICAgICAgY2FzZSAncXVlZW5zbGFuZCc6XHJcbiAgICAgICAgICByZXR1cm4gJ1FMRCc7XHJcbiAgICAgICAgY2FzZSAnc291dGggYXVzdHJhbGlhJzpcclxuICAgICAgICAgIHJldHVybiAnU0EnO1xyXG4gICAgICAgIGNhc2UgJ3Rhc21hbmlhJzpcclxuICAgICAgICAgIHJldHVybiAnVEFTJztcclxuICAgICAgICBjYXNlICd2aWN0b3JpYSc6XHJcbiAgICAgICAgICByZXR1cm4gJ1ZJQyc7XHJcbiAgICAgICAgY2FzZSAnd2VzdGVybiBhdXN0cmFsaWEnOlxyXG4gICAgICAgICAgcmV0dXJuICdXQSc7XHJcbiAgICAgICAgY2FzZSAnYXVzdHJhbGlhbiBjYXBpdGFsIHRlcnJpdG9yeSc6XHJcbiAgICAgICAgICByZXR1cm4gJ0FDVCc7XHJcbiAgICAgICAgY2FzZSAnbm9ydGhlcm4gdGVycml0b3J5JzpcclxuICAgICAgICAgIHJldHVybiAnTlQnO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4gc3RhdGVOYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldFN0YXRlQ29kZUZyb21TdGF0ZU5hbWVcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0R2VuZGVyKGdlbmRlcjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgZ2VuZGVyVGV4dCA9ICdOb3QgQXZhaWxhYmxlJztcclxuICAgICAgZ2VuZGVyVGV4dCA9XHJcbiAgICAgICAgZ2VuZGVyLnRvTG93ZXJDYXNlKCkgPT0gJ20nID8gJ01hbGUnIDogZ2VuZGVyLnRvTG93ZXJDYXNlKCkgPT0gJ2YnID8gJ0ZlbWFsZScgOiAnTm90IEF2YWlsYWJsZSc7XHJcbiAgICAgIHJldHVybiBnZW5kZXJUZXh0O1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRHZW5kZXJcIik7XHJcbiAgICAgIHJldHVybiAnTm90IEF2YWlsYWJsZSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRHZW5kZXJDb2RlKGdlbmRlcjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgZ2VuZGVyQ29kZSA9ICdOb3QgQXZhaWxhYmxlJztcclxuICAgICAgZ2VuZGVyQ29kZSA9IGdlbmRlci50b0xvd2VyQ2FzZSgpID09ICdtJyA/ICdNJyA6IGdlbmRlci50b0xvd2VyQ2FzZSgpID09ICdmJyA/ICdGJyA6ICdVJztcclxuICAgICAgcmV0dXJuIGdlbmRlckNvZGU7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldEdlbmRlckNvZGVcIik7XHJcbiAgICAgIHJldHVybiAnVSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYWQodmFsdWU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHZhbHVlIDwgMTAgPyAnMCcgKyB2YWx1ZSA6IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwYWRcIik7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE9mZnNldCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgLy8gdmFyIGRhdGUgPSB0aGlzLnN0YXRlLnN0YXJ0RGF0ZTtcclxuICAgICAgdmFyIHNpZ24gPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgPiAwID8gJy0nIDogJysnO1xyXG4gICAgICB2YXIgb2Zmc2V0ID0gTWF0aC5hYnMoZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcclxuICAgICAgdmFyIGhvdXJzID0gdGhpcy5wYWQoTWF0aC5mbG9vcihvZmZzZXQgLyA2MCkpO1xyXG4gICAgICB2YXIgbWludXRlcyA9IHRoaXMucGFkKG9mZnNldCAlIDYwKTtcclxuICAgICAgcmV0dXJuIGhvdXJzICsgJzonICsgbWludXRlcztcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0T2Zmc2V0XCIpO1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBodG1sVG9Gb3JtYXR0ZWRUZXh0KHJlc3RyaWN0aW9uOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiByZXN0cmljdGlvbi5yZXBsYWNlKC88YnIgXFwvPi9nLCAnKicpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJodG1sVG9Gb3JtYXR0ZWRUZXh0XCIpO1xyXG4gICAgICByZXR1cm4gcmVzdHJpY3Rpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBicmFuZFN1YnN0aXR1dGVzTm90QWxsb3coQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93ID0gQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93O1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvd1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFBSTkNoYW5nZShQUk46IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeFBSTiA9IFBSTjtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJQUk5DaGFuZ2VcIik7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaXNDaGFuZ2VCcmFuZE5hbWUoaXNCcmFuZE5hbWU6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9IGlzQnJhbmROYW1lO1xyXG4gICAgICBpZiAoIWlzQnJhbmROYW1lKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5CcmFuZFN1YnN0aXR1dGVzTm90QWxsb3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImlzQ2hhbmdlQnJhbmROYW1lXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VuZFRvUGhhcm1hY3lDaGFuZ2UoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3kpXHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVZhbHVlID0gXCJcIjtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZW5kVG9QaGFybWFjeUNoYW5nZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluY2x1ZGVSdHBtTW9kYWwoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5pc1J0cG1OZXh0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pKSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl81MC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl81MC5jb2RlKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl81MC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl81MC5tZXNzYWdlKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMpKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pICYmIEFycmF5LmlzQXJyYXkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uWydydHBtU3RhdGVzJ10pICYmICh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb25bJ3J0cG1TdGF0ZXMnXSBhcyBhbnlbXSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgaXNSdHBtU3RhdGVzID0gKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvblsncnRwbVN0YXRlcyddIGFzIGFueVtdKS5pbmNsdWRlcyh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnN0YXRlKTtcclxuICAgICAgICAgICAgaWYgKGlzUnRwbVN0YXRlcykge1xyXG4gICAgICAgICAgICAgIHZhciBkYXRhID0gXCJUaGUgc2VsZWN0ZWQgZHJ1ZyBjb21lcyB1bmRlciBSZWFsIFRpbWUgUHJlc2NyaXB0aW9uIE1vbml0b3JpbmcgKFJUUE0pIGluIFwiICsgdGhpcy5nZXRTdGF0ZU5hbWVGcm9tU3RhdGVDb2RlKHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuc3RhdGUpICsgXCIuIFBsZWFzZSByZXZpZXcuXCJcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oUmVhbFRpbWVQcmVzY3JpcHRpb25Nb25pdG9yaW5nQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIGRhdGEpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNSdHBtTmV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByZXNjcmliZURyb3Bkb3duKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVEcm9wZG93bigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByZXNjcmliZURyb3Bkb3duKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucHJlc2NyaWJlRHJvcGRvd24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wcmVzY3JpYmVEcm9wZG93bigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImluY2x1ZGVSdHBtTW9kYWxcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBFcHJlc2NyaXBlU2VuZChmbGFnOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5lUHJlc2NyaXB0aW9uVmFsaWRhdGlvbigpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlID0gJ0UnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0UEJUTkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hYm9ydGRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZmxhZyA9PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmlzZXByaXNjcmliZXByaW50ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dBdXRob3JpdHlCb3godGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucywgdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUywgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSwgdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTLnRvTG93ZXJDYXNlKCkgPT09IFwicGJzXCIgJiYgdGhpcy5nZXRTdGF0ZUNvZGVGcm9tU3RhdGVOYW1lKHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuc3RhdGUpLnRvVXBwZXJDYXNlKCkgPT0gXCJOU1dcIikge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKFBhc3N3b3JkQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIDEpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5lbWVyZ2VuY3lTdXBwbHkgJiYgZmxhZyAhPSAyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkNvbmZpcm1QYXRpZW50UG9wdXAoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhudW1iZXIgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeGVtYWlsSWQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1ByaW50QXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlc2NyaWJlTWVkKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3kgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5ICYmIGZsYWcgIT0gMikge1xyXG4gICAgICAgICAgICB0aGlzLkNvbmZpcm1QYXRpZW50UG9wdXAoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeG51bWJlciA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhlbWFpbElkID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1ByaW50QXZhaWxhYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB2YXIgc2NoZWR1bGVOdW1iZXIgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QgPyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBvaXNvbkNsYXNzaWZpY2F0aW9uKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucG9pc29uQ2xhc3NpZmljYXRpb24ucG9pc29uQ2xhc3Nlcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzWzBdKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzWzBdLnRvTG93ZXJDYXNlKCkgPT0gJ3Vuc2NoZWR1bGVkJyA/ICcnIDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBvaXNvbkNsYXNzaWZpY2F0aW9uLnBvaXNvbkNsYXNzZXNbMF0gOiAnJykgOiBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0ICYmIHNjaGVkdWxlTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT0gJ3M4JyAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMuaXNQYXNzd29yZENoZWNrKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKFBhc3N3b3JkQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIDIpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VDb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVNZWQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnByZXNjcmliZU1lZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiRXByZXNjcmlwZVNlbmRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBDb25maXJtUGF0aWVudFBvcHVwKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKENvbmZpcm1QYXRpZW50Q29udGFjdERldGFpbHNDb21wb25lbnQsIHRoaXMuY29udGVudCwgMSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICE9IG51bGwpIHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zY2hlZHVsZU51bWJlci50b0xvd2VyQ2FzZSgpID09ICdzOCcgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLmlzUGFzc3dvcmRDaGVjaykge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oUGFzc3dvcmRDb21wb25lbnQsIHRoaXMuY29udGVudCwgMikuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNQcmludEF2YWlsYWJsZSA9IHJlc3BvbnNlLmlzUHJpbnRBdmFpbGFibGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gcmVzcG9uc2UuQWRkcmVzc1NlbmRUb0FkZFR5cGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4bnVtYmVyID0gcmVzcG9uc2UucnhudW1iZXI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4ZW1haWxJZCA9IHJlc3BvbnNlLnJ4ZW1haWxJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlc2NyaWJlTWVkKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNQcmludEF2YWlsYWJsZSA9IHJlc3BvbnNlLmlzUHJpbnRBdmFpbGFibGU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuQWRkcmVzc1NlbmRUb0FkZFR5cGUgPSByZXNwb25zZS5BZGRyZXNzU2VuZFRvQWRkVHlwZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeG51bWJlciA9IHJlc3BvbnNlLnJ4bnVtYmVyO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4ZW1haWxJZCA9IHJlc3BvbnNlLnJ4ZW1haWxJZDtcclxuICAgICAgICAgICAgdGhpcy5wcmVzY3JpYmVNZWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlID0gJyc7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzUHJpbnRBdmFpbGFibGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuQWRkcmVzc1NlbmRUb0FkZFR5cGUgPSBcIlwiO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeG51bWJlciA9IFwiXCI7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4ZW1haWxJZCA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiQ29uZmlybVBhdGllbnRQb3B1cFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByZXNjcmlwZVByaW50KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCh0aGlzLmNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpcHRpb24gPT09IHRydWUgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscz8uc2NyaXB0VHlwZSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZS50b1VwcGVyQ2FzZSgpID09ICdNJyAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzPy5zdGF0dXMpICYmIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9ICdkcmFmdCcpIHx8ICh0aGlzLmNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpcHRpb24gPT09IHRydWUgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscz8uc2NyaXB0VHlwZSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZS50b1VwcGVyQ2FzZSgpID09ICdFJykpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hYm9ydGRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlID0gJ00nO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzUHJpbnRBdmFpbGFibGUgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gXCJTTVNcIjtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB2YXIgc2NoZWR1bGVOdW1iZXIgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QgPyAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBvaXNvbkNsYXNzaWZpY2F0aW9uKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucG9pc29uQ2xhc3NpZmljYXRpb24ucG9pc29uQ2xhc3Nlcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzWzBdKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbi5wb2lzb25DbGFzc2VzWzBdLnRvTG93ZXJDYXNlKCkgPT0gJ3Vuc2NoZWR1bGVkJyA/ICcnIDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBvaXNvbkNsYXNzaWZpY2F0aW9uLnBvaXNvbkNsYXNzZXNbMF0gOiAnJykgOiBcIlwiO1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0ICYmIHNjaGVkdWxlTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT0gJ3M4JyAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMuaXNQYXNzd29yZENoZWNrKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKFBhc3N3b3JkQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsMikuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5yZXNwb25zZUNvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXNjcmliZU1lZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucHJlc2NyaWJlTWVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaXBlUHJpbnRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmRpY2F0aW9uQXV0aG9yaXR5KG1heFF0eVVuaXRzOiBhbnksIHF1YW50aXR5VmFsOiBhbnksIHJlcGVhdHM6IGFueSwgcmVwZWF0c1ZhbDogYW55LCBpbmRleDogYW55LCByZXN0cmljdGlvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMpICYmIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09ICdwcmVzY3JpYmVkJyAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9ucyA9ICcnO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHZhciB0ZW1wRGl2RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICB2YXIgcmVwbGFjZXZhbHVlID0gdGhpcy5odG1sVG9Gb3JtYXR0ZWRUZXh0KHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVGV4dCk7XHJcbiAgICAgIHRlbXBEaXZFbGVtZW50LmlubmVySFRNTCA9IHJlcGxhY2V2YWx1ZTtcclxuICAgICAgdmFyIHZhbHVlID0gdGVtcERpdkVsZW1lbnQudGV4dENvbnRlbnQgfHwgdGVtcERpdkVsZW1lbnQuaW5uZXJUZXh0IHx8ICcnO1xyXG4gICAgICBpZiAoKCF0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5V2l0aFVuaXRGbGFnID8gcGFyc2VGbG9hdChtYXhRdHlVbml0cykgOiAxKSA8IHBhcnNlSW50KHF1YW50aXR5VmFsKSB8fCBwYXJzZUludChyZXBlYXRzKSA8IHBhcnNlSW50KHJlcGVhdHNWYWwpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgPSBpbmRleDtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8gPSAnJztcclxuICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgPSBpbmRleDtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8gPSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCA/IHJlc3RyaWN0aW9uLnN0cmVhbWxpbmVkQ29kZSA6ICcnO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJpbmRpY2F0aW9uQXV0aG9yaXR5XCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TWF4UXVhbnRpdHkoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LnBic1R5cGUpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlLnRvTG93ZXJDYXNlKCkgPT0gXCJub24gcGJzXCIpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm51bWJlck9mUGFjayArIFwieFwiICsgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnVuaXRQZXJQYWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubnVtYmVyT2ZQYWNrKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/Lm51bWJlck9mUGFjayAhPSAwKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm51bWJlck9mUGFjaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5tYXhRdHlVbml0cykpXHJcbiAgICAgICAgICByZXR1cm4gKHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlXaXRoVW5pdEZsYWcgPyBcIjEgeCBcIiA6IFwiXCIpICsgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzXHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0TWF4UXVhbnRpdHlcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdFF1YW50aXR5KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0ICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5udW1iZXJPZlBhY2spICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubnVtYmVyT2ZQYWNrICE9IDApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm51bWJlck9mUGFjaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/Lm1heFF0eVVuaXRzKSkge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVdpdGhVbml0RmxhZyA/IFwiMSB4IFwiIDogXCJcIikgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubWF4UXR5VW5pdHNcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0RGVmYXVsdFF1YW50aXR5XCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvbklucHV0Q2hhbmdlKG5ld1ZhbHVlOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9ucyA9IG5ld1ZhbHVlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIm9uSW5wdXRDaGFuZ2VcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbklucHV0Y2hhbmdlQXBwcm92YWxObyhuZXdWYWx1ZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObyA9IG5ld1ZhbHVlLnJlcGxhY2UoL1teYS16QS1aIDAtOV0vZywgXCJcIikucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJvbklucHV0Y2hhbmdlQXBwcm92YWxOb1wiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFkZEF1dGhWYWx1ZShudW06IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobnVtKSkge1xyXG4gICAgICAgIGNvbnN0IGFyck9mRGlnaXRzID0gQXJyYXkuZnJvbShTdHJpbmcobnVtKSwgTnVtYmVyKTtcclxuICAgICAgICBsZXQgdmFsdWVPZkF1dGhvcml0eUFyciA9IHRoaXMuYWRkQXV0aFZhbHVlKGFyck9mRGlnaXRzKTtcclxuICAgICAgICBsZXQgZ2V0UmVtYWluZGVyVmFsdWUgPSB2YWx1ZU9mQXV0aG9yaXR5QXJyICUgOTtcclxuICAgICAgICBsZXQgYWRkUmVtYWluZGVyVmFsdWVBdExhc3QgPSAnJyArIG51bSArIGdldFJlbWFpbmRlclZhbHVlLnRvRml4ZWQoKTtcclxuICAgICAgICByZXR1cm4gYWRkUmVtYWluZGVyVmFsdWVBdExhc3Q7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0QWRkQXV0aFZhbHVlXCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEF1dGhWYWx1ZShhcnJPZkRpZ2l0czogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgYWRkZWRWYWx1ZSA9IDA7XHJcbiAgICAgIGFyck9mRGlnaXRzLm1hcCgobnVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICBhZGRlZFZhbHVlID0gbnVtICsgYWRkZWRWYWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBhZGRlZFZhbHVlO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJhZGRBdXRoVmFsdWVcIik7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy90aGUgYmVsb3cgY29kZSB3aWxsIGhpdCB0aGUgZVJYIGFuZCByZXR1cm4gdGhlIHZhbHVlIHdpdGggYmFyY29kZVxyXG4gIHByZXNjcmliZU1lZCgpIHtcclxuICAgIHZhciBib2R5ID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5zaG93QXV0aG9yaXR5Qm94KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMsIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMsIHRoaXMuY29tbW9uU2VydmljZXMucnhBdXRob3JpdHksIHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5hcHByb3ZhbE5vKSkge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNTMubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNTMuY29kZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNTMuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNTMubWVzc2FnZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdFR5cGUudG9Mb3dlckNhc2UoKSA9PSBcImVcIikge1xyXG4gICAgICAgIHRoaXMuYWJvcnRCdG5GbGFnID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdFBCVE5Ecm9wZG93biA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZU1lZExvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gdHJ1ZTtcclxuICAgICAgdmFyIHBhdGllbnREZXRhaWxzID0gdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscztcclxuICAgICAgdmFyIHBoeXNpY2lhbkRldGFpbHMgPSB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHM7XHJcbiAgICAgIHZhciBzZWxlY3RlZEZvcm11bGF0aW9uID0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uO1xyXG4gICAgICB2YXIgbWVkaWNhcmVDYXJkID0gJyc7XHJcbiAgICAgIGlmIChwYXRpZW50RGV0YWlscy5tZWRpY2FyZU51bWJlcikge1xyXG4gICAgICAgIHZhciBtZWRObzEgPSBwYXRpZW50RGV0YWlscy5tZWRpY2FyZU51bWJlci5yZXBsYWNlKC8gL2csICcnKTtcclxuICAgICAgICBtZWRObzEgPSBtZWRObzEucmVwbGFjZSgvXy9nLCAnJyk7XHJcbiAgICAgICAgbWVkTm8xID0gbWVkTm8xLnJlcGxhY2UoLy0vZywgJycpO1xyXG4gICAgICAgIG1lZGljYXJlQ2FyZCA9IG1lZE5vMTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgcGJzTWFudWZhY3R1cmVyQ29kZVNldCA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbikgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNNYW51ZmFjdHVyZXJDb2RlcykgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNNYW51ZmFjdHVyZXJDb2Rlcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNlbGVjdGVkRm9ybXVsYXRpb24ucGJzTWFudWZhY3R1cmVyQ29kZXNbMF0pID8gc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNNYW51ZmFjdHVyZXJDb2Rlc1swXSA6ICcnO1xyXG4gICAgICBsZXQgY2hlY2tBdXRob3JpdHlCb3ggPSB0aGlzLnNob3dBdXRob3JpdHlCb3goc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMsIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMsIHRoaXMuY29tbW9uU2VydmljZXMucnhBdXRob3JpdHksIHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSk7XHJcbiAgICAgIGJvZHkgPSB7XHJcbiAgICAgICAgaXNTaG93QXV0aG9yaXR5OiB0aGlzLmNvbW1vblNlcnZpY2VzLmlzU2hvd0F1dGhvcml0eSxcclxuICAgICAgICBwYnNMaXN0SW5zdHJ1Y3Rpb25zOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9ucykgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnMgOiBcIlwiLFxyXG4gICAgICAgIGlzQnJhbmROYW1lOiB0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lLFxyXG4gICAgICAgIGluY2x1ZGVCcmFuZEZsYWc6IHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUsXHJcbiAgICAgICAgcmVzdHJpY3RlZFBic1NlbGVjdGVkSW5kZXg6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgKyAxIDogJycsXHJcbiAgICAgICAgcnhJZDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4aWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5yeGlkIDogJycsXHJcbiAgICAgICAgbUFQYXRpZW50SWQ6IHRoaXMuY29tbW9uU2VydmljZXMudmVuZG9yUGF0aWVudElkLFxyXG4gICAgICAgIG1BUGhhcm1hY2lzdElkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnZlbmRvclBoeXNpY2lhbklkLFxyXG4gICAgICAgIG1BRmFjaWxpdHlJZDogdGhpcy5jb21tb25TZXJ2aWNlcy52ZW5kb3JGYWNpbGl0eUlkLFxyXG4gICAgICAgIHByaXZhY3lTdGF0ZW1lbnQ6IHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0VHlwZS50b0xvd2VyQ2FzZSgpID09ICdlJyA/IDAgOiAxLFxyXG4gICAgICAgIGhwaUk6IHBoeXNpY2lhbkRldGFpbHMuaHBpaU51bWJlcixcclxuICAgICAgICBwcmVzY3JpYmVyTnVtYmVyOiBwaHlzaWNpYW5EZXRhaWxzLnByZXNjcmliZXJOdW1iZXIsXHJcbiAgICAgICAgcHJlc2NyaWJlckFocHJhTnVtYmVyOiBwaHlzaWNpYW5EZXRhaWxzLnByZXNjcmliZXJBaHByYU51bWJlcixcclxuICAgICAgICBwcmVzY3JpYmVyR2l2ZW5OYW1lczogcGh5c2ljaWFuRGV0YWlscy5maXJzdE5hbWUsXHJcbiAgICAgICAgcHJlc2NyaWJlckZhbWlseU5hbWU6IHBoeXNpY2lhbkRldGFpbHMubGFzdE5hbWUsXHJcbiAgICAgICAgcHJlc2NyaWJlckhvbWVNb2JpbGU6IHBoeXNpY2lhbkRldGFpbHMubW9iaWxlUGhvbmUsXHJcbiAgICAgICAgcHJlc2NyaWJlckhvbWVFbWFpbDogcGh5c2ljaWFuRGV0YWlscy5lbWFpbCxcclxuICAgICAgICBvcmdIcGlPOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLmhwaW9OdW1iZXIpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMuaHBpb051bWJlciA6ICcnLFxyXG4gICAgICAgIG9yZ05hbWU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnTmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdOYW1lIDogJycsXHJcbiAgICAgICAgb3JnRW1haWw6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnRW1haWwpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnRW1haWwgOiAnJyxcclxuICAgICAgICBvcmdQb3N0YWxBZGRyZXNzTGluZTE6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc0xpbmUxKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NMaW5lMSA6ICcnLFxyXG4gICAgICAgIG9yZ1Bvc3RhbEFkZHJlc3NMaW5lMjogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzTGluZTIpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc0xpbmUyIDogJycsXHJcbiAgICAgICAgb3JnUG9zdGFsQWRkcmVzc1N1YnVyYjogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzU3VidXJiKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NTdWJ1cmIgOiAnJyxcclxuICAgICAgICBvcmdQb3N0YWxBZGRyZXNzUG9zdENvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc1Bvc3RDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NQb3N0Q29kZSA6ICcnLFxyXG4gICAgICAgIG9yZ1Bvc3RhbEFkZHJlc3NTdGF0ZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzU3RhdGUpID8gdGhpcy5nZXRTdGF0ZUNvZGVGcm9tU3RhdGVOYW1lKHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NTdGF0ZSkgOiAnJyxcclxuICAgICAgICBpaGk6IHBhdGllbnREZXRhaWxzLmloaU51bWJlcixcclxuICAgICAgICBtZWRpY2FyZU51bWJlcjogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShtZWRpY2FyZUNhcmQpID8gdGhpcy5lcnhNZWRpY2FyZUNhcmQobWVkaWNhcmVDYXJkKSA6ICcnLFxyXG4gICAgICAgIG1lZGljYXJlSXJuOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZGljYXJlQ2FyZCkgPyB0aGlzLmVyeE1lZGljYXJlSVJOKG1lZGljYXJlQ2FyZCkgOiAnJyxcclxuICAgICAgICBtZWRpY2FyZU51bWJlckV4cGlyeTogcGF0aWVudERldGFpbHMubWVkaWNhcmVFeHBpcnksXHJcbiAgICAgICAgZGF0ZU9mQmlydGg6IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHBhdGllbnREZXRhaWxzLmRvYiwgJ3l5eXktTU0tZGQnKSxcclxuICAgICAgICBmYW1pbHlOYW1lOiBwYXRpZW50RGV0YWlscy5sYXN0TmFtZSxcclxuICAgICAgICBnaXZlbk5hbWVzOiBwYXRpZW50RGV0YWlscy5maXJzdE5hbWUsXHJcbiAgICAgICAgcGF0aWVudFVzZXJJZFN0cmluZzogdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5wYXRpZW50VXNlcklkLFxyXG4gICAgICAgIHVzZXJJZFN0cmluZzogdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZCxcclxuICAgICAgICBnZW5kZXJDb2RlOiB0aGlzLmdldEdlbmRlckNvZGUocGF0aWVudERldGFpbHMuZ2VuZGVyKSxcclxuICAgICAgICBob21lTW9iaWxlOiBwYXRpZW50RGV0YWlscy5waG9uZSxcclxuICAgICAgICBob21lRW1haWw6IHBhdGllbnREZXRhaWxzLmVtYWlsLFxyXG4gICAgICAgIGFkZHJlc3NMaW5lMTogcGF0aWVudERldGFpbHMuYWRkcmVzczEsXHJcbiAgICAgICAgYWRkcmVzc0xpbmUyOiBwYXRpZW50RGV0YWlscy5hZGRyZXNzMixcclxuICAgICAgICBhZGRyZXNzU3VidXJiOiBwYXRpZW50RGV0YWlscy5jaXR5LFxyXG4gICAgICAgIGFkZHJlc3NQb3N0Q29kZTogcGF0aWVudERldGFpbHMucG9zdENvZGUsXHJcbiAgICAgICAgYWRkcmVzc1N0YXRlOiB0aGlzLmdldFN0YXRlQ29kZUZyb21TdGF0ZU5hbWUocGF0aWVudERldGFpbHMuc3RhdGUpLFxyXG4gICAgICAgIHByZXNjcmlwdGlvbldyaXR0ZW5EYXRlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0RGF0ZSkgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdERhdGUsICd5eXl5LU1NLWRkJykgOiBcIlwiLFxyXG4gICAgICAgIGZvcm1UZXh0OiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNlbGVjdGVkRm9ybXVsYXRpb24/LmRvc2FnZUZvcm0pID8gc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtIDogXCJcIixcclxuICAgICAgICBzdHJlbmd0aDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uPy5tb2xlY3VsZVN0cmVuZ3RoKSA/IHNlbGVjdGVkRm9ybXVsYXRpb24ubW9sZWN1bGVTdHJlbmd0aCA6IFwiIFwiLFxyXG4gICAgICAgIGRpcmVjdGlvbnM6IHRoaXMuZ2V0RGlyZWN0aW9ucygpLFxyXG4gICAgICAgIGJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvd2VkOiB0aGlzLmNvbW1vblNlcnZpY2VzLkJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvdyA9PSB0cnVlID8gMCA6IDEsXHJcbiAgICAgICAgbWF4aW11bU51bWJlck9mUmVwZWF0czogdGhpcy5jb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsLFxyXG4gICAgICAgIG1pbmltdW1JbnRlcnZhbEJldHdlZW5SZXBlYXRzOiB0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsICE9IHVuZGVmaW5lZCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsICE9IG51bGwgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCAhPSBcIlwiID8gcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCkgOiBcIi0xXCIsXHJcbiAgICAgICAgcGF0aWVudEN0Z0ZsYWc6IHRoaXMuY29tbW9uU2VydmljZXMuQ1RHQ29QYXltZW50ID09IHRydWUgPyAwIDogMSxcclxuICAgICAgICBwYnNJdGVtQ29kZUNvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlIDogXCJcIixcclxuICAgICAgICBwYnNJdGVtQ29kZVRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNDb2RlVGV4dCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzQ29kZVRleHQgOiBcIlwiLFxyXG4gICAgICAgIHBic0l0ZW1NYW51ZmFjdHVyZXI6IHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUgPyBwYnNNYW51ZmFjdHVyZXJDb2RlU2V0IDogJycsXHJcbiAgICAgICAgc3RhdGVBdXRob3JpdHlOdW1iZXI6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5TdGF0ZUF1dGhvcml0eU51bWJlcikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLlN0YXRlQXV0aG9yaXR5TnVtYmVyLnRyaW0oKSA6ICcnLFxyXG4gICAgICAgIHJlYXNvbkZvclRoZXJhcGV1dGljR29vZDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmlwdGlvblJlYXNvbikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmlwdGlvblJlYXNvbi50cmltKCkgOiAnJyxcclxuICAgICAgICB1bnVzdWFsUXR5RmxhZzogdGhpcy5zZXRVbnVzdWFsUXR5RmxhZyh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24sIHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwsIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMpLFxyXG4gICAgICAgIHF1YW50aXR5T2ZUaGVyYXBldXRpY0dvb2RRdWFudGl0eTogcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCksXHJcbiAgICAgICAgY29tcGxleEluc3RydWN0aW9uczogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlLnRyaW0oKSA6IFwiXCIsXHJcbiAgICAgICAgYW10TXBwQ29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LkFNVE1QUENvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLkFNVE1QUENvZGUgOiBcIlwiLFxyXG4gICAgICAgIGFtdE1wcE5hbWU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXQpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQubGVuZ3RoICE9IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLm1wcHMpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwc1swXS5tcHBOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwc1swXS5tcHBOYW1lIDogJycsXHJcbiAgICAgICAgYW10VHBwQ29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LkFNVFRQUENvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLkFNVFRQUENvZGUgOiBcIlwiLFxyXG4gICAgICAgIGFtdFRwcE5hbWU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXQpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQubGVuZ3RoICE9IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwcHMpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwcy5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwc1swXS50cHBOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwc1swXS50cHBOYW1lIDogJycsXHJcbiAgICAgICAgYW10VHBDb2RlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uQU1UVFBDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5BTVRUUENvZGUgOiBcIlwiLFxyXG4gICAgICAgIGFtdFRwTmFtZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmFtdCkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdC5sZW5ndGggIT0gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBOYW1lIDogJycsXHJcbiAgICAgICAgYW10Q29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmFtdCkgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10LmFtdGNvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdC5hbXRjb2RlIDogJycsXHJcbiAgICAgICAgdGhlcmVwZXV0aWNHb29kSWRlbnRpZmljYXRpb25NaW1zQ29kZTogJycsXHJcbiAgICAgICAgdGhlcmVwZXV0aWNHb29kSWRlbnRpZmljYXRpb25Mb2NhbENvZGU6ICcnLFxyXG4gICAgICAgIC8vIHRoZXJlcGV1dGljR29vZElkZW50aWZpY2F0aW9uRWFuQ29kZTogXCJcIixcclxuICAgICAgICB0aGVyZXBldXRpY0dvb2RJZGVudGlmaWNhdGlvbkVhblRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlLnRvTG93ZXJDYXNlKCkgPT0gJ25vbiBwYnMnICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSA6ICcnLFxyXG4gICAgICAgIHByZXNjcmliZXJPY2N1cGF0aW9uQ29kZTogcGh5c2ljaWFuRGV0YWlscy5vY2N1cGF0aW9uQ29kZSxcclxuICAgICAgICBwcmVzY3JpYmVyT2NjdXBhdGlvblRleHQ6IHBoeXNpY2lhbkRldGFpbHMub2NjdXBhdGlvblRleHQsXHJcbiAgICAgICAgcHJlc2NyaWJlclBlcnNvblRpdGxlOiBwaHlzaWNpYW5EZXRhaWxzLnByZWZpeCxcclxuICAgICAgICBwcmVzY3JpYmVyUXVhbGlmaWNhdGlvbnM6IHBoeXNpY2lhbkRldGFpbHMuc3VmZml4LFxyXG4gICAgICAgIG9yZ1Bob25lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ01vYmlsZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdNb2JpbGUgOiAnJyxcclxuICAgICAgICBvcmdGYXg6ICcnLFxyXG4gICAgICAgIGxvY2FsU3lzdGVtSUQ6IHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMucGF0aWVudFVzZXJJZCxcclxuICAgICAgICBhZGRyZXNzU2VuZFRvQWRkVHlwZTogdGhpcy5jb21tb25TZXJ2aWNlcy5BZGRyZXNzU2VuZFRvQWRkVHlwZSxcclxuICAgICAgICBhZGRyZXNzRW1haWw6IHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4ZW1haWxJZCkgPyBwYXRpZW50RGV0YWlscy5lbWFpbCA6IHRoaXMuY29tbW9uU2VydmljZXMucnhlbWFpbElkLFxyXG4gICAgICAgIGFkZHJlc3NTbXM6IHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4bnVtYmVyKSA/IHBhdGllbnREZXRhaWxzLnBob25lIDogdGhpcy5jb21tb25TZXJ2aWNlcy5yeG51bWJlcixcclxuICAgICAgICBnZW5kZXJUZXh0OiB0aGlzLmdldEdlbmRlcihwYXRpZW50RGV0YWlscy5nZW5kZXIpLFxyXG4gICAgICAgIGFkZHJlc3NMaW5lMzogJycsXHJcbiAgICAgICAgcHJlc2NyaXB0aW9uV3JpdHRlblV0Y1RpbWU6ICcwMS0wMS0xOTcwIDA5OjA2OjA5JywgLy8gcHJlc2NyaXB0aW9uV3JpdHRlblV0Y1RpbWU6IG1vbWVudChuZXcgRGF0ZSgpKS5mb3JtYXQoXCJNTS1ERC15eXl5IGhoOm1tOnNzXCIpLFxyXG4gICAgICAgIHByZXNjcmlwdGlvbldyaXR0ZW5VdGNPZmZzZXQ6IHRoaXMuZ2V0T2Zmc2V0KCksXHJcbiAgICAgICAgcHJlc2NyaXB0aW9uRXhwaXJlc1ZhbHVlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZW5kRGF0ZSkgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNvbW1vblNlcnZpY2VzLmVuZERhdGUsICdNTS9kZC95eXl5JykgOiBcIlwiLFxyXG4gICAgICAgIGFjdGl2ZUluZ3JlZGllbnQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSA6IFwiXCIsXHJcbiAgICAgICAgZm9ybUNvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0pID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0gOiBcIlwiLFxyXG4gICAgICAgIGZvcm11bGE6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmZvcm11bGEpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmZvcm11bGEgOiBcIlwiLFxyXG4gICAgICAgIGFkZGl0aW9uYWxDb21tZW50czogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmRvY3Rvck5vdGVzKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZG9jdG9yTm90ZXMudHJpbSgpIDogXCJcIixcclxuICAgICAgICBhc2xDb25zZW50OiAxLFxyXG4gICAgICAgIHByZXNjcmlwdGlvbk5vdGVEZXRhaWxOb3RlOiB0aGlzLmNvbW1vblNlcnZpY2VzLnB1cnBvc2VTZWFyY2hWYWx1ZS50cmltKCksXHJcbiAgICAgICAgZHZhTnVtYmVyOiBwYXRpZW50RGV0YWlscy5kdmFOdW1iZXIsXHJcbiAgICAgICAgZHZhVHlwZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmR2YUNhcmRUeXBlKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmR2YUNhcmRUeXBlLnRvTG93ZXJDYXNlKCkgIT0gJ25vbmUnID8gcGF0aWVudERldGFpbHMuZHZhQ2FyZFR5cGUuc2xpY2UoMCwgMSkudG9VcHBlckNhc2UoKSA6ICcnLFxyXG4gICAgICAgIHBic0FwcHJvdmFsTnVtYmVyOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObykgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8udHJpbSgpIDogJycsIC8vaW5mb3JtIHRvIHN0ZXBoZW5cclxuICAgICAgICByb3V0ZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlLnRyaW0oKSA6ICcnLFxyXG4gICAgICAgIC8vcHJvdmlkZXJOdW1iZXI6JycsXHJcbiAgICAgICAgcHJlc2NyaWJlclR5cGU6IHBoeXNpY2lhbkRldGFpbHMucHJlc2NyaWJlclR5cGUsXHJcbiAgICAgICAgbWVkaWNpbmVOYW1lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ucHJvZHVjdE5hbWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lIDogXCJcIixcclxuICAgICAgICBicmFuZE5hbWU6IHRoaXMuZ2V0QnJhbmROYW1lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiksXHJcbiAgICAgICAgZ2VuZXJpY05hbWU6IHRoaXMuaHRtbFRvVGV4dENvbnZlcnQoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LklzRXh0ZW1wKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gdHJ1ZSA/IHRoaXMuZ2V0RXh0ZW1wVFRQTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pIDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmdlbmVyaWNOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSA6IHRoaXMuZ2V0RXh0ZW1wTVBQTmFtZSgpKSxcclxuICAgICAgICAvL2l0ZW1HZW5lcmljSW50ZW50aW9uOiBnZXRJdGVtR2VuZXJpY0ludGVudGlvbih0aGlzLnN0YXRlLmxlbWksdGhpcy5zdGF0ZS5pc0JyYW5kTmFtZSx0aGlzLnN0YXRlLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSksXHJcbiAgICAgICAgaXRlbUdlbmVyaWNJbnRlbnRpb246IHRoaXMuY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCAhPSB0cnVlID8gJ0InIDogJ0cnLFxyXG4gICAgICAgIHNjaGVkdWxlTnVtYmVyOiB0aGlzLnBheUxvYWRTdGF0ZVNjaGVkdWxlTnVtYmVyKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbikgIT0gXCJcIiA/IHRoaXMucGF5TG9hZFN0YXRlU2NoZWR1bGVOdW1iZXIodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSA6IHRoaXMuY29tbW9uU2VydmljZXMuZ2V0U2NoZWR1bGVOdW1iZXIodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSxcclxuICAgICAgICBkb2N0b3JOb3RlczogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmRvY3Rvck5vdGVzKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZG9jdG9yTm90ZXMudHJpbSgpIDogXCJcIixcclxuICAgICAgICByZWd1bGF0aW9uMjQ6IHRoaXMuY29tbW9uU2VydmljZXMucmVndWxhdGlvbjI0ID09IGZhbHNlID8gMSA6IDAsXHJcbiAgICAgICAgaXNFeHRlbXA6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiAhPSBudWxsICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCAhPSBudWxsID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wID09IHRydWUgPyAwIDogMSA6IDEsXHJcbiAgICAgICAgLy8gZXh0ZW1wb3JhbmVvdXNEZXNjcmlwdGlvbjogdGhpcy5zdGF0ZS5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGwgJiYgdGhpcy5zdGF0ZS5zZWxlY3RlZEZvcm11bGF0aW9uLkV4dGVtcG9yYW5lb3VzRGVzY3JpcHRpb24gIT0gJycgPyB0aGlzLnN0YXRlLnNlbGVjdGVkRm9ybXVsYXRpb24uRXh0ZW1wb3JhbmVvdXNEZXNjcmlwdGlvbiA6ICcnLFxyXG4gICAgICAgIGV4dGVtcG9yYW5lb3VzRGVzY3JpcHRpb246IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSB0cnVlID8gdGhpcy5nZXRFeHRlbXBUVFBOYW1lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbikgOiAnJyxcclxuICAgICAgICBhbm5vdGF0aW9uOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuYW5ub3RhdGlvbikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmFubm90YXRpb24udHJpbSgpIDogXCJcIixcclxuICAgICAgICB1blVzdWFsRG9zZUZsYWc6IHRoaXMuY29tbW9uU2VydmljZXMudW5Vc3VhbERvc2VGbGFnID09IGZhbHNlID8gMSA6IDAsXHJcbiAgICAgICAgdHJhZGVOYW1lOiB0aGlzLmh0bWxUb1RleHRDb252ZXJ0KHRoaXMuZ2V0VHJhZGVOYW1lKCkpLFxyXG4gICAgICAgIC8vcmVzdHJpY3Rpb25zOiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zICE9IG51bGwgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucyAhPSAnJyA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXN0cmljdGlvbnMgOiAnJyxcclxuICAgICAgICAvLyBwcmVzY3JpYmVyUGVyc29uVGl0bGU6IHBoeXNpY2lhbkRldGFpbHMucHJlZml4LFxyXG4gICAgICAgIG1heGltdW1JbnRlcnZhbEJldHdlZW5SZXBlYXRzOiAnJyxcclxuICAgICAgICBjb21wbGV4SWQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuY29tcGxleElkKSA/IHRoaXMuY29tbW9uU2VydmljZXMuY29tcGxleElkIDogMCxcclxuICAgICAgICB2aXNpdElkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnZpc2l0SWQsXHJcbiAgICAgICAgc2NyaXB0VHlwZTogdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlLFxyXG4gICAgICAgIGRvc2U6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUgOiBcIlwiLFxyXG4gICAgICAgIGZyZXF1ZW5jeTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSA6IFwiXCIsXHJcbiAgICAgICAgZm9vZDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZSA6IFwiXCIsXHJcbiAgICAgICAgcHJlc2NyaWJlQXM6IHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMsXHJcbiAgICAgICAgcHJuOiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4UFJOID09IGZhbHNlID8gMSA6IDAsXHJcbiAgICAgICAgc2NyaXB0RGF0ZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdERhdGUpID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHREYXRlLCAneXl5eS1NTS1kZCcpIDogXCJcIixcclxuICAgICAgICBzdGFydERhdGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zdGFydERhdGUpID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jb21tb25TZXJ2aWNlcy5zdGFydERhdGUsICdNTS9kZC95eXl5JykgOiBcIlwiLFxyXG4gICAgICAgIHB1cnBvc2U6IHRoaXMuY29tbW9uU2VydmljZXMucHVycG9zZVNlYXJjaFZhbHVlLnRyaW0oKSxcclxuICAgICAgICBwYnNOb3RlczogdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNOb3RlcyxcclxuICAgICAgICBpc0FjdGl2ZTogMCxcclxuICAgICAgICBwcm9kdWN0SWQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wcm9kdWN0SWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3RJZCA6IFwiXCIsXHJcbiAgICAgICAgYW10VGV4dDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmZvcm11bGEpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmZvcm11bGEgOiBcIlwiLFxyXG4gICAgICAgIHF1YW50aXR5T2ZUaGVyYXBldXRpY0dvb2REb3NlVW5pdENvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5kb3NhZ2VGb3JtKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5kb3NhZ2VGb3JtIDogXCJcIixcclxuICAgICAgICBxdWFudGl0eU9mVGhlcmFwZXV0aWNHb29kRG9zZVVuaXRUZXh0OiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZG9zYWdlRm9ybSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybSA6IFwiXCIsXHJcbiAgICAgICAgcHJlc2NyaWJlclJvbGVDb2RlOiAnJyxcclxuICAgICAgICBwcmVzY3JpYmVyUm9sZVRleHQ6ICcnLFxyXG4gICAgICAgIG9yZ0hpY0xvY2F0aW9uSWQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnSGljTG9jYXRpb25JZCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdIaWNMb2NhdGlvbklkIDogJycsXHJcbiAgICAgICAgb3JnUm9sZUNvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUm9sZUNvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUm9sZUNvZGUgOiAnJyxcclxuICAgICAgICBvcmdSb2xlVGV4dDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdSb2xlVGV4dCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdSb2xlVGV4dCA6ICcnLFxyXG4gICAgICAgIGF1dGhvcml0eUFwcHJvdmFsTnVtYmVyOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObykgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8udHJpbSgpIDogJycsXHJcbiAgICAgICAgYXV0aG9yaXR5QXBwcm92YWxOdW1iZXJGbGFnOiBwYXJzZUZsb2F0KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cykgPCBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLnF1YW50aXR5VmFsKSB8fCBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0cykgPCBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLnJlcGVhdHNWYWwpID8gMSA6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucykgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucy5sZW5ndGggPiAwICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9uc1t0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnNJZF0uc3RyZWFtbGluZWRDb2RlKSAmJiBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zW3RoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9uc0lkXS5zdHJlYW1saW5lZENvZGUpID09IHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObykgPyAwIDogMSxcclxuICAgICAgICAvLyBwYnNBdXRob3JpdHlQcmVzY3JpcHRpb25OdW1iZXI6dGhpcy5zdGF0ZS5hcHByb3ZhbE5vID8gdGhpcy5zdGF0ZS5hcHByb3ZhbE5vIDogXCJcIixcclxuICAgICAgICAvLyBzdHJlYW1saW5lZEF1dGhvcml0eUFwcHJvdmFsTnVtYmVyOiB0aGlzLnN0YXRlLmFwcHJvdmFsTm9cclxuICAgICAgICAvLyAgID8gdGhpcy5zdGF0ZS5hcHByb3ZhbE5vXHJcbiAgICAgICAgLy8gICA6IFwiXCIsXHJcbiAgICAgICAgLy8gcGJzQXV0aG9yaXR5QXBwcm92YWxOdW1iZXI6IFwiXCIsXHJcbiAgICAgICAgLy9iYXJjb2RlXHJcbiAgICAgICAgLy9zY3JpcHROdW1iZXI6IFwiXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuc2hyaW5rU3VwZXJTY3JpcHRDb2RlKHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSksXHJcbiAgICAgICAgZW9wRGlzcGxheU5hbWU6IHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0VHlwZS50b0xvd2VyQ2FzZSgpID09IFwiZVwiID8gdGhpcy5zaHJpbmtTdXBlclNjcmlwdENvZGUodGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSkgOiB0aGlzLnNocmlua1N1cGVyU2NyaXB0Q29kZSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWUpLFxyXG4gICAgICAgIGl0ZW1TdHJlbmd0aFhtbDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/Lkl0ZW1TdHJlbmd0aFhtbCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXRlbVN0cmVuZ3RoWG1sIDogXCIgXCIsXHJcbiAgICAgICAgLy9hdXRob3JpdHlWYWx1ZVxyXG4gICAgICAgIHBic0R2YUF1dGhvcml0eU51bWJlcjogY2hlY2tBdXRob3JpdHlCb3ggPyB0aGlzLmNvbW1vblNlcnZpY2VzLmF1dGhvcml0eUZvcm1ObyA6IDAsXHJcbiAgICAgICAgcHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlOiB0aGlzLmh0bWxUb1RleHRDb252ZXJ0KHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSksLy90aGlzLnNocmlua1N1cGVyU2NyaXB0Q29kZSh0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZSksXHJcbiAgICAgICAgcHJlc2NyaWJlZEl0ZW1SZXNlcnZlZEZvdXI6IHRoaXMuc2hvd0F1dGhvcml0eUJveCh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zLCB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTLCB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4QXV0aG9yaXR5LCB0aGlzLmNvbW1vblNlcnZpY2VzLnVubGlzdGVkUkEpICYmIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMudG9Mb3dlckNhc2UoKSA9PT0gXCJwYnNcIiAmJiB0aGlzLmdldFN0YXRlQ29kZUZyb21TdGF0ZU5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5zdGF0ZSkudG9VcHBlckNhc2UoKSA9PSBcIk5TV1wiICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0VHlwZS50b0xvd2VyQ2FzZSgpID09PSBcImVcIiA/IHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlZEl0ZW1SZXNlcnZlZEZvdXIgOiAnJyxcclxuICAgICAgICB1bmxpc3RlZEl0ZW1SZXBhdEF1dGhvcml0eTogdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgaXNQcmludEF2YWlsYWJsZTogdGhpcy5jb21tb25TZXJ2aWNlcy5pc1ByaW50QXZhaWxhYmxlLFxyXG4gICAgICAgIHByZXNjcmliZWRJdGVtUmVzZXJ2ZWRPbmU6IHRoaXMuY29tbW9uU2VydmljZXMuZ2V0U2NoZWR1bGVOdW1iZXIodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKS50b0xvd2VyQ2FzZSgpID09IFwiczhcIiA/IHRoaXMubnVtYmVyVG9Xb3JkKHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwpKSA6ICcnLFxyXG4gICAgICAgIG15U0xDb25zZW50OiB0aGlzLmNvbW1vblNlcnZpY2VzLm15U0xDb25zZW50LFxyXG4gICAgICAgIHNlbmRUb1BoYXJtYWN5OiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbmRUb1BoYXJtYWN5LFxyXG4gICAgICAgIHNlbmRUb1BoYXJtYWN5VmFsdWU6IHRoaXMuY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3lWYWx1ZSxcclxuICAgICAgICBlbWVyZ2VuY3lTdXBwbHk6IHRoaXMuY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5LFxyXG4gICAgICAgIG1vbGVjdWxlU3RyZW5ndGhHcmlkOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubW9sZWN1bGVTdHJlbmd0aEdyaWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1vbGVjdWxlU3RyZW5ndGhHcmlkIDogJycsXHJcbiAgICAgICAgZW50aXR5SWQ6IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy5lbnRpdHlJZCxcclxuICAgICAgICBpc1ByZXNjcmliZUFuZFByaW50OiB0aGlzLmlzZXByaXNjcmliZXByaW50LFxyXG4gICAgICAgIGFtdENvZGVTeXN0ZW06ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXRDb2RlU3lzdGVtKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRDb2RlU3lzdGVtIDogXCJcIixcclxuICAgICAgICBhbXRWZXJzaW9uOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uYW10VmVyc2lvbikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10VmVyc2lvbiA6IFwiXCIsXHJcbiAgICAgICAgcXVhbnRpdHlXaXRoVW5pdDogdGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVdpdGhVbml0RmxhZyAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubWF4UXR5VW5pdHMpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzIDogXCJcIixcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlbW92ZUVyclRvYXN0KCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLlBvc3QoYm9keSwgY29uZmlnLlBIWVNJQ0lBTi5QUkVTQ1JJQkUpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmlzUHJlc2NyaWJlID0gdHJ1ZTtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycl9jb2RlID0gZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZTtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEuUHJlc2NyaWJlTXNnID0gZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZTtcclxuICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaWJlTWVkXCIsIGJvZHkpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVTdWNjZXNzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5QcmVzY3JpYmVNc2cgPSByZXMucmVzcG9uc2VfbWVzc2FnZTtcclxuICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlZGF0YSA9IHJlcztcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRFbmREYXRlQWhlYWQoKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5pc1ByaW50QXZhaWxhYmxlICE9IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyZXMuaXNBb3J0KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hYm9ydEJ0bkZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShyZXMuZXJyb3JfY29kZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcInByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmRpYWxvZ29wZW4oUmVhbFRpbWVQcmVzY3JpcHRpb25Nb25pdG9yaW5nQ29tcG9uZW50LCB0aGlzLmNvbnRlbnQsIHJlcy5yZXNwb25zZV9tZXNzYWdlKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlcy5yeGlkID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9tZXNzYWdlICE9IG51bGwgJiYgcmVzLnJlc3BvbnNlX21lc3NhZ2UgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycl9jb2RlID0gcmVzLmVycm9yX2NvZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5QcmVzY3JpYmVNc2cgPSByZXMucmVzcG9uc2VfbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaWJlTWVkXCIsIGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycl9jb2RlID0gZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLlByZXNjcmliZU1zZyA9IGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiUnhDb21wb25lbnRcIiwgXCJwcmVzY3JpYmVNZWRcIiwgYm9keSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoKHRoaXMucmVzcG9uc2VEYXRhLmlzQWJvcnQpIHx8ICF0aGlzLmFib3J0ZGlzYWJsZSlcclxuICAgICAgICAgICAgdGhpcy5zaG93UmVzcG9uc2VNZXNzYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5pc1ByZXNjcmliZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLlByZXNjcmliZU1zZyA9IGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcjtcclxuICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVFcnJfY29kZSA9IGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGVcclxuICAgICAgICBpZiAodGhpcy5yZXNwb25zZURhdGEuaXNBYm9ydCB8fCAhdGhpcy5hYm9ydGRpc2FibGUpXHJcbiAgICAgICAgICB0aGlzLnNob3dSZXNwb25zZU1lc3NhZ2UoKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaWJlTWVkXCIsIGJvZHkpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuYWJvcnRCdG5GbGFnID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcmVzY3JpYmVNZWRcIiwgYm9keSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBNcHJlc2NyaWJlTWVkKGlkOiBudW1iZXIpIHtcclxuICAgIHZhciBib2R5ID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAoaWQgPT0gMSkge1xyXG4gICAgICAgIGlmICh0aGlzLmVQcmVzY3JpcHRpb25WYWxpZGF0aW9uKCkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlkID09IDIpIHtcclxuICAgICAgICBpZiAoKHRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmlwdGlvbiA9PT0gdHJ1ZSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzPy5zY3JpcHRUeXBlKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLnRvVXBwZXJDYXNlKCkgPT0gJ00nICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHM/LnN0YXR1cykgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLnRvTG93ZXJDYXNlKCkgIT0gJ2RyYWZ0JykgfHwgKHRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmlwdGlvbiA9PT0gdHJ1ZSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzPy5zY3JpcHRUeXBlKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLnRvVXBwZXJDYXNlKCkgPT0gJ0UnKSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgaWYgKGlkID09IDEpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdFR5cGUgPSBcIkVcIjtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gXCJTTVNcIjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdFR5cGUgPSBcIk1cIjtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkFkZHJlc3NTZW5kVG9BZGRUeXBlID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zaG93QXV0aG9yaXR5Qm94KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMsIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMsIHRoaXMuY29tbW9uU2VydmljZXMucnhBdXRob3JpdHksIHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5hcHByb3ZhbE5vKSkge1xyXG4gICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNTMubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNTMuY29kZSk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNTMuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNTMubWVzc2FnZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0UEJUTkRyb3Bkb3duID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSB0cnVlO1xyXG4gICAgICB2YXIgcGF0aWVudERldGFpbHMgPSB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzO1xyXG4gICAgICB2YXIgcGh5c2ljaWFuRGV0YWlscyA9IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscztcclxuICAgICAgdmFyIHNlbGVjdGVkRm9ybXVsYXRpb24gPSB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb247XHJcbiAgICAgIHZhciBtZWRpY2FyZUNhcmQgPSAnJztcclxuICAgICAgaWYgKHBhdGllbnREZXRhaWxzLm1lZGljYXJlTnVtYmVyKSB7XHJcbiAgICAgICAgdmFyIG1lZE5vMSA9IHBhdGllbnREZXRhaWxzLm1lZGljYXJlTnVtYmVyLnJlcGxhY2UoLyAvZywgJycpO1xyXG4gICAgICAgIG1lZE5vMSA9IG1lZE5vMS5yZXBsYWNlKC9fL2csICcnKTtcclxuICAgICAgICBtZWRObzEgPSBtZWRObzEucmVwbGFjZSgvLS9nLCAnJyk7XHJcbiAgICAgICAgbWVkaWNhcmVDYXJkID0gbWVkTm8xO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBwYnNNYW51ZmFjdHVyZXJDb2RlU2V0ID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShzZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNNYW51ZmFjdHVyZXJDb2RlcykgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNNYW51ZmFjdHVyZXJDb2Rlcy5sZW5ndGggIT0gMCA/IHNlbGVjdGVkRm9ybXVsYXRpb24ucGJzTWFudWZhY3R1cmVyQ29kZXNbMF0gOiAnJztcclxuXHJcbiAgICAgIGxldCBjaGVja0F1dGhvcml0eUJveCA9IHRoaXMuc2hvd0F1dGhvcml0eUJveChcclxuICAgICAgICBzZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucyxcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTLFxyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhBdXRob3JpdHksXHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBXHJcbiAgICAgICk7XHJcbiAgICAgIGJvZHkgPSB7XHJcbiAgICAgICAgcnhJZDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4aWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5yeGlkIDogJycsXHJcbiAgICAgICAgaXNTaG93QXV0aG9yaXR5OiB0aGlzLmNvbW1vblNlcnZpY2VzLmlzU2hvd0F1dGhvcml0eSxcclxuICAgICAgICBwYnNMaXN0SW5zdHJ1Y3Rpb25zOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9ucykgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnMgOiBcIlwiLFxyXG4gICAgICAgIGlzQnJhbmROYW1lOiB0aGlzLmNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lLFxyXG4gICAgICAgIGluY2x1ZGVCcmFuZEZsYWc6IHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUsXHJcbiAgICAgICAgcmVzdHJpY3RlZFBic1NlbGVjdGVkSW5kZXg6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgKyAxIDogXCJcIixcclxuICAgICAgICBtQVBhdGllbnRJZDogdGhpcy5jb21tb25TZXJ2aWNlcy52ZW5kb3JQYXRpZW50SWQsXHJcbiAgICAgICAgbUFQaGFybWFjaXN0SWQ6IHRoaXMuY29tbW9uU2VydmljZXMudmVuZG9yUGh5c2ljaWFuSWQsXHJcbiAgICAgICAgbUFGYWNpbGl0eUlkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnZlbmRvckZhY2lsaXR5SWQsXHJcbiAgICAgICAgcHJpdmFjeVN0YXRlbWVudDogdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlLnRvTG93ZXJDYXNlKCkgPT0gJ2UnID8gMCA6IDEsXHJcbiAgICAgICAgaHBpSTogcGh5c2ljaWFuRGV0YWlscy5ocGlpTnVtYmVyLFxyXG4gICAgICAgIHByZXNjcmliZXJOdW1iZXI6IHBoeXNpY2lhbkRldGFpbHMucHJlc2NyaWJlck51bWJlcixcclxuICAgICAgICBwcmVzY3JpYmVyQWhwcmFOdW1iZXI6IHBoeXNpY2lhbkRldGFpbHMucHJlc2NyaWJlckFocHJhTnVtYmVyLFxyXG4gICAgICAgIHByZXNjcmliZXJHaXZlbk5hbWVzOiBwaHlzaWNpYW5EZXRhaWxzLmZpcnN0TmFtZSxcclxuICAgICAgICBwcmVzY3JpYmVyRmFtaWx5TmFtZTogcGh5c2ljaWFuRGV0YWlscy5sYXN0TmFtZSxcclxuICAgICAgICBwcmVzY3JpYmVySG9tZU1vYmlsZTogcGh5c2ljaWFuRGV0YWlscy5tb2JpbGVQaG9uZSxcclxuICAgICAgICBwcmVzY3JpYmVySG9tZUVtYWlsOiBwaHlzaWNpYW5EZXRhaWxzLmVtYWlsLFxyXG4gICAgICAgIG9yZ0hwaU86ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMuaHBpb051bWJlcikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5ocGlvTnVtYmVyIDogJycsXHJcbiAgICAgICAgb3JnTmFtZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdOYW1lKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ05hbWUgOiAnJyxcclxuICAgICAgICBvcmdFbWFpbDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdFbWFpbCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdFbWFpbCA6ICcnLFxyXG4gICAgICAgIG9yZ1Bvc3RhbEFkZHJlc3NMaW5lMTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzTGluZTEpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc0xpbmUxIDogJycsXHJcbiAgICAgICAgb3JnUG9zdGFsQWRkcmVzc0xpbmUyOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NMaW5lMikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzTGluZTIgOiAnJyxcclxuICAgICAgICBvcmdQb3N0YWxBZGRyZXNzU3VidXJiOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NTdWJ1cmIpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc1N1YnVyYiA6ICcnLFxyXG4gICAgICAgIG9yZ1Bvc3RhbEFkZHJlc3NQb3N0Q29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdQb3N0YWxBZGRyZXNzUG9zdENvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc1Bvc3RDb2RlIDogJycsXHJcbiAgICAgICAgb3JnUG9zdGFsQWRkcmVzc1N0YXRlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1Bvc3RhbEFkZHJlc3NTdGF0ZSkgPyB0aGlzLmdldFN0YXRlQ29kZUZyb21TdGF0ZU5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUG9zdGFsQWRkcmVzc1N0YXRlKSA6ICcnLFxyXG4gICAgICAgIGloaTogcGF0aWVudERldGFpbHMuaWhpTnVtYmVyLFxyXG4gICAgICAgIG1lZGljYXJlTnVtYmVyOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KG1lZGljYXJlQ2FyZCkgPyB0aGlzLmVyeE1lZGljYXJlQ2FyZChtZWRpY2FyZUNhcmQpIDogJycsXHJcbiAgICAgICAgbWVkaWNhcmVJcm46ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkobWVkaWNhcmVDYXJkKSA/IHRoaXMuZXJ4TWVkaWNhcmVJUk4obWVkaWNhcmVDYXJkKSA6ICcnLFxyXG4gICAgICAgIG1lZGljYXJlTnVtYmVyRXhwaXJ5OiBwYXRpZW50RGV0YWlscy5tZWRpY2FyZUV4cGlyeSxcclxuICAgICAgICBkYXRlT2ZCaXJ0aDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocGF0aWVudERldGFpbHMuZG9iLCAneXl5eS1NTS1kZCcpLFxyXG4gICAgICAgIGZhbWlseU5hbWU6IHBhdGllbnREZXRhaWxzLmxhc3ROYW1lLFxyXG4gICAgICAgIGdpdmVuTmFtZXM6IHBhdGllbnREZXRhaWxzLmZpcnN0TmFtZSxcclxuICAgICAgICBwYXRpZW50VXNlcklkU3RyaW5nOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnBhdGllbnRVc2VySWQsXHJcbiAgICAgICAgdXNlcklkU3RyaW5nOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMudXNlcklkLFxyXG4gICAgICAgIGdlbmRlckNvZGU6IHRoaXMuZ2V0R2VuZGVyQ29kZShwYXRpZW50RGV0YWlscy5nZW5kZXIpLFxyXG4gICAgICAgIGhvbWVNb2JpbGU6IHBhdGllbnREZXRhaWxzLnBob25lLFxyXG4gICAgICAgIGhvbWVFbWFpbDogcGF0aWVudERldGFpbHMuZW1haWwsXHJcbiAgICAgICAgYWRkcmVzc0xpbmUxOiBwYXRpZW50RGV0YWlscy5hZGRyZXNzMSxcclxuICAgICAgICBhZGRyZXNzTGluZTI6IHBhdGllbnREZXRhaWxzLmFkZHJlc3MyLFxyXG4gICAgICAgIGFkZHJlc3NTdWJ1cmI6IHBhdGllbnREZXRhaWxzLmNpdHksXHJcbiAgICAgICAgYWRkcmVzc1Bvc3RDb2RlOiBwYXRpZW50RGV0YWlscy5wb3N0Q29kZSxcclxuICAgICAgICBhZGRyZXNzU3RhdGU6IHRoaXMuZ2V0U3RhdGVDb2RlRnJvbVN0YXRlTmFtZShwYXRpZW50RGV0YWlscy5zdGF0ZSksXHJcbiAgICAgICAgcHJlc2NyaXB0aW9uV3JpdHRlbkRhdGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHREYXRlKSA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0RGF0ZSwgJ3l5eXktTU0tZGQnKSA6IFwiXCIsXHJcbiAgICAgICAgZm9ybVRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZG9zYWdlRm9ybSkgPyBzZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0gOiBcIlwiLFxyXG4gICAgICAgIHN0cmVuZ3RoOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHNlbGVjdGVkRm9ybXVsYXRpb24/Lm1vbGVjdWxlU3RyZW5ndGgpID8gc2VsZWN0ZWRGb3JtdWxhdGlvbi5tb2xlY3VsZVN0cmVuZ3RoIDogXCIgXCIsXHJcbiAgICAgICAgZGlyZWN0aW9uczogdGhpcy5nZXREaXJlY3Rpb25zKCksXHJcbiAgICAgICAgYnJhbmRTdWJzdGl0dXRlc05vdEFsbG93ZWQ6IHRoaXMuY29tbW9uU2VydmljZXMuQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93ID09IHRydWUgPyAwIDogMSxcclxuICAgICAgICBtYXhpbXVtTnVtYmVyT2ZSZXBlYXRzOiB0aGlzLmNvbW1vblNlcnZpY2VzLnJlcGVhdHNWYWwsXHJcbiAgICAgICAgbWluaW11bUludGVydmFsQmV0d2VlblJlcGVhdHM6IHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwgIT0gdW5kZWZpbmVkICYmIHRoaXMuY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWwgIT0gbnVsbCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsICE9IFwiXCIgPyBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsKSA6IFwiLTFcIixcclxuICAgICAgICBwYXRpZW50Q3RnRmxhZzogdGhpcy5jb21tb25TZXJ2aWNlcy5DVEdDb1BheW1lbnQgPT0gdHJ1ZSA/IDAgOiAxLFxyXG4gICAgICAgIHBic0l0ZW1Db2RlQ29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LnBic0NvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic0NvZGUgOiBcIlwiLFxyXG4gICAgICAgIHBic0l0ZW1Db2RlVGV4dDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LnBic0NvZGVUZXh0KSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlVGV4dCA6IFwiXCIsXHJcbiAgICAgICAgcGJzSXRlbU1hbnVmYWN0dXJlcjogdGhpcy5jb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA/IHBic01hbnVmYWN0dXJlckNvZGVTZXQgOiAnJyxcclxuICAgICAgICBzdGF0ZUF1dGhvcml0eU51bWJlcjogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLlN0YXRlQXV0aG9yaXR5TnVtYmVyKSA/IHRoaXMuY29tbW9uU2VydmljZXMuU3RhdGVBdXRob3JpdHlOdW1iZXIudHJpbSgpIDogXCJcIixcclxuICAgICAgICByZWFzb25Gb3JUaGVyYXBldXRpY0dvb2Q6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpcHRpb25SZWFzb24pID8gdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpcHRpb25SZWFzb24udHJpbSgpIDogXCJcIixcclxuICAgICAgICB1bnVzdWFsUXR5RmxhZzogdGhpcy5zZXRVbnVzdWFsUXR5RmxhZyh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24sIHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwsIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMpLFxyXG4gICAgICAgIHF1YW50aXR5T2ZUaGVyYXBldXRpY0dvb2RRdWFudGl0eTogcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCksXHJcbiAgICAgICAgY29tcGxleEluc3RydWN0aW9uczogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlLnRyaW0oKSA6IFwiXCIsXHJcbiAgICAgICAgYW10TXBwQ29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LkFNVE1QUENvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLkFNVE1QUENvZGUgOiBcIlwiLFxyXG4gICAgICAgIGFtdE1wcE5hbWU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXQpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQubGVuZ3RoID4gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwcykgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS5tcHBzLmxlbmd0aCA+IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLm1wcHNbMF0ubXBwTmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLm1wcHNbMF0ubXBwTmFtZSA6ICcnLFxyXG4gICAgICAgIGFtdFRwcENvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5BTVRUUFBDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5BTVRUUFBDb2RlIDogXCJcIixcclxuICAgICAgICBhbXRUcHBOYW1lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uYW10KSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwcHMpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0udHBwcy5sZW5ndGggPiAwICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS50cHBzWzBdLnRwcE5hbWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdFswXS50cHBzWzBdLnRwcE5hbWUgOiAnJyxcclxuICAgICAgICBhbXRUcENvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5BTVRUUENvZGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLkFNVFRQQ29kZSA6IFwiXCIsXHJcbiAgICAgICAgYW10VHBOYW1lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uYW10KSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10Lmxlbmd0aCA+IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwTmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLnRwTmFtZSA6ICcnLFxyXG4gICAgICAgIGFtdENvZGU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmFtdC5hbXRjb2RlIDogJycsXHJcbiAgICAgICAgdGhlcmVwZXV0aWNHb29kSWRlbnRpZmljYXRpb25NaW1zQ29kZTogJycsXHJcbiAgICAgICAgdGhlcmVwZXV0aWNHb29kSWRlbnRpZmljYXRpb25Mb2NhbENvZGU6ICcnLFxyXG4gICAgICAgIC8vIHRoZXJlcGV1dGljR29vZElkZW50aWZpY2F0aW9uRWFuQ29kZTogXCJcIixcclxuICAgICAgICB0aGVyZXBldXRpY0dvb2RJZGVudGlmaWNhdGlvbkVhblRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNUeXBlKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZS50b0xvd2VyQ2FzZSgpID09ICdub24gcGJzJyAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUgOiAnJyxcclxuICAgICAgICBwcmVzY3JpYmVyT2NjdXBhdGlvbkNvZGU6IHBoeXNpY2lhbkRldGFpbHMub2NjdXBhdGlvbkNvZGUsXHJcbiAgICAgICAgcHJlc2NyaWJlck9jY3VwYXRpb25UZXh0OiBwaHlzaWNpYW5EZXRhaWxzLm9jY3VwYXRpb25UZXh0LFxyXG4gICAgICAgIHByZXNjcmliZXJQZXJzb25UaXRsZTogcGh5c2ljaWFuRGV0YWlscy5wcmVmaXgsXHJcbiAgICAgICAgcHJlc2NyaWJlclF1YWxpZmljYXRpb25zOiBwaHlzaWNpYW5EZXRhaWxzLnN1ZmZpeCxcclxuICAgICAgICBvcmdQaG9uZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscykgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmZhY2lsaXR5RGV0YWlscy5vcmdNb2JpbGUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnTW9iaWxlIDogJycsXHJcbiAgICAgICAgb3JnRmF4OiAnJyxcclxuICAgICAgICBsb2NhbFN5c3RlbUlEOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnBhdGllbnRVc2VySWQsXHJcbiAgICAgICAgYWRkcmVzc1NlbmRUb0FkZFR5cGU6IHRoaXMuY29tbW9uU2VydmljZXMuQWRkcmVzc1NlbmRUb0FkZFR5cGUsXHJcbiAgICAgICAgYWRkcmVzc0VtYWlsOiB0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeGVtYWlsSWQpID8gcGF0aWVudERldGFpbHMuZW1haWwgOiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4ZW1haWxJZCxcclxuICAgICAgICBhZGRyZXNzU21zOiB0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeG51bWJlcikgPyBwYXRpZW50RGV0YWlscy5waG9uZSA6IHRoaXMuY29tbW9uU2VydmljZXMucnhudW1iZXIsXHJcbiAgICAgICAgZ2VuZGVyVGV4dDogdGhpcy5nZXRHZW5kZXIocGF0aWVudERldGFpbHMuZ2VuZGVyKSxcclxuICAgICAgICBhZGRyZXNzTGluZTM6ICcnLFxyXG4gICAgICAgIHByZXNjcmlwdGlvbldyaXR0ZW5VdGNUaW1lOiAnMDEtMDEtMTk3MCAwOTowNjowOScsIC8vIHByZXNjcmlwdGlvbldyaXR0ZW5VdGNUaW1lOiBtb21lbnQobmV3IERhdGUoKSkuZm9ybWF0KFwiTU0tREQteXl5eSBoaDptbTpzc1wiKSxcclxuICAgICAgICBwcmVzY3JpcHRpb25Xcml0dGVuVXRjT2Zmc2V0OiB0aGlzLmdldE9mZnNldCgpLFxyXG4gICAgICAgIHByZXNjcmlwdGlvbkV4cGlyZXNWYWx1ZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmVuZERhdGUpID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jb21tb25TZXJ2aWNlcy5lbmREYXRlLCAnTU0vZGQveXl5eScpIDogXCJcIixcclxuICAgICAgICBhY3RpdmVJbmdyZWRpZW50OiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZ2VuZXJpY05hbWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lIDogXCJcIixcclxuICAgICAgICBmb3JtQ29kZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmRvc2FnZUZvcm0pID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0gOiBcIlwiLFxyXG4gICAgICAgIGZvcm11bGE6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5mb3JtdWxhKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5mb3JtdWxhIDogXCJcIixcclxuICAgICAgICBhZGRpdGlvbmFsQ29tbWVudHM6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5kb2N0b3JOb3RlcykgPyB0aGlzLmNvbW1vblNlcnZpY2VzLmRvY3Rvck5vdGVzLnRyaW0oKSA6IFwiXCIsXHJcbiAgICAgICAgYXNsQ29uc2VudDogMSxcclxuICAgICAgICBwcmVzY3JpcHRpb25Ob3RlRGV0YWlsTm90ZTogdGhpcy5jb21tb25TZXJ2aWNlcy5wdXJwb3NlU2VhcmNoVmFsdWUsXHJcbiAgICAgICAgZHZhTnVtYmVyOiBwYXRpZW50RGV0YWlscy5kdmFOdW1iZXIsXHJcbiAgICAgICAgZHZhVHlwZTogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShwYXRpZW50RGV0YWlscy5kdmFDYXJkVHlwZSkgJiYgcGF0aWVudERldGFpbHMuZHZhQ2FyZFR5cGUudG9Mb3dlckNhc2UoKSAhPSAnbm9uZScgPyBwYXRpZW50RGV0YWlscy5kdmFDYXJkVHlwZS5zbGljZSgwLCAxKS50b1VwcGVyQ2FzZSgpIDogJycsXHJcbiAgICAgICAgcGJzQXBwcm92YWxOdW1iZXI6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5hcHByb3ZhbE5vKSA/IHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObyA6ICcnLFxyXG4gICAgICAgIHJvdXRlOiB0aGlzLmNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWUgIT0gJy0nID8gdGhpcy5jb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlIDogJycsXHJcbiAgICAgICAgLy9wcm92aWRlck51bWJlcjonJyxcclxuICAgICAgICBwcmVzY3JpYmVyVHlwZTogcGh5c2ljaWFuRGV0YWlscy5wcmVzY3JpYmVyVHlwZSxcclxuICAgICAgICBtZWRpY2luZU5hbWU6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUgOiBcIlwiLFxyXG4gICAgICAgIGJyYW5kTmFtZTogdGhpcy5nZXRCcmFuZE5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSxcclxuICAgICAgICBnZW5lcmljTmFtZTogdGhpcy5odG1sVG9UZXh0Q29udmVydCghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uSXNFeHRlbXApICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSB0cnVlID8gdGhpcy5nZXRFeHRlbXBUVFBOYW1lKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbikgOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZ2VuZXJpY05hbWUpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lIDogdGhpcy5nZXRFeHRlbXBNUFBOYW1lKCkpLFxyXG4gICAgICAgIC8vaXRlbUdlbmVyaWNJbnRlbnRpb246IGdldEl0ZW1HZW5lcmljSW50ZW50aW9uKHRoaXMuc3RhdGUubGVtaSx0aGlzLnN0YXRlLmlzQnJhbmROYW1lLHRoaXMuc3RhdGUuc2VsZWN0ZWRGb3JtdWxhdGlvbi5Jc0V4dGVtcCA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlKSxcclxuICAgICAgICBpdGVtR2VuZXJpY0ludGVudGlvbjogdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID09IHRydWUgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wICE9IHRydWUgPyAnQicgOiAnRycsXHJcbiAgICAgICAgc2NoZWR1bGVOdW1iZXI6IHRoaXMucGF5TG9hZFN0YXRlU2NoZWR1bGVOdW1iZXIodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSAhPSBcIlwiID8gdGhpcy5wYXlMb2FkU3RhdGVTY2hlZHVsZU51bWJlcih0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pIDogdGhpcy5jb21tb25TZXJ2aWNlcy5nZXRTY2hlZHVsZU51bWJlcih0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pLFxyXG4gICAgICAgIGRvY3Rvck5vdGVzOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZG9jdG9yTm90ZXMpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5kb2N0b3JOb3Rlcy50cmltKCkgOiBcIlwiLFxyXG4gICAgICAgIHJlZ3VsYXRpb24yNDogdGhpcy5jb21tb25TZXJ2aWNlcy5yZWd1bGF0aW9uMjQgPT0gZmFsc2UgPyAxIDogMCxcclxuICAgICAgICBpc0V4dGVtcDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGwgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wICE9IG51bGwgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXNFeHRlbXAgPT0gdHJ1ZSA/IDAgOiAxIDogMSxcclxuICAgICAgICAvLyBleHRlbXBvcmFuZW91c0Rlc2NyaXB0aW9uOiB0aGlzLnN0YXRlLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCAmJiB0aGlzLnN0YXRlLnNlbGVjdGVkRm9ybXVsYXRpb24uRXh0ZW1wb3JhbmVvdXNEZXNjcmlwdGlvbiAhPSAnJyA/IHRoaXMuc3RhdGUuc2VsZWN0ZWRGb3JtdWxhdGlvbi5FeHRlbXBvcmFuZW91c0Rlc2NyaXB0aW9uIDogJycsXHJcbiAgICAgICAgZXh0ZW1wb3JhbmVvdXNEZXNjcmlwdGlvbjogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLklzRXh0ZW1wID09IHRydWUgPyB0aGlzLmdldEV4dGVtcFRUUE5hbWUodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKSA6ICcnLFxyXG4gICAgICAgIGFubm90YXRpb246ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5hbm5vdGF0aW9uKSA/IHRoaXMuY29tbW9uU2VydmljZXMuYW5ub3RhdGlvbi50cmltKCkgOiBcIlwiLFxyXG4gICAgICAgIHVuVXN1YWxEb3NlRmxhZzogdGhpcy5jb21tb25TZXJ2aWNlcy51blVzdWFsRG9zZUZsYWcgPT0gZmFsc2UgPyAxIDogMCxcclxuICAgICAgICB0cmFkZU5hbWU6IHRoaXMuaHRtbFRvVGV4dENvbnZlcnQodGhpcy5nZXRUcmFkZU5hbWUoKSksXHJcbiAgICAgICAgLy9yZXN0cmljdGlvbnM6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMgIT0gbnVsbCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zICE9ICcnID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlc3RyaWN0aW9ucyA6ICcnLFxyXG4gICAgICAgIC8vIHByZXNjcmliZXJQZXJzb25UaXRsZTogcGh5c2ljaWFuRGV0YWlscy5wcmVmaXgsXHJcbiAgICAgICAgbWF4aW11bUludGVydmFsQmV0d2VlblJlcGVhdHM6ICcnLFxyXG4gICAgICAgIGNvbXBsZXhJZDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5jb21wbGV4SWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5jb21wbGV4SWQgOiAwLFxyXG4gICAgICAgIHZpc2l0SWQ6IHRoaXMuY29tbW9uU2VydmljZXMudmlzaXRJZCxcclxuICAgICAgICBzY3JpcHRUeXBlOiB0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdFR5cGUsXHJcbiAgICAgICAgZG9zZTogdGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUsXHJcbiAgICAgICAgZnJlcXVlbmN5OiB0aGlzLmNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSxcclxuICAgICAgICBmb29kOiB0aGlzLmNvbW1vblNlcnZpY2VzLmZvb2RTZWFyY2hWYWx1ZSxcclxuICAgICAgICBwcmVzY3JpYmVBczogdGhpcy5jb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUyxcclxuICAgICAgICBwcm46IHRoaXMuY29tbW9uU2VydmljZXMucnhQUk4gPT0gZmFsc2UgPyAxIDogMCxcclxuICAgICAgICBzY3JpcHREYXRlOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdERhdGUsICd5eXl5LU1NLWRkJyksXHJcbiAgICAgICAgc3RhcnREYXRlOiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNvbW1vblNlcnZpY2VzLnN0YXJ0RGF0ZSwgJ01NL2RkL3l5eXknKSxcclxuICAgICAgICBwdXJwb3NlOiB0aGlzLmNvbW1vblNlcnZpY2VzLnB1cnBvc2VTZWFyY2hWYWx1ZS50cmltKCksXHJcbiAgICAgICAgcGJzTm90ZXM6IHRoaXMuY29tbW9uU2VydmljZXMucGJzTm90ZXMsXHJcbiAgICAgICAgaXNBY3RpdmU6IDAsXHJcbiAgICAgICAgcHJvZHVjdElkOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ucHJvZHVjdElkKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0SWQgOiBcIlwiLFxyXG4gICAgICAgIGFtdFRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5mb3JtdWxhKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5mb3JtdWxhIDogXCJcIixcclxuICAgICAgICBxdWFudGl0eU9mVGhlcmFwZXV0aWNHb29kRG9zZVVuaXRDb2RlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uZG9zYWdlRm9ybSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uZG9zYWdlRm9ybSA6IFwiXCIsXHJcbiAgICAgICAgcXVhbnRpdHlPZlRoZXJhcGV1dGljR29vZERvc2VVbml0VGV4dDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/LmRvc2FnZUZvcm0pID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmRvc2FnZUZvcm0gOiBcIlwiLFxyXG4gICAgICAgIHByZXNjcmliZXJSb2xlQ29kZTogJycsXHJcbiAgICAgICAgcHJlc2NyaWJlclJvbGVUZXh0OiAnJyxcclxuICAgICAgICBvcmdIaWNMb2NhdGlvbklkOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ0hpY0xvY2F0aW9uSWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnSGljTG9jYXRpb25JZCA6ICcnLFxyXG4gICAgICAgIG9yZ1JvbGVDb2RlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1JvbGVDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuZmFjaWxpdHlEZXRhaWxzLm9yZ1JvbGVDb2RlIDogJycsXHJcbiAgICAgICAgb3JnUm9sZVRleHQ6ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMpICYmICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUm9sZVRleHQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5mYWNpbGl0eURldGFpbHMub3JnUm9sZVRleHQgOiAnJyxcclxuICAgICAgICBhdXRob3JpdHlBcHByb3ZhbE51bWJlcjogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8pID8gdGhpcy5jb21tb25TZXJ2aWNlcy5hcHByb3ZhbE5vLnRyaW0oKSA6ICcnLFxyXG4gICAgICAgIGF1dGhvcml0eUFwcHJvdmFsTnVtYmVyRmxhZzogcGFyc2VGbG9hdCh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubWF4UXR5VW5pdHMpIDwgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCkgfHwgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlcGVhdHMpIDwgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsKSA/IDEgOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMubGVuZ3RoID4gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9uc0lkKSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnNbdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWRdLnN0cmVhbWxpbmVkQ29kZSkgJiYgcGFyc2VJbnQodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9uc1t0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnNJZF0uc3RyZWFtbGluZWRDb2RlKSA9PSBwYXJzZUludCh0aGlzLmNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm8pID8gMCA6IDEsXHJcbiAgICAgICAgc3RhdHVzOiBcIkRyYWZ0XCIsXHJcbiAgICAgICAgLy8gcGJzQXV0aG9yaXR5UHJlc2NyaXB0aW9uTnVtYmVyOnRoaXMuc3RhdGUuYXBwcm92YWxObyA/IHRoaXMuc3RhdGUuYXBwcm92YWxObyA6IFwiXCIsXHJcbiAgICAgICAgLy8gc3RyZWFtbGluZWRBdXRob3JpdHlBcHByb3ZhbE51bWJlcjogdGhpcy5zdGF0ZS5hcHByb3ZhbE5vPyB0aGlzLnN0YXRlLmFwcHJvdmFsTm86IFwiXCIsXHJcbiAgICAgICAgLy8gcGJzQXV0aG9yaXR5QXBwcm92YWxOdW1iZXI6IFwiXCIsXHJcbiAgICAgICAgLy9iYXJjb2RlXHJcbiAgICAgICAgLy9zY3JpcHROdW1iZXI6IFwiXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuc2hyaW5rU3VwZXJTY3JpcHRDb2RlKHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSksXHJcbiAgICAgICAgZW9wRGlzcGxheU5hbWU6IHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0VHlwZS50b0xvd2VyQ2FzZSgpID09IFwiZVwiID8gdGhpcy5zaHJpbmtTdXBlclNjcmlwdENvZGUodGhpcy5jb21tb25TZXJ2aWNlcy5lb3BEaXNwbGF5TmFtZSkgOiB0aGlzLnNocmlua1N1cGVyU2NyaXB0Q29kZSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWUpLFxyXG4gICAgICAgIGl0ZW1TdHJlbmd0aFhtbDogIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24/Lkl0ZW1TdHJlbmd0aFhtbCkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uSXRlbVN0cmVuZ3RoWG1sIDogXCIgXCIsXHJcbiAgICAgICAgLy9hdXRob3JpdHlWYWx1ZVxyXG4gICAgICAgIHBic0R2YUF1dGhvcml0eU51bWJlcjogY2hlY2tBdXRob3JpdHlCb3ggPyB0aGlzLmNvbW1vblNlcnZpY2VzLmF1dGhvcml0eUZvcm1ObyA6IDAsXHJcbiAgICAgICAgcHJlc2NyaWJlZEl0ZW1SZXNlcnZlZFRocmVlOiB0aGlzLmh0bWxUb1RleHRDb252ZXJ0KHRoaXMuY29tbW9uU2VydmljZXMucnhEaXNwbGF5TmFtZSksLy90aGlzLnNocmlua1N1cGVyU2NyaXB0Q29kZSh0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZWRJdGVtUmVzZXJ2ZWRUaHJlZSksXHJcbiAgICAgICAgdW5saXN0ZWRJdGVtUmVwYXRBdXRob3JpdHk6IHRoaXMuY29tbW9uU2VydmljZXMudW5saXN0ZWRSQSA9PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgIHByZXNjcmliZWRJdGVtUmVzZXJ2ZWRPbmU6IHRoaXMuY29tbW9uU2VydmljZXMuZ2V0U2NoZWR1bGVOdW1iZXIodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uKS50b0xvd2VyQ2FzZSgpID09IFwiczhcIiA/IHRoaXMubnVtYmVyVG9Xb3JkKHBhcnNlSW50KHRoaXMuY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwpKSA6ICcnLFxyXG4gICAgICAgIG15U0xDb25zZW50OiB0aGlzLmNvbW1vblNlcnZpY2VzLm15U0xDb25zZW50LFxyXG4gICAgICAgIHNlbmRUb1BoYXJtYWN5OiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbmRUb1BoYXJtYWN5LFxyXG4gICAgICAgIHNlbmRUb1BoYXJtYWN5VmFsdWU6IHRoaXMuY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3lWYWx1ZSxcclxuICAgICAgICBlbWVyZ2VuY3lTdXBwbHk6IHRoaXMuY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5LFxyXG4gICAgICAgIG1vbGVjdWxlU3RyZW5ndGhHcmlkOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubW9sZWN1bGVTdHJlbmd0aEdyaWQpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1vbGVjdWxlU3RyZW5ndGhHcmlkIDogJycsXHJcbiAgICAgICAgZW50aXR5SWQ6IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy5lbnRpdHlJZCxcclxuICAgICAgICBpc1ByZXNjcmliZUFuZFByaW50OiB0aGlzLmlzZXByaXNjcmliZXByaW50LFxyXG4gICAgICAgIGFtdENvZGVTeXN0ZW06ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5hbXRDb2RlU3lzdGVtKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRDb2RlU3lzdGVtIDogXCJcIixcclxuICAgICAgICBhbXRWZXJzaW9uOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8uYW10VmVyc2lvbikgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10VmVyc2lvbiA6IFwiXCIsXHJcbiAgICAgICAgcXVhbnRpdHlXaXRoVW5pdDogdGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVdpdGhVbml0RmxhZyAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ubWF4UXR5VW5pdHMpID8gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzIDogXCJcIixcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZU1lZExvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVtb3ZlRXJyVG9hc3QoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuUG9zdChib2R5LCBjb25maWcuUEhZU0lDSUFOLk1fUFJFU0NSSUJFKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwiTXByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoXCJcIiwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHRydWUsIHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICB0aGlzLmNsb3NlKHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX21lc3NhZ2UgIT0gbnVsbCAmJiByZXMucmVzcG9uc2VfbWVzc2FnZSAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwiTXByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHJlcy5yZXNwb25zZV9tZXNzYWdlLCAnZXJyb3InLCByZXMuZXJyb3JfY29kZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcIk1wcmVzY3JpYmVNZWRcIiwgYm9keSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlLCAnZXJyb3InLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJNcHJlc2NyaWJlTWVkXCIsIGJvZHkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiTXByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvciwgXCJlcnJvclwiLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiTXByZXNjcmliZU1lZFwiLCBib2R5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZVRvb2xUaXAoZXZlbnQ6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnRvb2x0aXAsICdfX3JlYWN0X2NvbXBvbmVudF90b29sdGlwJyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwLCAndHlwZS1kYXJrJyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwLCAncGxhY2UtbGVmdCcpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcCwgJ3otaW5kZXgnLCAnOTk5OTk5OTknKTtcclxuICAgICAgY29uc3Qgdmlld1JlZiA9IHRoaXMudmlld1JlZkNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5teVRlbXBsYXRlKTtcclxuICAgICAgdmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIGNvbnN0IHRvb2x0aXBDb250ZW50ID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh2aWV3UmVmLnJvb3ROb2RlcykgJiYgdmlld1JlZi5yb290Tm9kZXMubGVuZ3RoICE9IDAgPyB2aWV3UmVmLnJvb3ROb2Rlc1swXSA6IFwiXCI7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy50b29sdGlwLCB0b29sdGlwQ29udGVudCk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLnRvb2x0aXApO1xyXG4gICAgICB2YXIgdG9vbDogYW55ID0gdGhpcy50b29sdGlwO1xyXG4gICAgICB2YXIgbGVmdCA9IGV2ZW50LnggLSAodG9vbC5jbGllbnRXaWR0aCArIDE1KTtcclxuICAgICAgdmFyIGhlaWdodHZhbHVlID0gZXZlbnQueSAtICh0b29sLmNsaWVudEhlaWdodCAvIDIpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcCwgJ2xlZnQnLCBsZWZ0ICsgJ3B4Jyk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwLCAndG9wJywgaGVpZ2h0dmFsdWUgKyAncHgnKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiY3JlYXRlVG9vbFRpcFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3d0b29sdGlwKGxlbWlwcm9kdWN0OiBib29sZWFuLCBicmFuZHRvb2x0aXA6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKGxlbWlwcm9kdWN0KSB7XHJcbiAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMudG9vbHRpcCwgJ2xlbWktdG9vbHRpcCcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwLCAndHlwZS1kYXJrJyk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3UmVmID0gdGhpcy52aWV3UmVmQ29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhicmFuZHRvb2x0aXApO1xyXG4gICAgICAgIHZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHZhciBteWRvbTogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJicmFuZG5hbWV0b29sdGlwXCIpO1xyXG4gICAgICAgIHZhciByZWN0ID0gbXlkb20uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgY29uc3QgdG9vbHRpcENvbnRlbnQgPSB2aWV3UmVmLnJvb3ROb2Rlc1swXTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMudG9vbHRpcCwgdG9vbHRpcENvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLnRvb2x0aXApO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwLCAnbGVmdCcsIHJlY3QubGVmdCArICdweCcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwLCAndG9wJywgcmVjdC50b3AgLSBteWRvbS5vZmZzZXRIZWlnaHQgLSAxMCArICdweCcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwLCAnd2lkdGgnLCBteWRvbS5jbGllbnRXaWR0aCArICdweCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNob3d0b29sdGlwXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9lZGl0IHJ4XHJcbiAgc2V0RWRpdFZhbHVlcyhyeExpc3Q6IGFueSkge1xyXG4gICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSB0cnVlO1xyXG4gICAgICByeExpc3QucGJzSXRlbUNvZGVDb2RlID0gcnhMaXN0LnBic0l0ZW1Db2RlQ29kZSAhPSBudWxsID8gcnhMaXN0LnBic0l0ZW1Db2RlQ29kZSA6IFwiXCI7XHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgcmVxdWVzdF90eXBlOiBcInBhcmFtZXRlclwiLFxyXG4gICAgICAgIHByb2R1Y3RJZDogcnhMaXN0LnByb2R1Y3RJZCxcclxuICAgICAgICBwYnNDb2RlOiByeExpc3QucGJzSXRlbUNvZGVDb2RlLFxyXG4gICAgICAgIHJ4SWQ6IHRoaXMuY29tbW9uU2VydmljZXMucnhpZFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuR2V0KGNvbmZpZy5QSFlTSUNJQU4uR0VUX01FRF9ERVRfQllfSUQgKyBcIj9wcm9kdWN0SWQ9XCIgKyByeExpc3QucHJvZHVjdElkICsgXCImcGJzQ29kZT1cIiArICh0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCA/IHJ4TGlzdC5wYnNJdGVtQ29kZUNvZGUgOiBcIlwiKSArIFwiJnJ4SWQ9XCIgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4aWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTsgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCB0aGlzLnJlc3BvbnNlRGF0YS5wYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgdmFyIGVkaXRSZXN0cmljdEZsYWcgPSAodGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyeExpc3Q/LnN0YXR1cykgJiYgcnhMaXN0LnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9IFwiZHJhZnRcIikgfHwgIXRoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0ID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoZWRpdFJlc3RyaWN0RmxhZykge1xyXG4gICAgICAgICAgICAgIHZhciBNZWQgPSBbXTtcclxuICAgICAgICAgICAgICBNZWQucHVzaChyZXMucmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBNZWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGljaW5lTGlzdE9yZ2luYWwgPSBNZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRSZXN0cmljdGVkTWVkaWNpbmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZvcm11bGF0aW9uKHJlcy5yZXNwb25zZSwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLm1lZGlTZWFyY2hWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlID0gMTtcclxuICAgICAgICAgICAgdGhpcy5yeE9ubHlQQlMgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCA9IHJ4TGlzdC5xdWFudGl0eU9mVGhlcmFwZXV0aWNHb29kUXVhbnRpdHk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCA9IHJ4TGlzdC5tYXhpbXVtTnVtYmVyT2ZSZXBlYXRzID8gcnhMaXN0Lm1heGltdW1OdW1iZXJPZlJlcGVhdHMgOiBcIjBcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUgPSByeExpc3QuZG9zZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5mcmVxU2VhcmNoVmFsdWUgPSByeExpc3QuZnJlcXVlbmN5ID8gcnhMaXN0LmZyZXF1ZW5jeSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZm9vZFNlYXJjaFZhbHVlID0gcnhMaXN0LmZvb2QgPyByeExpc3QuZm9vZCA6IFwiXCI7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJ4TGlzdC5jb21wbGV4SW5zdHJ1Y3Rpb25zKSAmJiB0aGlzLmluc3RydWN0aW9uRGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmluc3RydWN0aW9uRGF0YS5maWx0ZXIoKCh4OiB7IHRleHQ6IGFueTsgfSkgPT4geC50ZXh0ID09IHJ4TGlzdC5jb21wbGV4SW5zdHJ1Y3Rpb25zKSk7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUgPSByeExpc3QuY29tcGxleEluc3RydWN0aW9ucztcclxuICAgICAgICAgICAgICAgIHRoaXMuSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoZGF0YVswXS5kZXNjcmlwdGlvbikgPyBkYXRhWzBdLmRlc2NyaXB0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWUgPSByeExpc3QuY29tcGxleEluc3RydWN0aW9ucztcclxuICAgICAgICAgICAgICAgIHRoaXMuSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LmNvbXBsZXhJbnN0cnVjdGlvbnMpID8gcnhMaXN0LmNvbXBsZXhJbnN0cnVjdGlvbnMgOiBcIlwiO1xyXG4gICAgICAgICAgICAgIHRoaXMuSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jb21wbGV4SWQgPSByeExpc3QuY29tcGxleElkID8gcnhMaXN0LmNvbXBsZXhJZCA6IDA7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucm91dGVTZWFyY2hWYWx1ZSA9IHJ4TGlzdC5yb3V0ZSA/IHJ4TGlzdC5yb3V0ZSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucnhQUk4gPSByeExpc3QucHJuID09IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMgPSByeExpc3QucHJlc2NyaWJlQXM7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2NyaXB0RGF0ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LnNjcmlwdERhdGUpID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocnhMaXN0LnNjcmlwdERhdGUsICd5eXl5LU1NLWRkJykgOiBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnN0YXJ0RGF0ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LnN0YXJ0RGF0ZSkgPyB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyeExpc3Quc3RhcnREYXRlLCAneXl5eS1NTS1kZCcpIDogXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lbmREYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocnhMaXN0LnByZXNjcmlwdGlvbkV4cGlyZXNWYWx1ZSwgJ3l5eXktTU0tZGQnKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbCA9IHJ4TGlzdC5taW5pbXVtSW50ZXJ2YWxCZXR3ZWVuUmVwZWF0cyA9PSAtMSA/ICcnIDogcnhMaXN0Lm1pbmltdW1JbnRlcnZhbEJldHdlZW5SZXBlYXRzO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnB1cnBvc2VTZWFyY2hWYWx1ZSA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LnB1cnBvc2UpID8gcnhMaXN0LnB1cnBvc2UgOiBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLkJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvdyA9IHJ4TGlzdC5icmFuZFN1YnN0aXR1dGVzTm90QWxsb3dlZCA9PSAwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmFubm90YXRpb24gPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJ4TGlzdC5hbm5vdGF0aW9uKSA/IHJ4TGlzdC5hbm5vdGF0aW9uIDogXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kb2N0b3JOb3RlcyA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LmRvY3Rvck5vdGVzKSA/IHJ4TGlzdC5kb2N0b3JOb3RlcyA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaXB0aW9uUmVhc29uID0gcnhMaXN0LnJlYXNvbkZvclRoZXJhcGV1dGljR29vZDtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNOb3RlcyA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LnBic05vdGVzKSA/IHJ4TGlzdC5wYnNOb3RlcyA6IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9uc0F1dCA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuYXBwcm92YWxObyA9IHJ4TGlzdC5hdXRob3JpdHlBcHByb3ZhbE51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeSA9IHJ4TGlzdC5zZW5kVG9QaGFybWFjeTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVZhbHVlID0gcnhMaXN0LnNlbmRUb1BoYXJtYWN5VmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZW1lcmdlbmN5U3VwcGx5ID0gcnhMaXN0LmVtZXJnZW5jeVN1cHBseTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5teVNMQ29uc2VudCA9IHJ4TGlzdC5teVNMQ29uc2VudDtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnJlZ3VsYXRpb24yNCA9IHJ4TGlzdC5yZWd1bGF0aW9uMjQgPT0gMCA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zY3JpcHRUeXBlID0gcnhMaXN0LnNjcmlwdFR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuQ1RHQ29QYXltZW50ID0gcnhMaXN0LnBhdGllbnRDdGdGbGFnID09IDAgPyB0cnVlIDogZmFsc2VcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5sZW1pID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMucmVzcG9uc2UuYWlwKSA/IHJlcy5yZXNwb25zZS5haXAubGVtaSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmxtYmMgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcy5yZXNwb25zZS5haXApID8gcmVzLnJlc3BvbnNlLmFpcC5sbWJjIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudW5Vc3VhbERvc2VGbGFnID0gcnhMaXN0LnVuVXN1YWxEb3NlRmxhZyA9PSAwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLlN0YXRlQXV0aG9yaXR5TnVtYmVyID0gIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyeExpc3Quc3RhdGVBdXRob3JpdHlOdW1iZXIpID8gcnhMaXN0LnN0YXRlQXV0aG9yaXR5TnVtYmVyIDogXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wYnNMaXN0SW5zdHJ1Y3Rpb25zSWQgPSByeExpc3QucmVzdHJpY3RlZFBic1NlbGVjdGVkSW5kZXggIT0gMCA/IHJ4TGlzdC5yZXN0cmljdGVkUGJzU2VsZWN0ZWRJbmRleCAtIDEgOiBudWxsOyB0aGlzLmNvbW1vblNlcnZpY2VzLnBic0xpc3RJbnN0cnVjdGlvbnMgPSAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJ4TGlzdC5wYnNMaXN0SW5zdHJ1Y3Rpb25zKSA/IHJ4TGlzdC5wYnNMaXN0SW5zdHJ1Y3Rpb25zIDogJyc7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWUgPSByeExpc3QuaXNCcmFuZE5hbWUgPyByeExpc3QuaXNCcmFuZE5hbWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc1Nob3dBdXRob3JpdHkgPSByeExpc3QuaXNTaG93QXV0aG9yaXR5ID8gcnhMaXN0LmlzU2hvd0F1dGhvcml0eSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmF1dGhvcml0eUZvcm1ObyA9ICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocnhMaXN0LnBic0R2YUF1dGhvcml0eU51bWJlcikgJiYgcnhMaXN0LnBic0R2YUF1dGhvcml0eU51bWJlciAhPSAwID8gcnhMaXN0LnBic0R2YUF1dGhvcml0eU51bWJlciA6IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChyeExpc3QuaXNTaG93QXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID0gdHJ1ZVxyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIGlmIChyeExpc3Quc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT0gXCJwcmVzY3JpYmVkXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChyeExpc3Quc3RhdHVzLnRvTG93ZXJDYXNlKCkgPT0gXCJjZWFzZWRcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHJ4TGlzdC5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PSBcImNhbmNlbGxlZFwiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlZGl0UmVzdHJpY3RGbGFnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5Qb3B1cFNjcmVlbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJzZXRFZGl0VmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuUG9wdXBTY3JlZW5Mb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZXRFZGl0VmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vZW5hYmxlIGUtcHJlc2NyaXB0aW9uXHJcbiAgZVByZXNjcmlwdGlvblZhbGlkYXRpb24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHM/LnNjcmlwdFR5cGUpICYmIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnNjcmlwdFR5cGUudG9VcHBlckNhc2UoKSA9PSAnTScpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscz8uc2NyaXB0VHlwZSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZS50b1VwcGVyQ2FzZSgpID09ICdFJyAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzPy5zdGF0dXMpICYmIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09ICdkcmFmdCcgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLmVQcmVzY3JpcHRpb25BbGxvd2VkID09IDAgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy52ZW5kb3JQYXRpZW50Q29uc2VudCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5jcmVhdGVQYXRpZW50UmVzcG9uc2UuaXNfaHBpb192YWxpZCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLmNyZWF0ZVBhdGllbnRSZXNwb25zZS5pc19ocGlpX3ZhbGlkICYmIHRoaXMuY29tbW9uU2VydmljZXMuY3JlYXRlUGF0aWVudFJlc3BvbnNlLmlzX2loaV92YWxpZCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnBoeXNpY2lhbkRldGFpbHMuZVByZXNjcmlwdGlvbkFsbG93ZWQgPT0gMCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnZlbmRvclBhdGllbnRDb25zZW50ID09IHRydWUpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImVQcmVzY3JpcHRpb25WYWxpZGF0aW9uXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0ZVNjaGVkdWxlTnVtYmVyKHNlbGVjdGVkRm9ybXVsYXRpb246IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbCAmJiBzZWxlY3RlZEZvcm11bGF0aW9uLnN0YXRlU2NoZWR1bGVzICE9IG51bGwgJiYgc2VsZWN0ZWRGb3JtdWxhdGlvbi5zdGF0ZVNjaGVkdWxlcyAhPSBcIlwiKSB7XHJcbiAgICAgICAgdmFyIHN0YXRlU2NoZWR1bGVMaXN0ID0gW107XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZEZvcm11bGF0aW9uLnN0YXRlU2NoZWR1bGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoc3RhdGVTY2hlZHVsZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzdGF0ZVNjaGVkdWxlTGlzdC5jb25jYXQoc2VsZWN0ZWRGb3JtdWxhdGlvbi5zdGF0ZVNjaGVkdWxlc1tpXS5zY2hlZHVsZXMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RhdGVTY2hlZHVsZUxpc3QucHVzaChzZWxlY3RlZEZvcm11bGF0aW9uLnN0YXRlU2NoZWR1bGVzW2ldLnNjaGVkdWxlcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdGF0ZVNjaGVkdWxlTGlzdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0U3RhdGVTY2hlZHVsZU51bWJlclwiKTtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXV0aG9yaXR5Tm9WYWxpZGF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBrZXl2YWx1ZSA9IGV2ZW50LmNoYXJDb2RlO1xyXG4gICAgICByZXR1cm4gKChrZXl2YWx1ZSA+IDY0ICYmIGtleXZhbHVlIDwgOTEpIHx8IChrZXl2YWx1ZSA+IDk2ICYmIGtleXZhbHVlIDwgMTIzKSB8fCAoa2V5dmFsdWUgPj0gNDggJiYga2V5dmFsdWUgPD0gNTcpKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiYXV0aG9yaXR5Tm9WYWxpZGF0aW9uXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwYXlMb2FkU3RhdGVTY2hlZHVsZU51bWJlcihTY2hlZHVsZU51bWJlcjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB2YXIgc3RhdGVTY2hlZHVsZU51bWJlciA9IHRoaXMuZ2V0U3RhdGVTY2hlZHVsZU51bWJlcihTY2hlZHVsZU51bWJlcik7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHN0YXRlU2NoZWR1bGVOdW1iZXIpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0U3RhdGVDb2RlRnJvbVN0YXRlTmFtZSh0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnN0YXRlKS50b1VwcGVyQ2FzZSgpID09IFwiVEFTXCIgJiYgc3RhdGVTY2hlZHVsZU51bWJlci5sZW5ndGggIT0gMCAmJiBzdGF0ZVNjaGVkdWxlTnVtYmVyWzBdLmluZGV4T2YoXCJTNERcIikgIT0gLTEpIHtcclxuICAgICAgICAgIHJldHVybiBcIlM0RFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRTdGF0ZUNvZGVGcm9tU3RhdGVOYW1lKHRoaXMuY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuc3RhdGUpLnRvVXBwZXJDYXNlKCkgPT0gXCJOU1dcIiAmJiBzdGF0ZVNjaGVkdWxlTnVtYmVyLmxlbmd0aCAhPSAwICYmIHN0YXRlU2NoZWR1bGVOdW1iZXJbMF0uaW5kZXhPZihcIlM0QlwiKSAhPSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIFwiUzRCXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwYXlMb2FkU3RhdGVTY2hlZHVsZU51bWJlclwiKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcmVzY3JpcGVBYm9ydCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBwYXlsb2FkID0ge1xyXG4gICAgICAgIHJlcXVlc3RfdHlwZTogXCJwYXJhbWV0ZXJcIixcclxuICAgICAgICB1c2VySWQ6IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy51c2VySWQsXHJcbiAgICAgICAgcGF0VXNlcklkOiB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnBhdGllbnRVc2VySWRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFib3J0ZGlzYWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuUEhZU0lDSUFOLlJYX1BSRVNDUklCRV9BQk9SVCArIFwiP3VzZXJJZD1cIiArIHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscy51c2VySWQgKyBcIiZwYXRVc2VySWQ9XCIgKyB0aGlzLmNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnBhdGllbnRVc2VySWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEuaXNBYm9ydCA9IHRydWU7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEuYWJvcnRFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyX2NvZGUgPSBlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlO1xyXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydE1zZyA9IGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIFwiXCIsIFwiXCIsIFwiUnhDb21wb25lbnRcIiwgXCJwcmVzY3JpcGVBYm9ydFwiLCB0aGlzLnJlc3BvbnNlRGF0YS5wYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0U3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEuYWJvcnRNc2cgPSByZXMucmVzcG9uc2VfbWVzc2FnZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5jb21tb25TZXJ2aWNlcy5yeGlkID0gXCJcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydEVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydEVycl9jb2RlID0gcmVzLmVycm9yX2NvZGU7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zZURhdGEuYWJvcnRNc2cgPSByZXMucmVzcG9uc2VfbWVzc2FnZTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJwcmVzY3JpcGVBYm9ydFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VEYXRhLmlzUHJlc2NyaWJlKVxyXG4gICAgICAgICAgICB0aGlzLnNob3dSZXNwb25zZU1lc3NhZ2UoKTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuYWJvcnRCdG5GbGFnID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInByZXNjcmlwZUFib3J0XCIsIHBheWxvYWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmlzQWJvcnQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0TXNnID0gZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyX2NvZGUgPSBlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlXHJcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VEYXRhLmlzUHJlc2NyaWJlKVxyXG4gICAgICAgICAgdGhpcy5zaG93UmVzcG9uc2VNZXNzYWdlKCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJwcmVzY3JpcGVBYm9ydFwiLCBwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmFib3J0QnRuRmxhZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJlc2NyaXBlQWJvcnRcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93UmVzcG9uc2VNZXNzYWdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydFN1Y2Nlc3MgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShcIlwiLCB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhLnJlc3BvbnNlX21lc3NhZ2UsIHRydWUsIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZWRhdGEuZGF0YSk7XHJcbiAgICAgICAgdGhpcy5jbG9zZSh0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhLmRhdGEpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLmlzUHJpbnRBdmFpbGFibGUgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlZGF0YS5maWxlX3VybCkpIHtcclxuICAgICAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldCh0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhLmZpbGVfdXJsKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzcG9uc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcInNob3dSZXNwb25zZU1lc3NhZ2VcIiwgdGhpcy5yZXNwb25zZURhdGEucGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGF0b2IocmVzcG9uc2UuZmlsZSkuc3BsaXQoJycpLm1hcChjaGFyID0+IGNoYXIuY2hhckNvZGVBdCgwKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGJiYiA9IG5ldyBCbG9iKFtieXRlQXJyYXldLCB7IHR5cGU6IFwiYXBwbGljYXRpb24vcGRmXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmJiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1dpbmRvdyA9IHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1dpbmRvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdXaW5kb3cuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByaW50V2FybmluZ1BvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJzaG93UmVzcG9uc2VNZXNzYWdlXCIsIHRoaXMucmVzcG9uc2VEYXRhLnBheWxvYWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4ocmVzcG9uc2UucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgdGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlZGF0YS5lcnJvcl9jb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZSh0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhLmVycm9yX2NvZGUsIHJlc3BvbnNlLnJlc3BvbnNlX21lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2hvd1Jlc3BvbnNlTWVzc2FnZVwiLCB0aGlzLnJlc3BvbnNlRGF0YS5wYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBvcHVwU2NyZWVuTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZU1lZExvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInNob3dSZXNwb25zZU1lc3NhZ2VcIiwgdGhpcy5yZXNwb25zZURhdGEucGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydFN1Y2Nlc3MgJiYgdGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlRXJyb3IpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4odGhpcy5yZXNwb25zZURhdGEuYWJvcnRNc2csICdzdWNjZXNzJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoKHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZVN1Y2Nlc3MgJiYgIXRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyb3IgJiYgIXRoaXMucmVzcG9uc2VEYXRhLmFib3J0U3VjY2VzcykpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3Blbih0aGlzLnJlc3BvbnNlRGF0YS5QcmVzY3JpYmVNc2csICdzdWNjZXNzJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoKHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycm9yICYmICF0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydEVycm9yICYmICF0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydFN1Y2Nlc3MpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4odGhpcy5yZXNwb25zZURhdGEuUHJlc2NyaWJlTXNnLCAnZXJyb3InLCB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVFcnJfY29kZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5yZXNwb25zZURhdGEucHJlc2NyaWJlU3VjY2VzcyAmJiB0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydEVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4odGhpcy5yZXNwb25zZURhdGEuUHJlc2NyaWJlTXNnLCAnc3VjY2VzcycpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHRoaXMucmVzcG9uc2VEYXRhLmFib3J0TXNnLCBcImVycm9yXCIsIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyX2NvZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycm9yICYmIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyb3IpIHtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3Blbih0aGlzLnJlc3BvbnNlRGF0YS5QcmVzY3JpYmVNc2csICdlcnJvcicsIHRoaXMucmVzcG9uc2VEYXRhLnByZXNjcmliZUVycl9jb2RlKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3Blbih0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydE1zZywgXCJlcnJvclwiLCB0aGlzLnJlc3BvbnNlRGF0YS5hYm9ydEVycl9jb2RlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVTdWNjZXNzICYmIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0U3VjY2Vzcykge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHRoaXMucmVzcG9uc2VEYXRhLmFib3J0TXNnLCBcInN1Y2Nlc3NcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5hYm9ydEJ0bkZsYWcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc2VwcmlzY3JpYmVwcmludCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YS5pc0Fib3J0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmlzUHJlc2NyaWJlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0U3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVFcnJvciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVTdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVzcG9uc2VEYXRhLmFib3J0RXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5yZXNwb25zZURhdGEuUHJlc2NyaWJlTXNnID0gXCJcIjtcclxuICAgICAgdGhpcy5yZXNwb25zZURhdGEuYWJvcnRNc2cgPSBcIlwiO1xyXG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YS5wcmVzY3JpYmVkYXRhID0gXCJcIjtcclxuICAgICAgdGhpcy5yZXNwb25zZURhdGEucGF5bG9hZCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2hvd1Jlc3BvbnNlTWVzc2FnZVwiLCB0aGlzLnJlc3BvbnNlRGF0YS5wYXlsb2FkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIE1JTVNQcmltYXJ5U2VhcmNoKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgICAgaWYgKCF0aGlzLmlzU3RpbGxTZWFyY2hpbmcgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuc2VhcmNoQXBpU3RvcEZsYWcpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hNZWRpY2luZXNMZW5ndGggIT0gMCkge1xyXG4gICAgICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiBcInBhcmFtZXRlclwiLFxyXG4gICAgICAgICAgICBwcm9kdWN0TmFtZTogdGhpcy5Qcm9kdWN0U2VhcmNoTmFtZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNTdGlsbFNlYXJjaGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5QcmltYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMubWVkaVNlYXJjaFZhbHVlLnRyaW0oKS5sZW5ndGggPCAzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdGlsbFNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuUHJpbWFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWFyY2hBcGlTdG9wRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QubGVuZ3RoIDwgOClcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuUHJpbWFyeVNlYXJjaFNwaW5uZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZXNQYWdlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLk1JTVNQcmltYXJ5YXBpID0gdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuR0VUX01FRFNfQllfU0VBUkNIICsgJz9wcm9kdWN0TmFtZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuUHJvZHVjdFNlYXJjaE5hbWUpICsgJyZwYWdlPScgKyB0aGlzLnNlYXJjaE1lZGljaW5lc1BhZ2VOdW1iZXIgKyAnJm5vT2ZSZWM9MTAnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGlsbFNlYXJjaGluZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlByaW1hcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5QcmltYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZXNMZW5ndGggPSAwOyB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwiTUlNU1ByaW1hcnlTZWFyY2hcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IHJlcy5yZXNwb25zZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByZXMucmVzcG9uc2UuZm9yRWFjaCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnNlYXJjaGVkTWVkaWNpbmVMaXN0LmZpbHRlcigoeDogYW55KSA9PiB4LnByb2REaXNwbGF5VmFsdWUgPT0gZGF0YS5wcm9kRGlzcGxheVZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgodmFsOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2R1Y3QgPSB2YWwucHJvZEhpZGRlblZhbHVlLmluY2x1ZGVzKGRhdGEucHJvZEhpZGRlblZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBkYXRhLnNlYXJjaEJhc2UudG9Mb3dlckNhc2UoKSA9PSAnYnJhbmRrZXknID8gJ0JLJyA6IGRhdGEuc2VhcmNoQmFzZS50b0xvd2VyQ2FzZSgpID09ICdwcm9kcGFja2tleScgPyAnUFBLJyA6IGRhdGEuc2VhcmNoQmFzZS50b0xvd2VyQ2FzZSgpID09ICd2aXJ0dWFsbmFtZScgPyAnVk4nIDogZGF0YS5zZWFyY2hCYXNlLnRvTG93ZXJDYXNlKCkgPT0gJ3Byb2R1Y3RrZXknID8gJ1BLJyA6IGRhdGEuc2VhcmNoQmFzZS50b0xvd2VyQ2FzZSgpID09ICdwcm9kdWN0a2V5YWN0aXZlaW5ncmVkaWVudCcgPyAnUEtBJyA6IGRhdGEuc2VhcmNoQmFzZS50b0xvd2VyQ2FzZSgpID09ICdmdWxscGknID8gJ0ZQSScgOiAnUE4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb2R1Y3QgJiYgdHlwZSAhPSAnUEtBJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbC5wcm9kSGlkZGVuVmFsdWUgKz0gJywnICsgZGF0YS5wcm9kSGlkZGVuVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QubGVuZ3RoID4gNyB8fCByZXMucmVzcG9uc2UubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLlByaW1hcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2UubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QubGVuZ3RoIDwgOCAmJiB0aGlzLmlzU3RpbGxTZWFyY2hpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5NSU1TUHJpbWFyeVNlYXJjaCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlByaW1hcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJwcmltYXJ5TUlNU1NlYXJjaFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHJlcy5yZXNwb25zZV9tZXNzYWdlLCAnZXJyb3InLCByZXMuZXJyb3JfY29kZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuUHJpbWFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaE1lZGljaW5lc0xlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJpbWFyeU1JTVNTZWFyY2hcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLlByaW1hcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoTWVkaWNpbmVzTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcInByaW1hcnlNSU1TU2VhcmNoXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NS5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLnNlYXJjaE1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuUHJpbWFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hNZWRpY2luZXNMZW5ndGggPSAwO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJpbWFyeU1JTVNTZWFyY2hcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBNSU1TU2Vjb25kYXJ5U2VhcmNoKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLmlzU3RpbGxTZWFyY2hpbmcgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuc2VhcmNoQXBpU3RvcEZsYWcpIHtcclxuICAgICAgICB2YXIgcGF5bG9hZCA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCAhPSAwICYmIHRoaXMuUHJvZHVjdFR5cGUudG9Mb3dlckNhc2UoKSAhPSBcInBrXCIgJiYgdGhpcy5Qcm9kdWN0VHlwZS50b0xvd2VyQ2FzZSgpICE9IFwicG5cIiAmJiB0aGlzLlByb2R1Y3RUeXBlLnRvTG93ZXJDYXNlKCkgIT0gXCJ2blwiICYmIHRoaXMuUHJvZHVjdFR5cGUudG9Mb3dlckNhc2UoKSAhPSBcImZwaVwiKSB7XHJcbiAgICAgICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGU6IFwicGFyYW1ldGVyXCIsXHJcbiAgICAgICAgICAgIHByb2R1Y3ROYW1lOiB0aGlzLnByb2RIaWRkZW5OYW1lLFxyXG4gICAgICAgICAgICB0eXBlOiB0aGlzLlByb2R1Y3RUeXBlLFxyXG4gICAgICAgICAgICBwcmVzY3JpYmVyVHlwZTogXCJNUFwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdC5sZW5ndGggPD0gMylcclxuICAgICAgICAgICAgdGhpcy5vbmNsaWNrTWVkaWNpbmVMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLlNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hCeW5hbWVQYWdlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLk1JTVNTZWNvbmRhcnlhcGkgPSB0aGlzLmFwaVNlcnZpY2UuR2V0KGNvbmZpZy5HRVRfTUVEU19CWV9OQU1FICsgJz9wcm9kdWN0TmFtZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMucHJvZEhpZGRlbk5hbWUpICsgJyZ0eXBlPScgKyB0aGlzLlByb2R1Y3RUeXBlICsgJyZwcmVzY3JpYmVyVHlwZT1NUCZwYWdlPScgKyB0aGlzLnNlYXJjaEJ5bmFtZVBhZ2VOdW1iZXIgKyAnJm5vT2ZSZWM9MTAnKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlYXJjaEFwaVN0b3BGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTsgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcIk1JTVNTZWNvbmRhcnlTZWFyY2hcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWFyY2hBcGlTdG9wRmxhZykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXMucmVzcG9uc2UubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hCeW5hbWVQYWdlTnVtYmVyID0gMTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5vbmNsaWNrTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcmVzLnJlc3BvbnNlLmZvckVhY2goKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IHJlcy5yZXNwb25zZS5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGlmICh0aGlzLmlzTm9uUGJzRmxhZykge1xyXG4gICAgICAgICAgICAgICAgICAvLyAgIHRoaXMucnhPbmx5Tk9OUEJTRmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vICAgaWYgKHRoaXMucnhPbmx5UEJTID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMucnhPbmx5UEJTRmlsdGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgIC8vICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdCA9IHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsO1xyXG4gICAgICAgICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hlY2tib3hDaGFuZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdCkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdC5sZW5ndGggPD0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmNsaWNrTWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzLnJlc3BvbnNlKSAmJiByZXMucmVzcG9uc2UubGVuZ3RoICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLk1JTVNTZWNvbmRhcnlTZWFyY2goKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEJ5bmFtZUxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlYXJjaEFwaVN0b3BGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcIk1JTVNTZWNvbmRhcnlTZWFyY2hcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2hCeW5hbWVMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIk1JTVNTZWNvbmRhcnlTZWFyY2hcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWFyY2hBcGlTdG9wRmxhZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiTUlNU1NlY29uZGFyeVNlYXJjaFwiLCBwYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjUubWVzc2FnZSArIGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLlNlY29uZGFyeVNlYXJjaFNwaW5uZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMub25jbGlja01lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuU2Vjb25kYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiTUlNU1NlY29uZGFyeVNlYXJjaFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaW50V2FybmluZ1BvcCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHZhciBkYXRhID0gXCJQbGVhc2UgZW5hYmxlIHBvcHVwIG9uIHRoZSBicm93c2VyIHRvIHZpZXcvcHJpbnQgdGhlIHByZXNjcmlwdGlvbi5cIjtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5kaWFsb2dvcGVuKFJlYWxUaW1lUHJlc2NyaXB0aW9uTW9uaXRvcmluZ0NvbXBvbmVudCwgdGhpcy5jb250ZW50LCBkYXRhKS5zdWJzY3JpYmUoKHJlcykgPT4geyB9KTtcclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwicHJpbnRXYXJuaW5nUG9wXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbnVtYmVyVG9Xb3JkKG46IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKG4gPCAwKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgdmFyIHNpbmdsZV9kaWdpdCA9IFsnJywgJ09uZScsICdUd28nLCAnVGhyZWUnLCAnRm91cicsICdGaXZlJywgJ1NpeCcsICdTZXZlbicsICdFaWdodCcsICdOaW5lJ11cclxuICAgICAgdmFyIGRvdWJsZV9kaWdpdCA9IFsnVGVuJywgJ0VsZXZlbicsICdUd2VsdmUnLCAnVGhpcnRlZW4nLCAnRm91cnRlZW4nLCAnRmlmdGVlbicsICdTaXh0ZWVuJywgJ1NldmVudGVlbicsICdFaWdodGVlbicsICdOaW5ldGVlbiddXHJcbiAgICAgIHZhciBiZWxvd19odW5kcmVkID0gWydUd2VudHknLCAnVGhpcnR5JywgJ0ZvcnR5JywgJ0ZpZnR5JywgJ1NpeHR5JywgJ1NldmVudHknLCAnRWlnaHR5JywgJ05pbmV0eSddXHJcbiAgICAgIGlmIChuID09PSAwKSByZXR1cm4gJ1plcm8nO1xyXG4gICAgICBmdW5jdGlvbiB0cmFuc2xhdGUobjogYW55KSB7XHJcbiAgICAgICAgdmFyIHdvcmQ6IGFueSA9ICcnXHJcbiAgICAgICAgaWYgKG4gPCAxMCkge1xyXG4gICAgICAgICAgd29yZCA9IHNpbmdsZV9kaWdpdFtuXSArICcgJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChuIDwgMjApIHtcclxuICAgICAgICAgIHdvcmQgPSBkb3VibGVfZGlnaXRbbiAtIDEwXSArICcgJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChuIDwgMTAwKSB7XHJcbiAgICAgICAgICB2YXIgcmVtID0gdHJhbnNsYXRlKG4gJSAxMClcclxuICAgICAgICAgIHdvcmQgPSBiZWxvd19odW5kcmVkWyhuIC0gbiAlIDEwKSAvIDEwIC0gMl0gKyAnICcgKyByZW1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobiA8IDEwMDApIHtcclxuICAgICAgICAgIHdvcmQgPSBzaW5nbGVfZGlnaXRbTWF0aC50cnVuYyhuIC8gMTAwKV0gKyAnIEh1bmRyZWQgJyArIHRyYW5zbGF0ZShuICUgMTAwKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChuIDwgMTAwMDAwMCkge1xyXG4gICAgICAgICAgd29yZCA9IHRyYW5zbGF0ZShuIC8gMTAwMCkudHJpbSgpICsgJyBUaG91c2FuZCAnICsgdHJhbnNsYXRlKG4gJSAxMDAwKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChuIDwgMTAwMDAwMDAwMCkge1xyXG4gICAgICAgICAgd29yZCA9IHRyYW5zbGF0ZShuIC8gMTAwMDAwMCkudHJpbSgpICsgJyBNaWxsaW9uICcgKyB0cmFuc2xhdGUobiAlIDEwMDAwMDApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgd29yZCA9IHRyYW5zbGF0ZShuIC8gMTAwMDAwMDAwMCkudHJpbSgpICsgJyBCaWxsaW9uICcgKyB0cmFuc2xhdGUobiAlIDEwMDAwMDAwMDApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB3b3JkXHJcbiAgICAgIH1cclxuICAgICAgdmFyIHJlc3VsdCA9IHRyYW5zbGF0ZShuKVxyXG4gICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKVxyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJudW1iZXJUb1dvcmRcIik7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RXh0ZW1wTVBQTmFtZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbikgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQpICYmIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXQubGVuZ3RoICE9IDAgJiYgIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdPy5tcHBzKSAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLm1wcHMubGVuZ3RoID4gMCAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5hbXRbMF0ubXBwc1swXT8ubXBwTmFtZSkpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uYW10WzBdLm1wcHNbMF0ubXBwTmFtZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuICF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wcm9kdWN0TmFtZSkgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUudHJpbSgpIDogXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0RXh0ZW1wTVBQTmFtZVwiKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBodG1sVG9UZXh0Q29udmVydCh2YWx1ZTogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCB0bXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcclxuICAgICAgdG1wLmlubmVySFRNTCA9IHZhbHVlO1xyXG4gICAgICByZXR1cm4gdG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgJyc7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImh0bWxUb1RleHRDb252ZXJ0XCIpO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGF1dGhvcml0eU5vQ2hhbmdlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5TdGF0ZUF1dGhvcml0eU51bWJlciA9IHZhbHVlLnJlcGxhY2UoL1teYS16QS1aIDAtOV0vZywgXCJcIikucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcclxuICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJhdXRob3JpdHlOb0NoYW5nZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFscGhhUmVzdHJpY3Rpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdmFyIGtleXZhbHVlID0gZXZlbnQuY2hhckNvZGU7XHJcbiAgICAgIHJldHVybiAoKGtleXZhbHVlID4gNjQgJiYga2V5dmFsdWUgPCA5MSkgfHwgKGtleXZhbHVlID4gOTYgJiYga2V5dmFsdWUgPCAxMjMpIHx8IChrZXl2YWx1ZSA+PSA0OCAmJiBrZXl2YWx1ZSA8PSA1NykgfHwga2V5dmFsdWUgPT0gMzIpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJhbHBoYVJlc3RyaWN0aW9uXCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFkZFRvRmF2b3VyaXRlcygpIHtcclxuICAgIGNvbnN0IGlzSW5GYXZvdXJpdGVzID0gdGhpcy5pc0N1cnJlbnRNZWRpY2luZUluRmF2b3VyaXRlcygpO1xyXG4gICAgY29uc3QgaXNBZGRpbmcgPSAhaXNJbkZhdm91cml0ZXM7XHJcbiAgICB2YXIgcGh5c2ljaWFuRGV0YWlscyA9IHRoaXMuY29tbW9uU2VydmljZXMucGh5c2ljaWFuRGV0YWlscztcclxuICAgIHZhciBib2R5ID0ge1xyXG4gICAgICB1c2VySWRTdHJpbmc6IHBoeXNpY2lhbkRldGFpbHMudXNlcklkLFxyXG4gICAgICBwcm9kdWN0SWQ6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0SWQsXHJcbiAgICAgIHByb2R1Y3ROYW1lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcm9kdWN0TmFtZSk/dGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lOlwiXCIsXHJcbiAgICAgIHF1YW50aXR5OiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ucGJzVHlwZSkgJiYgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUgPT0gXCJub24gUEJTXCIgPyAodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm51bWJlck9mUGFjayArIFwieFwiICsgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnVuaXRQZXJQYWNrKSA6IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cyxcclxuICAgICAgcmVwZWF0czogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlcGVhdHMsXHJcbiAgICAgIHJlc3RyaWN0aW9uOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3Q/KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMgIT0gbnVsbCAmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zICE9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZSArIFwiIChcIiArIHRoaXMuZ2V0UmVzdHJpY3Rpb25zKHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMpICsgXCIpIFwiXHJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUpOlwiXCIsXHJcbiAgICAgIGdlbmVyaWNOYW1lOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSk/dGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lOlwiXCIsXHJcbiAgICAgICBwYnNDb2RlOiAhdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbj8ucGJzQ29kZSk/dGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNDb2RlOlwiXCIsXHJcbiAgICAgIGFjdGl2ZTogaXNBZGRpbmcsXHJcbiAgICAgIHJlc3RyaWN0ZWRNZWRpY2luZTogdGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3RcclxuICAgIH1cclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuUG9zdChib2R5LCBjb25maWcuUEhZU0lDSUFOLkFERF9GQVZPVVJJVEVfTUVESUNJTkUpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KHJlcykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgXCJcIiwgXCJcIiwgXCJSeENvbXBvbmVudFwiLCBcIkFkZEZhdm91cml0ZXNcIiwgYm9keSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzLnJlc3BvbnNlX2NvZGUgPT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0ID0gcmVzLmZhdm91cnRpZXNMaXN0IHx8IFtdO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMub3JpZ2luYWxGYXZvdXJpdGVNZWRpY2luZUxpc3QgPSByZXMuZmF2b3VydGllc0xpc3QgfHwgW107XHJcbiAgICAgICAgICAgICAgaWYgKCFpc0FkZGluZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25GYXZvdXJpdGVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGYXZvdXJpdGVNZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXMuZmF2b3VydGllc0xpc3QgfHwgcmVzLmZhdm91cnRpZXNMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihcclxuICAgICAgICAgICAgICAgICAgICBcIk5vIG1vcmUgZmF2b3VyaXRlcyByZW1haW5pbmcuIFlvdSBjYW4gYWRkIG1lZGljaW5lcyB0byBmYXZvdXJpdGVzIGZyb20gdGhlIHNlYXJjaCByZXN1bHRzLlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiaW5mb1wiXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCBcIlJ4Q29tcG9uZW50XCIsIFwiQWRkRmF2b3VyaXRlc1wiLCBib2R5KTtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJBZGRGYXZvdXJpdGVzXCIsIGJvZHkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKHJlcy5yZXNwb25zZV9tZXNzYWdlLCAnZXJyb3InLCByZXMuZXJyb3JfY29kZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKHJlcy5lcnJvcl9jb2RlLCByZXMucmVzcG9uc2VfbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93biA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcIkFkZEZhdm91cml0ZXNcIiwgYm9keSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJBZGRGYXZvdXJpdGVzXCIsIGJvZHkpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSArIGVycm9yLCBcImVycm9yXCIsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gICBnZXRGYXZvdXJ0aWVzTGlzdCgpIHtcclxuICAgIHZhciBwYXlsb2FkID0ge307XHJcbiAgICB0cnkge1xyXG4gICAgICBwYXlsb2FkID0gdGhpcy5jb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnVzZXJJZDtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuUEhZU0lDSUFOLkdFVF9GQVZPVVJJVEVfTUVESUNJTkVfTElTVCArIFwiP3VzZXJJZFN0cmluZz1cIiArIHBheWxvYWQrXCImcmVzdHJpY3RlZE1lZGljaW5lPVwiK3RoaXMuY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkocmVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0RmF2b3VydGllc0xpc3RcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMudG9hc3RvcGVuKGVycm9yY29uZmlnLmVycm9yXzY0Lm1lc3NhZ2UsICdlcnJvcicsIGVycm9yY29uZmlnLmVycm9yXzY0LmNvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UoZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSwgZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChyZXMucmVzcG9uc2VfY29kZSA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0ID0gcmVzLmZhdm91cml0ZXNMaXN0O1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLm9yaWdpbmFsRmF2b3VyaXRlTWVkaWNpbmVMaXN0ID0gcmVzLmZhdm91cml0ZXNMaXN0O1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5mYXZvdXJpdGVNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5vcmlnaW5hbEZhdm91cml0ZU1lZGljaW5lTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIHJlcy5yZXNwb25zZV9tZXNzYWdlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgXCJSeENvbXBvbmVudFwiLCBcImdldEZhdm91cnRpZXNMaXN0XCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwiZ2V0RmF2b3VydGllc0xpc3RcIiwgcGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJnZXRGYXZvdXJ0aWVzTGlzdFwiLCBwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBleC5tZXNzYWdlLCBleC5zdGFjaywgXCJSeENvbXBvbmVudFwiLCBcImdldEZhdm91cnRpZXNMaXN0XCIsIHBheWxvYWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0Zhdm91cnRpZXMoKSB7XHJcbiAgICB0aGlzLnNob3dGYXZvdXJpdGVNZWQgPSAhdGhpcy5zaG93RmF2b3VyaXRlTWVkO1xyXG4gICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCkge1xyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLk1JTVNQcmltYXJ5YXBpKSkge1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuTUlNU1ByaW1hcnlhcGkudW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eSh0aGlzLmNvbW1vblNlcnZpY2VzLk1JTVNTZWNvbmRhcnlhcGkpKSB7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5NSU1TU2Vjb25kYXJ5YXBpLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dGYXZvdXJpdGVNZWQpIHtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uID0gbnVsbDtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWVkaWNpbmVMaXN0T3JnaW5hbCA9IFtdO1xyXG4gICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmZhdm91cml0ZU1lZGljaW5lTGlzdCA9IFtdO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0ID0gdGhpcy5jb21tb25TZXJ2aWNlcy5vcmlnaW5hbEZhdm91cml0ZU1lZGljaW5lTGlzdDtcclxuICAgIH1cclxuICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5jbGVhck1lZGljYWxQcmVzY3JpcHRpb25GYXZvdXJpdGVEYXRhKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBudWxsO1xyXG4gICAgdGhpcy5zZWFyY2hNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5QcmltYXJ5U2VhcmNoU3Bpbm5lciA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWFyY2hNZWRpY2luZXNMZW5ndGggPSAwO1xyXG4gICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZWFyY2hBcGlTdG9wRmxhZyA9IHRydWU7XHJcbiAgICB0aGlzLm9uY2xpY2tNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgdGhpcy5TZWNvbmRhcnlTZWFyY2hTcGlubmVyID0gZmFsc2U7XHJcbiAgICBcclxuICAgIHRoaXMuc2VhcmNoZWRNZWRpY2luZUxpc3QgPSBbXTtcclxuICAgIHRoaXMuY29tbW9uU2VydmljZXMubWVkaVNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMubWVkaVNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vRmF2b3VyaXRlTWVkaWNpbmUgTG9hZGluZ1xyXG4gIGZhdm91cml0ZU1lZGljaW5lTG9hZGluZyhyeExpc3Q6IGFueSkge1xyXG4gICAgdmFyIHBheWxvYWQgPSB7fTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmKCF0aGlzLmNvbW1vblNlcnZpY2VzLmlzTWVkaWNpbmVSZXN0cmljdCl7XHJcbiAgICAgIHJ4TGlzdC5wYnNDb2RlID0gcnhMaXN0LnBic0NvZGUgIT0gbnVsbCA/IHJ4TGlzdC5wYnNDb2RlIDogXCJcIjtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICByZXF1ZXN0X3R5cGU6IFwicGFyYW1ldGVyXCIsXHJcbiAgICAgICAgcHJvZHVjdElkOiByeExpc3QucHJvZHVjdElkLFxyXG4gICAgICAgIHBic0NvZGU6IHJ4TGlzdC5wYnNDb2RlLFxyXG4gICAgICAgIHJ4SWQ6IDBcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5mYXZNZWRpY2luZUxvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLkdldChjb25maWcuUEhZU0lDSUFOLkdFVF9NRURfREVUX0JZX0lEICsgXCI/cHJvZHVjdElkPVwiICsgcnhMaXN0LnByb2R1Y3RJZCArIFwiJnBic0NvZGU9XCIgKyAodGhpcy5jb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3QgPyByeExpc3QucGJzQ29kZSA6IFwiXCIpICsgXCImcnhJZD1cIiArIDApLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyZXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmF2TWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCBcIlwiLCBcIlwiLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCB0aGlzLnJlc3BvbnNlRGF0YS5wYXlsb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy50b2FzdG9wZW4oZXJyb3Jjb25maWcuZXJyb3JfNjQubWVzc2FnZSwgJ2Vycm9yJywgZXJyb3Jjb25maWcuZXJyb3JfNjQuY29kZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuZXJyb3JSZXNwb25zZShlcnJvcmNvbmZpZy5lcnJvcl82NC5jb2RlLCBlcnJvcmNvbmZpZy5lcnJvcl82NC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHJlcy5yZXNwb25zZV9jb2RlID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5mYXZNZWRpY2luZUxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB2YXIgTWVkID0gW107XHJcbiAgICAgICAgICAgIE1lZC5wdXNoKHJlcy5yZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPSBNZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpY2luZUxpc3RPcmdpbmFsID0gTWVkO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gPSBNZWQ7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YU9uY2hhbmdlb2ZNZWRpY2luZShNZWQpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZvcm11bGF0aW9uKHJlcy5yZXNwb25zZSwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLm1lZGlTZWFyY2hWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIHRoaXMubWVkaVNlYXJjaFZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hlZE1lZGljaW5lTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSAxO1xyXG4gICAgICAgICAgICB0aGlzLnJ4T25seVBCUyA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmF2TWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNldGxvZ3ZhbHVlKGZhbHNlLCByZXMucmVzcG9uc2VfbWVzc2FnZSwgcmVzLnJlc3BvbnNlX21lc3NhZ2UsIFwiUnhDb21wb25lbnRcIiwgXCJzZXRFZGl0VmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihyZXMucmVzcG9uc2VfbWVzc2FnZSwgJ2Vycm9yJywgcmVzLmVycm9yX2NvZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLmVycm9yUmVzcG9uc2UocmVzLmVycm9yX2NvZGUsIHJlcy5yZXNwb25zZV9tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgICAgIHRoaXMuZmF2TWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGV4Lm1lc3NhZ2UsIGV4LnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmZhdk1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2V0bG9ndmFsdWUoZmFsc2UsIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBcIlJ4Q29tcG9uZW50XCIsIFwic2V0RWRpdFZhbHVlc1wiLCBwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnRvYXN0b3BlbihlcnJvcmNvbmZpZy5lcnJvcl82NS5tZXNzYWdlICsgZXJyb3IsIFwiZXJyb3JcIiwgZXJyb3Jjb25maWcuZXJyb3JfNjUuY29kZSk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5lcnJvclJlc3BvbnNlKGVycm9yY29uZmlnLmVycm9yXzY1LmNvZGUsIGVycm9yY29uZmlnLmVycm9yXzY1Lm1lc3NhZ2UgKyBlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmF2TWVkaWNpbmVMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB2YXIgc2VsZWN0ZWRkYXRhID0gbnVsbDtcclxuICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShyeExpc3Q/LnByb2R1Y3RJZCkpIHtcclxuICAgICAgICAgIHNlbGVjdGVkZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QuZmlsdGVyKCh4OiB7IHByb2R1Y3RJZDogYW55OyB9KSA9PiB4LnByb2R1Y3RJZCA9PSBOdW1iZXIocnhMaXN0LnByb2R1Y3RJZCkpO1xyXG4gICAgICAgICAgLy8gc2VsZWN0ZWRkYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZE1lZGljaW5lTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiA9IHNlbGVjdGVkZGF0YVswXTtcclxuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZXMuY2xlYXJNZWRpY2FsUHJlc2NyaXB0aW9uRGF0YU9uY2hhbmdlb2ZNZWRpY2luZShzZWxlY3RlZGRhdGFbMF0pO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmlzUnRwbU5leHQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5hdXRob3JpdHlGb3JtTm8gPSB0aGlzLmdldEFkZEF1dGhWYWx1ZSh0aGlzLnRlbXBBdXRob3JpdHlGb3JtTm8pO1xyXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5yeEVuZERhdGVDYWxjdWxhdGVyKCk7XHJcbiAgICAgICAgICB0aGlzLmVuYWJsZVByZXNjcmliZUFzKHNlbGVjdGVkZGF0YVswXSk7XHJcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkQnJhbmRGb3JtdWxhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZWRldGVjdC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICB0aGlzLmZhdk1lZGljaW5lTG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0LmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5jb21tb25TZXJ2aWNlcy5zZXRsb2d2YWx1ZShmYWxzZSwgZXgubWVzc2FnZSwgZXguc3RhY2ssIFwiUnhDb21wb25lbnRcIiwgXCJzZXRFZGl0VmFsdWVzXCIsIHBheWxvYWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgIGlzQ3VycmVudE1lZGljaW5lSW5GYXZvdXJpdGVzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gfHwgIXRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0IHx8IHRoaXMuY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2VzLmZhdm91cml0ZU1lZGljaW5lTGlzdC5zb21lKChmYXZNZWQ6IHsgcHJvZHVjdElkOiBhbnk7IHBic0NvZGU6IGFueTsgcHJvZHVjdE5hbWU6IGFueTsgfSkgPT4gXHJcbiAgICAgIGZhdk1lZC5wcm9kdWN0SWQudG9TdHJpbmcoKSA9PT0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3RJZC50b1N0cmluZygpICYmXHJcbiAgICAgICghdGhpcy5jb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGZhdk1lZC5wYnNDb2RlKT9mYXZNZWQucGJzQ29kZTpcIlwiKSA9PT0gKCF0aGlzLmNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkodGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uPy5wYnNDb2RlKSA/IHRoaXMuY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlOlwiXCIpICYmXHJcbiAgICAgIGZhdk1lZC5wcm9kdWN0TmFtZSA9PT0gdGhpcy5jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlICNyeHdpZGdldHM+IDwvbmctdGVtcGxhdGU+XHJcbjxkaXYgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbWltc1wiPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiUmVhY3RNb2RhbF9fT3ZlcmxheSBSZWFjdE1vZGFsX19PdmVybGF5LS1hZnRlci1vcGVuIFJlYWN0X19PdmVybGF5X09wZW5fUG9wdXAgbmV3X3J4X21pbXNfT3ZlcmxheV9PcGVuX1BvcHVwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiUmVhY3RNb2RhbF9fQ29udGVudCBSZWFjdE1vZGFsX19Db250ZW50LS1hZnRlci1vcGVuIFJlYWN0X19Db250ZW50IG5ld19yeF9taW1zX1JlYWN0X19Db250ZW50XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cCBuZXdfcnhfbWltc19SZWFjdE1vZGFsX3BvcHVwXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxhcHAtc3BsYXNoc2NyZWVuICpuZ0lmPVwiUG9wdXBTY3JlZW5Mb2FkZXJcIiBbaGVpZ2h0XT1cIidoZWlnaHQtcngtc3BpbidcIj4gPC9hcHAtc3BsYXNoc2NyZWVuPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtY29udGVudFwiICpuZ0lmPVwiIVBvcHVwU2NyZWVuTG9hZGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXdfcnhfcG9wdXBfaGVhZGVyX2JveFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0yLWNvbC10YWJsZXQgbWRsLWNlbGwtLTMtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoIHJ4X2lwYWRfaGVhZGVyX2JveF8xXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbW1vblNlcnZpY2VzLnJ4aWQgIT0gbnVsbCAmJiBjb21tb25TZXJ2aWNlcy5yeGlkICE9Jyc/J21kbC1jZWxsLS0yLWNvbCc6J21kbC1jZWxsLS0zLWNvbCdcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cImFsaWduLXNlbGY6IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJuZXdfcnhfcG9wdXBfaGVhZGVyX2JveF90ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3Bhc3NldHMuaG9sYS5oZWFsdGgvcngtd2lkZ2V0cy9yeC1ob2xhLWhlYWx0aC1sb2dvLTEucG5nXCIgYWx0PVwiaG9sYV9oZWFsdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogYXV0bztoZWlnaHQ6IDM3cHg7Ym9yZGVyLXJhZGl1czogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wYXNzZXRzLmhvbGEuaGVhbHRoL3J4LXdpZGdldHMvcngtaGVhZGVyLWxvZ28ucG5nXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICB7e2NvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpcHRpb24gPT09IHRydWUgPyAnRWRpdCBTY3JpcHQnIDogJ05ldyBTY3JpcHQnfX1cclxuICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS00LWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfZGVza3RvcF90aXRsZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYWxpZ24tc2VsZjogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9oZWFkZXJfYm94X3RleHRcIiBzdHlsZT1cImp1c3RpZnktY29udGVudDogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDYwMDtcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuZmlyc3ROYW1lICtcclxuICAgICAgICAgICAgICAgICAgICAgIFwiIFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmxhc3ROYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj4vPHNwYW4gc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuZG9iLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJkZC1NTS15eXl5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCAgbWRsLWNlbGwtLTUtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X3BvcHVwX2hlYWRlcl9ib3hfY29sIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoIHJ4X2lwYWRfaGVhZGVyX2JveF8yIG5ld19tb2JpbGVfcnhfdG9wX2JvdHRvbV8wXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29tbW9uU2VydmljZXMucnhpZCAhPSBudWxsICYmIGNvbW1vblNlcnZpY2VzLnJ4aWQgIT0nJz8nbWRsLWNlbGwtLTYtY29sJzonbWRsLWNlbGwtLTUtY29sJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV3X3J4X3BvcHVwX2J0bnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjbG9zZShudWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1idXR0b24gbWRsLWpzLWJ1dHRvbiBtZGwtYnV0dG9uLS1yYWlzZWQgbWRsLWJ1dHRvbi0tY29sb3JlZCBiYWNrQnV0dG9uIG5ld19tb2JpbGVfcnhfYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgfHwgc2VsZWN0aW9uYnRuTG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBDbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7cG9zaXRpb246IHJlbGF0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29tbW9uU2VydmljZXMucnhpZCAhPSBudWxsICYmIGNvbW1vblNlcnZpY2VzLnJ4aWQgIT0nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1idXR0b24gbWRsLWpzLWJ1dHRvbiBtZGwtYnV0dG9uLS1yYWlzZWQgbWRsLWJ1dHRvbi0tY29sb3JlZCBuZXh0QnV0dG9uIHNlbGVjdC1hY3Rpb24tYnRuIG5ld19tb2JpbGVfcnhfYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7d2lkdGg6IDE0MHB4O2Rpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IHJvdzthbGlnbi1pdGVtczogY2VudGVyO2p1c3RpZnktY29udGVudDogY2VudGVyO3BhZGRpbmc6IDEwcHggIWltcG9ydGFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgfHwgc2VsZWN0aW9uYnRuTG9hZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFjdGlvbkRyb3Bkb3dub3BlbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25idG5Mb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInJ4X2xvYWRlcl9idXR0b24gbS12NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyMHB4O2hlaWdodDogMjBweDttYXJnaW46IDBweCAhaW1wb3J0YW50O21hcmdpbi1yaWdodDogMHB4ICFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6IDBweCAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0aW9uYnRuTG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgU2VsZWN0IEFjdGlvbiA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGRycC1pY29uXCI+ZXhwYW5kX21vcmU8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNzZWxlY3RBY3Rpb25Ecm9wZG93biBjbGFzcz1cIm5ld19yeF9QcmVzY3JpYmVfYnRuX2Ryb3Bkb3duX2xpc3RfYm94IHNlbGVjdC1hY3Rpb24tdWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieyBNX2xpc3RfYm94X3Nob3c6IHNlbGVjdEFjdGlvbkJ0bkRyb3Bkb3duID09PSB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmV3X3J4X1ByZXNjcmliZV9idG5fZHJvcGRvd25fbGlzdF91bFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMudG9Mb3dlckNhc2UoKSA9PSAnZHJhZnQnP2NhbmNlbERyYWZ0KCk6Y2FuY2VsUHJlc2NyaWJlTWVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNoZWNrU3RhdHVzQW5kU2NyaXB0dHlwZSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cyw0KT8nJzonZWRpdC1kaXNhYmxlLWRhdGEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYW5jZWw8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwicHJpbnRQcmVzY3JpYmVNZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2hlY2tTdGF0dXNBbmRTY3JpcHR0eXBlKHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnNjcmlwdFR5cGUsdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLDEpPycnOidlZGl0LWRpc2FibGUtZGF0YSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaW50PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cInJlaXNzdWVQcmVzY3JpYmVNZWQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2hlY2tTdGF0dXNBbmRTY3JpcHR0eXBlKHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnNjcmlwdFR5cGUsdGhpcy5jb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc3RhdHVzLDMpPycnOidlZGl0LWRpc2FibGUtZGF0YSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlLUlzc3VlPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImNlYXNlUHJlc2NyaWJlTWVkKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNoZWNrU3RhdHVzQW5kU2NyaXB0dHlwZSh0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cywyKT8nJzonZWRpdC1kaXNhYmxlLWRhdGEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDZWFzZTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicGFnZSAhPSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWJ1dHRvbiBtZGwtanMtYnV0dG9uIG1kbC1idXR0b24tLXJhaXNlZCBtZGwtYnV0dG9uLS1jb2xvcmVkIGJhY2tCdXR0b24gbmV3X21vYmlsZV9yeF9idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiIFtkaXNhYmxlZF09XCJ0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmliZU1lZExvYWRlciB8fCBzZWxlY3Rpb25idG5Mb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIEJhY2tcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicGFnZSA9PSAxXCIgKGNsaWNrKT1cInBhZ2VOdW1iZXJPbmVUb05leHQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1idXR0b24gbWRsLWpzLWJ1dHRvbiBtZGwtYnV0dG9uLS1yYWlzZWQgbWRsLWJ1dHRvbi0tY29sb3JlZCBuZXh0QnV0dG9uIG5ld19tb2JpbGVfcnhfYnRuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXIgfHwgc2VsZWN0aW9uYnRuTG9hZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBOZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1kbC1idXR0b24gbWRsLWpzLWJ1dHRvbiBtZGwtYnV0dG9uLS1yYWlzZWQgbWRsLWJ1dHRvbi0tY29sb3JlZCBuZXdfbW9iaWxlX3J4X2J0blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWJvcnRkaXNhYmxlPyduZXh0QnV0dG9uJzonYWJvcnRidXR0b24nXCIgKm5nSWY9XCJhYm9ydEJ0bkZsYWdcIiBbZGlzYWJsZWRdPVwiYWJvcnRkaXNhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmVzY3JpcGVBYm9ydCgpXCI+PHNwYW4gKm5nSWY9XCJhYm9ydGRpc2FibGVcIiBjbGFzcz1cInJ4X2xvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInJ4X2xvYWRlcl9idXR0b24gbS12NCByeF9idG5fc3BpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PHNwYW4gKm5nSWY9XCIhYWJvcnRkaXNhYmxlXCI+QWJvcnQ8L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGlubGluZS1ibG9ja1wiICpuZ0lmPVwicGFnZSA9PSAyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWJ1dHRvbiBtZGwtanMtYnV0dG9uIG1kbC1idXR0b24tLXJhaXNlZCBtZGwtYnV0dG9uLS1jb2xvcmVkIG5leHRCdXR0b24gbmV3X21vYmlsZV9yeF9idG5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZTt3aWR0aDogMTM1cHg7ZGlzcGxheTogZmxleDtmbGV4LWRpcmVjdGlvbjogcm93O2FsaWduLWl0ZW1zOiBjZW50ZXI7anVzdGlmeS1jb250ZW50OiBjZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMucHJlc2NyaWJlTWVkTG9hZGVyIHx8IHNlbGVjdGlvbmJ0bkxvYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpbmNsdWRlUnRwbU1vZGFsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnByZXNjcmliZU1lZExvYWRlciBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInJ4X2xvYWRlcl9idXR0b24gbS12NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyMHB4O2hlaWdodDogMjBweDttYXJnaW46IDBweCAhaW1wb3J0YW50O21hcmdpbi1yaWdodDogMHB4ICFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6IDBweCAhaW1wb3J0YW50O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGhpcy5jb21tb25TZXJ2aWNlcy5wcmVzY3JpYmVNZWRMb2FkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzY3JpYmUgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBkcnAtaWNvblwiPmV4cGFuZF9tb3JlPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAjUHJlc2NyaWJlRHJvcGRvd24gY2xhc3M9XCJuZXdfcnhfUHJlc2NyaWJlX2J0bl9kcm9wZG93bl9saXN0X2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0UEJUTkRyb3Bkb3duID09IHRydWVcIiBbY2xhc3NdPVwieyBNX2xpc3RfYm94X3Nob3c6IHNlbGVjdFBCVE5Ecm9wZG93biA9PT0gdHJ1ZSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5ld19yeF9QcmVzY3JpYmVfYnRuX2Ryb3Bkb3duX2xpc3RfdWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBlUHJlc2NyaXB0aW9uVmFsaWRhdGlvbigpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiTXByZXNjcmliZU1lZCgxKVwiPkUtUHJlc2NyaWJlIChEcmFmdCk8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGVQcmVzY3JpcHRpb25WYWxpZGF0aW9uKCl9XCIgKGNsaWNrKT1cIkVwcmVzY3JpcGVTZW5kKDEpXCIgKm5nSWY9XCIhdGhpcy5jb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeSAmJiAhdGhpcy5jb21tb25TZXJ2aWNlcy5lbWVyZ2VuY3lTdXBwbHlcIj5FLVByZXNjcmliZSBhbmQgU2VuZDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogZVByZXNjcmlwdGlvblZhbGlkYXRpb24oKX1cIiAoY2xpY2spPVwiRXByZXNjcmlwZVNlbmQoMilcIj5FLVByZXNjcmliZSBhbmQgUHJpbnQ8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IChjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID09PSB0cnVlICYmIGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLnRvVXBwZXJDYXNlKCk9PSAnTScmJiB0aGlzLmNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMudG9Mb3dlckNhc2UoKSAhPSAnZHJhZnQnKXx8IChjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID09PSB0cnVlICYmIGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLnRvVXBwZXJDYXNlKCk9PSAnRScpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiTXByZXNjcmliZU1lZCgyKVwiPlByZXNjcmliZSAoRHJhZnQpPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiAoY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmlwdGlvbiA9PT0gdHJ1ZSAmJiBjb21tb25TZXJ2aWNlcy5yeERldGFpbHMuc2NyaXB0VHlwZS50b1VwcGVyQ2FzZSgpID09ICdNJyYmIHRoaXMuY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9ICdkcmFmdCcpIHx8IChjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaXB0aW9uID09PSB0cnVlICYmIGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zY3JpcHRUeXBlLnRvVXBwZXJDYXNlKCk9PSAnRScpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHJlc2NyaXBlUHJpbnQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlc2NyaWJlIGFuZCBQcmludDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGggcnhfaXBhZF9oZWFkZXJfYm94XzMgbmV3X3J4X21vYmlsZV90aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYWxpZ24tc2VsZjogY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2hlYWRlcl9ib3hfdGV4dCBuZXdfbW9iaWxlX3J4X3BvcHVwX2hlYWRlcl90ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogNjAwXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmZpcnN0TmFtZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIiBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5sYXN0TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+LzxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmRvYixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiZGQtTU0teXl5eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFnZSA9PSAxXCIgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzFcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcHhcIiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3RcIj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tNS1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAjTWVkaWNpbmVEcm9wZG93biBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJtZWRpY2luZSBzZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBNZWRpY2luZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl8xX2lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7eyBtZWRpU2VhcmNoVmFsdWUgfX1cIiAoaW5wdXQpPVwic2VhcmNoSGFuZGxlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIk1lZGljaW5lRHJvcGRvd25MaXN0KClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBtZC0yNCBuZXdfcnhfcG9wdXBfdGFiXzFfaW5wdXRfc2VhcmNoXCI+c2VhcmNoPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzFfaW5wdXRfc2VhcmNoXCI+PC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfMV9saXN0X2JveFwiIFtjbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgIE1fbGlzdF9ib3hfc2hvdzogc2VsZWN0ZWRNZWRpY2luZURyb3Bkb3duID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoTWVkaWNpbmVMb2FkZXJcIiBjbGFzcz1cImxvYWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzZWFyY2hNZWRpY2luZUxvYWRlclwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl8xX2xpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG1lZGljaW5lTGlzdCBvZiBzZWFyY2hlZE1lZGljaW5lTGlzdFwiIFtjbGFzc109XCJnZXRjdXJyZW50aWQobWVkaWNpbmVMaXN0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFByb2R1Y3RMaXN0QnlOYW1lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGljaW5lTGlzdFsncHJvZEhpZGRlblZhbHVlJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWNpbmVMaXN0Wydwcm9kRGlzcGxheVZhbHVlJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWNpbmVMaXN0WydzZWFyY2hCYXNlJ11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCIgW2lubmVySFRNTF09XCJtZWRpY2luZUxpc3RbJ3Byb2REaXNwbGF5VmFsdWUnXVwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwic2VhcmNoZWRNZWRpY2luZUxpc3QubGVuZ3RoID09IDBcIj5ObyBEYXRhPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlByaW1hcnlTZWFyY2hTcGlubmVyXCIgY2xhc3M9XCJsb2FkZXIgbWwtbG9hZC00NVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0yLWNvbCBtZGwtY2VsbC0tMi1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aCBuZXdfbW9iaWxlX3J4X3RvcF9ib3R0b21fMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2Rpc2FibGVkUnhDb250ZW50Jzp0aGlzLmlzTm9uUGJzRmxhZ3x8KGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscyE9bnVsbCAmJiBjb21tb25TZXJ2aWNlcy5yeERldGFpbHMhPScnICYmIGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMhPW51bGwgJiYgY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cyE9JycgJiYgY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpIT0nZHJhZnQnKX1cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveCBuZXdfbW9iaWxlX3J4X3RvcF9ib3R0b21fMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInJ4T25seVBCU1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgpXCIgdmFsdWU9XCJQQlMvUlBCU1wiIFtkaXNhYmxlZF09XCJ0aGlzLmlzTm9uUGJzRmxhZ1wiIC8+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2xhYmVsXCIgc3R5bGU9XCJmb250LXdlaWdodDogNDAwOyBmb250LXNpemU6IDE2cHhcIj5QQlMvUlBCUzwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveCBuZXdfbW9iaWxlX3J4X3RvcF9ib3R0b21fMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94MlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInJ4UHJpdmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgpXCIgdmFsdWU9XCJQcml2YXRlXCIgLz48c3BhbiBjbGFzcz1cIm1kbC1jaGVja2JveF9fbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7IGZvbnQtc2l6ZTogMTZweFwiPlByaXZhdGU8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0yLWNvbCBtZGwtY2VsbC0tMi1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aCBuZXdfbW9iaWxlX3J4X3RvcF9ib3R0b21fMFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2Rpc2FibGVkUnhDb250ZW50Jzp0aGlzLmlzTm9uUGJzRmxhZ3x8KGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscyE9bnVsbCAmJiBjb21tb25TZXJ2aWNlcy5yeERldGFpbHMhPScnICYmIGNvbW1vblNlcnZpY2VzLnJ4RGV0YWlscy5zdGF0dXMhPW51bGwgJiYgY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cyE9JycgJiYgY29tbW9uU2VydmljZXMucnhEZXRhaWxzLnN0YXR1cy50b0xvd2VyQ2FzZSgpIT0nZHJhZnQnKX1cIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveCBuZXdfbW9iaWxlX3J4X3RvcF9ib3R0b21fMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94MlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cInJ4UHJpdmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZSgpXCIgdmFsdWU9XCJQcml2YXRlXCIgLz48c3BhbiBjbGFzcz1cIm1kbC1jaGVja2JveF9fbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7IGZvbnQtc2l6ZTogMTZweFwiPlByaXZhdGU8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTUtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTYtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoIG5ld19tb2JpbGVfcnhfdG9wX2JvdHRvbV8wXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9wYXNzZXRzLmhvbGEuaGVhbHRoL3J4LXdpZGdldHMvcngtbWltcy5wbmdcIiBhbHQ9XCJNSU1TIGxvZ29cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogODBweDsgaGVpZ2h0OiBhdXRvXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbFwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDhweDtcIiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYXZvdXJpdGVzLXRvZ2dsZS1saW5rXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgc2hvd0Zhdm91cnRpZXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBzaG93RmF2b3VyaXRlTWVkID8gJ0hpZGUgZmF2b3VyaXRlcycgOiAnU2hvdyBmYXZvdXJpdGVzJyB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IHBhZGRpbmc6IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS03LWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYmxlX2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl90aXRsZVwiIHN0eWxlPVwicGFkZGluZzogNXB4IDEwcHg7IG1hcmdpbjogMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFibGUgRm9ybXVsYXRpb25zOlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dGYXZvdXJpdGVNZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvbmNsaWNrTWVkaWNpbmVMb2FkZXJcIiBjbGFzcz1cImxvYWRlciBtLXY0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW9uY2xpY2tNZWRpY2luZUxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3QgPT0gbnVsbCB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkTWVkaWNpbmVMaXN0Lmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICAgICAgICAgIFwiIGNsYXNzPVwibm9EYXRhUHJlc2NyaWJlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Tm8gRGF0YTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXdfcnhfcG9wdXBfYm94X2NvbnRhaW5lclwiICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBtZWQgb2YgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRNZWRpY2luZUxpc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgaVxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1ncmlkIG5ld19yeF9wb3B1cF9ib3hcIiBbY2xhc3NdPVwiZ2V0Q2xhc3NGb3JNZWQobWVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Rm9ybXVsYXRpb24obWVkLCBpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0xMi1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfYm94X2hlYWRlclwiIFtpbm5lckhUTUxdPVwibWVkLnByb2R1Y3ROYW1lXCI+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9ib3hfdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiPlF1YW50aXR5OjwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bWVkLnBic1R5cGUhPXVuZGVmaW5lZCAmJiBtZWQucGJzVHlwZSE9bnVsbCAmJiBtZWQucGJzVHlwZS50b0xvd2VyQ2FzZSgpID09IFwibm9uIHBic1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG1lZC5udW1iZXJPZlBhY2sgKyBcInhcIiArIG1lZC51bml0UGVyUGFja1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtZWQubWF4UXR5VW5pdHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPjxzcGFuPjxiPlJwdHM6PC9iPiB7eyBtZWQucmVwZWF0cyB9fTwvc3Bhbj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0XCI+PGI+UmVzdHJpY3Rpb246PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ttZWQuUmVzdHJpY3Rpb25zIT11bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZC5SZXN0cmljdGlvbnMgIT0gbnVsbCAmJiBtZWQuUmVzdHJpY3Rpb25zICE9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWVkLnBic1R5cGUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgKFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFJlc3RyaWN0aW9ucyhtZWQuUmVzdHJpY3Rpb25zKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIikgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKG1lZC5wYnNUeXBlIT11bmRlZmluZWQmJm1lZC5wYnNUeXBlIT1udWxsP21lZC5wYnNUeXBlOlwiXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSA8L3NwYW4+PHNwYW4+PGI+R2VuZXJpYyBOYW1lOiA8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIm1lZC5nZW5lcmljTmFtZVwiPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIlNlY29uZGFyeVNlYXJjaFNwaW5uZXJcIiBjbGFzcz1cImxvYWRlciBtbC1sb2FkLTQ1XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0Zhdm91cml0ZU1lZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJvbmNsaWNrTWVkaWNpbmVMb2FkZXJcIiBjbGFzcz1cImxvYWRlciBtLXY0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW9uY2xpY2tNZWRpY2luZUxvYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuZmF2b3VyaXRlTWVkaWNpbmVMaXN0ID09IG51bGwgfHxcclxuICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5mYXZvdXJpdGVNZWRpY2luZUxpc3QubGVuZ3RoID09IDBcclxuICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJub0RhdGFQcmVzY3JpYmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5ObyBGYXZvdXJpdGVzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5ld19yeF9wb3B1cF9ib3hfY29udGFpbmVyXCIgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1lZCBvZiBjb21tb25TZXJ2aWNlcy5mYXZvdXJpdGVNZWRpY2luZUxpc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggYXMgaVxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1ncmlkIG5ld19yeF9wb3B1cF9ib3hcIiBbY2xhc3NdPVwiZ2V0Q2xhc3NGb3JGYXZvdXJpdGVNZWQobWVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmF2b3VyaXRlTWVkaWNpbmVMb2FkaW5nKG1lZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMTItY29sIG1kbC1jZWxsLS04LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2JveF9oZWFkZXJcIiBbaW5uZXJIVE1MXT1cIm1lZC5wcm9kdWN0TmFtZVwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfYm94X3RleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48Yj5RdWFudGl0eTo8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21lZC5xdWFudGl0eX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjxzcGFuPjxiPlJwdHM6PC9iPiB7eyBtZWQucmVwZWF0cyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3RcIj48Yj5SZXN0cmljdGlvbjo8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e21lZC5yZXN0cmljdGlvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjxzcGFuPjxiPkdlbmVyaWMgTmFtZTogPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJtZWQuZ2VuZXJpY05hbWVcIj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJTZWNvbmRhcnlTZWFyY2hTcGlubmVyXCIgY2xhc3M9XCJsb2FkZXIgbWwtbG9hZC00NVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmF2TWVkaWNpbmVMb2FkZXJcIiBjbGFzcz1cImxvYWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFmYXZNZWRpY2luZUxvYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTUtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZCBuZXdfcnhfcG9wdXBfdGFiXzFfZ3JpZCBuZXdfcnhfcG9wdXBfdGFiXzFfYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tNi1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl90aXRsZVwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogNXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGwmJmNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJvZHVjdE5hbWUhPXVuZGVmaW5lZCAmJiBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lIT1udWxsPyBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByb2R1Y3ROYW1lOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tNi1jb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyaWMgTmFtZTo8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiAhPSBudWxsJiZjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLmdlbmVyaWNOYW1lIT11bmRlZmluZWQgJiYgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSE9bnVsbD8gY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5nZW5lcmljTmFtZSA6ICcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMTItY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiICpuZ0lmPVwiY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmQgTmFtZTo8c3BhbiBbaW5uZXJIVE1MXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0QnJhbmROYW1lKGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVkdWxlOjxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvbiAhPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCAmJiBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBvaXNvbkNsYXNzaWZpY2F0aW9uIT1udWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5wb2lzb25DbGFzc2VzIT11bmRlZmluZWQgJiYgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5wb2lzb25DbGFzc2VzIT1udWxsICYmIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucG9pc29uQ2xhc3NpZmljYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAucG9pc29uQ2xhc3Nlcy5sZW5ndGg+MFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wb2lzb25DbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5wb2lzb25DbGFzc2VzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIk5vIFNjaGVkdWxlZCBJbmZvcm1hdGlvbiBBdmFpbGFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUEJTIExpc3Rpbmc6PHNwYW4+e3tjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic1R5cGUhPXVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZSE9bnVsbD8gY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnJyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlIT11bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnBic0NvZGUhPW51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiIChcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNDb2RlICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW46MHB4IDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBNYXggUXVhbnRpdHkgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0TWF4UXVhbnRpdHkoKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIFJlcGVhdHMgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbD8gY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOlwiXCJ9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiAhPSBudWxsICYmIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucHJlZ25hbmN5Q2F0ZWdvcnkhPXVuZGVmaW5lZCAmJiBcclxuICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByZWduYW5jeUNhdGVnb3J5ICE9IG51bGwgJiYgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcmVnbmFuY3lDYXRlZ29yeVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYXRlZ29yeUNvZGUhPXVuZGVmaW5lZCAmJiBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByZWduYW5jeUNhdGVnb3J5XHJcbiAgICAgICAgICAgICAgICAgICAgLmNhdGVnb3J5Q29kZSE9bnVsbFxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUHJlZ25hbmN5IENhdGVnb3J5OjxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcmVnbmFuY3lDYXRlZ29yeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRlZ29yeUNvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wcmVnbmFuY3lDYXRlZ29yeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkaXRpb25hbE5vdGUgIT11bmRlZmluZWQgJiYgXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByZWduYW5jeUNhdGVnb3J5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRpdGlvbmFsTm90ZSAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnByZWduYW5jeUNhdGVnb3J5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRpdGlvbmFsTm90ZSAhPSAnJ1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxOb3RlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnByZWduYW5jeUNhdGVnb3J5LmFkZGl0aW9uYWxOb3RlXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIiBbaW5uZXJIVE1MXT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbFwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93UmVzdHJpY3Rpb25zID09IHRydWUgJiYgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMhPXVuZGVmaW5lZCAmJiBcclxuICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnMgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucyAhPSAnJ1xyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlJlc3RyaWN0aW9uczo8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8b2wgc3R5bGU9XCJtYXJnaW46IDBweDsgcGFkZGluZy1sZWZ0OiAxNXB4XCIgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucyE9dW5kZWZpbmVkICYmIFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucyAhPSAnJ1xyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibmV3X3J4X3BvcF9hdXRfaW50XCIgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdHJpY3Rpb24gb2YgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuUmVzdHJpY3Rpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcclxuICAgICAgICAgICAgICAgICAgICAgIFwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uUHJldmlldyAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uUHJldmlldyAhPSAnJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblRleHQgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblRleHQgIT0gJydcclxuICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyeF9yZXN0cmljdGlvblRleHRcIiAqbmdJZj1cInJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVGV4dC5sZW5ndGggPCA2MFwiPjxiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UeXBlIH19PC9iPiAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmh0bWxUb0Zvcm1hdHRlZFRleHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uUHJldmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJ4X3Jlc3RyaWN0aW9uVGV4dFwiICpuZ0lmPVwicmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UZXh0Lmxlbmd0aCA+IDYwXCI+PGI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblR5cGUgfX08L2I+IC1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbFRvRm9ybWF0dGVkVGV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25QcmV2aWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnN1YnN0cmluZygwLCA2MClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIj48L3NwYW4+Li4uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBjb2xvcjogI2ZmOTk3OFwiIGlkPVwic2hvdy10b29sdGlwLWlkXCI+U2hvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9yZTwvYT48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0b29sdGlwZGVtbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJyeF90b29sdGlwX2lubmVyX2JveFwiIFtpbm5lckhUTUxdPVwicmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UZXh0XCI+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L29sPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzNfc21hbGxfYm94XCIgW3N0eWxlLmRpc3BsYXldPVwiaXNDdXJyZW50TWVkaWNpbmVJbkZhdm91cml0ZXMoKSA/ICdpbmxpbmUtZmxleCcgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJpc0N1cnJlbnRNZWRpY2luZUluRmF2b3VyaXRlcygpID8gJ21heC1jb250ZW50JyA6IG51bGxcIiAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24gIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OiAxMHB4O1wiIGNsYXNzPVwibmV3X3J4X3BvcHVwX2hlYWRlcl9ib3hfY29sXCIgKm5nSWY9XCIhY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uICE9IG51bGxcIiAoY2xpY2spPVwiYWRkVG9GYXZvdXJpdGVzKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWJ1dHRvbiBtZGwtanMtYnV0dG9uIG1kbC1idXR0b24tLXJhaXNlZCBtZGwtYnV0dG9uLS1jb2xvcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uZXh0QnV0dG9uXT1cIiFpc0N1cnJlbnRNZWRpY2luZUluRmF2b3VyaXRlcygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ybWZhdmJ1dHRvbl09XCJpc0N1cnJlbnRNZWRpY2luZUluRmF2b3VyaXRlcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNDdXJyZW50TWVkaWNpbmVJbkZhdm91cml0ZXMoKTsgZWxzZSBhZGRUZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlIGZyb20gZmF2b3VyaXRlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWRkVGV4dD4rIEFkZCB0byBmYXZvdXJpdGVzPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IG1hcmdpbi1yaWdodDogMTBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5RdWFudGl0eTogPC9zcGFuPjxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIiBuYW1lPVwicXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJcIiBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfaW5wdXRcIiBzdGVwPVwiMVwiIFttaW5dPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWxcIiAoa2V5cHJlc3MpPVwiY2hlY2tNb2JpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJxdWFudGl0eUNoYW5nZSgpXCIgKHBhc3RlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlJlcGVhdHM6IDwvc3Bhbj48aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWUgfHwgY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJycHRzXCIgcGxhY2Vob2xkZXI9XCJcIiBbbWluXT1cIjBcIiAoaW5wdXQpPVwicmVwZWF0c0NoYW5nZSgpXCIgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsXCIgKHBhc3RlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImNoZWNrTW9iaWxlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gfHwgY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1ncmlkXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcGFkZGluZzogMHB4XCJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7IGRpc2FibGVkUnhDb250ZW50OiBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0xMi1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRG9zZTpcclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9uZXdfcG9wdXBfY2hlY2tib3hcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZGwtY2hlY2tib3ggbWRsLWpzLWNoZWNrYm94IG1kbC1qcy1yaXBwbGUtZWZmZWN0XCI+PGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWVcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjaGVja2JveDFcIiBjbGFzcz1cIm1kbC1jaGVja2JveF9faW5wdXQgcnhfbmV3X2dyb3VwX2NoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMudW5Vc3VhbERvc2VGbGFnXCIgLz48c3BhbiBjbGFzcz1cIm1kbC1jaGVja2JveF9fbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDogNDAwO2ZvbnQtc2l6ZTogMTZweDttYXJnaW4tdG9wOiAtN3B4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydkaXNhYmxlZC1zdHlsZSc6IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPT0gdHJ1ZSB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIj5VbnVzdWFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3NlPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwibWRsLXRleHRmaWVsZF9faW5wdXQgbmV3X3J4X3BvcHVwX3RhYl9pbnB1dFwiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCIgaWQ9XCJzZWxlY3RlZGRvc2VcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBEb3NlXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLmRvc2VTZWFyY2hWYWx1ZVwiIChjbGljayk9XCJkb3NlRHJvcGRvd24oKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgI0Rvc2VEcm9wZG93biBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfZHJvcGRvd25fbGlzdF9ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7IE1fbGlzdF9ib3hfc2hvdzogc2VsZWN0RG9zZURyb3Bkb3duID09PSB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzFfbGlzdCByeF9kcm9wZG93blwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cInNlbGVjdERvc2VWYWx1ZShudWxsKVwiIGNsYXNzPVwicC0xMlwiPiA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkb3NlIG9mIGRvc2VEYXRhXCIgKGNsaWNrKT1cInNlbGVjdERvc2VWYWx1ZShkb3NlKVwiIFtjbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2hsaWdodDogZG9zZVsndGV4dCddID09IGNvbW1vblNlcnZpY2VzLmRvc2VTZWFyY2hWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRvc2VbXCJ0ZXh0XCJdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5GcmVxdWVuY3k6PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJtZGwtdGV4dGZpZWxkX19pbnB1dCBuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIiBpZD1cInNlbGVjdGVkRnJlcXVlbmN5OlwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgRnJlcXVlbmN5XCIgcmVhZE9ubHkgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5mcmVxU2VhcmNoVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmcmVxRHJvcGRvd24oKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgI0ZyZXFEcm9wZG93biBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfZHJvcGRvd25fbGlzdF9ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7IE1fbGlzdF9ib3hfc2hvdzogc2VsZWN0RnJlcURyb3Bkb3duID09PSB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzFfbGlzdCByeF9kcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJzZWxlY3RGcmVxdWVuY3lWYWx1ZShudWxsKVwiIGNsYXNzPVwicC0xMlwiPiA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBmcmVxdWVuY3kgb2YgZnJlcXVlbmN5RGF0YVwiIChjbGljayk9XCJzZWxlY3RGcmVxdWVuY3lWYWx1ZShmcmVxdWVuY3kpXCIgW2NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaGxpZ2h0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5Wyd0ZXh0J10gPT0gY29tbW9uU2VydmljZXMuZnJlcVNlYXJjaFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZnJlcXVlbmN5W1widGV4dFwiXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+Rm9vZDo8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cIm1kbC10ZXh0ZmllbGRfX2lucHV0IG5ld19yeF9wb3B1cF90YWJfaW5wdXRcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiIGlkPVwic2VsZWN0ZWRGcmVxdWVuY3k6XCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBGb29kXCIgcmVhZE9ubHkgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5mb29kU2VhcmNoVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb29kRHJvcGRvd24oKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgI0Zvb2REcm9wZG93biBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfZHJvcGRvd25fbGlzdF9ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7IE1fbGlzdF9ib3hfc2hvdzogc2VsZWN0Rm9vZERyb3Bkb3duID09PSB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzFfbGlzdCByeF9kcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJzZWxlY3RGb29kVmFsdWUobnVsbClcIiBjbGFzcz1cInAtMTJcIj4gPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZm9vZCBvZiBmb29kRGF0YVwiIChjbGljayk9XCJzZWxlY3RGb29kVmFsdWUoZm9vZClcIiBbY2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdobGlnaHQ6IGZvb2RbJ3RleHQnXSA9PSBjb21tb25TZXJ2aWNlcy5mb29kU2VhcmNoVmFsdWVcclxuICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmb29kW1widGV4dFwiXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+SW5zdHJ1Y3Rpb246PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJtZGwtdGV4dGZpZWxkX19pbnB1dCBuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIiBpZD1cIkluc3RydWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBJbnN0cnVjdGlvblwiIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImluc3RydWN0aW9uRHJvcGRvd24oKVwiIChjaGFuZ2UpPVwiaW5zdHJ1Y3Rpb25PbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwiYWxwaGFSZXN0cmljdGlvbigkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAjSW5zdHJ1Y3Rpb25Ecm9wZG93biBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfZHJvcGRvd25fbGlzdF9ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7TV9saXN0X2JveF9zaG93OiBzZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duID09PSB0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfMV9saXN0IHJ4X2Ryb3Bkb3duXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RJbnN0cnVjdGlvbkRyb3Bkb3duTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cIkNoYW5nZUluc3RydWN0aW9uKG51bGwpXCIgY2xhc3M9XCJwLTEyXCI+IDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJpdGVtLmlkID09IGNvbW1vblNlcnZpY2VzLmNvbXBsZXhJZCAmJiBpdGVtLnRleHQgPT0gY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb25TZWFyY2hWYWx1ZSA/ICdoZWlnaGxpZ2h0JyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpbnN0cnVjdGlvbkRhdGE7IGluZGV4IGFzIGlcIiAoY2xpY2spPVwiQ2hhbmdlSW5zdHJ1Y3Rpb24oaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRleHQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0udXNlcmlkICE9PSAwXCIgY2xhc3M9XCJzcGFuX2ljb25cIiBzdHlsZT1cImZsb2F0OiByaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIHN0eWxlPVwicGFkZGluZzogNXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRJbnN0cnVjdGlvbihpdGVtLmlkLCBpdGVtKVwiPmNyZWF0ZTwvaT48aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTBweDsgcGFkZGluZzogNXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUluc3RydWN0aW9uKGl0ZW0uaWQpXCI+Y2xlYXI8L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJSWF9BRERfZHJvcGRvd25fYnRuXCIgKGNsaWNrKT1cImFkZE5ld0luc3RydWN0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICArIEFkZCBDb21wbGV4IEluc3RydWN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0SW5zdHJ1Y3Rpb25Ecm9wZG93bkxpc3QgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbXBsZXhfaW5zdHJ1Y3Rpb25fYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweDsgbWFyZ2luOiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV4IEluc3RydWN0aW9uOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5zdHJ1Y3Rpb25fZmllbGRfY2xyIG1kbC10ZXh0ZmllbGRfX2lucHV0IG5ld19yeF9wb3B1cF90YWJfaW5wdXQgXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJJbnN0cnVjdGlvblwiIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuSW5zdHJ1Y3Rpb250aWx0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBDb21wbGV4IEluc3RydWN0aW9uXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4OyBtYXJnaW46IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXggSW5zdHJ1Y3Rpb24gRGVzY3JpcHRpb246XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBhdXRvY29tcGxldGU9XCJvZmZcIiBuYW1lPVwiXCIgaWQ9XCJcIiByb3dzPVwiMlwiIG1heExlbmd0aD1cIjUwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBDb21wbGV4IEluc3RydWN0aW9uIERlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5zdHJ1Y3Rpb25fZmllbGRfY2xyIHctMTAwIG5ld19yeF9wb3B1cF90YWJfdGV4dGFyZWFcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJSWF9BRERfZHJvcGRvd25fYnRuXzFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFySW5zdHJ1Y3Rpb24oKVwiIGNsYXNzPVwicngtaW5zdHJ1Y3Rpb24tYnRuXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzYXZlSW5zdHJ1Y3Rpb24oKVwiIGNsYXNzPVwicngtaW5zdHJ1Y3Rpb24tYnRuXCI+U2F2ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5Sb3V0ZTo8L3A+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiBjbGFzcz1cIm1kbC10ZXh0ZmllbGRfX2lucHV0IG5ld19yeF9wb3B1cF90YWJfaW5wdXRcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiIGlkPVwic2VsZWN0ZWRSb3V0ZTpcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFJvdXRlXCIgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlXCIgbWF4bGVuZ3RoPVwiNTBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyb3V0ZURyb3Bkb3duKClcIiAoa2V5cHJlc3MpPVwiYWxwaGFSZXN0cmljdGlvbigkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAjUm91dGVEcm9wZG93biBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfZHJvcGRvd25fbGlzdF9ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7IE1fbGlzdF9ib3hfc2hvdzogc2VsZWN0Um91dGVEcm9wZG93biA9PT0gdHJ1ZSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDEwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwibWRsLXRleHRmaWVsZF9faW5wdXQgbmV3X3J4X3JvdXRlX19pbnB1dFwiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBbdmFsdWVdPVwicm91dGVEYXRhRmlsdGVyID8gcm91dGVEYXRhRmlsdGVyIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwicm91dGVGaWx0ZXIoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIG1kLTI0IG5ld19yeF9wb3B1cF90YWJfMV9pbnB1dF9zZWFyY2ggcngtc2VhcmNoLWljb25cIj5zZWFyY2g8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsICpuZ0lmPVwiZmlsdGVyUm91dGVJdGVtcyhyb3V0ZURhdGEsIHJvdXRlRGF0YUZpbHRlcikubGVuZ3RoICE9IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzFfbGlzdCByeF9kcm9wZG93biByeF9kcm9wZG93bl9yb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCByb3V0ZSBvZiBmaWx0ZXJSb3V0ZUl0ZW1zKHJvdXRlRGF0YSwgcm91dGVEYXRhRmlsdGVyKVxyXG4gICAgICAgICAgICAgICAgICBcIiAoY2xpY2spPVwic2VsZWN0Um91dGVzZWFyY1ZhbHVlKHJvdXRlKVwiIFtjbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2hsaWdodDpcclxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlWydyb3V0ZU5hbWUnXSA9PSBjb21tb25TZXJ2aWNlcy5yb3V0ZVNlYXJjaFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcm91dGVbXCJyb3V0ZU5hbWVcIl0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgKm5nSWY9XCJmaWx0ZXJSb3V0ZUl0ZW1zKHJvdXRlRGF0YSwgcm91dGVEYXRhRmlsdGVyKS5sZW5ndGggPT0gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfMV9saXN0IHJ4X2Ryb3Bkb3duIHJ4X2Ryb3Bkb3duX3JvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGk+bm8gZGF0YTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlBybyBSZSBOYXRhIFByZXNjcmlwdGlvbjo8L3A+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnhfbmV3X3BvcHVwX2NoZWNrYm94IG0tdC0zNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLnJ4UFJOXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiUFJOQ2hhbmdlKGNvbW1vblNlcnZpY2VzLnJ4UFJOKVwiIC8+PHNwYW4gY2xhc3M9XCJtZGwtY2hlY2tib3hfX2xhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDogNDAwOyBmb250LXNpemU6IDE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydkaXNhYmxlZC1zdHlsZSc6IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPT0gdHJ1ZSB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIj5Qcm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgUmUgTmF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQcmVzY3JpcHRpb248L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5QcmVzY3JpYmUgQXM6PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnhfbmV3X3BvcHVwX2NoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19yYWRpb2JveF9idXR0b24gcnhfcmFkaW9fb3ZlcmFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicnhfcmFkaW9fbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwibWRsLXJhZGlvX19idXR0b24gY3VzdG9tLXJhZGlvLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIlByZXNjcmliZUFzXCIgW3ZhbHVlXT1cIidQcml2YXRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTLnRvTG93ZXJDYXNlKCkgPT09ICdwcml2YXRlJ1wiIChjbGljayk9XCJwcml2YXRlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVNcIiAvPjxzcGFuIGNsYXNzPVwibWRsLXJhZGlvX19sYWJlbCByYWRpb190eHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2Rpc2FibGVkLXN0eWxlJzogY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9PSB0cnVlIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiPlByaXZhdGU8L3NwYW4+PC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyeF9yYWRpb19sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInJhZGlvXCIgY2hlY2tlZD1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtcmFkaW9fX2J1dHRvbiBkLWlubGluZSByYWRpbyBjdXN0b20tcmFkaW8tYnV0dG9uXCIgbmFtZT1cIlByZXNjcmliZUFzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiJ1BCUydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmVzY3JpYmVBU19QQlMgfHwgY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMudG9Mb3dlckNhc2UoKSA9PT0gJ3BicydcIiAoY2xpY2spPVwiUEJTKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVNcIiAvPjxzcGFuIGNsYXNzPVwibWRsLXJhZGlvX19sYWJlbCByYWRpb190eHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7ICdkaXNhYmxlZC1zdHlsZSc6IHByZXNjcmliZUFTX1BCUyA9PSB0cnVlfHwgY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIj5QQlM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicnhfcmFkaW9fbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJyYWRpb1wiIGNoZWNrZWQ9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLXJhZGlvX19idXR0b24gZC1pbmxpbmUgcmFkaW8gY3VzdG9tLXJhZGlvLWJ1dHRvblwiIG5hbWU9XCJQcmVzY3JpYmVBc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIidSUEJTJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInByZXNjcmliZUFTX1JQQlMgfHwgY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMudG9Mb3dlckNhc2UoKSA9PT0gJ3JwYnMnXCIgKGNsaWNrKT1cIlJQQlMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBU1wiIC8+PHNwYW4gY2xhc3M9XCJtZGwtcmFkaW9fX2xhYmVsIHJhZGlvX3R4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgJ2Rpc2FibGVkLXN0eWxlJzogcHJlc2NyaWJlQVNfUlBCUyA9PSB0cnVlfHwgY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIj5SUEJTPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9uZXdfcG9wdXBfY2hlY2tib3hcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiAhPSBudWxsICYmIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZSE9dW5kZWZpbmVkICYmIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucGJzVHlwZSE9bnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5wYnNUeXBlLnRvTG93ZXJDYXNlKCkgPT09ICdub24gcGJzJyAmJlxyXG4gICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuZHZhTnVtYmVyICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmR2YU51bWJlciAhPSAnJyAmJiBpc05vblBic0ZsYWcgPT0gZmFsc2UgJiYgIWlzUHJlc2NyaWJlQXNQcml2YXRlT25seVxyXG4gICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94XCIgY2xhc3M9XCJjaGVja19ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBXCIgKGNsaWNrKT1cInVubGlzdGVkUkEoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMudW5saXN0ZWRSQVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1kbC1jaGVja2JveF9fbGFiZWwgY2hlY2tfYm94X2xhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZGlzYWJsZWQtc3R5bGUnOiBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID09IHRydWUgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVubGlzdGVkIFJBXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgIE1fQ1RHX2JveF9oaWRlOiAhKFxyXG4gICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMgJiZcclxuICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnBhdGllbnRDdGdGbGFnID09IDAgJiZcclxuICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLnBhdGllbnRDdGdDb1BheW1lbnQgPT0gMCAmJlxyXG4gICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMudG9Mb3dlckNhc2UoKSA9PSAncGJzJ1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+Q1RHL1BCUyBDbyBQYXltZW50OjwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9uZXdfcG9wdXBfY2hlY2tib3ggbS10LTM2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWRsLWNoZWNrYm94IG1kbC1qcy1jaGVja2JveCBtZGwtanMtcmlwcGxlLWVmZmVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3gyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2lucHV0IHJ4X25ld19ncm91cF9jaGVja2JveFwiIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuQ1RHQ29QYXltZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY29tbW9uU2VydmljZXMuQ1RHQ29QYXltZW50ID09IHRydWVcIiAvPjxzcGFuIGNsYXNzPVwibWRsLWNoZWNrYm94X19sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDsgZm9udC1zaXplOiAxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZGlzYWJsZWQtc3R5bGUnOiBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID09IHRydWUgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCI+Q1RHL1BCU1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbyBQYXltZW50PC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1ncmlkXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcGFkZGluZzogMHB4XCJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7IGRpc2FibGVkUnhDb250ZW50OiBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlNjcmlwdCBEYXRlOjwvcD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwibWRsLXRleHRmaWVsZF9faW5wdXQgbmV3X3J4X3BvcHVwX3RhYl9pbnB1dFwiIHR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJSeFNjcmlwdERhdGVcIiBwbGFjZWhvbGRlcj1cIiAuLi8uLi8uLi4uXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5zY3JpcHREYXRlXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlN0YXJ0IERhdGU6PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJtZGwtdGV4dGZpZWxkX19pbnB1dCBuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCIgdHlwZT1cImRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCIgaWQ9XCJSeFN0YXJ0RGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIgLi4vLi4vLi4uLlwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuc3RhcnREYXRlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY29tbW9uU2VydmljZXMucnhFbmREYXRlQ2FsY3VsYXRlcigpXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPkVuZCBEYXRlOjwvcD5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwibWRsLXRleHRmaWVsZF9faW5wdXQgbmV3X3J4X3BvcHVwX3RhYl9pbnB1dFwiIHR5cGU9XCJkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiIGlkPVwiUnhFbmREYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi4uLy4uLy4uLi5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLmVuZERhdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+RGF5cyBCZXR3ZWVuIFJlcGVhdHM6PC9wPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKHBhc3RlKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBEYXlzIEJldHdlZW4gUmVwZWF0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZXx8Y29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtdGV4dGZpZWxkX19pbnB1dCBuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCIgdHlwZT1cIm51bWJlclwiIGlkPVwiRGF5YmV0d2VlbnJlcGVhdHNcIiBbbWluXT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9ufHxjb21tb25TZXJ2aWNlcy5pc01lZGljaW5lUmVzdHJpY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWxcIiAoa2V5cHJlc3MpPVwiY2hlY2tNb2JpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cImRheXNjaGFuZ2UoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMy1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+UHVycG9zZTo8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIGNsYXNzPVwibWRsLXRleHRmaWVsZF9faW5wdXQgbmV3X3J4X3BvcHVwX3RhYl9pbnB1dFwiIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiIGlkPVwic2VsZWN0ZWRQdXJwb3NlOlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQdXJwb3NlXCIgcmVhZE9ubHkgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5wdXJwb3NlU2VhcmNoVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInB1cnBvc2VEcm9wZG93bigpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNQdXJwb3NlRHJvcGRvd24gY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiX2Ryb3Bkb3duX2xpc3RfYm94IG5ld19yeF9wb3B1cF90YWJfcHVycG9zZV9ib3ggaC0xNjBwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7IE1fbGlzdF9ib3hfc2hvdzogc2VsZWN0UHVycG9zZURyb3Bkb3duID09PSB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5ld19yeF9wb3B1cF90YWJfMV9saXN0IHJ4X2Ryb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAoY2xpY2spPVwic2VsZWN0UHVycG9zZVZhbHVlKG51bGwpXCIgY2xhc3M9XCJwLTEyXCI+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBwdXJwb3NlIG9mIHB1cnBvc2VEYXRhXCIgKGNsaWNrKT1cInNlbGVjdFB1cnBvc2VWYWx1ZShwdXJwb3NlKVwiIFtjbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaGxpZ2h0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXJwb3NlWydsb29rdXBUZXh0J10gPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucHVycG9zZVNlYXJjaFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHB1cnBvc2VbXCJsb29rdXBUZXh0XCJdIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7IE1fQ1RHX2JveF9oaWRlOiBjb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSAhPSB0cnVlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlN1YnN0aXR1dGlvbjo8L3A+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnhfbmV3X3BvcHVwX2NoZWNrYm94IG0tdC0zNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZSB8fCBjb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSA9PSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLkJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidGhpcy5icmFuZFN1YnN0aXR1dGVzTm90QWxsb3coY29tbW9uU2VydmljZXMuQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93KVwiIFtjaGVja2VkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLkJyYW5kU3Vic3RpdHV0ZXNOb3RBbGxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgPyBjb21tb25TZXJ2aWNlcy5CcmFuZFN1YnN0aXR1dGVzTm90QWxsb3dcclxuICAgICAgICAgICAgICAgICAgICAgIDogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgXCIgLz48c3BhbiBjbGFzcz1cIm1kbC1jaGVja2JveF9fbGFiZWxcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7IGZvbnQtc2l6ZTogMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2Rpc2FibGVkLXN0eWxlJzogY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9PSB0cnVlIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiPkJyYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFN1YnN0aXR1dGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBOb3QgUGVybWl0dGVkPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgTV9DVEdfYm94X2hpZGVfYnJhbmQ6IGNvbW1vblNlcnZpY2VzLmxlbWkgPT0gdHJ1ZSB9XCIgaWQ9XCJicmFuZG5hbWV0b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaGlkZVRvb2xUaXAoKVwiIChtb3VzZWVudGVyKT1cInNob3d0b29sdGlwKGNvbW1vblNlcnZpY2VzLmxlbWksYnJhbmR0b29sdGlwKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+QnJhbmQgTmFtZTo8L3A+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JyYW5kdG9vbHRpcD48c3BhbiBjbGFzcz1cImluY2x1ZGVfYnJhbmRfdG9vbHRpcFwiPlRoZSBzZWxlY3RlZCBwcm9kdWN0IGlzIExFTUlcclxuICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZWQuIFRoZXJlZm9yZSBpdCBtYXkgYmVcclxuICAgICAgICAgICAgICAgICAgICAgIHByZXNjcmliZWQgYnkgdGhlIGJyYW5kIG5hbWUgb25seS48L3NwYW4+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X25ld19wb3B1cF9jaGVja2JveCBtLXQtMzZcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJtZGwtY2hlY2tib3ggbWRsLWpzLWNoZWNrYm94IG1kbC1qcy1yaXBwbGUtZWZmZWN0XCIgW2NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgTV9DVEdfYm94X2hpZGVfYnJhbmRfbmFtZTogY29tbW9uU2VydmljZXMubGVtaSA9PSB0cnVlIHx8IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPT0gdHJ1ZSB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3gyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2lucHV0IHJ4X25ld19ncm91cF9jaGVja2JveFwiIFtjaGVja2VkXT1cImNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidGhpcy5pc0NoYW5nZUJyYW5kTmFtZShjb21tb25TZXJ2aWNlcy5pc0JyYW5kTmFtZSlcIiAvPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19sYWJlbFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDsgZm9udC1zaXplOiAxNnB4XCI+SW5jbHVkZSBCcmFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBOYW1lPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5SZWd1bGF0aW9uIDI0OjwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9uZXdfcG9wdXBfY2hlY2tib3ggbS10LTM2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWRsLWNoZWNrYm94IG1kbC1qcy1jaGVja2JveCBtZGwtanMtcmlwcGxlLWVmZmVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3gyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2lucHV0IHJ4X25ld19ncm91cF9jaGVja2JveFwiIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMucmVndWxhdGlvbjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY29tbW9uU2VydmljZXMucmVndWxhdGlvbjI0XCIgLz48c3BhbiBjbGFzcz1cIm1kbC1jaGVja2JveF9fbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7IGZvbnQtc2l6ZTogMTZweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2Rpc2FibGVkLXN0eWxlJzogY29tbW9uU2VydmljZXMuaXNGZXRjaGluZyA9PSB0cnVlIHx8IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiPlJlZ3VsYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgMjQ8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcHhcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgZGlzYWJsZWRSeENvbnRlbnQ6IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmd9XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTMtY29sIG1kbC1jZWxsLS00LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5ETyBOT1Qgc2VuZCB0byBNeVNMOjwvcD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyeF9uZXdfcG9wdXBfY2hlY2tib3ggbS10LTM2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWRsLWNoZWNrYm94IG1kbC1qcy1jaGVja2JveCBtZGwtanMtcmlwcGxlLWVmZmVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3gyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2hlY2tib3hfX2lucHV0IHJ4X25ld19ncm91cF9jaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMubXlTTENvbnNlbnRcIiAvPjxzcGFuIGNsYXNzPVwibWRsLWNoZWNrYm94X19sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDsgZm9udC1zaXplOiAxNnB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZGlzYWJsZWQtc3R5bGUnOiBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID09IHRydWUgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCI+RE9cclxuICAgICAgICAgICAgICAgICAgICAgICAgTk9UIHNlbmQgdG8gTXlTTDwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBQaGFybWFjeTogLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnhfbmV3X3BvcHVwX2NoZWNrYm94XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibWRsLWNoZWNrYm94IG1kbC1qcy1jaGVja2JveCBtZGwtanMtcmlwcGxlLWVmZmVjdFwiPjxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlXCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVwiIChjaGFuZ2UpPVwic2VuZFRvUGhhcm1hY3lDaGFuZ2UoKVwiIC8+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19sYWJlbFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDQwMDtmb250LXNpemU6IDE2cHg7bWFyZ2luLXRvcDogLTdweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZGlzYWJsZWQtc3R5bGUnOiBjb21tb25TZXJ2aWNlcy5pc0ZldGNoaW5nID09IHRydWUgfHwgY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCI+U2VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gUGhhcm1hY3k8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJtZGwtdGV4dGZpZWxkX19pbnB1dCBuZXdfcnhfcG9wdXBfdGFiX2lucHV0XCIgdHlwZT1cInRleHRcIiByZWFkb25seVxyXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIiBpZD1cInNlbGVjdGVkZG9zZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLnNlbmRUb1BoYXJtYWN5VmFsdWVcIiAoY2xpY2spPVwic3RwVmFsdWVEcm9wZG93bigpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieyBNX0NUR19ib3hfaGlkZTogY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3kgIT0gdHJ1ZSB9XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAjc3RwRHJvcGRvd24gY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiX2Ryb3Bkb3duX2xpc3RfYm94IG5ld19yeF9wb3B1cF90YWJfc3RwX2JveCBoLTkzcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsgTV9saXN0X2JveF9zaG93OiBzZWxlY3RzdHBEcm9wZG93biA9PT0gdHJ1ZSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl8xX2xpc3QgcnhfZHJvcGRvd25cIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpIChjbGljayk9XCJzZWxlY3RTdHBWYWx1ZShudWxsKVwiIGNsYXNzPVwicC0xMlwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHNlbmR0b3BoYXJtYWN5IG9mIHNlbmR0b3BoYXJtYWN5RGF0YVwiIChjbGljayk9XCJzZWxlY3RTdHBWYWx1ZShzZW5kdG9waGFybWFjeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2VuZHRvcGhhcm1hY3kubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0zLWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+RW1lcmdlbmN5IFN1cHBseTo8L3A+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnhfbmV3X3BvcHVwX2NoZWNrYm94IG0tdC0zNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cIm1kbC1jaGVja2JveCBtZGwtanMtY2hlY2tib3ggbWRsLWpzLXJpcHBsZS1lZmZlY3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiY2hlY2tib3hcIiBpZD1cImNoZWNrYm94MlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRsLWNoZWNrYm94X19pbnB1dCByeF9uZXdfZ3JvdXBfY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLmVtZXJnZW5jeVN1cHBseVwiIC8+PHNwYW4gY2xhc3M9XCJtZGwtY2hlY2tib3hfX2xhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDogNDAwOyBmb250LXNpemU6IDE2cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydkaXNhYmxlZC1zdHlsZSc6IGNvbW1vblNlcnZpY2VzLmlzRmV0Y2hpbmcgPT0gdHJ1ZSB8fCBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIj5FbWVyZ2VuY3lcclxuICAgICAgICAgICAgICAgICAgICAgICAgU3VwcGx5PC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFnZSA9PSAyXCIgY2xhc3M9XCJuZXdfcnhfcG9wdXBfdGFiXzJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcHg7IG9wYWNpdHk6IDFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tNi1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmUgbmV3X3J4X21vYmlsZV9mdWxsd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcHhcIiBjbGFzcz1cIm1kbC1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0xMi1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZCBuZXdfcnhfcG9wdXBfdGFiXzFfZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+Ulg8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgW2lubmVySFRNTF09XCJjb21tb25TZXJ2aWNlcy5yeERpc3BsYXlOYW1lXCI+PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCIgc3R5bGU9XCJtYXJnaW46IDBweFwiPlF1YW50aXR5OiA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiByZ2IoNDUsIDQ1LCA0NSk7IGZvbnQtd2VpZ2h0OiA2MDBcIj57eyBjb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPiBSZXBlYXRzOiA8c3BhbiBzdHlsZT1cImNvbG9yOiByZ2IoNDUsIDQ1LCA0NSk7IGZvbnQtd2VpZ2h0OiA2MDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCB9fTwvc3Bhbj4gRGVmYXVsdCBRdWFudGl0eTp7e2dldERlZmF1bHRRdWFudGl0eSgpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgUmVwZWF0czpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbCYmY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzIT1udWxsP2NvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0czpcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdJZj1cImNvbW1vblNlcnZpY2VzLmRvc2VTZWFyY2hWYWx1ZSAhPSAnJyB8fGNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZSAhPSAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb21tb25TZXJ2aWNlcy5kb3NlU2VhcmNoVmFsdWUgfX0gPC9zcGFuPjxzcGFuPnt7IGNvbW1vblNlcnZpY2VzLmZyZXFTZWFyY2hWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5mb29kU2VhcmNoVmFsdWUgIT0gJydcIiBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21tb25TZXJ2aWNlcy5mb29kU2VhcmNoVmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tJbnN0cnVjdGlvbkRlc2NyaXB0aW9uICE9XCJcIiAmJiBJbnN0cnVjdGlvbkRlc2NyaXB0aW9uIT1udWxsP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb25EZXNjcmlwdGlvbjpjb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlIT1cIlwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5JbnN0cnVjdGlvblNlYXJjaFZhbHVlIT1udWxsP2NvbW1vblNlcnZpY2VzLkluc3RydWN0aW9uU2VhcmNoVmFsdWU6XCJcIn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiY29tbW9uU2VydmljZXMucm91dGVTZWFyY2hWYWx1ZSAhPSAnJ1wiIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbW1vblNlcnZpY2VzLnJvdXRlU2VhcmNoVmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUC5SLk4gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5yeFBSTlwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaWNvbi1kb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogIzAwNzdiNlwiPmNoZWNrPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29tbW9uU2VydmljZXMucnhQUk5cIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+RGF5cyBCZXR3ZWVuIFJlcGVhdHM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGNvbW1vblNlcnZpY2VzLmRheXNCdG5SZXBlYXRzVmFsKVwiPnt7Y29tbW9uU2VydmljZXMuZGF5c0J0blJlcGVhdHNWYWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShjb21tb25TZXJ2aWNlcy5kYXlzQnRuUmVwZWF0c1ZhbClcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbnVzdWFsIERvc2U6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnVuVXN1YWxEb3NlRmxhZ1wiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaWNvbi1kb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogIzAwNzdiNlwiPmNoZWNrPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29tbW9uU2VydmljZXMudW5Vc3VhbERvc2VGbGFnXCI+LTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfcFwiPlNjcmlwdCBEYXRlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3t0aGlzLmNvbW1vblNlcnZpY2VzLnNjcmlwdERhdGV8ZGF0ZTonZGQtTU0teXl5eSd9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5TdGFydCBEYXRlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3t0aGlzLmNvbW1vblNlcnZpY2VzLnN0YXJ0RGF0ZXxkYXRlOidkZC1NTS15eXl5J319PC9zcGFuPiwgRW5kIERhdGU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RoaXMuY29tbW9uU2VydmljZXMuZW5kRGF0ZXxkYXRlOidkZC1NTS15eXl5J319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5QcmVzY3JpYmUgQXM6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5Jc051bGxPckVtcHR5KGNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTKVwiPnt7Y29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29tbW9uU2VydmljZXMuSXNOdWxsT3JFbXB0eShjb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUylcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+UHVycG9zZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoY29tbW9uU2VydmljZXMucHVycG9zZVNlYXJjaFZhbHVlKVwiPnt7Y29tbW9uU2VydmljZXMucHVycG9zZVNlYXJjaFZhbHVlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoY29tbW9uU2VydmljZXMucHVycG9zZVNlYXJjaFZhbHVlKVwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGUgQnJhbmQgTmFtZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29tbW9uU2VydmljZXMuaXNCcmFuZE5hbWVcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGljb24tZG9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICMwMDc3YjZcIj5jaGVjazwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbW1vblNlcnZpY2VzLmlzQnJhbmROYW1lXCI+LTwvc3Bhbj4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuZCBTdWJzdGl0dXRpb24gTm90IFBlcm1pdHRlZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29tbW9uU2VydmljZXMuQnJhbmRTdWJzdGl0dXRlc05vdEFsbG93XCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBpY29uLWRvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjMDA3N2I2XCI+Y2hlY2s8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5CcmFuZFN1YnN0aXR1dGVzTm90QWxsb3dcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWd1bGF0aW9uIDI0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5yZWd1bGF0aW9uMjRcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGljb24tZG9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICMwMDc3YjZcIj5jaGVjazwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbW1vblNlcnZpY2VzLnJlZ3VsYXRpb24yNFwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3BcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENURy9QQlMgQ28gUGF5bWVudDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29tbW9uU2VydmljZXMuQ1RHQ29QYXltZW50XCIgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBpY29uLWRvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiAjMDA3N2I2XCI+Y2hlY2s8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb21tb25TZXJ2aWNlcy5DVEdDb1BheW1lbnRcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBETyBOT1Qgc2VuZCB0byBNeVNMOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5teVNMQ29uc2VudFwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaWNvbi1kb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogIzAwNzdiNlwiPmNoZWNrPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29tbW9uU2VydmljZXMubXlTTENvbnNlbnRcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZW5kIHRvIFBoYXJtYWN5OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5zZW5kVG9QaGFybWFjeVwiIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgaWNvbi1kb25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogIzAwNzdiNlwiPmNoZWNrPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3lcIj4tPC9zcGFuPiwgU2VuZCB0byBQaGFybWFjeSBWYWx1ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IWNvbW1vblNlcnZpY2VzLklzTnVsbE9yRW1wdHkoY29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3lWYWx1ZSk/Y29tbW9uU2VydmljZXMuc2VuZFRvUGhhcm1hY3lWYWx1ZTonLSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWVyZ2VuY3kgU3VwcGx5OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb21tb25TZXJ2aWNlcy5lbWVyZ2VuY3lTdXBwbHlcIiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGljb24tZG9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6ICMwMDc3YjZcIj5jaGVjazwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbW1vblNlcnZpY2VzLmVtZXJnZW5jeVN1cHBseVwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1ncmlkXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcGFkZGluZzogMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0xMi1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+Tm90ZSBUbyBQaGFybWFjeTo8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgYXV0b2NvbXBsZXRlPVwib2ZmXCIgbmFtZT1cIlwiIGlkPVwiXCIgcm93cz1cIjNcIiBtYXhsZW5ndGg9XCI1MFwiIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInsnZWRpdC1kaXNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRoaXMuY29tbW9uU2VydmljZXMuZG9jdG9yTm90ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIG5ld19yeF9wb3B1cF90YWJfdGV4dGFyZWEgcngtbS13LTUzNXBcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5Bbm5vdGF0aW9uOjwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgYXV0b2NvbXBsZXRlPVwib2ZmXCIgbmFtZT1cIlwiIGlkPVwiXCIgcm93cz1cIjNcIiBtYXhsZW5ndGg9XCI1MDBcIiBwbGFjZWhvbGRlcj1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aGlzLmNvbW1vblNlcnZpY2VzLmFubm90YXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIG5ld19yeF9wb3B1cF90YWJfdGV4dGFyZWEgcngtbS13LTUzNXBcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5SZWFzb24gRm9yIFByZXNjcmlwdGlvbjo8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGF1dG9jb21wbGV0ZT1cIm9mZlwiIG5hbWU9XCJcIiBpZD1cIlwiIHJvd3M9XCIzXCIgbWF4bGVuZ3RoPVwiNTBcIiBwbGFjZWhvbGRlcj1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0aGlzLmNvbW1vblNlcnZpY2VzLnByZXNjcmlwdGlvblJlYXNvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgbmV3X3J4X3BvcHVwX3RhYl90ZXh0YXJlYSByeC1tLXctNTM1cFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tNi1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0aGlzLmdldFN0YXRlQXV0aG9yaXR5TGFiZWwoY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuc3RhdGUpfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjogMHB4O21hcmdpbi10b3A6IC04cHg7bWFyZ2luLWJvdHRvbTogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGF0ZS10eHQtY29sb3IgbmV3X3J4X3BvcHVwX2xhYmVsX3BcIj4oUmVsZXZhbnQgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5zdGF0ZSB9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImFwcHJvdmFsXCIgcGxhY2Vob2xkZXI9XCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl9pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMuU3RhdGVBdXRob3JpdHlOdW1iZXJcIiBtYXhsZW5ndGg9XCIyNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJhdXRob3JpdHlOb1ZhbGlkYXRpb24oJGV2ZW50KVwiIChuZ01vZGVsQ2hhbmdlKT1cImF1dGhvcml0eU5vQ2hhbmdlKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS02LWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZSBuZXdfcnhfbW9iaWxlX2Z1bGx3aWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7XHJcbiAgICAgICAgICAgICduZXdfcnhfbm9fYXV0aG9yaXR5Jzohc2hvd0F1dGhvcml0eUJveChcclxuICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uIT1udWxsPyBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9uczonJyxjb21tb25TZXJ2aWNlcy5QcmVzY3JpYmVBUyxjb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSxjb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBKVxyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHNob3dBdXRob3JpdHlCb3goXHJcbiAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24hPW51bGw/ICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9uczonJyxcclxuICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuUHJlc2NyaWJlQVMsXHJcbiAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnJ4QXV0aG9yaXR5LFxyXG4gICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy51bmxpc3RlZFJBXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDBweFwiIGNsYXNzPVwibWRsLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tOC1jb2wgbWRsLWNlbGwtLTYtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxfTmV3XCI+SE9UTElORTogPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsX3NwYW5cIj57e2NvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTID09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUlBCUyc/JzE4MDA1NTI1ODAnOicxODAwODg4MzMzJ319PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS00LWNvbCBtZGwtY2VsbC0tMi1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcGFzc2V0cy5ob2xhLmhlYWx0aC9yeC13aWRnZXRzL3J4LW1pbXMucG5nXCIgYWx0PVwiTUlNUyBsb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDgwcHg7IGhlaWdodDogYXV0b1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1ncmlkXCIgc3R5bGU9XCJwYWRkaW5nOiAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tNi1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzY3JpYmVyIE5hbWU6PHNwYW4+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnBhdGllbnREZXRhaWxzLmZpcnN0TmFtZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5wYXRpZW50RGV0YWlscy5sYXN0TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS02LWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFByZXNjcmliZXIgTnVtYmVyOjxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5waHlzaWNpYW5EZXRhaWxzLnByZXNjcmliZXJOdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tNi1jb2wgbWRsLWNlbGwtLTQtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRpZW50IE1lZGljYXJlIE51bWJlcjo8c3Bhbj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMubWVkaWNhcmVOdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMubWVkaWNhcmVOdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS02LWNvbCBtZGwtY2VsbC0tNC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml0eSBGb3JtIE5vOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5hdXRob3JpdHlGb3JtTm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29tbW9uU2VydmljZXMuYXV0aG9yaXR5Rm9ybU5vXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWdyaWRcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBwYWRkaW5nOiAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMTItY29sIG1kbC1jZWxsLS04LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lIG5ld19yeF9tb2JpbGVfZnVsbHdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+QXV0aG9yaXR5IEl0ZW06PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImF1dGhvcml0eV9pdGVtX3RleHRcIiBbaW5uZXJIVE1MXT1cImNvbW1vblNlcnZpY2VzLnJ4RGlzcGxheU5hbWVcIj48L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbF9wIG5ld19yeF9wb3B1cF90YWJfc21hbGxCb3hlc1wiIHN0eWxlPVwibWFyZ2luOiAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFudGl0eTo8c3BhbiBzdHlsZT1cImNvbG9yOiByZ2IoNDUsIDQ1LCA0NSk7IGZvbnQtd2VpZ2h0OiA2MDBcIj4ge3sgY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPiBSZXBlYXRzOjxzcGFuIHN0eWxlPVwiY29sb3I6IHJnYig0NSwgNDUsIDQ1KTsgZm9udC13ZWlnaHQ6IDYwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29tbW9uU2VydmljZXMucmVwZWF0c1ZhbCB9fTwvc3Bhbj4gRGVmYXVsdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFF1YW50aXR5Ont7Y29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbCYmY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0cyE9bnVsbD8oY29tbW9uU2VydmljZXMucXVhbnRpdHlXaXRoVW5pdEZsYWc/XCIxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeCBcIjpcIlwiKStjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzOlwiXCJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBlYXRzOnt7Y29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbCYmY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzIT1udWxsP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0czpcIlwifX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZGwtZ3JpZFwiIHN0eWxlPVwicGFkZGluZzogMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFBCUyBMaXN0ZWQgSW5kaWNhdGlvbiBBdXRob3JpdHk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIG5ld19yeF9wb3B1cF90YWJfdGV4dGFyZWFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogNzBweDsgbWF4LWhlaWdodDogMTUwcHg7IG92ZXJmbG93OiBhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIHN0eWxlPVwibWFyZ2luOiAwcHg7IHBhZGRpbmctbGVmdDogMTVweDtsaXN0LXN0eWxlOiBub25lO3BhZGRpbmc6IDBweDtcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd1Jlc3RyaWN0aW9ucyA9PSB0cnVlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24uUmVzdHJpY3Rpb25zICE9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLlJlc3RyaWN0aW9ucyAhPSAnJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgc3R5bGU9XCJmb250LXNpemU6IDEycHg7cGFkZGluZzogMHB4IDEwcHg7bWFyZ2luLWJvdHRvbTogMTBweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5ld19yeF9wb3BfYXV0X2ludCBjdXJzb3JcIiAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdHJpY3Rpb24gb2YgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAuUmVzdHJpY3Rpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IGFzIGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgW2NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcnhfcG9wX2F1dF9pbnNfc2VsZWN0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9uc0lkID09IGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwcHg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25QcmV2aWV3ICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uUHJldmlldyAhPSAnJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UZXh0ICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVGV4dCAhPSAnJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRpc2FibGUtZGF0YSc6IGNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uID09PSB0cnVlfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGlvbkF1dGhvcml0eShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24hPW51bGw/IGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ubWF4UXR5VW5pdHM6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24hPW51bGw/IGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24ucmVwZWF0czonJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnJlcGVhdHNWYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJ4X3Jlc3RyaWN0aW9uVGV4dFwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UZXh0Lmxlbmd0aCA8IDgwXCI+PGI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvbi5yZXN0cmljdGlvblR5cGUgfX08L2I+IC1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sVG9Gb3JtYXR0ZWRUZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25QcmV2aWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj48L3NwYW4+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJ4X3Jlc3RyaWN0aW9uVGV4dFwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVGV4dC5sZW5ndGggPiA4MFwiPjxiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGljYXRpb25BdXRob3JpdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24hPW51bGw/Y29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5tYXhRdHlVbml0czonJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMucXVhbnRpdHlWYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnNlbGVjdGVkRm9ybXVsYXRpb24hPW51bGw/Y29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5yZXBlYXRzOicnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5yZXBlYXRzVmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uLnJlc3RyaWN0aW9uVHlwZSB9fTwvYj4gLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGlvbkF1dGhvcml0eShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbD9jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLm1heFF0eVVuaXRzOicnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5xdWFudGl0eVZhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbD9jb21tb25TZXJ2aWNlcy5zZWxlY3RlZEZvcm11bGF0aW9uLnJlcGVhdHM6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLnJlcGVhdHNWYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgW2lubmVySFRNTF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sVG9Gb3JtYXR0ZWRUZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25QcmV2aWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zdWJzdHJpbmcoMCwgODApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPjwvc3Bhbj4uLi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IGNvbG9yOiAjZmY5OTc4XCIgaWQ9XCJzaG93LXRvb2x0aXAtaWRcIj5TaG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vcmU8L2E+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdG9vbHRpcGRlbW8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInJ4X3Rvb2x0aXBfaW5uZXJfYm94XCIgW2lubmVySFRNTF09XCJyZXN0cmljdGlvbi5yZXN0cmljdGlvblRleHRcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0xMi1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInBhZGRpbmc6IDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtZGwtY2VsbCBtZGwtY2VsbC0tMTItY29sIG1kbC1jZWxsLS04LWNvbC10YWJsZXQgbWRsLWNlbGwtLTQtY29sLXBob25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJuZXdfcnhfcG9wdXBfbGFiZWxcIj5QQlMgTm90ZXM6PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBhdXRvY29tcGxldGU9XCJvZmZcIiBuYW1lPVwiXCIgaWQ9XCJcIiByb3dzPVwiMlwiIG1heGxlbmd0aD1cIjUwMFwiIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZGlzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgbmV3X3J4X3BvcHVwX3RhYl90ZXh0YXJlYVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tb25TZXJ2aWNlcy5wYnNOb3Rlc1wiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kbC1jZWxsIG1kbC1jZWxsLS0xMi1jb2wgbWRsLWNlbGwtLTgtY29sLXRhYmxldCBtZGwtY2VsbC0tNC1jb2wtcGhvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm5ld19yeF9wb3B1cF9sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kaWNhdGlvbiBGb3IgVGhpcyBBdXRob3JpdHk6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBhdXRvY29tcGxldGU9XCJvZmZcIiBuYW1lPVwiXCIgaWQ9XCJcIiByb3dzPVwiMlwiIHBsYWNlaG9sZGVyPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJ7J2VkaXQtZHNhYmxlLWRhdGEnOiBjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvbiA9PT0gdHJ1ZX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbW1vblNlcnZpY2VzLmVkaXRQcmVzY3JpYmVkUHJlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbW9uU2VydmljZXMucGJzTGlzdEluc3RydWN0aW9uc1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIG5ld19yeF9wb3B1cF90YWJfdGV4dGFyZWEgcngtbS13LTEwMFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWRsLWNlbGwgbWRsLWNlbGwtLTEyLWNvbCBtZGwtY2VsbC0tOC1jb2wtdGFibGV0IG1kbC1jZWxsLS00LWNvbC1waG9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibmV3X3J4X3BvcHVwX2xhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXV0aG9yaXR5TGFiZWwoY29tbW9uU2VydmljZXMucGF0aWVudERldGFpbHMuc3RhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInRleHRcIiBuYW1lPVwiYXBwcm92YWxcIiBwbGFjZWhvbGRlcj1cIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwieydlZGl0LWRzYWJsZS1kYXRhJzogY29tbW9uU2VydmljZXMuZWRpdFByZXNjcmliZWRQcmVzY3JpcHRpb24gPT09IHRydWV9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21tb25TZXJ2aWNlcy5lZGl0UHJlc2NyaWJlZFByZXNjcmlwdGlvblwiIGNsYXNzPVwibmV3X3J4X3BvcHVwX3RhYl9pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1vblNlcnZpY2VzLmFwcHJvdmFsTm9cIiAobmdNb2RlbENoYW5nZSk9XCJvbklucHV0Y2hhbmdlQXBwcm92YWxObygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJhdXRob3JpdHlOb1ZhbGlkYXRpb24oJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAhc2hvd0F1dGhvcml0eUJveChcclxuICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbiE9bnVsbD8gY29tbW9uU2VydmljZXMuc2VsZWN0ZWRGb3JtdWxhdGlvbi5SZXN0cmljdGlvbnM6JycsXHJcbiAgICAgICAgICAgICAgICAgIGNvbW1vblNlcnZpY2VzLlByZXNjcmliZUFTLFxyXG4gICAgICAgICAgICAgICAgICBjb21tb25TZXJ2aWNlcy5yeEF1dGhvcml0eSxcclxuICAgICAgICAgICAgICAgICAgY29tbW9uU2VydmljZXMudW5saXN0ZWRSQVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCIgKm5nSWY9XCIhY29tbW9uU2VydmljZXMuaXNNZWRpY2luZVJlc3RyaWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcGFzc2V0cy5ob2xhLmhlYWx0aC9yeC13aWRnZXRzL3J4LW1pbXMucG5nXCIgYWx0PVwiTUlNUyBsb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogODBweDsgaGVpZ2h0OiBhdXRvXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiTm9fQXV0aG9yaXR5X2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHA+Tm8gQXV0aG9yaXR5IFJlcXVpcmVkPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJ4X2Zvb3RlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnhfZm9vdGVyX2JyYW5kXCI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtbC0xMFwiPjxzcGFuPkhvbGEgQ29uc3VsdCB8IDEuMCA8c3BhbiAqbmdJZj1cImNvbW1vblNlcnZpY2VzLnNhbmRib3hcIj58IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJ4X3N0YWdpbmdcIj5UaGlzIGlzIGEgc2FuZGJveCBlbnZpcm9ubWVudDwvc3Bhbj48L3NwYW4+PC9zcGFuPjwvcD5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cIm10LTE1cFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyeF9wb3B1cF9mb290ZXJfdGV4dFwiPsKpIDIwMjUgSG9sYSBIZWFsdGgsIGEgYnJhbmQgb2YgUGFja2FwaWxsIFB0eSBMdGQgfCB2XHJcbiAgICAgICAgICAgICAgICAgIDEuMS4wIHxcclxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImh0dHBzOi8vaG9sYS5oZWFsdGgvY29uc3VsdC10ZXJtc1wiIHRhcmdldD1cIl9ibGFua1wiPlRlcm1zPC9hPiB8XHJcbiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJodHRwczovL2hvbGEuaGVhbHRoL2NvbnN1bHQtcHJpdmFjeS1wb2xpY3lcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Qcml2YWN5IFBvbGljeTwvYT4gfFxyXG4gICAgICAgICAgICAgICAgICA8YSBocmVmPVwibWFpbHRvOnN1cHBvcnRAaG9sYS5oZWFsdGhcIiB0YXJnZXQ9XCJfYmxhbmtcIj5IZWxwPC9hPjwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==