jconsumer-shared 1.1.9 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +24 -24
  2. package/esm2022/lib/account-service.mjs +1 -1
  3. package/esm2022/lib/auth-service.mjs +1 -1
  4. package/esm2022/lib/booking-service.mjs +1 -1
  5. package/esm2022/lib/calendar/date-time/datetime-processor.service.mjs +1 -1
  6. package/esm2022/lib/common.service.mjs +1 -1
  7. package/esm2022/lib/confirm/confirm-box.component.mjs +3 -3
  8. package/esm2022/lib/confirm/confirm-box.module.mjs +1 -1
  9. package/esm2022/lib/consumer-service.mjs +9 -1
  10. package/esm2022/lib/currency-service.mjs +1 -1
  11. package/esm2022/lib/environment.service.mjs +1 -1
  12. package/esm2022/lib/error-message.module.mjs +1 -1
  13. package/esm2022/lib/error-message.service.mjs +1 -1
  14. package/esm2022/lib/file-service.mjs +1 -1
  15. package/esm2022/lib/form-message/field-error-display/field-error-display.component.mjs +3 -3
  16. package/esm2022/lib/form-message/form-message-display.module.mjs +1 -1
  17. package/esm2022/lib/form-message/form-message-display.service.mjs +1 -1
  18. package/esm2022/lib/form-message/form-success-display/form-success-display.component.mjs +3 -3
  19. package/esm2022/lib/group-storage.service.mjs +1 -1
  20. package/esm2022/lib/i8n.module.mjs +1 -1
  21. package/esm2022/lib/injector-resolver.mjs +1 -1
  22. package/esm2022/lib/j-gallery/j-gallery.component.mjs +3 -3
  23. package/esm2022/lib/j-gallery/j-gallery.module.mjs +1 -1
  24. package/esm2022/lib/j-gallery/j-gallery.service.mjs +1 -1
  25. package/esm2022/lib/local-storage.service.mjs +1 -1
  26. package/esm2022/lib/media-service.mjs +1 -1
  27. package/esm2022/lib/order.service.mjs +9 -1
  28. package/esm2022/lib/payment/modes/payment-modes.component.mjs +3 -3
  29. package/esm2022/lib/payment/modes/payment-modes.module.mjs +1 -1
  30. package/esm2022/lib/payment/payment.module.mjs +1 -1
  31. package/esm2022/lib/paytm.service.mjs +1 -1
  32. package/esm2022/lib/phone-input/phone-input.component.mjs +3 -3
  33. package/esm2022/lib/phone-input/phone-input.module.mjs +1 -1
  34. package/esm2022/lib/pipes/autolink/autolink.module.mjs +1 -1
  35. package/esm2022/lib/pipes/autolink/autolink.pipe.mjs +1 -1
  36. package/esm2022/lib/pipes/capitalize/capitalize.module.mjs +1 -1
  37. package/esm2022/lib/pipes/capitalize/capitalize.pipe.mjs +1 -1
  38. package/esm2022/lib/pipes/date-format/date-format.module.mjs +1 -1
  39. package/esm2022/lib/pipes/date-format/date-format.pipe.mjs +1 -1
  40. package/esm2022/lib/pipes/filter/filter.module.mjs +1 -1
  41. package/esm2022/lib/pipes/filter/filter.pipe.mjs +1 -1
  42. package/esm2022/lib/pipes/limit-to/limitTo.module.mjs +1 -1
  43. package/esm2022/lib/pipes/limit-to/limitTo.pipe.mjs +1 -1
  44. package/esm2022/lib/pipes/safe-html/safehtml.module.mjs +1 -1
  45. package/esm2022/lib/pipes/safe-html/safehtml.pipe.mjs +1 -1
  46. package/esm2022/lib/pipes/short-filename/short-file-name.module.mjs +1 -1
  47. package/esm2022/lib/pipes/short-filename/short-file-name.pipe.mjs +1 -1
  48. package/esm2022/lib/project-constants.mjs +1 -1
  49. package/esm2022/lib/project-messages.mjs +1 -1
  50. package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +3 -3
  51. package/esm2022/lib/questionaire/edit/questionnaire.module.mjs +1 -1
  52. package/esm2022/lib/questionaire/questionaire-service.mjs +1 -1
  53. package/esm2022/lib/razorpay.service.mjs +1 -1
  54. package/esm2022/lib/request-dialog/request-dialog.component.mjs +3 -3
  55. package/esm2022/lib/request-dialog/request-dialog.module.mjs +1 -1
  56. package/esm2022/lib/service-meta.mjs +1 -1
  57. package/esm2022/lib/session-storage.service.mjs +1 -1
  58. package/esm2022/lib/shared-account.guard.mjs +1 -1
  59. package/esm2022/lib/shared-account.resolver.mjs +1 -1
  60. package/esm2022/lib/shared.service.mjs +1 -1
  61. package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +3 -3
  62. package/esm2022/lib/showuploadfile/showuploadfile.module.mjs +1 -1
  63. package/esm2022/lib/skeleton/skeleton-loading.component.mjs +3 -3
  64. package/esm2022/lib/skeleton/skeleton-loading.module.mjs +1 -1
  65. package/esm2022/lib/spinner/loading-spinner.component.mjs +1 -1
  66. package/esm2022/lib/spinner/loading-spinner.module.mjs +1 -1
  67. package/esm2022/lib/storage.service.mjs +1 -1
  68. package/esm2022/lib/subscription.service.mjs +1 -1
  69. package/esm2022/lib/theme.service.mjs +1 -1
  70. package/esm2022/lib/timezone-converter.mjs +1 -1
  71. package/esm2022/lib/toast.service.mjs +1 -1
  72. package/esm2022/lib/twilio-service.mjs +1 -1
  73. package/esm2022/lib/utility/remote-loader.mjs +1 -1
  74. package/esm2022/lib/word-processor.service.mjs +1 -1
  75. package/esm2022/public-api.mjs +1 -1
  76. package/fesm2022/jconsumer-shared.mjs +36 -20
  77. package/fesm2022/jconsumer-shared.mjs.map +1 -1
  78. package/jconsumer-shared-1.2.0.tgz +0 -0
  79. package/lib/consumer-service.d.ts +2 -0
  80. package/lib/order.service.d.ts +2 -0
  81. package/package.json +1 -1
  82. package/jconsumer-shared-1.1.9.tgz +0 -0
@@ -1350,11 +1350,11 @@ export class QuestionnaireComponent {
1350
1350
  this.galleryService.open(this.image_list_popup, imageIndex);
1351
1351
  }
1352
1352
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionnaireComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.WordProcessor }, { token: i3.LocalStorageService }, { token: i4.DateTimeProcessor }, { token: i5.MatDialog }, { token: i6.FileService }, { token: i7.CommonService }, { token: i8.QuestionaireService }, { token: i9.ErrorMessagingService }, { token: i10.ToastService }, { token: i11.SharedService }, { token: i12.JGalleryService }, { token: i13.Location }], target: i0.ɵɵFactoryTarget.Component });
1353
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionnaireComponent, selector: "app-questionnaire", inputs: { questionnaireList: "questionnaireList", source: "source", accountId: "accountId", questionAnswers: "questionAnswers", customerDetails: "customerDetails", uuid: "uuid", type: "type", waitlistStatus: "waitlistStatus", orderStatus: "orderStatus", donationDetails: "donationDetails", service: "service", mode: "mode", tempType: "tempType", bookingType: "bookingType" }, outputs: { fileChanged: "fileChanged", returnAnswers: "returnAnswers" }, viewQueries: [{ propertyName: "file2", first: true, predicate: ["logofile1"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<section class=\"cons-inbox no-padding-small\" *ngIf=\"!showservice\">\r\n <div class=\"container consumer-dashhome p-0\" *ngIf=\"!type && source!='proLead'\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\" id=\"btnEdit\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consOrder' || source === 'paper' || source === 'consDonationDetails' || source === 'ivr')\">\r\n <div class=\"col-xl-12 force_center\" [class.p-0]=\"uuid\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"qnrsec\" *ngFor=\"let qnr of groupedQnr | keyvalue: asIsOrder\"\r\n [class.section-shadow]=\"getSectionCount() > 1\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"form-group card mgn-0\" *ngFor=\"let question of qnr.value\">\r\n <label class=\"col-12 quest\">{{getQuestion(question).label}}\r\n <i class=\"fa fa-plus-circle pull-right\" aria-hidden=\"true\"\r\n [class.addicon]=\"!buttonDisable && !disableInput()\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && !showDataGrid[getQuestion(question).labelName]\"\r\n (click)=\"!buttonDisable && !disableInput() && showDataGridAddSection(getQuestion(question), true)\"></i>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question))\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).mandatory\">*</span>\r\n <div class=\"form-level-settings\" *ngIf=\"getQuestion(question).hint\"\r\n [innerHTML]=\"getQuestion(question).hint | safeHtml\">\r\n </div>\r\n </label>\r\n <!-- for file upload -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'fileUpload'\">\r\n <mat-select multiple #deptsel [disabled]=\"buttonDisable || disableInput()\"\r\n *ngIf=\"getQuestion(question).filePropertie.maxNoOfFile > 1 && getQuestion(question).filePropertie.minNoOfFile !== getQuestion(question).filePropertie.maxNoOfFile\"\r\n [(ngModel)]=\"uploadFilesTemp[getQuestion(question).labelName]\" class=\"select-box\" placeholder=\"Select\">\r\n <mat-option *ngFor=\"let document of getQuestion(question).filePropertie.allowedDocuments\"\r\n [value]=\"document\" (click)=\"changeImageSelected(getQuestion(question), document)\">\r\n {{document}}</mat-option>\r\n </mat-select>\r\n <div class=\"col-lg-12 col-12 col-md-12 col-sm-12 p-0 mt-4\"\r\n *ngIf=\"getDocuments(getQuestion(question)) && getDocuments(getQuestion(question)).length > 0\">\r\n <div class=\"dropzone dropzone-default dropzone-primary dz-clickable\"\r\n [class.single-file]=\"getQuestion(question).filePropertie.allowedDocuments.length==1\"\r\n style=\"cursor: auto;\">\r\n <ng-container *ngFor=\"let doc of getDocuments(getQuestion(question))\">\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n *ngIf=\"getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dzimage pointer-cursor\" (click)=\"openAttachmentGallery(getQuestion(question), doc)\">\r\n <img alt=\"\" class=\"img_fit\" [src]=\"getImg(getQuestion(question), doc)\">\r\n </div>\r\n <input [disabled]=\"buttonDisable || disableInput()\" (blur)=\"onSubmit('inputChange');\"\r\n [(ngModel)]=\"comments[getQuestion(question).labelName + '=' + doc]\">\r\n <div class=\"gal_action\" *ngIf=\"!buttonDisable && !disableInput() && mode!=='read'\"\r\n (click)=\"changeImageSelected(getQuestion(question), doc)\">\r\n <i class=\"fa fa-times-circle\" aria-hidden=\"true\"></i>\r\n </div>\r\n </div>\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n (click)=\"logofile1.click()\" *ngIf=\"!getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dz-image pointer-cursor\">\r\n </div>\r\n <input #logofile1 type=\"file\" accept=\"/*;capture=camera\" style=\"display:none;\"\r\n [disabled]=\"buttonDisable || disableInput()\"\r\n (change)=\"filesSelected($event, getQuestion(question), doc)\">\r\n <div class=\"dz-error-mark\">\r\n <a class=\"btn btn-icon btn-light-success btn-circle mr-2\"><i\r\n class=\"text-dark-50 flaticon-upload\"></i></a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers > 1\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for radio -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers === 1\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked(value, getQuestion(question))\"\r\n (change)=\"booleanChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'plainText'\">\r\n <input *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter<=100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\" \r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\"\r\n class=\"form-control1 form-control-solid\" type=\"text\" [disabled]=\"buttonDisable || disableInput()\">\r\n <textarea rows=\"3\" *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter>100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\" [disabled]=\"buttonDisable || disableInput()\"\r\n class=\"form-control2 form-control-solid\"></textarea>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'number'\">\r\n <input [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [min]=\"getQuestion(question).numberPropertie.start\" [max]=\"getQuestion(question).numberPropertie.end\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"number\"\r\n (keypress)=\"isNumeric($event)\">\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 d-flex\" *ngIf=\"getQuestion(question).fieldDataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\" [(ngModel)]=\"answers[getQuestion(question).labelName]\"\r\n (dateChange)=\"onSubmit('inputChange')\" [disabled]=\"buttonDisable || disableInput()\"\r\n (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\"></mat-datepicker>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Datagrid -->\r\n <div class=\"table-responsive1\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && dataGridColumnsAnswerList[getQuestion(question).labelName] && dataGridColumnsAnswerList[getQuestion(question).labelName].length > 0\">\r\n <table class=\"table table-head-custom table-head-bg table-borderless table-vertical-center\">\r\n <thead>\r\n <th *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n {{column.columnId}}</th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let column of dataGridColumnsAnswerList[getQuestion(question).labelName];let i =index\">\r\n <td *ngFor=\"let data of column | keyvalue\">\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'date'\">\r\n {{data.value | date : newTimeDateFormat}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'bool'\">\r\n {{getBoolValue(data.value)}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'date' && getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'bool'\">\r\n {{data.value}}\r\n </div>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-pen\" (click)=\"editDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-trash\" (click)=\"deleteDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"gridSection\" *ngIf=\"showDataGrid[getQuestion(question).labelName]\">\r\n <div class=\"gridColumn\" *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n <label>{{column.label}}\r\n <span class=\"red\" *ngIf=\"column.mandatory\">*</span>\r\n </label>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'list'\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of column.listPropertie.values\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question), column)\"\r\n (change)=\"listChange($event, value, getQuestion(question), column)\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('yes', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'yes', getQuestion(question), column)\">\r\n <span></span>\r\n Yes\r\n </label>\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('no', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'no', getQuestion(question), column)\">\r\n <span></span>\r\n No\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'plainText'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"text\">\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'number'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" [min]=\"column.numberPropertie.start\"\r\n [max]=\"column.numberPropertie.end\" class=\"form-control1 form-control-solid\" type=\"number\">\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 d-flex\" *ngIf=\"column.dataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\"\r\n [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n <div class=\"act-btns\">\r\n <button type=\"button\" class=\"btn btn-light-primary font-weight-bold\" id=\"btnCancelQ\"\r\n (click)=\"cancelAddorUpdate(getQuestion(question))\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary font-weight-bold\" id=\"btnSaveQ\"\r\n (click)=\"saveDataGridColumn(getQuestion(question))\">Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-12 col-sm-12 col-lg-12 p-0 submit-pad\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && source!=='proLead' && (uuid || source === 'customer-details' || source === 'proDonation') && !disableInput()\">\r\n <button class=\"normal-btn\" mat-flat-button [class.spinner]=\"buttonDisable\" id=\"btnSubmit\"\r\n [class.spinner-darker-success]=\"buttonDisable\" [class.spinner-center]=\"buttonDisable\"\r\n (click)=\"!buttonDisable && onSubmit('submit')\" [disabled]=\"buttonDisable\"\r\n [class.disabled]=\"buttonDisable\">{{(type == 'qnr-link') ? 'Submit' : 'Update'}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n<section class=\"cons-inbox no-padding-small\" *ngIf=\"showservice\">\r\n <div class=\"container consumer-dashhome\" *ngIf=\"!type\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\" id=\"btnEditQNR\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consDonationDetails' )\">\r\n <div class=\"col-xl-12 force_center p-0\" [class.p-0]=\"uuid\"\r\n [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"\" *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <div *ngIf=\"itemArray.length == 0 \">\r\n <div class=\"form-group mgn-0 border-dashed text-center\" *ngFor=\"let question of qnr.value\">\r\n <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">\r\n {{getQuestion(question).question.sectionName}}</div>\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <div>\r\n <img src=\"{{cdnPath}}assets/images/service-options.svg\" alt=\"Service Options\" class=\"img-fluid pb-0\"\r\n width=\"300\" height=\"300\">\r\n </div>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question).question)\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).question.mandatory\">*</span>\r\n <div>\r\n <span class=\"text-primary font-weight-bold\">Please Choose your Pet</span>\r\n </div>\r\n <div class=\"mt-3\">\r\n <span class=\"btn btn-light font-weight-bold\">Continue</span>\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-12 col-sm-12 mb-4 p-0\" *ngIf=\"showItem\">\r\n <div>\r\n <div class=\"card-border\" *ngFor=\" let items of itemArray\">\r\n\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <div class=\"text-capitalize\">\r\n <div class=\"\">\r\n <span class=\"text-primary\">\r\n {{items.item}}<br>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex border-apply px-0\">\r\n <div (click)=\"decrement(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">-</span>\r\n </div>\r\n <div class=\"mx-2 pointer-cursor\"><span class=\"quantity\"\r\n *ngIf=\"items && items.columnItem && items.columnItem[0] && items.columnItem[0].answer && items.columnItem[0].answer.dataGridList && items.columnItem[0].answer.dataGridList[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity\">\r\n {{items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity}}</span>\r\n </div>\r\n <div (click)=\"increment(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">+</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <span class=\"text-primary\"><span><i class=\"fa fa-inr\"></i>\r\n {{items.price * getItemQuantity(items)}}/-\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n <div *ngIf=\"showItem &&itemArray.length > 0\">\r\n <div *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <div *ngFor=\"let question of qnr.value\">\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <span class=\"btn btn-light font-weight-bold\"><i class=\"fa fa-plus text-white\"></i>Add</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>", styles: [".dropzone{min-height:auto!important}.question-box{margin-top:10px}.btn-light{background-color:#1e4079!important;padding:5px 25px!important;color:#fff!important}.quest-outer{padding:10px}.error-msg{color:red}.upload-btn{background:#fff;border:1px solid;font-size:small}.card-border{box-shadow:0 0 5px 5px #f0f0f0!important;padding:10px 30px!important;margin:20px 10px!important;cursor:pointer!important;border-radius:10px!important}.border-apply{border:2px solid #1e4079!important;border-radius:20px!important}.quantity{font-size:20px!important;font-weight:700!important}.quantity-1:hover{background-color:#1e4079!important;color:#fff!important;font-weight:700!important;border-radius:50%!important;padding:-2px 12px!important}::ng-deep .mat-checkbox-layout{font-weight:400!important}.force_center{margin-left:auto;margin-right:auto}.input-group-text{display:-webkit-box;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.65rem 1rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#3f4254;text-align:center;white-space:nowrap;background-color:#f3f6f9!important;border:1px solid #E4E6EF!important;border-radius:.42rem;border-top-left-radius:0;border-bottom-left-radius:0;cursor:pointer}.w_100{width:100%}.img_fit{width:120px;height:120px}.dropzone .dropzone-default{border:1px dashed #EBEDF3!important}.select-box{padding:10px!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important}.normal-btn{padding:5px 20px;border:none!important}.edit{padding:3px 25px;border-radius:20px!important}.mgn-0{margin-left:0!important;margin-right:0!important;margin-bottom:10px!important}.quest{font-size:1.1rem!important}.mt-3 a:hover{text-decoration:underline!important}.dzimage,.dz-image{border:1px dashed #ccc}.gal_action{position:absolute;top:20px;right:-10px;background:#00000080;width:20px;height:20px;text-align:center;border-radius:50%;cursor:pointer}.single-file{padding:0!important;text-align:initial!important;border:none!important}.single-file .dz-preview{position:relative!important;display:inline-block!important;vertical-align:top!important;margin:16px!important;min-height:100px!important}.single-file .gal_action{top:-5px!important}.pro-only{float:right;color:red;font-size:.8rem}.qnrDisableState .card,.qnrDisableState .dropzone-default,.qnrDisableState .dz-image-preview{background:#eeeeee9e!important}.qnr-section{font-weight:700;padding-bottom:10px;text-transform:uppercase}.section-shadow{margin:20px 10px;padding:20px!important;box-shadow:0 0 10px #0000001f!important}.gridSection .gridColumn{padding:15px}.gridSection .gridColumn label{padding:0 12.5px!important;font-weight:400!important;color:#3f4254!important;font-size:.9rem!important}.gridSection .act-btns .btn{padding:5px 10px!important;margin:5px!important}.gridSection .act-btns{padding:0 20px}.fa-plus-circle{font-size:1.5rem!important}.addicon{color:#1e4079!important;cursor:pointer}.fa-trash,.fa-pen{color:#000!important;font-size:1rem!important}.dz-preview input{width:121px!important;border:1px solid #ccc}.submit-pad{padding:0 10px 20px!important}.form-group.card{border:1px solid #dadce063!important;border-radius:8px!important;padding:5px!important}.docname{width:120px;margin-bottom:5px;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important}@media (max-width: 750px){.normal-btn{padding:3px 10px;border:none!important}.edit{padding:2px 12px;border-radius:10px!important}}.col-xl-12,.col-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;width:100%;padding-right:12.5px;padding-left:12.5px}@media (min-width: 1200px){.col-xl-12{flex:0 0 100%;max-width:100%}}.qnrsec{padding:10px}.p-10{padding:8px!important}.form-control1{display:block!important;width:100%!important;height:calc(1.5em + 1.3rem + 2px)!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-control2{display:block!important;width:100%!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-group label{font-size:1rem;font-weight:400;color:#3f4254}label{display:inline-block;margin-bottom:.5rem}.col-12{flex:0 0 100%;max-width:100%}.radio-list .radio span{margin-right:.75rem}.radio>span{background-color:#ebedf3;border:1px solid transparent}.radio>span{height:18px;width:18px}.radio>span{border-radius:50%;background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0}.radio-list .radio{margin-bottom:1rem}.radio{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.radio>input{position:absolute;z-index:-1;opacity:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #EBEDF3;border-radius:.42rem}.radio-list .radio:last-child{margin-bottom:0}@media (min-width: 992px){.col-lg-12{flex:0 0 100%;max-width:100%}}.dropzone.dropzone-default .dz-preview .dz-image{border-radius:.42rem}.btn.btn-icon i{padding:0;margin:0}.btn i{font-size:1.3rem;padding-right:.35rem;vertical-align:middle;line-height:1;display:inline-flex}.btn i{transition:color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.text-dark-50{color:#7e8299!important}.btn.btn-icon.btn-circle{border-radius:50%}.btn.btn-light-success{color:#1bc5bd;background-color:#c9f7f5;border-color:transparent}.btn.btn-icon{display:inline-flex;align-items:center;justify-content:center;padding:0;height:calc(1.5em + 1.3rem + 2px);width:calc(1.5em + 1.3rem + 2px)}.btn{display:inline-block;font-weight:400;color:#3f4254;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.65rem 1rem;font-size:1rem;line-height:1.5;border-radius:.42rem;transition:color .3s ease-in-out,background-color .3s ease-in-out,border-color .3s ease-in-out,box-shadow .3s ease-in-out}.radio>input:checked~span{background-color:#1e4079}.radio>input:checked~span:after{background-color:#fff;border-color:#fff}.radio>input:checked~span:after{display:block}.radio>span:after{width:6px;height:6px}.radio>span:after{content:\"\";border-radius:100%!important}i{font-size:1.25rem;color:#b5b5c3}.dropzone{min-height:auto}.btn.btn-light-primary{background-color:#f9e2a7;border-color:transparent}.checkbox-lis .checkbox span{margin-right:.75rem}.checkbox>span{background-color:#ebedf3;border:1px solid transparent}.checkbox>span{height:18px;width:18px}.checkbox>span{background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:.42rem}.checkbox>span:after{width:5px;height:10px}.checkbox>span:after{content:\"\";border-color:transparent;border-style:solid;border-width:0 2px 2px 0!important;transform:rotate(45deg);margin-top:-2px}.checkbox-list{display:flex;flex-direction:column}.checkbox>input{position:absolute;z-index:-1;opacity:0}.checkbox>input:checked~span{background-color:#1e4079}.checkbox>input:checked~span:after{border-color:#fff}.checkbox{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.add-plus{color:#fff!important}.border-dashed{padding:10px!important}.add-plus-black{color:#000!important}.plus-black .fa .fa-plus{color:#000!important;font-size:12px!important}.checkbox-list .checkbox{margin-bottom:1rem}.checkbox-list .checkbox span{margin-right:.75rem}.checkbox-list .checkbox:last-child{margin-bottom:0}.btn.btn-primary{color:#fff;background-color:#1e4079;border-color:#1e4079}.font-weight-bold{font-weight:500!important}button{font-family:inherit}.form-control1:focus{color:#3f4254!important;background-color:#fff!important;border-color:#69b3ff!important;outline:0!important}.table.table-head-bg thead th:first-child{border-radius:.42rem}.table.table-head-bg thead tr,.table.table-head-bg thead th{background-color:#f3f6f9;border-bottom:0;letter-spacing:1px}.table.table-head-custom thead tr,.table.table-head-custom thead th{font-weight:600;color:#b5b5c3!important;font-size:.9rem;text-transform:uppercase}.table thead th{font-weight:600;font-size:1rem;border-bottom-width:1px;padding-top:1rem;padding-bottom:1rem}.table th,.table td{padding:.75rem}.table.table-head-bg thead tr:last-child,.table.table-head-bg thead th:last-child{border-top-right-radius:.42rem;border-bottom-right-radius:.42rem}.table-responsive1{display:block;width:100%;overflow-x:auto}.text-white{color:#fff!important;font-size:15px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:13%}.text-primary{color:#1e4079!important}.text-link{color:#1a6888}@media (min-width: 300px) and (max-width: 750px){.item{font-size:10px!important}.item_price{font-size:9px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:23%}}@media (max-width: 450px){.item{font-size:10px!important}.item_price{font-size:9px!important}}@media (min-width: 600px) and (max-width: 992px){.items{font-size:18px!important}.item_prices{font-size:16px!important}}@media (max-width: 450px){.incre{border:2px solid blue!important;border-radius:100px!important;max-width:20.66667%!important}}.font-weight-bold{font-weight:700!important}@media (max-width: 750px){.incre{max-width:20.66667%!important}}.incre{border:2px solid blue!important;border-radius:100px!important;max-width:10.66667%}@media (max-width: 893px){.disp-none-small{display:none!important}}@media (min-width: 800px){.disp-none-large{display:none!important}}.fa-inr{font-size:15px!important;color:#1e4079!important}.text-primary{font-weight:700!important}.flaticon-upload:before{content:\"\\f11d\"}[class*=\" flaticon-\"]:before{font-family:Flaticon;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;line-height:1;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased}.dropzone{position:relative!important;display:inline-block!important;vertical-align:top!important;min-height:100px!important}.dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dz-image{border:1px dashed #ccc}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}\n"], dependencies: [{ kind: "directive", type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.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: i14.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i14.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i14.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i14.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i14.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i15.LoadingSpinnerComponent, selector: "app-common-innerloading-spinner", inputs: ["spinnerParams"] }, { kind: "component", type: i16.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i16.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i16.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i17.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i18.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i19.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "pipe", type: i13.DatePipe, name: "date" }, { kind: "pipe", type: i13.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i20.CapitalizeFirstPipe, name: "capitalizeFirst" }, { kind: "pipe", type: i21.SafeHtmlPipe, name: "safeHtml" }] });
1353
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionnaireComponent, selector: "app-questionnaire", inputs: { questionnaireList: "questionnaireList", source: "source", accountId: "accountId", questionAnswers: "questionAnswers", customerDetails: "customerDetails", uuid: "uuid", type: "type", waitlistStatus: "waitlistStatus", orderStatus: "orderStatus", donationDetails: "donationDetails", service: "service", mode: "mode", tempType: "tempType", bookingType: "bookingType" }, outputs: { fileChanged: "fileChanged", returnAnswers: "returnAnswers" }, viewQueries: [{ propertyName: "file2", first: true, predicate: ["logofile1"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<section class=\"cons-inbox no-padding-small\" *ngIf=\"!showservice\">\n <div class=\"container consumer-dashhome p-0\" *ngIf=\"!type && source!='proLead'\">\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\n </div>\n </div>\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\" id=\"btnEdit\">Edit</button>\n </div>\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consOrder' || source === 'paper' || source === 'consDonationDetails' || source === 'ivr')\">\n <div class=\"col-xl-12 force_center\" [class.p-0]=\"uuid\" [class.no-padding-small]=\"source && source=='ivr'\">\n <div class=\"\">\n <div class=\"qnrsec\" *ngFor=\"let qnr of groupedQnr | keyvalue: asIsOrder\"\n [class.section-shadow]=\"getSectionCount() > 1\" [class.no-padding-small]=\"source && source=='ivr'\">\n <div class=\"form-group card mgn-0\" *ngFor=\"let question of qnr.value\">\n <label class=\"col-12 quest\">{{getQuestion(question).label}}\n <i class=\"fa fa-plus-circle pull-right\" aria-hidden=\"true\"\n [class.addicon]=\"!buttonDisable && !disableInput()\"\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && !showDataGrid[getQuestion(question).labelName]\"\n (click)=\"!buttonDisable && !disableInput() && showDataGridAddSection(getQuestion(question), true)\"></i>\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question))\">For Providers</div>\n <span class=\"red\" *ngIf=\"getQuestion(question).mandatory\">*</span>\n <div class=\"form-level-settings\" *ngIf=\"getQuestion(question).hint\"\n [innerHTML]=\"getQuestion(question).hint | safeHtml\">\n </div>\n </label>\n <!-- for file upload -->\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'fileUpload'\">\n <mat-select multiple #deptsel [disabled]=\"buttonDisable || disableInput()\"\n *ngIf=\"getQuestion(question).filePropertie.maxNoOfFile > 1 && getQuestion(question).filePropertie.minNoOfFile !== getQuestion(question).filePropertie.maxNoOfFile\"\n [(ngModel)]=\"uploadFilesTemp[getQuestion(question).labelName]\" class=\"select-box\" placeholder=\"Select\">\n <mat-option *ngFor=\"let document of getQuestion(question).filePropertie.allowedDocuments\"\n [value]=\"document\" (click)=\"changeImageSelected(getQuestion(question), document)\">\n {{document}}</mat-option>\n </mat-select>\n <div class=\"col-lg-12 col-12 col-md-12 col-sm-12 p-0 mt-4\"\n *ngIf=\"getDocuments(getQuestion(question)) && getDocuments(getQuestion(question)).length > 0\">\n <div class=\"dropzone dropzone-default dropzone-primary dz-clickable\"\n [class.single-file]=\"getQuestion(question).filePropertie.allowedDocuments.length==1\"\n style=\"cursor: auto;\">\n <ng-container *ngFor=\"let doc of getDocuments(getQuestion(question))\">\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\n *ngIf=\"getImg(getQuestion(question), doc)\">\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\n {{doc}}</div>\n <div class=\"dzimage pointer-cursor\" (click)=\"openAttachmentGallery(getQuestion(question), doc)\">\n <img alt=\"\" class=\"img_fit\" [src]=\"getImg(getQuestion(question), doc)\">\n </div>\n <input [disabled]=\"buttonDisable || disableInput()\" (blur)=\"onSubmit('inputChange');\"\n [(ngModel)]=\"comments[getQuestion(question).labelName + '=' + doc]\">\n <div class=\"gal_action\" *ngIf=\"!buttonDisable && !disableInput() && mode!=='read'\"\n (click)=\"changeImageSelected(getQuestion(question), doc)\">\n <i class=\"fa fa-times-circle\" aria-hidden=\"true\"></i>\n </div>\n </div>\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\n (click)=\"logofile1.click()\" *ngIf=\"!getImg(getQuestion(question), doc)\">\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\n {{doc}}</div>\n <div class=\"dz-image pointer-cursor\">\n </div>\n <input #logofile1 type=\"file\" accept=\"/*;capture=camera\" style=\"display:none;\"\n [disabled]=\"buttonDisable || disableInput()\"\n (change)=\"filesSelected($event, getQuestion(question), doc)\">\n <div class=\"dz-error-mark\">\n <a class=\"btn btn-icon btn-light-success btn-circle mr-2\"><i\n class=\"text-dark-50 flaticon-upload\"></i></a>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for checkbox -->\n <div class=\"col-12\"\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers > 1\">\n <div class=\"checkbox-list\">\n <label class=\"checkbox\" *ngFor=\"let value of getQuestion(question).labelValues\">\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question))\"\n (change)=\"listChange($event, value, getQuestion(question))\"\n [disabled]=\"buttonDisable || disableInput()\">\n <span></span>\n {{value}}\n </label>\n </div>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for radio -->\n <div class=\"col-12\"\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers === 1\">\n <div class=\"radio-list\">\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\n [checked]=\"isChecked(value, getQuestion(question))\"\n (change)=\"listChange($event, value, getQuestion(question))\">\n <span></span>\n {{value}}\n </label>\n </div>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for toggel boolean -->\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'bool'\">\n <div class=\"radio-list\">\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\n [checked]=\"isBooleanChecked(value, getQuestion(question))\"\n (change)=\"booleanChange($event, value, getQuestion(question))\">\n <span></span>\n {{value}}\n </label>\n </div>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for Text -->\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'plainText'\">\n <input *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter<=100\"\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\" \n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\"\n class=\"form-control1 form-control-solid\" type=\"text\" [disabled]=\"buttonDisable || disableInput()\">\n <textarea rows=\"3\" *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter>100\"\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\" [disabled]=\"buttonDisable || disableInput()\"\n class=\"form-control2 form-control-solid\"></textarea>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for Number -->\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'number'\">\n <input [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\n [min]=\"getQuestion(question).numberPropertie.start\" [max]=\"getQuestion(question).numberPropertie.end\"\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"number\"\n (keypress)=\"isNumeric($event)\">\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for Date -->\n <div class=\"col-12 d-flex\" *ngIf=\"getQuestion(question).fieldDataType === 'date'\">\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\n [min]=\"getMindate(question)\" [(ngModel)]=\"answers[getQuestion(question).labelName]\"\n (dateChange)=\"onSubmit('inputChange')\" [disabled]=\"buttonDisable || disableInput()\"\n (click)=\"picker.open()\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\"></mat-datepicker>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for Datagrid -->\n <div class=\"table-responsive1\"\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && dataGridColumnsAnswerList[getQuestion(question).labelName] && dataGridColumnsAnswerList[getQuestion(question).labelName].length > 0\">\n <table class=\"table table-head-custom table-head-bg table-borderless table-vertical-center\">\n <thead>\n <th *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\n {{column.columnId}}</th>\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\n </th>\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\n </th>\n </thead>\n <tbody>\n <tr *ngFor=\"let column of dataGridColumnsAnswerList[getQuestion(question).labelName];let i =index\">\n <td *ngFor=\"let data of column | keyvalue\">\n <div\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'date'\">\n {{data.value | date : newTimeDateFormat}}\n </div>\n <div\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'bool'\">\n {{getBoolValue(data.value)}}\n </div>\n <div\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'date' && getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'bool'\">\n {{data.value}}\n </div>\n </td>\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\n <i class=\"fa fa-pen\" (click)=\"editDataGrid(getQuestion(question), column)\"></i>\n </td>\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\n <i class=\"fa fa-trash\" (click)=\"deleteDataGrid(getQuestion(question), column)\"></i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div class=\"gridSection\" *ngIf=\"showDataGrid[getQuestion(question).labelName]\">\n <div class=\"gridColumn\" *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\n <label>{{column.label}}\n <span class=\"red\" *ngIf=\"column.mandatory\">*</span>\n </label>\n <!-- for checkbox -->\n <div class=\"col-12\" *ngIf=\"column.dataType === 'list'\">\n <div class=\"checkbox-list\">\n <label class=\"checkbox\" *ngFor=\"let value of column.listPropertie.values\">\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question), column)\"\n (change)=\"listChange($event, value, getQuestion(question), column)\"\n [disabled]=\"buttonDisable || disableInput()\">\n <span></span>\n {{value}}\n </label>\n </div>\n </div>\n <!-- for toggel boolean -->\n <div class=\"col-12\" *ngIf=\"column.dataType === 'bool'\">\n <div class=\"radio-list\">\n <label class=\"radio\">\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\n [checked]=\"isBooleanChecked('yes', getQuestion(question), column)\"\n (change)=\"booleanChange($event, 'yes', getQuestion(question), column)\">\n <span></span>\n Yes\n </label>\n <label class=\"radio\">\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\n [checked]=\"isBooleanChecked('no', getQuestion(question), column)\"\n (change)=\"booleanChange($event, 'no', getQuestion(question), column)\">\n <span></span>\n No\n </label>\n </div>\n </div>\n <!-- for Text -->\n <div class=\"col-12\" *ngIf=\"column.dataType === 'plainText'\">\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"text\">\n </div>\n <!-- for Number -->\n <div class=\"col-12\" *ngIf=\"column.dataType === 'number'\">\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\n [disabled]=\"buttonDisable || disableInput()\" [min]=\"column.numberPropertie.start\"\n [max]=\"column.numberPropertie.end\" class=\"form-control1 form-control-solid\" type=\"number\">\n </div>\n <!-- for Date -->\n <div class=\"col-12 d-flex\" *ngIf=\"column.dataType === 'date'\">\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\n [min]=\"getMindate(question)\"\n [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\n [disabled]=\"buttonDisable || disableInput()\" (click)=\"picker.open()\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\">\n </mat-datepicker>\n </div>\n </div>\n <div class=\"act-btns\">\n <button type=\"button\" class=\"btn btn-light-primary font-weight-bold\" id=\"btnCancelQ\"\n (click)=\"cancelAddorUpdate(getQuestion(question))\">\n Cancel\n </button>\n <button type=\"button\" class=\"btn btn-primary font-weight-bold\" id=\"btnSaveQ\"\n (click)=\"saveDataGridColumn(getQuestion(question))\">Add</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-12 col-12 col-sm-12 col-lg-12 p-0 submit-pad\"\n *ngIf=\"type !== 'qnrLinkProvider' && source!=='proLead' && (uuid || source === 'customer-details' || source === 'proDonation') && !disableInput()\">\n <button class=\"normal-btn\" mat-flat-button [class.spinner]=\"buttonDisable\" id=\"btnSubmit\"\n [class.spinner-darker-success]=\"buttonDisable\" [class.spinner-center]=\"buttonDisable\"\n (click)=\"!buttonDisable && onSubmit('submit')\" [disabled]=\"buttonDisable\"\n [class.disabled]=\"buttonDisable\">{{(type == 'qnr-link') ? 'Submit' : 'Update'}}</button>\n </div>\n </div>\n </div>\n</section>\n<section class=\"cons-inbox no-padding-small\" *ngIf=\"showservice\">\n <div class=\"container consumer-dashhome\" *ngIf=\"!type\">\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\n </div>\n </div>\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\" id=\"btnEditQNR\">Edit</button>\n </div>\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consDonationDetails' )\">\n <div class=\"col-xl-12 force_center p-0\" [class.p-0]=\"uuid\"\n [class.no-padding-small]=\"source && source=='ivr'\">\n <div class=\"\">\n <div class=\"\" *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\n <div *ngIf=\"itemArray.length == 0 \">\n <div class=\"form-group mgn-0 border-dashed text-center\" *ngFor=\"let question of qnr.value\">\n <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">\n {{getQuestion(question).question.sectionName}}</div>\n <label class=\"col-12 quest pointer-cursor\"\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\n <div>\n <img src=\"{{cdnPath}}assets/images/service-options.svg\" alt=\"Service Options\" class=\"img-fluid pb-0\"\n width=\"300\" height=\"300\">\n </div>\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question).question)\">For Providers</div>\n <span class=\"red\" *ngIf=\"getQuestion(question).question.mandatory\">*</span>\n <div>\n <span class=\"text-primary font-weight-bold\">Please Choose your Pet</span>\n </div>\n <div class=\"mt-3\">\n <span class=\"btn btn-light font-weight-bold\">Continue</span>\n </div>\n </label>\n </div>\n </div>\n </div>\n <div class=\"col-md-12 col-12 col-sm-12 mb-4 p-0\" *ngIf=\"showItem\">\n <div>\n <div class=\"card-border\" *ngFor=\" let items of itemArray\">\n\n <div class=\"d-flex justify-content-between\">\n <div>\n <div class=\"text-capitalize\">\n <div class=\"\">\n <span class=\"text-primary\">\n {{items.item}}<br>\n </span>\n </div>\n </div>\n </div>\n <div class=\"d-flex border-apply px-0\">\n <div (click)=\"decrement(items);\" class=\"pointer-cursor quantity quantity-1\">\n <span class=\"p-10\">-</span>\n </div>\n <div class=\"mx-2 pointer-cursor\"><span class=\"quantity\"\n *ngIf=\"items && items.columnItem && items.columnItem[0] && items.columnItem[0].answer && items.columnItem[0].answer.dataGridList && items.columnItem[0].answer.dataGridList[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity\">\n {{items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity}}</span>\n </div>\n <div (click)=\"increment(items);\" class=\"pointer-cursor quantity quantity-1\">\n <span class=\"p-10\">+</span>\n </div>\n </div>\n </div>\n <div>\n <span class=\"text-primary\"><span><i class=\"fa fa-inr\"></i>\n {{items.price * getItemQuantity(items)}}/-\n </span>\n </span>\n </div>\n </div>\n <div class=\"clearfix\"></div>\n <div *ngIf=\"showItem &&itemArray.length > 0\">\n <div *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\n <div *ngFor=\"let question of qnr.value\">\n <label class=\"col-12 quest pointer-cursor\"\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\n <span class=\"btn btn-light font-weight-bold\"><i class=\"fa fa-plus text-white\"></i>Add</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</section>", styles: [".dropzone{min-height:auto!important}.question-box{margin-top:10px}.btn-light{background-color:#1e4079!important;padding:5px 25px!important;color:#fff!important}.quest-outer{padding:10px}.error-msg{color:red}.upload-btn{background:#fff;border:1px solid;font-size:small}.card-border{box-shadow:0 0 5px 5px #f0f0f0!important;padding:10px 30px!important;margin:20px 10px!important;cursor:pointer!important;border-radius:10px!important}.border-apply{border:2px solid #1e4079!important;border-radius:20px!important}.quantity{font-size:20px!important;font-weight:700!important}.quantity-1:hover{background-color:#1e4079!important;color:#fff!important;font-weight:700!important;border-radius:50%!important;padding:-2px 12px!important}::ng-deep .mat-checkbox-layout{font-weight:400!important}.force_center{margin-left:auto;margin-right:auto}.input-group-text{display:-webkit-box;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.65rem 1rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#3f4254;text-align:center;white-space:nowrap;background-color:#f3f6f9!important;border:1px solid #E4E6EF!important;border-radius:.42rem;border-top-left-radius:0;border-bottom-left-radius:0;cursor:pointer}.w_100{width:100%}.img_fit{width:120px;height:120px}.dropzone .dropzone-default{border:1px dashed #EBEDF3!important}.select-box{padding:10px!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important}.normal-btn{padding:5px 20px;border:none!important}.edit{padding:3px 25px;border-radius:20px!important}.mgn-0{margin-left:0!important;margin-right:0!important;margin-bottom:10px!important}.quest{font-size:1.1rem!important}.mt-3 a:hover{text-decoration:underline!important}.dzimage,.dz-image{border:1px dashed #ccc}.gal_action{position:absolute;top:20px;right:-10px;background:#00000080;width:20px;height:20px;text-align:center;border-radius:50%;cursor:pointer}.single-file{padding:0!important;text-align:initial!important;border:none!important}.single-file .dz-preview{position:relative!important;display:inline-block!important;vertical-align:top!important;margin:16px!important;min-height:100px!important}.single-file .gal_action{top:-5px!important}.pro-only{float:right;color:red;font-size:.8rem}.qnrDisableState .card,.qnrDisableState .dropzone-default,.qnrDisableState .dz-image-preview{background:#eeeeee9e!important}.qnr-section{font-weight:700;padding-bottom:10px;text-transform:uppercase}.section-shadow{margin:20px 10px;padding:20px!important;box-shadow:0 0 10px #0000001f!important}.gridSection .gridColumn{padding:15px}.gridSection .gridColumn label{padding:0 12.5px!important;font-weight:400!important;color:#3f4254!important;font-size:.9rem!important}.gridSection .act-btns .btn{padding:5px 10px!important;margin:5px!important}.gridSection .act-btns{padding:0 20px}.fa-plus-circle{font-size:1.5rem!important}.addicon{color:#1e4079!important;cursor:pointer}.fa-trash,.fa-pen{color:#000!important;font-size:1rem!important}.dz-preview input{width:121px!important;border:1px solid #ccc}.submit-pad{padding:0 10px 20px!important}.form-group.card{border:1px solid #dadce063!important;border-radius:8px!important;padding:5px!important}.docname{width:120px;margin-bottom:5px;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important}@media (max-width: 750px){.normal-btn{padding:3px 10px;border:none!important}.edit{padding:2px 12px;border-radius:10px!important}}.col-xl-12,.col-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;width:100%;padding-right:12.5px;padding-left:12.5px}@media (min-width: 1200px){.col-xl-12{flex:0 0 100%;max-width:100%}}.qnrsec{padding:10px}.p-10{padding:8px!important}.form-control1{display:block!important;width:100%!important;height:calc(1.5em + 1.3rem + 2px)!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-control2{display:block!important;width:100%!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-group label{font-size:1rem;font-weight:400;color:#3f4254}label{display:inline-block;margin-bottom:.5rem}.col-12{flex:0 0 100%;max-width:100%}.radio-list .radio span{margin-right:.75rem}.radio>span{background-color:#ebedf3;border:1px solid transparent}.radio>span{height:18px;width:18px}.radio>span{border-radius:50%;background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0}.radio-list .radio{margin-bottom:1rem}.radio{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.radio>input{position:absolute;z-index:-1;opacity:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #EBEDF3;border-radius:.42rem}.radio-list .radio:last-child{margin-bottom:0}@media (min-width: 992px){.col-lg-12{flex:0 0 100%;max-width:100%}}.dropzone.dropzone-default .dz-preview .dz-image{border-radius:.42rem}.btn.btn-icon i{padding:0;margin:0}.btn i{font-size:1.3rem;padding-right:.35rem;vertical-align:middle;line-height:1;display:inline-flex}.btn i{transition:color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.text-dark-50{color:#7e8299!important}.btn.btn-icon.btn-circle{border-radius:50%}.btn.btn-light-success{color:#1bc5bd;background-color:#c9f7f5;border-color:transparent}.btn.btn-icon{display:inline-flex;align-items:center;justify-content:center;padding:0;height:calc(1.5em + 1.3rem + 2px);width:calc(1.5em + 1.3rem + 2px)}.btn{display:inline-block;font-weight:400;color:#3f4254;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.65rem 1rem;font-size:1rem;line-height:1.5;border-radius:.42rem;transition:color .3s ease-in-out,background-color .3s ease-in-out,border-color .3s ease-in-out,box-shadow .3s ease-in-out}.radio>input:checked~span{background-color:#1e4079}.radio>input:checked~span:after{background-color:#fff;border-color:#fff}.radio>input:checked~span:after{display:block}.radio>span:after{width:6px;height:6px}.radio>span:after{content:\"\";border-radius:100%!important}i{font-size:1.25rem;color:#b5b5c3}.dropzone{min-height:auto}.btn.btn-light-primary{background-color:#f9e2a7;border-color:transparent}.checkbox-lis .checkbox span{margin-right:.75rem}.checkbox>span{background-color:#ebedf3;border:1px solid transparent}.checkbox>span{height:18px;width:18px}.checkbox>span{background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:.42rem}.checkbox>span:after{width:5px;height:10px}.checkbox>span:after{content:\"\";border-color:transparent;border-style:solid;border-width:0 2px 2px 0!important;transform:rotate(45deg);margin-top:-2px}.checkbox-list{display:flex;flex-direction:column}.checkbox>input{position:absolute;z-index:-1;opacity:0}.checkbox>input:checked~span{background-color:#1e4079}.checkbox>input:checked~span:after{border-color:#fff}.checkbox{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.add-plus{color:#fff!important}.border-dashed{padding:10px!important}.add-plus-black{color:#000!important}.plus-black .fa .fa-plus{color:#000!important;font-size:12px!important}.checkbox-list .checkbox{margin-bottom:1rem}.checkbox-list .checkbox span{margin-right:.75rem}.checkbox-list .checkbox:last-child{margin-bottom:0}.btn.btn-primary{color:#fff;background-color:#1e4079;border-color:#1e4079}.font-weight-bold{font-weight:500!important}button{font-family:inherit}.form-control1:focus{color:#3f4254!important;background-color:#fff!important;border-color:#69b3ff!important;outline:0!important}.table.table-head-bg thead th:first-child{border-radius:.42rem}.table.table-head-bg thead tr,.table.table-head-bg thead th{background-color:#f3f6f9;border-bottom:0;letter-spacing:1px}.table.table-head-custom thead tr,.table.table-head-custom thead th{font-weight:600;color:#b5b5c3!important;font-size:.9rem;text-transform:uppercase}.table thead th{font-weight:600;font-size:1rem;border-bottom-width:1px;padding-top:1rem;padding-bottom:1rem}.table th,.table td{padding:.75rem}.table.table-head-bg thead tr:last-child,.table.table-head-bg thead th:last-child{border-top-right-radius:.42rem;border-bottom-right-radius:.42rem}.table-responsive1{display:block;width:100%;overflow-x:auto}.text-white{color:#fff!important;font-size:15px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:13%}.text-primary{color:#1e4079!important}.text-link{color:#1a6888}@media (min-width: 300px) and (max-width: 750px){.item{font-size:10px!important}.item_price{font-size:9px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:23%}}@media (max-width: 450px){.item{font-size:10px!important}.item_price{font-size:9px!important}}@media (min-width: 600px) and (max-width: 992px){.items{font-size:18px!important}.item_prices{font-size:16px!important}}@media (max-width: 450px){.incre{border:2px solid blue!important;border-radius:100px!important;max-width:20.66667%!important}}.font-weight-bold{font-weight:700!important}@media (max-width: 750px){.incre{max-width:20.66667%!important}}.incre{border:2px solid blue!important;border-radius:100px!important;max-width:10.66667%}@media (max-width: 893px){.disp-none-small{display:none!important}}@media (min-width: 800px){.disp-none-large{display:none!important}}.fa-inr{font-size:15px!important;color:#1e4079!important}.text-primary{font-weight:700!important}.flaticon-upload:before{content:\"\\f11d\"}[class*=\" flaticon-\"]:before{font-family:Flaticon;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;line-height:1;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased}.dropzone{position:relative!important;display:inline-block!important;vertical-align:top!important;min-height:100px!important}.dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dz-image{border:1px dashed #ccc}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}\n"], dependencies: [{ kind: "directive", type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i14.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: i14.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i14.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i14.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i14.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i14.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i14.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i14.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i15.LoadingSpinnerComponent, selector: "app-common-innerloading-spinner", inputs: ["spinnerParams"] }, { kind: "component", type: i16.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i16.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i16.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i17.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i18.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i19.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "pipe", type: i13.DatePipe, name: "date" }, { kind: "pipe", type: i13.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i20.CapitalizeFirstPipe, name: "capitalizeFirst" }, { kind: "pipe", type: i21.SafeHtmlPipe, name: "safeHtml" }] });
1354
1354
  }
1355
1355
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionnaireComponent, decorators: [{
1356
1356
  type: Component,
1357
- args: [{ selector: 'app-questionnaire', template: "<section class=\"cons-inbox no-padding-small\" *ngIf=\"!showservice\">\r\n <div class=\"container consumer-dashhome p-0\" *ngIf=\"!type && source!='proLead'\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\" id=\"btnEdit\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consOrder' || source === 'paper' || source === 'consDonationDetails' || source === 'ivr')\">\r\n <div class=\"col-xl-12 force_center\" [class.p-0]=\"uuid\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"qnrsec\" *ngFor=\"let qnr of groupedQnr | keyvalue: asIsOrder\"\r\n [class.section-shadow]=\"getSectionCount() > 1\" [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"form-group card mgn-0\" *ngFor=\"let question of qnr.value\">\r\n <label class=\"col-12 quest\">{{getQuestion(question).label}}\r\n <i class=\"fa fa-plus-circle pull-right\" aria-hidden=\"true\"\r\n [class.addicon]=\"!buttonDisable && !disableInput()\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && !showDataGrid[getQuestion(question).labelName]\"\r\n (click)=\"!buttonDisable && !disableInput() && showDataGridAddSection(getQuestion(question), true)\"></i>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question))\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).mandatory\">*</span>\r\n <div class=\"form-level-settings\" *ngIf=\"getQuestion(question).hint\"\r\n [innerHTML]=\"getQuestion(question).hint | safeHtml\">\r\n </div>\r\n </label>\r\n <!-- for file upload -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'fileUpload'\">\r\n <mat-select multiple #deptsel [disabled]=\"buttonDisable || disableInput()\"\r\n *ngIf=\"getQuestion(question).filePropertie.maxNoOfFile > 1 && getQuestion(question).filePropertie.minNoOfFile !== getQuestion(question).filePropertie.maxNoOfFile\"\r\n [(ngModel)]=\"uploadFilesTemp[getQuestion(question).labelName]\" class=\"select-box\" placeholder=\"Select\">\r\n <mat-option *ngFor=\"let document of getQuestion(question).filePropertie.allowedDocuments\"\r\n [value]=\"document\" (click)=\"changeImageSelected(getQuestion(question), document)\">\r\n {{document}}</mat-option>\r\n </mat-select>\r\n <div class=\"col-lg-12 col-12 col-md-12 col-sm-12 p-0 mt-4\"\r\n *ngIf=\"getDocuments(getQuestion(question)) && getDocuments(getQuestion(question)).length > 0\">\r\n <div class=\"dropzone dropzone-default dropzone-primary dz-clickable\"\r\n [class.single-file]=\"getQuestion(question).filePropertie.allowedDocuments.length==1\"\r\n style=\"cursor: auto;\">\r\n <ng-container *ngFor=\"let doc of getDocuments(getQuestion(question))\">\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n *ngIf=\"getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dzimage pointer-cursor\" (click)=\"openAttachmentGallery(getQuestion(question), doc)\">\r\n <img alt=\"\" class=\"img_fit\" [src]=\"getImg(getQuestion(question), doc)\">\r\n </div>\r\n <input [disabled]=\"buttonDisable || disableInput()\" (blur)=\"onSubmit('inputChange');\"\r\n [(ngModel)]=\"comments[getQuestion(question).labelName + '=' + doc]\">\r\n <div class=\"gal_action\" *ngIf=\"!buttonDisable && !disableInput() && mode!=='read'\"\r\n (click)=\"changeImageSelected(getQuestion(question), doc)\">\r\n <i class=\"fa fa-times-circle\" aria-hidden=\"true\"></i>\r\n </div>\r\n </div>\r\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\r\n (click)=\"logofile1.click()\" *ngIf=\"!getImg(getQuestion(question), doc)\">\r\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\r\n {{doc}}</div>\r\n <div class=\"dz-image pointer-cursor\">\r\n </div>\r\n <input #logofile1 type=\"file\" accept=\"/*;capture=camera\" style=\"display:none;\"\r\n [disabled]=\"buttonDisable || disableInput()\"\r\n (change)=\"filesSelected($event, getQuestion(question), doc)\">\r\n <div class=\"dz-error-mark\">\r\n <a class=\"btn btn-icon btn-light-success btn-circle mr-2\"><i\r\n class=\"text-dark-50 flaticon-upload\"></i></a>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers > 1\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for radio -->\r\n <div class=\"col-12\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers === 1\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isChecked(value, getQuestion(question))\"\r\n (change)=\"listChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked(value, getQuestion(question))\"\r\n (change)=\"booleanChange($event, value, getQuestion(question))\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'plainText'\">\r\n <input *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter<=100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\" \r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\"\r\n class=\"form-control1 form-control-solid\" type=\"text\" [disabled]=\"buttonDisable || disableInput()\">\r\n <textarea rows=\"3\" *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter>100\"\r\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\r\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\" [disabled]=\"buttonDisable || disableInput()\"\r\n class=\"form-control2 form-control-solid\"></textarea>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'number'\">\r\n <input [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\r\n [min]=\"getQuestion(question).numberPropertie.start\" [max]=\"getQuestion(question).numberPropertie.end\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"number\"\r\n (keypress)=\"isNumeric($event)\">\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 d-flex\" *ngIf=\"getQuestion(question).fieldDataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\" [(ngModel)]=\"answers[getQuestion(question).labelName]\"\r\n (dateChange)=\"onSubmit('inputChange')\" [disabled]=\"buttonDisable || disableInput()\"\r\n (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\"></mat-datepicker>\r\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\r\n {{apiError[getQuestion(question).labelName]}}</div>\r\n </div>\r\n <!-- for Datagrid -->\r\n <div class=\"table-responsive1\"\r\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && dataGridColumnsAnswerList[getQuestion(question).labelName] && dataGridColumnsAnswerList[getQuestion(question).labelName].length > 0\">\r\n <table class=\"table table-head-custom table-head-bg table-borderless table-vertical-center\">\r\n <thead>\r\n <th *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n {{column.columnId}}</th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n </th>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let column of dataGridColumnsAnswerList[getQuestion(question).labelName];let i =index\">\r\n <td *ngFor=\"let data of column | keyvalue\">\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'date'\">\r\n {{data.value | date : newTimeDateFormat}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'bool'\">\r\n {{getBoolValue(data.value)}}\r\n </div>\r\n <div\r\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'date' && getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'bool'\">\r\n {{data.value}}\r\n </div>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-pen\" (click)=\"editDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\r\n <i class=\"fa fa-trash\" (click)=\"deleteDataGrid(getQuestion(question), column)\"></i>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"gridSection\" *ngIf=\"showDataGrid[getQuestion(question).labelName]\">\r\n <div class=\"gridColumn\" *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\r\n <label>{{column.label}}\r\n <span class=\"red\" *ngIf=\"column.mandatory\">*</span>\r\n </label>\r\n <!-- for checkbox -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'list'\">\r\n <div class=\"checkbox-list\">\r\n <label class=\"checkbox\" *ngFor=\"let value of column.listPropertie.values\">\r\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question), column)\"\r\n (change)=\"listChange($event, value, getQuestion(question), column)\"\r\n [disabled]=\"buttonDisable || disableInput()\">\r\n <span></span>\r\n {{value}}\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for toggel boolean -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'bool'\">\r\n <div class=\"radio-list\">\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('yes', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'yes', getQuestion(question), column)\">\r\n <span></span>\r\n Yes\r\n </label>\r\n <label class=\"radio\">\r\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\r\n [checked]=\"isBooleanChecked('no', getQuestion(question), column)\"\r\n (change)=\"booleanChange($event, 'no', getQuestion(question), column)\">\r\n <span></span>\r\n No\r\n </label>\r\n </div>\r\n </div>\r\n <!-- for Text -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'plainText'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"text\">\r\n </div>\r\n <!-- for Number -->\r\n <div class=\"col-12\" *ngIf=\"column.dataType === 'number'\">\r\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" [min]=\"column.numberPropertie.start\"\r\n [max]=\"column.numberPropertie.end\" class=\"form-control1 form-control-solid\" type=\"number\">\r\n </div>\r\n <!-- for Date -->\r\n <div class=\"col-12 d-flex\" *ngIf=\"column.dataType === 'date'\">\r\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\r\n [min]=\"getMindate(question)\"\r\n [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\r\n [disabled]=\"buttonDisable || disableInput()\" (click)=\"picker.open()\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\">\r\n </mat-datepicker>\r\n </div>\r\n </div>\r\n <div class=\"act-btns\">\r\n <button type=\"button\" class=\"btn btn-light-primary font-weight-bold\" id=\"btnCancelQ\"\r\n (click)=\"cancelAddorUpdate(getQuestion(question))\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary font-weight-bold\" id=\"btnSaveQ\"\r\n (click)=\"saveDataGridColumn(getQuestion(question))\">Add</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-12 col-sm-12 col-lg-12 p-0 submit-pad\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && source!=='proLead' && (uuid || source === 'customer-details' || source === 'proDonation') && !disableInput()\">\r\n <button class=\"normal-btn\" mat-flat-button [class.spinner]=\"buttonDisable\" id=\"btnSubmit\"\r\n [class.spinner-darker-success]=\"buttonDisable\" [class.spinner-center]=\"buttonDisable\"\r\n (click)=\"!buttonDisable && onSubmit('submit')\" [disabled]=\"buttonDisable\"\r\n [class.disabled]=\"buttonDisable\">{{(type == 'qnr-link') ? 'Submit' : 'Update'}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n</section>\r\n<section class=\"cons-inbox no-padding-small\" *ngIf=\"showservice\">\r\n <div class=\"container consumer-dashhome\" *ngIf=\"!type\">\r\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\r\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\r\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\r\n </div>\r\n </div>\r\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\r\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\r\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\r\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\" id=\"btnEditQNR\">Edit</button>\r\n </div>\r\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\r\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consDonationDetails' )\">\r\n <div class=\"col-xl-12 force_center p-0\" [class.p-0]=\"uuid\"\r\n [class.no-padding-small]=\"source && source=='ivr'\">\r\n <div class=\"\">\r\n <div class=\"\" *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <div *ngIf=\"itemArray.length == 0 \">\r\n <div class=\"form-group mgn-0 border-dashed text-center\" *ngFor=\"let question of qnr.value\">\r\n <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">\r\n {{getQuestion(question).question.sectionName}}</div>\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <div>\r\n <img src=\"{{cdnPath}}assets/images/service-options.svg\" alt=\"Service Options\" class=\"img-fluid pb-0\"\r\n width=\"300\" height=\"300\">\r\n </div>\r\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question).question)\">For Providers</div>\r\n <span class=\"red\" *ngIf=\"getQuestion(question).question.mandatory\">*</span>\r\n <div>\r\n <span class=\"text-primary font-weight-bold\">Please Choose your Pet</span>\r\n </div>\r\n <div class=\"mt-3\">\r\n <span class=\"btn btn-light font-weight-bold\">Continue</span>\r\n </div>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12 col-12 col-sm-12 mb-4 p-0\" *ngIf=\"showItem\">\r\n <div>\r\n <div class=\"card-border\" *ngFor=\" let items of itemArray\">\r\n\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <div class=\"text-capitalize\">\r\n <div class=\"\">\r\n <span class=\"text-primary\">\r\n {{items.item}}<br>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex border-apply px-0\">\r\n <div (click)=\"decrement(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">-</span>\r\n </div>\r\n <div class=\"mx-2 pointer-cursor\"><span class=\"quantity\"\r\n *ngIf=\"items && items.columnItem && items.columnItem[0] && items.columnItem[0].answer && items.columnItem[0].answer.dataGridList && items.columnItem[0].answer.dataGridList[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity\">\r\n {{items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity}}</span>\r\n </div>\r\n <div (click)=\"increment(items);\" class=\"pointer-cursor quantity quantity-1\">\r\n <span class=\"p-10\">+</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <span class=\"text-primary\"><span><i class=\"fa fa-inr\"></i>\r\n {{items.price * getItemQuantity(items)}}/-\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n <div *ngIf=\"showItem &&itemArray.length > 0\">\r\n <div *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\r\n <div *ngFor=\"let question of qnr.value\">\r\n <label class=\"col-12 quest pointer-cursor\"\r\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\r\n <span class=\"btn btn-light font-weight-bold\"><i class=\"fa fa-plus text-white\"></i>Add</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</section>", styles: [".dropzone{min-height:auto!important}.question-box{margin-top:10px}.btn-light{background-color:#1e4079!important;padding:5px 25px!important;color:#fff!important}.quest-outer{padding:10px}.error-msg{color:red}.upload-btn{background:#fff;border:1px solid;font-size:small}.card-border{box-shadow:0 0 5px 5px #f0f0f0!important;padding:10px 30px!important;margin:20px 10px!important;cursor:pointer!important;border-radius:10px!important}.border-apply{border:2px solid #1e4079!important;border-radius:20px!important}.quantity{font-size:20px!important;font-weight:700!important}.quantity-1:hover{background-color:#1e4079!important;color:#fff!important;font-weight:700!important;border-radius:50%!important;padding:-2px 12px!important}::ng-deep .mat-checkbox-layout{font-weight:400!important}.force_center{margin-left:auto;margin-right:auto}.input-group-text{display:-webkit-box;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.65rem 1rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#3f4254;text-align:center;white-space:nowrap;background-color:#f3f6f9!important;border:1px solid #E4E6EF!important;border-radius:.42rem;border-top-left-radius:0;border-bottom-left-radius:0;cursor:pointer}.w_100{width:100%}.img_fit{width:120px;height:120px}.dropzone .dropzone-default{border:1px dashed #EBEDF3!important}.select-box{padding:10px!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important}.normal-btn{padding:5px 20px;border:none!important}.edit{padding:3px 25px;border-radius:20px!important}.mgn-0{margin-left:0!important;margin-right:0!important;margin-bottom:10px!important}.quest{font-size:1.1rem!important}.mt-3 a:hover{text-decoration:underline!important}.dzimage,.dz-image{border:1px dashed #ccc}.gal_action{position:absolute;top:20px;right:-10px;background:#00000080;width:20px;height:20px;text-align:center;border-radius:50%;cursor:pointer}.single-file{padding:0!important;text-align:initial!important;border:none!important}.single-file .dz-preview{position:relative!important;display:inline-block!important;vertical-align:top!important;margin:16px!important;min-height:100px!important}.single-file .gal_action{top:-5px!important}.pro-only{float:right;color:red;font-size:.8rem}.qnrDisableState .card,.qnrDisableState .dropzone-default,.qnrDisableState .dz-image-preview{background:#eeeeee9e!important}.qnr-section{font-weight:700;padding-bottom:10px;text-transform:uppercase}.section-shadow{margin:20px 10px;padding:20px!important;box-shadow:0 0 10px #0000001f!important}.gridSection .gridColumn{padding:15px}.gridSection .gridColumn label{padding:0 12.5px!important;font-weight:400!important;color:#3f4254!important;font-size:.9rem!important}.gridSection .act-btns .btn{padding:5px 10px!important;margin:5px!important}.gridSection .act-btns{padding:0 20px}.fa-plus-circle{font-size:1.5rem!important}.addicon{color:#1e4079!important;cursor:pointer}.fa-trash,.fa-pen{color:#000!important;font-size:1rem!important}.dz-preview input{width:121px!important;border:1px solid #ccc}.submit-pad{padding:0 10px 20px!important}.form-group.card{border:1px solid #dadce063!important;border-radius:8px!important;padding:5px!important}.docname{width:120px;margin-bottom:5px;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important}@media (max-width: 750px){.normal-btn{padding:3px 10px;border:none!important}.edit{padding:2px 12px;border-radius:10px!important}}.col-xl-12,.col-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;width:100%;padding-right:12.5px;padding-left:12.5px}@media (min-width: 1200px){.col-xl-12{flex:0 0 100%;max-width:100%}}.qnrsec{padding:10px}.p-10{padding:8px!important}.form-control1{display:block!important;width:100%!important;height:calc(1.5em + 1.3rem + 2px)!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-control2{display:block!important;width:100%!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-group label{font-size:1rem;font-weight:400;color:#3f4254}label{display:inline-block;margin-bottom:.5rem}.col-12{flex:0 0 100%;max-width:100%}.radio-list .radio span{margin-right:.75rem}.radio>span{background-color:#ebedf3;border:1px solid transparent}.radio>span{height:18px;width:18px}.radio>span{border-radius:50%;background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0}.radio-list .radio{margin-bottom:1rem}.radio{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.radio>input{position:absolute;z-index:-1;opacity:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #EBEDF3;border-radius:.42rem}.radio-list .radio:last-child{margin-bottom:0}@media (min-width: 992px){.col-lg-12{flex:0 0 100%;max-width:100%}}.dropzone.dropzone-default .dz-preview .dz-image{border-radius:.42rem}.btn.btn-icon i{padding:0;margin:0}.btn i{font-size:1.3rem;padding-right:.35rem;vertical-align:middle;line-height:1;display:inline-flex}.btn i{transition:color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.text-dark-50{color:#7e8299!important}.btn.btn-icon.btn-circle{border-radius:50%}.btn.btn-light-success{color:#1bc5bd;background-color:#c9f7f5;border-color:transparent}.btn.btn-icon{display:inline-flex;align-items:center;justify-content:center;padding:0;height:calc(1.5em + 1.3rem + 2px);width:calc(1.5em + 1.3rem + 2px)}.btn{display:inline-block;font-weight:400;color:#3f4254;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.65rem 1rem;font-size:1rem;line-height:1.5;border-radius:.42rem;transition:color .3s ease-in-out,background-color .3s ease-in-out,border-color .3s ease-in-out,box-shadow .3s ease-in-out}.radio>input:checked~span{background-color:#1e4079}.radio>input:checked~span:after{background-color:#fff;border-color:#fff}.radio>input:checked~span:after{display:block}.radio>span:after{width:6px;height:6px}.radio>span:after{content:\"\";border-radius:100%!important}i{font-size:1.25rem;color:#b5b5c3}.dropzone{min-height:auto}.btn.btn-light-primary{background-color:#f9e2a7;border-color:transparent}.checkbox-lis .checkbox span{margin-right:.75rem}.checkbox>span{background-color:#ebedf3;border:1px solid transparent}.checkbox>span{height:18px;width:18px}.checkbox>span{background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:.42rem}.checkbox>span:after{width:5px;height:10px}.checkbox>span:after{content:\"\";border-color:transparent;border-style:solid;border-width:0 2px 2px 0!important;transform:rotate(45deg);margin-top:-2px}.checkbox-list{display:flex;flex-direction:column}.checkbox>input{position:absolute;z-index:-1;opacity:0}.checkbox>input:checked~span{background-color:#1e4079}.checkbox>input:checked~span:after{border-color:#fff}.checkbox{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.add-plus{color:#fff!important}.border-dashed{padding:10px!important}.add-plus-black{color:#000!important}.plus-black .fa .fa-plus{color:#000!important;font-size:12px!important}.checkbox-list .checkbox{margin-bottom:1rem}.checkbox-list .checkbox span{margin-right:.75rem}.checkbox-list .checkbox:last-child{margin-bottom:0}.btn.btn-primary{color:#fff;background-color:#1e4079;border-color:#1e4079}.font-weight-bold{font-weight:500!important}button{font-family:inherit}.form-control1:focus{color:#3f4254!important;background-color:#fff!important;border-color:#69b3ff!important;outline:0!important}.table.table-head-bg thead th:first-child{border-radius:.42rem}.table.table-head-bg thead tr,.table.table-head-bg thead th{background-color:#f3f6f9;border-bottom:0;letter-spacing:1px}.table.table-head-custom thead tr,.table.table-head-custom thead th{font-weight:600;color:#b5b5c3!important;font-size:.9rem;text-transform:uppercase}.table thead th{font-weight:600;font-size:1rem;border-bottom-width:1px;padding-top:1rem;padding-bottom:1rem}.table th,.table td{padding:.75rem}.table.table-head-bg thead tr:last-child,.table.table-head-bg thead th:last-child{border-top-right-radius:.42rem;border-bottom-right-radius:.42rem}.table-responsive1{display:block;width:100%;overflow-x:auto}.text-white{color:#fff!important;font-size:15px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:13%}.text-primary{color:#1e4079!important}.text-link{color:#1a6888}@media (min-width: 300px) and (max-width: 750px){.item{font-size:10px!important}.item_price{font-size:9px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:23%}}@media (max-width: 450px){.item{font-size:10px!important}.item_price{font-size:9px!important}}@media (min-width: 600px) and (max-width: 992px){.items{font-size:18px!important}.item_prices{font-size:16px!important}}@media (max-width: 450px){.incre{border:2px solid blue!important;border-radius:100px!important;max-width:20.66667%!important}}.font-weight-bold{font-weight:700!important}@media (max-width: 750px){.incre{max-width:20.66667%!important}}.incre{border:2px solid blue!important;border-radius:100px!important;max-width:10.66667%}@media (max-width: 893px){.disp-none-small{display:none!important}}@media (min-width: 800px){.disp-none-large{display:none!important}}.fa-inr{font-size:15px!important;color:#1e4079!important}.text-primary{font-weight:700!important}.flaticon-upload:before{content:\"\\f11d\"}[class*=\" flaticon-\"]:before{font-family:Flaticon;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;line-height:1;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased}.dropzone{position:relative!important;display:inline-block!important;vertical-align:top!important;min-height:100px!important}.dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dz-image{border:1px dashed #ccc}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}\n"] }]
1357
+ args: [{ selector: 'app-questionnaire', template: "<section class=\"cons-inbox no-padding-small\" *ngIf=\"!showservice\">\n <div class=\"container consumer-dashhome p-0\" *ngIf=\"!type && source!='proLead'\">\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\n </div>\n </div>\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\" id=\"btnEdit\">Edit</button>\n </div>\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consOrder' || source === 'paper' || source === 'consDonationDetails' || source === 'ivr')\">\n <div class=\"col-xl-12 force_center\" [class.p-0]=\"uuid\" [class.no-padding-small]=\"source && source=='ivr'\">\n <div class=\"\">\n <div class=\"qnrsec\" *ngFor=\"let qnr of groupedQnr | keyvalue: asIsOrder\"\n [class.section-shadow]=\"getSectionCount() > 1\" [class.no-padding-small]=\"source && source=='ivr'\">\n <div class=\"form-group card mgn-0\" *ngFor=\"let question of qnr.value\">\n <label class=\"col-12 quest\">{{getQuestion(question).label}}\n <i class=\"fa fa-plus-circle pull-right\" aria-hidden=\"true\"\n [class.addicon]=\"!buttonDisable && !disableInput()\"\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && !showDataGrid[getQuestion(question).labelName]\"\n (click)=\"!buttonDisable && !disableInput() && showDataGridAddSection(getQuestion(question), true)\"></i>\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question))\">For Providers</div>\n <span class=\"red\" *ngIf=\"getQuestion(question).mandatory\">*</span>\n <div class=\"form-level-settings\" *ngIf=\"getQuestion(question).hint\"\n [innerHTML]=\"getQuestion(question).hint | safeHtml\">\n </div>\n </label>\n <!-- for file upload -->\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'fileUpload'\">\n <mat-select multiple #deptsel [disabled]=\"buttonDisable || disableInput()\"\n *ngIf=\"getQuestion(question).filePropertie.maxNoOfFile > 1 && getQuestion(question).filePropertie.minNoOfFile !== getQuestion(question).filePropertie.maxNoOfFile\"\n [(ngModel)]=\"uploadFilesTemp[getQuestion(question).labelName]\" class=\"select-box\" placeholder=\"Select\">\n <mat-option *ngFor=\"let document of getQuestion(question).filePropertie.allowedDocuments\"\n [value]=\"document\" (click)=\"changeImageSelected(getQuestion(question), document)\">\n {{document}}</mat-option>\n </mat-select>\n <div class=\"col-lg-12 col-12 col-md-12 col-sm-12 p-0 mt-4\"\n *ngIf=\"getDocuments(getQuestion(question)) && getDocuments(getQuestion(question)).length > 0\">\n <div class=\"dropzone dropzone-default dropzone-primary dz-clickable\"\n [class.single-file]=\"getQuestion(question).filePropertie.allowedDocuments.length==1\"\n style=\"cursor: auto;\">\n <ng-container *ngFor=\"let doc of getDocuments(getQuestion(question))\">\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\n *ngIf=\"getImg(getQuestion(question), doc)\">\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\n {{doc}}</div>\n <div class=\"dzimage pointer-cursor\" (click)=\"openAttachmentGallery(getQuestion(question), doc)\">\n <img alt=\"\" class=\"img_fit\" [src]=\"getImg(getQuestion(question), doc)\">\n </div>\n <input [disabled]=\"buttonDisable || disableInput()\" (blur)=\"onSubmit('inputChange');\"\n [(ngModel)]=\"comments[getQuestion(question).labelName + '=' + doc]\">\n <div class=\"gal_action\" *ngIf=\"!buttonDisable && !disableInput() && mode!=='read'\"\n (click)=\"changeImageSelected(getQuestion(question), doc)\">\n <i class=\"fa fa-times-circle\" aria-hidden=\"true\"></i>\n </div>\n </div>\n <div class=\"dz-preview dz-processing dz-image-preview dz-error dz-complete\"\n (click)=\"logofile1.click()\" *ngIf=\"!getImg(getQuestion(question), doc)\">\n <div class=\"docname\" *ngIf=\"getQuestion(question).filePropertie.allowedDocuments.length > 1\">\n {{doc}}</div>\n <div class=\"dz-image pointer-cursor\">\n </div>\n <input #logofile1 type=\"file\" accept=\"/*;capture=camera\" style=\"display:none;\"\n [disabled]=\"buttonDisable || disableInput()\"\n (change)=\"filesSelected($event, getQuestion(question), doc)\">\n <div class=\"dz-error-mark\">\n <a class=\"btn btn-icon btn-light-success btn-circle mr-2\"><i\n class=\"text-dark-50 flaticon-upload\"></i></a>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for checkbox -->\n <div class=\"col-12\"\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers > 1\">\n <div class=\"checkbox-list\">\n <label class=\"checkbox\" *ngFor=\"let value of getQuestion(question).labelValues\">\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question))\"\n (change)=\"listChange($event, value, getQuestion(question))\"\n [disabled]=\"buttonDisable || disableInput()\">\n <span></span>\n {{value}}\n </label>\n </div>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for radio -->\n <div class=\"col-12\"\n *ngIf=\"getQuestion(question).fieldDataType === 'list' && getQuestion(question).listPropertie.maxAnswers === 1\">\n <div class=\"radio-list\">\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\n [checked]=\"isChecked(value, getQuestion(question))\"\n (change)=\"listChange($event, value, getQuestion(question))\">\n <span></span>\n {{value}}\n </label>\n </div>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for toggel boolean -->\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'bool'\">\n <div class=\"radio-list\">\n <label class=\"radio\" *ngFor=\"let value of getQuestion(question).labelValues\">\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\n [checked]=\"isBooleanChecked(value, getQuestion(question))\"\n (change)=\"booleanChange($event, value, getQuestion(question))\">\n <span></span>\n {{value}}\n </label>\n </div>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for Text -->\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'plainText'\">\n <input *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter<=100\"\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\" \n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\"\n class=\"form-control1 form-control-solid\" type=\"text\" [disabled]=\"buttonDisable || disableInput()\">\n <textarea rows=\"3\" *ngIf=\"getQuestion(question).plainTextPropertie.maxNoOfLetter>100\"\n [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\n [minlength]=\"getQuestion(question).plainTextPropertie.minNoOfLetter\"\n [maxlength]=\"getQuestion(question).plainTextPropertie.maxNoOfLetter\" [disabled]=\"buttonDisable || disableInput()\"\n class=\"form-control2 form-control-solid\"></textarea>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for Number -->\n <div class=\"col-12\" *ngIf=\"getQuestion(question).fieldDataType === 'number'\">\n <input [(ngModel)]=\"answers[getQuestion(question).labelName]\" (input)=\"onSubmit('inputChange');\"\n [min]=\"getQuestion(question).numberPropertie.start\" [max]=\"getQuestion(question).numberPropertie.end\"\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"number\"\n (keypress)=\"isNumeric($event)\">\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for Date -->\n <div class=\"col-12 d-flex\" *ngIf=\"getQuestion(question).fieldDataType === 'date'\">\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\n [min]=\"getMindate(question)\" [(ngModel)]=\"answers[getQuestion(question).labelName]\"\n (dateChange)=\"onSubmit('inputChange')\" [disabled]=\"buttonDisable || disableInput()\"\n (click)=\"picker.open()\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\"></mat-datepicker>\n <div class=\"mt-2 text-danger\" *ngIf=\"apiError[getQuestion(question).labelName]\">\n {{apiError[getQuestion(question).labelName]}}</div>\n </div>\n <!-- for Datagrid -->\n <div class=\"table-responsive1\"\n *ngIf=\"getQuestion(question).fieldDataType === 'dataGrid' && dataGridColumnsAnswerList[getQuestion(question).labelName] && dataGridColumnsAnswerList[getQuestion(question).labelName].length > 0\">\n <table class=\"table table-head-custom table-head-bg table-borderless table-vertical-center\">\n <thead>\n <th *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\n {{column.columnId}}</th>\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\n </th>\n <th *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\n </th>\n </thead>\n <tbody>\n <tr *ngFor=\"let column of dataGridColumnsAnswerList[getQuestion(question).labelName];let i =index\">\n <td *ngFor=\"let data of column | keyvalue\">\n <div\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'date'\">\n {{data.value | date : newTimeDateFormat}}\n </div>\n <div\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) === 'bool'\">\n {{getBoolValue(data.value)}}\n </div>\n <div\n *ngIf=\"getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'date' && getColumnType(getQuestion(question).dataGridProperties.dataGridColumns, data.key) !== 'bool'\">\n {{data.value}}\n </div>\n </td>\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\n <i class=\"fa fa-pen\" (click)=\"editDataGrid(getQuestion(question), column)\"></i>\n </td>\n <td *ngIf=\"!buttonDisable && !disableInput() && !showDataGrid[getQuestion(question).labelName]\">\n <i class=\"fa fa-trash\" (click)=\"deleteDataGrid(getQuestion(question), column)\"></i>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div class=\"gridSection\" *ngIf=\"showDataGrid[getQuestion(question).labelName]\">\n <div class=\"gridColumn\" *ngFor=\"let column of getQuestion(question).dataGridProperties.dataGridColumns\">\n <label>{{column.label}}\n <span class=\"red\" *ngIf=\"column.mandatory\">*</span>\n </label>\n <!-- for checkbox -->\n <div class=\"col-12\" *ngIf=\"column.dataType === 'list'\">\n <div class=\"checkbox-list\">\n <label class=\"checkbox\" *ngFor=\"let value of column.listPropertie.values\">\n <input type=\"checkbox\" [checked]=\"isChecked(value, getQuestion(question), column)\"\n (change)=\"listChange($event, value, getQuestion(question), column)\"\n [disabled]=\"buttonDisable || disableInput()\">\n <span></span>\n {{value}}\n </label>\n </div>\n </div>\n <!-- for toggel boolean -->\n <div class=\"col-12\" *ngIf=\"column.dataType === 'bool'\">\n <div class=\"radio-list\">\n <label class=\"radio\">\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\n [checked]=\"isBooleanChecked('yes', getQuestion(question), column)\"\n (change)=\"booleanChange($event, 'yes', getQuestion(question), column)\">\n <span></span>\n Yes\n </label>\n <label class=\"radio\">\n <input type=\"radio\" [disabled]=\"buttonDisable || disableInput()\"\n [checked]=\"isBooleanChecked('no', getQuestion(question), column)\"\n (change)=\"booleanChange($event, 'no', getQuestion(question), column)\">\n <span></span>\n No\n </label>\n </div>\n </div>\n <!-- for Text -->\n <div class=\"col-12\" *ngIf=\"column.dataType === 'plainText'\">\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\n [disabled]=\"buttonDisable || disableInput()\" class=\"form-control1 form-control-solid\" type=\"text\">\n </div>\n <!-- for Number -->\n <div class=\"col-12\" *ngIf=\"column.dataType === 'number'\">\n <input [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\n [disabled]=\"buttonDisable || disableInput()\" [min]=\"column.numberPropertie.start\"\n [max]=\"column.numberPropertie.end\" class=\"form-control1 form-control-solid\" type=\"number\">\n </div>\n <!-- for Date -->\n <div class=\"col-12 d-flex\" *ngIf=\"column.dataType === 'date'\">\n <input class=\"form-control1\" [matDatepicker]=\"picker\" [max]=\"getMaxdate(question)\"\n [min]=\"getMindate(question)\"\n [(ngModel)]=\"dataGridColumns[getQuestion(question).labelName + '=' + column.order]\"\n [disabled]=\"buttonDisable || disableInput()\" (click)=\"picker.open()\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker [disabled]=\"buttonDisable || disableInput()\">\n </mat-datepicker>\n </div>\n </div>\n <div class=\"act-btns\">\n <button type=\"button\" class=\"btn btn-light-primary font-weight-bold\" id=\"btnCancelQ\"\n (click)=\"cancelAddorUpdate(getQuestion(question))\">\n Cancel\n </button>\n <button type=\"button\" class=\"btn btn-primary font-weight-bold\" id=\"btnSaveQ\"\n (click)=\"saveDataGridColumn(getQuestion(question))\">Add</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-12 col-12 col-sm-12 col-lg-12 p-0 submit-pad\"\n *ngIf=\"type !== 'qnrLinkProvider' && source!=='proLead' && (uuid || source === 'customer-details' || source === 'proDonation') && !disableInput()\">\n <button class=\"normal-btn\" mat-flat-button [class.spinner]=\"buttonDisable\" id=\"btnSubmit\"\n [class.spinner-darker-success]=\"buttonDisable\" [class.spinner-center]=\"buttonDisable\"\n (click)=\"!buttonDisable && onSubmit('submit')\" [disabled]=\"buttonDisable\"\n [class.disabled]=\"buttonDisable\">{{(type == 'qnr-link') ? 'Submit' : 'Update'}}</button>\n </div>\n </div>\n </div>\n</section>\n<section class=\"cons-inbox no-padding-small\" *ngIf=\"showservice\">\n <div class=\"container consumer-dashhome\" *ngIf=\"!type\">\n <div class=\"card title-gb rounded-0\" *ngIf=\"uuid\">\n <h5 class=\"mt-2 bold\">{{questionnaire_heading | capitalizeFirst}} <a class=\"pull-left me-4 back-btn\"\n (click)=\"goBack()\"><i class=\"fa fa-arrow-left\"></i></a></h5>\n </div>\n </div>\n <app-common-innerloading-spinner *ngIf=\"loading\"></app-common-innerloading-spinner>\n <div class=\"d-flex flex-column-fluid pull-right me-2 mb-4\"\n *ngIf=\"type !== 'qnrLinkProvider' && !buttonDisable && waitlistStatus\">\n <button class=\"normal-btn edit\" mat-flat-button (click)=\"editQnr()\" id=\"btnEditQNR\">Edit</button>\n </div>\n <div class=\"d-flex flex-column-fluid width-100\" [class.qnrDisableState]=\"disableInput()\"\n [class.p-0]=\"uuid && (source === 'consCheckin' || source === 'consAppt' || source === 'consDonationDetails' )\">\n <div class=\"col-xl-12 force_center p-0\" [class.p-0]=\"uuid\"\n [class.no-padding-small]=\"source && source=='ivr'\">\n <div class=\"\">\n <div class=\"\" *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\n <div *ngIf=\"itemArray.length == 0 \">\n <div class=\"form-group mgn-0 border-dashed text-center\" *ngFor=\"let question of qnr.value\">\n <div class=\"qnr-section\" *ngIf=\"getSectionCount() > 1\">\n {{getQuestion(question).question.sectionName}}</div>\n <label class=\"col-12 quest pointer-cursor\"\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\n <div>\n <img src=\"{{cdnPath}}assets/images/service-options.svg\" alt=\"Service Options\" class=\"img-fluid pb-0\"\n width=\"300\" height=\"300\">\n </div>\n <div class=\"pro-only\" *ngIf=\"showProviderText(getQuestion(question).question)\">For Providers</div>\n <span class=\"red\" *ngIf=\"getQuestion(question).question.mandatory\">*</span>\n <div>\n <span class=\"text-primary font-weight-bold\">Please Choose your Pet</span>\n </div>\n <div class=\"mt-3\">\n <span class=\"btn btn-light font-weight-bold\">Continue</span>\n </div>\n </label>\n </div>\n </div>\n </div>\n <div class=\"col-md-12 col-12 col-sm-12 mb-4 p-0\" *ngIf=\"showItem\">\n <div>\n <div class=\"card-border\" *ngFor=\" let items of itemArray\">\n\n <div class=\"d-flex justify-content-between\">\n <div>\n <div class=\"text-capitalize\">\n <div class=\"\">\n <span class=\"text-primary\">\n {{items.item}}<br>\n </span>\n </div>\n </div>\n </div>\n <div class=\"d-flex border-apply px-0\">\n <div (click)=\"decrement(items);\" class=\"pointer-cursor quantity quantity-1\">\n <span class=\"p-10\">-</span>\n </div>\n <div class=\"mx-2 pointer-cursor\"><span class=\"quantity\"\n *ngIf=\"items && items.columnItem && items.columnItem[0] && items.columnItem[0].answer && items.columnItem[0].answer.dataGridList && items.columnItem[0].answer.dataGridList[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0] && items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity\">\n {{items.columnItem[0].answer.dataGridList[0].dataGridListColumn[0].quantity}}</span>\n </div>\n <div (click)=\"increment(items);\" class=\"pointer-cursor quantity quantity-1\">\n <span class=\"p-10\">+</span>\n </div>\n </div>\n </div>\n <div>\n <span class=\"text-primary\"><span><i class=\"fa fa-inr\"></i>\n {{items.price * getItemQuantity(items)}}/-\n </span>\n </span>\n </div>\n </div>\n <div class=\"clearfix\"></div>\n <div *ngIf=\"showItem &&itemArray.length > 0\">\n <div *ngFor=\"let qnr of groupedQnr | keyvalue\" [class.section-shadow]=\"getSectionCount() > 1\">\n <div *ngFor=\"let question of qnr.value\">\n <label class=\"col-12 quest pointer-cursor\"\n (click)=\"showDataGridAddSectionn(getQuestion(question).question, true)\">\n <span class=\"btn btn-light font-weight-bold\"><i class=\"fa fa-plus text-white\"></i>Add</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</section>", styles: [".dropzone{min-height:auto!important}.question-box{margin-top:10px}.btn-light{background-color:#1e4079!important;padding:5px 25px!important;color:#fff!important}.quest-outer{padding:10px}.error-msg{color:red}.upload-btn{background:#fff;border:1px solid;font-size:small}.card-border{box-shadow:0 0 5px 5px #f0f0f0!important;padding:10px 30px!important;margin:20px 10px!important;cursor:pointer!important;border-radius:10px!important}.border-apply{border:2px solid #1e4079!important;border-radius:20px!important}.quantity{font-size:20px!important;font-weight:700!important}.quantity-1:hover{background-color:#1e4079!important;color:#fff!important;font-weight:700!important;border-radius:50%!important;padding:-2px 12px!important}::ng-deep .mat-checkbox-layout{font-weight:400!important}.force_center{margin-left:auto;margin-right:auto}.input-group-text{display:-webkit-box;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.65rem 1rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#3f4254;text-align:center;white-space:nowrap;background-color:#f3f6f9!important;border:1px solid #E4E6EF!important;border-radius:.42rem;border-top-left-radius:0;border-bottom-left-radius:0;cursor:pointer}.w_100{width:100%}.img_fit{width:120px;height:120px}.dropzone .dropzone-default{border:1px dashed #EBEDF3!important}.select-box{padding:10px!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important}.normal-btn{padding:5px 20px;border:none!important}.edit{padding:3px 25px;border-radius:20px!important}.mgn-0{margin-left:0!important;margin-right:0!important;margin-bottom:10px!important}.quest{font-size:1.1rem!important}.mt-3 a:hover{text-decoration:underline!important}.dzimage,.dz-image{border:1px dashed #ccc}.gal_action{position:absolute;top:20px;right:-10px;background:#00000080;width:20px;height:20px;text-align:center;border-radius:50%;cursor:pointer}.single-file{padding:0!important;text-align:initial!important;border:none!important}.single-file .dz-preview{position:relative!important;display:inline-block!important;vertical-align:top!important;margin:16px!important;min-height:100px!important}.single-file .gal_action{top:-5px!important}.pro-only{float:right;color:red;font-size:.8rem}.qnrDisableState .card,.qnrDisableState .dropzone-default,.qnrDisableState .dz-image-preview{background:#eeeeee9e!important}.qnr-section{font-weight:700;padding-bottom:10px;text-transform:uppercase}.section-shadow{margin:20px 10px;padding:20px!important;box-shadow:0 0 10px #0000001f!important}.gridSection .gridColumn{padding:15px}.gridSection .gridColumn label{padding:0 12.5px!important;font-weight:400!important;color:#3f4254!important;font-size:.9rem!important}.gridSection .act-btns .btn{padding:5px 10px!important;margin:5px!important}.gridSection .act-btns{padding:0 20px}.fa-plus-circle{font-size:1.5rem!important}.addicon{color:#1e4079!important;cursor:pointer}.fa-trash,.fa-pen{color:#000!important;font-size:1rem!important}.dz-preview input{width:121px!important;border:1px solid #ccc}.submit-pad{padding:0 10px 20px!important}.form-group.card{border:1px solid #dadce063!important;border-radius:8px!important;padding:5px!important}.docname{width:120px;margin-bottom:5px;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important}@media (max-width: 750px){.normal-btn{padding:3px 10px;border:none!important}.edit{padding:2px 12px;border-radius:10px!important}}.col-xl-12,.col-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;width:100%;padding-right:12.5px;padding-left:12.5px}@media (min-width: 1200px){.col-xl-12{flex:0 0 100%;max-width:100%}}.qnrsec{padding:10px}.p-10{padding:8px!important}.form-control1{display:block!important;width:100%!important;height:calc(1.5em + 1.3rem + 2px)!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-control2{display:block!important;width:100%!important;padding:.65rem 1rem!important;font-size:1rem!important;font-weight:400!important;line-height:1.5!important;color:#3f4254!important;background-color:#fff!important;background-clip:padding-box!important;border:1px solid #E4E6EF!important;border-radius:.42rem!important;box-shadow:none!important;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out!important}.form-group label{font-size:1rem;font-weight:400;color:#3f4254}label{display:inline-block;margin-bottom:.5rem}.col-12{flex:0 0 100%;max-width:100%}.radio-list .radio span{margin-right:.75rem}.radio>span{background-color:#ebedf3;border:1px solid transparent}.radio>span{height:18px;width:18px}.radio>span{border-radius:50%;background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0}.radio-list .radio{margin-bottom:1rem}.radio{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.radio>input{position:absolute;z-index:-1;opacity:0}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid #EBEDF3;border-radius:.42rem}.radio-list .radio:last-child{margin-bottom:0}@media (min-width: 992px){.col-lg-12{flex:0 0 100%;max-width:100%}}.dropzone.dropzone-default .dz-preview .dz-image{border-radius:.42rem}.btn.btn-icon i{padding:0;margin:0}.btn i{font-size:1.3rem;padding-right:.35rem;vertical-align:middle;line-height:1;display:inline-flex}.btn i{transition:color .15s ease,background-color .15s ease,border-color .15s ease,box-shadow .15s ease}.text-dark-50{color:#7e8299!important}.btn.btn-icon.btn-circle{border-radius:50%}.btn.btn-light-success{color:#1bc5bd;background-color:#c9f7f5;border-color:transparent}.btn.btn-icon{display:inline-flex;align-items:center;justify-content:center;padding:0;height:calc(1.5em + 1.3rem + 2px);width:calc(1.5em + 1.3rem + 2px)}.btn{display:inline-block;font-weight:400;color:#3f4254;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.65rem 1rem;font-size:1rem;line-height:1.5;border-radius:.42rem;transition:color .3s ease-in-out,background-color .3s ease-in-out,border-color .3s ease-in-out,box-shadow .3s ease-in-out}.radio>input:checked~span{background-color:#1e4079}.radio>input:checked~span:after{background-color:#fff;border-color:#fff}.radio>input:checked~span:after{display:block}.radio>span:after{width:6px;height:6px}.radio>span:after{content:\"\";border-radius:100%!important}i{font-size:1.25rem;color:#b5b5c3}.dropzone{min-height:auto}.btn.btn-light-primary{background-color:#f9e2a7;border-color:transparent}.checkbox-lis .checkbox span{margin-right:.75rem}.checkbox>span{background-color:#ebedf3;border:1px solid transparent}.checkbox>span{height:18px;width:18px}.checkbox>span{background-color:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:.42rem}.checkbox>span:after{width:5px;height:10px}.checkbox>span:after{content:\"\";border-color:transparent;border-style:solid;border-width:0 2px 2px 0!important;transform:rotate(45deg);margin-top:-2px}.checkbox-list{display:flex;flex-direction:column}.checkbox>input{position:absolute;z-index:-1;opacity:0}.checkbox>input:checked~span{background-color:#1e4079}.checkbox>input:checked~span:after{border-color:#fff}.checkbox{display:flex;align-items:center;position:relative;text-align:left;cursor:pointer;font-size:1rem;transition:all .3s ease;margin:0}.add-plus{color:#fff!important}.border-dashed{padding:10px!important}.add-plus-black{color:#000!important}.plus-black .fa .fa-plus{color:#000!important;font-size:12px!important}.checkbox-list .checkbox{margin-bottom:1rem}.checkbox-list .checkbox span{margin-right:.75rem}.checkbox-list .checkbox:last-child{margin-bottom:0}.btn.btn-primary{color:#fff;background-color:#1e4079;border-color:#1e4079}.font-weight-bold{font-weight:500!important}button{font-family:inherit}.form-control1:focus{color:#3f4254!important;background-color:#fff!important;border-color:#69b3ff!important;outline:0!important}.table.table-head-bg thead th:first-child{border-radius:.42rem}.table.table-head-bg thead tr,.table.table-head-bg thead th{background-color:#f3f6f9;border-bottom:0;letter-spacing:1px}.table.table-head-custom thead tr,.table.table-head-custom thead th{font-weight:600;color:#b5b5c3!important;font-size:.9rem;text-transform:uppercase}.table thead th{font-weight:600;font-size:1rem;border-bottom-width:1px;padding-top:1rem;padding-bottom:1rem}.table th,.table td{padding:.75rem}.table.table-head-bg thead tr:last-child,.table.table-head-bg thead th:last-child{border-top-right-radius:.42rem;border-bottom-right-radius:.42rem}.table-responsive1{display:block;width:100%;overflow-x:auto}.text-white{color:#fff!important;font-size:15px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:13%}.text-primary{color:#1e4079!important}.text-link{color:#1a6888}@media (min-width: 300px) and (max-width: 750px){.item{font-size:10px!important}.item_price{font-size:9px!important}.details{border:2px solid #1e4079!important;border-radius:10px!important;max-width:23%}}@media (max-width: 450px){.item{font-size:10px!important}.item_price{font-size:9px!important}}@media (min-width: 600px) and (max-width: 992px){.items{font-size:18px!important}.item_prices{font-size:16px!important}}@media (max-width: 450px){.incre{border:2px solid blue!important;border-radius:100px!important;max-width:20.66667%!important}}.font-weight-bold{font-weight:700!important}@media (max-width: 750px){.incre{max-width:20.66667%!important}}.incre{border:2px solid blue!important;border-radius:100px!important;max-width:10.66667%}@media (max-width: 893px){.disp-none-small{display:none!important}}@media (min-width: 800px){.disp-none-large{display:none!important}}.fa-inr{font-size:15px!important;color:#1e4079!important}.text-primary{font-weight:700!important}.flaticon-upload:before{content:\"\\f11d\"}[class*=\" flaticon-\"]:before{font-family:Flaticon;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;line-height:1;text-decoration:inherit;text-rendering:optimizeLegibility;text-transform:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased}.dropzone{position:relative!important;display:inline-block!important;vertical-align:top!important;min-height:100px!important}.dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dz-image{border:1px dashed #ccc}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}\n"] }]
1358
1358
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.WordProcessor }, { type: i3.LocalStorageService }, { type: i4.DateTimeProcessor }, { type: i5.MatDialog }, { type: i6.FileService }, { type: i7.CommonService }, { type: i8.QuestionaireService }, { type: i9.ErrorMessagingService }, { type: i10.ToastService }, { type: i11.SharedService }, { type: i12.JGalleryService }, { type: i13.Location }], propDecorators: { questionnaireList: [{
1359
1359
  type: Input
1360
1360
  }], source: [{
@@ -1391,4 +1391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1391
1391
  type: ViewChild,
1392
1392
  args: ['logofile1']
1393
1393
  }] } });
1394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTakgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV3hGLE1BQU0sT0FBTyxzQkFBc0I7SUF3RXZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7SUFDQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBbkZELGlCQUFpQixDQUFNO0lBQ3ZCLE1BQU0sQ0FBTTtJQUNaLFNBQVMsQ0FBTTtJQUNmLGVBQWUsQ0FBTTtJQUNyQixlQUFlLENBQU07SUFDckIsSUFBSSxDQUFNO0lBQ1YsSUFBSSxDQUFNO0lBQ1YsY0FBYyxDQUFNO0lBQ3BCLFdBQVcsQ0FBTTtJQUNqQixlQUFlLENBQU07SUFDckIsT0FBTyxDQUFNO0lBQ2IsSUFBSSxDQUFNLENBQUMseUNBQXlDO0lBQ25ELFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3RDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3pDLFFBQVEsQ0FBTTtJQUNkLFdBQVcsQ0FBTTtJQUMxQixPQUFPLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLFlBQVksR0FBUSxFQUFFLENBQUM7SUFDdkIs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SztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBbUJrQixLQUFLO3NCQUE1QixTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uYWlyZVNlcnZpY2UgfSBmcm9tICcuLi9xdWVzdGlvbmFpcmUtc2VydmljZSc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlU2VydmljZSB9IGZyb20gJy4uLy4uL2ZpbGUtc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3RvYXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaG93dXBsb2FkZmlsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Nob3d1cGxvYWRmaWxlL3Nob3d1cGxvYWRmaWxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVUaW1lUHJvY2Vzc29yIH0gZnJvbSAnLi4vLi4vY2FsZW5kYXIvZGF0ZS10aW1lL2RhdGV0aW1lLXByb2Nlc3Nvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXJyb3JNZXNzYWdpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXJyb3ItbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29yZFByb2Nlc3NvciB9IGZyb20gJy4uLy4uL3dvcmQtcHJvY2Vzc29yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBKR2FsbGVyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9qLWdhbGxlcnkvai1nYWxsZXJ5LnNlcnZpY2UnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1xdWVzdGlvbm5haXJlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgcXVlc3Rpb25uYWlyZUxpc3Q6IGFueTtcclxuICBASW5wdXQoKSBzb3VyY2U6IGFueTtcclxuICBASW5wdXQoKSBhY2NvdW50SWQ6IGFueTtcclxuICBASW5wdXQoKSBxdWVzdGlvbkFuc3dlcnM6IGFueTtcclxuICBASW5wdXQoKSBjdXN0b21lckRldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSB1dWlkOiBhbnk7XHJcbiAgQElucHV0KCkgdHlwZTogYW55O1xyXG4gIEBJbnB1dCgpIHdhaXRsaXN0U3RhdHVzOiBhbnk7XHJcbiAgQElucHV0KCkgb3JkZXJTdGF0dXM6IGFueTtcclxuICBASW5wdXQoKSBkb25hdGlvbkRldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSBzZXJ2aWNlOiBhbnk7XHJcbiAgQElucHV0KCkgbW9kZTogYW55OyAvLyBBZGRlZCBieSBtYW5pIHRvIGNoZWNrIHRoZSBmaWxlIHVwbG9hZFxyXG4gIEBPdXRwdXQoKSBmaWxlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSByZXR1cm5BbnN3ZXJzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQElucHV0KCkgdGVtcFR5cGU6IGFueTtcclxuICBASW5wdXQoKSBib29raW5nVHlwZTogYW55O1xyXG4gIGFuc3dlcnM6IGFueSA9IHt9O1xyXG4gIHNob3dEYXRhR3JpZDogYW55ID0ge307XHJcbiAgc2VsZWN0ZWRNZXNzYWdlOiBhbnkgPSBbXTtcclxuICBhcGlFcnJvcjogYW55ID0gW107XHJcbiAgcGFyYW1zOiBhbnk7XHJcbiAgZmlsZXVwbG9hZHByZUFuc3dlcnM6IGFueSA9IHt9O1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICBidXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgcXVlc3Rpb25zOiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZERvY3M6IGFueSA9IFtdO1xyXG4gIGRvY3VtZW50c1RvVXBsb2FkOiBhbnkgPSBbXTtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICB1cGxvYWRGaWxlc1RlbXA6IGFueSA9IFtdO1xyXG4gIGZpbGVzdG9VcGxvYWQ6IGFueSA9IFtdO1xyXG4gIGNoYW5nZUhhcHBlbmVkID0gZmFsc2U7XHJcbiAgdXBsb2FkZWRGaWxlczogYW55ID0gW107XHJcbiAgdXBsb2FkZWRJbWFnZXM6IGFueSA9IFtdO1xyXG4gIGJvb2tpbmdEZXRhaWxzOiBhbnkgPSBbXTtcclxuICBAVmlld0NoaWxkKCdsb2dvZmlsZTEnKSBmaWxlMiE6IEVsZW1lbnRSZWY7XHJcbiAgaW1hZ2VfbGlzdF9wb3B1cDtcclxuICBxdWVzdGlvbm5haXJlX2hlYWRpbmcgPSAnJztcclxuICBjdXN0b21lcl9sYWJlbCA9ICcnO1xyXG4gIGVkaXRRdWVzdGlvbm5haXJlID0gZmFsc2U7XHJcbiAgYXVkaW9WaWRlb0ZpbGVzOiBhbnkgPSBbXTtcclxuICBncm91cGVkUW5yOiBhbnkgPSBbXTtcclxuICBkYXRhR3JpZENvbHVtbnM6IGFueSA9IHt9O1xyXG4gIGRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3Q6IGFueSA9IFtdO1xyXG4gIHVwZGF0ZWRHcmlkSW5kZXg6IGFueSA9IHt9O1xyXG4gIG5ld1RpbWVEYXRlRm9ybWF0ID0gJyc7XHJcbiAgcW5yU3RhdHVzID0gJyc7XHJcbiAgY29tbWVudHM6IGFueSA9IHt9O1xyXG4gIHRkYXkgPSBuZXcgRGF0ZSgpO1xyXG4gIG1pbmRheSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEpO1xyXG4gIGRhdGFHcmlkTGlzdENvbHVtbnM6IGFueSA9IHt9O1xyXG4gIHNob3dxbnIhOiBib29sZWFuO1xyXG4gIGl0ZW06IGFueTtcclxuICBzaG93SXRlbSA9IGZhbHNlO1xyXG4gIHRvdGFsUHJpY2U6IGFueTtcclxuICBpdGVtTGVuZ3RoOiBhbnk7XHJcbiAgaXRlbUFycmF5OiBhbnkgPSBbXTtcclxuICBkYXRhR3JpZExpc3Q6IGFueSA9IFtdO1xyXG4gIGlkOiBudW1iZXIgPSAwO1xyXG4gIHBvc3RfRGF0YTogYW55O1xyXG4gIGRnTGlzdDogYW55O1xyXG4gIHNlcXVlbmNlSWQ6IGFueTtcclxuICBmaW5hbE9iamVjdExpc3Q6IGFueSA9IFtdO1xyXG4gIHNob3dzZXJ2aWNlID0gZmFsc2U7XHJcbiAgcXVlc1N0b3JlOiBhbnk7XHJcbiAgYWxsTGlzdDogc3RyaW5nID0gJyc7XHJcbiAgcG9wU2VhcmNoZXM6IGFueTtcclxuICBzZXJ2aWNlVG90YWxQcmljZTogbnVtYmVyID0gMDtcclxuICBlZGl0YWJsZUl0ZW06IGFueTtcclxuICBjZG5QYXRoOiBzdHJpbmcgPSAnJztcclxuICBjdXN0b21JRDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgd29yZFByb2Nlc3NvcjogV29yZFByb2Nlc3NvcixcclxuICAgIHByaXZhdGUgbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUHJvY2Vzc29yOiBEYXRlVGltZVByb2Nlc3NvcixcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbmFpcmVTZXJ2aWNlOiBRdWVzdGlvbmFpcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlcnJvclNlcnZpY2U6IEVycm9yTWVzc2FnaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdhbGxlcnlTZXJ2aWNlOiBKR2FsbGVyeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xyXG4gICAgdGhpcy5jZG5QYXRoID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENETlBhdGgoKTtcclxuICAgIHRoaXMuYWN0aXZhdGVkX3JvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShxcGFyYW1zID0+IHtcclxuICAgICAgdGhpcy5wYXJhbXMgPSBxcGFyYW1zO1xyXG4gICAgICBpZiAodGhpcy5wYXJhbXMudHlwZSkge1xyXG4gICAgICAgIHRoaXMuc291cmNlID0gdGhpcy5wYXJhbXMudHlwZTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNvdXJjZSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFjY291bnRJZCA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRBY2NvdW50SUQoKTtcclxuICAgICAgdGhpcy5jdXN0b21JRCA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDdXN0b21JRCgpO1xyXG4gICAgICBpZiAodGhpcy5wYXJhbXMudXVpZCkge1xyXG4gICAgICAgIHRoaXMudXVpZCA9IHRoaXMucGFyYW1zLnV1aWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnF1ZXN0aW9uYWlyZVNlcnZpY2UuZ2V0TWVzc2FnZSgpLnN1YnNjcmliZShtZXNzYWdlID0+IHtcclxuICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcclxuICAgICAgICBjYXNlICdxbnJWYWxpZGF0ZUVycm9yJzpcclxuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGVFcnJvcihtZXNzYWdlLnZhbHVlKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMgJiYgdGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXN0b1VwbG9hZCAmJiB0aGlzLnNvdXJjZSA9PT0gJ3Byb0xlYWQnKSB7XHJcbiAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZCA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzdG9VcGxvYWQ7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiU2VydmljZSBEZXRhaWxzOlwiLCB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0KTtcclxuICAgIGNvbnNvbGUubG9nKFwiU2VydmljZSBEZXRhaWxzOlwiLCB0aGlzLnNlcnZpY2UpO1xyXG4gICAgaWYgKHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknKSkge1xyXG4gICAgICB0aGlzLml0ZW1BcnJheSA9IHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknKTtcclxuICAgICAgaWYgKHRoaXMuaXRlbUFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5zaG93SXRlbSA9IHRydWU7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLml0ZW1BcnJheVwiLCB0aGlzLml0ZW1BcnJheSlcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VzdG9tZXJfbGFiZWwgPSB0aGlzLndvcmRQcm9jZXNzb3IuZ2V0VGVybWlub2xvZ3lUZXJtKCdjdXN0b21lcicpO1xyXG5cclxuICAgIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0KSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuc291cmNlKVxyXG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1jcmVhdGUnIHx8IHRoaXMuc291cmNlID09PSAnb25ldGltZScpIHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVsc1swXS5xdWVzdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgICAgICAvLyB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbnMsICdnZXQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tZXJEZXRhaWxzICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmUgJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZS5xdWVzdGlvbkFuc3dlcnMpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlLnF1ZXN0aW9uQW5zd2VycywgJ2dldCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3FuckRldGFpbHMnKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9ucztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdzZXJ2aWNlT3B0aW9uQXBwdCcpIHtcclxuICAgICAgICB0aGlzLnNob3dzZXJ2aWNlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3FucnBhcGVyJykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnV1aWQgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3FuclZpZXcnICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdjb25kdW1lck9yZGVyJyAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAnaXZyJyAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0ICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ubGFiZWxzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscztcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlF1ZXN0aW9uczpcIiwgdGhpcy5xdWVzdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2N1c3RvbWVyLWRldGFpbHMnICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmUpIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlTGlzdCA9IHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmU7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZS5xdWVzdGlvbkFuc3dlcnM7XHJcbiAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25zLCAnZ2V0Jyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMpIHtcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5maWxlcztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuYXVkaW9WaWRlbykge1xyXG4gICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuYXVkaW9WaWRlbztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXN0b1VwbG9hZCkge1xyXG4gICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZCA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzdG9VcGxvYWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3QpIHtcclxuICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3QgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0O1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5jb21tZW50cykge1xyXG4gICAgICAgIHRoaXMuY29tbWVudHMgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5jb21tZW50cztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuYW5zd2Vycykge1xyXG4gICAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5hbnN3ZXJzLmFuc3dlckxpbmUsICdpbml0Jyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc291cmNlID09ICdpdnInKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25BbnN3ZXJzLCAnZ2V0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRvbmF0aW9uRGV0YWlscyAmJiB0aGlzLmRvbmF0aW9uRGV0YWlscy5xdWVzdGlvbm5haXJlKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QgPSB0aGlzLmRvbmF0aW9uRGV0YWlscy5xdWVzdGlvbm5haXJlO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25BbnN3ZXJzO1xyXG4gICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9ucyAmJiB0aGlzLnF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25zLCAnZ2V0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51dWlkKSB7XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9uQW5zd2Vycykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbkFuc3dlcnM7XHJcbiAgICAgICAgdGhpcy5xbnJTdGF0dXMgPSAnc3VibWl0dGVkJztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzO1xyXG4gICAgICAgIHRoaXMucW5yU3RhdHVzID0gJ3JlbGVhc2VkJztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXSAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5xbnJTdGF0dXMgPSAncmVsZWFzZWQnO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbnMgJiYgdGhpcy5xdWVzdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9ucywgJ2dldCcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kaXNhYmxlRmllbGQoKVxyXG4gIH1cclxuXHJcbiAgLy9kaXNhYmxlIGZpZWxkXHJcbiAgZGlzYWJsZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMudGVtcFR5cGUgJiYgKHRoaXMudGVtcFR5cGUgPT09ICdMb2FuIFNhbmN0aW9uJyB8fCB0aGlzLnRlbXBUeXBlID09PSAnUmVqZWN0ZWQnKSkge1xyXG4gICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSB0cnVlO1xyXG4gICAgICAvLyB0aGlzLmRpc2FibGVJbnB1dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyAqLmNvbXBvbmVudC50c1xyXG4gIGFzSXNPcmRlcihhOiBhbnksIGI6IGFueSkge1xyXG4gICAgcmV0dXJuIDE7XHJcbiAgfVxyXG4gIGdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnY3VzdG9tZXItY3JlYXRlJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ3FuckRldGFpbHMnIHx8IHRoaXMuc291cmNlID09PSAnb25ldGltZScpIHtcclxuICAgICAgdGhpcy5ncm91cGVkUW5yID0gdGhpcy5jb21tb25TZXJ2aWNlLmdyb3VwQnkodGhpcy5xdWVzdGlvbnMsICdzZWN0aW9uTmFtZScpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdwcm9MZWFkJykge1xyXG4gICAgICB0aGlzLmdyb3VwZWRRbnIgPSB0aGlzLnF1ZXN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHJ2OiBhbnksIHg6IGFueSkge1xyXG4gICAgICAgIChydlt4LnF1ZXN0aW9uWydzZXF1bmNlSWQnXV0gPSBydlt4LnF1ZXN0aW9uWydzZXF1bmNlSWQnXV0gfHwgW10pLnB1c2goeCk7XHJcbiAgICAgICAgcmV0dXJuIHJ2O1xyXG4gICAgICB9LCB7fSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5ncm91cGVkUW5yID0gdGhpcy5xdWVzdGlvbnMucmVkdWNlKGZ1bmN0aW9uIChydjogYW55LCB4OiBhbnkpIHtcclxuICAgICAgICAocnZbeC5xdWVzdGlvblsnc2VjdGlvbk9yZGVyJ11dID0gcnZbeC5xdWVzdGlvblsnc2VjdGlvbk9yZGVyJ11dIHx8IFtdKS5wdXNoKHgpO1xyXG4gICAgICAgIHJldHVybiBydjtcclxuICAgICAgfSwge30pO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZXRWYWxpZGF0ZUVycm9yKGVycm9yczogYW55KSB7XHJcbiAgICB0aGlzLmFwaUVycm9yID0gW107XHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgZXJyb3Igb2YgZXJyb3JzKSB7XHJcbiAgICAgICAgdGhpcy5hcGlFcnJvcltlcnJvci5xdWVzdGlvbkZpZWxkXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuYXBpRXJyb3JbZXJyb3IucXVlc3Rpb25GaWVsZF0ucHVzaChlcnJvci5lcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldEFuc3dlcnMoYW5zd2VyRGF0YTogYW55LCB0eXBlPzogYW55KSB7XHJcbiAgICB0aGlzLmFuc3dlcnMgPSBuZXcgT2JqZWN0KCk7XHJcbiAgICB0aGlzLmRhdGFHcmlkQ29sdW1ucyA9IHt9O1xyXG4gICAgaWYgKHR5cGUgPT09ICdnZXQnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlID0gW107XHJcbiAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXMgPSBbXTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gW107XHJcbiAgICAgIGZvciAobGV0IGFuc3cgb2YgYW5zd2VyRGF0YSkge1xyXG5cclxuICAgICAgICBpZiAoYW5zdy5hbnN3ZXJMaW5lKSB7XHJcbiAgICAgICAgICBpZiAoYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlID09PSAnZmlsZVVwbG9hZCcpIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3Byb0xlYWQnKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXSAmJiBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmFjdGlvbiA9ICdhZGQnO1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uc3RhdHVzID0gJ0NPTVBMRVRFJztcclxuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnMzcGF0aCA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5zM3BhdGg7XHJcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS51aWQgPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0udWlkO1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uZHJpdmVJZCA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5kcml2ZUlkO1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0udXJsID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmtleU5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoYW5zdy5hbnN3ZXJMaW5lLmFuc3dlciAmJiBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0gJiYgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdnZXQnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXMucHVzaChhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0pO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWRGaWxlc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWUgKyAnPScgKyBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY29tbWVudHM7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkZWRGaWxlc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV07XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlLnB1c2goYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbGVzdG9VcGxvYWRbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmlsZXN0b1VwbG9hZFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dID0ge307XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGFuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZSA9PT0gJ2RhdGFHcmlkJykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdy5kYXRhR3JpZENvbHVtbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uc1tpICsgMV0gPSByb3cuZGF0YUdyaWRDb2x1bW5baV0uY29sdW1uW09iamVjdC5rZXlzKHJvdy5kYXRhR3JpZENvbHVtbltpXS5jb2x1bW4pWzBdXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0ucHVzaChjb2x1bW5zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgYW5zdyBvZiBhbnN3ZXJEYXRhKSB7XHJcbiAgICAgICAgaWYgKGFuc3cuYW5zd2VyW09iamVjdC5rZXlzKGFuc3cuYW5zd2VyKVswXV0pIHtcclxuICAgICAgICAgIHRoaXMuYW5zd2Vyc1thbnN3LmxhYmVsTmFtZV0gPSBhbnN3LmFuc3dlcltPYmplY3Qua2V5cyhhbnN3LmFuc3dlcilbMF1dO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgPT09ICdnZXQnKSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMudXBsb2FkZWRGaWxlcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0gPSBbXTtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSkuZm9yRWFjaChrZXkxID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdLnR5cGUuc3BsaXQoJy8nKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlWzBdICE9PSAnYXVkaW8nICYmIHR5cGVbMF0gIT09ICd2aWRlbycgfHwgKCh0eXBlWzBdID09PSAnYXVkaW8nIHx8IHR5cGVbMF0gPT09ICd2aWRlbycpICYmIHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdLnN0YXR1cyA9PT0gJ0NPTVBMRVRFJykpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldLnB1c2goa2V5MSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWQpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWRba2V5XSkuZm9yRWFjaChrZXkxID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0pIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XS5wdXNoKGtleTEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMub25TdWJtaXQoJ2luaXQnKTtcclxuICB9XHJcbiAgZmlsZXNTZWxlY3RlZChldmVudDogYW55LCBxdWVzdGlvbjogYW55LCBkb2N1bWVudDogYW55KSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldC5maWxlcztcclxuICAgIGlmIChpbnB1dCkge1xyXG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgaW5wdXQpIHtcclxuICAgICAgICBjb25zdCBmaWxlSW5wdXQgPSB7XHJcbiAgICAgICAgICBjYXB0aW9uOiBkb2N1bWVudCxcclxuICAgICAgICAgIGZpbGU6IGZpbGUsXHJcbiAgICAgICAgICBsYWJlbE5hbWU6IHF1ZXN0aW9uLmxhYmVsTmFtZVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbGVDaGFuZ2VkLmVtaXQoZmlsZUlucHV0KTtcclxuICAgICAgICBsZXQgdHlwZSA9IGZpbGUudHlwZS5zcGxpdCgnLycpO1xyXG5cclxuICAgICAgICB0aGlzLmFwaUVycm9yW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBbXTtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgICAgIGxldCBpbmRleDtcclxuICAgICAgICAgIGlmICh0eXBlWzBdID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGVbMF0gPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgaW5kZXggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVbMF0gPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZVswXSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb1ZpZGVvRmlsZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV1baW5kZXhdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0gPSBmaWxlO1xyXG4gICAgICAgIGlmICh0eXBlWzBdID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGVbMF0gPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlLnB1c2goZmlsZSk7XHJcbiAgICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5zZWxlY3RlZE1lc3NhZ2UuaW5kZXhPZihmaWxlKTtcclxuICAgICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlW2luZHhdWydwYXRoJ10gPSBlLnRhcmdldFsncmVzdWx0J107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzLmluZGV4T2YoZmlsZSk7XHJcbiAgICAgICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmF1ZGlvVmlkZW9GaWxlc1tpbmR4XVsncGF0aCddID0gZS50YXJnZXRbJ3Jlc3VsdCddO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmlsZTIgJiYgdGhpcy5maWxlMi5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5maWxlMi5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICAgIH1cclxuICB9XHJcbiAgY2hhbmdlSW1hZ2VTZWxlY3RlZChxdWVzdGlvbjogYW55LCBkb2N1bWVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgIGxldCB0eXBlID0gdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdLnR5cGUuc3BsaXQoJy8nKTtcclxuICAgICAgdHlwZSA9IHR5cGVbMF07XHJcbiAgICAgIGxldCBpbmRleDtcclxuICAgICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgIGluZGV4ID0gdGhpcy5zZWxlY3RlZE1lc3NhZ2UuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGluZGV4ID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXMuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxldGUgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdO1xyXG4gICAgICAgIHRoaXMuY29tbWVudHNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgZG9jdW1lbnRdID0gJyc7XHJcbiAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQW5zd2VyID0gdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uZmlsdGVyKChhbnN3ZXI6IGFueSkgPT4gYW5zd2VyLmNhcHRpb24gPT09IGRvY3VtZW50KTtcclxuICAgICAgICAgIGlmIChmaWx0ZXJlZEFuc3dlclswXSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YoZmlsdGVyZWRBbnN3ZXJbMF0pO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0pLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMudXBsb2FkZWRJbWFnZXMuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdID0gJ3JlbW92ZSc7XHJcbiAgICAgICAgdGhpcy5jb21tZW50c1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBkb2N1bWVudF0gPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgaXNOdW1lcmljKGV2dDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21tb25TZXJ2aWNlLmlzTnVtZXJpYyhldnQpO1xyXG4gIH1cclxuICBvblN1Ym1pdChrZXl0eXBlPzogYW55KSB7XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5hbnN3ZXJzW2tleV0pIHtcclxuICAgICAgICB0aGlzLmFuc3dlcnNba2V5XSA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWRba2V5XSkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldKS5mb3JFYWNoKGtleTEgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKSB7XHJcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0udHlwZS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICB0eXBlID0gdHlwZVswXTtcclxuICAgICAgICAgICAgbGV0IGluZHg7XHJcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgICAgICBpbmR4ID0gdGhpcy5zZWxlY3RlZE1lc3NhZ2UuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW5keCA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIGxldCBzdGF0dXMgPSAnYWRkJztcclxuICAgICAgICAgICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzW2tleV0gJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0pIHtcclxuICAgICAgICAgICAgICAgIHN0YXR1cyA9ICd1cGRhdGUnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0gJiYgdGhpcy5hbnN3ZXJzW2tleV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBbnN3ZXIgPSB0aGlzLmFuc3dlcnNba2V5XS5maWx0ZXIoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuY2FwdGlvbiA9PT0ga2V5MSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRBbnN3ZXJbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFuc3dlcnNba2V5XS5pbmRleE9mKGZpbHRlcmVkQW5zd2VyWzBdKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGVbMF07XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0ucHVzaCh7IGNhcHRpb246IGtleTEsIGFjdGlvbjogc3RhdHVzLCBtaW1lVHlwZTogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0udHlwZSwgdXJsOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5uYW1lLCBzaXplOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5zaXplLCBjb21tZW50czogdGhpcy5jb21tZW50c1trZXkgKyAnPScgKyBrZXkxXSwgZHJpdmVJZDogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0uZHJpdmVJZCwgdWlkOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS51aWQsIHN0YXR1czogJ0NPTVBMRVRFJyB9KTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0ucHVzaCh7IGNhcHRpb246IGtleTEsIGFjdGlvbjogc3RhdHVzLCBtaW1lVHlwZTogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0udHlwZSwgdXJsOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5uYW1lLCBzaXplOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5zaXplLCBjb21tZW50czogdGhpcy5jb21tZW50c1trZXkgKyAnPScgKyBrZXkxXSwgZHJpdmVJZDogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0uZHJpdmVJZCwgdWlkOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS51aWQsIHN0YXR1czogJ0NPTVBMRVRFJyB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSAmJiB0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBbnN3ZXIgPSB0aGlzLmFuc3dlcnNba2V5XS5maWx0ZXIoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuY2FwdGlvbiA9PT0ga2V5MSk7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkQW5zd2VyWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYW5zd2Vyc1trZXldLmluZGV4T2YoZmlsdGVyZWRBbnN3ZXJbMF0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmFuc3dlcnNba2V5XTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0gJiYgdGhpcy5hbnN3ZXJzW2tleV0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYW5zd2Vyc1trZXldO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmFuc3dlcnNba2V5XSkge1xyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1trZXldID0gW107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1trZXldICYmIE9iamVjdC5rZXlzKHRoaXMudXBsb2FkZWRGaWxlc1trZXldKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy51cGxvYWRlZEZpbGVzW2tleV0pLmZvckVhY2goa2V5MSA9PiB7XHJcbiAgICAgICAgICBpZiAoKCF0aGlzLmZpbGVzdG9VcGxvYWRba2V5XSB8fCAodGhpcy5maWxlc3RvVXBsb2FkW2tleV0gJiYgIXRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKSkgJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0gJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0gPT09ICdyZW1vdmUnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSAmJiB0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBbnN3ZXIgPSB0aGlzLmFuc3dlcnNba2V5XS5maWx0ZXIoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuY2FwdGlvbiA9PT0ga2V5MSk7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkQW5zd2VyWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYW5zd2Vyc1trZXldLmluZGV4T2YoZmlsdGVyZWRBbnN3ZXJbMF0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5wdXNoKHsgY2FwdGlvbjoga2V5MSwgYWN0aW9uOiAncmVtb3ZlJyB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZGF0YTogYW55ID0gW107XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3QpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgbGV0IG5ld0ZpbGVkOiBhbnkgPSB7fTtcclxuICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbnMuZmlsdGVyKChxdWVzdDogYW55KSA9PiB0aGlzLmdldFF1ZXN0aW9uKHF1ZXN0KS5sYWJlbE5hbWUgPT09IGtleSk7XHJcbiAgICAgIHF1ZXN0aW9uID0gcXVlc3Rpb25bMF0ucXVlc3Rpb247XHJcbiAgICAgIGZvciAobGV0IGdyaWRBbnN3ZXIgb2YgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2tleV0pIHtcclxuICAgICAgICBsZXQgY29sdW1uRGF0YTogYW55ID0gW107XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JpZEFuc3dlcikuZm9yRWFjaChrZXkxID0+IHtcclxuICAgICAgICAgIGxldCBuZXdUeXBlOiBhbnkgPSB7fTtcclxuICAgICAgICAgIGNvbnN0IGNvbHVtbkRldGFpbHMgPSBxdWVzdGlvbi5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zLmZpbHRlcigoY2xtbjogYW55KSA9PiBjbG1uLm9yZGVyID09PSBKU09OLnBhcnNlKGtleTEpKTtcclxuICAgICAgICAgIGlmIChjb2x1bW5EZXRhaWxzWzBdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblR5cGUgPSBjb2x1bW5EZXRhaWxzWzBdLmRhdGFUeXBlO1xyXG4gICAgICAgICAgICBuZXdUeXBlW2NvbHVtblR5cGVdID0gZ3JpZEFuc3dlcltrZXkxXTtcclxuICAgICAgICAgICAgY29sdW1uRGF0YS5wdXNoKHtcclxuICAgICAgICAgICAgICBjb2x1bW5JZDogY29sdW1uRGV0YWlsc1swXS5jb2x1bW5JZCxcclxuICAgICAgICAgICAgICBjb2x1bW46IG5ld1R5cGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IG5ld01hcDogYW55ID0ge307XHJcbiAgICAgICAgbmV3TWFwWydkYXRhR3JpZENvbHVtbiddID0gY29sdW1uRGF0YTtcclxuICAgICAgICBpZiAoIW5ld0ZpbGVkW3F1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdKSB7XHJcbiAgICAgICAgICBuZXdGaWxlZFtxdWVzdGlvbi5maWVsZERhdGFUeXBlXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdGaWxlZFtxdWVzdGlvbi5maWVsZERhdGFUeXBlXS5wdXNoKG5ld01hcCk7XHJcbiAgICAgIH1cclxuICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAnbGFiZWxOYW1lJzoga2V5LFxyXG4gICAgICAgICdhbnN3ZXInOiBuZXdGaWxlZFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHRoaXMuYW5zd2VycykuZm9yRWFjaChrZXkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5hcGlFcnJvcltrZXldID0gW107XHJcbiAgICAgIGxldCBuZXdNYXA6IGFueSA9IHt9O1xyXG4gICAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9ucy5maWx0ZXIoKHF1ZXN0OiBhbnkpID0+IHRoaXMuZ2V0UXVlc3Rpb24ocXVlc3QpLmxhYmVsTmFtZSA9PT0ga2V5KTtcclxuICAgICAgaWYgKHRoaXMuc291cmNlID09PSAnY3VzdG9tZXItY3JlYXRlJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ3FuckRldGFpbHMnIHx8IHRoaXMuc291cmNlID09PSAnb25ldGltZScpIHtcclxuICAgICAgICBxdWVzdGlvbiA9IHF1ZXN0aW9uWzBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHF1ZXN0aW9uID0gcXVlc3Rpb25bMF0ucXVlc3Rpb247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldIHx8IHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgIGxldCBhbnN3ZXIgPSB0aGlzLmFuc3dlcnNba2V5XTtcclxuICAgICAgICBpZiAocXVlc3Rpb24uZmllbGREYXRhVHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICBhbnN3ZXIgPSB0aGlzLmRhdGVQcm9jZXNzb3IudHJhbnNmb3JtVG9ZTURGb3JtYXQoYW5zd2VyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3TWFwW3F1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdID0gYW5zd2VyO1xyXG4gICAgICAgIGRhdGEucHVzaCh7XHJcbiAgICAgICAgICAnbGFiZWxOYW1lJzoga2V5LFxyXG4gICAgICAgICAgJ2Fuc3dlcic6IG5ld01hcFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIG5ld01hcCA9ICcnO1xyXG4gICAgICAgIC8vIGRhdGEucHVzaCh7XHJcbiAgICAgICAgLy8gJ2xhYmVsTmFtZSc6IGtleSxcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBsZXQgcG9zdERhdGE7XHJcbiAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdxbnJwYXBlcicpIHtcclxuICAgICAgcG9zdERhdGEgPSB7XHJcbiAgICAgICAgJ3F1ZXN0aW9ubmFpcmVJZCc6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0uaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLnF1ZXN0aW9ubmFpcmVJZCxcclxuICAgICAgICAnYW5zd2VyTGluZSc6IGRhdGFcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoa2V5dHlwZSA9PT0gJ3NlcnZpY2VPcHRpb24nKSB7XHJcbiAgICAgIHBvc3REYXRhID0ge1xyXG4gICAgICAgICdxdWVzdGlvbm5haXJlSWQnOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5xdWVzdGlvbm5haXJlSWQsXHJcbiAgICAgICAgJ2Fuc3dlckxpbmUnOiB0aGlzLmZpbmFsT2JqZWN0TGlzdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2l2cicgJiYgdGhpcy5jdXN0b21JRCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnZmZmZmZmZmZmZmZmZmZmZmZmZmZmJywgdGhpcy5xdWVzdGlvbm5haXJlTGlzdClcclxuICAgICAgcG9zdERhdGEgPSB7XHJcbiAgICAgICAgJ3F1ZXN0aW9ubmFpcmVJZCc6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0uaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLnF1ZXN0aW9ubmFpcmVJZCxcclxuICAgICAgICAnYW5zd2VyTGluZSc6IGRhdGFcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbm5haXJlTGlzdCcsIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QpXHJcbiAgICAgIHBvc3REYXRhID0ge1xyXG4gICAgICAgICdxdWVzdGlvbm5haXJlSWQnOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbm5haXJlSWQsXHJcbiAgICAgICAgJ2Fuc3dlckxpbmUnOiBkYXRhXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHBhc3NEYXRhID0geyAnYW5zd2Vycyc6IHBvc3REYXRhLCAnZmlsZXMnOiB0aGlzLnNlbGVjdGVkTWVzc2FnZSwgJ2F1ZGlvVmlkZW8nOiB0aGlzLmF1ZGlvVmlkZW9GaWxlcywgJ2ZpbGVzdG9VcGxvYWQnOiB0aGlzLmZpbGVzdG9VcGxvYWQsICdkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0JzogdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0LCAnY29tbWVudHMnOiB0aGlzLmNvbW1lbnRzIH07XHJcbiAgICBpZiAoa2V5dHlwZSA9PT0gJ2lucHV0Q2hhbmdlJykge1xyXG4gICAgICB0aGlzLmNoYW5nZUhhcHBlbmVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChrZXl0eXBlID09PSAnc3VibWl0Jykge1xyXG4gICAgICBpZiAodGhpcy5jaGFuZ2VIYXBwZW5lZCkge1xyXG4gICAgICAgIHRoaXMuc3VibWl0UXVlc3Rpb25uYWlyZShwYXNzRGF0YSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcclxuICAgICAgICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAncW5yLWxpbmsnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmV0dXJuQW5zd2Vycy5lbWl0KCdub2NoYW5nZScpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0UW5yKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdGhpcy5yZXR1cm5BbnN3ZXJzLmVtaXQocGFzc0RhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXREYXRlKGRhdGU6IGFueSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpO1xyXG4gIH1cclxuICBsaXN0Q2hhbmdlKGV2OiBhbnksIHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBhbnksIGNvbHVtbj86IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgIT09ICdkYXRhR3JpZCcpIHtcclxuICAgICAgaWYgKGV2LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmxpc3RQcm9wZXJ0aWUgJiYgcXVlc3Rpb24ubGlzdFByb3BlcnRpZS5tYXhBbnN3ZXJzICYmIHF1ZXN0aW9uLmxpc3RQcm9wZXJ0aWUubWF4QW5zd2VycyA+IDEpIHtcclxuICAgICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXVswXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uc3BsaWNlKGluZHgsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0pIHtcclxuICAgICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXS5wdXNoKHZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXS5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdLnNwbGljZShpbmR4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgaXNDaGVja2VkKHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBhbnksIGNvbHVtbj86IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgIT09ICdkYXRhR3JpZCcpIHtcclxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YodmFsdWUpO1xyXG4gICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSkge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdLmluZGV4T2YodmFsdWUpO1xyXG4gICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGJvb2xlYW5DaGFuZ2UoZXY6IGFueSwgdmFsdWU6IGFueSwgcXVlc3Rpb246IGFueSwgY29sdW1uPzogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb24uZmllbGREYXRhVHlwZSAhPT0gJ2RhdGFHcmlkJykge1xyXG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9ICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAneWVzJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChldi50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPSAodmFsdWUgPT09ICd5ZXMnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgaXNCb29sZWFuQ2hlY2tlZCh2YWx1ZTogYW55LCBxdWVzdGlvbjogYW55LCBjb2x1bW4/OiBhbnkpIHtcclxuICAgIHZhbHVlID0gKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd5ZXMnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlICE9PSAnZGF0YUdyaWQnKSB7XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSAhPT0gJycgJiYgdHlwZW9mIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID0gSlNPTi5wYXJzZSh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSlcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSAhPT0gJycgJiYgdHlwZW9mIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9IEpTT04ucGFyc2UodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSlcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc3VibWl0UXVlc3Rpb25uYWlyZShwYXNzRGF0YTogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygnZmRmZicsIHBhc3NEYXRhKVxyXG4gICAgY29uc3QgZGF0YVRvU2VuZDogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGNvbnN0IGJsb2Jwb3N0X0RhdGEgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkocGFzc0RhdGEuYW5zd2VycyldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcclxuICAgIGRhdGFUb1NlbmQuYXBwZW5kKCdxdWVzdGlvbicsIGJsb2Jwb3N0X0RhdGEpO1xyXG4gICAgdGhpcy5idXR0b25EaXNhYmxlID0gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgdXBsb2FkQXVkaW9WaWRlbyhkYXRhOiBhbnksIHR5cGU6IGFueSkge1xyXG4gICAgaWYgKGRhdGEudXJscyAmJiBkYXRhLnVybHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgcG9zdERhdGE6IGFueSA9IHtcclxuICAgICAgICB1cmxzOiBbXVxyXG4gICAgICB9O1xyXG4gICAgICBmb3IgKGNvbnN0IHVybCBvZiBkYXRhLnVybHMpIHtcclxuICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5maWxlc3RvVXBsb2FkW3VybC5sYWJlbE5hbWVdW3VybC5kb2N1bWVudF07XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLnZpZGVvYXVkaW9TM1VwbG9hZChmaWxlLCB1cmwudXJsKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHBvc3REYXRhWyd1cmxzJ10ucHVzaCh7IHVpZDogdXJsLnVpZCwgbGFiZWxOYW1lOiB1cmwubGFiZWxOYW1lIH0pO1xyXG4gICAgICAgICAgICBpZiAoZGF0YS51cmxzLmxlbmd0aCA9PT0gcG9zdERhdGFbJ3VybHMnXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbnNDaGVja2luJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyV2FpdGxpc3RRbnJVcGxvYWRTdGF0dXNVcGRhdGUodGhpcy51dWlkLCB0aGlzLmFjY291bnRJZCwgcG9zdERhdGEpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93RXJyb3IodGhpcy53b3JkUHJvY2Vzc29yLmdldFByb2plY3RFcnJvck1lc3NzYWdlcyhlcnJvck9iaikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY29uc0FwcHQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uYWlyZVNlcnZpY2UuY29uc3VtZXJBcHB0UW5yVXBsb2FkU3RhdHVzVXBkYXRlKHRoaXMudXVpZCwgdGhpcy5hY2NvdW50SWQsIHBvc3REYXRhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzR29iYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yT2JqID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3JPYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbnNPcmRlcicgfHwgdHlwZSA9PT0gJ3BhcGVyJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyT3JkZXJRbnJVcGxvYWRTdGF0dXNVcGRhdGUodGhpcy51dWlkLCB0aGlzLmFjY291bnRJZCwgcG9zdERhdGEpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93RXJyb3IodGhpcy53b3JkUHJvY2Vzc29yLmdldFByb2plY3RFcnJvck1lc3NzYWdlcyhlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY29uc0RvbmF0aW9uRGV0YWlscycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25haXJlU2VydmljZS5jb25zdW1lckRvbmF0aW9uUW5yVXBsb2FkU3RhdHVzVXBkYXRlKHRoaXMudXVpZCwgdGhpcy5hY2NvdW50SWQsIHBvc3REYXRhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3JPYmopKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dFcnJvcih0aGlzLndvcmRQcm9jZXNzb3IuZ2V0UHJvamVjdEVycm9yTWVzc3NhZ2VzKGVycm9yT2JqKSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3VjY2Vzc0dvYmFjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnb0JhY2soKSB7XHJcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcclxuICB9XHJcbiAgZ2V0UXVlc3Rpb24ocXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnY3VzdG9tZXItY3JlYXRlJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ3FuckRldGFpbHMnIHx8IHRoaXMuc291cmNlID09PSAnb25ldGltZScgfHwgdGhpcy5zb3VyY2UgPT09ICdzZXJ2aWNlT3B0aW9uQXBwdCcpIHtcclxuICAgICAgcmV0dXJuIHF1ZXN0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHF1ZXN0aW9uLnF1ZXN0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuICB2YWxpZGF0ZVF1ZXN0aW9ubmFpcmUoc3JjPzogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25BbnN3ZXJzKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzID0ge1xyXG4gICAgICAgIGFuc3dlcnM6IHtcclxuICAgICAgICAgIGFuc3dlckxpbmU6IFtdLFxyXG4gICAgICAgICAgcXVlc3Rpb25uYWlyZUlkOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbm5haXJlSWQsXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJbWcocXVlc3Rpb246IGFueSwgZG9jdW1lbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgIGxldCBmaWxlO1xyXG4gICAgICBpZiAodHlwZVswXSA9PT0gJ3ZpZGVvJyB8fCB0eXBlWzBdID09PSAnYXVkaW8nKSB7XHJcbiAgICAgICAgZmlsZSA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGUgPSB0aGlzLnNlbGVjdGVkTWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmR4ID0gZmlsZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5maWxlU2VydmljZS5nZXRJbWFnZShudWxsLCB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG5cclxuICAgICAgICBpZiAocGF0aCAmJiBwYXRoICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGF0aCA9IGZpbGVbaW5keF0ucGF0aDtcclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgY29uc3QgaW5keCA9IHRoaXMudXBsb2FkZWRJbWFnZXMuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICBsZXQgcGF0aCA9IHRoaXMuZmlsZVNlcnZpY2UuZ2V0SW1hZ2UobnVsbCwgdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XSk7XHJcbiAgICAgICAgaWYgKHBhdGggJiYgcGF0aCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhdGggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLnMzcGF0aDtcclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyBvbkJ1dHRvbkJlZm9yZUhvb2soZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgaWYgKCFldmVudCB8fCAhZXZlbnQuYnV0dG9uKSB7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvLyAgIGlmIChldmVudC5idXR0b24udHlwZSA9PT0gQnV0dG9uVHlwZS5ET1dOTE9BRCkge1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBvcGVuQXR0YWNobWVudEdhbGxlcnkocXVlc3Rpb246IGFueSwgZG9jdW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pbWFnZV9saXN0X3BvcHVwID0gW107XHJcbiAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgbGV0IGltYWdlUGF0aDtcclxuICAgIGxldCBjYXB0aW9uID0gJyc7XHJcbiAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgIGxldCB0eXBlID0gdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdLnR5cGUuc3BsaXQoJy8nKTtcclxuICAgICAgaWYgKHR5cGVbMF0gPT09ICd2aWRlbycgfHwgdHlwZVswXSA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgICAgdGhpcy5zaG93QXVkaW9WaWRlb0ZpbGUodGhpcy5hdWRpb1ZpZGVvRmlsZXNbaW5keF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgICBpZiAodHlwZVsxXSA9PT0gJ3BkZicgfHwgdHlwZVsxXSA9PT0gJ2RvY3gnIHx8IHR5cGVbMV0gPT09ICd0eHQnIHx8IHR5cGVbMV0gPT09ICdkb2MnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XS5zM3BhdGgpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XS5zM3BhdGgsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XS5wYXRoLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltYWdlUGF0aCA9IHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0ucGF0aDtcclxuICAgICAgICAgICAgY2FwdGlvbiA9IHRoaXMuY29tbWVudHNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgZG9jdW1lbnRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgY29uc3QgaW5keCA9IHRoaXMudXBsb2FkZWRJbWFnZXMuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgIGxldCBleHQgPSB0eXBlWzFdO1xyXG4gICAgICB0eXBlID0gdHlwZVswXTtcclxuICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycgfHwgdHlwZSA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgICAgdGhpcy5zaG93QXVkaW9WaWRlb0ZpbGUodGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT09ICdwZGYnIHx8IGV4dCA9PT0gJ2RvY3gnIHx8IGV4dCA9PT0gJ3R4dCcgfHwgZXh0ID09PSAnZG9jJyB8fCBleHQgPT09ICd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcpIHtcclxuICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS5zM3BhdGgsICdfYmxhbmsnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3R5cGV0eHQyJyx0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdKTtcclxuICAgICAgICAgIGlmICh0aGlzLnVwbG9hZGVkSW1hZ2VzICYmIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0gJiYgdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XVsna2V5TmFtZSddICYmXHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF1bJ2tleU5hbWUnXS5pbmNsdWRlcygnZG9jeCcpKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS5zM3BhdGgsICdfYmxhbmsnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpbWFnZVBhdGggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLnMzcGF0aDtcclxuICAgICAgICAgICAgY2FwdGlvbiA9IHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0uY29tbWVudHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW1hZ2VQYXRoKSB7XHJcbiAgICAgIGNvbnN0IGltZ29iaiA9IHtcclxuICAgICAgICBzcmM6IGltYWdlUGF0aCxcclxuICAgICAgICB0aHVtYjogaW1hZ2VQYXRoLFxyXG4gICAgICAgIGFsdDogY2FwdGlvblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW1hZ2VfbGlzdF9wb3B1cC5wdXNoKGltZ29iaik7XHJcbiAgICAgIGNvdW50Kys7XHJcbiAgICB9XHJcbiAgICBpZiAoY291bnQgPiAwKSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub3BlbkdhbGxlcnkodGhpcy5pbWFnZV9saXN0X3BvcHVwWzBdKTtcclxuICAgICAgfSwgMjAwKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2hvd0F1ZGlvVmlkZW9GaWxlKGZpbGU6IGFueSkge1xyXG4gICAgY29uc3QgZmlsZXZpZXdkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNob3d1cGxvYWRmaWxlQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnNTAlJyxcclxuICAgICAgcGFuZWxDbGFzczogWydwb3B1cC1jbGFzcycsICdjb21tb25wb3B1cG1haW5jbGFzcycsICd1cGxvYWRmaWxlY29tcG9uZW50Y2xhc3MnXSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZmlsZTogZmlsZSxcclxuICAgICAgICBzb3VyY2U6ICdxbnInXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgZmlsZXZpZXdkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgIH0pO1xyXG4gIH1cclxuICBlZGl0UW5yKCkge1xyXG4gICAgdGhpcy5lZGl0UXVlc3Rpb25uYWlyZSA9ICF0aGlzLmVkaXRRdWVzdGlvbm5haXJlO1xyXG4gIH1cclxuICBnZXREb2N1bWVudHMocXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLmZpbGVQcm9wZXJ0aWUubWF4Tm9PZkZpbGUgPiAxICYmIHF1ZXN0aW9uLmZpbGVQcm9wZXJ0aWUubWluTm9PZkZpbGUgIT09IHF1ZXN0aW9uLmZpbGVQcm9wZXJ0aWUubWF4Tm9PZkZpbGUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudXBsb2FkRmlsZXNUZW1wW3F1ZXN0aW9uLmxhYmVsTmFtZV07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcXVlc3Rpb24uZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzO1xyXG4gICAgfVxyXG4gIH1cclxuICBzaG93UHJvdmlkZXJUZXh0KHF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIGlmIChxdWVzdGlvbi53aG9DYW5BbnN3ZXIgJiYgcXVlc3Rpb24ud2hvQ2FuQW5zd2VyID09PSAnUFJPVklERVJfT05MWScpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHN1Y2Nlc3NHb2JhY2soKSB7XHJcbiAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcclxuICAgIGlmICghdGhpcy50eXBlKSB7XHJcbiAgICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWxlc3RvVXBsb2FkID0gW107XHJcbiAgICAgIHRoaXMuZWRpdFFucigpO1xyXG4gICAgICB0aGlzLnJldHVybkFuc3dlcnMuZW1pdCgncmVsb2FkJyk7XHJcbiAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdxbnItbGluaycpIHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93U3VjY2VzcygnVXBkYXRlZCBTdWNjZXNzZnVsbHknKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBzaG93RGF0YUdyaWRBZGRTZWN0aW9uKHF1ZXN0aW9uOiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd0RhdGFHcmlkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSB2YWx1ZTtcclxuICAgIHRoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gbnVsbDtcclxuICB9XHJcbiAgc2hvd0RhdGFHcmlkQWRkU2VjdGlvbm4ocXVlc3Rpb246IGFueSwgdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5xdWVzU3RvcmUgPSBxdWVzdGlvbjtcclxuICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgncXVlc1N0b3JlJywgdGhpcy5xdWVzU3RvcmUpO1xyXG4gICAgdGhpcy5zaG93RGF0YUdyaWRbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBudWxsO1xyXG4gICAgdGhpcy5xbnJQb3B1cChxdWVzdGlvbiwgdHJ1ZSlcclxuICB9XHJcbiAgc2F2ZURhdGFHcmlkQ29sdW1uKHF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIGxldCBjb2x1bW5zID0gW107XHJcbiAgICBmb3IgKGxldCBjb2x1bW4gb2YgcXVlc3Rpb24uZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucykge1xyXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSB8fCBjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sJykge1xyXG4gICAgICAgIGNvbHVtbnNbY29sdW1uLm9yZGVyXSA9IHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2xpc3QnIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2ZpbGVVcGxvYWQnKSB7XHJcbiAgICAgICAgICBjb2x1bW5zW2NvbHVtbi5vcmRlcl0gPSBbXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29sdW1uc1tjb2x1bW4ub3JkZXJdID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdKSB7XHJcbiAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gW107XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV0gIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV1bdGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV1dID0gY29sdW1ucztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdLnB1c2goY29sdW1ucyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbmNlbEFkZG9yVXBkYXRlKHF1ZXN0aW9uKTtcclxuICAgIHRoaXMub25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XHJcbiAgfVxyXG4gIGVkaXREYXRhR3JpZChxdWVzdGlvbjogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXS5pbmRleE9mKGNvbHVtbik7XHJcbiAgICBPYmplY3Qua2V5cyhjb2x1bW4pLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsga2V5XSA9IGNvbHVtbltrZXldO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IGluZGV4O1xyXG4gICAgdGhpcy5zaG93RGF0YUdyaWRbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHRydWU7XHJcbiAgfVxyXG4gIGRlbGV0ZURhdGFHcmlkKHF1ZXN0aW9uOiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YoY29sdW1uKTtcclxuICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1xyXG4gIH1cclxuICBjYW5jZWxBZGRvclVwZGF0ZShxdWVzdGlvbjogYW55KSB7XHJcbiAgICB0aGlzLnNob3dEYXRhR3JpZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBjb2x1bW4gb2YgcXVlc3Rpb24uZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucykge1xyXG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldENvbHVtblR5cGUoY29sdW1uczogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgY29uc3QgY29sdW1uRGV0YWlscyA9IGNvbHVtbnMuZmlsdGVyKChjbG1uOiBhbnkpID0+IGNsbW4ub3JkZXIgPT09IEpTT04ucGFyc2UoY29sdW1uKSk7XHJcbiAgICBpZiAoY29sdW1uRGV0YWlsc1swXSkge1xyXG4gICAgICByZXR1cm4gY29sdW1uRGV0YWlsc1swXS5kYXRhVHlwZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0U2VjdGlvbkNvdW50KCkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZ3JvdXBlZFFucikubGVuZ3RoO1xyXG4gIH1cclxuICBnZXRCb29sVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdmFsdWUgPSAodmFsdWUgIT09ICcnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpID8gSlNPTi5wYXJzZSh2YWx1ZSkgOiB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm4gJ1llcyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ05vJztcclxuICB9XHJcbiAgZ2V0TWF4ZGF0ZShkYXRhOiBhbnkpIHtcclxuICAgIGxldCBkYXRlO1xyXG4gICAgaWYgKHRoaXMuZ2V0UXVlc3Rpb24oZGF0YSkuZGF0ZVByb3BlcnRpZXMgJiYgdGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcy5lbmREYXRlKSB7XHJcbiAgICAgIGNvbnN0IGR0ID0gdGhpcy5yZXZlcnNlKHRoaXMuZ2V0UXVlc3Rpb24oZGF0YSkuZGF0ZVByb3BlcnRpZXMuZW5kRGF0ZSk7XHJcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkdClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGUgPSB0aGlzLnRkYXk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZTtcclxuICB9XHJcbiAgZ2V0TWluZGF0ZShkYXRhOiBhbnkpIHtcclxuICAgIGxldCBkYXRlO1xyXG4gICAgaWYgKHRoaXMuZ2V0UXVlc3Rpb24oZGF0YSkuZGF0ZVByb3BlcnRpZXMgJiYgdGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcy5zdGFydERhdGUpIHtcclxuICAgICAgY29uc3QgZHQgPSB0aGlzLnJldmVyc2UodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcy5zdGFydERhdGUpO1xyXG4gICAgICBkYXRlID0gbmV3IERhdGUoZHQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkYXRlID0gdGhpcy5taW5kYXk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbiAgfVxyXG4gIHJldmVyc2Uoczogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gcy5zcGxpdChcIi1cIikucmV2ZXJzZSgpLmpvaW4oXCItXCIpO1xyXG4gIH1cclxuICBxbnJQb3B1cChxdWVzdGlvbjogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICAvLyBpZiAodmFsdWUgPT09ICdlZGl0Jykge1xyXG4gICAgLy8gICB0aGlzLnF1ZXNTdG9yZSA9IHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKCdxdWVzU3RvcmUnKTtcclxuICAgIC8vICAgdGhpcy5zaG93cW5yID0gdHJ1ZTtcclxuICAgIC8vICAgdGhpcy5lZGl0YWJsZUl0ZW0gPSBxdWVzdGlvbjtcclxuICAgIC8vICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzU3RvcmUpKVxyXG4gICAgLy8gICBjb25zdCByZW1vdmVpdGVtZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRbnJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgIC8vICAgICB3aWR0aDogJzUwJScsXHJcbiAgICAvLyAgICAgcGFuZWxDbGFzczogWydwb3B1cC1jbGFzcycsICdjb21tb25wb3B1cG1haW5jbGFzcycsICdjb25maXJtYXRpb25tYWluY2xhc3MnXSxcclxuICAgIC8vICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAvLyAgICAgZGF0YToge1xyXG4gICAgLy8gICAgICAgZGF0YTogdGhpcy5xdWVzU3RvcmUsXHJcbiAgICAvLyAgICAgICBxbnJfdHlwZTogJ3NlcnZpY2Vfb3B0aW9uJyxcclxuICAgIC8vICAgICAgIHZpZXc6ICdxbnJWaWV3JyxcclxuICAgIC8vICAgICAgIGlzRWRpdDogJ2VkaXQnLFxyXG4gICAgLy8gICAgICAgZWRpdGFibGVJdGVtOiB0aGlzLmVkaXRhYmxlSXRlbSxcclxuICAgIC8vICAgICAgIHNlcnZEZXRhaWxzOiB0aGlzLnNlcnZpY2VcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gICByZW1vdmVpdGVtZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAvLyAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgLy8gICAgICAgY29uc29sZS5sb2coXCJyZXN1bHQuZGF0YS5hbnN3ZXJMaW5lXCIsIHJlc3VsdC5kYXRhLmFuc3dlckxpbmUpXHJcbiAgICAvLyAgICAgICB0aGlzLmRhdGFHcmlkTGlzdCA9IHJlc3VsdC5kYXRhLmFuc3dlckxpbmU7XHJcbiAgICAvLyAgICAgICB0aGlzLnBvc3RfRGF0YSA9IHJlc3VsdC5kYXRhO1xyXG4gICAgLy8gICAgICAgdGhpcy5zaG93SXRlbSA9IHRydWU7XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW0gPSByZXN1bHQuZGF0YS5hbnN3ZXJMaW5lWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLmNvbHVtbi5saXN0WzBdO1xyXG4gICAgLy8gICAgICAgaWYgKHJlc3VsdC5kYXRhLnRvdGFsUHJpY2UpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy50b3RhbFByaWNlID0gcmVzdWx0LmRhdGEudG90YWxQcmljZVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgbGV0IGluZGV4MSA9IHRoaXMuaXRlbUFycmF5LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IHRoaXMuZWRpdGFibGVJdGVtLmlkKVxyXG4gICAgLy8gICAgICAgaWYgKGluZGV4MSA+IC0xKSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuaXRlbUFycmF5LnNwbGljZShpbmRleDEsIDEpO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgbGV0IGR1bW15QXJyYXkgPSB7IGlkOiB0aGlzLmlkLCBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGl0ZW06IHRoaXMuaXRlbSwgcHJpY2U6IHRoaXMudG90YWxQcmljZSwgY29sdW1uSXRlbTogdGhpcy5kYXRhR3JpZExpc3QgfVxyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkucHVzaChkdW1teUFycmF5KVxyXG4gICAgLy8gICAgICAgaWYgKHRoaXMuaXRlbUFycmF5KSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnaXRlbUFycmF5JywgdGhpcy5pdGVtQXJyYXkpO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IDA7XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IHRoaXMuc2VydmljZVRvdGFsUHJpY2UgKyBpdGVtLnByaWNlO1xyXG4gICAgLy8gICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ3NlcnZpY2VUb3RhbFByaWNlJywgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSk7XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICAgIHRoaXMuaWQgPSB0aGlzLmlkICsgMVxyXG4gICAgLy8gICAgICAgbGV0IG9iaiA9IHsgc2VxdWVuY2VJZDogdGhpcy5zZXF1ZW5jZUlkLCBkZ0xpc3Q6IHRoaXMucG9zdF9EYXRhLmFuc3dlckxpbmUgfTtcclxuICAgIC8vICAgICAgIHRoaXMuZmluYWxPYmplY3RMaXN0LnB1c2gob2JqKTtcclxuICAgIC8vICAgICAgIHRoaXMub25TdWJtaXQoJ3NlcnZpY2VPcHRpb24nKVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5zaG93cW5yID0gdHJ1ZTtcclxuICAgIC8vICAgY29uc29sZS5sb2coXCJ0aGlzLnNlcXVlbmNlSWRcIiwgcXVlc3Rpb24pXHJcbiAgICAvLyAgIHRoaXMuc2VxdWVuY2VJZCA9IHF1ZXN0aW9uLnNlcXVuY2VJZDtcclxuICAgIC8vICAgY29uc3QgcmVtb3ZlaXRlbWRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUW5yRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAvLyAgICAgd2lkdGg6ICc1MCUnLFxyXG4gICAgLy8gICAgIHBhbmVsQ2xhc3M6IFsncG9wdXAtY2xhc3MnLCAnY29tbW9ucG9wdXBtYWluY2xhc3MnLCAnY29uZmlybWF0aW9ubWFpbmNsYXNzJ10sXHJcbiAgICAvLyAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgLy8gICAgIGRhdGE6IHtcclxuICAgIC8vICAgICAgIGRhdGE6IHF1ZXN0aW9uLFxyXG4gICAgLy8gICAgICAgcW5yX3R5cGU6ICdzZXJ2aWNlX29wdGlvbicsXHJcbiAgICAvLyAgICAgICB2aWV3OiAncW5yVmlldycsXHJcbiAgICAvLyAgICAgICBpc0VkaXQ6ICdhZGQnLFxyXG4gICAgLy8gICAgICAgc2VydkRldGFpbHM6IHRoaXMuc2VydmljZVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyAgIHJlbW92ZWl0ZW1kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgIC8vICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgICB0aGlzLmRhdGFHcmlkTGlzdCA9IHJlc3VsdC5kYXRhLmFuc3dlckxpbmU7XHJcbiAgICAvLyAgICAgICB0aGlzLnBvc3RfRGF0YSA9IHJlc3VsdC5kYXRhO1xyXG4gICAgLy8gICAgICAgdGhpcy5zaG93SXRlbSA9IHRydWU7XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW0gPSByZXN1bHQuZGF0YS5hbnN3ZXJMaW5lWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLmNvbHVtbi5saXN0WzBdO1xyXG5cclxuICAgIC8vICAgICAgIGlmIChyZXN1bHQuZGF0YS50b3RhbFByaWNlKSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMudG90YWxQcmljZSA9IHJlc3VsdC5kYXRhLnRvdGFsUHJpY2VcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGxldCBkdW1teUFycmF5ID0geyBpZDogdGhpcy5pZCwgc2VxdWVuY2VJZDogdGhpcy5zZXF1ZW5jZUlkLCBpdGVtOiB0aGlzLml0ZW0sIHByaWNlOiB0aGlzLnRvdGFsUHJpY2UsIGNvbHVtbkl0ZW06IHRoaXMuZGF0YUdyaWRMaXN0IH1cclxuICAgIC8vICAgICAgIHRoaXMuaXRlbUFycmF5LnB1c2goZHVtbXlBcnJheSlcclxuXHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gMDtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbUFycmF5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICBsZXQgcXVhbnRpdHkgPSBpdGVtLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0ucXVhbnRpdHk7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSAodGhpcy5zZXJ2aWNlVG90YWxQcmljZSArIGl0ZW0ucHJpY2UpICogcXVhbnRpdHk7XHJcbiAgICAvLyAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnc2VydmljZVRvdGFsUHJpY2UnLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgKyAxXHJcbiAgICAvLyAgICAgICBsZXQgb2JqID0geyBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGRnTGlzdDogdGhpcy5wb3N0X0RhdGEuYW5zd2VyTGluZSB9O1xyXG4gICAgLy8gICAgICAgdGhpcy5maW5hbE9iamVjdExpc3QucHVzaChvYmopO1xyXG4gICAgLy8gICAgICAgdGhpcy5vblN1Ym1pdCgnc2VydmljZU9wdGlvbicpXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgaW5jcmVtZW50KGl0ZW06IGFueSkge1xyXG4gICAgLy8gY29uc3QgcmVtb3ZlaXRlbWRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUW5yRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAvLyAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAvLyAgIHBhbmVsQ2xhc3M6IFsncG9wdXAtY2xhc3MnLCAnY29tbW9ucG9wdXBtYWluY2xhc3MnLCAnY29uZmlybWF0aW9ubWFpbmNsYXNzJ10sXHJcbiAgICAvLyAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgIC8vICAgZGF0YToge1xyXG4gICAgLy8gICAgIGl0ZW06IGl0ZW0sXHJcbiAgICAvLyAgICAgZGF0YTogdGhpcy5xdWVzdGlvbm5haXJlTGlzdCxcclxuICAgIC8vICAgICB2aWV3OiAncW5ycmVwZWF0VmlldycsXHJcbiAgICAvLyAgICAgc2VydkRldGFpbHM6IHRoaXMuc2VydmljZVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHJlbW92ZWl0ZW1kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgIC8vICAgaWYgKHJlc3VsdCkge1xyXG4gICAgLy8gICAgIGlmIChyZXN1bHQgPT09ICdhZGROZXcnKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLnF1ZXNTdG9yZSA9IHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKCdxdWVzU3RvcmUnKTtcclxuICAgIC8vICAgICAgIHRoaXMucW5yUG9wdXAodGhpcy5xdWVzU3RvcmUsIHRydWUpXHJcbiAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgIGlmICghdGhpcy5zZXF1ZW5jZUlkKSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuc2VxdWVuY2VJZCA9IGl0ZW0uc2VxdWVuY2VJZFxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgbGV0IGR1bW15QXJyYXkgPSB7IGlkOiB0aGlzLmlkLCBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGl0ZW06IHJlc3VsdC5yZXBlYXRJdGVtLml0ZW0sIHByaWNlOiByZXN1bHQucmVwZWF0SXRlbS5wcmljZSwgY29sdW1uSXRlbTogcmVzdWx0LnJlcGVhdEl0ZW0uY29sdW1uSXRlbSB9XHJcbiAgICAvLyAgICAgICBsZXQgaXRlbXMgPSBkdW1teUFycmF5LmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW47XHJcbiAgICAvLyAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAvLyAgICAgICAgIGl0ZW1zW2ldLnF1YW50aXR5ID0gaXRlbXNbaV0ucXVhbnRpdHkgKyAxO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgaWYgKHRoaXMuaXRlbUFycmF5KSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnaXRlbUFycmF5JywgdGhpcy5pdGVtQXJyYXkpO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgY29uc29sZS5sb2coXCJUaGlzLkl0ZW1BcnJheVwiLCB0aGlzLml0ZW1BcnJheSlcclxuICAgIC8vICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSAwO1xyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGxldCBxdWFudGl0eSA9IGl0ZW0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eTtcclxuICAgIC8vICAgICAgICAgY29uc29sZS5sb2coXCJxdWFudGl0eVwiLCBxdWFudGl0eSlcclxuICAgIC8vICAgICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSArPSBpdGVtLnByaWNlICogcXVhbnRpdHk7XHJcbiAgICAvLyAgICAgICB9KTtcclxuICAgIC8vICAgICAgIGNvbnNvbGUubG9nKFwic2VydmljZVRvdGFsUHJpY2VcIiwgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSlcclxuICAgIC8vICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnc2VydmljZVRvdGFsUHJpY2UnLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKTtcclxuICAgIC8vICAgICAgIHRoaXMuaWQgPSB0aGlzLmlkICsgMVxyXG4gICAgLy8gICAgICAgbGV0IG9iaiA9IHsgc2VxdWVuY2VJZDogdGhpcy5zZXF1ZW5jZUlkLCBkZ0xpc3Q6IHJlc3VsdC5yZXBlYXRJdGVtLmNvbHVtbkl0ZW0gfTtcclxuICAgIC8vICAgICAgIHRoaXMuZmluYWxPYmplY3RMaXN0LnB1c2gob2JqKTtcclxuICAgIC8vICAgICAgIHRoaXMub25TdWJtaXQoJ3NlcnZpY2VPcHRpb24nKVxyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG4gIH1cclxuICBnZXRJdGVtUXVhbnRpdHkoaXRlbTogYW55KSB7XHJcbiAgICBsZXQgcXVhbnRpdHkgPSBpdGVtLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0ucXVhbnRpdHk7XHJcbiAgICByZXR1cm4gcXVhbnRpdHlcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiaXRlbVwiLCBpdGVtKVxyXG4gIH1cclxuICBkZWNyZW1lbnQocmVtb3ZpbmdJdGVtOiBhbnkpIHtcclxuICAgIGxldCBpbmRleCA9IHRoaXMuaXRlbUFycmF5LmZpbmRJbmRleCgoeDogYW55KSA9PiB4LmlkID09PSByZW1vdmluZ0l0ZW0uaWQpXHJcbiAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMuaXRlbUFycmF5W2luZGV4XVwiLCB0aGlzLml0ZW1BcnJheVtpbmRleF0pXHJcbiAgICAgIGlmICh0aGlzLmdldEl0ZW1RdWFudGl0eSh0aGlzLml0ZW1BcnJheVtpbmRleF0pID09IDEpIHtcclxuICAgICAgICB0aGlzLml0ZW1BcnJheS5zcGxpY2UoaW5kZXgsIDEpOyAvLyAybmQgcGFyYW1ldGVyIG1lYW5zIHJlbW92ZSBvbmUgaXRlbSBvbmx5XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5pdGVtQXJyYXlbaW5kZXhdLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW47XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaXRlbXNbaV0ucXVhbnRpdHkgPSBpdGVtc1tpXS5xdWFudGl0eSAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLml0ZW1BcnJheSkge1xyXG4gICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnaXRlbUFycmF5JywgdGhpcy5pdGVtQXJyYXkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1BcnJheS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gdGhpcy5zZXJ2aWNlVG90YWxQcmljZSArIGl0ZW0ucHJpY2U7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ3NlcnZpY2VUb3RhbFByaWNlJywgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSk7XHJcbiAgICAgIHRoaXMuZmluYWxPYmplY3RMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uU3VibWl0KCdzZXJ2aWNlT3B0aW9uJylcclxuICB9XHJcbiAgZGlzYWJsZUlucHV0KCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBwcml2YXRlIGdldEN1cnJlbnRJbmRleEN1c3RvbUxheW91dChpbWFnZSwgaW1hZ2VzKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpbWFnZSA/IGltYWdlcy5pbmRleE9mKGltYWdlKSA6IC0xO1xyXG4gIH1cclxuICBvcGVuR2FsbGVyeShpbWFnZSk6IHZvaWQge1xyXG4gICAgbGV0IGltYWdlSW5kZXggPSB0aGlzLmdldEN1cnJlbnRJbmRleEN1c3RvbUxheW91dChpbWFnZSwgdGhpcy5pbWFnZV9saXN0X3BvcHVwKTtcclxuICAgIHRoaXMuZ2FsbGVyeVNlcnZpY2Uub3Blbih0aGlzLmltYWdlX2xpc3RfcG9wdXAsIGltYWdlSW5kZXgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBjbGFzcz1cImNvbnMtaW5ib3ggbm8tcGFkZGluZy1zbWFsbFwiICpuZ0lmPVwiIXNob3dzZXJ2aWNlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lciBjb25zdW1lci1kYXNoaG9tZSBwLTBcIiAqbmdJZj1cIiF0eXBlICYmIHNvdXJjZSE9J3Byb0xlYWQnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCB0aXRsZS1nYiByb3VuZGVkLTBcIiAqbmdJZj1cInV1aWRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibXQtMiBib2xkXCI+e3txdWVzdGlvbm5haXJlX2hlYWRpbmcgfCBjYXBpdGFsaXplRmlyc3R9fSA8YSBjbGFzcz1cInB1bGwtbGVmdCBtZS00IGJhY2stYnRuXCJcclxuICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdFwiPjwvaT48L2E+PC9oNT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxhcHAtY29tbW9uLWlubmVybG9hZGluZy1zcGlubmVyICpuZ0lmPVwibG9hZGluZ1wiPjwvYXBwLWNvbW1vbi1pbm5lcmxvYWRpbmctc3Bpbm5lcj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uLWZsdWlkIHB1bGwtcmlnaHQgbWUtMiBtYi00XCJcclxuICAgICpuZ0lmPVwidHlwZSAhPT0gJ3FuckxpbmtQcm92aWRlcicgJiYgIWJ1dHRvbkRpc2FibGUgJiYgd2FpdGxpc3RTdGF0dXNcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJub3JtYWwtYnRuIGVkaXRcIiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cImVkaXRRbnIoKVwiIGlkPVwiYnRuRWRpdFwiPkVkaXQ8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uLWZsdWlkIHdpZHRoLTEwMFwiIFtjbGFzcy5xbnJEaXNhYmxlU3RhdGVdPVwiZGlzYWJsZUlucHV0KClcIlxyXG4gICAgW2NsYXNzLnAtMF09XCJ1dWlkICYmIChzb3VyY2UgPT09ICdjb25zQ2hlY2tpbicgfHwgc291cmNlID09PSAnY29uc0FwcHQnIHx8IHNvdXJjZSA9PT0gJ2NvbnNPcmRlcicgfHwgc291cmNlID09PSAncGFwZXInIHx8IHNvdXJjZSA9PT0gJ2NvbnNEb25hdGlvbkRldGFpbHMnIHx8IHNvdXJjZSA9PT0gJ2l2cicpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhsLTEyIGZvcmNlX2NlbnRlclwiIFtjbGFzcy5wLTBdPVwidXVpZFwiIFtjbGFzcy5uby1wYWRkaW5nLXNtYWxsXT1cInNvdXJjZSAmJiBzb3VyY2U9PSdpdnInXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicW5yc2VjXCIgKm5nRm9yPVwibGV0IHFuciBvZiBncm91cGVkUW5yIHwga2V5dmFsdWU6IGFzSXNPcmRlclwiXHJcbiAgICAgICAgICBbY2xhc3Muc2VjdGlvbi1zaGFkb3ddPVwiZ2V0U2VjdGlvbkNvdW50KCkgPiAxXCIgW2NsYXNzLm5vLXBhZGRpbmctc21hbGxdPVwic291cmNlICYmIHNvdXJjZT09J2l2cidcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGNhcmQgbWduLTBcIiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcW5yLnZhbHVlXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC0xMiBxdWVzdFwiPnt7Z2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsfX1cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlIHB1bGwtcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFkZGljb25dPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdkYXRhR3JpZCcgJiYgIXNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmIHNob3dEYXRhR3JpZEFkZFNlY3Rpb24oZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCB0cnVlKVwiPjwvaT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvLW9ubHlcIiAqbmdJZj1cInNob3dQcm92aWRlclRleHQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiPkZvciBQcm92aWRlcnM8L2Rpdj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZFwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLm1hbmRhdG9yeVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tbGV2ZWwtc2V0dGluZ3NcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5oaW50XCJcclxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmhpbnQgfCBzYWZlSHRtbFwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8IS0tIGZvciBmaWxlIHVwbG9hZCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdmaWxlVXBsb2FkJ1wiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG11bHRpcGxlICNkZXB0c2VsIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUubWF4Tm9PZkZpbGUgPiAxICYmIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLm1pbk5vT2ZGaWxlICE9PSBnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZVwiXHJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVwbG9hZEZpbGVzVGVtcFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiIGNsYXNzPVwic2VsZWN0LWJveFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZG9jdW1lbnQgb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUuYWxsb3dlZERvY3VtZW50c1wiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkb2N1bWVudFwiIChjbGljayk9XCJjaGFuZ2VJbWFnZVNlbGVjdGVkKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jdW1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7ZG9jdW1lbnR9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBjb2wtMTIgY29sLW1kLTEyIGNvbC1zbS0xMiBwLTAgbXQtNFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldERvY3VtZW50cyhnZXRRdWVzdGlvbihxdWVzdGlvbikpICYmIGdldERvY3VtZW50cyhnZXRRdWVzdGlvbihxdWVzdGlvbikpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wem9uZSBkcm9wem9uZS1kZWZhdWx0IGRyb3B6b25lLXByaW1hcnkgZHotY2xpY2thYmxlXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNpbmdsZS1maWxlXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHMubGVuZ3RoPT0xXCJcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRvYyBvZiBnZXREb2N1bWVudHMoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkei1wcmV2aWV3IGR6LXByb2Nlc3NpbmcgZHotaW1hZ2UtcHJldmlldyBkei1lcnJvciBkei1jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldEltZyhnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2NuYW1lXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tkb2N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6aW1hZ2UgcG9pbnRlci1jdXJzb3JcIiAoY2xpY2spPVwib3BlbkF0dGFjaG1lbnRHYWxsZXJ5KGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGFsdD1cIlwiIGNsYXNzPVwiaW1nX2ZpdFwiIFtzcmNdPVwiZ2V0SW1nKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiAoYmx1cik9XCJvblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbW1lbnRzW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWUgKyAnPScgKyBkb2NdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FsX2FjdGlvblwiICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmIG1vZGUhPT0ncmVhZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlSW1hZ2VTZWxlY3RlZChnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10aW1lcy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHotcHJldmlldyBkei1wcm9jZXNzaW5nIGR6LWltYWdlLXByZXZpZXcgZHotZXJyb3IgZHotY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvZ29maWxlMS5jbGljaygpXCIgKm5nSWY9XCIhZ2V0SW1nKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvY25hbWVcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2RvY319PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHotaW1hZ2UgcG9pbnRlci1jdXJzb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICNsb2dvZmlsZTEgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCIvKjtjYXB0dXJlPWNhbWVyYVwiIHN0eWxlPVwiZGlzcGxheTpub25lO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJmaWxlc1NlbGVjdGVkKCRldmVudCwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHotZXJyb3ItbWFya1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4taWNvbiBidG4tbGlnaHQtc3VjY2VzcyBidG4tY2lyY2xlIG1yLTJcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmstNTAgZmxhdGljb24tdXBsb2FkXCI+PC9pPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciBjaGVja2JveCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2xpc3QnICYmIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5saXN0UHJvcGVydGllLm1heEFuc3dlcnMgPiAxXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LWxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94XCIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbFZhbHVlc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXNDaGVja2VkKHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImxpc3RDaGFuZ2UoJGV2ZW50LCB2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e3ZhbHVlfX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIHJhZGlvIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnbGlzdCcgJiYgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxpc3RQcm9wZXJ0aWUubWF4QW5zd2VycyA9PT0gMVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxWYWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0NoZWNrZWQodmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibGlzdENoYW5nZSgkZXZlbnQsIHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3t2YWx1ZX19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciB0b2dnZWwgYm9vbGVhbiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdib29sJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxWYWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0Jvb2xlYW5DaGVja2VkKHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImJvb2xlYW5DaGFuZ2UoJGV2ZW50LCB2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgVGV4dCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdwbGFpblRleHQnXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5tYXhOb09mTGV0dGVyPD0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFuc3dlcnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIiAoaW5wdXQpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XCIgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgW21pbmxlbmd0aF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1pbk5vT2ZMZXR0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5wbGFpblRleHRQcm9wZXJ0aWUubWF4Tm9PZkxldHRlclwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sMSBmb3JtLWNvbnRyb2wtc29saWRcIiB0eXBlPVwidGV4dFwiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cIjNcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5wbGFpblRleHRQcm9wZXJ0aWUubWF4Tm9PZkxldHRlcj4xMDBcIlxyXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFuc3dlcnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIiAoaW5wdXQpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XCJcclxuICAgICAgICAgICAgICAgICAgW21pbmxlbmd0aF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1pbk5vT2ZMZXR0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5wbGFpblRleHRQcm9wZXJ0aWUubWF4Tm9PZkxldHRlclwiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wyIGZvcm0tY29udHJvbC1zb2xpZFwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIE51bWJlciAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiYW5zd2Vyc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiIChpbnB1dCk9XCJvblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcIlxyXG4gICAgICAgICAgICAgICAgW21pbl09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikubnVtYmVyUHJvcGVydGllLnN0YXJ0XCIgW21heF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikubnVtYmVyUHJvcGVydGllLmVuZFwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sMSBmb3JtLWNvbnRyb2wtc29saWRcIiB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJpc051bWVyaWMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciBEYXRlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleFwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbDFcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbbWF4XT1cImdldE1heGRhdGUocXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgIFttaW5dPVwiZ2V0TWluZGF0ZShxdWVzdGlvbilcIiBbKG5nTW9kZWwpXT1cImFuc3dlcnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIlxyXG4gICAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJylcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciBEYXRhZ3JpZCAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUxXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZGF0YUdyaWQnICYmIGRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV0gJiYgZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtaGVhZC1jdXN0b20gdGFibGUtaGVhZC1iZyB0YWJsZS1ib3JkZXJsZXNzIHRhYmxlLXZlcnRpY2FsLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLmNvbHVtbklkfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgIXNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgIXNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXTtsZXQgaSA9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGRhdGEgb2YgY29sdW1uIHwga2V5dmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5UeXBlKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zLCBkYXRhLmtleSkgPT09ICdkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGEudmFsdWUgfCBkYXRlIDogbmV3VGltZURhdGVGb3JtYXR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29sdW1uVHlwZShnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucywgZGF0YS5rZXkpID09PSAnYm9vbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRCb29sVmFsdWUoZGF0YS52YWx1ZSl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29sdW1uVHlwZShnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucywgZGF0YS5rZXkpICE9PSAnZGF0ZScgJiYgZ2V0Q29sdW1uVHlwZShnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucywgZGF0YS5rZXkpICE9PSAnYm9vbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhLnZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuXCIgKGNsaWNrKT1cImVkaXREYXRhR3JpZChnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgIXNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiIChjbGljayk9XCJkZWxldGVEYXRhR3JpZChnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkU2VjdGlvblwiICpuZ0lmPVwic2hvd0RhdGFHcmlkW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRDb2x1bW5cIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+e3tjb2x1bW4ubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZFwiICpuZ0lmPVwiY29sdW1uLm1hbmRhdG9yeVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgY2hlY2tib3ggLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdsaXN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3gtbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94XCIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGNvbHVtbi5saXN0UHJvcGVydGllLnZhbHVlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzQ2hlY2tlZCh2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsaXN0Q2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3ZhbHVlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgdG9nZ2VsIGJvb2xlYW4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdib29sJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0Jvb2xlYW5DaGVja2VkKCd5ZXMnLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImJvb2xlYW5DaGFuZ2UoJGV2ZW50LCAneWVzJywgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICBZZXNcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0Jvb2xlYW5DaGVja2VkKCdubycsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYm9vbGVhbkNoYW5nZSgkZXZlbnQsICdubycsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgTm9cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgVGV4dCAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ3BsYWluVGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZGF0YUdyaWRDb2x1bW5zW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sMSBmb3JtLWNvbnRyb2wtc29saWRcIiB0eXBlPVwidGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGZvciBOdW1iZXIgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImRhdGFHcmlkQ29sdW1uc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiBbbWluXT1cImNvbHVtbi5udW1iZXJQcm9wZXJ0aWUuc3RhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFttYXhdPVwiY29sdW1uLm51bWJlclByb3BlcnRpZS5lbmRcIiBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cIm51bWJlclwiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGZvciBEYXRlIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXhcIiAqbmdJZj1cImNvbHVtbi5kYXRhVHlwZSA9PT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbDFcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbbWF4XT1cImdldE1heGRhdGUocXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICBbbWluXT1cImdldE1pbmRhdGUocXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImRhdGFHcmlkQ29sdW1uc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlciBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdC1idG5zXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQtcHJpbWFyeSBmb250LXdlaWdodC1ib2xkXCIgaWQ9XCJidG5DYW5jZWxRXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEFkZG9yVXBkYXRlKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cclxuICAgICAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGZvbnQtd2VpZ2h0LWJvbGRcIiBpZD1cImJ0blNhdmVRXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVEYXRhR3JpZENvbHVtbihnZXRRdWVzdGlvbihxdWVzdGlvbikpXCI+QWRkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC0xMiBjb2wtc20tMTIgY29sLWxnLTEyIHAtMCBzdWJtaXQtcGFkXCJcclxuICAgICAgICAqbmdJZj1cInR5cGUgIT09ICdxbnJMaW5rUHJvdmlkZXInICYmIHNvdXJjZSE9PSdwcm9MZWFkJyAmJiAodXVpZCB8fCBzb3VyY2UgPT09ICdjdXN0b21lci1kZXRhaWxzJyB8fCBzb3VyY2UgPT09ICdwcm9Eb25hdGlvbicpICYmICFkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJub3JtYWwtYnRuXCIgbWF0LWZsYXQtYnV0dG9uIFtjbGFzcy5zcGlubmVyXT1cImJ1dHRvbkRpc2FibGVcIiBpZD1cImJ0blN1Ym1pdFwiXHJcbiAgICAgICAgICBbY2xhc3Muc3Bpbm5lci1kYXJrZXItc3VjY2Vzc109XCJidXR0b25EaXNhYmxlXCIgW2NsYXNzLnNwaW5uZXItY2VudGVyXT1cImJ1dHRvbkRpc2FibGVcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIiFidXR0b25EaXNhYmxlICYmIG9uU3VibWl0KCdzdWJtaXQnKVwiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlXCJcclxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJidXR0b25EaXNhYmxlXCI+e3sodHlwZSA9PSAncW5yLWxpbmsnKSA/ICdTdWJtaXQnIDogJ1VwZGF0ZSd9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcbjxzZWN0aW9uIGNsYXNzPVwiY29ucy1pbmJveCBuby1wYWRkaW5nLXNtYWxsXCIgKm5nSWY9XCJzaG93c2VydmljZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXIgY29uc3VtZXItZGFzaGhvbWVcIiAqbmdJZj1cIiF0eXBlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZCB0aXRsZS1nYiByb3VuZGVkLTBcIiAqbmdJZj1cInV1aWRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibXQtMiBib2xkXCI+e3txdWVzdGlvbm5haXJlX2hlYWRpbmcgfCBjYXBpdGFsaXplRmlyc3R9fSA8YSBjbGFzcz1cInB1bGwtbGVmdCBtZS00IGJhY2stYnRuXCJcclxuICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiPjxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctbGVmdFwiPjwvaT48L2E+PC9oNT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxhcHAtY29tbW9uLWlubmVybG9hZGluZy1zcGlubmVyICpuZ0lmPVwibG9hZGluZ1wiPjwvYXBwLWNvbW1vbi1pbm5lcmxvYWRpbmctc3Bpbm5lcj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uLWZsdWlkIHB1bGwtcmlnaHQgbWUtMiBtYi00XCJcclxuICAgICpuZ0lmPVwidHlwZSAhPT0gJ3FuckxpbmtQcm92aWRlcicgJiYgIWJ1dHRvbkRpc2FibGUgJiYgd2FpdGxpc3RTdGF0dXNcIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJub3JtYWwtYnRuIGVkaXRcIiBtYXQtZmxhdC1idXR0b24gKGNsaWNrKT1cImVkaXRRbnIoKVwiIGlkPVwiYnRuRWRpdFFOUlwiPkVkaXQ8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uLWZsdWlkIHdpZHRoLTEwMFwiIFtjbGFzcy5xbnJEaXNhYmxlU3RhdGVdPVwiZGlzYWJsZUlucHV0KClcIlxyXG4gICAgW2NsYXNzLnAtMF09XCJ1dWlkICYmIChzb3VyY2UgPT09ICdjb25zQ2hlY2tpbicgfHwgc291cmNlID09PSAnY29uc0FwcHQnIHx8IHNvdXJjZSA9PT0gJ2NvbnNEb25hdGlvbkRldGFpbHMnIClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtMTIgZm9yY2VfY2VudGVyIHAtMFwiIFtjbGFzcy5wLTBdPVwidXVpZFwiXHJcbiAgICAgIFtjbGFzcy5uby1wYWRkaW5nLXNtYWxsXT1cInNvdXJjZSAmJiBzb3VyY2U9PSdpdnInXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nRm9yPVwibGV0IHFuciBvZiBncm91cGVkUW5yIHwga2V5dmFsdWVcIiBbY2xhc3Muc2VjdGlvbi1zaGFkb3ddPVwiZ2V0U2VjdGlvbkNvdW50KCkgPiAxXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbUFycmF5Lmxlbmd0aCA9PSAwIFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtZ24tMCBib3JkZXItZGFzaGVkIHRleHQtY2VudGVyXCIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHFuci52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxbnItc2VjdGlvblwiICpuZ0lmPVwiZ2V0U2VjdGlvbkNvdW50KCkgPiAxXCI+XHJcbiAgICAgICAgICAgICAgICB7e2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbi5zZWN0aW9uTmFtZX19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTEyIHF1ZXN0IHBvaW50ZXItY3Vyc29yXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGF0YUdyaWRBZGRTZWN0aW9ubihnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24sIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cInt7Y2RuUGF0aH19YXNzZXRzL2ltYWdlcy9zZXJ2aWNlLW9wdGlvbnMuc3ZnXCIgYWx0PVwiU2VydmljZSBPcHRpb25zXCIgY2xhc3M9XCJpbWctZmx1aWQgcGItMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIzMDBcIiBoZWlnaHQ9XCIzMDBcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByby1vbmx5XCIgKm5nSWY9XCJzaG93UHJvdmlkZXJUZXh0KGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbilcIj5Gb3IgUHJvdmlkZXJzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlZFwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnF1ZXN0aW9uLm1hbmRhdG9yeVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LXdlaWdodC1ib2xkXCI+UGxlYXNlIENob29zZSB5b3VyIFBldDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGZvbnQtd2VpZ2h0LWJvbGRcIj5Db250aW51ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtMTIgY29sLXNtLTEyIG1iLTQgcC0wXCIgKm5nSWY9XCJzaG93SXRlbVwiPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9yZGVyXCIgKm5nRm9yPVwiIGxldCBpdGVtcyBvZiBpdGVtQXJyYXlcIj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2FwaXRhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbXMuaXRlbX19PGJyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBib3JkZXItYXBwbHkgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkZWNyZW1lbnQoaXRlbXMpO1wiIGNsYXNzPVwicG9pbnRlci1jdXJzb3IgcXVhbnRpdHkgcXVhbnRpdHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC0xMFwiPi08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiBwb2ludGVyLWN1cnNvclwiPjxzcGFuIGNsYXNzPVwicXVhbnRpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtcyAmJiBpdGVtcy5jb2x1bW5JdGVtICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0gJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIgJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0ICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXSAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0gJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLnF1YW50aXR5fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJpbmNyZW1lbnQoaXRlbXMpO1wiIGNsYXNzPVwicG9pbnRlci1jdXJzb3IgcXVhbnRpdHkgcXVhbnRpdHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC0xMFwiPis8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+PHNwYW4+PGkgY2xhc3M9XCJmYSBmYS1pbnJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAge3tpdGVtcy5wcmljZSAqIGdldEl0ZW1RdWFudGl0eShpdGVtcyl9fS8tXHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0l0ZW0gJiZpdGVtQXJyYXkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHFuciBvZiBncm91cGVkUW5yIHwga2V5dmFsdWVcIiBbY2xhc3Muc2VjdGlvbi1zaGFkb3ddPVwiZ2V0U2VjdGlvbkNvdW50KCkgPiAxXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBxbnIudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTEyIHF1ZXN0IHBvaW50ZXItY3Vyc29yXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0RhdGFHcmlkQWRkU2VjdGlvbm4oZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnF1ZXN0aW9uLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBmb250LXdlaWdodC1ib2xkXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzIHRleHQtd2hpdGVcIj48L2k+QWRkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvc2VjdGlvbj4iXX0=
1394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTakgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV3hGLE1BQU0sT0FBTyxzQkFBc0I7SUF3RXZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7SUFDQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBbkZELGlCQUFpQixDQUFNO0lBQ3ZCLE1BQU0sQ0FBTTtJQUNaLFNBQVMsQ0FBTTtJQUNmLGVBQWUsQ0FBTTtJQUNyQixlQUFlLENBQU07SUFDckIsSUFBSSxDQUFNO0lBQ1YsSUFBSSxDQUFNO0lBQ1YsY0FBYyxDQUFNO0lBQ3BCLFdBQVcsQ0FBTTtJQUNqQixlQUFlLENBQU07SUFDckIsT0FBTyxDQUFNO0lBQ2IsSUFBSSxDQUFNLENBQUMseUNBQXlDO0lBQ25ELFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3RDLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQ3pDLFFBQVEsQ0FBTTtJQUNkLFdBQVcsQ0FBTTtJQUMxQixPQUFPLEdBQVEsRUFBRSxDQUFDO0lBQ2xCLFlBQVksR0FBUSxFQUFFLENBQUM7SUFDdkIs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SztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBbUJrQixLQUFLO3NCQUE1QixTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUXVlc3Rpb25haXJlU2VydmljZSB9IGZyb20gJy4uL3F1ZXN0aW9uYWlyZS1zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9maWxlLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hvd3VwbG9hZGZpbGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaG93dXBsb2FkZmlsZS9zaG93dXBsb2FkZmlsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVRpbWVQcm9jZXNzb3IgfSBmcm9tICcuLi8uLi9jYWxlbmRhci9kYXRlLXRpbWUvZGF0ZXRpbWUtcHJvY2Vzc29yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZXJyb3ItbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmRQcm9jZXNzb3IgfSBmcm9tICcuLi8uLi93b3JkLXByb2Nlc3Nvci5zZXJ2aWNlJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQuc2VydmljZSc7XG5pbXBvcnQgeyBKR2FsbGVyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9qLWdhbGxlcnkvai1nYWxsZXJ5LnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXF1ZXN0aW9ubmFpcmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHF1ZXN0aW9ubmFpcmVMaXN0OiBhbnk7XG4gIEBJbnB1dCgpIHNvdXJjZTogYW55O1xuICBASW5wdXQoKSBhY2NvdW50SWQ6IGFueTtcbiAgQElucHV0KCkgcXVlc3Rpb25BbnN3ZXJzOiBhbnk7XG4gIEBJbnB1dCgpIGN1c3RvbWVyRGV0YWlsczogYW55O1xuICBASW5wdXQoKSB1dWlkOiBhbnk7XG4gIEBJbnB1dCgpIHR5cGU6IGFueTtcbiAgQElucHV0KCkgd2FpdGxpc3RTdGF0dXM6IGFueTtcbiAgQElucHV0KCkgb3JkZXJTdGF0dXM6IGFueTtcbiAgQElucHV0KCkgZG9uYXRpb25EZXRhaWxzOiBhbnk7XG4gIEBJbnB1dCgpIHNlcnZpY2U6IGFueTtcbiAgQElucHV0KCkgbW9kZTogYW55OyAvLyBBZGRlZCBieSBtYW5pIHRvIGNoZWNrIHRoZSBmaWxlIHVwbG9hZFxuICBAT3V0cHV0KCkgZmlsZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJldHVybkFuc3dlcnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgdGVtcFR5cGU6IGFueTtcbiAgQElucHV0KCkgYm9va2luZ1R5cGU6IGFueTtcbiAgYW5zd2VyczogYW55ID0ge307XG4gIHNob3dEYXRhR3JpZDogYW55ID0ge307XG4gIHNlbGVjdGVkTWVzc2FnZTogYW55ID0gW107XG4gIGFwaUVycm9yOiBhbnkgPSBbXTtcbiAgcGFyYW1zOiBhbnk7XG4gIGZpbGV1cGxvYWRwcmVBbnN3ZXJzOiBhbnkgPSB7fTtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBidXR0b25EaXNhYmxlID0gZmFsc2U7XG4gIHF1ZXN0aW9uczogYW55ID0gW107XG4gIHNlbGVjdGVkRG9jczogYW55ID0gW107XG4gIGRvY3VtZW50c1RvVXBsb2FkOiBhbnkgPSBbXTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHVwbG9hZEZpbGVzVGVtcDogYW55ID0gW107XG4gIGZpbGVzdG9VcGxvYWQ6IGFueSA9IFtdO1xuICBjaGFuZ2VIYXBwZW5lZCA9IGZhbHNlO1xuICB1cGxvYWRlZEZpbGVzOiBhbnkgPSBbXTtcbiAgdXBsb2FkZWRJbWFnZXM6IGFueSA9IFtdO1xuICBib29raW5nRGV0YWlsczogYW55ID0gW107XG4gIEBWaWV3Q2hpbGQoJ2xvZ29maWxlMScpIGZpbGUyITogRWxlbWVudFJlZjtcbiAgaW1hZ2VfbGlzdF9wb3B1cDtcbiAgcXVlc3Rpb25uYWlyZV9oZWFkaW5nID0gJyc7XG4gIGN1c3RvbWVyX2xhYmVsID0gJyc7XG4gIGVkaXRRdWVzdGlvbm5haXJlID0gZmFsc2U7XG4gIGF1ZGlvVmlkZW9GaWxlczogYW55ID0gW107XG4gIGdyb3VwZWRRbnI6IGFueSA9IFtdO1xuICBkYXRhR3JpZENvbHVtbnM6IGFueSA9IHt9O1xuICBkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0OiBhbnkgPSBbXTtcbiAgdXBkYXRlZEdyaWRJbmRleDogYW55ID0ge307XG4gIG5ld1RpbWVEYXRlRm9ybWF0ID0gJyc7XG4gIHFuclN0YXR1cyA9ICcnO1xuICBjb21tZW50czogYW55ID0ge307XG4gIHRkYXkgPSBuZXcgRGF0ZSgpO1xuICBtaW5kYXkgPSBuZXcgRGF0ZSgxOTAwLCAwLCAxKTtcbiAgZGF0YUdyaWRMaXN0Q29sdW1uczogYW55ID0ge307XG4gIHNob3dxbnIhOiBib29sZWFuO1xuICBpdGVtOiBhbnk7XG4gIHNob3dJdGVtID0gZmFsc2U7XG4gIHRvdGFsUHJpY2U6IGFueTtcbiAgaXRlbUxlbmd0aDogYW55O1xuICBpdGVtQXJyYXk6IGFueSA9IFtdO1xuICBkYXRhR3JpZExpc3Q6IGFueSA9IFtdO1xuICBpZDogbnVtYmVyID0gMDtcbiAgcG9zdF9EYXRhOiBhbnk7XG4gIGRnTGlzdDogYW55O1xuICBzZXF1ZW5jZUlkOiBhbnk7XG4gIGZpbmFsT2JqZWN0TGlzdDogYW55ID0gW107XG4gIHNob3dzZXJ2aWNlID0gZmFsc2U7XG4gIHF1ZXNTdG9yZTogYW55O1xuICBhbGxMaXN0OiBzdHJpbmcgPSAnJztcbiAgcG9wU2VhcmNoZXM6IGFueTtcbiAgc2VydmljZVRvdGFsUHJpY2U6IG51bWJlciA9IDA7XG4gIGVkaXRhYmxlSXRlbTogYW55O1xuICBjZG5QYXRoOiBzdHJpbmcgPSAnJztcbiAgY3VzdG9tSUQ7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWN0aXZhdGVkX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHdvcmRQcm9jZXNzb3I6IFdvcmRQcm9jZXNzb3IsXG4gICAgcHJpdmF0ZSBsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlUHJvY2Vzc29yOiBEYXRlVGltZVByb2Nlc3NvcixcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBmaWxlU2VydmljZTogRmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVlc3Rpb25haXJlU2VydmljZTogUXVlc3Rpb25haXJlU2VydmljZSxcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogRXJyb3JNZXNzYWdpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FsbGVyeVNlcnZpY2U6IEpHYWxsZXJ5U2VydmljZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xuICAgIHRoaXMuY2RuUGF0aCA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDRE5QYXRoKCk7XG4gICAgdGhpcy5hY3RpdmF0ZWRfcm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHFwYXJhbXMgPT4ge1xuICAgICAgdGhpcy5wYXJhbXMgPSBxcGFyYW1zO1xuICAgICAgaWYgKHRoaXMucGFyYW1zLnR5cGUpIHtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnBhcmFtcy50eXBlO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnNvdXJjZSlcbiAgICAgIH1cbiAgICAgIHRoaXMuYWNjb3VudElkID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldEFjY291bnRJRCgpO1xuICAgICAgdGhpcy5jdXN0b21JRCA9IHRoaXMuc2hhcmVkU2VydmljZS5nZXRDdXN0b21JRCgpO1xuICAgICAgaWYgKHRoaXMucGFyYW1zLnV1aWQpIHtcbiAgICAgICAgdGhpcy51dWlkID0gdGhpcy5wYXJhbXMudXVpZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMucXVlc3Rpb25haXJlU2VydmljZS5nZXRNZXNzYWdlKCkuc3Vic2NyaWJlKG1lc3NhZ2UgPT4ge1xuICAgICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAncW5yVmFsaWRhdGVFcnJvcic6XG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0ZUVycm9yKG1lc3NhZ2UudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzICYmIHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzdG9VcGxvYWQgJiYgdGhpcy5zb3VyY2UgPT09ICdwcm9MZWFkJykge1xuICAgICAgdGhpcy5maWxlc3RvVXBsb2FkID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXN0b1VwbG9hZDtcbiAgICB9XG5cbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlNlcnZpY2UgRGV0YWlsczpcIiwgdGhpcy5xdWVzdGlvbm5haXJlTGlzdCk7XG4gICAgY29uc29sZS5sb2coXCJTZXJ2aWNlIERldGFpbHM6XCIsIHRoaXMuc2VydmljZSk7XG4gICAgaWYgKHRoaXMubFN0b3JhZ2VTZXJ2aWNlLmdldGl0ZW1mcm9tTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknKSkge1xuICAgICAgdGhpcy5pdGVtQXJyYXkgPSB0aGlzLmxTdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbUxvY2FsU3RvcmFnZSgnaXRlbUFycmF5Jyk7XG4gICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcbiAgICAgICAgdGhpcy5zaG93SXRlbSA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5pdGVtQXJyYXlcIiwgdGhpcy5pdGVtQXJyYXkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXN0b21lcl9sYWJlbCA9IHRoaXMud29yZFByb2Nlc3Nvci5nZXRUZXJtaW5vbG9neVRlcm0oJ2N1c3RvbWVyJyk7XG5cbiAgICBpZiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdCkge1xuICAgICAgY29uc29sZS5sb2codGhpcy5zb3VyY2UpXG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1jcmVhdGUnIHx8IHRoaXMuc291cmNlID09PSAnb25ldGltZScpIHtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzWzBdLnF1ZXN0aW9ucztcbiAgICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XG4gICAgICAgICAgLy8gdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25zLCAnZ2V0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tZXJEZXRhaWxzICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmUgJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZS5xdWVzdGlvbkFuc3dlcnMpIHtcbiAgICAgICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZS5xdWVzdGlvbkFuc3dlcnMsICdnZXQnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3FuckRldGFpbHMnKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbnM7XG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdzZXJ2aWNlT3B0aW9uQXBwdCcpIHtcbiAgICAgICAgdGhpcy5zaG93c2VydmljZSA9IHRydWU7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdxbnJwYXBlcicpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscztcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy51dWlkICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdxbnJWaWV3JyAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscykge1xuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzO1xuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2NvbmR1bWVyT3JkZXInICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdpdnInICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5sYWJlbHMpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscztcbiAgICAgICAgY29uc29sZS5sb2coXCJRdWVzdGlvbnM6XCIsIHRoaXMucXVlc3Rpb25zKTtcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xuICAgICAgfVxuXG4gICAgfVxuICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2N1c3RvbWVyLWRldGFpbHMnICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdICYmIHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QgPSB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlO1xuICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlLnF1ZXN0aW9uQW5zd2VycztcbiAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcbiAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9ucywgJ2dldCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMpIHtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5maWxlcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZSA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmF1ZGlvVmlkZW8pIHtcbiAgICAgICAgdGhpcy5hdWRpb1ZpZGVvRmlsZXMgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5hdWRpb1ZpZGVvO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzdG9VcGxvYWQpIHtcbiAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXN0b1VwbG9hZDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0KSB7XG4gICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdCA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3Q7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuY29tbWVudHMpIHtcbiAgICAgICAgdGhpcy5jb21tZW50cyA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmNvbW1lbnRzO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmFuc3dlcnMpIHtcbiAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmFuc3dlcnMuYW5zd2VyTGluZSwgJ2luaXQnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNvdXJjZSA9PSAnaXZyJykge1xuICAgICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbkFuc3dlcnMsICdnZXQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuZG9uYXRpb25EZXRhaWxzICYmIHRoaXMuZG9uYXRpb25EZXRhaWxzLnF1ZXN0aW9ubmFpcmUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QgPSB0aGlzLmRvbmF0aW9uRGV0YWlscy5xdWVzdGlvbm5haXJlO1xuICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9uQW5zd2VycztcbiAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9ucyAmJiB0aGlzLnF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9ucywgJ2dldCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnV1aWQpIHtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9uQW5zd2Vycykge1xuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25BbnN3ZXJzO1xuICAgICAgICB0aGlzLnFuclN0YXR1cyA9ICdzdWJtaXR0ZWQnO1xuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XG4gICAgICAgIHRoaXMucW5yU3RhdHVzID0gJ3JlbGVhc2VkJztcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXSAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscykge1xuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ubGFiZWxzO1xuICAgICAgICB0aGlzLnFuclN0YXR1cyA9ICdyZWxlYXNlZCc7XG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9ucyAmJiB0aGlzLnF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9ucywgJ2dldCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZGlzYWJsZUZpZWxkKClcbiAgfVxuXG4gIC8vZGlzYWJsZSBmaWVsZFxuICBkaXNhYmxlRmllbGQoKSB7XG4gICAgaWYgKHRoaXMudGVtcFR5cGUgJiYgKHRoaXMudGVtcFR5cGUgPT09ICdMb2FuIFNhbmN0aW9uJyB8fCB0aGlzLnRlbXBUeXBlID09PSAnUmVqZWN0ZWQnKSkge1xuICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gdHJ1ZTtcbiAgICAgIC8vIHRoaXMuZGlzYWJsZUlucHV0KCk7XG4gICAgfVxuICB9XG4gIC8vICouY29tcG9uZW50LnRzXG4gIGFzSXNPcmRlcihhOiBhbnksIGI6IGFueSkge1xuICAgIHJldHVybiAxO1xuICB9XG4gIGdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCkge1xuICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2N1c3RvbWVyLWNyZWF0ZScgfHwgdGhpcy5zb3VyY2UgPT09ICdxbnJEZXRhaWxzJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ29uZXRpbWUnKSB7XG4gICAgICB0aGlzLmdyb3VwZWRRbnIgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ3JvdXBCeSh0aGlzLnF1ZXN0aW9ucywgJ3NlY3Rpb25OYW1lJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAncHJvTGVhZCcpIHtcbiAgICAgIHRoaXMuZ3JvdXBlZFFuciA9IHRoaXMucXVlc3Rpb25zLnJlZHVjZShmdW5jdGlvbiAocnY6IGFueSwgeDogYW55KSB7XG4gICAgICAgIChydlt4LnF1ZXN0aW9uWydzZXF1bmNlSWQnXV0gPSBydlt4LnF1ZXN0aW9uWydzZXF1bmNlSWQnXV0gfHwgW10pLnB1c2goeCk7XG4gICAgICAgIHJldHVybiBydjtcbiAgICAgIH0sIHt9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmdyb3VwZWRRbnIgPSB0aGlzLnF1ZXN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHJ2OiBhbnksIHg6IGFueSkge1xuICAgICAgICAocnZbeC5xdWVzdGlvblsnc2VjdGlvbk9yZGVyJ11dID0gcnZbeC5xdWVzdGlvblsnc2VjdGlvbk9yZGVyJ11dIHx8IFtdKS5wdXNoKHgpO1xuICAgICAgICByZXR1cm4gcnY7XG4gICAgICB9LCB7fSk7XG4gICAgfVxuICB9XG4gIHNldFZhbGlkYXRlRXJyb3IoZXJyb3JzOiBhbnkpIHtcbiAgICB0aGlzLmFwaUVycm9yID0gW107XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBlcnJvciBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hcGlFcnJvcltlcnJvci5xdWVzdGlvbkZpZWxkXSA9IFtdO1xuICAgICAgICB0aGlzLmFwaUVycm9yW2Vycm9yLnF1ZXN0aW9uRmllbGRdLnB1c2goZXJyb3IuZXJyb3IpO1xuICAgICAgfVxuICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGdldEFuc3dlcnMoYW5zd2VyRGF0YTogYW55LCB0eXBlPzogYW55KSB7XG4gICAgdGhpcy5hbnN3ZXJzID0gbmV3IE9iamVjdCgpO1xuICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zID0ge307XG4gICAgaWYgKHR5cGUgPT09ICdnZXQnKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZSA9IFtdO1xuICAgICAgdGhpcy51cGxvYWRlZEltYWdlcyA9IFtdO1xuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzID0gW107XG4gICAgICBmb3IgKGxldCBhbnN3IG9mIGFuc3dlckRhdGEpIHtcblxuICAgICAgICBpZiAoYW5zdy5hbnN3ZXJMaW5lKSB7XG4gICAgICAgICAgaWYgKGFuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZSA9PT0gJ2ZpbGVVcGxvYWQnKSB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3Byb0xlYWQnKSB7XG4gICAgICAgICAgICAgIGlmIChhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0gJiYgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmFjdGlvbiA9ICdhZGQnO1xuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnN0YXR1cyA9ICdDT01QTEVURSc7XG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uczNwYXRoID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnMzcGF0aDtcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS51aWQgPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0udWlkO1xuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmRyaXZlSWQgPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uZHJpdmVJZDtcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS51cmwgPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0ua2V5TmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhbnN3LmFuc3dlckxpbmUuYW5zd2VyICYmIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXSAmJiBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZ2V0Jykge1xuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlcy5wdXNoKGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXSk7XG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkZWRGaWxlc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dID0ge307XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWUgKyAnPScgKyBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY29tbWVudHM7XG4gICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldO1xuXG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UucHVzaChhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0pO1xuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbGVzdG9VcGxvYWRbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdID0ge307XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmlsZXN0b1VwbG9hZFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlID09PSAnZGF0YUdyaWQnKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdKSB7XG4gICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LmRhdGFHcmlkQ29sdW1uLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uc1tpICsgMV0gPSByb3cuZGF0YUdyaWRDb2x1bW5baV0uY29sdW1uW09iamVjdC5rZXlzKHJvdy5kYXRhR3JpZENvbHVtbltpXS5jb2x1bW4pWzBdXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSA9IFtdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXS5wdXNoKGNvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFuc3dlcnNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGFuc3cgb2YgYW5zd2VyRGF0YSkge1xuICAgICAgICBpZiAoYW5zdy5hbnN3ZXJbT2JqZWN0LmtleXMoYW5zdy5hbnN3ZXIpWzBdXSkge1xuICAgICAgICAgIHRoaXMuYW5zd2Vyc1thbnN3LmxhYmVsTmFtZV0gPSBhbnN3LmFuc3dlcltPYmplY3Qua2V5cyhhbnN3LmFuc3dlcilbMF1dO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAnZ2V0Jykge1xuICAgICAgT2JqZWN0LmtleXModGhpcy51cGxvYWRlZEZpbGVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0gPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy51cGxvYWRlZEZpbGVzW2tleV0pLmZvckVhY2goa2V5MSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0pIHtcbiAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdLnR5cGUuc3BsaXQoJy8nKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVbMF0gIT09ICdhdWRpbycgJiYgdHlwZVswXSAhPT0gJ3ZpZGVvJyB8fCAoKHR5cGVbMF0gPT09ICdhdWRpbycgfHwgdHlwZVswXSA9PT0gJ3ZpZGVvJykgJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0uc3RhdHVzID09PSAnQ09NUExFVEUnKSkge1xuICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldLnB1c2goa2V5MSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkW2tleV0pLmZvckVhY2goa2V5MSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0pIHtcbiAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XS5wdXNoKGtleTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5vblN1Ym1pdCgnaW5pdCcpO1xuICB9XG4gIGZpbGVzU2VsZWN0ZWQoZXZlbnQ6IGFueSwgcXVlc3Rpb246IGFueSwgZG9jdW1lbnQ6IGFueSkge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgIGlmIChpbnB1dCkge1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGlucHV0KSB7XG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IHtcbiAgICAgICAgICBjYXB0aW9uOiBkb2N1bWVudCxcbiAgICAgICAgICBmaWxlOiBmaWxlLFxuICAgICAgICAgIGxhYmVsTmFtZTogcXVlc3Rpb24ubGFiZWxOYW1lXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlQ2hhbmdlZC5lbWl0KGZpbGVJbnB1dCk7XG4gICAgICAgIGxldCB0eXBlID0gZmlsZS50eXBlLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgdGhpcy5hcGlFcnJvcltxdWVzdGlvbi5sYWJlbE5hbWVdID0gW107XG4gICAgICAgIGlmICghdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0pIHtcbiAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XG4gICAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xuICAgICAgICAgIGxldCBpbmRleDtcbiAgICAgICAgICBpZiAodHlwZVswXSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlWzBdID09PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmICh0eXBlWzBdID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGVbMF0gPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2Uuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdW2luZGV4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdID0gZmlsZTtcbiAgICAgICAgaWYgKHR5cGVbMF0gPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZVswXSA9PT0gJ2ltYWdlJykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlLnB1c2goZmlsZSk7XG4gICAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlLmluZGV4T2YoZmlsZSk7XG4gICAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2VbaW5keF1bJ3BhdGgnXSA9IGUudGFyZ2V0WydyZXN1bHQnXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hdWRpb1ZpZGVvRmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXMuaW5kZXhPZihmaWxlKTtcbiAgICAgICAgICBpZiAoaW5keCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmF1ZGlvVmlkZW9GaWxlc1tpbmR4XVsncGF0aCddID0gZS50YXJnZXRbJ3Jlc3VsdCddO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsZTIgJiYgdGhpcy5maWxlMi5uYXRpdmVFbGVtZW50LnZhbHVlKSB7XG4gICAgICAgIHRoaXMuZmlsZTIubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcbiAgICB9XG4gIH1cbiAgY2hhbmdlSW1hZ2VTZWxlY3RlZChxdWVzdGlvbjogYW55LCBkb2N1bWVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xuICAgICAgbGV0IHR5cGUgPSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0udHlwZS5zcGxpdCgnLycpO1xuICAgICAgdHlwZSA9IHR5cGVbMF07XG4gICAgICBsZXQgaW5kZXg7XG4gICAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgIGluZGV4ID0gdGhpcy5zZWxlY3RlZE1lc3NhZ2UuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XTtcbiAgICAgICAgdGhpcy5jb21tZW50c1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBkb2N1bWVudF0gPSAnJztcbiAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFuc3dlciA9IHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmZpbHRlcigoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5jYXB0aW9uID09PSBkb2N1bWVudCk7XG4gICAgICAgICAgaWYgKGZpbHRlcmVkQW5zd2VyWzBdKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YoZmlsdGVyZWRBbnN3ZXJbMF0pO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy51cGxvYWRlZEltYWdlcy5pbmRleE9mKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSA9ICdyZW1vdmUnO1xuICAgICAgICB0aGlzLmNvbW1lbnRzW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGRvY3VtZW50XSA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1xuICB9XG4gIGlzTnVtZXJpYyhldnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2UuaXNOdW1lcmljKGV2dCk7XG4gIH1cbiAgb25TdWJtaXQoa2V5dHlwZT86IGFueSkge1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYW5zd2Vyc1trZXldKSB7XG4gICAgICAgIHRoaXMuYW5zd2Vyc1trZXldID0gW107XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkW2tleV0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkW2tleV0pLmZvckVhY2goa2V5MSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnR5cGUuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlWzBdO1xuICAgICAgICAgICAgbGV0IGluZHg7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgICAgIGluZHggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGluZHggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBsZXQgc3RhdHVzID0gJ2FkZCc7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXSkge1xuICAgICAgICAgICAgICAgIHN0YXR1cyA9ICd1cGRhdGUnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSAmJiB0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBbnN3ZXIgPSB0aGlzLmFuc3dlcnNba2V5XS5maWx0ZXIoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuY2FwdGlvbiA9PT0ga2V5MSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkQW5zd2VyWzBdKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYW5zd2Vyc1trZXldLmluZGV4T2YoZmlsdGVyZWRBbnN3ZXJbMF0pO1xuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnR5cGUuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGVbMF07XG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGUgPT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5wdXNoKHsgY2FwdGlvbjoga2V5MSwgYWN0aW9uOiBzdGF0dXMsIG1pbWVUeXBlOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS50eXBlLCB1cmw6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLm5hbWUsIHNpemU6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnNpemUsIGNvbW1lbnRzOiB0aGlzLmNvbW1lbnRzW2tleSArICc9JyArIGtleTFdLCBkcml2ZUlkOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5kcml2ZUlkLCB1aWQ6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnVpZCwgc3RhdHVzOiAnQ09NUExFVEUnIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnB1c2goeyBjYXB0aW9uOiBrZXkxLCBhY3Rpb246IHN0YXR1cywgbWltZVR5cGU6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnR5cGUsIHVybDogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0ubmFtZSwgc2l6ZTogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0uc2l6ZSwgY29tbWVudHM6IHRoaXMuY29tbWVudHNba2V5ICsgJz0nICsga2V5MV0sIGRyaXZlSWQ6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLmRyaXZlSWQsIHVpZDogdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0udWlkLCBzdGF0dXM6ICdDT01QTEVURScgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldICYmIHRoaXMuYW5zd2Vyc1trZXldLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBbnN3ZXIgPSB0aGlzLmFuc3dlcnNba2V5XS5maWx0ZXIoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuY2FwdGlvbiA9PT0ga2V5MSk7XG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEFuc3dlclswXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hbnN3ZXJzW2tleV0uaW5kZXhPZihmaWx0ZXJlZEFuc3dlclswXSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuYW5zd2Vyc1trZXldO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldICYmIHRoaXMuYW5zd2Vyc1trZXldLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW2tleV07XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghdGhpcy5hbnN3ZXJzW2tleV0pIHtcbiAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSAmJiBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSkubGVuZ3RoID4gMCkge1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSkuZm9yRWFjaChrZXkxID0+IHtcbiAgICAgICAgICBpZiAoKCF0aGlzLmZpbGVzdG9VcGxvYWRba2V5XSB8fCAodGhpcy5maWxlc3RvVXBsb2FkW2tleV0gJiYgIXRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKSkgJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0gJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0gPT09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0gJiYgdGhpcy5hbnN3ZXJzW2tleV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFuc3dlciA9IHRoaXMuYW5zd2Vyc1trZXldLmZpbHRlcigoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5jYXB0aW9uID09PSBrZXkxKTtcbiAgICAgICAgICAgICAgaWYgKGZpbHRlcmVkQW5zd2VyWzBdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmFuc3dlcnNba2V5XS5pbmRleE9mKGZpbHRlcmVkQW5zd2VyWzBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0ucHVzaCh7IGNhcHRpb246IGtleTEsIGFjdGlvbjogJ3JlbW92ZScgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmFuc3dlcnNba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGRhdGE6IGFueSA9IFtdO1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgbGV0IG5ld0ZpbGVkOiBhbnkgPSB7fTtcbiAgICAgIGxldCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25zLmZpbHRlcigocXVlc3Q6IGFueSkgPT4gdGhpcy5nZXRRdWVzdGlvbihxdWVzdCkubGFiZWxOYW1lID09PSBrZXkpO1xuICAgICAgcXVlc3Rpb24gPSBxdWVzdGlvblswXS5xdWVzdGlvbjtcbiAgICAgIGZvciAobGV0IGdyaWRBbnN3ZXIgb2YgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2tleV0pIHtcbiAgICAgICAgbGV0IGNvbHVtbkRhdGE6IGFueSA9IFtdO1xuICAgICAgICBPYmplY3Qua2V5cyhncmlkQW5zd2VyKS5mb3JFYWNoKGtleTEgPT4ge1xuICAgICAgICAgIGxldCBuZXdUeXBlOiBhbnkgPSB7fTtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EZXRhaWxzID0gcXVlc3Rpb24uZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucy5maWx0ZXIoKGNsbW46IGFueSkgPT4gY2xtbi5vcmRlciA9PT0gSlNPTi5wYXJzZShrZXkxKSk7XG4gICAgICAgICAgaWYgKGNvbHVtbkRldGFpbHNbMF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblR5cGUgPSBjb2x1bW5EZXRhaWxzWzBdLmRhdGFUeXBlO1xuICAgICAgICAgICAgbmV3VHlwZVtjb2x1bW5UeXBlXSA9IGdyaWRBbnN3ZXJba2V5MV07XG4gICAgICAgICAgICBjb2x1bW5EYXRhLnB1c2goe1xuICAgICAgICAgICAgICBjb2x1bW5JZDogY29sdW1uRGV0YWlsc1swXS5jb2x1bW5JZCxcbiAgICAgICAgICAgICAgY29sdW1uOiBuZXdUeXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgbmV3TWFwOiBhbnkgPSB7fTtcbiAgICAgICAgbmV3TWFwWydkYXRhR3JpZENvbHVtbiddID0gY29sdW1uRGF0YTtcbiAgICAgICAgaWYgKCFuZXdGaWxlZFtxdWVzdGlvbi5maWVsZERhdGFUeXBlXSkge1xuICAgICAgICAgIG5ld0ZpbGVkW3F1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgbmV3RmlsZWRbcXVlc3Rpb24uZmllbGREYXRhVHlwZV0ucHVzaChuZXdNYXApO1xuICAgICAgfVxuICAgICAgZGF0YS5wdXNoKHtcbiAgICAgICAgJ2xhYmVsTmFtZSc6IGtleSxcbiAgICAgICAgJ2Fuc3dlcic6IG5ld0ZpbGVkXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIE9iamVjdC5rZXlzKHRoaXMuYW5zd2VycykuZm9yRWFjaChrZXkgPT4ge1xuXG4gICAgICB0aGlzLmFwaUVycm9yW2tleV0gPSBbXTtcbiAgICAgIGxldCBuZXdNYXA6IGFueSA9IHt9O1xuICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbnMuZmlsdGVyKChxdWVzdDogYW55KSA9PiB0aGlzLmdldFF1ZXN0aW9uKHF1ZXN0KS5sYWJlbE5hbWUgPT09IGtleSk7XG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1jcmVhdGUnIHx8IHRoaXMuc291cmNlID09PSAncW5yRGV0YWlscycgfHwgdGhpcy5zb3VyY2UgPT09ICdvbmV0aW1lJykge1xuICAgICAgICBxdWVzdGlvbiA9IHF1ZXN0aW9uWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlc3Rpb24gPSBxdWVzdGlvblswXS5xdWVzdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSB8fCBxdWVzdGlvbi5maWVsZERhdGFUeXBlID09PSAnYm9vbCcpIHtcbiAgICAgICAgbGV0IGFuc3dlciA9IHRoaXMuYW5zd2Vyc1trZXldO1xuICAgICAgICBpZiAocXVlc3Rpb24uZmllbGREYXRhVHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgICAgICAgYW5zd2VyID0gdGhpcy5kYXRlUHJvY2Vzc29yLnRyYW5zZm9ybVRvWU1ERm9ybWF0KGFuc3dlcik7XG4gICAgICAgIH1cbiAgICAgICAgbmV3TWFwW3F1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdID0gYW5zd2VyO1xuICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgICdsYWJlbE5hbWUnOiBrZXksXG4gICAgICAgICAgJ2Fuc3dlcic6IG5ld01hcFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5ld01hcCA9ICcnO1xuICAgICAgICAvLyBkYXRhLnB1c2goe1xuICAgICAgICAvLyAnbGFiZWxOYW1lJzoga2V5LFxuICAgICAgICAvLyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgcG9zdERhdGE7XG4gICAgaWYgKHRoaXMuc291cmNlID09PSAncW5ycGFwZXInKSB7XG4gICAgICBwb3N0RGF0YSA9IHtcbiAgICAgICAgJ3F1ZXN0aW9ubmFpcmVJZCc6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0uaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLnF1ZXN0aW9ubmFpcmVJZCxcbiAgICAgICAgJ2Fuc3dlckxpbmUnOiBkYXRhXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGtleXR5cGUgPT09ICdzZXJ2aWNlT3B0aW9uJykge1xuICAgICAgcG9zdERhdGEgPSB7XG4gICAgICAgICdxdWVzdGlvbm5haXJlSWQnOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5xdWVzdGlvbm5haXJlSWQsXG4gICAgICAgICdhbnN3ZXJMaW5lJzogdGhpcy5maW5hbE9iamVjdExpc3RcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdpdnInICYmIHRoaXMuY3VzdG9tSUQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdmZmZmZmZmZmZmZmZmZmZmZmZmZmYnLCB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0KVxuICAgICAgcG9zdERhdGEgPSB7XG4gICAgICAgICdxdWVzdGlvbm5haXJlSWQnOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5xdWVzdGlvbm5haXJlSWQsXG4gICAgICAgICdhbnN3ZXJMaW5lJzogZGF0YVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbm5haXJlTGlzdCcsIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QpXG4gICAgICBwb3N0RGF0YSA9IHtcbiAgICAgICAgJ3F1ZXN0aW9ubmFpcmVJZCc6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QuaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9ubmFpcmVJZCxcbiAgICAgICAgJ2Fuc3dlckxpbmUnOiBkYXRhXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHBhc3NEYXRhID0geyAnYW5zd2Vycyc6IHBvc3REYXRhLCAnZmlsZXMnOiB0aGlzLnNlbGVjdGVkTWVzc2FnZSwgJ2F1ZGlvVmlkZW8nOiB0aGlzLmF1ZGlvVmlkZW9GaWxlcywgJ2ZpbGVzdG9VcGxvYWQnOiB0aGlzLmZpbGVzdG9VcGxvYWQsICdkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0JzogdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0LCAnY29tbWVudHMnOiB0aGlzLmNvbW1lbnRzIH07XG4gICAgaWYgKGtleXR5cGUgPT09ICdpbnB1dENoYW5nZScpIHtcbiAgICAgIHRoaXMuY2hhbmdlSGFwcGVuZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoa2V5dHlwZSA9PT0gJ3N1Ym1pdCcpIHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZUhhcHBlbmVkKSB7XG4gICAgICAgIHRoaXMuc3VibWl0UXVlc3Rpb25uYWlyZShwYXNzRGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMudHlwZSkge1xuICAgICAgICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdxbnItbGluaycpIHtcbiAgICAgICAgICAgIHRoaXMucmV0dXJuQW5zd2Vycy5lbWl0KCdub2NoYW5nZScpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRRbnIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuXG4gICAgICB0aGlzLnJldHVybkFuc3dlcnMuZW1pdChwYXNzRGF0YSk7XG4gICAgfVxuICB9XG4gIGdldERhdGUoZGF0ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpO1xuICB9XG4gIGxpc3RDaGFuZ2UoZXY6IGFueSwgdmFsdWU6IGFueSwgcXVlc3Rpb246IGFueSwgY29sdW1uPzogYW55KSB7XG4gICAgaWYgKHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgIT09ICdkYXRhR3JpZCcpIHtcbiAgICAgIGlmIChldi50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICBpZiAoIXRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdKSB7XG4gICAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocXVlc3Rpb24ubGlzdFByb3BlcnRpZSAmJiBxdWVzdGlvbi5saXN0UHJvcGVydGllLm1heEFuc3dlcnMgJiYgcXVlc3Rpb24ubGlzdFByb3BlcnRpZS5tYXhBbnN3ZXJzID4gMSkge1xuICAgICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLnB1c2godmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdWzBdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5pbmRleE9mKHZhbHVlKTtcbiAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uc3BsaWNlKGluZHgsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdKSB7XG4gICAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0ucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXS5pbmRleE9mKHZhbHVlKTtcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXS5zcGxpY2UoaW5keCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XG4gIH1cbiAgaXNDaGVja2VkKHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBhbnksIGNvbHVtbj86IGFueSkge1xuICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlICE9PSAnZGF0YUdyaWQnKSB7XG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0pIHtcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YodmFsdWUpO1xuICAgICAgICBpZiAoaW5keCAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0pIHtcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0uaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBib29sZWFuQ2hhbmdlKGV2OiBhbnksIHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBhbnksIGNvbHVtbj86IGFueSkge1xuICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlICE9PSAnZGF0YUdyaWQnKSB7XG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSkge1xuICAgICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3llcycpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9ICh2YWx1ZSA9PT0gJ3llcycpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1xuICB9XG4gIGlzQm9vbGVhbkNoZWNrZWQodmFsdWU6IGFueSwgcXVlc3Rpb246IGFueSwgY29sdW1uPzogYW55KSB7XG4gICAgdmFsdWUgPSAodmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3llcycpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlICE9PSAnZGF0YUdyaWQnKSB7XG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gIT09ICcnICYmIHR5cGVvZiB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBKU09OLnBhcnNlKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID09PSB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gIT09ICcnICYmIHR5cGVvZiB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdID0gSlNPTi5wYXJzZSh0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzdWJtaXRRdWVzdGlvbm5haXJlKHBhc3NEYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnZmRmZicsIHBhc3NEYXRhKVxuICAgIGNvbnN0IGRhdGFUb1NlbmQ6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgY29uc3QgYmxvYnBvc3RfRGF0YSA9IG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShwYXNzRGF0YS5hbnN3ZXJzKV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pO1xuICAgIGRhdGFUb1NlbmQuYXBwZW5kKCdxdWVzdGlvbicsIGJsb2Jwb3N0X0RhdGEpO1xuICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IHRydWU7XG5cbiAgfVxuXG5cbiAgdXBsb2FkQXVkaW9WaWRlbyhkYXRhOiBhbnksIHR5cGU6IGFueSkge1xuICAgIGlmIChkYXRhLnVybHMgJiYgZGF0YS51cmxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBwb3N0RGF0YTogYW55ID0ge1xuICAgICAgICB1cmxzOiBbXVxuICAgICAgfTtcbiAgICAgIGZvciAoY29uc3QgdXJsIG9mIGRhdGEudXJscykge1xuICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5maWxlc3RvVXBsb2FkW3VybC5sYWJlbE5hbWVdW3VybC5kb2N1bWVudF07XG4gICAgICAgIHRoaXMucXVlc3Rpb25haXJlU2VydmljZS52aWRlb2F1ZGlvUzNVcGxvYWQoZmlsZSwgdXJsLnVybClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHBvc3REYXRhWyd1cmxzJ10ucHVzaCh7IHVpZDogdXJsLnVpZCwgbGFiZWxOYW1lOiB1cmwubGFiZWxOYW1lIH0pO1xuICAgICAgICAgICAgaWYgKGRhdGEudXJscy5sZW5ndGggPT09IHBvc3REYXRhWyd1cmxzJ10ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlID09PSAnY29uc0NoZWNraW4nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyV2FpdGxpc3RRbnJVcGxvYWRTdGF0dXNVcGRhdGUodGhpcy51dWlkLCB0aGlzLmFjY291bnRJZCwgcG9zdERhdGEpXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzc0dvYmFjaygpO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck9iaiA9IHRoaXMuZXJyb3JTZXJ2aWNlLmdldEFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93RXJyb3IodGhpcy53b3JkUHJvY2Vzc29yLmdldFByb2plY3RFcnJvck1lc3NzYWdlcyhlcnJvck9iaikpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY29uc0FwcHQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyQXBwdFFuclVwbG9hZFN0YXR1c1VwZGF0ZSh0aGlzLnV1aWQsIHRoaXMuYWNjb3VudElkLCBwb3N0RGF0YSlcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzR29iYWNrKCk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yT2JqID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dFcnJvcih0aGlzLndvcmRQcm9jZXNzb3IuZ2V0UHJvamVjdEVycm9yTWVzc3NhZ2VzKGVycm9yT2JqKSk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb25zT3JkZXInIHx8IHR5cGUgPT09ICdwYXBlcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uYWlyZVNlcnZpY2UuY29uc3VtZXJPcmRlclFuclVwbG9hZFN0YXR1c1VwZGF0ZSh0aGlzLnV1aWQsIHRoaXMuYWNjb3VudElkLCBwb3N0RGF0YSlcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzR29iYWNrKCk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbnNEb25hdGlvbkRldGFpbHMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyRG9uYXRpb25RbnJVcGxvYWRTdGF0dXNVcGRhdGUodGhpcy51dWlkLCB0aGlzLmFjY291bnRJZCwgcG9zdERhdGEpXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzR29iYWNrKCk7XG4gICAgICAgICAgICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dFcnJvcih0aGlzLndvcmRQcm9jZXNzb3IuZ2V0UHJvamVjdEVycm9yTWVzc3NhZ2VzKGVycm9yT2JqKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yT2JqID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3JPYmopKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcbiAgICB9XG4gIH1cbiAgZ29CYWNrKCkge1xuICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICB9XG4gIGdldFF1ZXN0aW9uKHF1ZXN0aW9uOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1jcmVhdGUnIHx8IHRoaXMuc291cmNlID09PSAncW5yRGV0YWlscycgfHwgdGhpcy5zb3VyY2UgPT09ICdvbmV0aW1lJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ3NlcnZpY2VPcHRpb25BcHB0Jykge1xuICAgICAgcmV0dXJuIHF1ZXN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcXVlc3Rpb24ucXVlc3Rpb247XG4gICAgfVxuICB9XG4gIHZhbGlkYXRlUXVlc3Rpb25uYWlyZShzcmM/OiBhbnkpIHtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25BbnN3ZXJzKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uQW5zd2VycyA9IHtcbiAgICAgICAgYW5zd2Vyczoge1xuICAgICAgICAgIGFuc3dlckxpbmU6IFtdLFxuICAgICAgICAgIHF1ZXN0aW9ubmFpcmVJZDogKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QuaWQpID8gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCA6IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25uYWlyZUlkLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0SW1nKHF1ZXN0aW9uOiBhbnksIGRvY3VtZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS50eXBlLnNwbGl0KCcvJyk7XG4gICAgICBsZXQgZmlsZTtcbiAgICAgIGlmICh0eXBlWzBdID09PSAndmlkZW8nIHx8IHR5cGVbMF0gPT09ICdhdWRpbycpIHtcbiAgICAgICAgZmlsZSA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsZSA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5keCA9IGZpbGUuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xuICAgICAgaWYgKGluZHggIT09IC0xKSB7XG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5maWxlU2VydmljZS5nZXRJbWFnZShudWxsLCB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xuXG4gICAgICAgIGlmIChwYXRoICYmIHBhdGggIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgICAgfVxuICAgICAgICBwYXRoID0gZmlsZVtpbmR4XS5wYXRoO1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xuICAgICAgY29uc3QgaW5keCA9IHRoaXMudXBsb2FkZWRJbWFnZXMuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xuICAgICAgaWYgKGluZHggIT09IC0xKSB7XG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5maWxlU2VydmljZS5nZXRJbWFnZShudWxsLCB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdKTtcbiAgICAgICAgaWYgKHBhdGggJiYgcGF0aCAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIHBhdGggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLnMzcGF0aDtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIG9uQnV0dG9uQmVmb3JlSG9vayhldmVudDogYW55KSB7XG4gIC8vICAgaWYgKCFldmVudCB8fCAhZXZlbnQuYnV0dG9uKSB7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIGlmIChldmVudC5idXR0b24udHlwZSA9PT0gQnV0dG9uVHlwZS5ET1dOTE9BRCkge1xuICAvLyAgIH1cbiAgLy8gfVxuICBvcGVuQXR0YWNobWVudEdhbGxlcnkocXVlc3Rpb246IGFueSwgZG9jdW1lbnQ6IGFueSkge1xuICAgIHRoaXMuaW1hZ2VfbGlzdF9wb3B1cCA9IFtdO1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IGltYWdlUGF0aDtcbiAgICBsZXQgY2FwdGlvbiA9ICcnO1xuICAgIGlmICh0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcbiAgICAgIGxldCB0eXBlID0gdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdLnR5cGUuc3BsaXQoJy8nKTtcbiAgICAgIGlmICh0eXBlWzBdID09PSAndmlkZW8nIHx8IHR5cGVbMF0gPT09ICdhdWRpbycpIHtcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcbiAgICAgICAgdGhpcy5zaG93QXVkaW9WaWRlb0ZpbGUodGhpcy5hdWRpb1ZpZGVvRmlsZXNbaW5keF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcbiAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XG4gICAgICAgICAgaWYgKHR5cGVbMV0gPT09ICdwZGYnIHx8IHR5cGVbMV0gPT09ICdkb2N4JyB8fCB0eXBlWzFdID09PSAndHh0JyB8fCB0eXBlWzFdID09PSAnZG9jJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXNzYWdlW2luZHhdLnMzcGF0aCkge1xuICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XS5zM3BhdGgsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMuc2VsZWN0ZWRNZXNzYWdlW2luZHhdLnBhdGgsICdfYmxhbmsnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW1hZ2VQYXRoID0gdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XS5wYXRoO1xuICAgICAgICAgICAgY2FwdGlvbiA9IHRoaXMuY29tbWVudHNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgZG9jdW1lbnRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XG4gICAgICBjb25zdCBpbmR4ID0gdGhpcy51cGxvYWRlZEltYWdlcy5pbmRleE9mKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XG4gICAgICBsZXQgdHlwZSA9IHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS50eXBlLnNwbGl0KCcvJyk7XG4gICAgICBsZXQgZXh0ID0gdHlwZVsxXTtcbiAgICAgIHR5cGUgPSB0eXBlWzBdO1xuICAgICAgaWYgKGluZHggIT09IC0xKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAndmlkZW8nIHx8IHR5cGUgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICB0aGlzLnNob3dBdWRpb1ZpZGVvRmlsZSh0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdKTtcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT09ICdwZGYnIHx8IGV4dCA9PT0gJ2RvY3gnIHx8IGV4dCA9PT0gJ3R4dCcgfHwgZXh0ID09PSAnZG9jJyB8fCBleHQgPT09ICd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcpIHtcbiAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0uczNwYXRoLCAnX2JsYW5rJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3R5cGV0eHQyJyx0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdKTtcbiAgICAgICAgICBpZiAodGhpcy51cGxvYWRlZEltYWdlcyAmJiB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdICYmIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF1bJ2tleU5hbWUnXSAmJlxuICAgICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XVsna2V5TmFtZSddLmluY2x1ZGVzKCdkb2N4JykpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS5zM3BhdGgsICdfYmxhbmsnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbWFnZVBhdGggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLnMzcGF0aDtcbiAgICAgICAgICAgIGNhcHRpb24gPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLmNvbW1lbnRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW1hZ2VQYXRoKSB7XG4gICAgICBjb25zdCBpbWdvYmogPSB7XG4gICAgICAgIHNyYzogaW1hZ2VQYXRoLFxuICAgICAgICB0aHVtYjogaW1hZ2VQYXRoLFxuICAgICAgICBhbHQ6IGNhcHRpb25cbiAgICAgIH1cbiAgICAgIHRoaXMuaW1hZ2VfbGlzdF9wb3B1cC5wdXNoKGltZ29iaik7XG4gICAgICBjb3VudCsrO1xuICAgIH1cbiAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5vcGVuR2FsbGVyeSh0aGlzLmltYWdlX2xpc3RfcG9wdXBbMF0pO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH1cbiAgc2hvd0F1ZGlvVmlkZW9GaWxlKGZpbGU6IGFueSkge1xuICAgIGNvbnN0IGZpbGV2aWV3ZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTaG93dXBsb2FkZmlsZUNvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgcGFuZWxDbGFzczogWydwb3B1cC1jbGFzcycsICdjb21tb25wb3B1cG1haW5jbGFzcycsICd1cGxvYWRmaWxlY29tcG9uZW50Y2xhc3MnXSxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZmlsZTogZmlsZSxcbiAgICAgICAgc291cmNlOiAncW5yJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZpbGV2aWV3ZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgfSk7XG4gIH1cbiAgZWRpdFFucigpIHtcbiAgICB0aGlzLmVkaXRRdWVzdGlvbm5haXJlID0gIXRoaXMuZWRpdFF1ZXN0aW9ubmFpcmU7XG4gIH1cbiAgZ2V0RG9jdW1lbnRzKHF1ZXN0aW9uOiBhbnkpIHtcbiAgICBpZiAocXVlc3Rpb24uZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZSA+IDEgJiYgcXVlc3Rpb24uZmlsZVByb3BlcnRpZS5taW5Ob09mRmlsZSAhPT0gcXVlc3Rpb24uZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2FkRmlsZXNUZW1wW3F1ZXN0aW9uLmxhYmVsTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBxdWVzdGlvbi5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHM7XG4gICAgfVxuICB9XG4gIHNob3dQcm92aWRlclRleHQocXVlc3Rpb246IGFueSkge1xuICAgIGlmIChxdWVzdGlvbi53aG9DYW5BbnN3ZXIgJiYgcXVlc3Rpb24ud2hvQ2FuQW5zd2VyID09PSAnUFJPVklERVJfT05MWScpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3VjY2Vzc0dvYmFjaygpIHtcbiAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMudHlwZSkge1xuICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZCA9IFtdO1xuICAgICAgdGhpcy5lZGl0UW5yKCk7XG4gICAgICB0aGlzLnJldHVybkFuc3dlcnMuZW1pdCgncmVsb2FkJyk7XG4gICAgICBpZiAodGhpcy50eXBlICE9PSAncW5yLWxpbmsnKSB7XG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dTdWNjZXNzKCdVcGRhdGVkIFN1Y2Nlc3NmdWxseScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzaG93RGF0YUdyaWRBZGRTZWN0aW9uKHF1ZXN0aW9uOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNob3dEYXRhR3JpZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gdmFsdWU7XG4gICAgdGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBudWxsO1xuICB9XG4gIHNob3dEYXRhR3JpZEFkZFNlY3Rpb25uKHF1ZXN0aW9uOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnF1ZXNTdG9yZSA9IHF1ZXN0aW9uO1xuICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgncXVlc1N0b3JlJywgdGhpcy5xdWVzU3RvcmUpO1xuICAgIHRoaXMuc2hvd0RhdGFHcmlkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IG51bGw7XG4gICAgdGhpcy5xbnJQb3B1cChxdWVzdGlvbiwgdHJ1ZSlcbiAgfVxuICBzYXZlRGF0YUdyaWRDb2x1bW4ocXVlc3Rpb246IGFueSkge1xuICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgZm9yIChsZXQgY29sdW1uIG9mIHF1ZXN0aW9uLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMpIHtcbiAgICAgIGlmICh0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2Jvb2wnKSB7XG4gICAgICAgIGNvbHVtbnNbY29sdW1uLm9yZGVyXSA9IHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnbGlzdCcgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZmlsZVVwbG9hZCcpIHtcbiAgICAgICAgICBjb2x1bW5zW2NvbHVtbi5vcmRlcl0gPSBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW5zW2NvbHVtbi5vcmRlcl0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdKSB7XG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IFtdO1xuICAgIH1cbiAgICBpZiAodGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV0gIT09IG51bGwpIHtcbiAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdW3RoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdXSA9IGNvbHVtbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdLnB1c2goY29sdW1ucyk7XG4gICAgfVxuICAgIHRoaXMuY2FuY2VsQWRkb3JVcGRhdGUocXVlc3Rpb24pO1xuICAgIHRoaXMub25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XG4gIH1cbiAgZWRpdERhdGFHcmlkKHF1ZXN0aW9uOiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXS5pbmRleE9mKGNvbHVtbik7XG4gICAgT2JqZWN0LmtleXMoY29sdW1uKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBrZXldID0gY29sdW1uW2tleV07XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBpbmRleDtcbiAgICB0aGlzLnNob3dEYXRhR3JpZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gdHJ1ZTtcbiAgfVxuICBkZWxldGVEYXRhR3JpZChxdWVzdGlvbjogYW55LCBjb2x1bW46IGFueSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZihjb2x1bW4pO1xuICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdLnNwbGljZShpbmRleCwgMSk7XG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcbiAgfVxuICBjYW5jZWxBZGRvclVwZGF0ZShxdWVzdGlvbjogYW55KSB7XG4gICAgdGhpcy5zaG93RGF0YUdyaWRbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IGZhbHNlO1xuICAgIHRoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gbnVsbDtcbiAgICBmb3IgKGxldCBjb2x1bW4gb2YgcXVlc3Rpb24uZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucykge1xuICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9ICcnO1xuICAgIH1cbiAgfVxuICBnZXRDb2x1bW5UeXBlKGNvbHVtbnM6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBjb25zdCBjb2x1bW5EZXRhaWxzID0gY29sdW1ucy5maWx0ZXIoKGNsbW46IGFueSkgPT4gY2xtbi5vcmRlciA9PT0gSlNPTi5wYXJzZShjb2x1bW4pKTtcbiAgICBpZiAoY29sdW1uRGV0YWlsc1swXSkge1xuICAgICAgcmV0dXJuIGNvbHVtbkRldGFpbHNbMF0uZGF0YVR5cGU7XG4gICAgfVxuICB9XG4gIGdldFNlY3Rpb25Db3VudCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5ncm91cGVkUW5yKS5sZW5ndGg7XG4gIH1cbiAgZ2V0Qm9vbFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB2YWx1ZSA9ICh2YWx1ZSAhPT0gJycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuICdZZXMnO1xuICAgIH1cbiAgICByZXR1cm4gJ05vJztcbiAgfVxuICBnZXRNYXhkYXRlKGRhdGE6IGFueSkge1xuICAgIGxldCBkYXRlO1xuICAgIGlmICh0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzICYmIHRoaXMuZ2V0UXVlc3Rpb24oZGF0YSkuZGF0ZVByb3BlcnRpZXMuZW5kRGF0ZSkge1xuICAgICAgY29uc3QgZHQgPSB0aGlzLnJldmVyc2UodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcy5lbmREYXRlKTtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkdClcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZSA9IHRoaXMudGRheTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgZ2V0TWluZGF0ZShkYXRhOiBhbnkpIHtcbiAgICBsZXQgZGF0ZTtcbiAgICBpZiAodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcyAmJiB0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLnN0YXJ0RGF0ZSkge1xuICAgICAgY29uc3QgZHQgPSB0aGlzLnJldmVyc2UodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcy5zdGFydERhdGUpO1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGR0KVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRlID0gdGhpcy5taW5kYXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV2ZXJzZShzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcy5zcGxpdChcIi1cIikucmV2ZXJzZSgpLmpvaW4oXCItXCIpO1xuICB9XG4gIHFuclBvcHVwKHF1ZXN0aW9uOiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICAvLyBpZiAodmFsdWUgPT09ICdlZGl0Jykge1xuICAgIC8vICAgdGhpcy5xdWVzU3RvcmUgPSB0aGlzLmxTdG9yYWdlU2VydmljZS5nZXRpdGVtZnJvbUxvY2FsU3RvcmFnZSgncXVlc1N0b3JlJyk7XG4gICAgLy8gICB0aGlzLnNob3dxbnIgPSB0cnVlO1xuICAgIC8vICAgdGhpcy5lZGl0YWJsZUl0ZW0gPSBxdWVzdGlvbjtcbiAgICAvLyAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMucXVlc1N0b3JlKSlcbiAgICAvLyAgIGNvbnN0IHJlbW92ZWl0ZW1kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFuckRpYWxvZ0NvbXBvbmVudCwge1xuICAgIC8vICAgICB3aWR0aDogJzUwJScsXG4gICAgLy8gICAgIHBhbmVsQ2xhc3M6IFsncG9wdXAtY2xhc3MnLCAnY29tbW9ucG9wdXBtYWluY2xhc3MnLCAnY29uZmlybWF0aW9ubWFpbmNsYXNzJ10sXG4gICAgLy8gICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAvLyAgICAgZGF0YToge1xuICAgIC8vICAgICAgIGRhdGE6IHRoaXMucXVlc1N0b3JlLFxuICAgIC8vICAgICAgIHFucl90eXBlOiAnc2VydmljZV9vcHRpb24nLFxuICAgIC8vICAgICAgIHZpZXc6ICdxbnJWaWV3JyxcbiAgICAvLyAgICAgICBpc0VkaXQ6ICdlZGl0JyxcbiAgICAvLyAgICAgICBlZGl0YWJsZUl0ZW06IHRoaXMuZWRpdGFibGVJdGVtLFxuICAgIC8vICAgICAgIHNlcnZEZXRhaWxzOiB0aGlzLnNlcnZpY2VcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfSk7XG4gICAgLy8gICByZW1vdmVpdGVtZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgLy8gICAgIGlmIChyZXN1bHQpIHtcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhcInJlc3VsdC5kYXRhLmFuc3dlckxpbmVcIiwgcmVzdWx0LmRhdGEuYW5zd2VyTGluZSlcbiAgICAvLyAgICAgICB0aGlzLmRhdGFHcmlkTGlzdCA9IHJlc3VsdC5kYXRhLmFuc3dlckxpbmU7XG4gICAgLy8gICAgICAgdGhpcy5wb3N0X0RhdGEgPSByZXN1bHQuZGF0YTtcbiAgICAvLyAgICAgICB0aGlzLnNob3dJdGVtID0gdHJ1ZTtcbiAgICAvLyAgICAgICB0aGlzLml0ZW0gPSByZXN1bHQuZGF0YS5hbnN3ZXJMaW5lWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLmNvbHVtbi5saXN0WzBdO1xuICAgIC8vICAgICAgIGlmIChyZXN1bHQuZGF0YS50b3RhbFByaWNlKSB7XG4gICAgLy8gICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSByZXN1bHQuZGF0YS50b3RhbFByaWNlXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgIGxldCBpbmRleDEgPSB0aGlzLml0ZW1BcnJheS5maW5kSW5kZXgoeCA9PiB4LmlkID09PSB0aGlzLmVkaXRhYmxlSXRlbS5pZClcbiAgICAvLyAgICAgICBpZiAoaW5kZXgxID4gLTEpIHtcbiAgICAvLyAgICAgICAgIHRoaXMuaXRlbUFycmF5LnNwbGljZShpbmRleDEsIDEpO1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgICBsZXQgZHVtbXlBcnJheSA9IHsgaWQ6IHRoaXMuaWQsIHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgaXRlbTogdGhpcy5pdGVtLCBwcmljZTogdGhpcy50b3RhbFByaWNlLCBjb2x1bW5JdGVtOiB0aGlzLmRhdGFHcmlkTGlzdCB9XG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkucHVzaChkdW1teUFycmF5KVxuICAgIC8vICAgICAgIGlmICh0aGlzLml0ZW1BcnJheSkge1xuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSAwO1xuICAgIC8vICAgICAgIHRoaXMuaXRlbUFycmF5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgIC8vICAgICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IHRoaXMuc2VydmljZVRvdGFsUHJpY2UgKyBpdGVtLnByaWNlO1xuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdzZXJ2aWNlVG90YWxQcmljZScsIHRoaXMuc2VydmljZVRvdGFsUHJpY2UpO1xuICAgIC8vICAgICAgIH0pO1xuICAgIC8vICAgICAgIHRoaXMuaWQgPSB0aGlzLmlkICsgMVxuICAgIC8vICAgICAgIGxldCBvYmogPSB7IHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgZGdMaXN0OiB0aGlzLnBvc3RfRGF0YS5hbnN3ZXJMaW5lIH07XG4gICAgLy8gICAgICAgdGhpcy5maW5hbE9iamVjdExpc3QucHVzaChvYmopO1xuICAgIC8vICAgICAgIHRoaXMub25TdWJtaXQoJ3NlcnZpY2VPcHRpb24nKVxuICAgIC8vICAgICB9XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG4gICAgLy8gZWxzZSB7XG4gICAgLy8gICB0aGlzLnNob3dxbnIgPSB0cnVlO1xuICAgIC8vICAgY29uc29sZS5sb2coXCJ0aGlzLnNlcXVlbmNlSWRcIiwgcXVlc3Rpb24pXG4gICAgLy8gICB0aGlzLnNlcXVlbmNlSWQgPSBxdWVzdGlvbi5zZXF1bmNlSWQ7XG4gICAgLy8gICBjb25zdCByZW1vdmVpdGVtZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRbnJEaWFsb2dDb21wb25lbnQsIHtcbiAgICAvLyAgICAgd2lkdGg6ICc1MCUnLFxuICAgIC8vICAgICBwYW5lbENsYXNzOiBbJ3BvcHVwLWNsYXNzJywgJ2NvbW1vbnBvcHVwbWFpbmNsYXNzJywgJ2NvbmZpcm1hdGlvbm1haW5jbGFzcyddLFxuICAgIC8vICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgLy8gICAgIGRhdGE6IHtcbiAgICAvLyAgICAgICBkYXRhOiBxdWVzdGlvbixcbiAgICAvLyAgICAgICBxbnJfdHlwZTogJ3NlcnZpY2Vfb3B0aW9uJyxcbiAgICAvLyAgICAgICB2aWV3OiAncW5yVmlldycsXG4gICAgLy8gICAgICAgaXNFZGl0OiAnYWRkJyxcbiAgICAvLyAgICAgICBzZXJ2RGV0YWlsczogdGhpcy5zZXJ2aWNlXG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vICAgcmVtb3ZlaXRlbWRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgIC8vICAgICBpZiAocmVzdWx0KSB7XG4gICAgLy8gICAgICAgdGhpcy5kYXRhR3JpZExpc3QgPSByZXN1bHQuZGF0YS5hbnN3ZXJMaW5lO1xuICAgIC8vICAgICAgIHRoaXMucG9zdF9EYXRhID0gcmVzdWx0LmRhdGE7XG4gICAgLy8gICAgICAgdGhpcy5zaG93SXRlbSA9IHRydWU7XG4gICAgLy8gICAgICAgdGhpcy5pdGVtID0gcmVzdWx0LmRhdGEuYW5zd2VyTGluZVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5jb2x1bW4ubGlzdFswXTtcblxuICAgIC8vICAgICAgIGlmIChyZXN1bHQuZGF0YS50b3RhbFByaWNlKSB7XG4gICAgLy8gICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSByZXN1bHQuZGF0YS50b3RhbFByaWNlXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgIGxldCBkdW1teUFycmF5ID0geyBpZDogdGhpcy5pZCwgc2VxdWVuY2VJZDogdGhpcy5zZXF1ZW5jZUlkLCBpdGVtOiB0aGlzLml0ZW0sIHByaWNlOiB0aGlzLnRvdGFsUHJpY2UsIGNvbHVtbkl0ZW06IHRoaXMuZGF0YUdyaWRMaXN0IH1cbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5wdXNoKGR1bW15QXJyYXkpXG5cbiAgICAvLyAgICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcbiAgICAvLyAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnaXRlbUFycmF5JywgdGhpcy5pdGVtQXJyYXkpO1xuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gMDtcbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAvLyAgICAgICAgIGxldCBxdWFudGl0eSA9IGl0ZW0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eTtcbiAgICAvLyAgICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSAodGhpcy5zZXJ2aWNlVG90YWxQcmljZSArIGl0ZW0ucHJpY2UpICogcXVhbnRpdHk7XG4gICAgLy8gICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ3NlcnZpY2VUb3RhbFByaWNlJywgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSk7XG4gICAgLy8gICAgICAgfSk7XG4gICAgLy8gICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgKyAxXG4gICAgLy8gICAgICAgbGV0IG9iaiA9IHsgc2VxdWVuY2VJZDogdGhpcy5zZXF1ZW5jZUlkLCBkZ0xpc3Q6IHRoaXMucG9zdF9EYXRhLmFuc3dlckxpbmUgfTtcbiAgICAvLyAgICAgICB0aGlzLmZpbmFsT2JqZWN0TGlzdC5wdXNoKG9iaik7XG4gICAgLy8gICAgICAgdGhpcy5vblN1Ym1pdCgnc2VydmljZU9wdGlvbicpXG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH0pO1xuICAgIC8vIH1cbiAgfVxuICBpbmNyZW1lbnQoaXRlbTogYW55KSB7XG4gICAgLy8gY29uc3QgcmVtb3ZlaXRlbWRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUW5yRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgLy8gICB3aWR0aDogJzEwMCUnLFxuICAgIC8vICAgcGFuZWxDbGFzczogWydwb3B1cC1jbGFzcycsICdjb21tb25wb3B1cG1haW5jbGFzcycsICdjb25maXJtYXRpb25tYWluY2xhc3MnXSxcbiAgICAvLyAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAvLyAgIGRhdGE6IHtcbiAgICAvLyAgICAgaXRlbTogaXRlbSxcbiAgICAvLyAgICAgZGF0YTogdGhpcy5xdWVzdGlvbm5haXJlTGlzdCxcbiAgICAvLyAgICAgdmlldzogJ3FucnJlcGVhdFZpZXcnLFxuICAgIC8vICAgICBzZXJ2RGV0YWlsczogdGhpcy5zZXJ2aWNlXG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG4gICAgLy8gcmVtb3ZlaXRlbWRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgIC8vICAgaWYgKHJlc3VsdCkge1xuICAgIC8vICAgICBpZiAocmVzdWx0ID09PSAnYWRkTmV3Jykge1xuICAgIC8vICAgICAgIHRoaXMucXVlc1N0b3JlID0gdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ3F1ZXNTdG9yZScpO1xuICAgIC8vICAgICAgIHRoaXMucW5yUG9wdXAodGhpcy5xdWVzU3RvcmUsIHRydWUpXG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgaWYgKCF0aGlzLnNlcXVlbmNlSWQpIHtcbiAgICAvLyAgICAgICAgIHRoaXMuc2VxdWVuY2VJZCA9IGl0ZW0uc2VxdWVuY2VJZFxuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgICBsZXQgZHVtbXlBcnJheSA9IHsgaWQ6IHRoaXMuaWQsIHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgaXRlbTogcmVzdWx0LnJlcGVhdEl0ZW0uaXRlbSwgcHJpY2U6IHJlc3VsdC5yZXBlYXRJdGVtLnByaWNlLCBjb2x1bW5JdGVtOiByZXN1bHQucmVwZWF0SXRlbS5jb2x1bW5JdGVtIH1cbiAgICAvLyAgICAgICBsZXQgaXRlbXMgPSBkdW1teUFycmF5LmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW47XG4gICAgLy8gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgIC8vICAgICAgICAgaXRlbXNbaV0ucXVhbnRpdHkgPSBpdGVtc1tpXS5xdWFudGl0eSArIDE7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgIGlmICh0aGlzLml0ZW1BcnJheSkge1xuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICAgIGNvbnNvbGUubG9nKFwiVGhpcy5JdGVtQXJyYXlcIiwgdGhpcy5pdGVtQXJyYXkpXG4gICAgLy8gICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IDA7XG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgLy8gICAgICAgICBsZXQgcXVhbnRpdHkgPSBpdGVtLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0ucXVhbnRpdHk7XG4gICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcInF1YW50aXR5XCIsIHF1YW50aXR5KVxuICAgIC8vICAgICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSArPSBpdGVtLnByaWNlICogcXVhbnRpdHk7XG4gICAgLy8gICAgICAgfSk7XG4gICAgLy8gICAgICAgY29uc29sZS5sb2coXCJzZXJ2aWNlVG90YWxQcmljZVwiLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKVxuICAgIC8vICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnc2VydmljZVRvdGFsUHJpY2UnLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKTtcbiAgICAvLyAgICAgICB0aGlzLmlkID0gdGhpcy5pZCArIDFcbiAgICAvLyAgICAgICBsZXQgb2JqID0geyBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGRnTGlzdDogcmVzdWx0LnJlcGVhdEl0ZW0uY29sdW1uSXRlbSB9O1xuICAgIC8vICAgICAgIHRoaXMuZmluYWxPYmplY3RMaXN0LnB1c2gob2JqKTtcbiAgICAvLyAgICAgICB0aGlzLm9uU3VibWl0KCdzZXJ2aWNlT3B0aW9uJylcbiAgICAvLyAgICAgfVxuXG4gICAgLy8gICB9XG4gICAgLy8gfSk7XG4gIH1cbiAgZ2V0SXRlbVF1YW50aXR5KGl0ZW06IGFueSkge1xuICAgIGxldCBxdWFudGl0eSA9IGl0ZW0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eTtcbiAgICByZXR1cm4gcXVhbnRpdHlcbiAgICAvLyBjb25zb2xlLmxvZyhcIml0ZW1cIiwgaXRlbSlcbiAgfVxuICBkZWNyZW1lbnQocmVtb3ZpbmdJdGVtOiBhbnkpIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLml0ZW1BcnJheS5maW5kSW5kZXgoKHg6IGFueSkgPT4geC5pZCA9PT0gcmVtb3ZpbmdJdGVtLmlkKVxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMuaXRlbUFycmF5W2luZGV4XVwiLCB0aGlzLml0ZW1BcnJheVtpbmRleF0pXG4gICAgICBpZiAodGhpcy5nZXRJdGVtUXVhbnRpdHkodGhpcy5pdGVtQXJyYXlbaW5kZXhdKSA9PSAxKSB7XG4gICAgICAgIHRoaXMuaXRlbUFycmF5LnNwbGljZShpbmRleCwgMSk7IC8vIDJuZCBwYXJhbWV0ZXIgbWVhbnMgcmVtb3ZlIG9uZSBpdGVtIG9ubHlcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1BcnJheVtpbmRleF0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtbjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGl0ZW1zW2ldLnF1YW50aXR5ID0gaXRlbXNbaV0ucXVhbnRpdHkgLSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcbiAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gMDtcbiAgICAgIHRoaXMuaXRlbUFycmF5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gdGhpcy5zZXJ2aWNlVG90YWxQcmljZSArIGl0ZW0ucHJpY2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnc2VydmljZVRvdGFsUHJpY2UnLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKTtcbiAgICAgIHRoaXMuZmluYWxPYmplY3RMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMub25TdWJtaXQoJ3NlcnZpY2VPcHRpb24nKVxuICB9XG4gIGRpc2FibGVJbnB1dCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcHJpdmF0ZSBnZXRDdXJyZW50SW5kZXhDdXN0b21MYXlvdXQoaW1hZ2UsIGltYWdlcyk6IG51bWJlciB7XG4gICAgcmV0dXJuIGltYWdlID8gaW1hZ2VzLmluZGV4T2YoaW1hZ2UpIDogLTE7XG4gIH1cbiAgb3BlbkdhbGxlcnkoaW1hZ2UpOiB2b2lkIHtcbiAgICBsZXQgaW1hZ2VJbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4Q3VzdG9tTGF5b3V0KGltYWdlLCB0aGlzLmltYWdlX2xpc3RfcG9wdXApO1xuICAgIHRoaXMuZ2FsbGVyeVNlcnZpY2Uub3Blbih0aGlzLmltYWdlX2xpc3RfcG9wdXAsIGltYWdlSW5kZXgpO1xuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImNvbnMtaW5ib3ggbm8tcGFkZGluZy1zbWFsbFwiICpuZ0lmPVwiIXNob3dzZXJ2aWNlXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXIgY29uc3VtZXItZGFzaGhvbWUgcC0wXCIgKm5nSWY9XCIhdHlwZSAmJiBzb3VyY2UhPSdwcm9MZWFkJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIHRpdGxlLWdiIHJvdW5kZWQtMFwiICpuZ0lmPVwidXVpZFwiPlxuICAgICAgPGg1IGNsYXNzPVwibXQtMiBib2xkXCI+e3txdWVzdGlvbm5haXJlX2hlYWRpbmcgfCBjYXBpdGFsaXplRmlyc3R9fSA8YSBjbGFzcz1cInB1bGwtbGVmdCBtZS00IGJhY2stYnRuXCJcbiAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnRcIj48L2k+PC9hPjwvaDU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8YXBwLWNvbW1vbi1pbm5lcmxvYWRpbmctc3Bpbm5lciAqbmdJZj1cImxvYWRpbmdcIj48L2FwcC1jb21tb24taW5uZXJsb2FkaW5nLXNwaW5uZXI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4tZmx1aWQgcHVsbC1yaWdodCBtZS0yIG1iLTRcIlxuICAgICpuZ0lmPVwidHlwZSAhPT0gJ3FuckxpbmtQcm92aWRlcicgJiYgIWJ1dHRvbkRpc2FibGUgJiYgd2FpdGxpc3RTdGF0dXNcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwibm9ybWFsLWJ0biBlZGl0XCIgbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJlZGl0UW5yKClcIiBpZD1cImJ0bkVkaXRcIj5FZGl0PC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uLWZsdWlkIHdpZHRoLTEwMFwiIFtjbGFzcy5xbnJEaXNhYmxlU3RhdGVdPVwiZGlzYWJsZUlucHV0KClcIlxuICAgIFtjbGFzcy5wLTBdPVwidXVpZCAmJiAoc291cmNlID09PSAnY29uc0NoZWNraW4nIHx8IHNvdXJjZSA9PT0gJ2NvbnNBcHB0JyB8fCBzb3VyY2UgPT09ICdjb25zT3JkZXInIHx8IHNvdXJjZSA9PT0gJ3BhcGVyJyB8fCBzb3VyY2UgPT09ICdjb25zRG9uYXRpb25EZXRhaWxzJyB8fCBzb3VyY2UgPT09ICdpdnInKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wteGwtMTIgZm9yY2VfY2VudGVyXCIgW2NsYXNzLnAtMF09XCJ1dWlkXCIgW2NsYXNzLm5vLXBhZGRpbmctc21hbGxdPVwic291cmNlICYmIHNvdXJjZT09J2l2cidcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInFucnNlY1wiICpuZ0Zvcj1cImxldCBxbnIgb2YgZ3JvdXBlZFFuciB8IGtleXZhbHVlOiBhc0lzT3JkZXJcIlxuICAgICAgICAgIFtjbGFzcy5zZWN0aW9uLXNoYWRvd109XCJnZXRTZWN0aW9uQ291bnQoKSA+IDFcIiBbY2xhc3Mubm8tcGFkZGluZy1zbWFsbF09XCJzb3VyY2UgJiYgc291cmNlPT0naXZyJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGNhcmQgbWduLTBcIiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcW5yLnZhbHVlXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtMTIgcXVlc3RcIj57e2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbH19XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGUgcHVsbC1yaWdodFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFkZGljb25dPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZGF0YUdyaWQnICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgc2hvd0RhdGFHcmlkQWRkU2VjdGlvbihnZXRRdWVzdGlvbihxdWVzdGlvbiksIHRydWUpXCI+PC9pPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvLW9ubHlcIiAqbmdJZj1cInNob3dQcm92aWRlclRleHQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiPkZvciBQcm92aWRlcnM8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWRcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5tYW5kYXRvcnlcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1sZXZlbC1zZXR0aW5nc1wiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmhpbnRcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmhpbnQgfCBzYWZlSHRtbFwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8IS0tIGZvciBmaWxlIHVwbG9hZCAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZmlsZVVwbG9hZCdcIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbXVsdGlwbGUgI2RlcHRzZWwgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUubWF4Tm9PZkZpbGUgPiAxICYmIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLm1pbk5vT2ZGaWxlICE9PSBnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ1cGxvYWRGaWxlc1RlbXBbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIiBjbGFzcz1cInNlbGVjdC1ib3hcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkb2N1bWVudCBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkb2N1bWVudFwiIChjbGljayk9XCJjaGFuZ2VJbWFnZVNlbGVjdGVkKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jdW1lbnQpXCI+XG4gICAgICAgICAgICAgICAgICB7e2RvY3VtZW50fX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBjb2wtMTIgY29sLW1kLTEyIGNvbC1zbS0xMiBwLTAgbXQtNFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXREb2N1bWVudHMoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKSAmJiBnZXREb2N1bWVudHMoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKS5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3B6b25lIGRyb3B6b25lLWRlZmF1bHQgZHJvcHpvbmUtcHJpbWFyeSBkei1jbGlja2FibGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnNpbmdsZS1maWxlXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHMubGVuZ3RoPT0xXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBhdXRvO1wiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZG9jIG9mIGdldERvY3VtZW50cyhnZXRRdWVzdGlvbihxdWVzdGlvbikpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkei1wcmV2aWV3IGR6LXByb2Nlc3NpbmcgZHotaW1hZ2UtcHJldmlldyBkei1lcnJvciBkei1jb21wbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRJbWcoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRvY25hbWVcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHMubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tkb2N9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkemltYWdlIHBvaW50ZXItY3Vyc29yXCIgKGNsaWNrKT1cIm9wZW5BdHRhY2htZW50R2FsbGVyeShnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgYWx0PVwiXCIgY2xhc3M9XCJpbWdfZml0XCIgW3NyY109XCJnZXRJbWcoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgKGJsdXIpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29tbWVudHNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZSArICc9JyArIGRvY11cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FsX2FjdGlvblwiICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmIG1vZGUhPT0ncmVhZCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUltYWdlU2VsZWN0ZWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkei1wcmV2aWV3IGR6LXByb2Nlc3NpbmcgZHotaW1hZ2UtcHJldmlldyBkei1lcnJvciBkei1jb21wbGV0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvZ29maWxlMS5jbGljaygpXCIgKm5nSWY9XCIhZ2V0SW1nKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2NuYW1lXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZG9jfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHotaW1hZ2UgcG9pbnRlci1jdXJzb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI2xvZ29maWxlMSB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIi8qO2NhcHR1cmU9Y2FtZXJhXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmU7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZXNTZWxlY3RlZCgkZXZlbnQsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkei1lcnJvci1tYXJrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4taWNvbiBidG4tbGlnaHQtc3VjY2VzcyBidG4tY2lyY2xlIG1yLTJcIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrLTUwIGZsYXRpY29uLXVwbG9hZFwiPjwvaT48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBmb3IgY2hlY2tib3ggLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2xpc3QnICYmIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5saXN0UHJvcGVydGllLm1heEFuc3dlcnMgPiAxXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY2hlY2tib3hcIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsVmFsdWVzXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXNDaGVja2VkKHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsaXN0Q2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAge3t2YWx1ZX19XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIGZvciByYWRpbyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnbGlzdCcgJiYgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxpc3RQcm9wZXJ0aWUubWF4QW5zd2VycyA9PT0gMVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbFZhbHVlc1wiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNDaGVja2VkKHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsaXN0Q2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBmb3IgdG9nZ2VsIGJvb2xlYW4gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2Jvb2wnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsVmFsdWVzXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxuICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0Jvb2xlYW5DaGVja2VkKHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJib29sZWFuQ2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBmb3IgVGV4dCAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAncGxhaW5UZXh0J1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXI8PTEwMFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFuc3dlcnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIiAoaW5wdXQpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XCIgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIFttaW5sZW5ndGhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5taW5Ob09mTGV0dGVyXCJcbiAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5tYXhOb09mTGV0dGVyXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sMSBmb3JtLWNvbnRyb2wtc29saWRcIiB0eXBlPVwidGV4dFwiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+XG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXI+MTAwXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYW5zd2Vyc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiIChpbnB1dCk9XCJvblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcIlxuICAgICAgICAgICAgICAgICAgW21pbmxlbmd0aF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1pbk5vT2ZMZXR0ZXJcIlxuICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXJcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbDIgZm9ybS1jb250cm9sLXNvbGlkXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gZm9yIE51bWJlciAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJhbnN3ZXJzW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCIgKGlucHV0KT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1wiXG4gICAgICAgICAgICAgICAgW21pbl09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikubnVtYmVyUHJvcGVydGllLnN0YXJ0XCIgW21heF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikubnVtYmVyUHJvcGVydGllLmVuZFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImlzTnVtZXJpYygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIGZvciBEYXRlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLWZsZXhcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZGF0ZSdcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sMVwiIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIFttYXhdPVwiZ2V0TWF4ZGF0ZShxdWVzdGlvbilcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwiZ2V0TWluZGF0ZShxdWVzdGlvbilcIiBbKG5nTW9kZWwpXT1cImFuc3dlcnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIlxuICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gZm9yIERhdGFncmlkIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUxXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2RhdGFHcmlkJyAmJiBkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdICYmIGRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV0ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1oZWFkLWN1c3RvbSB0YWJsZS1oZWFkLWJnIHRhYmxlLWJvcmRlcmxlc3MgdGFibGUtdmVydGljYWwtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAge3tjb2x1bW4uY29sdW1uSWR9fTwvdGg+XG4gICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgIXNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxuICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiAhc2hvd0RhdGFHcmlkW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXTtsZXQgaSA9aW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNvbHVtbiB8IGtleXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5UeXBlKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zLCBkYXRhLmtleSkgPT09ICdkYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhLnZhbHVlIHwgZGF0ZSA6IG5ld1RpbWVEYXRlRm9ybWF0fX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtblR5cGUoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMsIGRhdGEua2V5KSA9PT0gJ2Jvb2wnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2dldEJvb2xWYWx1ZShkYXRhLnZhbHVlKX19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5UeXBlKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zLCBkYXRhLmtleSkgIT09ICdkYXRlJyAmJiBnZXRDb2x1bW5UeXBlKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zLCBkYXRhLmtleSkgIT09ICdib29sJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhLnZhbHVlfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlblwiIChjbGljayk9XCJlZGl0RGF0YUdyaWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIhYnV0dG9uRGlzYWJsZSAmJiAhZGlzYWJsZUlucHV0KCkgJiYgIXNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIiAoY2xpY2spPVwiZGVsZXRlRGF0YUdyaWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFNlY3Rpb25cIiAqbmdJZj1cInNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZENvbHVtblwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWw+e3tjb2x1bW4ubGFiZWx9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWRcIiAqbmdJZj1cImNvbHVtbi5tYW5kYXRvcnlcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgY2hlY2tib3ggLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnbGlzdCdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNoZWNrYm94XCIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIGNvbHVtbi5saXN0UHJvcGVydGllLnZhbHVlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc0NoZWNrZWQodmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImxpc3RDaGFuZ2UoJGV2ZW50LCB2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgdG9nZ2VsIGJvb2xlYW4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbCdcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInJhZGlvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQm9vbGVhbkNoZWNrZWQoJ3llcycsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImJvb2xlYW5DaGFuZ2UoJGV2ZW50LCAneWVzJywgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIFllc1xuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc0Jvb2xlYW5DaGVja2VkKCdubycsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImJvb2xlYW5DaGFuZ2UoJGV2ZW50LCAnbm8nLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgTm9cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIFRleHQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAncGxhaW5UZXh0J1wiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZGF0YUdyaWRDb2x1bW5zW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cInRleHRcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciBOdW1iZXIgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZGF0YUdyaWRDb2x1bW5zW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiBbbWluXT1cImNvbHVtbi5udW1iZXJQcm9wZXJ0aWUuc3RhcnRcIlxuICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImNvbHVtbi5udW1iZXJQcm9wZXJ0aWUuZW5kXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wxIGZvcm0tY29udHJvbC1zb2xpZFwiIHR5cGU9XCJudW1iZXJcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIGZvciBEYXRlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4XCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sMVwiIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIFttYXhdPVwiZ2V0TWF4ZGF0ZShxdWVzdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICBbbWluXT1cImdldE1pbmRhdGUocXVlc3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhR3JpZENvbHVtbnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiIChjbGljayk9XCJwaWNrZXIub3BlbigpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0LWJ0bnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQtcHJpbWFyeSBmb250LXdlaWdodC1ib2xkXCIgaWQ9XCJidG5DYW5jZWxRXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxBZGRvclVwZGF0ZShnZXRRdWVzdGlvbihxdWVzdGlvbikpXCI+XG4gICAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBmb250LXdlaWdodC1ib2xkXCIgaWQ9XCJidG5TYXZlUVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZURhdGFHcmlkQ29sdW1uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5BZGQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLTEyIGNvbC1zbS0xMiBjb2wtbGctMTIgcC0wIHN1Ym1pdC1wYWRcIlxuICAgICAgICAqbmdJZj1cInR5cGUgIT09ICdxbnJMaW5rUHJvdmlkZXInICYmIHNvdXJjZSE9PSdwcm9MZWFkJyAmJiAodXVpZCB8fCBzb3VyY2UgPT09ICdjdXN0b21lci1kZXRhaWxzJyB8fCBzb3VyY2UgPT09ICdwcm9Eb25hdGlvbicpICYmICFkaXNhYmxlSW5wdXQoKVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibm9ybWFsLWJ0blwiIG1hdC1mbGF0LWJ1dHRvbiBbY2xhc3Muc3Bpbm5lcl09XCJidXR0b25EaXNhYmxlXCIgaWQ9XCJidG5TdWJtaXRcIlxuICAgICAgICAgIFtjbGFzcy5zcGlubmVyLWRhcmtlci1zdWNjZXNzXT1cImJ1dHRvbkRpc2FibGVcIiBbY2xhc3Muc3Bpbm5lci1jZW50ZXJdPVwiYnV0dG9uRGlzYWJsZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIiFidXR0b25EaXNhYmxlICYmIG9uU3VibWl0KCdzdWJtaXQnKVwiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlXCJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZVwiPnt7KHR5cGUgPT0gJ3Fuci1saW5rJykgPyAnU3VibWl0JyA6ICdVcGRhdGUnfX08L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbjxzZWN0aW9uIGNsYXNzPVwiY29ucy1pbmJveCBuby1wYWRkaW5nLXNtYWxsXCIgKm5nSWY9XCJzaG93c2VydmljZVwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGNvbnN1bWVyLWRhc2hob21lXCIgKm5nSWY9XCIhdHlwZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIHRpdGxlLWdiIHJvdW5kZWQtMFwiICpuZ0lmPVwidXVpZFwiPlxuICAgICAgPGg1IGNsYXNzPVwibXQtMiBib2xkXCI+e3txdWVzdGlvbm5haXJlX2hlYWRpbmcgfCBjYXBpdGFsaXplRmlyc3R9fSA8YSBjbGFzcz1cInB1bGwtbGVmdCBtZS00IGJhY2stYnRuXCJcbiAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnRcIj48L2k+PC9hPjwvaDU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8YXBwLWNvbW1vbi1pbm5lcmxvYWRpbmctc3Bpbm5lciAqbmdJZj1cImxvYWRpbmdcIj48L2FwcC1jb21tb24taW5uZXJsb2FkaW5nLXNwaW5uZXI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4tZmx1aWQgcHVsbC1yaWdodCBtZS0yIG1iLTRcIlxuICAgICpuZ0lmPVwidHlwZSAhPT0gJ3FuckxpbmtQcm92aWRlcicgJiYgIWJ1dHRvbkRpc2FibGUgJiYgd2FpdGxpc3RTdGF0dXNcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwibm9ybWFsLWJ0biBlZGl0XCIgbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJlZGl0UW5yKClcIiBpZD1cImJ0bkVkaXRRTlJcIj5FZGl0PC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uLWZsdWlkIHdpZHRoLTEwMFwiIFtjbGFzcy5xbnJEaXNhYmxlU3RhdGVdPVwiZGlzYWJsZUlucHV0KClcIlxuICAgIFtjbGFzcy5wLTBdPVwidXVpZCAmJiAoc291cmNlID09PSAnY29uc0NoZWNraW4nIHx8IHNvdXJjZSA9PT0gJ2NvbnNBcHB0JyB8fCBzb3VyY2UgPT09ICdjb25zRG9uYXRpb25EZXRhaWxzJyApXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC14bC0xMiBmb3JjZV9jZW50ZXIgcC0wXCIgW2NsYXNzLnAtMF09XCJ1dWlkXCJcbiAgICAgIFtjbGFzcy5uby1wYWRkaW5nLXNtYWxsXT1cInNvdXJjZSAmJiBzb3VyY2U9PSdpdnInXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdGb3I9XCJsZXQgcW5yIG9mIGdyb3VwZWRRbnIgfCBrZXl2YWx1ZVwiIFtjbGFzcy5zZWN0aW9uLXNoYWRvd109XCJnZXRTZWN0aW9uQ291bnQoKSA+IDFcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbUFycmF5Lmxlbmd0aCA9PSAwIFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWduLTAgYm9yZGVyLWRhc2hlZCB0ZXh0LWNlbnRlclwiICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBxbnIudmFsdWVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInFuci1zZWN0aW9uXCIgKm5nSWY9XCJnZXRTZWN0aW9uQ291bnQoKSA+IDFcIj5cbiAgICAgICAgICAgICAgICB7e2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbi5zZWN0aW9uTmFtZX19PC9kaXY+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC0xMiBxdWVzdCBwb2ludGVyLWN1cnNvclwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEYXRhR3JpZEFkZFNlY3Rpb25uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbiwgdHJ1ZSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7e2NkblBhdGh9fWFzc2V0cy9pbWFnZXMvc2VydmljZS1vcHRpb25zLnN2Z1wiIGFsdD1cIlNlcnZpY2UgT3B0aW9uc1wiIGNsYXNzPVwiaW1nLWZsdWlkIHBiLTBcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjMwMFwiIGhlaWdodD1cIjMwMFwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm8tb25seVwiICpuZ0lmPVwic2hvd1Byb3ZpZGVyVGV4dChnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24pXCI+Rm9yIFByb3ZpZGVyczwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVkXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24ubWFuZGF0b3J5XCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC13ZWlnaHQtYm9sZFwiPlBsZWFzZSBDaG9vc2UgeW91ciBQZXQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBmb250LXdlaWdodC1ib2xkXCI+Q29udGludWU8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLTEyIGNvbC1zbS0xMiBtYi00IHAtMFwiICpuZ0lmPVwic2hvd0l0ZW1cIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9yZGVyXCIgKm5nRm9yPVwiIGxldCBpdGVtcyBvZiBpdGVtQXJyYXlcIj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW1zLml0ZW19fTxicj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBib3JkZXItYXBwbHkgcHgtMFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZGVjcmVtZW50KGl0ZW1zKTtcIiBjbGFzcz1cInBvaW50ZXItY3Vyc29yIHF1YW50aXR5IHF1YW50aXR5LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLTEwXCI+LTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgcG9pbnRlci1jdXJzb3JcIj48c3BhbiBjbGFzcz1cInF1YW50aXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW1zICYmIGl0ZW1zLmNvbHVtbkl0ZW0gJiYgaXRlbXMuY29sdW1uSXRlbVswXSAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlciAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3QgJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW4gJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXSAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLnF1YW50aXR5XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3tpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLnF1YW50aXR5fX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImluY3JlbWVudChpdGVtcyk7XCIgY2xhc3M9XCJwb2ludGVyLWN1cnNvciBxdWFudGl0eSBxdWFudGl0eS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC0xMFwiPis8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIj48c3Bhbj48aSBjbGFzcz1cImZhIGZhLWluclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAge3tpdGVtcy5wcmljZSAqIGdldEl0ZW1RdWFudGl0eShpdGVtcyl9fS8tXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0l0ZW0gJiZpdGVtQXJyYXkubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxbnIgb2YgZ3JvdXBlZFFuciB8IGtleXZhbHVlXCIgW2NsYXNzLnNlY3Rpb24tc2hhZG93XT1cImdldFNlY3Rpb25Db3VudCgpID4gMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHFuci52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLTEyIHF1ZXN0IHBvaW50ZXItY3Vyc29yXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEYXRhR3JpZEFkZFNlY3Rpb25uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbiwgdHJ1ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGZvbnQtd2VpZ2h0LWJvbGRcIj48aSBjbGFzcz1cImZhIGZhLXBsdXMgdGV4dC13aGl0ZVwiPjwvaT5BZGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvc2VjdGlvbj4iXX0=