jconsumer-shared 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/confirm/confirm-box.component.mjs +3 -3
- package/esm2022/lib/questionaire/edit/questionnaire.component.mjs +3 -3
- package/esm2022/lib/showuploadfile/showuploadfile.component.mjs +3 -3
- package/esm2022/lib/theme.service.mjs +9 -4
- package/esm2022/lib/utility/remote-loader.mjs +16 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/jconsumer-shared.mjs +31 -10
- package/fesm2022/jconsumer-shared.mjs.map +1 -1
- package/jconsumer-shared-1.0.2.tgz +0 -0
- package/lib/theme.service.d.ts +3 -2
- package/lib/utility/remote-loader.d.ts +7 -0
- package/package.json +4 -4
- package/public-api.d.ts +1 -0
- package/jconsumer-shared-1.0.1.tgz +0 -0
|
@@ -1365,11 +1365,11 @@ export class QuestionnaireComponent {
|
|
|
1365
1365
|
lgInstance.openGallery(imageIndex);
|
|
1366
1366
|
}
|
|
1367
1367
|
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.Location }], target: i0.ɵɵFactoryTarget.Component });
|
|
1368
|
-
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 }, { propertyName: "lightGalleryContainer", first: true, predicate: ["lightGalleryContainer"], 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()\">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 disp-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 disp-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\"\r\n (click)=\"cancelAddorUpdate(getQuestion(question))\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary font-weight-bold\"\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\"\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<div #lightGalleryContainer style=\"display: none;\"></div>\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()\">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: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i13.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: i13.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i13.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i13.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i13.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i14.LoadingSpinnerComponent, selector: "app-common-innerloading-spinner", inputs: ["spinnerParams"] }, { kind: "component", type: i15.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i16.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i17.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i18.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: i12.DatePipe, name: "date" }, { kind: "pipe", type: i12.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i19.CapitalizeFirstPipe, name: "capitalizeFirst" }, { kind: "pipe", type: i20.SafeHtmlPipe, name: "safeHtml" }] });
|
|
1368
|
+
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 }, { propertyName: "lightGalleryContainer", first: true, predicate: ["lightGalleryContainer"], 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 disp-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 disp-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<div #lightGalleryContainer style=\"display: none;\"></div>\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: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i13.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: i13.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i13.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i13.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i13.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i13.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i14.LoadingSpinnerComponent, selector: "app-common-innerloading-spinner", inputs: ["spinnerParams"] }, { kind: "component", type: i15.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i15.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i16.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i17.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i18.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: i12.DatePipe, name: "date" }, { kind: "pipe", type: i12.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i19.CapitalizeFirstPipe, name: "capitalizeFirst" }, { kind: "pipe", type: i20.SafeHtmlPipe, name: "safeHtml" }] });
|
|
1369
1369
|
}
|
|
1370
1370
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionnaireComponent, decorators: [{
|
|
1371
1371
|
type: Component,
|
|
1372
|
-
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()\">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 disp-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 disp-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\"\r\n (click)=\"cancelAddorUpdate(getQuestion(question))\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary font-weight-bold\"\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\"\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<div #lightGalleryContainer style=\"display: none;\"></div>\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()\">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"] }]
|
|
1372
|
+
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 disp-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 disp-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<div #lightGalleryContainer style=\"display: none;\"></div>\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"] }]
|
|
1373
1373
|
}], 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.Location }], propDecorators: { questionnaireList: [{
|
|
1374
1374
|
type: Input
|
|
1375
1375
|
}], source: [{
|
|
@@ -1409,4 +1409,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1409
1409
|
type: ViewChild,
|
|
1410
1410
|
args: ['lightGalleryContainer', { static: false }]
|
|
1411
1411
|
}] } });
|
|
1412
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTakgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFLeEYsT0FBTyxZQUFZLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sTUFBTSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTS9DLE1BQU0sT0FBTyxzQkFBc0I7SUF5RXZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7SUFDQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQW5GRCxpQkFBaUIsQ0FBTTtJQUN2QixNQUFNLENBQU07SUFDWixTQUFTLENBQU07SUFDZixlQUFlLENBQU07SUFDckIsZUFBZSxDQUFNO0lBQ3JCLElBQUksQ0FBTTtJQUNWLElBQUksQ0FBTTtJQUNWLGNBQWMsQ0FBTTtJQUNwQixXQUFXLENBQU07SUFDakIsZUFBZSxDQUFNO0lBQ3JCLE9BQU8sQ0FBTTtJQUNiLElBQUksQ0FBTSxDQUFDLHlDQUF5QztJQUNuRCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUN0QyxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUN6QyxRQUFRLENBQU07SUFDZCxXQUFXLENBQU07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QUNWLFNBQVMsRUFBRSxJQUFJO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7UUFFSCxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7d0dBdHhDVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixvdUJDdEJuQyxnOXdCQStXVTs7NEZEelZHLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxtQkFBbUI7c1pBS3BCLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBbUJrQixLQUFLO3NCQUE1QixTQUFTO3VCQUFDLFdBQVc7Z0JBb0N0QixxQkFBcUI7c0JBRHBCLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbmFpcmVTZXJ2aWNlIH0gZnJvbSAnLi4vcXVlc3Rpb25haXJlLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9maWxlLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hvd3VwbG9hZGZpbGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaG93dXBsb2FkZmlsZS9zaG93dXBsb2FkZmlsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlVGltZVByb2Nlc3NvciB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2RhdGUtdGltZS9kYXRldGltZS1wcm9jZXNzb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IEVycm9yTWVzc2FnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL2Vycm9yLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmRQcm9jZXNzb3IgfSBmcm9tICcuLi8uLi93b3JkLXByb2Nlc3Nvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC5zZXJ2aWNlJztcclxuaW1wb3J0IGxpZ2h0Z2FsbGVyeSBmcm9tICdsaWdodGdhbGxlcnknO1xyXG5pbXBvcnQgbGdab29tIGZyb20gJ2xpZ2h0Z2FsbGVyeS9wbHVnaW5zL3pvb20nO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1xdWVzdGlvbm5haXJlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgcXVlc3Rpb25uYWlyZUxpc3Q6IGFueTtcclxuICBASW5wdXQoKSBzb3VyY2U6IGFueTtcclxuICBASW5wdXQoKSBhY2NvdW50SWQ6IGFueTtcclxuICBASW5wdXQoKSBxdWVzdGlvbkFuc3dlcnM6IGFueTtcclxuICBASW5wdXQoKSBjdXN0b21lckRldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSB1dWlkOiBhbnk7XHJcbiAgQElucHV0KCkgdHlwZTogYW55O1xyXG4gIEBJbnB1dCgpIHdhaXRsaXN0U3RhdHVzOiBhbnk7XHJcbiAgQElucHV0KCkgb3JkZXJTdGF0dXM6IGFueTtcclxuICBASW5wdXQoKSBkb25hdGlvbkRldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSBzZXJ2aWNlOiBhbnk7XHJcbiAgQElucHV0KCkgbW9kZTogYW55OyAvLyBBZGRlZCBieSBtYW5pIHRvIGNoZWNrIHRoZSBmaWxlIHVwbG9hZFxyXG4gIEBPdXRwdXQoKSBmaWxlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSByZXR1cm5BbnN3ZXJzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQElucHV0KCkgdGVtcFR5cGU6IGFueTtcclxuICBASW5wdXQoKSBib29raW5nVHlwZTogYW55O1xyXG4gIGFuc3dlcnM6IGFueSA9IHt9O1xyXG4gIHNob3dEYXRhR3JpZDogYW55ID0ge307XHJcbiAgc2VsZWN0ZWRNZXNzYWdlOiBhbnkgPSBbXTtcclxuICBhcGlFcnJvcjogYW55ID0gW107XHJcbiAgcGFyYW1zOiBhbnk7XHJcbiAgZmlsZXVwbG9hZHByZUFuc3dlcnM6IGFueSA9IHt9O1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICBidXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgcXVlc3Rpb25zOiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZERvY3M6IGFueSA9IFtdO1xyXG4gIGRvY3VtZW50c1RvVXBsb2FkOiBhbnkgPSBbXTtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICB1cGxvYWRGaWxlc1RlbXA6IGFueSA9IFtdO1xyXG4gIGZpbGVzdG9VcGxvYWQ6IGFueSA9IFtdO1xyXG4gIGNoYW5nZUhhcHBlbmVkID0gZmFsc2U7XHJcbiAgdXBsb2FkZWRGaWxlczogYW55ID0gW107XHJcbiAgdXBsb2FkZWRJbWFnZXM6IGFueSA9IFtdO1xyXG4gIGJvb2tpbmdEZXRhaWxzOiBhbnkgPSBbXTtcclxuICBAVmlld0NoaWxkKCdsb2dvZmlsZTEnKSBmaWxlMiE6IEVsZW1lbnRSZWY7XHJcbiAgaW1hZ2VfbGlzdF9wb3B1cDtcclxuICBxdWVzdGlvbm5haXJlX2hlYWRpbmcgPSAnJztcclxuICBjdXN0b21lcl9sYWJlbCA9ICcnO1xyXG4gIGVkaXRRdWVzdGlvbm5haXJlID0gZmFsc2U7XHJcbiAgYXVkaW9WaWRlb0ZpbGVzOiBhbnkgPSBbXTtcclxuICBncm91cGVkUW5yOiBhbnkgPSBbXTtcclxuICBkYXRhR3JpZENvbHVtbnM6IGFueSA9IHt9O1xyXG4gIGRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3Q6IGFueSA9IFtdO1xyXG4gIHVwZGF0ZWRHcmlkSW5kZXg6IGFueSA9IHt9O1xyXG4gIG5ld1RpbWVEYXRlRm9ybWF0ID0gJyc7XHJcbiAgcW5yU3RhdHVzID0gJyc7XHJcbiAgY29tbWVudHM6IGFueSA9IHt9O1xyXG4gIHRkYXkgPSBuZXcgRGF0ZSgpO1xyXG4gIG1pbmRheSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEpO1xyXG4gIGRhdGFHcmlkTGlzdENvbHVtbnM6IGFueSA9IHt9O1xyXG4gIHNob3dxbnIhOiBib29sZWFuO1xyXG4gIGl0ZW06IGFueTtcclxuICBzaG93SXRlbSA9IGZhbHNlO1xyXG4gIHRvdGFsUHJpY2U6IGFueTtcclxuICBpdGVtTGVuZ3RoOiBhbnk7XHJcbiAgaXRlbUFycmF5OiBhbnkgPSBbXTtcclxuICBkYXRhR3JpZExpc3Q6IGFueSA9IFtdO1xyXG4gIGlkOiBudW1iZXIgPSAwO1xyXG4gIHBvc3RfRGF0YTogYW55O1xyXG4gIGRnTGlzdDogYW55O1xyXG4gIHNlcXVlbmNlSWQ6IGFueTtcclxuICBmaW5hbE9iamVjdExpc3Q6IGFueSA9IFtdO1xyXG4gIHNob3dzZXJ2aWNlID0gZmFsc2U7XHJcbiAgcXVlc1N0b3JlOiBhbnk7XHJcbiAgYWxsTGlzdDogc3RyaW5nID0gJyc7XHJcbiAgcG9wU2VhcmNoZXM6IGFueTtcclxuICBzZXJ2aWNlVG90YWxQcmljZTogbnVtYmVyID0gMDtcclxuICBlZGl0YWJsZUl0ZW06IGFueTtcclxuICBjZG5QYXRoOiBzdHJpbmc9Jyc7XHJcbiAgQFZpZXdDaGlsZCgnbGlnaHRHYWxsZXJ5Q29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgbGlnaHRHYWxsZXJ5Q29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgd29yZFByb2Nlc3NvcjogV29yZFByb2Nlc3NvcixcclxuICAgIHByaXZhdGUgbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUHJvY2Vzc29yOiBEYXRlVGltZVByb2Nlc3NvcixcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbmFpcmVTZXJ2aWNlOiBRdWVzdGlvbmFpcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlcnJvclNlcnZpY2U6IEVycm9yTWVzc2FnaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xyXG4gICAgICB0aGlzLmNkblBhdGggPSB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q0ROUGF0aCgpO1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRfcm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHFwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLnBhcmFtcyA9IHFwYXJhbXM7XHJcbiAgICAgIGlmICh0aGlzLnBhcmFtcy50eXBlKSB7XHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnBhcmFtcy50eXBlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc291cmNlKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnBhcmFtcy5wcm92aWRlcklkKSB7XHJcbiAgICAgICAgdGhpcy5hY2NvdW50SWQgPSB0aGlzLnBhcmFtcy5wcm92aWRlcklkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnBhcmFtcy51dWlkKSB7XHJcbiAgICAgICAgdGhpcy51dWlkID0gdGhpcy5wYXJhbXMudXVpZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMucXVlc3Rpb25haXJlU2VydmljZS5nZXRNZXNzYWdlKCkuc3Vic2NyaWJlKG1lc3NhZ2UgPT4ge1xyXG4gICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ3FuclZhbGlkYXRlRXJyb3InOlxyXG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0ZUVycm9yKG1lc3NhZ2UudmFsdWUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2VycyAmJiB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5maWxlc3RvVXBsb2FkICYmIHRoaXMuc291cmNlID09PSAncHJvTGVhZCcpIHtcclxuICAgICAgdGhpcy5maWxlc3RvVXBsb2FkID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXN0b1VwbG9hZDtcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJTZXJ2aWNlIERldGFpbHM6XCIsIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QpO1xyXG4gICAgY29uc29sZS5sb2coXCJTZXJ2aWNlIERldGFpbHM6XCIsIHRoaXMuc2VydmljZSk7XHJcbiAgICBpZiAodGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ2l0ZW1BcnJheScpKSB7XHJcbiAgICAgIHRoaXMuaXRlbUFycmF5ID0gdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ2l0ZW1BcnJheScpO1xyXG4gICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcclxuICAgICAgICB0aGlzLnNob3dJdGVtID0gdHJ1ZTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMuaXRlbUFycmF5XCIsIHRoaXMuaXRlbUFycmF5KVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXN0b21lcl9sYWJlbCA9IHRoaXMud29yZFByb2Nlc3Nvci5nZXRUZXJtaW5vbG9neVRlcm0oJ2N1c3RvbWVyJyk7XHJcblxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QpIHtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5zb3VyY2UpXHJcbiAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2N1c3RvbWVyLWNyZWF0ZScgfHwgdGhpcy5zb3VyY2UgPT09ICdvbmV0aW1lJykge1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscyAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzWzBdLnF1ZXN0aW9ucztcclxuICAgICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgICAgIC8vIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9ucywgJ2dldCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jdXN0b21lckRldGFpbHMgJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0gJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZSAmJiB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlLnF1ZXN0aW9uQW5zd2Vycykge1xyXG4gICAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmUucXVlc3Rpb25BbnN3ZXJzLCAnZ2V0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAncW5yRGV0YWlscycpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25zO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3NlcnZpY2VPcHRpb25BcHB0Jykge1xyXG4gICAgICAgIHRoaXMuc2hvd3NlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAncW5ycGFwZXInKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMudXVpZCAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAncW5yVmlldycgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2NvbmR1bWVyT3JkZXInICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdpdnInICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5sYWJlbHMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ubGFiZWxzO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUXVlc3Rpb25zOlwiLCB0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnY3VzdG9tZXItZGV0YWlscycgJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0gJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZSkge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0ID0gdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZTtcclxuICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlLnF1ZXN0aW9uQW5zd2VycztcclxuICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbnMsICdnZXQnKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycykge1xyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXMpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZSA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5hdWRpb1ZpZGVvKSB7XHJcbiAgICAgICAgdGhpcy5hdWRpb1ZpZGVvRmlsZXMgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5hdWRpb1ZpZGVvO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5maWxlc3RvVXBsb2FkKSB7XHJcbiAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXN0b1VwbG9hZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdCkge1xyXG4gICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdCA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3Q7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmNvbW1lbnRzKSB7XHJcbiAgICAgICAgdGhpcy5jb21tZW50cyA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmNvbW1lbnRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5hbnN3ZXJzKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmFuc3dlcnMuYW5zd2VyTGluZSwgJ2luaXQnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT0gJ2l2cicpIHtcclxuICAgICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbkFuc3dlcnMsICdnZXQnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZG9uYXRpb25EZXRhaWxzICYmIHRoaXMuZG9uYXRpb25EZXRhaWxzLnF1ZXN0aW9ubmFpcmUpIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlTGlzdCA9IHRoaXMuZG9uYXRpb25EZXRhaWxzLnF1ZXN0aW9ubmFpcmU7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbkFuc3dlcnM7XHJcbiAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25zICYmIHRoaXMucXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbnMsICdnZXQnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnV1aWQpIHtcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25BbnN3ZXJzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9uQW5zd2VycztcclxuICAgICAgICB0aGlzLnFuclN0YXR1cyA9ICdzdWJtaXR0ZWQnO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5xbnJTdGF0dXMgPSAncmVsZWFzZWQnO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ubGFiZWxzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscztcclxuICAgICAgICB0aGlzLnFuclN0YXR1cyA9ICdyZWxlYXNlZCc7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9ucyAmJiB0aGlzLnF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25zLCAnZ2V0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpc2FibGVGaWVsZCgpXHJcbiAgfVxyXG5cclxuICAvL2Rpc2FibGUgZmllbGRcclxuICBkaXNhYmxlRmllbGQoKSB7XHJcbiAgICBpZiAodGhpcy50ZW1wVHlwZSAmJiAodGhpcy50ZW1wVHlwZSA9PT0gJ0xvYW4gU2FuY3Rpb24nIHx8IHRoaXMudGVtcFR5cGUgPT09ICdSZWplY3RlZCcpKSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IHRydWU7XHJcbiAgICAgIC8vIHRoaXMuZGlzYWJsZUlucHV0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vICouY29tcG9uZW50LnRzXHJcbiAgYXNJc09yZGVyKGE6IGFueSwgYjogYW55KSB7XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcbiAgZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1jcmVhdGUnIHx8IHRoaXMuc291cmNlID09PSAncW5yRGV0YWlscycgfHwgdGhpcy5zb3VyY2UgPT09ICdvbmV0aW1lJykge1xyXG4gICAgICB0aGlzLmdyb3VwZWRRbnIgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ3JvdXBCeSh0aGlzLnF1ZXN0aW9ucywgJ3NlY3Rpb25OYW1lJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3Byb0xlYWQnKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZFFuciA9IHRoaXMucXVlc3Rpb25zLnJlZHVjZShmdW5jdGlvbiAocnY6IGFueSwgeDogYW55KSB7XHJcbiAgICAgICAgKHJ2W3gucXVlc3Rpb25bJ3NlcXVuY2VJZCddXSA9IHJ2W3gucXVlc3Rpb25bJ3NlcXVuY2VJZCddXSB8fCBbXSkucHVzaCh4KTtcclxuICAgICAgICByZXR1cm4gcnY7XHJcbiAgICAgIH0sIHt9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3VwZWRRbnIgPSB0aGlzLnF1ZXN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHJ2OiBhbnksIHg6IGFueSkge1xyXG4gICAgICAgIChydlt4LnF1ZXN0aW9uWydzZWN0aW9uT3JkZXInXV0gPSBydlt4LnF1ZXN0aW9uWydzZWN0aW9uT3JkZXInXV0gfHwgW10pLnB1c2goeCk7XHJcbiAgICAgICAgcmV0dXJuIHJ2O1xyXG4gICAgICB9LCB7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldFZhbGlkYXRlRXJyb3IoZXJyb3JzOiBhbnkpIHtcclxuICAgIHRoaXMuYXBpRXJyb3IgPSBbXTtcclxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBlcnJvciBvZiBlcnJvcnMpIHtcclxuICAgICAgICB0aGlzLmFwaUVycm9yW2Vycm9yLnF1ZXN0aW9uRmllbGRdID0gW107XHJcbiAgICAgICAgdGhpcy5hcGlFcnJvcltlcnJvci5xdWVzdGlvbkZpZWxkXS5wdXNoKGVycm9yLmVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0QW5zd2VycyhhbnN3ZXJEYXRhOiBhbnksIHR5cGU/OiBhbnkpIHtcclxuICAgIHRoaXMuYW5zd2VycyA9IG5ldyBPYmplY3QoKTtcclxuICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zID0ge307XHJcbiAgICBpZiAodHlwZSA9PT0gJ2dldCcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UgPSBbXTtcclxuICAgICAgdGhpcy51cGxvYWRlZEltYWdlcyA9IFtdO1xyXG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbXTtcclxuICAgICAgZm9yIChsZXQgYW5zdyBvZiBhbnN3ZXJEYXRhKSB7XHJcblxyXG4gICAgICAgIGlmIChhbnN3LmFuc3dlckxpbmUpIHtcclxuICAgICAgICAgIGlmIChhbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgPT09ICdmaWxlVXBsb2FkJykge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlID09PSAncHJvTGVhZCcpIHtcclxuICAgICAgICAgICAgICBpZiAoYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdICYmIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uYWN0aW9uID0gJ2FkZCc7XHJcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5zdGF0dXMgPSAnQ09NUExFVEUnO1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uczNwYXRoID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnMzcGF0aDtcclxuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnVpZCA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS51aWQ7XHJcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5kcml2ZUlkID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmRyaXZlSWQ7XHJcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS51cmwgPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0ua2V5TmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChhbnN3LmFuc3dlckxpbmUuYW5zd2VyICYmIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXSAmJiBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2dldCcpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlcy5wdXNoKGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdID0ge307XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwbG9hZGVkRmlsZXNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudHNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZSArICc9JyArIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jb21tZW50cztcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UucHVzaChhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0pO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmlsZXN0b1VwbG9hZFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5maWxlc3RvVXBsb2FkW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlID09PSAnZGF0YUdyaWQnKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0pIHtcclxuICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IFtdO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LmRhdGFHcmlkQ29sdW1uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zW2kgKyAxXSA9IHJvdy5kYXRhR3JpZENvbHVtbltpXS5jb2x1bW5bT2JqZWN0LmtleXMocm93LmRhdGFHcmlkQ29sdW1uW2ldLmNvbHVtbilbMF1dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXS5wdXNoKGNvbHVtbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFuc3dlcnNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBhbnN3IG9mIGFuc3dlckRhdGEpIHtcclxuICAgICAgICBpZiAoYW5zdy5hbnN3ZXJbT2JqZWN0LmtleXMoYW5zdy5hbnN3ZXIpWzBdXSkge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJzW2Fuc3cubGFiZWxOYW1lXSA9IGFuc3cuYW5zd2VyW09iamVjdC5rZXlzKGFuc3cuYW5zd2VyKVswXV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gJ2dldCcpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy51cGxvYWRlZEZpbGVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XSA9IFtdO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudXBsb2FkZWRGaWxlc1trZXldKS5mb3JFYWNoKGtleTEgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0udHlwZS5zcGxpdCgnLycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVbMF0gIT09ICdhdWRpbycgJiYgdHlwZVswXSAhPT0gJ3ZpZGVvJyB8fCAoKHR5cGVbMF0gPT09ICdhdWRpbycgfHwgdHlwZVswXSA9PT0gJ3ZpZGVvJykgJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0uc3RhdHVzID09PSAnQ09NUExFVEUnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0ucHVzaChrZXkxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldKS5mb3JFYWNoKGtleTEgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldLnB1c2goa2V5MSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5pdCcpO1xyXG4gIH1cclxuICBmaWxlc1NlbGVjdGVkKGV2ZW50OiBhbnksIHF1ZXN0aW9uOiBhbnksIGRvY3VtZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xyXG4gICAgaWYgKGlucHV0KSB7XHJcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBpbnB1dCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IHtcclxuICAgICAgICAgIGNhcHRpb246IGRvY3VtZW50LFxyXG4gICAgICAgICAgZmlsZTogZmlsZSxcclxuICAgICAgICAgIGxhYmVsTmFtZTogcXVlc3Rpb24ubGFiZWxOYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsZUNoYW5nZWQuZW1pdChmaWxlSW5wdXQpO1xyXG4gICAgICAgIGxldCB0eXBlID0gZmlsZS50eXBlLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgIHRoaXMuYXBpRXJyb3JbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IFtdO1xyXG4gICAgICAgIGlmICghdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0pIHtcclxuICAgICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICAgICAgbGV0IGluZGV4O1xyXG4gICAgICAgICAgaWYgKHR5cGVbMF0gPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZVswXSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXMuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZVswXSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlWzBdID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF07XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXVtpbmRleF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSA9IGZpbGU7XHJcbiAgICAgICAgaWYgKHR5cGVbMF0gPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZVswXSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UucHVzaChmaWxlKTtcclxuICAgICAgICAgIGNvbnN0IGluZHggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKGZpbGUpO1xyXG4gICAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2VbaW5keF1bJ3BhdGgnXSA9IGUudGFyZ2V0WydyZXN1bHQnXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzLnB1c2goZmlsZSk7XHJcbiAgICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXMuaW5kZXhPZihmaWxlKTtcclxuICAgICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzW2luZHhdWydwYXRoJ10gPSBlLnRhcmdldFsncmVzdWx0J107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWxlMiAmJiB0aGlzLmZpbGUyLm5hdGl2ZUVsZW1lbnQudmFsdWUpIHtcclxuICAgICAgICB0aGlzLmZpbGUyLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjaGFuZ2VJbWFnZVNlbGVjdGVkKHF1ZXN0aW9uOiBhbnksIGRvY3VtZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgbGV0IHR5cGUgPSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0udHlwZS5zcGxpdCgnLycpO1xyXG4gICAgICB0eXBlID0gdHlwZVswXTtcclxuICAgICAgbGV0IGluZGV4O1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgaW5kZXggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5kZXggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF07XHJcbiAgICAgICAgdGhpcy5jb21tZW50c1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBkb2N1bWVudF0gPSAnJztcclxuICAgICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRBbnN3ZXIgPSB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5maWx0ZXIoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuY2FwdGlvbiA9PT0gZG9jdW1lbnQpO1xyXG4gICAgICAgICAgaWYgKGZpbHRlcmVkQW5zd2VyWzBdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZihmaWx0ZXJlZEFuc3dlclswXSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy51cGxvYWRlZEltYWdlcy5pbmRleE9mKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0gPSAncmVtb3ZlJztcclxuICAgICAgICB0aGlzLmNvbW1lbnRzW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGRvY3VtZW50XSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1xyXG4gIH1cclxuICBpc051bWVyaWMoZXZ0OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2UuaXNOdW1lcmljKGV2dCk7XHJcbiAgfVxyXG4gIG9uU3VibWl0KGtleXR5cGU/OiBhbnkpIHtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWQpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmFuc3dlcnNba2V5XSkge1xyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1trZXldID0gW107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkW2tleV0pLmZvckVhY2goa2V5MSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0pIHtcclxuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlWzBdO1xyXG4gICAgICAgICAgICBsZXQgaW5keDtcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICAgIGluZHggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbmR4ID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXMuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHN0YXR1cyA9ICdhZGQnO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXSkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gJ3VwZGF0ZSc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSAmJiB0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFuc3dlciA9IHRoaXMuYW5zd2Vyc1trZXldLmZpbHRlcigoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5jYXB0aW9uID09PSBrZXkxKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEFuc3dlclswXSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYW5zd2Vyc1trZXldLmluZGV4T2YoZmlsdGVyZWRBbnN3ZXJbMF0pO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnR5cGUuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICB0eXBlID0gdHlwZVswXTtcclxuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5wdXNoKHsgY2FwdGlvbjoga2V5MSwgYWN0aW9uOiBzdGF0dXMsIG1pbWVUeXBlOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS50eXBlLCB1cmw6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLm5hbWUsIHNpemU6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnNpemUsIGNvbW1lbnRzOiB0aGlzLmNvbW1lbnRzW2tleSArICc9JyArIGtleTFdLCBkcml2ZUlkOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5kcml2ZUlkLCB1aWQ6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnVpZCwgc3RhdHVzOiAnQ09NUExFVEUnIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5wdXNoKHsgY2FwdGlvbjoga2V5MSwgYWN0aW9uOiBzdGF0dXMsIG1pbWVUeXBlOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS50eXBlLCB1cmw6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLm5hbWUsIHNpemU6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnNpemUsIGNvbW1lbnRzOiB0aGlzLmNvbW1lbnRzW2tleSArICc9JyArIGtleTFdLCBkcml2ZUlkOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5kcml2ZUlkLCB1aWQ6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnVpZCwgc3RhdHVzOiAnQ09NUExFVEUnIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldICYmIHRoaXMuYW5zd2Vyc1trZXldLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFuc3dlciA9IHRoaXMuYW5zd2Vyc1trZXldLmZpbHRlcigoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5jYXB0aW9uID09PSBrZXkxKTtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRBbnN3ZXJbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hbnN3ZXJzW2tleV0uaW5kZXhPZihmaWx0ZXJlZEFuc3dlclswXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYW5zd2Vyc1trZXldO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSAmJiB0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW2tleV07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHRoaXMudXBsb2FkZWRGaWxlcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuYW5zd2Vyc1trZXldKSB7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0gPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzW2tleV0gJiYgT2JqZWN0LmtleXModGhpcy51cGxvYWRlZEZpbGVzW2tleV0pLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSkuZm9yRWFjaChrZXkxID0+IHtcclxuICAgICAgICAgIGlmICgoIXRoaXMuZmlsZXN0b1VwbG9hZFtrZXldIHx8ICh0aGlzLmZpbGVzdG9VcGxvYWRba2V5XSAmJiAhdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0pKSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXSA9PT0gJ3JlbW92ZScpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldICYmIHRoaXMuYW5zd2Vyc1trZXldLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFuc3dlciA9IHRoaXMuYW5zd2Vyc1trZXldLmZpbHRlcigoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5jYXB0aW9uID09PSBrZXkxKTtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRBbnN3ZXJbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hbnN3ZXJzW2tleV0uaW5kZXhPZihmaWx0ZXJlZEFuc3dlclswXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnB1c2goeyBjYXB0aW9uOiBrZXkxLCBhY3Rpb246ICdyZW1vdmUnIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGRlbGV0ZSB0aGlzLmFuc3dlcnNba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBsZXQgbmV3RmlsZWQ6IGFueSA9IHt9O1xyXG4gICAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9ucy5maWx0ZXIoKHF1ZXN0OiBhbnkpID0+IHRoaXMuZ2V0UXVlc3Rpb24ocXVlc3QpLmxhYmVsTmFtZSA9PT0ga2V5KTtcclxuICAgICAgcXVlc3Rpb24gPSBxdWVzdGlvblswXS5xdWVzdGlvbjtcclxuICAgICAgZm9yIChsZXQgZ3JpZEFuc3dlciBvZiB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3Rba2V5XSkge1xyXG4gICAgICAgIGxldCBjb2x1bW5EYXRhOiBhbnkgPSBbXTtcclxuICAgICAgICBPYmplY3Qua2V5cyhncmlkQW5zd2VyKS5mb3JFYWNoKGtleTEgPT4ge1xyXG4gICAgICAgICAgbGV0IG5ld1R5cGU6IGFueSA9IHt9O1xyXG4gICAgICAgICAgY29uc3QgY29sdW1uRGV0YWlscyA9IHF1ZXN0aW9uLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMuZmlsdGVyKChjbG1uOiBhbnkpID0+IGNsbW4ub3JkZXIgPT09IEpTT04ucGFyc2Uoa2V5MSkpO1xyXG4gICAgICAgICAgaWYgKGNvbHVtbkRldGFpbHNbMF0pIHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uVHlwZSA9IGNvbHVtbkRldGFpbHNbMF0uZGF0YVR5cGU7XHJcbiAgICAgICAgICAgIG5ld1R5cGVbY29sdW1uVHlwZV0gPSBncmlkQW5zd2VyW2tleTFdO1xyXG4gICAgICAgICAgICBjb2x1bW5EYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgIGNvbHVtbklkOiBjb2x1bW5EZXRhaWxzWzBdLmNvbHVtbklkLFxyXG4gICAgICAgICAgICAgIGNvbHVtbjogbmV3VHlwZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgbmV3TWFwOiBhbnkgPSB7fTtcclxuICAgICAgICBuZXdNYXBbJ2RhdGFHcmlkQ29sdW1uJ10gPSBjb2x1bW5EYXRhO1xyXG4gICAgICAgIGlmICghbmV3RmlsZWRbcXVlc3Rpb24uZmllbGREYXRhVHlwZV0pIHtcclxuICAgICAgICAgIG5ld0ZpbGVkW3F1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld0ZpbGVkW3F1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdLnB1c2gobmV3TWFwKTtcclxuICAgICAgfVxyXG4gICAgICBkYXRhLnB1c2goe1xyXG4gICAgICAgICdsYWJlbE5hbWUnOiBrZXksXHJcbiAgICAgICAgJ2Fuc3dlcic6IG5ld0ZpbGVkXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy5hbnN3ZXJzKS5mb3JFYWNoKGtleSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmFwaUVycm9yW2tleV0gPSBbXTtcclxuICAgICAgbGV0IG5ld01hcDogYW55ID0ge307XHJcbiAgICAgIGxldCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25zLmZpbHRlcigocXVlc3Q6IGFueSkgPT4gdGhpcy5nZXRRdWVzdGlvbihxdWVzdCkubGFiZWxOYW1lID09PSBrZXkpO1xyXG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1jcmVhdGUnIHx8IHRoaXMuc291cmNlID09PSAncW5yRGV0YWlscycgfHwgdGhpcy5zb3VyY2UgPT09ICdvbmV0aW1lJykge1xyXG4gICAgICAgIHF1ZXN0aW9uID0gcXVlc3Rpb25bMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcXVlc3Rpb24gPSBxdWVzdGlvblswXS5xdWVzdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0gfHwgcXVlc3Rpb24uZmllbGREYXRhVHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgbGV0IGFuc3dlciA9IHRoaXMuYW5zd2Vyc1trZXldO1xyXG4gICAgICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgIGFuc3dlciA9IHRoaXMuZGF0ZVByb2Nlc3Nvci50cmFuc2Zvcm1Ub1lNREZvcm1hdChhbnN3ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdNYXBbcXVlc3Rpb24uZmllbGREYXRhVHlwZV0gPSBhbnN3ZXI7XHJcbiAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgICdsYWJlbE5hbWUnOiBrZXksXHJcbiAgICAgICAgICAnYW5zd2VyJzogbmV3TWFwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbmV3TWFwID0gJyc7XHJcbiAgICAgICAgLy8gZGF0YS5wdXNoKHtcclxuICAgICAgICAvLyAnbGFiZWxOYW1lJzoga2V5LFxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGxldCBwb3N0RGF0YTtcclxuICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3FucnBhcGVyJykge1xyXG4gICAgICBwb3N0RGF0YSA9IHtcclxuICAgICAgICAncXVlc3Rpb25uYWlyZUlkJzogKHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0uaWQpID8gdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5pZCA6IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ucXVlc3Rpb25uYWlyZUlkLFxyXG4gICAgICAgICdhbnN3ZXJMaW5lJzogZGF0YVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChrZXl0eXBlID09PSAnc2VydmljZU9wdGlvbicpIHtcclxuICAgICAgcG9zdERhdGEgPSB7XHJcbiAgICAgICAgJ3F1ZXN0aW9ubmFpcmVJZCc6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QuaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLnF1ZXN0aW9ubmFpcmVJZCxcclxuICAgICAgICAnYW5zd2VyTGluZSc6IHRoaXMuZmluYWxPYmplY3RMaXN0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAnaXZyJyAmJiB0aGlzLnBhcmFtcy5jdXN0b21JZCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnZmZmZmZmZmZmZmZmZmZmZmZmZmZmJywgdGhpcy5xdWVzdGlvbm5haXJlTGlzdClcclxuICAgICAgcG9zdERhdGEgPSB7XHJcbiAgICAgICAgJ3F1ZXN0aW9ubmFpcmVJZCc6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0uaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLnF1ZXN0aW9ubmFpcmVJZCxcclxuICAgICAgICAnYW5zd2VyTGluZSc6IGRhdGFcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbm5haXJlTGlzdCcsIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QpXHJcbiAgICAgIHBvc3REYXRhID0ge1xyXG4gICAgICAgICdxdWVzdGlvbm5haXJlSWQnOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbm5haXJlSWQsXHJcbiAgICAgICAgJ2Fuc3dlckxpbmUnOiBkYXRhXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHBhc3NEYXRhID0geyAnYW5zd2Vycyc6IHBvc3REYXRhLCAnZmlsZXMnOiB0aGlzLnNlbGVjdGVkTWVzc2FnZSwgJ2F1ZGlvVmlkZW8nOiB0aGlzLmF1ZGlvVmlkZW9GaWxlcywgJ2ZpbGVzdG9VcGxvYWQnOiB0aGlzLmZpbGVzdG9VcGxvYWQsICdkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0JzogdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0LCAnY29tbWVudHMnOiB0aGlzLmNvbW1lbnRzIH07XHJcbiAgICBpZiAoa2V5dHlwZSA9PT0gJ2lucHV0Q2hhbmdlJykge1xyXG4gICAgICB0aGlzLmNoYW5nZUhhcHBlbmVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChrZXl0eXBlID09PSAnc3VibWl0Jykge1xyXG4gICAgICBpZiAodGhpcy5jaGFuZ2VIYXBwZW5lZCkge1xyXG4gICAgICAgIHRoaXMuc3VibWl0UXVlc3Rpb25uYWlyZShwYXNzRGF0YSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcclxuICAgICAgICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAncW5yLWxpbmsnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmV0dXJuQW5zd2Vycy5lbWl0KCdub2NoYW5nZScpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0UW5yKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdGhpcy5yZXR1cm5BbnN3ZXJzLmVtaXQocGFzc0RhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXREYXRlKGRhdGU6IGFueSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpO1xyXG4gIH1cclxuICBsaXN0Q2hhbmdlKGV2OiBhbnksIHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBhbnksIGNvbHVtbj86IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgIT09ICdkYXRhR3JpZCcpIHtcclxuICAgICAgaWYgKGV2LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmxpc3RQcm9wZXJ0aWUgJiYgcXVlc3Rpb24ubGlzdFByb3BlcnRpZS5tYXhBbnN3ZXJzICYmIHF1ZXN0aW9uLmxpc3RQcm9wZXJ0aWUubWF4QW5zd2VycyA+IDEpIHtcclxuICAgICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXVswXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uc3BsaWNlKGluZHgsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0pIHtcclxuICAgICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXS5wdXNoKHZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXS5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdLnNwbGljZShpbmR4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgaXNDaGVja2VkKHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBhbnksIGNvbHVtbj86IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgIT09ICdkYXRhR3JpZCcpIHtcclxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YodmFsdWUpO1xyXG4gICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSkge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdLmluZGV4T2YodmFsdWUpO1xyXG4gICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGJvb2xlYW5DaGFuZ2UoZXY6IGFueSwgdmFsdWU6IGFueSwgcXVlc3Rpb246IGFueSwgY29sdW1uPzogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb24uZmllbGREYXRhVHlwZSAhPT0gJ2RhdGFHcmlkJykge1xyXG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9ICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAneWVzJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChldi50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPSAodmFsdWUgPT09ICd5ZXMnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgaXNCb29sZWFuQ2hlY2tlZCh2YWx1ZTogYW55LCBxdWVzdGlvbjogYW55LCBjb2x1bW4/OiBhbnkpIHtcclxuICAgIHZhbHVlID0gKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd5ZXMnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlICE9PSAnZGF0YUdyaWQnKSB7XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSAhPT0gJycgJiYgdHlwZW9mIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID0gSlNPTi5wYXJzZSh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSlcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSAhPT0gJycgJiYgdHlwZW9mIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9IEpTT04ucGFyc2UodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSlcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc3VibWl0UXVlc3Rpb25uYWlyZShwYXNzRGF0YTogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygnZmRmZicsIHBhc3NEYXRhKVxyXG4gICAgY29uc3QgZGF0YVRvU2VuZDogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGNvbnN0IGJsb2Jwb3N0X0RhdGEgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkocGFzc0RhdGEuYW5zd2VycyldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcclxuICAgIGRhdGFUb1NlbmQuYXBwZW5kKCdxdWVzdGlvbicsIGJsb2Jwb3N0X0RhdGEpO1xyXG4gICAgdGhpcy5idXR0b25EaXNhYmxlID0gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgdXBsb2FkQXVkaW9WaWRlbyhkYXRhOiBhbnksIHR5cGU6IGFueSkge1xyXG4gICAgaWYgKGRhdGEudXJscyAmJiBkYXRhLnVybHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgcG9zdERhdGE6IGFueSA9IHtcclxuICAgICAgICB1cmxzOiBbXVxyXG4gICAgICB9O1xyXG4gICAgICBmb3IgKGNvbnN0IHVybCBvZiBkYXRhLnVybHMpIHtcclxuICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5maWxlc3RvVXBsb2FkW3VybC5sYWJlbE5hbWVdW3VybC5kb2N1bWVudF07XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLnZpZGVvYXVkaW9TM1VwbG9hZChmaWxlLCB1cmwudXJsKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHBvc3REYXRhWyd1cmxzJ10ucHVzaCh7IHVpZDogdXJsLnVpZCwgbGFiZWxOYW1lOiB1cmwubGFiZWxOYW1lIH0pO1xyXG4gICAgICAgICAgICBpZiAoZGF0YS51cmxzLmxlbmd0aCA9PT0gcG9zdERhdGFbJ3VybHMnXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbnNDaGVja2luJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyV2FpdGxpc3RRbnJVcGxvYWRTdGF0dXNVcGRhdGUodGhpcy51dWlkLCB0aGlzLmFjY291bnRJZCwgcG9zdERhdGEpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93RXJyb3IodGhpcy53b3JkUHJvY2Vzc29yLmdldFByb2plY3RFcnJvck1lc3NzYWdlcyhlcnJvck9iaikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY29uc0FwcHQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uYWlyZVNlcnZpY2UuY29uc3VtZXJBcHB0UW5yVXBsb2FkU3RhdHVzVXBkYXRlKHRoaXMudXVpZCwgdGhpcy5hY2NvdW50SWQsIHBvc3REYXRhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzR29iYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yT2JqID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3JPYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbnNPcmRlcicgfHwgdHlwZSA9PT0gJ3BhcGVyJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyT3JkZXJRbnJVcGxvYWRTdGF0dXNVcGRhdGUodGhpcy51dWlkLCB0aGlzLmFjY291bnRJZCwgcG9zdERhdGEpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93RXJyb3IodGhpcy53b3JkUHJvY2Vzc29yLmdldFByb2plY3RFcnJvck1lc3NzYWdlcyhlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY29uc0RvbmF0aW9uRGV0YWlscycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25haXJlU2VydmljZS5jb25zdW1lckRvbmF0aW9uUW5yVXBsb2FkU3RhdHVzVXBkYXRlKHRoaXMudXVpZCwgdGhpcy5hY2NvdW50SWQsIHBvc3REYXRhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3JPYmopKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dFcnJvcih0aGlzLndvcmRQcm9jZXNzb3IuZ2V0UHJvamVjdEVycm9yTWVzc3NhZ2VzKGVycm9yT2JqKSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3VjY2Vzc0dvYmFjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnb0JhY2soKSB7XHJcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcclxuICB9XHJcbiAgZ2V0UXVlc3Rpb24ocXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnY3VzdG9tZXItY3JlYXRlJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ3FuckRldGFpbHMnIHx8IHRoaXMuc291cmNlID09PSAnb25ldGltZScgfHwgdGhpcy5zb3VyY2UgPT09ICdzZXJ2aWNlT3B0aW9uQXBwdCcpIHtcclxuICAgICAgcmV0dXJuIHF1ZXN0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHF1ZXN0aW9uLnF1ZXN0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuICB2YWxpZGF0ZVF1ZXN0aW9ubmFpcmUoc3JjPzogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25BbnN3ZXJzKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzID0ge1xyXG4gICAgICAgIGFuc3dlcnM6IHtcclxuICAgICAgICAgIGFuc3dlckxpbmU6IFtdLFxyXG4gICAgICAgICAgcXVlc3Rpb25uYWlyZUlkOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbm5haXJlSWQsXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJbWcocXVlc3Rpb246IGFueSwgZG9jdW1lbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgIGxldCBmaWxlO1xyXG4gICAgICBpZiAodHlwZVswXSA9PT0gJ3ZpZGVvJyB8fCB0eXBlWzBdID09PSAnYXVkaW8nKSB7XHJcbiAgICAgICAgZmlsZSA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGUgPSB0aGlzLnNlbGVjdGVkTWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmR4ID0gZmlsZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5maWxlU2VydmljZS5nZXRJbWFnZShudWxsLCB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG5cclxuICAgICAgICBpZiAocGF0aCAmJiBwYXRoICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGF0aCA9IGZpbGVbaW5keF0ucGF0aDtcclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgY29uc3QgaW5keCA9IHRoaXMudXBsb2FkZWRJbWFnZXMuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICBsZXQgcGF0aCA9IHRoaXMuZmlsZVNlcnZpY2UuZ2V0SW1hZ2UobnVsbCwgdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XSk7XHJcbiAgICAgICAgaWYgKHBhdGggJiYgcGF0aCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhdGggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLnMzcGF0aDtcclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyBvbkJ1dHRvbkJlZm9yZUhvb2soZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgaWYgKCFldmVudCB8fCAhZXZlbnQuYnV0dG9uKSB7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvLyAgIGlmIChldmVudC5idXR0b24udHlwZSA9PT0gQnV0dG9uVHlwZS5ET1dOTE9BRCkge1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBvcGVuQXR0YWNobWVudEdhbGxlcnkocXVlc3Rpb246IGFueSwgZG9jdW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pbWFnZV9saXN0X3BvcHVwID0gW107XHJcbiAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgbGV0IGltYWdlUGF0aDtcclxuICAgIGxldCBjYXB0aW9uID0gJyc7XHJcbiAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgIGxldCB0eXBlID0gdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdLnR5cGUuc3BsaXQoJy8nKTtcclxuICAgICAgaWYgKHR5cGVbMF0gPT09ICd2aWRlbycgfHwgdHlwZVswXSA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgICAgdGhpcy5zaG93QXVkaW9WaWRlb0ZpbGUodGhpcy5hdWRpb1ZpZGVvRmlsZXNbaW5keF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgICBpZiAodHlwZVsxXSA9PT0gJ3BkZicgfHwgdHlwZVsxXSA9PT0gJ2RvY3gnIHx8IHR5cGVbMV0gPT09ICd0eHQnIHx8IHR5cGVbMV0gPT09ICdkb2MnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XS5zM3BhdGgpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XS5zM3BhdGgsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XS5wYXRoLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltYWdlUGF0aCA9IHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0ucGF0aDtcclxuICAgICAgICAgICAgY2FwdGlvbiA9IHRoaXMuY29tbWVudHNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgZG9jdW1lbnRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgY29uc3QgaW5keCA9IHRoaXMudXBsb2FkZWRJbWFnZXMuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgIGxldCBleHQgPSB0eXBlWzFdO1xyXG4gICAgICB0eXBlID0gdHlwZVswXTtcclxuICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycgfHwgdHlwZSA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgICAgdGhpcy5zaG93QXVkaW9WaWRlb0ZpbGUodGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT09ICdwZGYnIHx8IGV4dCA9PT0gJ2RvY3gnIHx8IGV4dCA9PT0gJ3R4dCcgfHwgZXh0ID09PSAnZG9jJyB8fCBleHQgPT09ICd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcpIHtcclxuICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS5zM3BhdGgsICdfYmxhbmsnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3R5cGV0eHQyJyx0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdKTtcclxuICAgICAgICAgIGlmICh0aGlzLnVwbG9hZGVkSW1hZ2VzICYmIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0gJiYgdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XVsna2V5TmFtZSddICYmXHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF1bJ2tleU5hbWUnXS5pbmNsdWRlcygnZG9jeCcpKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS5zM3BhdGgsICdfYmxhbmsnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpbWFnZVBhdGggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLnMzcGF0aDtcclxuICAgICAgICAgICAgY2FwdGlvbiA9IHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0uY29tbWVudHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW1hZ2VQYXRoKSB7XHJcbiAgICAgIGNvbnN0IGltZ29iaiA9IHtcclxuICAgICAgICBzcmM6IGltYWdlUGF0aCxcclxuICAgICAgICB0aHVtYjogaW1hZ2VQYXRoLFxyXG4gICAgICAgIGFsdDogY2FwdGlvblxyXG4gICAgICAgIH1cclxuICAgICAgdGhpcy5pbWFnZV9saXN0X3BvcHVwLnB1c2goaW1nb2JqKTtcclxuICAgICAgY291bnQrKztcclxuICAgIH1cclxuICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcGVuR2FsbGVyeSh0aGlzLmltYWdlX2xpc3RfcG9wdXBbMF0pO1xyXG4gICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG4gIH1cclxuICBzaG93QXVkaW9WaWRlb0ZpbGUoZmlsZTogYW55KSB7XHJcbiAgICBjb25zdCBmaWxldmlld2RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2hvd3VwbG9hZGZpbGVDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc1MCUnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ3BvcHVwLWNsYXNzJywgJ2NvbW1vbnBvcHVwbWFpbmNsYXNzJywgJ3VwbG9hZGZpbGVjb21wb25lbnRjbGFzcyddLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBmaWxlOiBmaWxlLFxyXG4gICAgICAgIHNvdXJjZTogJ3FucidcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBmaWxldmlld2RpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGVkaXRRbnIoKSB7XHJcbiAgICB0aGlzLmVkaXRRdWVzdGlvbm5haXJlID0gIXRoaXMuZWRpdFF1ZXN0aW9ubmFpcmU7XHJcbiAgfVxyXG4gIGdldERvY3VtZW50cyhxdWVzdGlvbjogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb24uZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZSA+IDEgJiYgcXVlc3Rpb24uZmlsZVByb3BlcnRpZS5taW5Ob09mRmlsZSAhPT0gcXVlc3Rpb24uZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlc1RlbXBbcXVlc3Rpb24ubGFiZWxOYW1lXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBxdWVzdGlvbi5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNob3dQcm92aWRlclRleHQocXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLndob0NhbkFuc3dlciAmJiBxdWVzdGlvbi53aG9DYW5BbnN3ZXIgPT09ICdQUk9WSURFUl9PTkxZJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgc3VjY2Vzc0dvYmFjaygpIHtcclxuICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzLnR5cGUpIHtcclxuICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbGVzdG9VcGxvYWQgPSBbXTtcclxuICAgICAgdGhpcy5lZGl0UW5yKCk7XHJcbiAgICAgIHRoaXMucmV0dXJuQW5zd2Vycy5lbWl0KCdyZWxvYWQnKTtcclxuICAgICAgaWYgKHRoaXMudHlwZSAhPT0gJ3Fuci1saW5rJykge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dTdWNjZXNzKCdVcGRhdGVkIFN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNob3dEYXRhR3JpZEFkZFNlY3Rpb24ocXVlc3Rpb246IGFueSwgdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zaG93RGF0YUdyaWRbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBudWxsO1xyXG4gIH1cclxuICBzaG93RGF0YUdyaWRBZGRTZWN0aW9ubihxdWVzdGlvbjogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnF1ZXNTdG9yZSA9IHF1ZXN0aW9uO1xyXG4gICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdxdWVzU3RvcmUnLCB0aGlzLnF1ZXNTdG9yZSk7XHJcbiAgICB0aGlzLnNob3dEYXRhR3JpZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gdmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IG51bGw7XHJcbiAgICB0aGlzLnFuclBvcHVwKHF1ZXN0aW9uLCB0cnVlKVxyXG4gIH1cclxuICBzYXZlRGF0YUdyaWRDb2x1bW4ocXVlc3Rpb246IGFueSkge1xyXG4gICAgbGV0IGNvbHVtbnMgPSBbXTtcclxuICAgIGZvciAobGV0IGNvbHVtbiBvZiBxdWVzdGlvbi5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgY29sdW1uc1tjb2x1bW4ub3JkZXJdID0gdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnbGlzdCcgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZmlsZVVwbG9hZCcpIHtcclxuICAgICAgICAgIGNvbHVtbnNbY29sdW1uLm9yZGVyXSA9IFtdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW5zW2NvbHVtbi5vcmRlcl0gPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0pIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBbXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXVt0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXV0gPSBjb2x1bW5zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0ucHVzaChjb2x1bW5zKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FuY2VsQWRkb3JVcGRhdGUocXVlc3Rpb24pO1xyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgZWRpdERhdGFHcmlkKHF1ZXN0aW9uOiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YoY29sdW1uKTtcclxuICAgIE9iamVjdC5rZXlzKGNvbHVtbikuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBrZXldID0gY29sdW1uW2tleV07XHJcbiAgICB9KTtcclxuICAgIHRoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gaW5kZXg7XHJcbiAgICB0aGlzLnNob3dEYXRhR3JpZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gdHJ1ZTtcclxuICB9XHJcbiAgZGVsZXRlRGF0YUdyaWQocXVlc3Rpb246IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMub25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XHJcbiAgfVxyXG4gIGNhbmNlbEFkZG9yVXBkYXRlKHF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd0RhdGFHcmlkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gbnVsbDtcclxuICAgIGZvciAobGV0IGNvbHVtbiBvZiBxdWVzdGlvbi5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPSAnJztcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0Q29sdW1uVHlwZShjb2x1bW5zOiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBjb2x1bW5EZXRhaWxzID0gY29sdW1ucy5maWx0ZXIoKGNsbW46IGFueSkgPT4gY2xtbi5vcmRlciA9PT0gSlNPTi5wYXJzZShjb2x1bW4pKTtcclxuICAgIGlmIChjb2x1bW5EZXRhaWxzWzBdKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5EZXRhaWxzWzBdLmRhdGFUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRTZWN0aW9uQ291bnQoKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5ncm91cGVkUW5yKS5sZW5ndGg7XHJcbiAgfVxyXG4gIGdldEJvb2xWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICB2YWx1ZSA9ICh2YWx1ZSAhPT0gJycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiAnWWVzJztcclxuICAgIH1cclxuICAgIHJldHVybiAnTm8nO1xyXG4gIH1cclxuICBnZXRNYXhkYXRlKGRhdGE6IGFueSkge1xyXG4gICAgbGV0IGRhdGU7XHJcbiAgICBpZiAodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcyAmJiB0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLmVuZERhdGUpIHtcclxuICAgICAgY29uc3QgZHQgPSB0aGlzLnJldmVyc2UodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcy5lbmREYXRlKTtcclxuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGR0KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZSA9IHRoaXMudGRheTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuICBnZXRNaW5kYXRlKGRhdGE6IGFueSkge1xyXG4gICAgbGV0IGRhdGU7XHJcbiAgICBpZiAodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcyAmJiB0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLnN0YXJ0RGF0ZSkge1xyXG4gICAgICBjb25zdCBkdCA9IHRoaXMucmV2ZXJzZSh0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLnN0YXJ0RGF0ZSk7XHJcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkdClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGUgPSB0aGlzLm1pbmRheTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZTtcclxuICB9XHJcbiAgcmV2ZXJzZShzOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBzLnNwbGl0KFwiLVwiKS5yZXZlcnNlKCkuam9pbihcIi1cIik7XHJcbiAgfVxyXG4gIHFuclBvcHVwKHF1ZXN0aW9uOiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIC8vIGlmICh2YWx1ZSA9PT0gJ2VkaXQnKSB7XHJcbiAgICAvLyAgIHRoaXMucXVlc1N0b3JlID0gdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ3F1ZXNTdG9yZScpO1xyXG4gICAgLy8gICB0aGlzLnNob3dxbnIgPSB0cnVlO1xyXG4gICAgLy8gICB0aGlzLmVkaXRhYmxlSXRlbSA9IHF1ZXN0aW9uO1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXNTdG9yZSkpXHJcbiAgICAvLyAgIGNvbnN0IHJlbW92ZWl0ZW1kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFuckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgLy8gICAgIHdpZHRoOiAnNTAlJyxcclxuICAgIC8vICAgICBwYW5lbENsYXNzOiBbJ3BvcHVwLWNsYXNzJywgJ2NvbW1vbnBvcHVwbWFpbmNsYXNzJywgJ2NvbmZpcm1hdGlvbm1haW5jbGFzcyddLFxyXG4gICAgLy8gICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgIC8vICAgICBkYXRhOiB7XHJcbiAgICAvLyAgICAgICBkYXRhOiB0aGlzLnF1ZXNTdG9yZSxcclxuICAgIC8vICAgICAgIHFucl90eXBlOiAnc2VydmljZV9vcHRpb24nLFxyXG4gICAgLy8gICAgICAgdmlldzogJ3FuclZpZXcnLFxyXG4gICAgLy8gICAgICAgaXNFZGl0OiAnZWRpdCcsXHJcbiAgICAvLyAgICAgICBlZGl0YWJsZUl0ZW06IHRoaXMuZWRpdGFibGVJdGVtLFxyXG4gICAgLy8gICAgICAgc2VydkRldGFpbHM6IHRoaXMuc2VydmljZVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyAgIHJlbW92ZWl0ZW1kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgIC8vICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhcInJlc3VsdC5kYXRhLmFuc3dlckxpbmVcIiwgcmVzdWx0LmRhdGEuYW5zd2VyTGluZSlcclxuICAgIC8vICAgICAgIHRoaXMuZGF0YUdyaWRMaXN0ID0gcmVzdWx0LmRhdGEuYW5zd2VyTGluZTtcclxuICAgIC8vICAgICAgIHRoaXMucG9zdF9EYXRhID0gcmVzdWx0LmRhdGE7XHJcbiAgICAvLyAgICAgICB0aGlzLnNob3dJdGVtID0gdHJ1ZTtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbSA9IHJlc3VsdC5kYXRhLmFuc3dlckxpbmVbMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0uY29sdW1uLmxpc3RbMF07XHJcbiAgICAvLyAgICAgICBpZiAocmVzdWx0LmRhdGEudG90YWxQcmljZSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSByZXN1bHQuZGF0YS50b3RhbFByaWNlXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgaW5kZXgxID0gdGhpcy5pdGVtQXJyYXkuZmluZEluZGV4KHggPT4geC5pZCA9PT0gdGhpcy5lZGl0YWJsZUl0ZW0uaWQpXHJcbiAgICAvLyAgICAgICBpZiAoaW5kZXgxID4gLTEpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5pdGVtQXJyYXkuc3BsaWNlKGluZGV4MSwgMSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgZHVtbXlBcnJheSA9IHsgaWQ6IHRoaXMuaWQsIHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgaXRlbTogdGhpcy5pdGVtLCBwcmljZTogdGhpcy50b3RhbFByaWNlLCBjb2x1bW5JdGVtOiB0aGlzLmRhdGFHcmlkTGlzdCB9XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5wdXNoKGR1bW15QXJyYXkpXHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gMDtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbUFycmF5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gdGhpcy5zZXJ2aWNlVG90YWxQcmljZSArIGl0ZW0ucHJpY2U7XHJcbiAgICAvLyAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnc2VydmljZVRvdGFsUHJpY2UnLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgKyAxXHJcbiAgICAvLyAgICAgICBsZXQgb2JqID0geyBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGRnTGlzdDogdGhpcy5wb3N0X0RhdGEuYW5zd2VyTGluZSB9O1xyXG4gICAgLy8gICAgICAgdGhpcy5maW5hbE9iamVjdExpc3QucHVzaChvYmopO1xyXG4gICAgLy8gICAgICAgdGhpcy5vblN1Ym1pdCgnc2VydmljZU9wdGlvbicpXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLnNob3dxbnIgPSB0cnVlO1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhcInRoaXMuc2VxdWVuY2VJZFwiLCBxdWVzdGlvbilcclxuICAgIC8vICAgdGhpcy5zZXF1ZW5jZUlkID0gcXVlc3Rpb24uc2VxdW5jZUlkO1xyXG4gICAgLy8gICBjb25zdCByZW1vdmVpdGVtZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRbnJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgIC8vICAgICB3aWR0aDogJzUwJScsXHJcbiAgICAvLyAgICAgcGFuZWxDbGFzczogWydwb3B1cC1jbGFzcycsICdjb21tb25wb3B1cG1haW5jbGFzcycsICdjb25maXJtYXRpb25tYWluY2xhc3MnXSxcclxuICAgIC8vICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAvLyAgICAgZGF0YToge1xyXG4gICAgLy8gICAgICAgZGF0YTogcXVlc3Rpb24sXHJcbiAgICAvLyAgICAgICBxbnJfdHlwZTogJ3NlcnZpY2Vfb3B0aW9uJyxcclxuICAgIC8vICAgICAgIHZpZXc6ICdxbnJWaWV3JyxcclxuICAgIC8vICAgICAgIGlzRWRpdDogJ2FkZCcsXHJcbiAgICAvLyAgICAgICBzZXJ2RGV0YWlsczogdGhpcy5zZXJ2aWNlXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vICAgcmVtb3ZlaXRlbWRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgLy8gICAgIGlmIChyZXN1bHQpIHtcclxuICAgIC8vICAgICAgIHRoaXMuZGF0YUdyaWRMaXN0ID0gcmVzdWx0LmRhdGEuYW5zd2VyTGluZTtcclxuICAgIC8vICAgICAgIHRoaXMucG9zdF9EYXRhID0gcmVzdWx0LmRhdGE7XHJcbiAgICAvLyAgICAgICB0aGlzLnNob3dJdGVtID0gdHJ1ZTtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbSA9IHJlc3VsdC5kYXRhLmFuc3dlckxpbmVbMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0uY29sdW1uLmxpc3RbMF07XHJcblxyXG4gICAgLy8gICAgICAgaWYgKHJlc3VsdC5kYXRhLnRvdGFsUHJpY2UpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy50b3RhbFByaWNlID0gcmVzdWx0LmRhdGEudG90YWxQcmljZVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgbGV0IGR1bW15QXJyYXkgPSB7IGlkOiB0aGlzLmlkLCBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGl0ZW06IHRoaXMuaXRlbSwgcHJpY2U6IHRoaXMudG90YWxQcmljZSwgY29sdW1uSXRlbTogdGhpcy5kYXRhR3JpZExpc3QgfVxyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkucHVzaChkdW1teUFycmF5KVxyXG5cclxuICAgIC8vICAgICAgIGlmICh0aGlzLml0ZW1BcnJheSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ2l0ZW1BcnJheScsIHRoaXMuaXRlbUFycmF5KTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSAwO1xyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGxldCBxdWFudGl0eSA9IGl0ZW0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eTtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9ICh0aGlzLnNlcnZpY2VUb3RhbFByaWNlICsgaXRlbS5wcmljZSkgKiBxdWFudGl0eTtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdzZXJ2aWNlVG90YWxQcmljZScsIHRoaXMuc2VydmljZVRvdGFsUHJpY2UpO1xyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgICB0aGlzLmlkID0gdGhpcy5pZCArIDFcclxuICAgIC8vICAgICAgIGxldCBvYmogPSB7IHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgZGdMaXN0OiB0aGlzLnBvc3RfRGF0YS5hbnN3ZXJMaW5lIH07XHJcbiAgICAvLyAgICAgICB0aGlzLmZpbmFsT2JqZWN0TGlzdC5wdXNoKG9iaik7XHJcbiAgICAvLyAgICAgICB0aGlzLm9uU3VibWl0KCdzZXJ2aWNlT3B0aW9uJylcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuICBpbmNyZW1lbnQoaXRlbTogYW55KSB7XHJcbiAgICAvLyBjb25zdCByZW1vdmVpdGVtZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRbnJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgIC8vICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIC8vICAgcGFuZWxDbGFzczogWydwb3B1cC1jbGFzcycsICdjb21tb25wb3B1cG1haW5jbGFzcycsICdjb25maXJtYXRpb25tYWluY2xhc3MnXSxcclxuICAgIC8vICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgLy8gICBkYXRhOiB7XHJcbiAgICAvLyAgICAgaXRlbTogaXRlbSxcclxuICAgIC8vICAgICBkYXRhOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LFxyXG4gICAgLy8gICAgIHZpZXc6ICdxbnJyZXBlYXRWaWV3JyxcclxuICAgIC8vICAgICBzZXJ2RGV0YWlsczogdGhpcy5zZXJ2aWNlXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG4gICAgLy8gcmVtb3ZlaXRlbWRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgLy8gICBpZiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgaWYgKHJlc3VsdCA9PT0gJ2FkZE5ldycpIHtcclxuICAgIC8vICAgICAgIHRoaXMucXVlc1N0b3JlID0gdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ3F1ZXNTdG9yZScpO1xyXG4gICAgLy8gICAgICAgdGhpcy5xbnJQb3B1cCh0aGlzLnF1ZXNTdG9yZSwgdHJ1ZSlcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgaWYgKCF0aGlzLnNlcXVlbmNlSWQpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZXF1ZW5jZUlkID0gaXRlbS5zZXF1ZW5jZUlkXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgZHVtbXlBcnJheSA9IHsgaWQ6IHRoaXMuaWQsIHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgaXRlbTogcmVzdWx0LnJlcGVhdEl0ZW0uaXRlbSwgcHJpY2U6IHJlc3VsdC5yZXBlYXRJdGVtLnByaWNlLCBjb2x1bW5JdGVtOiByZXN1bHQucmVwZWF0SXRlbS5jb2x1bW5JdGVtIH1cclxuICAgIC8vICAgICAgIGxldCBpdGVtcyA9IGR1bW15QXJyYXkuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtbjtcclxuICAgIC8vICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgICAgICAgaXRlbXNbaV0ucXVhbnRpdHkgPSBpdGVtc1tpXS5xdWFudGl0eSArIDE7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhcIlRoaXMuSXRlbUFycmF5XCIsIHRoaXMuaXRlbUFycmF5KVxyXG4gICAgLy8gICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IDA7XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgbGV0IHF1YW50aXR5ID0gaXRlbS5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLnF1YW50aXR5O1xyXG4gICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcInF1YW50aXR5XCIsIHF1YW50aXR5KVxyXG4gICAgLy8gICAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlICs9IGl0ZW0ucHJpY2UgKiBxdWFudGl0eTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgY29uc29sZS5sb2coXCJzZXJ2aWNlVG90YWxQcmljZVwiLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKVxyXG4gICAgLy8gICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdzZXJ2aWNlVG90YWxQcmljZScsIHRoaXMuc2VydmljZVRvdGFsUHJpY2UpO1xyXG4gICAgLy8gICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgKyAxXHJcbiAgICAvLyAgICAgICBsZXQgb2JqID0geyBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGRnTGlzdDogcmVzdWx0LnJlcGVhdEl0ZW0uY29sdW1uSXRlbSB9O1xyXG4gICAgLy8gICAgICAgdGhpcy5maW5hbE9iamVjdExpc3QucHVzaChvYmopO1xyXG4gICAgLy8gICAgICAgdGhpcy5vblN1Ym1pdCgnc2VydmljZU9wdGlvbicpXHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG4gIGdldEl0ZW1RdWFudGl0eShpdGVtOiBhbnkpIHtcclxuICAgIGxldCBxdWFudGl0eSA9IGl0ZW0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eTtcclxuICAgIHJldHVybiBxdWFudGl0eVxyXG4gICAgLy8gY29uc29sZS5sb2coXCJpdGVtXCIsIGl0ZW0pXHJcbiAgfVxyXG4gIGRlY3JlbWVudChyZW1vdmluZ0l0ZW06IGFueSkge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5pdGVtQXJyYXkuZmluZEluZGV4KCh4OiBhbnkpID0+IHguaWQgPT09IHJlbW92aW5nSXRlbS5pZClcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5pdGVtQXJyYXlbaW5kZXhdXCIsIHRoaXMuaXRlbUFycmF5W2luZGV4XSlcclxuICAgICAgaWYgKHRoaXMuZ2V0SXRlbVF1YW50aXR5KHRoaXMuaXRlbUFycmF5W2luZGV4XSkgPT0gMSkge1xyXG4gICAgICAgIHRoaXMuaXRlbUFycmF5LnNwbGljZShpbmRleCwgMSk7IC8vIDJuZCBwYXJhbWV0ZXIgbWVhbnMgcmVtb3ZlIG9uZSBpdGVtIG9ubHlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1BcnJheVtpbmRleF0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtbjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpdGVtc1tpXS5xdWFudGl0eSA9IGl0ZW1zW2ldLnF1YW50aXR5IC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXRlbUFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUFycmF5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSB0aGlzLnNlcnZpY2VUb3RhbFByaWNlICsgaXRlbS5wcmljZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnc2VydmljZVRvdGFsUHJpY2UnLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKTtcclxuICAgICAgdGhpcy5maW5hbE9iamVjdExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIHRoaXMub25TdWJtaXQoJ3NlcnZpY2VPcHRpb24nKVxyXG4gIH1cclxuICBkaXNhYmxlSW5wdXQoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0Q3VycmVudEluZGV4Q3VzdG9tTGF5b3V0KGltYWdlLCBpbWFnZXMpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGltYWdlID8gaW1hZ2VzLmluZGV4T2YoaW1hZ2UpIDogLTE7XHJcbiAgfVxyXG4gIG9wZW5HYWxsZXJ5KGltYWdlKTogdm9pZCB7XHJcbiAgICBsZXQgaW1hZ2VJbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4Q3VzdG9tTGF5b3V0KGltYWdlLCB0aGlzLmltYWdlX2xpc3RfcG9wdXApO1xyXG4gICAgY29uc3QgbGdJbnN0YW5jZSA9IGxpZ2h0Z2FsbGVyeSh0aGlzLmxpZ2h0R2FsbGVyeUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIHBsdWdpbnM6IFtsZ1pvb21dLFxyXG4gICAgICBkeW5hbWljOiB0cnVlLFxyXG4gICAgICBkeW5hbWljRWw6IHRoaXMuaW1hZ2VfbGlzdF9wb3B1cC5tYXAoKGltZykgPT4gKHtcclxuICAgICAgICBzcmM6IGltZy5zcmMsXHJcbiAgICAgICAgdGh1bWI6IGltZy50aHVtYixcclxuICAgICAgICBzdWJIdG1sOiBgPGg0PiR7aW1nLmFsdH08L2g0PmAsXHJcbiAgICAgICAgZG93bmxvYWRhYmxlOiB0cnVlLFxyXG4gICAgICB9KSksXHJcbiAgICAgIGluZGV4OiBpbWFnZUluZGV4LFxyXG4gICAgICB6b29tOiB0cnVlLFxyXG4gICAgICB0aHVtYm5haWw6IHRydWUsXHJcbiAgICAgIGZ1bGxTY3JlZW46IHRydWUsXHJcbiAgICAgIGRvd25sb2FkOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbGdJbnN0YW5jZS5vcGVuR2FsbGVyeShpbWFnZUluZGV4KTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJjb25zLWluYm94IG5vLXBhZGRpbmctc21hbGxcIiAqbmdJZj1cIiFzaG93c2VydmljZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXIgY29uc3VtZXItZGFzaGhvbWUgcC0wXCIgKm5nSWY9XCIhdHlwZSAmJiBzb3VyY2UhPSdwcm9MZWFkJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgdGl0bGUtZ2Igcm91bmRlZC0wXCIgKm5nSWY9XCJ1dWlkXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm10LTIgYm9sZFwiPnt7cXVlc3Rpb25uYWlyZV9oZWFkaW5nIHwgY2FwaXRhbGl6ZUZpcnN0fX0gPGEgY2xhc3M9XCJwdWxsLWxlZnQgbWUtNCBiYWNrLWJ0blwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnRcIj48L2k+PC9hPjwvaDU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8YXBwLWNvbW1vbi1pbm5lcmxvYWRpbmctc3Bpbm5lciAqbmdJZj1cImxvYWRpbmdcIj48L2FwcC1jb21tb24taW5uZXJsb2FkaW5nLXNwaW5uZXI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi1mbHVpZCBwdWxsLXJpZ2h0IG1lLTIgbWItNFwiXHJcbiAgICAqbmdJZj1cInR5cGUgIT09ICdxbnJMaW5rUHJvdmlkZXInICYmICFidXR0b25EaXNhYmxlICYmIHdhaXRsaXN0U3RhdHVzXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwibm9ybWFsLWJ0biBlZGl0XCIgbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJlZGl0UW5yKClcIj5FZGl0PC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi1mbHVpZCB3aWR0aC0xMDBcIiBbY2xhc3MucW5yRGlzYWJsZVN0YXRlXT1cImRpc2FibGVJbnB1dCgpXCJcclxuICAgIFtjbGFzcy5wLTBdPVwidXVpZCAmJiAoc291cmNlID09PSAnY29uc0NoZWNraW4nIHx8IHNvdXJjZSA9PT0gJ2NvbnNBcHB0JyB8fCBzb3VyY2UgPT09ICdjb25zT3JkZXInIHx8IHNvdXJjZSA9PT0gJ3BhcGVyJyB8fCBzb3VyY2UgPT09ICdjb25zRG9uYXRpb25EZXRhaWxzJyB8fCBzb3VyY2UgPT09ICdpdnInKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14bC0xMiBmb3JjZV9jZW50ZXJcIiBbY2xhc3MucC0wXT1cInV1aWRcIiBbY2xhc3Mubm8tcGFkZGluZy1zbWFsbF09XCJzb3VyY2UgJiYgc291cmNlPT0naXZyJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInFucnNlY1wiICpuZ0Zvcj1cImxldCBxbnIgb2YgZ3JvdXBlZFFuciB8IGtleXZhbHVlOiBhc0lzT3JkZXJcIlxyXG4gICAgICAgICAgW2NsYXNzLnNlY3Rpb24tc2hhZG93XT1cImdldFNlY3Rpb25Db3VudCgpID4gMVwiIFtjbGFzcy5uby1wYWRkaW5nLXNtYWxsXT1cInNvdXJjZSAmJiBzb3VyY2U9PSdpdnInXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBjYXJkIG1nbi0wXCIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHFuci52YWx1ZVwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtMTIgcXVlc3RcIj57e2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbH19XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZSBwdWxsLXJpZ2h0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hZGRpY29uXT1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZGF0YUdyaWQnICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiBzaG93RGF0YUdyaWRBZGRTZWN0aW9uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgdHJ1ZSlcIj48L2k+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByby1vbmx5XCIgKm5nSWY9XCJzaG93UHJvdmlkZXJUZXh0KGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5Gb3IgUHJvdmlkZXJzPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWRcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5tYW5kYXRvcnlcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWxldmVsLXNldHRpbmdzXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuaGludFwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5oaW50IHwgc2FmZUh0bWxcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPCEtLSBmb3IgZmlsZSB1cGxvYWQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZmlsZVVwbG9hZCdcIj5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBtdWx0aXBsZSAjZGVwdHNlbCBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLm1heE5vT2ZGaWxlID4gMSAmJiBnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5taW5Ob09mRmlsZSAhPT0gZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUubWF4Tm9PZkZpbGVcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ1cGxvYWRGaWxlc1RlbXBbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIiBjbGFzcz1cInNlbGVjdC1ib3hcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGRvY3VtZW50IG9mIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHNcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZG9jdW1lbnRcIiAoY2xpY2spPVwiY2hhbmdlSW1hZ2VTZWxlY3RlZChnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvY3VtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICB7e2RvY3VtZW50fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgY29sLTEyIGNvbC1tZC0xMiBjb2wtc20tMTIgcC0wIG10LTRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXREb2N1bWVudHMoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKSAmJiBnZXREb2N1bWVudHMoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHpvbmUgZHJvcHpvbmUtZGVmYXVsdCBkcm9wem9uZS1wcmltYXJ5IGR6LWNsaWNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zaW5nbGUtZmlsZV09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzLmxlbmd0aD09MVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBhdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkb2Mgb2YgZ2V0RG9jdW1lbnRzKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHotcHJldmlldyBkei1wcm9jZXNzaW5nIGR6LWltYWdlLXByZXZpZXcgZHotZXJyb3IgZHotY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRJbWcoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jbmFtZVwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUuYWxsb3dlZERvY3VtZW50cy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZG9jfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkemltYWdlIHBvaW50ZXItY3Vyc29yXCIgKGNsaWNrKT1cIm9wZW5BdHRhY2htZW50R2FsbGVyeShnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9XCJcIiBjbGFzcz1cImltZ19maXRcIiBbc3JjXT1cImdldEltZyhnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgKGJsdXIpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tZW50c1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lICsgJz0nICsgZG9jXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdhbF9hY3Rpb25cIiAqbmdJZj1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiBtb2RlIT09J3JlYWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUltYWdlU2VsZWN0ZWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6LXByZXZpZXcgZHotcHJvY2Vzc2luZyBkei1pbWFnZS1wcmV2aWV3IGR6LWVycm9yIGR6LWNvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb2dvZmlsZTEuY2xpY2soKVwiICpuZ0lmPVwiIWdldEltZyhnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2NuYW1lXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tkb2N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6LWltYWdlIHBvaW50ZXItY3Vyc29yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjbG9nb2ZpbGUxIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLyo7Y2FwdHVyZT1jYW1lcmFcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZXNTZWxlY3RlZCgkZXZlbnQsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6LWVycm9yLW1hcmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LXN1Y2Nlc3MgYnRuLWNpcmNsZSBtci0yXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrLTUwIGZsYXRpY29uLXVwbG9hZFwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgY2hlY2tib3ggLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdsaXN0JyAmJiBnZXRRdWVzdGlvbihxdWVzdGlvbikubGlzdFByb3BlcnRpZS5tYXhBbnN3ZXJzID4gMVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveFwiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxWYWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzQ2hlY2tlZCh2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsaXN0Q2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3t2YWx1ZX19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciByYWRpbyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2xpc3QnICYmIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5saXN0UHJvcGVydGllLm1heEFuc3dlcnMgPT09IDFcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsVmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNDaGVja2VkKHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImxpc3RDaGFuZ2UoJGV2ZW50LCB2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgdG9nZ2VsIGJvb2xlYW4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnYm9vbCdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsVmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNCb29sZWFuQ2hlY2tlZCh2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJib29sZWFuQ2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e3ZhbHVlfX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIFRleHQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAncGxhaW5UZXh0J1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5wbGFpblRleHRQcm9wZXJ0aWUubWF4Tm9PZkxldHRlcjw9MTAwXCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhbnN3ZXJzW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCIgKGlucHV0KT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1wiICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIFttaW5sZW5ndGhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5taW5Ob09mTGV0dGVyXCJcclxuICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cInRleHRcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXI+MTAwXCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhbnN3ZXJzW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCIgKGlucHV0KT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1wiXHJcbiAgICAgICAgICAgICAgICAgIFttaW5sZW5ndGhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5taW5Ob09mTGV0dGVyXCJcclxuICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXJcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sMiBmb3JtLWNvbnRyb2wtc29saWRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciBOdW1iZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImFuc3dlcnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIiAoaW5wdXQpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XCJcclxuICAgICAgICAgICAgICAgIFttaW5dPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLm51bWJlclByb3BlcnRpZS5zdGFydFwiIFttYXhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLm51bWJlclByb3BlcnRpZS5lbmRcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwiaXNOdW1lcmljKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgRGF0ZSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkaXNwLWZsZXhcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wxXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgW21heF09XCJnZXRNYXhkYXRlKHF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICBbbWluXT1cImdldE1pbmRhdGUocXVlc3Rpb24pXCIgWyhuZ01vZGVsKV09XCJhbnN3ZXJzW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCJcclxuICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgRGF0YWdyaWQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlMVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2RhdGFHcmlkJyAmJiBkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdICYmIGRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV0ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhlYWQtY3VzdG9tIHRhYmxlLWhlYWQtYmcgdGFibGUtYm9yZGVybGVzcyB0YWJsZS12ZXJ0aWNhbC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2NvbHVtbi5jb2x1bW5JZH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV07bGV0IGkgPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNvbHVtbiB8IGtleXZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29sdW1uVHlwZShnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucywgZGF0YS5rZXkpID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhLnZhbHVlIHwgZGF0ZSA6IG5ld1RpbWVEYXRlRm9ybWF0fX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtblR5cGUoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMsIGRhdGEua2V5KSA9PT0gJ2Jvb2wnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Qm9vbFZhbHVlKGRhdGEudmFsdWUpfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtblR5cGUoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMsIGRhdGEua2V5KSAhPT0gJ2RhdGUnICYmIGdldENvbHVtblR5cGUoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMsIGRhdGEua2V5KSAhPT0gJ2Jvb2wnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YS52YWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiAhc2hvd0RhdGFHcmlkW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlblwiIChjbGljayk9XCJlZGl0RGF0YUdyaWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIiAoY2xpY2spPVwiZGVsZXRlRGF0YUdyaWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFNlY3Rpb25cIiAqbmdJZj1cInNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkQ29sdW1uXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7Y29sdW1uLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWRcIiAqbmdJZj1cImNvbHVtbi5tYW5kYXRvcnlcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIGNoZWNrYm94IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnbGlzdCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveFwiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBjb2x1bW4ubGlzdFByb3BlcnRpZS52YWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc0NoZWNrZWQodmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibGlzdENoYW5nZSgkZXZlbnQsIHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t2YWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIHRvZ2dlbCBib29sZWFuIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNCb29sZWFuQ2hlY2tlZCgneWVzJywgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJib29sZWFuQ2hhbmdlKCRldmVudCwgJ3llcycsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgWWVzXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNCb29sZWFuQ2hlY2tlZCgnbm8nLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImJvb2xlYW5DaGFuZ2UoJGV2ZW50LCAnbm8nLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIE5vXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIFRleHQgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdwbGFpblRleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImRhdGFHcmlkQ29sdW1uc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgTnVtYmVyIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJkYXRhR3JpZENvbHVtbnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgW21pbl09XCJjb2x1bW4ubnVtYmVyUHJvcGVydGllLnN0YXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImNvbHVtbi5udW1iZXJQcm9wZXJ0aWUuZW5kXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wxIGZvcm0tY29udHJvbC1zb2xpZFwiIHR5cGU9XCJudW1iZXJcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgRGF0ZSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZGlzcC1mbGV4XCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wxXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgW21heF09XCJnZXRNYXhkYXRlKHF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21pbl09XCJnZXRNaW5kYXRlKHF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhR3JpZENvbHVtbnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3QtYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LXByaW1hcnkgZm9udC13ZWlnaHQtYm9sZFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxBZGRvclVwZGF0ZShnZXRRdWVzdGlvbihxdWVzdGlvbikpXCI+XHJcbiAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBmb250LXdlaWdodC1ib2xkXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVEYXRhR3JpZENvbHVtbihnZXRRdWVzdGlvbihxdWVzdGlvbikpXCI+QWRkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC0xMiBjb2wtc20tMTIgY29sLWxnLTEyIHAtMCBzdWJtaXQtcGFkXCJcclxuICAgICAgICAqbmdJZj1cInR5cGUgIT09ICdxbnJMaW5rUHJvdmlkZXInICYmIHNvdXJjZSE9PSdwcm9MZWFkJyAmJiAodXVpZCB8fCBzb3VyY2UgPT09ICdjdXN0b21lci1kZXRhaWxzJyB8fCBzb3VyY2UgPT09ICdwcm9Eb25hdGlvbicpICYmICFkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJub3JtYWwtYnRuXCIgbWF0LWZsYXQtYnV0dG9uIFtjbGFzcy5zcGlubmVyXT1cImJ1dHRvbkRpc2FibGVcIlxyXG4gICAgICAgICAgW2NsYXNzLnNwaW5uZXItZGFya2VyLXN1Y2Nlc3NdPVwiYnV0dG9uRGlzYWJsZVwiIFtjbGFzcy5zcGlubmVyLWNlbnRlcl09XCJidXR0b25EaXNhYmxlXCJcclxuICAgICAgICAgIChjbGljayk9XCIhYnV0dG9uRGlzYWJsZSAmJiBvblN1Ym1pdCgnc3VibWl0JylcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZVwiXHJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZVwiPnt7KHR5cGUgPT0gJ3Fuci1saW5rJykgPyAnU3VibWl0JyA6ICdVcGRhdGUnfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG48ZGl2ICNsaWdodEdhbGxlcnlDb250YWluZXIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvZGl2PlxyXG48c2VjdGlvbiBjbGFzcz1cImNvbnMtaW5ib3ggbm8tcGFkZGluZy1zbWFsbFwiICpuZ0lmPVwic2hvd3NlcnZpY2VcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGNvbnN1bWVyLWRhc2hob21lXCIgKm5nSWY9XCIhdHlwZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgdGl0bGUtZ2Igcm91bmRlZC0wXCIgKm5nSWY9XCJ1dWlkXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm10LTIgYm9sZFwiPnt7cXVlc3Rpb25uYWlyZV9oZWFkaW5nIHwgY2FwaXRhbGl6ZUZpcnN0fX0gPGEgY2xhc3M9XCJwdWxsLWxlZnQgbWUtNCBiYWNrLWJ0blwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnRcIj48L2k+PC9hPjwvaDU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8YXBwLWNvbW1vbi1pbm5lcmxvYWRpbmctc3Bpbm5lciAqbmdJZj1cImxvYWRpbmdcIj48L2FwcC1jb21tb24taW5uZXJsb2FkaW5nLXNwaW5uZXI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi1mbHVpZCBwdWxsLXJpZ2h0IG1lLTIgbWItNFwiXHJcbiAgICAqbmdJZj1cInR5cGUgIT09ICdxbnJMaW5rUHJvdmlkZXInICYmICFidXR0b25EaXNhYmxlICYmIHdhaXRsaXN0U3RhdHVzXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwibm9ybWFsLWJ0biBlZGl0XCIgbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJlZGl0UW5yKClcIj5FZGl0PC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi1mbHVpZCB3aWR0aC0xMDBcIiBbY2xhc3MucW5yRGlzYWJsZVN0YXRlXT1cImRpc2FibGVJbnB1dCgpXCJcclxuICAgIFtjbGFzcy5wLTBdPVwidXVpZCAmJiAoc291cmNlID09PSAnY29uc0NoZWNraW4nIHx8IHNvdXJjZSA9PT0gJ2NvbnNBcHB0JyB8fCBzb3VyY2UgPT09ICdjb25zRG9uYXRpb25EZXRhaWxzJyApXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhsLTEyIGZvcmNlX2NlbnRlciBwLTBcIiBbY2xhc3MucC0wXT1cInV1aWRcIlxyXG4gICAgICBbY2xhc3Mubm8tcGFkZGluZy1zbWFsbF09XCJzb3VyY2UgJiYgc291cmNlPT0naXZyJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiICpuZ0Zvcj1cImxldCBxbnIgb2YgZ3JvdXBlZFFuciB8IGtleXZhbHVlXCIgW2NsYXNzLnNlY3Rpb24tc2hhZG93XT1cImdldFNlY3Rpb25Db3VudCgpID4gMVwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW1BcnJheS5sZW5ndGggPT0gMCBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWduLTAgYm9yZGVyLWRhc2hlZCB0ZXh0LWNlbnRlclwiICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBxbnIudmFsdWVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicW5yLXNlY3Rpb25cIiAqbmdJZj1cImdldFNlY3Rpb25Db3VudCgpID4gMVwiPlxyXG4gICAgICAgICAgICAgICAge3tnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24uc2VjdGlvbk5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC0xMiBxdWVzdCBwb2ludGVyLWN1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0RhdGFHcmlkQWRkU2VjdGlvbm4oZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnF1ZXN0aW9uLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7e2NkblBhdGh9fWFzc2V0cy9pbWFnZXMvc2VydmljZS1vcHRpb25zLnN2Z1wiIGFsdD1cIlNlcnZpY2UgT3B0aW9uc1wiIGNsYXNzPVwiaW1nLWZsdWlkIHBiLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMzAwXCIgaGVpZ2h0PVwiMzAwXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm8tb25seVwiICpuZ0lmPVwic2hvd1Byb3ZpZGVyVGV4dChnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24pXCI+Rm9yIFByb3ZpZGVyczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWRcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbi5tYW5kYXRvcnlcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC13ZWlnaHQtYm9sZFwiPlBsZWFzZSBDaG9vc2UgeW91ciBQZXQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBmb250LXdlaWdodC1ib2xkXCI+Q29udGludWU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLTEyIGNvbC1zbS0xMiBtYi00IHAtMFwiICpuZ0lmPVwic2hvd0l0ZW1cIj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvcmRlclwiICpuZ0Zvcj1cIiBsZXQgaXRlbXMgb2YgaXRlbUFycmF5XCI+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW1zLml0ZW19fTxicj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYm9yZGVyLWFwcGx5IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZGVjcmVtZW50KGl0ZW1zKTtcIiBjbGFzcz1cInBvaW50ZXItY3Vyc29yIHF1YW50aXR5IHF1YW50aXR5LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtMTBcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgcG9pbnRlci1jdXJzb3JcIj48c3BhbiBjbGFzcz1cInF1YW50aXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbXMgJiYgaXRlbXMuY29sdW1uSXRlbSAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdCAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0gJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtbiAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0ucXVhbnRpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaW5jcmVtZW50KGl0ZW1zKTtcIiBjbGFzcz1cInBvaW50ZXItY3Vyc29yIHF1YW50aXR5IHF1YW50aXR5LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtMTBcIj4rPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcHJpbWFyeVwiPjxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtaW5yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7aXRlbXMucHJpY2UgKiBnZXRJdGVtUXVhbnRpdHkoaXRlbXMpfX0vLVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dJdGVtICYmaXRlbUFycmF5Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxbnIgb2YgZ3JvdXBlZFFuciB8IGtleXZhbHVlXCIgW2NsYXNzLnNlY3Rpb24tc2hhZG93XT1cImdldFNlY3Rpb25Db3VudCgpID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcW5yLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC0xMiBxdWVzdCBwb2ludGVyLWN1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEYXRhR3JpZEFkZFNlY3Rpb25uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbiwgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgZm9udC13ZWlnaHQtYm9sZFwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1cyB0ZXh0LXdoaXRlXCI+PC9pPkFkZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+Il19
|
|
1412
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9qY29uc3VtZXItc2hhcmVkL3NyYy9saWIvcXVlc3Rpb25haXJlL2VkaXQvcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFTakgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFLeEYsT0FBTyxZQUFZLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sTUFBTSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTS9DLE1BQU0sT0FBTyxzQkFBc0I7SUF5RXZCO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7SUFDQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQW5GRCxpQkFBaUIsQ0FBTTtJQUN2QixNQUFNLENBQU07SUFDWixTQUFTLENBQU07SUFDZixlQUFlLENBQU07SUFDckIsZUFBZSxDQUFNO0lBQ3JCLElBQUksQ0FBTTtJQUNWLElBQUksQ0FBTTtJQUNWLGNBQWMsQ0FBTTtJQUNwQixXQUFXLENBQU07SUFDakIsZUFBZSxDQUFNO0lBQ3JCLE9BQU8sQ0FBTTtJQUNiLElBQUksQ0FBTSxDQUFDLHlDQUF5QztJQUNuRCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUN0QyxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUN6QyxRQUFRLENBQU07SUFDZCxXQUFXLENBQU07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QUNWLFNBQVMsRUFBRSxJQUFJO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7UUFFSCxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7d0dBdHhDVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixvdUJDdEJuQyxvaXhCQStXVTs7NEZEelZHLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxtQkFBbUI7c1pBS3BCLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBbUJrQixLQUFLO3NCQUE1QixTQUFTO3VCQUFDLFdBQVc7Z0JBb0N0QixxQkFBcUI7c0JBRHBCLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbmFpcmVTZXJ2aWNlIH0gZnJvbSAnLi4vcXVlc3Rpb25haXJlLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9maWxlLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hvd3VwbG9hZGZpbGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zaG93dXBsb2FkZmlsZS9zaG93dXBsb2FkZmlsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEYXRlVGltZVByb2Nlc3NvciB9IGZyb20gJy4uLy4uL2NhbGVuZGFyL2RhdGUtdGltZS9kYXRldGltZS1wcm9jZXNzb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IEVycm9yTWVzc2FnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL2Vycm9yLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmRQcm9jZXNzb3IgfSBmcm9tICcuLi8uLi93b3JkLXByb2Nlc3Nvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC5zZXJ2aWNlJztcclxuaW1wb3J0IGxpZ2h0Z2FsbGVyeSBmcm9tICdsaWdodGdhbGxlcnknO1xyXG5pbXBvcnQgbGdab29tIGZyb20gJ2xpZ2h0Z2FsbGVyeS9wbHVnaW5zL3pvb20nO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1xdWVzdGlvbm5haXJlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgcXVlc3Rpb25uYWlyZUxpc3Q6IGFueTtcclxuICBASW5wdXQoKSBzb3VyY2U6IGFueTtcclxuICBASW5wdXQoKSBhY2NvdW50SWQ6IGFueTtcclxuICBASW5wdXQoKSBxdWVzdGlvbkFuc3dlcnM6IGFueTtcclxuICBASW5wdXQoKSBjdXN0b21lckRldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSB1dWlkOiBhbnk7XHJcbiAgQElucHV0KCkgdHlwZTogYW55O1xyXG4gIEBJbnB1dCgpIHdhaXRsaXN0U3RhdHVzOiBhbnk7XHJcbiAgQElucHV0KCkgb3JkZXJTdGF0dXM6IGFueTtcclxuICBASW5wdXQoKSBkb25hdGlvbkRldGFpbHM6IGFueTtcclxuICBASW5wdXQoKSBzZXJ2aWNlOiBhbnk7XHJcbiAgQElucHV0KCkgbW9kZTogYW55OyAvLyBBZGRlZCBieSBtYW5pIHRvIGNoZWNrIHRoZSBmaWxlIHVwbG9hZFxyXG4gIEBPdXRwdXQoKSBmaWxlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSByZXR1cm5BbnN3ZXJzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQElucHV0KCkgdGVtcFR5cGU6IGFueTtcclxuICBASW5wdXQoKSBib29raW5nVHlwZTogYW55O1xyXG4gIGFuc3dlcnM6IGFueSA9IHt9O1xyXG4gIHNob3dEYXRhR3JpZDogYW55ID0ge307XHJcbiAgc2VsZWN0ZWRNZXNzYWdlOiBhbnkgPSBbXTtcclxuICBhcGlFcnJvcjogYW55ID0gW107XHJcbiAgcGFyYW1zOiBhbnk7XHJcbiAgZmlsZXVwbG9hZHByZUFuc3dlcnM6IGFueSA9IHt9O1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICBidXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgcXVlc3Rpb25zOiBhbnkgPSBbXTtcclxuICBzZWxlY3RlZERvY3M6IGFueSA9IFtdO1xyXG4gIGRvY3VtZW50c1RvVXBsb2FkOiBhbnkgPSBbXTtcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICB1cGxvYWRGaWxlc1RlbXA6IGFueSA9IFtdO1xyXG4gIGZpbGVzdG9VcGxvYWQ6IGFueSA9IFtdO1xyXG4gIGNoYW5nZUhhcHBlbmVkID0gZmFsc2U7XHJcbiAgdXBsb2FkZWRGaWxlczogYW55ID0gW107XHJcbiAgdXBsb2FkZWRJbWFnZXM6IGFueSA9IFtdO1xyXG4gIGJvb2tpbmdEZXRhaWxzOiBhbnkgPSBbXTtcclxuICBAVmlld0NoaWxkKCdsb2dvZmlsZTEnKSBmaWxlMiE6IEVsZW1lbnRSZWY7XHJcbiAgaW1hZ2VfbGlzdF9wb3B1cDtcclxuICBxdWVzdGlvbm5haXJlX2hlYWRpbmcgPSAnJztcclxuICBjdXN0b21lcl9sYWJlbCA9ICcnO1xyXG4gIGVkaXRRdWVzdGlvbm5haXJlID0gZmFsc2U7XHJcbiAgYXVkaW9WaWRlb0ZpbGVzOiBhbnkgPSBbXTtcclxuICBncm91cGVkUW5yOiBhbnkgPSBbXTtcclxuICBkYXRhR3JpZENvbHVtbnM6IGFueSA9IHt9O1xyXG4gIGRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3Q6IGFueSA9IFtdO1xyXG4gIHVwZGF0ZWRHcmlkSW5kZXg6IGFueSA9IHt9O1xyXG4gIG5ld1RpbWVEYXRlRm9ybWF0ID0gJyc7XHJcbiAgcW5yU3RhdHVzID0gJyc7XHJcbiAgY29tbWVudHM6IGFueSA9IHt9O1xyXG4gIHRkYXkgPSBuZXcgRGF0ZSgpO1xyXG4gIG1pbmRheSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEpO1xyXG4gIGRhdGFHcmlkTGlzdENvbHVtbnM6IGFueSA9IHt9O1xyXG4gIHNob3dxbnIhOiBib29sZWFuO1xyXG4gIGl0ZW06IGFueTtcclxuICBzaG93SXRlbSA9IGZhbHNlO1xyXG4gIHRvdGFsUHJpY2U6IGFueTtcclxuICBpdGVtTGVuZ3RoOiBhbnk7XHJcbiAgaXRlbUFycmF5OiBhbnkgPSBbXTtcclxuICBkYXRhR3JpZExpc3Q6IGFueSA9IFtdO1xyXG4gIGlkOiBudW1iZXIgPSAwO1xyXG4gIHBvc3RfRGF0YTogYW55O1xyXG4gIGRnTGlzdDogYW55O1xyXG4gIHNlcXVlbmNlSWQ6IGFueTtcclxuICBmaW5hbE9iamVjdExpc3Q6IGFueSA9IFtdO1xyXG4gIHNob3dzZXJ2aWNlID0gZmFsc2U7XHJcbiAgcXVlc1N0b3JlOiBhbnk7XHJcbiAgYWxsTGlzdDogc3RyaW5nID0gJyc7XHJcbiAgcG9wU2VhcmNoZXM6IGFueTtcclxuICBzZXJ2aWNlVG90YWxQcmljZTogbnVtYmVyID0gMDtcclxuICBlZGl0YWJsZUl0ZW06IGFueTtcclxuICBjZG5QYXRoOiBzdHJpbmc9Jyc7XHJcbiAgQFZpZXdDaGlsZCgnbGlnaHRHYWxsZXJ5Q29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgbGlnaHRHYWxsZXJ5Q29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgd29yZFByb2Nlc3NvcjogV29yZFByb2Nlc3NvcixcclxuICAgIHByaXZhdGUgbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlUHJvY2Vzc29yOiBEYXRlVGltZVByb2Nlc3NvcixcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBxdWVzdGlvbmFpcmVTZXJ2aWNlOiBRdWVzdGlvbmFpcmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBlcnJvclNlcnZpY2U6IEVycm9yTWVzc2FnaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbikge1xyXG4gICAgICB0aGlzLmNkblBhdGggPSB0aGlzLnNoYXJlZFNlcnZpY2UuZ2V0Q0ROUGF0aCgpO1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRfcm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHFwYXJhbXMgPT4ge1xyXG4gICAgICB0aGlzLnBhcmFtcyA9IHFwYXJhbXM7XHJcbiAgICAgIGlmICh0aGlzLnBhcmFtcy50eXBlKSB7XHJcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnBhcmFtcy50eXBlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc291cmNlKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnBhcmFtcy5wcm92aWRlcklkKSB7XHJcbiAgICAgICAgdGhpcy5hY2NvdW50SWQgPSB0aGlzLnBhcmFtcy5wcm92aWRlcklkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnBhcmFtcy51dWlkKSB7XHJcbiAgICAgICAgdGhpcy51dWlkID0gdGhpcy5wYXJhbXMudXVpZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMucXVlc3Rpb25haXJlU2VydmljZS5nZXRNZXNzYWdlKCkuc3Vic2NyaWJlKG1lc3NhZ2UgPT4ge1xyXG4gICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ3FuclZhbGlkYXRlRXJyb3InOlxyXG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0ZUVycm9yKG1lc3NhZ2UudmFsdWUpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2VycyAmJiB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5maWxlc3RvVXBsb2FkICYmIHRoaXMuc291cmNlID09PSAncHJvTGVhZCcpIHtcclxuICAgICAgdGhpcy5maWxlc3RvVXBsb2FkID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXN0b1VwbG9hZDtcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJTZXJ2aWNlIERldGFpbHM6XCIsIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QpO1xyXG4gICAgY29uc29sZS5sb2coXCJTZXJ2aWNlIERldGFpbHM6XCIsIHRoaXMuc2VydmljZSk7XHJcbiAgICBpZiAodGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ2l0ZW1BcnJheScpKSB7XHJcbiAgICAgIHRoaXMuaXRlbUFycmF5ID0gdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ2l0ZW1BcnJheScpO1xyXG4gICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcclxuICAgICAgICB0aGlzLnNob3dJdGVtID0gdHJ1ZTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInRoaXMuaXRlbUFycmF5XCIsIHRoaXMuaXRlbUFycmF5KVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXN0b21lcl9sYWJlbCA9IHRoaXMud29yZFByb2Nlc3Nvci5nZXRUZXJtaW5vbG9neVRlcm0oJ2N1c3RvbWVyJyk7XHJcblxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QpIHtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5zb3VyY2UpXHJcbiAgICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2N1c3RvbWVyLWNyZWF0ZScgfHwgdGhpcy5zb3VyY2UgPT09ICdvbmV0aW1lJykge1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscyAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzWzBdLnF1ZXN0aW9ucztcclxuICAgICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgICAgIC8vIHRoaXMuZ2V0QW5zd2Vycyh0aGlzLnF1ZXN0aW9ucywgJ2dldCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5jdXN0b21lckRldGFpbHMgJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0gJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZSAmJiB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlLnF1ZXN0aW9uQW5zd2Vycykge1xyXG4gICAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMuY3VzdG9tZXJEZXRhaWxzWzBdLnF1ZXN0aW9ubmFpcmUucXVlc3Rpb25BbnN3ZXJzLCAnZ2V0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAncW5yRGV0YWlscycpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25zO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3NlcnZpY2VPcHRpb25BcHB0Jykge1xyXG4gICAgICAgIHRoaXMuc2hvd3NlcnZpY2UgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAncW5ycGFwZXInKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMudXVpZCAmJiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAncW5yVmlldycgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ2NvbmR1bWVyT3JkZXInICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QubGFiZWxzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscztcclxuICAgICAgICB0aGlzLmdyb3VwUXVlc3Rpb25zQnlTZWN0aW9uKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09ICdpdnInICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QgJiYgdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5sYWJlbHMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9ucyA9IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ubGFiZWxzO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUXVlc3Rpb25zOlwiLCB0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnY3VzdG9tZXItZGV0YWlscycgJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0gJiYgdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZSkge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0ID0gdGhpcy5jdXN0b21lckRldGFpbHNbMF0ucXVlc3Rpb25uYWlyZTtcclxuICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLmN1c3RvbWVyRGV0YWlsc1swXS5xdWVzdGlvbm5haXJlLnF1ZXN0aW9uQW5zd2VycztcclxuICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbnMsICdnZXQnKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycykge1xyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXMpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZSA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmZpbGVzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5hdWRpb1ZpZGVvKSB7XHJcbiAgICAgICAgdGhpcy5hdWRpb1ZpZGVvRmlsZXMgPSB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5hdWRpb1ZpZGVvO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5maWxlc3RvVXBsb2FkKSB7XHJcbiAgICAgICAgdGhpcy5maWxlc3RvVXBsb2FkID0gdGhpcy5xdWVzdGlvbkFuc3dlcnMuZmlsZXN0b1VwbG9hZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkFuc3dlcnMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdCkge1xyXG4gICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdCA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3Q7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmNvbW1lbnRzKSB7XHJcbiAgICAgICAgdGhpcy5jb21tZW50cyA9IHRoaXMucXVlc3Rpb25BbnN3ZXJzLmNvbW1lbnRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQW5zd2Vycy5hbnN3ZXJzKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25BbnN3ZXJzLmFuc3dlcnMuYW5zd2VyTGluZSwgJ2luaXQnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT0gJ2l2cicpIHtcclxuICAgICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbkFuc3dlcnMsICdnZXQnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZG9uYXRpb25EZXRhaWxzICYmIHRoaXMuZG9uYXRpb25EZXRhaWxzLnF1ZXN0aW9ubmFpcmUpIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlTGlzdCA9IHRoaXMuZG9uYXRpb25EZXRhaWxzLnF1ZXN0aW9ubmFpcmU7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbkFuc3dlcnM7XHJcbiAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25zICYmIHRoaXMucXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmdldEFuc3dlcnModGhpcy5xdWVzdGlvbnMsICdnZXQnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnV1aWQpIHtcclxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25uYWlyZUxpc3QucXVlc3Rpb25BbnN3ZXJzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LnF1ZXN0aW9uQW5zd2VycztcclxuICAgICAgICB0aGlzLnFuclN0YXR1cyA9ICdzdWJtaXR0ZWQnO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmxhYmVscykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5sYWJlbHM7XHJcbiAgICAgICAgdGhpcy5xbnJTdGF0dXMgPSAncmVsZWFzZWQnO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdICYmIHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ubGFiZWxzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMgPSB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmxhYmVscztcclxuICAgICAgICB0aGlzLnFuclN0YXR1cyA9ICdyZWxlYXNlZCc7XHJcbiAgICAgICAgdGhpcy5ncm91cFF1ZXN0aW9uc0J5U2VjdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9ucyAmJiB0aGlzLnF1ZXN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5nZXRBbnN3ZXJzKHRoaXMucXVlc3Rpb25zLCAnZ2V0Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpc2FibGVGaWVsZCgpXHJcbiAgfVxyXG5cclxuICAvL2Rpc2FibGUgZmllbGRcclxuICBkaXNhYmxlRmllbGQoKSB7XHJcbiAgICBpZiAodGhpcy50ZW1wVHlwZSAmJiAodGhpcy50ZW1wVHlwZSA9PT0gJ0xvYW4gU2FuY3Rpb24nIHx8IHRoaXMudGVtcFR5cGUgPT09ICdSZWplY3RlZCcpKSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IHRydWU7XHJcbiAgICAgIC8vIHRoaXMuZGlzYWJsZUlucHV0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vICouY29tcG9uZW50LnRzXHJcbiAgYXNJc09yZGVyKGE6IGFueSwgYjogYW55KSB7XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcbiAgZ3JvdXBRdWVzdGlvbnNCeVNlY3Rpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1jcmVhdGUnIHx8IHRoaXMuc291cmNlID09PSAncW5yRGV0YWlscycgfHwgdGhpcy5zb3VyY2UgPT09ICdvbmV0aW1lJykge1xyXG4gICAgICB0aGlzLmdyb3VwZWRRbnIgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ3JvdXBCeSh0aGlzLnF1ZXN0aW9ucywgJ3NlY3Rpb25OYW1lJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3Byb0xlYWQnKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZFFuciA9IHRoaXMucXVlc3Rpb25zLnJlZHVjZShmdW5jdGlvbiAocnY6IGFueSwgeDogYW55KSB7XHJcbiAgICAgICAgKHJ2W3gucXVlc3Rpb25bJ3NlcXVuY2VJZCddXSA9IHJ2W3gucXVlc3Rpb25bJ3NlcXVuY2VJZCddXSB8fCBbXSkucHVzaCh4KTtcclxuICAgICAgICByZXR1cm4gcnY7XHJcbiAgICAgIH0sIHt9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmdyb3VwZWRRbnIgPSB0aGlzLnF1ZXN0aW9ucy5yZWR1Y2UoZnVuY3Rpb24gKHJ2OiBhbnksIHg6IGFueSkge1xyXG4gICAgICAgIChydlt4LnF1ZXN0aW9uWydzZWN0aW9uT3JkZXInXV0gPSBydlt4LnF1ZXN0aW9uWydzZWN0aW9uT3JkZXInXV0gfHwgW10pLnB1c2goeCk7XHJcbiAgICAgICAgcmV0dXJuIHJ2O1xyXG4gICAgICB9LCB7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNldFZhbGlkYXRlRXJyb3IoZXJyb3JzOiBhbnkpIHtcclxuICAgIHRoaXMuYXBpRXJyb3IgPSBbXTtcclxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKGxldCBlcnJvciBvZiBlcnJvcnMpIHtcclxuICAgICAgICB0aGlzLmFwaUVycm9yW2Vycm9yLnF1ZXN0aW9uRmllbGRdID0gW107XHJcbiAgICAgICAgdGhpcy5hcGlFcnJvcltlcnJvci5xdWVzdGlvbkZpZWxkXS5wdXNoKGVycm9yLmVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0QW5zd2VycyhhbnN3ZXJEYXRhOiBhbnksIHR5cGU/OiBhbnkpIHtcclxuICAgIHRoaXMuYW5zd2VycyA9IG5ldyBPYmplY3QoKTtcclxuICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zID0ge307XHJcbiAgICBpZiAodHlwZSA9PT0gJ2dldCcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UgPSBbXTtcclxuICAgICAgdGhpcy51cGxvYWRlZEltYWdlcyA9IFtdO1xyXG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbXTtcclxuICAgICAgZm9yIChsZXQgYW5zdyBvZiBhbnN3ZXJEYXRhKSB7XHJcblxyXG4gICAgICAgIGlmIChhbnN3LmFuc3dlckxpbmUpIHtcclxuICAgICAgICAgIGlmIChhbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgPT09ICdmaWxlVXBsb2FkJykge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlID09PSAncHJvTGVhZCcpIHtcclxuICAgICAgICAgICAgICBpZiAoYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdICYmIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uYWN0aW9uID0gJ2FkZCc7XHJcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5zdGF0dXMgPSAnQ09NUExFVEUnO1xyXG4gICAgICAgICAgICAgICAgICBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uczNwYXRoID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnMzcGF0aDtcclxuICAgICAgICAgICAgICAgICAgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLnVpZCA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS51aWQ7XHJcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5kcml2ZUlkID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmRyaXZlSWQ7XHJcbiAgICAgICAgICAgICAgICAgIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS51cmwgPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0ua2V5TmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1thbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChhbnN3LmFuc3dlckxpbmUuYW5zd2VyICYmIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXSAmJiBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2dldCcpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlcy5wdXNoKGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdID0ge307XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwbG9hZGVkRmlsZXNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudHNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZSArICc9JyArIGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jb21tZW50cztcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRlZEZpbGVzW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSA9IGFuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UucHVzaChhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0pO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmlsZXN0b1VwbG9hZFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5maWxlc3RvVXBsb2FkW2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdW2Fuc3cuYW5zd2VyTGluZS5hbnN3ZXJbYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlXVtpXS5jYXB0aW9uXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXVthbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV1baV0uY2FwdGlvbl0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV1bYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldLmNhcHRpb25dID0gYW5zdy5hbnN3ZXJMaW5lLmFuc3dlclthbnN3LnF1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoYW5zdy5xdWVzdGlvbi5maWVsZERhdGFUeXBlID09PSAnZGF0YUdyaWQnKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV0pIHtcclxuICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IFtdO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LmRhdGFHcmlkQ29sdW1uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zW2kgKyAxXSA9IHJvdy5kYXRhR3JpZENvbHVtbltpXS5jb2x1bW5bT2JqZWN0LmtleXMocm93LmRhdGFHcmlkQ29sdW1uW2ldLmNvbHVtbilbMF1dO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2Fuc3cuYW5zd2VyTGluZS5sYWJlbE5hbWVdID0gW107XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFthbnN3LmFuc3dlckxpbmUubGFiZWxOYW1lXS5wdXNoKGNvbHVtbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmFuc3dlcnNbYW5zdy5hbnN3ZXJMaW5lLmxhYmVsTmFtZV0gPSBhbnN3LmFuc3dlckxpbmUuYW5zd2VyW2Fuc3cucXVlc3Rpb24uZmllbGREYXRhVHlwZV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBhbnN3IG9mIGFuc3dlckRhdGEpIHtcclxuICAgICAgICBpZiAoYW5zdy5hbnN3ZXJbT2JqZWN0LmtleXMoYW5zdy5hbnN3ZXIpWzBdXSkge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJzW2Fuc3cubGFiZWxOYW1lXSA9IGFuc3cuYW5zd2VyW09iamVjdC5rZXlzKGFuc3cuYW5zd2VyKVswXV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZSA9PT0gJ2dldCcpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy51cGxvYWRlZEZpbGVzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XSA9IFtdO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMudXBsb2FkZWRGaWxlc1trZXldKS5mb3JFYWNoKGtleTEgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMudXBsb2FkZWRGaWxlc1trZXldW2tleTFdKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0eXBlID0gdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0udHlwZS5zcGxpdCgnLycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVbMF0gIT09ICdhdWRpbycgJiYgdHlwZVswXSAhPT0gJ3ZpZGVvJyB8fCAoKHR5cGVbMF0gPT09ICdhdWRpbycgfHwgdHlwZVswXSA9PT0gJ3ZpZGVvJykgJiYgdGhpcy51cGxvYWRlZEZpbGVzW2tleV1ba2V5MV0uc3RhdHVzID09PSAnQ09NUExFVEUnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0ucHVzaChrZXkxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldKS5mb3JFYWNoKGtleTEgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRGaWxlc1RlbXBba2V5XSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXNUZW1wW2tleV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVzVGVtcFtrZXldLnB1c2goa2V5MSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5pdCcpO1xyXG4gIH1cclxuICBmaWxlc1NlbGVjdGVkKGV2ZW50OiBhbnksIHF1ZXN0aW9uOiBhbnksIGRvY3VtZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0LmZpbGVzO1xyXG4gICAgaWYgKGlucHV0KSB7XHJcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBpbnB1dCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVJbnB1dCA9IHtcclxuICAgICAgICAgIGNhcHRpb246IGRvY3VtZW50LFxyXG4gICAgICAgICAgZmlsZTogZmlsZSxcclxuICAgICAgICAgIGxhYmVsTmFtZTogcXVlc3Rpb24ubGFiZWxOYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsZUNoYW5nZWQuZW1pdChmaWxlSW5wdXQpO1xyXG4gICAgICAgIGxldCB0eXBlID0gZmlsZS50eXBlLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgIHRoaXMuYXBpRXJyb3JbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IFtdO1xyXG4gICAgICAgIGlmICghdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0pIHtcclxuICAgICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICAgICAgbGV0IGluZGV4O1xyXG4gICAgICAgICAgaWYgKHR5cGVbMF0gPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZVswXSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuc2VsZWN0ZWRNZXNzYWdlLmluZGV4T2YodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXMuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZVswXSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlWzBdID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF07XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXVtpbmRleF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSA9IGZpbGU7XHJcbiAgICAgICAgaWYgKHR5cGVbMF0gPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZVswXSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UucHVzaChmaWxlKTtcclxuICAgICAgICAgIGNvbnN0IGluZHggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKGZpbGUpO1xyXG4gICAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2VbaW5keF1bJ3BhdGgnXSA9IGUudGFyZ2V0WydyZXN1bHQnXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzLnB1c2goZmlsZSk7XHJcbiAgICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXMuaW5kZXhPZihmaWxlKTtcclxuICAgICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzW2luZHhdWydwYXRoJ10gPSBlLnRhcmdldFsncmVzdWx0J107XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWxlMiAmJiB0aGlzLmZpbGUyLm5hdGl2ZUVsZW1lbnQudmFsdWUpIHtcclxuICAgICAgICB0aGlzLmZpbGUyLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjaGFuZ2VJbWFnZVNlbGVjdGVkKHF1ZXN0aW9uOiBhbnksIGRvY3VtZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgbGV0IHR5cGUgPSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0udHlwZS5zcGxpdCgnLycpO1xyXG4gICAgICB0eXBlID0gdHlwZVswXTtcclxuICAgICAgbGV0IGluZGV4O1xyXG4gICAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgaW5kZXggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5kZXggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIGlmICh0eXBlID09PSAnYXBwbGljYXRpb24nIHx8IHR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXVkaW9WaWRlb0ZpbGVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF07XHJcbiAgICAgICAgdGhpcy5jb21tZW50c1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBkb2N1bWVudF0gPSAnJztcclxuICAgICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRBbnN3ZXIgPSB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5maWx0ZXIoKGFuc3dlcjogYW55KSA9PiBhbnN3ZXIuY2FwdGlvbiA9PT0gZG9jdW1lbnQpO1xyXG4gICAgICAgICAgaWYgKGZpbHRlcmVkQW5zd2VyWzBdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZihmaWx0ZXJlZEFuc3dlclswXSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXSkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy51cGxvYWRlZEZpbGVzW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy51cGxvYWRlZEltYWdlcy5pbmRleE9mKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0gPSAncmVtb3ZlJztcclxuICAgICAgICB0aGlzLmNvbW1lbnRzW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGRvY3VtZW50XSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1xyXG4gIH1cclxuICBpc051bWVyaWMoZXZ0OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbW1vblNlcnZpY2UuaXNOdW1lcmljKGV2dCk7XHJcbiAgfVxyXG4gIG9uU3VibWl0KGtleXR5cGU/OiBhbnkpIHtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZpbGVzdG9VcGxvYWQpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgaWYgKCF0aGlzLmFuc3dlcnNba2V5XSkge1xyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1trZXldID0gW107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWxlc3RvVXBsb2FkW2tleV0pLmZvckVhY2goa2V5MSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0pIHtcclxuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlWzBdO1xyXG4gICAgICAgICAgICBsZXQgaW5keDtcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdhcHBsaWNhdGlvbicgfHwgdHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgICAgICAgICAgIGluZHggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbmR4ID0gdGhpcy5hdWRpb1ZpZGVvRmlsZXMuaW5kZXhPZih0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHN0YXR1cyA9ICdhZGQnO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXSkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gJ3VwZGF0ZSc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSAmJiB0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFuc3dlciA9IHRoaXMuYW5zd2Vyc1trZXldLmZpbHRlcigoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5jYXB0aW9uID09PSBrZXkxKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJlZEFuc3dlclswXSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuYW5zd2Vyc1trZXldLmluZGV4T2YoZmlsdGVyZWRBbnN3ZXJbMF0pO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnR5cGUuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICB0eXBlID0gdHlwZVswXTtcclxuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2FwcGxpY2F0aW9uJyB8fCB0eXBlID09PSAnaW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5wdXNoKHsgY2FwdGlvbjoga2V5MSwgYWN0aW9uOiBzdGF0dXMsIG1pbWVUeXBlOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS50eXBlLCB1cmw6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLm5hbWUsIHNpemU6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnNpemUsIGNvbW1lbnRzOiB0aGlzLmNvbW1lbnRzW2tleSArICc9JyArIGtleTFdLCBkcml2ZUlkOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5kcml2ZUlkLCB1aWQ6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnVpZCwgc3RhdHVzOiAnQ09NUExFVEUnIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuc3dlcnNba2V5XS5wdXNoKHsgY2FwdGlvbjoga2V5MSwgYWN0aW9uOiBzdGF0dXMsIG1pbWVUeXBlOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS50eXBlLCB1cmw6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLm5hbWUsIHNpemU6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnNpemUsIGNvbW1lbnRzOiB0aGlzLmNvbW1lbnRzW2tleSArICc9JyArIGtleTFdLCBkcml2ZUlkOiB0aGlzLmZpbGVzdG9VcGxvYWRba2V5XVtrZXkxXS5kcml2ZUlkLCB1aWQ6IHRoaXMuZmlsZXN0b1VwbG9hZFtrZXldW2tleTFdLnVpZCwgc3RhdHVzOiAnQ09NUExFVEUnIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldICYmIHRoaXMuYW5zd2Vyc1trZXldLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFuc3dlciA9IHRoaXMuYW5zd2Vyc1trZXldLmZpbHRlcigoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5jYXB0aW9uID09PSBrZXkxKTtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRBbnN3ZXJbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hbnN3ZXJzW2tleV0uaW5kZXhPZihmaWx0ZXJlZEFuc3dlclswXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYW5zd2Vyc1trZXldO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XSAmJiB0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5hbnN3ZXJzW2tleV07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHRoaXMudXBsb2FkZWRGaWxlcykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuYW5zd2Vyc1trZXldKSB7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJzW2tleV0gPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy51cGxvYWRlZEZpbGVzW2tleV0gJiYgT2JqZWN0LmtleXModGhpcy51cGxvYWRlZEZpbGVzW2tleV0pLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnVwbG9hZGVkRmlsZXNba2V5XSkuZm9yRWFjaChrZXkxID0+IHtcclxuICAgICAgICAgIGlmICgoIXRoaXMuZmlsZXN0b1VwbG9hZFtrZXldIHx8ICh0aGlzLmZpbGVzdG9VcGxvYWRba2V5XSAmJiAhdGhpcy5maWxlc3RvVXBsb2FkW2tleV1ba2V5MV0pKSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNba2V5XVtrZXkxXSA9PT0gJ3JlbW92ZScpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYW5zd2Vyc1trZXldICYmIHRoaXMuYW5zd2Vyc1trZXldLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFuc3dlciA9IHRoaXMuYW5zd2Vyc1trZXldLmZpbHRlcigoYW5zd2VyOiBhbnkpID0+IGFuc3dlci5jYXB0aW9uID09PSBrZXkxKTtcclxuICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRBbnN3ZXJbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hbnN3ZXJzW2tleV0uaW5kZXhPZihmaWx0ZXJlZEFuc3dlclswXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYW5zd2Vyc1trZXldLnB1c2goeyBjYXB0aW9uOiBrZXkxLCBhY3Rpb246ICdyZW1vdmUnIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLmFuc3dlcnNba2V5XS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGRlbGV0ZSB0aGlzLmFuc3dlcnNba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcclxuICAgIE9iamVjdC5rZXlzKHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdCkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICBsZXQgbmV3RmlsZWQ6IGFueSA9IHt9O1xyXG4gICAgICBsZXQgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9ucy5maWx0ZXIoKHF1ZXN0OiBhbnkpID0+IHRoaXMuZ2V0UXVlc3Rpb24ocXVlc3QpLmxhYmVsTmFtZSA9PT0ga2V5KTtcclxuICAgICAgcXVlc3Rpb24gPSBxdWVzdGlvblswXS5xdWVzdGlvbjtcclxuICAgICAgZm9yIChsZXQgZ3JpZEFuc3dlciBvZiB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3Rba2V5XSkge1xyXG4gICAgICAgIGxldCBjb2x1bW5EYXRhOiBhbnkgPSBbXTtcclxuICAgICAgICBPYmplY3Qua2V5cyhncmlkQW5zd2VyKS5mb3JFYWNoKGtleTEgPT4ge1xyXG4gICAgICAgICAgbGV0IG5ld1R5cGU6IGFueSA9IHt9O1xyXG4gICAgICAgICAgY29uc3QgY29sdW1uRGV0YWlscyA9IHF1ZXN0aW9uLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMuZmlsdGVyKChjbG1uOiBhbnkpID0+IGNsbW4ub3JkZXIgPT09IEpTT04ucGFyc2Uoa2V5MSkpO1xyXG4gICAgICAgICAgaWYgKGNvbHVtbkRldGFpbHNbMF0pIHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uVHlwZSA9IGNvbHVtbkRldGFpbHNbMF0uZGF0YVR5cGU7XHJcbiAgICAgICAgICAgIG5ld1R5cGVbY29sdW1uVHlwZV0gPSBncmlkQW5zd2VyW2tleTFdO1xyXG4gICAgICAgICAgICBjb2x1bW5EYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgIGNvbHVtbklkOiBjb2x1bW5EZXRhaWxzWzBdLmNvbHVtbklkLFxyXG4gICAgICAgICAgICAgIGNvbHVtbjogbmV3VHlwZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBsZXQgbmV3TWFwOiBhbnkgPSB7fTtcclxuICAgICAgICBuZXdNYXBbJ2RhdGFHcmlkQ29sdW1uJ10gPSBjb2x1bW5EYXRhO1xyXG4gICAgICAgIGlmICghbmV3RmlsZWRbcXVlc3Rpb24uZmllbGREYXRhVHlwZV0pIHtcclxuICAgICAgICAgIG5ld0ZpbGVkW3F1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld0ZpbGVkW3F1ZXN0aW9uLmZpZWxkRGF0YVR5cGVdLnB1c2gobmV3TWFwKTtcclxuICAgICAgfVxyXG4gICAgICBkYXRhLnB1c2goe1xyXG4gICAgICAgICdsYWJlbE5hbWUnOiBrZXksXHJcbiAgICAgICAgJ2Fuc3dlcic6IG5ld0ZpbGVkXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmtleXModGhpcy5hbnN3ZXJzKS5mb3JFYWNoKGtleSA9PiB7XHJcblxyXG4gICAgICB0aGlzLmFwaUVycm9yW2tleV0gPSBbXTtcclxuICAgICAgbGV0IG5ld01hcDogYW55ID0ge307XHJcbiAgICAgIGxldCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25zLmZpbHRlcigocXVlc3Q6IGFueSkgPT4gdGhpcy5nZXRRdWVzdGlvbihxdWVzdCkubGFiZWxOYW1lID09PSBrZXkpO1xyXG4gICAgICBpZiAodGhpcy5zb3VyY2UgPT09ICdjdXN0b21lci1jcmVhdGUnIHx8IHRoaXMuc291cmNlID09PSAncW5yRGV0YWlscycgfHwgdGhpcy5zb3VyY2UgPT09ICdvbmV0aW1lJykge1xyXG4gICAgICAgIHF1ZXN0aW9uID0gcXVlc3Rpb25bMF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcXVlc3Rpb24gPSBxdWVzdGlvblswXS5xdWVzdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW2tleV0gfHwgcXVlc3Rpb24uZmllbGREYXRhVHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgbGV0IGFuc3dlciA9IHRoaXMuYW5zd2Vyc1trZXldO1xyXG4gICAgICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgIGFuc3dlciA9IHRoaXMuZGF0ZVByb2Nlc3Nvci50cmFuc2Zvcm1Ub1lNREZvcm1hdChhbnN3ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdNYXBbcXVlc3Rpb24uZmllbGREYXRhVHlwZV0gPSBhbnN3ZXI7XHJcbiAgICAgICAgZGF0YS5wdXNoKHtcclxuICAgICAgICAgICdsYWJlbE5hbWUnOiBrZXksXHJcbiAgICAgICAgICAnYW5zd2VyJzogbmV3TWFwXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbmV3TWFwID0gJyc7XHJcbiAgICAgICAgLy8gZGF0YS5wdXNoKHtcclxuICAgICAgICAvLyAnbGFiZWxOYW1lJzoga2V5LFxyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGxldCBwb3N0RGF0YTtcclxuICAgIGlmICh0aGlzLnNvdXJjZSA9PT0gJ3FucnBhcGVyJykge1xyXG4gICAgICBwb3N0RGF0YSA9IHtcclxuICAgICAgICAncXVlc3Rpb25uYWlyZUlkJzogKHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0uaWQpID8gdGhpcy5xdWVzdGlvbm5haXJlTGlzdFswXS5pZCA6IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0ucXVlc3Rpb25uYWlyZUlkLFxyXG4gICAgICAgICdhbnN3ZXJMaW5lJzogZGF0YVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChrZXl0eXBlID09PSAnc2VydmljZU9wdGlvbicpIHtcclxuICAgICAgcG9zdERhdGEgPSB7XHJcbiAgICAgICAgJ3F1ZXN0aW9ubmFpcmVJZCc6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3QuaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLnF1ZXN0aW9ubmFpcmVJZCxcclxuICAgICAgICAnYW5zd2VyTGluZSc6IHRoaXMuZmluYWxPYmplY3RMaXN0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc291cmNlID09PSAnaXZyJyAmJiB0aGlzLnBhcmFtcy5jdXN0b21JZCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnZmZmZmZmZmZmZmZmZmZmZmZmZmZmJywgdGhpcy5xdWVzdGlvbm5haXJlTGlzdClcclxuICAgICAgcG9zdERhdGEgPSB7XHJcbiAgICAgICAgJ3F1ZXN0aW9ubmFpcmVJZCc6ICh0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLmlkKSA/IHRoaXMucXVlc3Rpb25uYWlyZUxpc3RbMF0uaWQgOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0WzBdLnF1ZXN0aW9ubmFpcmVJZCxcclxuICAgICAgICAnYW5zd2VyTGluZSc6IGRhdGFcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbm5haXJlTGlzdCcsIHRoaXMucXVlc3Rpb25uYWlyZUxpc3QpXHJcbiAgICAgIHBvc3REYXRhID0ge1xyXG4gICAgICAgICdxdWVzdGlvbm5haXJlSWQnOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbm5haXJlSWQsXHJcbiAgICAgICAgJ2Fuc3dlckxpbmUnOiBkYXRhXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHBhc3NEYXRhID0geyAnYW5zd2Vycyc6IHBvc3REYXRhLCAnZmlsZXMnOiB0aGlzLnNlbGVjdGVkTWVzc2FnZSwgJ2F1ZGlvVmlkZW8nOiB0aGlzLmF1ZGlvVmlkZW9GaWxlcywgJ2ZpbGVzdG9VcGxvYWQnOiB0aGlzLmZpbGVzdG9VcGxvYWQsICdkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0JzogdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0LCAnY29tbWVudHMnOiB0aGlzLmNvbW1lbnRzIH07XHJcbiAgICBpZiAoa2V5dHlwZSA9PT0gJ2lucHV0Q2hhbmdlJykge1xyXG4gICAgICB0aGlzLmNoYW5nZUhhcHBlbmVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmIChrZXl0eXBlID09PSAnc3VibWl0Jykge1xyXG4gICAgICBpZiAodGhpcy5jaGFuZ2VIYXBwZW5lZCkge1xyXG4gICAgICAgIHRoaXMuc3VibWl0UXVlc3Rpb25uYWlyZShwYXNzRGF0YSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnR5cGUpIHtcclxuICAgICAgICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50eXBlID09PSAncW5yLWxpbmsnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmV0dXJuQW5zd2Vycy5lbWl0KCdub2NoYW5nZScpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5lZGl0UW5yKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdGhpcy5yZXR1cm5BbnN3ZXJzLmVtaXQocGFzc0RhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXREYXRlKGRhdGU6IGFueSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpO1xyXG4gIH1cclxuICBsaXN0Q2hhbmdlKGV2OiBhbnksIHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBhbnksIGNvbHVtbj86IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgIT09ICdkYXRhR3JpZCcpIHtcclxuICAgICAgaWYgKGV2LnRhcmdldC5jaGVja2VkKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmxpc3RQcm9wZXJ0aWUgJiYgcXVlc3Rpb24ubGlzdFByb3BlcnRpZS5tYXhBbnN3ZXJzICYmIHF1ZXN0aW9uLmxpc3RQcm9wZXJ0aWUubWF4QW5zd2VycyA+IDEpIHtcclxuICAgICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXVswXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZih2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0uc3BsaWNlKGluZHgsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0pIHtcclxuICAgICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXS5wdXNoKHZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmR4ID0gdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXS5pbmRleE9mKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdLnNwbGljZShpbmR4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgaXNDaGVja2VkKHZhbHVlOiBhbnksIHF1ZXN0aW9uOiBhbnksIGNvbHVtbj86IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLmZpZWxkRGF0YVR5cGUgIT09ICdkYXRhR3JpZCcpIHtcclxuICAgICAgaWYgKHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgY29uc3QgaW5keCA9IHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YodmFsdWUpO1xyXG4gICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSkge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdLmluZGV4T2YodmFsdWUpO1xyXG4gICAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGJvb2xlYW5DaGFuZ2UoZXY6IGFueSwgdmFsdWU6IGFueSwgcXVlc3Rpb246IGFueSwgY29sdW1uPzogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb24uZmllbGREYXRhVHlwZSAhPT0gJ2RhdGFHcmlkJykge1xyXG4gICAgICBpZiAoZXYudGFyZ2V0LmNoZWNrZWQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHt9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSA9ICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAneWVzJykgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChldi50YXJnZXQuY2hlY2tlZCkge1xyXG4gICAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPSAodmFsdWUgPT09ICd5ZXMnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgaXNCb29sZWFuQ2hlY2tlZCh2YWx1ZTogYW55LCBxdWVzdGlvbjogYW55LCBjb2x1bW4/OiBhbnkpIHtcclxuICAgIHZhbHVlID0gKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd5ZXMnKSA/IHRydWUgOiBmYWxzZTtcclxuICAgIGlmIChxdWVzdGlvbi5maWVsZERhdGFUeXBlICE9PSAnZGF0YUdyaWQnKSB7XHJcbiAgICAgIGlmICh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSAhPT0gJycgJiYgdHlwZW9mIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1txdWVzdGlvbi5sYWJlbE5hbWVdID0gSlNPTi5wYXJzZSh0aGlzLmFuc3dlcnNbcXVlc3Rpb24ubGFiZWxOYW1lXSlcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hbnN3ZXJzW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSAhPT0gJycgJiYgdHlwZW9mIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9IEpTT04ucGFyc2UodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSlcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgc3VibWl0UXVlc3Rpb25uYWlyZShwYXNzRGF0YTogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygnZmRmZicsIHBhc3NEYXRhKVxyXG4gICAgY29uc3QgZGF0YVRvU2VuZDogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGNvbnN0IGJsb2Jwb3N0X0RhdGEgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkocGFzc0RhdGEuYW5zd2VycyldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcclxuICAgIGRhdGFUb1NlbmQuYXBwZW5kKCdxdWVzdGlvbicsIGJsb2Jwb3N0X0RhdGEpO1xyXG4gICAgdGhpcy5idXR0b25EaXNhYmxlID0gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgdXBsb2FkQXVkaW9WaWRlbyhkYXRhOiBhbnksIHR5cGU6IGFueSkge1xyXG4gICAgaWYgKGRhdGEudXJscyAmJiBkYXRhLnVybHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgcG9zdERhdGE6IGFueSA9IHtcclxuICAgICAgICB1cmxzOiBbXVxyXG4gICAgICB9O1xyXG4gICAgICBmb3IgKGNvbnN0IHVybCBvZiBkYXRhLnVybHMpIHtcclxuICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5maWxlc3RvVXBsb2FkW3VybC5sYWJlbE5hbWVdW3VybC5kb2N1bWVudF07XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLnZpZGVvYXVkaW9TM1VwbG9hZChmaWxlLCB1cmwudXJsKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHBvc3REYXRhWyd1cmxzJ10ucHVzaCh7IHVpZDogdXJsLnVpZCwgbGFiZWxOYW1lOiB1cmwubGFiZWxOYW1lIH0pO1xyXG4gICAgICAgICAgICBpZiAoZGF0YS51cmxzLmxlbmd0aCA9PT0gcG9zdERhdGFbJ3VybHMnXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbnNDaGVja2luJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyV2FpdGxpc3RRbnJVcGxvYWRTdGF0dXNVcGRhdGUodGhpcy51dWlkLCB0aGlzLmFjY291bnRJZCwgcG9zdERhdGEpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93RXJyb3IodGhpcy53b3JkUHJvY2Vzc29yLmdldFByb2plY3RFcnJvck1lc3NzYWdlcyhlcnJvck9iaikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY29uc0FwcHQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uYWlyZVNlcnZpY2UuY29uc3VtZXJBcHB0UW5yVXBsb2FkU3RhdHVzVXBkYXRlKHRoaXMudXVpZCwgdGhpcy5hY2NvdW50SWQsIHBvc3REYXRhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzR29iYWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9yT2JqID0gdGhpcy5lcnJvclNlcnZpY2UuZ2V0QXBpRXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3JPYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2NvbnNPcmRlcicgfHwgdHlwZSA9PT0gJ3BhcGVyJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbmFpcmVTZXJ2aWNlLmNvbnN1bWVyT3JkZXJRbnJVcGxvYWRTdGF0dXNVcGRhdGUodGhpcy51dWlkLCB0aGlzLmFjY291bnRJZCwgcG9zdERhdGEpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93RXJyb3IodGhpcy53b3JkUHJvY2Vzc29yLmdldFByb2plY3RFcnJvck1lc3NzYWdlcyhlcnJvcikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25EaXNhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY29uc0RvbmF0aW9uRGV0YWlscycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25haXJlU2VydmljZS5jb25zdW1lckRvbmF0aW9uUW5yVXBsb2FkU3RhdHVzVXBkYXRlKHRoaXMudXVpZCwgdGhpcy5hY2NvdW50SWQsIHBvc3REYXRhKVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NHb2JhY2soKTtcclxuICAgICAgICAgICAgICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvd0Vycm9yKHRoaXMud29yZFByb2Nlc3Nvci5nZXRQcm9qZWN0RXJyb3JNZXNzc2FnZXMoZXJyb3JPYmopKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkRpc2FibGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JPYmogPSB0aGlzLmVycm9yU2VydmljZS5nZXRBcGlFcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dFcnJvcih0aGlzLndvcmRQcm9jZXNzb3IuZ2V0UHJvamVjdEVycm9yTWVzc3NhZ2VzKGVycm9yT2JqKSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3VjY2Vzc0dvYmFjaygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnb0JhY2soKSB7XHJcbiAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcclxuICB9XHJcbiAgZ2V0UXVlc3Rpb24ocXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc291cmNlID09PSAnY3VzdG9tZXItY3JlYXRlJyB8fCB0aGlzLnNvdXJjZSA9PT0gJ3FuckRldGFpbHMnIHx8IHRoaXMuc291cmNlID09PSAnb25ldGltZScgfHwgdGhpcy5zb3VyY2UgPT09ICdzZXJ2aWNlT3B0aW9uQXBwdCcpIHtcclxuICAgICAgcmV0dXJuIHF1ZXN0aW9uO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHF1ZXN0aW9uLnF1ZXN0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuICB2YWxpZGF0ZVF1ZXN0aW9ubmFpcmUoc3JjPzogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25BbnN3ZXJzKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzID0ge1xyXG4gICAgICAgIGFuc3dlcnM6IHtcclxuICAgICAgICAgIGFuc3dlckxpbmU6IFtdLFxyXG4gICAgICAgICAgcXVlc3Rpb25uYWlyZUlkOiAodGhpcy5xdWVzdGlvbm5haXJlTGlzdC5pZCkgPyB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LmlkIDogdGhpcy5xdWVzdGlvbm5haXJlTGlzdC5xdWVzdGlvbm5haXJlSWQsXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJbWcocXVlc3Rpb246IGFueSwgZG9jdW1lbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdICYmIHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSkge1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgIGxldCBmaWxlO1xyXG4gICAgICBpZiAodHlwZVswXSA9PT0gJ3ZpZGVvJyB8fCB0eXBlWzBdID09PSAnYXVkaW8nKSB7XHJcbiAgICAgICAgZmlsZSA9IHRoaXMuYXVkaW9WaWRlb0ZpbGVzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbGUgPSB0aGlzLnNlbGVjdGVkTWVzc2FnZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmR4ID0gZmlsZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgIGlmIChpbmR4ICE9PSAtMSkge1xyXG4gICAgICAgIGxldCBwYXRoID0gdGhpcy5maWxlU2VydmljZS5nZXRJbWFnZShudWxsLCB0aGlzLmZpbGVzdG9VcGxvYWRbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG5cclxuICAgICAgICBpZiAocGF0aCAmJiBwYXRoICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGF0aCA9IGZpbGVbaW5keF0ucGF0aDtcclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgY29uc3QgaW5keCA9IHRoaXMudXBsb2FkZWRJbWFnZXMuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICBpZiAoaW5keCAhPT0gLTEpIHtcclxuICAgICAgICBsZXQgcGF0aCA9IHRoaXMuZmlsZVNlcnZpY2UuZ2V0SW1hZ2UobnVsbCwgdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XSk7XHJcbiAgICAgICAgaWYgKHBhdGggJiYgcGF0aCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgcmV0dXJuIHBhdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhdGggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLnMzcGF0aDtcclxuICAgICAgICByZXR1cm4gcGF0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvLyBvbkJ1dHRvbkJlZm9yZUhvb2soZXZlbnQ6IGFueSkge1xyXG4gIC8vICAgaWYgKCFldmVudCB8fCAhZXZlbnQuYnV0dG9uKSB7XHJcbiAgLy8gICAgIHJldHVybjtcclxuICAvLyAgIH1cclxuICAvLyAgIGlmIChldmVudC5idXR0b24udHlwZSA9PT0gQnV0dG9uVHlwZS5ET1dOTE9BRCkge1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuICBvcGVuQXR0YWNobWVudEdhbGxlcnkocXVlc3Rpb246IGFueSwgZG9jdW1lbnQ6IGFueSkge1xyXG4gICAgdGhpcy5pbWFnZV9saXN0X3BvcHVwID0gW107XHJcbiAgICBsZXQgY291bnQgPSAwO1xyXG4gICAgbGV0IGltYWdlUGF0aDtcclxuICAgIGxldCBjYXB0aW9uID0gJyc7XHJcbiAgICBpZiAodGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gJiYgdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdKSB7XHJcbiAgICAgIGxldCB0eXBlID0gdGhpcy5maWxlc3RvVXBsb2FkW3F1ZXN0aW9uLmxhYmVsTmFtZV1bZG9jdW1lbnRdLnR5cGUuc3BsaXQoJy8nKTtcclxuICAgICAgaWYgKHR5cGVbMF0gPT09ICd2aWRlbycgfHwgdHlwZVswXSA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLmF1ZGlvVmlkZW9GaWxlcy5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgICAgdGhpcy5zaG93QXVkaW9WaWRlb0ZpbGUodGhpcy5hdWRpb1ZpZGVvRmlsZXNbaW5keF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZHggPSB0aGlzLnNlbGVjdGVkTWVzc2FnZS5pbmRleE9mKHRoaXMuZmlsZXN0b1VwbG9hZFtxdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XSk7XHJcbiAgICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgICBpZiAodHlwZVsxXSA9PT0gJ3BkZicgfHwgdHlwZVsxXSA9PT0gJ2RvY3gnIHx8IHR5cGVbMV0gPT09ICd0eHQnIHx8IHR5cGVbMV0gPT09ICdkb2MnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XS5zM3BhdGgpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XS5zM3BhdGgsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLnNlbGVjdGVkTWVzc2FnZVtpbmR4XS5wYXRoLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltYWdlUGF0aCA9IHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0ucGF0aDtcclxuICAgICAgICAgICAgY2FwdGlvbiA9IHRoaXMuY29tbWVudHNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgZG9jdW1lbnRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXSAmJiB0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pIHtcclxuICAgICAgY29uc3QgaW5keCA9IHRoaXMudXBsb2FkZWRJbWFnZXMuaW5kZXhPZih0aGlzLnVwbG9hZGVkRmlsZXNbcXVlc3Rpb24ubGFiZWxOYW1lXVtkb2N1bWVudF0pO1xyXG4gICAgICBsZXQgdHlwZSA9IHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS50eXBlLnNwbGl0KCcvJyk7XHJcbiAgICAgIGxldCBleHQgPSB0eXBlWzFdO1xyXG4gICAgICB0eXBlID0gdHlwZVswXTtcclxuICAgICAgaWYgKGluZHggIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICd2aWRlbycgfHwgdHlwZSA9PT0gJ2F1ZGlvJykge1xyXG4gICAgICAgICAgdGhpcy5zaG93QXVkaW9WaWRlb0ZpbGUodGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChleHQgPT09ICdwZGYnIHx8IGV4dCA9PT0gJ2RvY3gnIHx8IGV4dCA9PT0gJ3R4dCcgfHwgZXh0ID09PSAnZG9jJyB8fCBleHQgPT09ICd2bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcpIHtcclxuICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS5zM3BhdGgsICdfYmxhbmsnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ3R5cGV0eHQyJyx0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdKTtcclxuICAgICAgICAgIGlmICh0aGlzLnVwbG9hZGVkSW1hZ2VzICYmIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0gJiYgdGhpcy51cGxvYWRlZEltYWdlc1tpbmR4XVsna2V5TmFtZSddICYmXHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF1bJ2tleU5hbWUnXS5pbmNsdWRlcygnZG9jeCcpKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudXBsb2FkZWRGaWxlc1txdWVzdGlvbi5sYWJlbE5hbWVdW2RvY3VtZW50XS5zM3BhdGgsICdfYmxhbmsnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpbWFnZVBhdGggPSB0aGlzLnVwbG9hZGVkSW1hZ2VzW2luZHhdLnMzcGF0aDtcclxuICAgICAgICAgICAgY2FwdGlvbiA9IHRoaXMudXBsb2FkZWRJbWFnZXNbaW5keF0uY29tbWVudHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW1hZ2VQYXRoKSB7XHJcbiAgICAgIGNvbnN0IGltZ29iaiA9IHtcclxuICAgICAgICBzcmM6IGltYWdlUGF0aCxcclxuICAgICAgICB0aHVtYjogaW1hZ2VQYXRoLFxyXG4gICAgICAgIGFsdDogY2FwdGlvblxyXG4gICAgICAgIH1cclxuICAgICAgdGhpcy5pbWFnZV9saXN0X3BvcHVwLnB1c2goaW1nb2JqKTtcclxuICAgICAgY291bnQrKztcclxuICAgIH1cclxuICAgIGlmIChjb3VudCA+IDApIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vcGVuR2FsbGVyeSh0aGlzLmltYWdlX2xpc3RfcG9wdXBbMF0pO1xyXG4gICAgICB9LCAyMDApO1xyXG4gICAgfVxyXG4gIH1cclxuICBzaG93QXVkaW9WaWRlb0ZpbGUoZmlsZTogYW55KSB7XHJcbiAgICBjb25zdCBmaWxldmlld2RpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2hvd3VwbG9hZGZpbGVDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc1MCUnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ3BvcHVwLWNsYXNzJywgJ2NvbW1vbnBvcHVwbWFpbmNsYXNzJywgJ3VwbG9hZGZpbGVjb21wb25lbnRjbGFzcyddLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBmaWxlOiBmaWxlLFxyXG4gICAgICAgIHNvdXJjZTogJ3FucidcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBmaWxldmlld2RpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGVkaXRRbnIoKSB7XHJcbiAgICB0aGlzLmVkaXRRdWVzdGlvbm5haXJlID0gIXRoaXMuZWRpdFF1ZXN0aW9ubmFpcmU7XHJcbiAgfVxyXG4gIGdldERvY3VtZW50cyhxdWVzdGlvbjogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb24uZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZSA+IDEgJiYgcXVlc3Rpb24uZmlsZVByb3BlcnRpZS5taW5Ob09mRmlsZSAhPT0gcXVlc3Rpb24uZmlsZVByb3BlcnRpZS5tYXhOb09mRmlsZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRGaWxlc1RlbXBbcXVlc3Rpb24ubGFiZWxOYW1lXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBxdWVzdGlvbi5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNob3dQcm92aWRlclRleHQocXVlc3Rpb246IGFueSkge1xyXG4gICAgaWYgKHF1ZXN0aW9uLndob0NhbkFuc3dlciAmJiBxdWVzdGlvbi53aG9DYW5BbnN3ZXIgPT09ICdQUk9WSURFUl9PTkxZJykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgc3VjY2Vzc0dvYmFjaygpIHtcclxuICAgIHRoaXMuYnV0dG9uRGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgaWYgKCF0aGlzLnR5cGUpIHtcclxuICAgICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbGVzdG9VcGxvYWQgPSBbXTtcclxuICAgICAgdGhpcy5lZGl0UW5yKCk7XHJcbiAgICAgIHRoaXMucmV0dXJuQW5zd2Vycy5lbWl0KCdyZWxvYWQnKTtcclxuICAgICAgaWYgKHRoaXMudHlwZSAhPT0gJ3Fuci1saW5rJykge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3dTdWNjZXNzKCdVcGRhdGVkIFN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNob3dEYXRhR3JpZEFkZFNlY3Rpb24ocXVlc3Rpb246IGFueSwgdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5zaG93RGF0YUdyaWRbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVkR3JpZEluZGV4W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBudWxsO1xyXG4gIH1cclxuICBzaG93RGF0YUdyaWRBZGRTZWN0aW9ubihxdWVzdGlvbjogYW55LCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnF1ZXNTdG9yZSA9IHF1ZXN0aW9uO1xyXG4gICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdxdWVzU3RvcmUnLCB0aGlzLnF1ZXNTdG9yZSk7XHJcbiAgICB0aGlzLnNob3dEYXRhR3JpZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gdmFsdWU7XHJcbiAgICB0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXSA9IG51bGw7XHJcbiAgICB0aGlzLnFuclBvcHVwKHF1ZXN0aW9uLCB0cnVlKVxyXG4gIH1cclxuICBzYXZlRGF0YUdyaWRDb2x1bW4ocXVlc3Rpb246IGFueSkge1xyXG4gICAgbGV0IGNvbHVtbnMgPSBbXTtcclxuICAgIGZvciAobGV0IGNvbHVtbiBvZiBxdWVzdGlvbi5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zKSB7XHJcbiAgICAgIGlmICh0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBjb2x1bW4ub3JkZXJdIHx8IGNvbHVtbi5kYXRhVHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgY29sdW1uc1tjb2x1bW4ub3JkZXJdID0gdGhpcy5kYXRhR3JpZENvbHVtbnNbcXVlc3Rpb24ubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoY29sdW1uLmRhdGFUeXBlID09PSAnbGlzdCcgfHwgY29sdW1uLmRhdGFUeXBlID09PSAnZmlsZVVwbG9hZCcpIHtcclxuICAgICAgICAgIGNvbHVtbnNbY29sdW1uLm9yZGVyXSA9IFtdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW5zW2NvbHVtbi5vcmRlcl0gPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0pIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBbXTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXSAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbcXVlc3Rpb24ubGFiZWxOYW1lXVt0aGlzLnVwZGF0ZWRHcmlkSW5kZXhbcXVlc3Rpb24ubGFiZWxOYW1lXV0gPSBjb2x1bW5zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0ucHVzaChjb2x1bW5zKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FuY2VsQWRkb3JVcGRhdGUocXVlc3Rpb24pO1xyXG4gICAgdGhpcy5vblN1Ym1pdCgnaW5wdXRDaGFuZ2UnKTtcclxuICB9XHJcbiAgZWRpdERhdGFHcmlkKHF1ZXN0aW9uOiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZGF0YUdyaWRDb2x1bW5zQW5zd2VyTGlzdFtxdWVzdGlvbi5sYWJlbE5hbWVdLmluZGV4T2YoY29sdW1uKTtcclxuICAgIE9iamVjdC5rZXlzKGNvbHVtbikuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICB0aGlzLmRhdGFHcmlkQ29sdW1uc1txdWVzdGlvbi5sYWJlbE5hbWUgKyAnPScgKyBrZXldID0gY29sdW1uW2tleV07XHJcbiAgICB9KTtcclxuICAgIHRoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gaW5kZXg7XHJcbiAgICB0aGlzLnNob3dEYXRhR3JpZFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gdHJ1ZTtcclxuICB9XHJcbiAgZGVsZXRlRGF0YUdyaWQocXVlc3Rpb246IGFueSwgY29sdW1uOiBhbnkpIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0uaW5kZXhPZihjb2x1bW4pO1xyXG4gICAgdGhpcy5kYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W3F1ZXN0aW9uLmxhYmVsTmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMub25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XHJcbiAgfVxyXG4gIGNhbmNlbEFkZG9yVXBkYXRlKHF1ZXN0aW9uOiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd0RhdGFHcmlkW3F1ZXN0aW9uLmxhYmVsTmFtZV0gPSBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlZEdyaWRJbmRleFtxdWVzdGlvbi5sYWJlbE5hbWVdID0gbnVsbDtcclxuICAgIGZvciAobGV0IGNvbHVtbiBvZiBxdWVzdGlvbi5kYXRhR3JpZFByb3BlcnRpZXMuZGF0YUdyaWRDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMuZGF0YUdyaWRDb2x1bW5zW3F1ZXN0aW9uLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl0gPSAnJztcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0Q29sdW1uVHlwZShjb2x1bW5zOiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBjb2x1bW5EZXRhaWxzID0gY29sdW1ucy5maWx0ZXIoKGNsbW46IGFueSkgPT4gY2xtbi5vcmRlciA9PT0gSlNPTi5wYXJzZShjb2x1bW4pKTtcclxuICAgIGlmIChjb2x1bW5EZXRhaWxzWzBdKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5EZXRhaWxzWzBdLmRhdGFUeXBlO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRTZWN0aW9uQ291bnQoKSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5ncm91cGVkUW5yKS5sZW5ndGg7XHJcbiAgfVxyXG4gIGdldEJvb2xWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICB2YWx1ZSA9ICh2YWx1ZSAhPT0gJycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgPyBKU09OLnBhcnNlKHZhbHVlKSA6IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiAnWWVzJztcclxuICAgIH1cclxuICAgIHJldHVybiAnTm8nO1xyXG4gIH1cclxuICBnZXRNYXhkYXRlKGRhdGE6IGFueSkge1xyXG4gICAgbGV0IGRhdGU7XHJcbiAgICBpZiAodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcyAmJiB0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLmVuZERhdGUpIHtcclxuICAgICAgY29uc3QgZHQgPSB0aGlzLnJldmVyc2UodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcy5lbmREYXRlKTtcclxuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGR0KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0ZSA9IHRoaXMudGRheTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH1cclxuICBnZXRNaW5kYXRlKGRhdGE6IGFueSkge1xyXG4gICAgbGV0IGRhdGU7XHJcbiAgICBpZiAodGhpcy5nZXRRdWVzdGlvbihkYXRhKS5kYXRlUHJvcGVydGllcyAmJiB0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLnN0YXJ0RGF0ZSkge1xyXG4gICAgICBjb25zdCBkdCA9IHRoaXMucmV2ZXJzZSh0aGlzLmdldFF1ZXN0aW9uKGRhdGEpLmRhdGVQcm9wZXJ0aWVzLnN0YXJ0RGF0ZSk7XHJcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkdClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRhdGUgPSB0aGlzLm1pbmRheTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZTtcclxuICB9XHJcbiAgcmV2ZXJzZShzOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBzLnNwbGl0KFwiLVwiKS5yZXZlcnNlKCkuam9pbihcIi1cIik7XHJcbiAgfVxyXG4gIHFuclBvcHVwKHF1ZXN0aW9uOiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIC8vIGlmICh2YWx1ZSA9PT0gJ2VkaXQnKSB7XHJcbiAgICAvLyAgIHRoaXMucXVlc1N0b3JlID0gdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ3F1ZXNTdG9yZScpO1xyXG4gICAgLy8gICB0aGlzLnNob3dxbnIgPSB0cnVlO1xyXG4gICAgLy8gICB0aGlzLmVkaXRhYmxlSXRlbSA9IHF1ZXN0aW9uO1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXNTdG9yZSkpXHJcbiAgICAvLyAgIGNvbnN0IHJlbW92ZWl0ZW1kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFuckRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgLy8gICAgIHdpZHRoOiAnNTAlJyxcclxuICAgIC8vICAgICBwYW5lbENsYXNzOiBbJ3BvcHVwLWNsYXNzJywgJ2NvbW1vbnBvcHVwbWFpbmNsYXNzJywgJ2NvbmZpcm1hdGlvbm1haW5jbGFzcyddLFxyXG4gICAgLy8gICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgIC8vICAgICBkYXRhOiB7XHJcbiAgICAvLyAgICAgICBkYXRhOiB0aGlzLnF1ZXNTdG9yZSxcclxuICAgIC8vICAgICAgIHFucl90eXBlOiAnc2VydmljZV9vcHRpb24nLFxyXG4gICAgLy8gICAgICAgdmlldzogJ3FuclZpZXcnLFxyXG4gICAgLy8gICAgICAgaXNFZGl0OiAnZWRpdCcsXHJcbiAgICAvLyAgICAgICBlZGl0YWJsZUl0ZW06IHRoaXMuZWRpdGFibGVJdGVtLFxyXG4gICAgLy8gICAgICAgc2VydkRldGFpbHM6IHRoaXMuc2VydmljZVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyAgIHJlbW92ZWl0ZW1kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgIC8vICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhcInJlc3VsdC5kYXRhLmFuc3dlckxpbmVcIiwgcmVzdWx0LmRhdGEuYW5zd2VyTGluZSlcclxuICAgIC8vICAgICAgIHRoaXMuZGF0YUdyaWRMaXN0ID0gcmVzdWx0LmRhdGEuYW5zd2VyTGluZTtcclxuICAgIC8vICAgICAgIHRoaXMucG9zdF9EYXRhID0gcmVzdWx0LmRhdGE7XHJcbiAgICAvLyAgICAgICB0aGlzLnNob3dJdGVtID0gdHJ1ZTtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbSA9IHJlc3VsdC5kYXRhLmFuc3dlckxpbmVbMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0uY29sdW1uLmxpc3RbMF07XHJcbiAgICAvLyAgICAgICBpZiAocmVzdWx0LmRhdGEudG90YWxQcmljZSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnRvdGFsUHJpY2UgPSByZXN1bHQuZGF0YS50b3RhbFByaWNlXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgaW5kZXgxID0gdGhpcy5pdGVtQXJyYXkuZmluZEluZGV4KHggPT4geC5pZCA9PT0gdGhpcy5lZGl0YWJsZUl0ZW0uaWQpXHJcbiAgICAvLyAgICAgICBpZiAoaW5kZXgxID4gLTEpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5pdGVtQXJyYXkuc3BsaWNlKGluZGV4MSwgMSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgZHVtbXlBcnJheSA9IHsgaWQ6IHRoaXMuaWQsIHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgaXRlbTogdGhpcy5pdGVtLCBwcmljZTogdGhpcy50b3RhbFByaWNlLCBjb2x1bW5JdGVtOiB0aGlzLmRhdGFHcmlkTGlzdCB9XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5wdXNoKGR1bW15QXJyYXkpXHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gMDtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbUFycmF5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlID0gdGhpcy5zZXJ2aWNlVG90YWxQcmljZSArIGl0ZW0ucHJpY2U7XHJcbiAgICAvLyAgICAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnc2VydmljZVRvdGFsUHJpY2UnLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgKyAxXHJcbiAgICAvLyAgICAgICBsZXQgb2JqID0geyBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGRnTGlzdDogdGhpcy5wb3N0X0RhdGEuYW5zd2VyTGluZSB9O1xyXG4gICAgLy8gICAgICAgdGhpcy5maW5hbE9iamVjdExpc3QucHVzaChvYmopO1xyXG4gICAgLy8gICAgICAgdGhpcy5vblN1Ym1pdCgnc2VydmljZU9wdGlvbicpXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLnNob3dxbnIgPSB0cnVlO1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhcInRoaXMuc2VxdWVuY2VJZFwiLCBxdWVzdGlvbilcclxuICAgIC8vICAgdGhpcy5zZXF1ZW5jZUlkID0gcXVlc3Rpb24uc2VxdW5jZUlkO1xyXG4gICAgLy8gICBjb25zdCByZW1vdmVpdGVtZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRbnJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgIC8vICAgICB3aWR0aDogJzUwJScsXHJcbiAgICAvLyAgICAgcGFuZWxDbGFzczogWydwb3B1cC1jbGFzcycsICdjb21tb25wb3B1cG1haW5jbGFzcycsICdjb25maXJtYXRpb25tYWluY2xhc3MnXSxcclxuICAgIC8vICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAvLyAgICAgZGF0YToge1xyXG4gICAgLy8gICAgICAgZGF0YTogcXVlc3Rpb24sXHJcbiAgICAvLyAgICAgICBxbnJfdHlwZTogJ3NlcnZpY2Vfb3B0aW9uJyxcclxuICAgIC8vICAgICAgIHZpZXc6ICdxbnJWaWV3JyxcclxuICAgIC8vICAgICAgIGlzRWRpdDogJ2FkZCcsXHJcbiAgICAvLyAgICAgICBzZXJ2RGV0YWlsczogdGhpcy5zZXJ2aWNlXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vICAgcmVtb3ZlaXRlbWRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgLy8gICAgIGlmIChyZXN1bHQpIHtcclxuICAgIC8vICAgICAgIHRoaXMuZGF0YUdyaWRMaXN0ID0gcmVzdWx0LmRhdGEuYW5zd2VyTGluZTtcclxuICAgIC8vICAgICAgIHRoaXMucG9zdF9EYXRhID0gcmVzdWx0LmRhdGE7XHJcbiAgICAvLyAgICAgICB0aGlzLnNob3dJdGVtID0gdHJ1ZTtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbSA9IHJlc3VsdC5kYXRhLmFuc3dlckxpbmVbMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0uY29sdW1uLmxpc3RbMF07XHJcblxyXG4gICAgLy8gICAgICAgaWYgKHJlc3VsdC5kYXRhLnRvdGFsUHJpY2UpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy50b3RhbFByaWNlID0gcmVzdWx0LmRhdGEudG90YWxQcmljZVxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgbGV0IGR1bW15QXJyYXkgPSB7IGlkOiB0aGlzLmlkLCBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGl0ZW06IHRoaXMuaXRlbSwgcHJpY2U6IHRoaXMudG90YWxQcmljZSwgY29sdW1uSXRlbTogdGhpcy5kYXRhR3JpZExpc3QgfVxyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkucHVzaChkdW1teUFycmF5KVxyXG5cclxuICAgIC8vICAgICAgIGlmICh0aGlzLml0ZW1BcnJheSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmxTdG9yYWdlU2VydmljZS5zZXRpdGVtb25Mb2NhbFN0b3JhZ2UoJ2l0ZW1BcnJheScsIHRoaXMuaXRlbUFycmF5KTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSAwO1xyXG4gICAgLy8gICAgICAgdGhpcy5pdGVtQXJyYXkuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGxldCBxdWFudGl0eSA9IGl0ZW0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eTtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9ICh0aGlzLnNlcnZpY2VUb3RhbFByaWNlICsgaXRlbS5wcmljZSkgKiBxdWFudGl0eTtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdzZXJ2aWNlVG90YWxQcmljZScsIHRoaXMuc2VydmljZVRvdGFsUHJpY2UpO1xyXG4gICAgLy8gICAgICAgfSk7XHJcbiAgICAvLyAgICAgICB0aGlzLmlkID0gdGhpcy5pZCArIDFcclxuICAgIC8vICAgICAgIGxldCBvYmogPSB7IHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgZGdMaXN0OiB0aGlzLnBvc3RfRGF0YS5hbnN3ZXJMaW5lIH07XHJcbiAgICAvLyAgICAgICB0aGlzLmZpbmFsT2JqZWN0TGlzdC5wdXNoKG9iaik7XHJcbiAgICAvLyAgICAgICB0aGlzLm9uU3VibWl0KCdzZXJ2aWNlT3B0aW9uJylcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuICBpbmNyZW1lbnQoaXRlbTogYW55KSB7XHJcbiAgICAvLyBjb25zdCByZW1vdmVpdGVtZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRbnJEaWFsb2dDb21wb25lbnQsIHtcclxuICAgIC8vICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIC8vICAgcGFuZWxDbGFzczogWydwb3B1cC1jbGFzcycsICdjb21tb25wb3B1cG1haW5jbGFzcycsICdjb25maXJtYXRpb25tYWluY2xhc3MnXSxcclxuICAgIC8vICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgLy8gICBkYXRhOiB7XHJcbiAgICAvLyAgICAgaXRlbTogaXRlbSxcclxuICAgIC8vICAgICBkYXRhOiB0aGlzLnF1ZXN0aW9ubmFpcmVMaXN0LFxyXG4gICAgLy8gICAgIHZpZXc6ICdxbnJyZXBlYXRWaWV3JyxcclxuICAgIC8vICAgICBzZXJ2RGV0YWlsczogdGhpcy5zZXJ2aWNlXHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG4gICAgLy8gcmVtb3ZlaXRlbWRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgLy8gICBpZiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgaWYgKHJlc3VsdCA9PT0gJ2FkZE5ldycpIHtcclxuICAgIC8vICAgICAgIHRoaXMucXVlc1N0b3JlID0gdGhpcy5sU3RvcmFnZVNlcnZpY2UuZ2V0aXRlbWZyb21Mb2NhbFN0b3JhZ2UoJ3F1ZXNTdG9yZScpO1xyXG4gICAgLy8gICAgICAgdGhpcy5xbnJQb3B1cCh0aGlzLnF1ZXNTdG9yZSwgdHJ1ZSlcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgaWYgKCF0aGlzLnNlcXVlbmNlSWQpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5zZXF1ZW5jZUlkID0gaXRlbS5zZXF1ZW5jZUlkXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBsZXQgZHVtbXlBcnJheSA9IHsgaWQ6IHRoaXMuaWQsIHNlcXVlbmNlSWQ6IHRoaXMuc2VxdWVuY2VJZCwgaXRlbTogcmVzdWx0LnJlcGVhdEl0ZW0uaXRlbSwgcHJpY2U6IHJlc3VsdC5yZXBlYXRJdGVtLnByaWNlLCBjb2x1bW5JdGVtOiByZXN1bHQucmVwZWF0SXRlbS5jb2x1bW5JdGVtIH1cclxuICAgIC8vICAgICAgIGxldCBpdGVtcyA9IGR1bW15QXJyYXkuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtbjtcclxuICAgIC8vICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgICAgICAgaXRlbXNbaV0ucXVhbnRpdHkgPSBpdGVtc1tpXS5xdWFudGl0eSArIDE7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5pdGVtQXJyYXkpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBjb25zb2xlLmxvZyhcIlRoaXMuSXRlbUFycmF5XCIsIHRoaXMuaXRlbUFycmF5KVxyXG4gICAgLy8gICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IDA7XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1BcnJheS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgIC8vICAgICAgICAgbGV0IHF1YW50aXR5ID0gaXRlbS5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdLnF1YW50aXR5O1xyXG4gICAgLy8gICAgICAgICBjb25zb2xlLmxvZyhcInF1YW50aXR5XCIsIHF1YW50aXR5KVxyXG4gICAgLy8gICAgICAgICB0aGlzLnNlcnZpY2VUb3RhbFByaWNlICs9IGl0ZW0ucHJpY2UgKiBxdWFudGl0eTtcclxuICAgIC8vICAgICAgIH0pO1xyXG4gICAgLy8gICAgICAgY29uc29sZS5sb2coXCJzZXJ2aWNlVG90YWxQcmljZVwiLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKVxyXG4gICAgLy8gICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdzZXJ2aWNlVG90YWxQcmljZScsIHRoaXMuc2VydmljZVRvdGFsUHJpY2UpO1xyXG4gICAgLy8gICAgICAgdGhpcy5pZCA9IHRoaXMuaWQgKyAxXHJcbiAgICAvLyAgICAgICBsZXQgb2JqID0geyBzZXF1ZW5jZUlkOiB0aGlzLnNlcXVlbmNlSWQsIGRnTGlzdDogcmVzdWx0LnJlcGVhdEl0ZW0uY29sdW1uSXRlbSB9O1xyXG4gICAgLy8gICAgICAgdGhpcy5maW5hbE9iamVjdExpc3QucHVzaChvYmopO1xyXG4gICAgLy8gICAgICAgdGhpcy5vblN1Ym1pdCgnc2VydmljZU9wdGlvbicpXHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG4gIGdldEl0ZW1RdWFudGl0eShpdGVtOiBhbnkpIHtcclxuICAgIGxldCBxdWFudGl0eSA9IGl0ZW0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eTtcclxuICAgIHJldHVybiBxdWFudGl0eVxyXG4gICAgLy8gY29uc29sZS5sb2coXCJpdGVtXCIsIGl0ZW0pXHJcbiAgfVxyXG4gIGRlY3JlbWVudChyZW1vdmluZ0l0ZW06IGFueSkge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5pdGVtQXJyYXkuZmluZEluZGV4KCh4OiBhbnkpID0+IHguaWQgPT09IHJlbW92aW5nSXRlbS5pZClcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5pdGVtQXJyYXlbaW5kZXhdXCIsIHRoaXMuaXRlbUFycmF5W2luZGV4XSlcclxuICAgICAgaWYgKHRoaXMuZ2V0SXRlbVF1YW50aXR5KHRoaXMuaXRlbUFycmF5W2luZGV4XSkgPT0gMSkge1xyXG4gICAgICAgIHRoaXMuaXRlbUFycmF5LnNwbGljZShpbmRleCwgMSk7IC8vIDJuZCBwYXJhbWV0ZXIgbWVhbnMgcmVtb3ZlIG9uZSBpdGVtIG9ubHlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLml0ZW1BcnJheVtpbmRleF0uY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtbjtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpdGVtc1tpXS5xdWFudGl0eSA9IGl0ZW1zW2ldLnF1YW50aXR5IC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaXRlbUFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5sU3RvcmFnZVNlcnZpY2Uuc2V0aXRlbW9uTG9jYWxTdG9yYWdlKCdpdGVtQXJyYXknLCB0aGlzLml0ZW1BcnJheSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXJ2aWNlVG90YWxQcmljZSA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUFycmF5LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VydmljZVRvdGFsUHJpY2UgPSB0aGlzLnNlcnZpY2VUb3RhbFByaWNlICsgaXRlbS5wcmljZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubFN0b3JhZ2VTZXJ2aWNlLnNldGl0ZW1vbkxvY2FsU3RvcmFnZSgnc2VydmljZVRvdGFsUHJpY2UnLCB0aGlzLnNlcnZpY2VUb3RhbFByaWNlKTtcclxuICAgICAgdGhpcy5maW5hbE9iamVjdExpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIHRoaXMub25TdWJtaXQoJ3NlcnZpY2VPcHRpb24nKVxyXG4gIH1cclxuICBkaXNhYmxlSW5wdXQoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0Q3VycmVudEluZGV4Q3VzdG9tTGF5b3V0KGltYWdlLCBpbWFnZXMpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGltYWdlID8gaW1hZ2VzLmluZGV4T2YoaW1hZ2UpIDogLTE7XHJcbiAgfVxyXG4gIG9wZW5HYWxsZXJ5KGltYWdlKTogdm9pZCB7XHJcbiAgICBsZXQgaW1hZ2VJbmRleCA9IHRoaXMuZ2V0Q3VycmVudEluZGV4Q3VzdG9tTGF5b3V0KGltYWdlLCB0aGlzLmltYWdlX2xpc3RfcG9wdXApO1xyXG4gICAgY29uc3QgbGdJbnN0YW5jZSA9IGxpZ2h0Z2FsbGVyeSh0aGlzLmxpZ2h0R2FsbGVyeUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIHBsdWdpbnM6IFtsZ1pvb21dLFxyXG4gICAgICBkeW5hbWljOiB0cnVlLFxyXG4gICAgICBkeW5hbWljRWw6IHRoaXMuaW1hZ2VfbGlzdF9wb3B1cC5tYXAoKGltZykgPT4gKHtcclxuICAgICAgICBzcmM6IGltZy5zcmMsXHJcbiAgICAgICAgdGh1bWI6IGltZy50aHVtYixcclxuICAgICAgICBzdWJIdG1sOiBgPGg0PiR7aW1nLmFsdH08L2g0PmAsXHJcbiAgICAgICAgZG93bmxvYWRhYmxlOiB0cnVlLFxyXG4gICAgICB9KSksXHJcbiAgICAgIGluZGV4OiBpbWFnZUluZGV4LFxyXG4gICAgICB6b29tOiB0cnVlLFxyXG4gICAgICB0aHVtYm5haWw6IHRydWUsXHJcbiAgICAgIGZ1bGxTY3JlZW46IHRydWUsXHJcbiAgICAgIGRvd25sb2FkOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbGdJbnN0YW5jZS5vcGVuR2FsbGVyeShpbWFnZUluZGV4KTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJjb25zLWluYm94IG5vLXBhZGRpbmctc21hbGxcIiAqbmdJZj1cIiFzaG93c2VydmljZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250YWluZXIgY29uc3VtZXItZGFzaGhvbWUgcC0wXCIgKm5nSWY9XCIhdHlwZSAmJiBzb3VyY2UhPSdwcm9MZWFkJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgdGl0bGUtZ2Igcm91bmRlZC0wXCIgKm5nSWY9XCJ1dWlkXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm10LTIgYm9sZFwiPnt7cXVlc3Rpb25uYWlyZV9oZWFkaW5nIHwgY2FwaXRhbGl6ZUZpcnN0fX0gPGEgY2xhc3M9XCJwdWxsLWxlZnQgbWUtNCBiYWNrLWJ0blwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnRcIj48L2k+PC9hPjwvaDU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8YXBwLWNvbW1vbi1pbm5lcmxvYWRpbmctc3Bpbm5lciAqbmdJZj1cImxvYWRpbmdcIj48L2FwcC1jb21tb24taW5uZXJsb2FkaW5nLXNwaW5uZXI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi1mbHVpZCBwdWxsLXJpZ2h0IG1lLTIgbWItNFwiXHJcbiAgICAqbmdJZj1cInR5cGUgIT09ICdxbnJMaW5rUHJvdmlkZXInICYmICFidXR0b25EaXNhYmxlICYmIHdhaXRsaXN0U3RhdHVzXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwibm9ybWFsLWJ0biBlZGl0XCIgbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJlZGl0UW5yKClcIiBpZD1cImJ0bkVkaXRcIj5FZGl0PC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi1mbHVpZCB3aWR0aC0xMDBcIiBbY2xhc3MucW5yRGlzYWJsZVN0YXRlXT1cImRpc2FibGVJbnB1dCgpXCJcclxuICAgIFtjbGFzcy5wLTBdPVwidXVpZCAmJiAoc291cmNlID09PSAnY29uc0NoZWNraW4nIHx8IHNvdXJjZSA9PT0gJ2NvbnNBcHB0JyB8fCBzb3VyY2UgPT09ICdjb25zT3JkZXInIHx8IHNvdXJjZSA9PT0gJ3BhcGVyJyB8fCBzb3VyY2UgPT09ICdjb25zRG9uYXRpb25EZXRhaWxzJyB8fCBzb3VyY2UgPT09ICdpdnInKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC14bC0xMiBmb3JjZV9jZW50ZXJcIiBbY2xhc3MucC0wXT1cInV1aWRcIiBbY2xhc3Mubm8tcGFkZGluZy1zbWFsbF09XCJzb3VyY2UgJiYgc291cmNlPT0naXZyJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInFucnNlY1wiICpuZ0Zvcj1cImxldCBxbnIgb2YgZ3JvdXBlZFFuciB8IGtleXZhbHVlOiBhc0lzT3JkZXJcIlxyXG4gICAgICAgICAgW2NsYXNzLnNlY3Rpb24tc2hhZG93XT1cImdldFNlY3Rpb25Db3VudCgpID4gMVwiIFtjbGFzcy5uby1wYWRkaW5nLXNtYWxsXT1cInNvdXJjZSAmJiBzb3VyY2U9PSdpdnInXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBjYXJkIG1nbi0wXCIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHFuci52YWx1ZVwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtMTIgcXVlc3RcIj57e2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbH19XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZSBwdWxsLXJpZ2h0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hZGRpY29uXT1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZGF0YUdyaWQnICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiBzaG93RGF0YUdyaWRBZGRTZWN0aW9uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgdHJ1ZSlcIj48L2k+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByby1vbmx5XCIgKm5nSWY9XCJzaG93UHJvdmlkZXJUZXh0KGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5Gb3IgUHJvdmlkZXJzPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWRcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5tYW5kYXRvcnlcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWxldmVsLXNldHRpbmdzXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuaGludFwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5oaW50IHwgc2FmZUh0bWxcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPCEtLSBmb3IgZmlsZSB1cGxvYWQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZmlsZVVwbG9hZCdcIj5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBtdWx0aXBsZSAjZGVwdHNlbCBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLm1heE5vT2ZGaWxlID4gMSAmJiBnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5taW5Ob09mRmlsZSAhPT0gZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUubWF4Tm9PZkZpbGVcIlxyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ1cGxvYWRGaWxlc1RlbXBbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIiBjbGFzcz1cInNlbGVjdC1ib3hcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGRvY3VtZW50IG9mIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWxlUHJvcGVydGllLmFsbG93ZWREb2N1bWVudHNcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZG9jdW1lbnRcIiAoY2xpY2spPVwiY2hhbmdlSW1hZ2VTZWxlY3RlZChnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvY3VtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICB7e2RvY3VtZW50fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgY29sLTEyIGNvbC1tZC0xMiBjb2wtc20tMTIgcC0wIG10LTRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXREb2N1bWVudHMoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKSAmJiBnZXREb2N1bWVudHMoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHpvbmUgZHJvcHpvbmUtZGVmYXVsdCBkcm9wem9uZS1wcmltYXJ5IGR6LWNsaWNrYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5zaW5nbGUtZmlsZV09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzLmxlbmd0aD09MVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBhdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkb2Mgb2YgZ2V0RG9jdW1lbnRzKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHotcHJldmlldyBkei1wcm9jZXNzaW5nIGR6LWltYWdlLXByZXZpZXcgZHotZXJyb3IgZHotY29tcGxldGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRJbWcoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG9jbmFtZVwiICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpbGVQcm9wZXJ0aWUuYWxsb3dlZERvY3VtZW50cy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZG9jfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkemltYWdlIHBvaW50ZXItY3Vyc29yXCIgKGNsaWNrKT1cIm9wZW5BdHRhY2htZW50R2FsbGVyeShnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9XCJcIiBjbGFzcz1cImltZ19maXRcIiBbc3JjXT1cImdldEltZyhnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgKGJsdXIpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjb21tZW50c1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lICsgJz0nICsgZG9jXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdhbF9hY3Rpb25cIiAqbmdJZj1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiBtb2RlIT09J3JlYWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUltYWdlU2VsZWN0ZWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBkb2MpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGltZXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6LXByZXZpZXcgZHotcHJvY2Vzc2luZyBkei1pbWFnZS1wcmV2aWV3IGR6LWVycm9yIGR6LWNvbXBsZXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb2dvZmlsZTEuY2xpY2soKVwiICpuZ0lmPVwiIWdldEltZyhnZXRRdWVzdGlvbihxdWVzdGlvbiksIGRvYylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb2NuYW1lXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmlsZVByb3BlcnRpZS5hbGxvd2VkRG9jdW1lbnRzLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tkb2N9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6LWltYWdlIHBvaW50ZXItY3Vyc29yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjbG9nb2ZpbGUxIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLyo7Y2FwdHVyZT1jYW1lcmFcIiBzdHlsZT1cImRpc3BsYXk6bm9uZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZXNTZWxlY3RlZCgkZXZlbnQsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgZG9jKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImR6LWVycm9yLW1hcmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLWljb24gYnRuLWxpZ2h0LXN1Y2Nlc3MgYnRuLWNpcmNsZSBtci0yXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrLTUwIGZsYXRpY29uLXVwbG9hZFwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgY2hlY2tib3ggLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmZpZWxkRGF0YVR5cGUgPT09ICdsaXN0JyAmJiBnZXRRdWVzdGlvbihxdWVzdGlvbikubGlzdFByb3BlcnRpZS5tYXhBbnN3ZXJzID4gMVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveC1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveFwiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxWYWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImlzQ2hlY2tlZCh2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsaXN0Q2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3t2YWx1ZX19XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciByYWRpbyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2xpc3QnICYmIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5saXN0UHJvcGVydGllLm1heEFuc3dlcnMgPT09IDFcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsVmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNDaGVja2VkKHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbikpXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImxpc3RDaGFuZ2UoJGV2ZW50LCB2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7dmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgdG9nZ2VsIGJvb2xlYW4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnYm9vbCdcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9cIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsVmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNCb29sZWFuQ2hlY2tlZCh2YWx1ZSwgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJib29sZWFuQ2hhbmdlKCRldmVudCwgdmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7e3ZhbHVlfX1cclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdGV4dC1kYW5nZXJcIiAqbmdJZj1cImFwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICB7e2FwaUVycm9yW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdfX08L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIFRleHQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAncGxhaW5UZXh0J1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5wbGFpblRleHRQcm9wZXJ0aWUubWF4Tm9PZkxldHRlcjw9MTAwXCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhbnN3ZXJzW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCIgKGlucHV0KT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1wiICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIFttaW5sZW5ndGhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5taW5Ob09mTGV0dGVyXCJcclxuICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cInRleHRcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHRleHRhcmVhIHJvd3M9XCIzXCIgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXI+MTAwXCJcclxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhbnN3ZXJzW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCIgKGlucHV0KT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpO1wiXHJcbiAgICAgICAgICAgICAgICAgIFttaW5sZW5ndGhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnBsYWluVGV4dFByb3BlcnRpZS5taW5Ob09mTGV0dGVyXCJcclxuICAgICAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJnZXRRdWVzdGlvbihxdWVzdGlvbikucGxhaW5UZXh0UHJvcGVydGllLm1heE5vT2ZMZXR0ZXJcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sMiBmb3JtLWNvbnRyb2wtc29saWRcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHRleHQtZGFuZ2VyXCIgKm5nSWY9XCJhcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgICAge3thcGlFcnJvcltnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXX19PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIGZvciBOdW1iZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImFuc3dlcnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIiAoaW5wdXQpPVwib25TdWJtaXQoJ2lucHV0Q2hhbmdlJyk7XCJcclxuICAgICAgICAgICAgICAgIFttaW5dPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLm51bWJlclByb3BlcnRpZS5zdGFydFwiIFttYXhdPVwiZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLm51bWJlclByb3BlcnRpZS5lbmRcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwiaXNOdW1lcmljKCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgRGF0ZSAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkaXNwLWZsZXhcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5maWVsZERhdGFUeXBlID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wxXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgW21heF09XCJnZXRNYXhkYXRlKHF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICBbbWluXT1cImdldE1pbmRhdGUocXVlc3Rpb24pXCIgWyhuZ01vZGVsKV09XCJhbnN3ZXJzW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCJcclxuICAgICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uU3VibWl0KCdpbnB1dENoYW5nZScpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB0ZXh0LWRhbmdlclwiICpuZ0lmPVwiYXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgIHt7YXBpRXJyb3JbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV19fTwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBmb3IgRGF0YWdyaWQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlMVwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJnZXRRdWVzdGlvbihxdWVzdGlvbikuZmllbGREYXRhVHlwZSA9PT0gJ2RhdGFHcmlkJyAmJiBkYXRhR3JpZENvbHVtbnNBbnN3ZXJMaXN0W2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdICYmIGRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV0ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWhlYWQtY3VzdG9tIHRhYmxlLWhlYWQtYmcgdGFibGUtYm9yZGVybGVzcyB0YWJsZS12ZXJ0aWNhbC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2NvbHVtbi5jb2x1bW5JZH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGRhdGFHcmlkQ29sdW1uc0Fuc3dlckxpc3RbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV07bGV0IGkgPWluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNvbHVtbiB8IGtleXZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29sdW1uVHlwZShnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1ucywgZGF0YS5rZXkpID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhLnZhbHVlIHwgZGF0ZSA6IG5ld1RpbWVEYXRlRm9ybWF0fX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtblR5cGUoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMsIGRhdGEua2V5KSA9PT0gJ2Jvb2wnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0Qm9vbFZhbHVlKGRhdGEudmFsdWUpfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtblR5cGUoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMsIGRhdGEua2V5KSAhPT0gJ2RhdGUnICYmIGdldENvbHVtblR5cGUoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmRhdGFHcmlkUHJvcGVydGllcy5kYXRhR3JpZENvbHVtbnMsIGRhdGEua2V5KSAhPT0gJ2Jvb2wnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZGF0YS52YWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiFidXR0b25EaXNhYmxlICYmICFkaXNhYmxlSW5wdXQoKSAmJiAhc2hvd0RhdGFHcmlkW2dldFF1ZXN0aW9uKHF1ZXN0aW9uKS5sYWJlbE5hbWVdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlblwiIChjbGljayk9XCJlZGl0RGF0YUdyaWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWJ1dHRvbkRpc2FibGUgJiYgIWRpc2FibGVJbnB1dCgpICYmICFzaG93RGF0YUdyaWRbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIiAoY2xpY2spPVwiZGVsZXRlRGF0YUdyaWQoZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFNlY3Rpb25cIiAqbmdJZj1cInNob3dEYXRhR3JpZFtnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lXVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkQ29sdW1uXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBnZXRRdWVzdGlvbihxdWVzdGlvbikuZGF0YUdyaWRQcm9wZXJ0aWVzLmRhdGFHcmlkQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7Y29sdW1uLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWRcIiAqbmdJZj1cImNvbHVtbi5tYW5kYXRvcnlcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIGNoZWNrYm94IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnbGlzdCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjaGVja2JveFwiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBjb2x1bW4ubGlzdFByb3BlcnRpZS52YWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJpc0NoZWNrZWQodmFsdWUsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibGlzdENoYW5nZSgkZXZlbnQsIHZhbHVlLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZSB8fCBkaXNhYmxlSW5wdXQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t2YWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIHRvZ2dlbCBib29sZWFuIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnYm9vbCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNCb29sZWFuQ2hlY2tlZCgneWVzJywgZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJib29sZWFuQ2hhbmdlKCRldmVudCwgJ3llcycsIGdldFF1ZXN0aW9uKHF1ZXN0aW9uKSwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgWWVzXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJyYWRpb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNCb29sZWFuQ2hlY2tlZCgnbm8nLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImJvb2xlYW5DaGFuZ2UoJGV2ZW50LCAnbm8nLCBnZXRRdWVzdGlvbihxdWVzdGlvbiksIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIE5vXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gZm9yIFRleHQgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdwbGFpblRleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cImRhdGFHcmlkQ29sdW1uc1tnZXRRdWVzdGlvbihxdWVzdGlvbikubGFiZWxOYW1lICsgJz0nICsgY29sdW1uLm9yZGVyXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIiBjbGFzcz1cImZvcm0tY29udHJvbDEgZm9ybS1jb250cm9sLXNvbGlkXCIgdHlwZT1cInRleHRcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgTnVtYmVyIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwiY29sdW1uLmRhdGFUeXBlID09PSAnbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJkYXRhR3JpZENvbHVtbnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgW21pbl09XCJjb2x1bW4ubnVtYmVyUHJvcGVydGllLnN0YXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImNvbHVtbi5udW1iZXJQcm9wZXJ0aWUuZW5kXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wxIGZvcm0tY29udHJvbC1zb2xpZFwiIHR5cGU9XCJudW1iZXJcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBmb3IgRGF0ZSAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZGlzcC1mbGV4XCIgKm5nSWY9XCJjb2x1bW4uZGF0YVR5cGUgPT09ICdkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wxXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgW21heF09XCJnZXRNYXhkYXRlKHF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21pbl09XCJnZXRNaW5kYXRlKHF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhR3JpZENvbHVtbnNbZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLmxhYmVsTmFtZSArICc9JyArIGNvbHVtbi5vcmRlcl1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXR0b25EaXNhYmxlIHx8IGRpc2FibGVJbnB1dCgpXCIgKGNsaWNrKT1cInBpY2tlci5vcGVuKClcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXIgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGUgfHwgZGlzYWJsZUlucHV0KClcIj5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3QtYnRuc1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LXByaW1hcnkgZm9udC13ZWlnaHQtYm9sZFwiIGlkPVwiYnRuQ2FuY2VsUVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxBZGRvclVwZGF0ZShnZXRRdWVzdGlvbihxdWVzdGlvbikpXCI+XHJcbiAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBmb250LXdlaWdodC1ib2xkXCIgaWQ9XCJidG5TYXZlUVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRGF0YUdyaWRDb2x1bW4oZ2V0UXVlc3Rpb24ocXVlc3Rpb24pKVwiPkFkZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtMTIgY29sLXNtLTEyIGNvbC1sZy0xMiBwLTAgc3VibWl0LXBhZFwiXHJcbiAgICAgICAgKm5nSWY9XCJ0eXBlICE9PSAncW5yTGlua1Byb3ZpZGVyJyAmJiBzb3VyY2UhPT0ncHJvTGVhZCcgJiYgKHV1aWQgfHwgc291cmNlID09PSAnY3VzdG9tZXItZGV0YWlscycgfHwgc291cmNlID09PSAncHJvRG9uYXRpb24nKSAmJiAhZGlzYWJsZUlucHV0KClcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibm9ybWFsLWJ0blwiIG1hdC1mbGF0LWJ1dHRvbiBbY2xhc3Muc3Bpbm5lcl09XCJidXR0b25EaXNhYmxlXCIgaWQ9XCJidG5TdWJtaXRcIlxyXG4gICAgICAgICAgW2NsYXNzLnNwaW5uZXItZGFya2VyLXN1Y2Nlc3NdPVwiYnV0dG9uRGlzYWJsZVwiIFtjbGFzcy5zcGlubmVyLWNlbnRlcl09XCJidXR0b25EaXNhYmxlXCJcclxuICAgICAgICAgIChjbGljayk9XCIhYnV0dG9uRGlzYWJsZSAmJiBvblN1Ym1pdCgnc3VibWl0JylcIiBbZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZVwiXHJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYnV0dG9uRGlzYWJsZVwiPnt7KHR5cGUgPT0gJ3Fuci1saW5rJykgPyAnU3VibWl0JyA6ICdVcGRhdGUnfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG48ZGl2ICNsaWdodEdhbGxlcnlDb250YWluZXIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvZGl2PlxyXG48c2VjdGlvbiBjbGFzcz1cImNvbnMtaW5ib3ggbm8tcGFkZGluZy1zbWFsbFwiICpuZ0lmPVwic2hvd3NlcnZpY2VcIj5cclxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGNvbnN1bWVyLWRhc2hob21lXCIgKm5nSWY9XCIhdHlwZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgdGl0bGUtZ2Igcm91bmRlZC0wXCIgKm5nSWY9XCJ1dWlkXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm10LTIgYm9sZFwiPnt7cXVlc3Rpb25uYWlyZV9oZWFkaW5nIHwgY2FwaXRhbGl6ZUZpcnN0fX0gPGEgY2xhc3M9XCJwdWxsLWxlZnQgbWUtNCBiYWNrLWJ0blwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiZ29CYWNrKClcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWxlZnRcIj48L2k+PC9hPjwvaDU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8YXBwLWNvbW1vbi1pbm5lcmxvYWRpbmctc3Bpbm5lciAqbmdJZj1cImxvYWRpbmdcIj48L2FwcC1jb21tb24taW5uZXJsb2FkaW5nLXNwaW5uZXI+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi1mbHVpZCBwdWxsLXJpZ2h0IG1lLTIgbWItNFwiXHJcbiAgICAqbmdJZj1cInR5cGUgIT09ICdxbnJMaW5rUHJvdmlkZXInICYmICFidXR0b25EaXNhYmxlICYmIHdhaXRsaXN0U3RhdHVzXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwibm9ybWFsLWJ0biBlZGl0XCIgbWF0LWZsYXQtYnV0dG9uIChjbGljayk9XCJlZGl0UW5yKClcIiBpZD1cImJ0bkVkaXRRTlJcIj5FZGl0PC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbi1mbHVpZCB3aWR0aC0xMDBcIiBbY2xhc3MucW5yRGlzYWJsZVN0YXRlXT1cImRpc2FibGVJbnB1dCgpXCJcclxuICAgIFtjbGFzcy5wLTBdPVwidXVpZCAmJiAoc291cmNlID09PSAnY29uc0NoZWNraW4nIHx8IHNvdXJjZSA9PT0gJ2NvbnNBcHB0JyB8fCBzb3VyY2UgPT09ICdjb25zRG9uYXRpb25EZXRhaWxzJyApXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhsLTEyIGZvcmNlX2NlbnRlciBwLTBcIiBbY2xhc3MucC0wXT1cInV1aWRcIlxyXG4gICAgICBbY2xhc3Mubm8tcGFkZGluZy1zbWFsbF09XCJzb3VyY2UgJiYgc291cmNlPT0naXZyJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiICpuZ0Zvcj1cImxldCBxbnIgb2YgZ3JvdXBlZFFuciB8IGtleXZhbHVlXCIgW2NsYXNzLnNlY3Rpb24tc2hhZG93XT1cImdldFNlY3Rpb25Db3VudCgpID4gMVwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW1BcnJheS5sZW5ndGggPT0gMCBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgbWduLTAgYm9yZGVyLWRhc2hlZCB0ZXh0LWNlbnRlclwiICpuZ0Zvcj1cImxldCBxdWVzdGlvbiBvZiBxbnIudmFsdWVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicW5yLXNlY3Rpb25cIiAqbmdJZj1cImdldFNlY3Rpb25Db3VudCgpID4gMVwiPlxyXG4gICAgICAgICAgICAgICAge3tnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24uc2VjdGlvbk5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC0xMiBxdWVzdCBwb2ludGVyLWN1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0RhdGFHcmlkQWRkU2VjdGlvbm4oZ2V0UXVlc3Rpb24ocXVlc3Rpb24pLnF1ZXN0aW9uLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJ7e2NkblBhdGh9fWFzc2V0cy9pbWFnZXMvc2VydmljZS1vcHRpb25zLnN2Z1wiIGFsdD1cIlNlcnZpY2UgT3B0aW9uc1wiIGNsYXNzPVwiaW1nLWZsdWlkIHBiLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMzAwXCIgaGVpZ2h0PVwiMzAwXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm8tb25seVwiICpuZ0lmPVwic2hvd1Byb3ZpZGVyVGV4dChnZXRRdWVzdGlvbihxdWVzdGlvbikucXVlc3Rpb24pXCI+Rm9yIFByb3ZpZGVyczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWRcIiAqbmdJZj1cImdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbi5tYW5kYXRvcnlcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC13ZWlnaHQtYm9sZFwiPlBsZWFzZSBDaG9vc2UgeW91ciBQZXQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBmb250LXdlaWdodC1ib2xkXCI+Q29udGludWU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLTEyIGNvbC1zbS0xMiBtYi00IHAtMFwiICpuZ0lmPVwic2hvd0l0ZW1cIj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvcmRlclwiICpuZ0Zvcj1cIiBsZXQgaXRlbXMgb2YgaXRlbUFycmF5XCI+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNhcGl0YWxpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW1zLml0ZW19fTxicj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYm9yZGVyLWFwcGx5IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZGVjcmVtZW50KGl0ZW1zKTtcIiBjbGFzcz1cInBvaW50ZXItY3Vyc29yIHF1YW50aXR5IHF1YW50aXR5LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtMTBcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgcG9pbnRlci1jdXJzb3JcIj48c3BhbiBjbGFzcz1cInF1YW50aXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbXMgJiYgaXRlbXMuY29sdW1uSXRlbSAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdCAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0gJiYgaXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtbiAmJiBpdGVtcy5jb2x1bW5JdGVtWzBdLmFuc3dlci5kYXRhR3JpZExpc3RbMF0uZGF0YUdyaWRMaXN0Q29sdW1uWzBdICYmIGl0ZW1zLmNvbHVtbkl0ZW1bMF0uYW5zd2VyLmRhdGFHcmlkTGlzdFswXS5kYXRhR3JpZExpc3RDb2x1bW5bMF0ucXVhbnRpdHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbXMuY29sdW1uSXRlbVswXS5hbnN3ZXIuZGF0YUdyaWRMaXN0WzBdLmRhdGFHcmlkTGlzdENvbHVtblswXS5xdWFudGl0eX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaW5jcmVtZW50KGl0ZW1zKTtcIiBjbGFzcz1cInBvaW50ZXItY3Vyc29yIHF1YW50aXR5IHF1YW50aXR5LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtMTBcIj4rPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcHJpbWFyeVwiPjxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtaW5yXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7aXRlbXMucHJpY2UgKiBnZXRJdGVtUXVhbnRpdHkoaXRlbXMpfX0vLVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dJdGVtICYmaXRlbUFycmF5Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxbnIgb2YgZ3JvdXBlZFFuciB8IGtleXZhbHVlXCIgW2NsYXNzLnNlY3Rpb24tc2hhZG93XT1cImdldFNlY3Rpb25Db3VudCgpID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgcW5yLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC0xMiBxdWVzdCBwb2ludGVyLWN1cnNvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEYXRhR3JpZEFkZFNlY3Rpb25uKGdldFF1ZXN0aW9uKHF1ZXN0aW9uKS5xdWVzdGlvbiwgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgZm9udC13ZWlnaHQtYm9sZFwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1cyB0ZXh0LXdoaXRlXCI+PC9pPkFkZDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+Il19
|