@rangertechnologies/ngnxt 2.1.249 → 2.1.251
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/environments/version.mjs +2 -2
- package/esm2022/lib/components/button/nxt-button.component.mjs +3 -3
- package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +5 -4
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +3 -4
- package/esm2022/lib/components/custom-model/custom-model.component.mjs +5 -3
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +1 -1
- package/esm2022/lib/components/datatable/datatable.component.mjs +14 -11
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +3 -3
- package/esm2022/lib/components/icon-selector/icon-selector.component.mjs +4 -3
- package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +9 -9
- package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +9 -7
- package/esm2022/lib/components/pagination/pagination.component.mjs +3 -3
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +3 -3
- package/esm2022/lib/components/search-box/search-box.component.mjs +6 -4
- package/esm2022/lib/pages/booklet/booklet.component.mjs +26 -16
- package/esm2022/lib/pages/builder/element/element.component.mjs +13 -10
- package/esm2022/lib/pages/builder/properties/common-fields.constants.mjs +62 -55
- package/esm2022/lib/pages/builder/properties/properties.component.mjs +89 -66
- package/esm2022/lib/pages/builder/templates/templates.component.mjs +4 -3
- package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +4 -3
- package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +40 -43
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +5 -4
- package/esm2022/lib/services/form-builder/form-builder.service.mjs +11 -11
- package/esm2022/lib/services/translation/translation.service.mjs +13 -2
- package/fesm2022/rangertechnologies-ngnxt.mjs +305 -249
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/pages/builder/properties/common-fields.constants.d.ts +18 -0
- package/lib/pages/builder/properties/properties.component.d.ts +25 -0
- package/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.d.ts +17 -0
- package/lib/services/translation/translation.service.d.ts +1 -0
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.251.tgz +0 -0
- package/esm2022/lib/interfaces/apimeta.mjs +0 -2
- package/lib/interfaces/apimeta.d.ts +0 -15
- package/rangertechnologies-ngnxt-2.1.249.tgz +0 -0
|
@@ -145,6 +145,7 @@ export class QuestionbookComponent {
|
|
|
145
145
|
this.handleQues(ques);
|
|
146
146
|
let input;
|
|
147
147
|
input = {};
|
|
148
|
+
input['isObject'] = apiObj?.isObject;
|
|
148
149
|
input['field'] = apiObj?.defaultField || apiObj?.field?.[0] || apiObj?.field || null;
|
|
149
150
|
input['valueObj'] = ques.type == 'Image' ? ques.orgImageData : ques.type === 'Boolean' ? typeof ques.input !== 'undefined' ? ques.input === true : typeof ques.defaultValue !== 'undefined' ? ques.defaultValue === true : false : ques.type === 'Table' ? { data: ques.input } : ques.input || ques.defaultValue || null;
|
|
150
151
|
input['referenceField'] = ques.referenceField || null;
|
|
@@ -489,7 +490,7 @@ export class QuestionbookComponent {
|
|
|
489
490
|
}
|
|
490
491
|
else if (ques.type == 'List') {
|
|
491
492
|
// VD 20Aug24 handling the list type handle multiple object values
|
|
492
|
-
ques.input = (event.valueObj && typeof event.valueObj === 'object' && !Array.isArray(event.valueObj)) ? this.dataService.getValue(event?.valueObj, event?.field) : event.valueObj;
|
|
493
|
+
ques.input = (event.valueObj && typeof event.valueObj === 'object' && !Array.isArray(event.valueObj)) ? event.isObject ? event.valueObj : this.dataService.getValue(event?.valueObj, event?.field) : event.valueObj;
|
|
493
494
|
} //RS 06JAN25
|
|
494
495
|
else if (ques.type === 'RichTextArea') {
|
|
495
496
|
ques.input = event.valueObj || null;
|
|
@@ -750,14 +751,14 @@ export class QuestionbookComponent {
|
|
|
750
751
|
return questions;
|
|
751
752
|
}
|
|
752
753
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.StorageService }, { token: i5.I18nService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
753
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, isStandalone: true, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", isEdit: "isEdit", dropDownData: "dropDownData", dataBind: "dataBind", allIcons: "allIcons", themeColor: "themeColor", cdnIconURL: "cdnIconURL", direction: "direction" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", singleFieldChangeEmit: "singleFieldChangeEmit", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, ngImport: i0, template: "<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [style]=\"ques?.style?.questionStyle\">\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'RichTextArea' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' &&ques.type !== 'Email' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label'): (ques.style?.showLabel !== false && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{ (ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText}}\n <div *ngIf=\"ques.isOptional && !ques.isReadOnly\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n\n <!-- SKS11JUN25 for pick location -->\n <app-pick-location *ngIf=\"ques.type === 'Location'\" [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n <!-- MSM10JUL25 icon-selector -->\n <nxt-icon-selector [allIcons]=\"allIcons\" *ngIf=\"ques.type === 'Icon'\" [required]=\"ques.isOptional\" [mode]=\"isEdit !== true ? 'view' : 'edit'\" [question]=\"ques\" [labelFont]=\"ques.font\"\n [label]=\"(ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\" [labelWeight]=\"ques.fontWeight\" [showLabel]=\"ques.style?.showLabel\" (iconSelected)=\"childEventCapture($event, ques);\"></nxt-icon-selector>\n\n <!-- SKS21MAR25 line -->\n <hr *ngIf=\"ques.type === 'Line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS13MAR25 data table -->\n <nxt-datatable *ngIf=\"ques.type === 'Table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [tableConfig]=\"ques.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- list -->\n <nxt-search-box *ngIf=\"ques.type === 'List'\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" \n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (searchValueChange)=\"childEventCapture($event.value,$event.question)\">\n </nxt-search-box>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <app-custom-dropdown *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [question]=\"ques\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <app-file-upload *ngIf=\"ques.type === 'File'\" [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [allFiles]=\"ques.input\" (selectedFileData)=\"childEventCapture($event.value,$event.question)\"\n (deletedFileData)=\"deleteFile($event)\"\n ></app-file-upload>\n <!-- SKS11JUN25 Button -->\n <nxt-button\n *ngIf=\"ques.type === 'Button'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"ques?.question\"\n (buttonClickEmit)=\"childEventCapture($event, ques)\"\n >\n </nxt-button>\n <!-- SKS11JUN25 book type -->\n <lib-questionbook *ngIf=\"ques.type === 'Book'\" [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n <!-- SKS11JUN25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'Date' || ques.type === 'Time' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'Date' ? 'date' : ques.type === 'Time' ? 'time' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText): ''\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques?.question ? ((ques.id+'.question') | nxtCustomTranslate : ques?.question ): ''\"\n [required]=\"ques.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n [minDate]=\"ques.minDate\"\n [rows]=\"3\"\n (inputValue)=\"childEventCapture($event.value,$event.question)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.col-lg-6,.col-lg-4{padding-left:5px!important;padding-right:5px!important}.form-row{display:-ms-flexbox!important;display:flex!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"], dependencies: [{ kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "questions", "errorFieldId", "labelValue", "token", "isEdit", "dropDownData", "dataBind", "allIcons", "themeColor", "cdnIconURL", "direction"], outputs: ["handleDropDown", "handleQuestion", "singleFieldChangeEmit", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "options", "cropperFrameAriaLabel", "output", "format", "autoCrop", "cropper", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "checkImageType", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange", "cropperChange"] }, { kind: "component", type: NxtFileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "mode", "isShowNoFileIcon", "question", "error", "from"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "question", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token", "mode", "from"], outputs: ["valueChange"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "btnBgColor", "btnBorder", "btnTextColor", "btnHeight", "btnWidth", "btnIconLeftSrc", "btnIconRightSrc", "btnHoverBgColor", "btnHoverTextColor", "btnId", "dataDismiss", "buttonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig", "mode", "languageCode"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtSearchBox, selector: "nxt-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "mode", "from"], outputs: ["searchValueChange"] }, { kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews", "mode", "languageCode", "selectedColumn", "allIcons"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "hadleDropDownDependent", "NxtTableEmit"] }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "from", "question", "mode", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: CustomModelComponent, selector: "app-custom-model", inputs: ["modalTitle", "isModalOpen", "modalSize", "saveButtonValue", "modalFooter"], outputs: ["saveButtonEmit", "cancelButtonEmit"] }, { kind: "component", type: CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question", "nxtId"], outputs: ["eventSelected", "dateSelected", "openModal", "closeModal"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "from", "hyperLink", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef", "removeValueEmit", "hyperlinkEmit"] }, { kind: "component", type: IconSelectorComponent, selector: "nxt-icon-selector", inputs: ["allIcons", "themeColor", "height", "tooltipPosition", "selectedIcon", "cdnIconURL", "label", "labelFont", "labelWeight", "inputWeight", "labelSize", "labelColor", "showLabel", "required", "mode", "question", "options"], outputs: ["iconSelected"] }, { kind: "pipe", type: NxtCustomTranslatePipe, name: "nxtCustomTranslate" }] });
|
|
754
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, isStandalone: true, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", isEdit: "isEdit", dropDownData: "dropDownData", dataBind: "dataBind", allIcons: "allIcons", themeColor: "themeColor", cdnIconURL: "cdnIconURL", direction: "direction" }, outputs: { handleDropDown: "handleDropDown", handleQuestion: "handleQuestion", singleFieldChangeEmit: "singleFieldChangeEmit", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, ngImport: i0, template: "<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [style]=\"ques?.style?.questionStyle\">\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'RichTextArea' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' &&ques.type !== 'Email' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label'): (ques.style?.showLabel !== false && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{ ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText):''}}\n <div *ngIf=\"ques.isOptional && !ques.isReadOnly\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n\n <!-- SKS11JUN25 for pick location -->\n <app-pick-location *ngIf=\"ques.type === 'Location'\" [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n <!-- MSM10JUL25 icon-selector -->\n <nxt-icon-selector [allIcons]=\"allIcons\" *ngIf=\"ques.type === 'Icon'\" [required]=\"ques.isOptional\" [mode]=\"isEdit !== true ? 'view' : 'edit'\" [question]=\"ques\" [labelFont]=\"ques.font\"\n [label]=\" ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText): ''\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\" [labelWeight]=\"ques.fontWeight\" [showLabel]=\"ques.style?.showLabel\" (iconSelected)=\"childEventCapture($event, ques);\"></nxt-icon-selector>\n\n <!-- SKS21MAR25 line -->\n <hr *ngIf=\"ques.type === 'Line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS13MAR25 data table -->\n <nxt-datatable *ngIf=\"ques.type === 'Table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [tableConfig]=\"ques.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- list -->\n <nxt-search-box *ngIf=\"ques.type === 'List'\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" \n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (searchValueChange)=\"childEventCapture($event.value,$event.question)\">\n </nxt-search-box>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <app-custom-dropdown *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [question]=\"ques\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <app-file-upload *ngIf=\"ques.type === 'File'\" [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [allFiles]=\"ques.input\" (selectedFileData)=\"childEventCapture($event.value,$event.question)\"\n (deletedFileData)=\"deleteFile($event)\"\n ></app-file-upload>\n <!-- SKS11JUN25 Button -->\n <nxt-button\n *ngIf=\"ques.type === 'Button'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"ques?.question\"\n (buttonClickEmit)=\"childEventCapture($event, ques)\"\n >\n </nxt-button>\n <!-- SKS11JUN25 book type -->\n <lib-questionbook *ngIf=\"ques.type === 'Book'\" [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n <!-- SKS11JUN25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'Date' || ques.type === 'Time' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'Date' ? 'date' : ques.type === 'Time' ? 'time' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText): ''\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques?.question ? ((ques.id+'.question') | nxtCustomTranslate : ques?.question ): ''\"\n [required]=\"ques.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n [minDate]=\"ques.minDate\"\n [rows]=\"3\"\n (inputValue)=\"childEventCapture($event.value,$event.question)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.col-lg-6,.col-lg-4{padding-left:5px!important;padding-right:5px!important}.form-row{display:-ms-flexbox!important;display:flex!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"], dependencies: [{ kind: "component", type: QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "questions", "errorFieldId", "labelValue", "token", "isEdit", "dropDownData", "dataBind", "allIcons", "themeColor", "cdnIconURL", "direction"], outputs: ["handleDropDown", "handleQuestion", "singleFieldChangeEmit", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: ImageCropperComponent, selector: "image-cropper", inputs: ["imageChangedEvent", "imageURL", "imageBase64", "imageFile", "imageAltText", "options", "cropperFrameAriaLabel", "output", "format", "autoCrop", "cropper", "transform", "maintainAspectRatio", "aspectRatio", "resetCropOnAspectRatioChange", "resizeToWidth", "resizeToHeight", "cropperMinWidth", "cropperMinHeight", "cropperMaxHeight", "cropperMaxWidth", "cropperStaticWidth", "cropperStaticHeight", "canvasRotation", "initialStepSize", "roundCropper", "onlyScaleDown", "imageQuality", "backgroundColor", "containWithinAspectRatio", "hideResizeSquares", "allowMoveImage", "checkImageType", "alignImage", "disabled", "hidden"], outputs: ["imageCropped", "startCropImage", "imageLoaded", "cropperReady", "loadImageFailed", "transformChange", "cropperChange"] }, { kind: "component", type: NxtFileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "mode", "isShowNoFileIcon", "question", "error", "from"], outputs: ["selectedFileData", "deletedFileData"] }, { kind: "component", type: CustomRadioComponent, selector: "app-custom-radio", inputs: ["options", "question", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token", "mode"], outputs: ["valueChange"] }, { kind: "component", type: CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token", "mode", "from"], outputs: ["valueChange"] }, { kind: "component", type: NxtButtonComponent, selector: "nxt-button", inputs: ["buttonValue", "buttonType", "type", "buttonDisable", "btnBgColor", "btnBorder", "btnTextColor", "btnHeight", "btnWidth", "btnIconLeftSrc", "btnIconRightSrc", "btnHoverBgColor", "btnHoverTextColor", "btnId", "dataDismiss", "buttonBorder", "modalToTrigger", "isImageSvg", "tabIndex", "buttonConfig", "mode", "languageCode"], outputs: ["buttonClickEmit"] }, { kind: "component", type: NxtSearchBox, selector: "nxt-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "mode", "from"], outputs: ["searchValueChange"] }, { kind: "component", type: NxtDatatable, selector: "nxt-datatable", inputs: ["data", "tableFilterData", "columns", "withCheckBox", "searchBar", "tableSaveButton", "stickyColumn", "tableWidth", "actionColumHeader", "actionButton", "title", "isButtons", "buttonArray", "tableId", "isEditRow", "isDeleteRow", "addInlineRecord", "searchConfigs", "direction", "pagination", "actionButtonArray", "multipleFilter", "isPagination", "isNosIndicator", "isEditable", "from", "question", "rowTextSize", "rowTextColor", "apiMeta", "summaryRows", "summaryColumns", "isLoading", "tableConfig", "tableParams", "listViews", "mode", "languageCode", "selectedColumn", "allIcons"], outputs: ["tableRowClick", "onEditData", "saveButtonData", "onDeleteData", "buttonEmit", "hyperLinkEmit", "sideNavEmit", "actionButtonEmit", "columnSelected", "removeColumn", "valueChange", "selectedValues", "fileEmit", "NxtTableParamsEmit", "NxtTableFilterEmit", "hadleDropDownDependent", "NxtTableEmit"] }, { kind: "component", type: PickLocationComponent, selector: "app-pick-location", inputs: ["address", "from", "question", "mode", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: CustomModelComponent, selector: "app-custom-model", inputs: ["modalTitle", "isModalOpen", "modalSize", "saveButtonValue", "modalFooter"], outputs: ["saveButtonEmit", "cancelButtonEmit"] }, { kind: "component", type: CustomCalendarComponent, selector: "app-custom-calendar", inputs: ["allEvents", "question", "nxtId"], outputs: ["eventSelected", "dateSelected", "openModal", "closeModal"] }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: NxtInput, selector: "nxt-input", inputs: ["label", "labelFont", "labelWeight", "inputWeight", "labelSize", "inputValueSize", "labelColor", "showLabel", "svgHeight", "svgWidth", "type", "inputIconRightSrc", "inputIconLeftSrc", "required", "minLength", "pattern", "errorMessages", "maxLength", "placeholder", "inputBgColor", "inputBorder", "placeholderColor", "placeholderFont", "placeholderWeight", "placeholderSize", "inputTextColor", "inputHeight", "inputWidth", "inputId", "inputBorderSize", "inputConfig", "confPassVal", "confPass", "mode", "value", "question", "showSuggestion", "ariaOwns", "ariaHasPopup", "isLoading", "options", "minDate", "maxDate", "rows", "from", "hyperLink", "size"], outputs: ["valueChange", "inputValue", "onBlur", "onFocus", "toggleEmit", "nativeInputRef", "removeValueEmit", "hyperlinkEmit"] }, { kind: "component", type: IconSelectorComponent, selector: "nxt-icon-selector", inputs: ["allIcons", "themeColor", "height", "tooltipPosition", "selectedIcon", "cdnIconURL", "label", "labelFont", "labelWeight", "inputWeight", "labelSize", "labelColor", "showLabel", "required", "mode", "question", "options"], outputs: ["iconSelected"] }, { kind: "pipe", type: NxtCustomTranslatePipe, name: "nxtCustomTranslate" }] });
|
|
754
755
|
}
|
|
755
756
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, decorators: [{
|
|
756
757
|
type: Component,
|
|
757
758
|
args: [{ selector: 'lib-questionbook', standalone: true, imports: [
|
|
758
759
|
CommonModule,
|
|
759
760
|
FormsModule, ImageCropperComponent, NxtFileUploadComponent, CustomRadioComponent, CustomDropdownComponent, NxtButtonComponent, NxtSearchBox, NxtDatatable, PickLocationComponent, CustomModelComponent, CustomCalendarComponent, I18nPipe, MatTooltipModule, NxtInput, IconSelectorComponent, NxtCustomTranslatePipe
|
|
760
|
-
], template: "<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [style]=\"ques?.style?.questionStyle\">\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'RichTextArea' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' &&ques.type !== 'Email' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label'): (ques.style?.showLabel !== false && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{ (ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText}}\n <div *ngIf=\"ques.isOptional && !ques.isReadOnly\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n\n <!-- SKS11JUN25 for pick location -->\n <app-pick-location *ngIf=\"ques.type === 'Location'\" [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n <!-- MSM10JUL25 icon-selector -->\n <nxt-icon-selector [allIcons]=\"allIcons\" *ngIf=\"ques.type === 'Icon'\" [required]=\"ques.isOptional\" [mode]=\"isEdit !== true ? 'view' : 'edit'\" [question]=\"ques\" [labelFont]=\"ques.font\"\n [label]=\"(ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\" [labelWeight]=\"ques.fontWeight\" [showLabel]=\"ques.style?.showLabel\" (iconSelected)=\"childEventCapture($event, ques);\"></nxt-icon-selector>\n\n <!-- SKS21MAR25 line -->\n <hr *ngIf=\"ques.type === 'Line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS13MAR25 data table -->\n <nxt-datatable *ngIf=\"ques.type === 'Table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [tableConfig]=\"ques.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- list -->\n <nxt-search-box *ngIf=\"ques.type === 'List'\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" \n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (searchValueChange)=\"childEventCapture($event.value,$event.question)\">\n </nxt-search-box>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <app-custom-dropdown *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [question]=\"ques\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <app-file-upload *ngIf=\"ques.type === 'File'\" [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [allFiles]=\"ques.input\" (selectedFileData)=\"childEventCapture($event.value,$event.question)\"\n (deletedFileData)=\"deleteFile($event)\"\n ></app-file-upload>\n <!-- SKS11JUN25 Button -->\n <nxt-button\n *ngIf=\"ques.type === 'Button'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"ques?.question\"\n (buttonClickEmit)=\"childEventCapture($event, ques)\"\n >\n </nxt-button>\n <!-- SKS11JUN25 book type -->\n <lib-questionbook *ngIf=\"ques.type === 'Book'\" [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n <!-- SKS11JUN25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'Date' || ques.type === 'Time' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'Date' ? 'date' : ques.type === 'Time' ? 'time' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText): ''\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques?.question ? ((ques.id+'.question') | nxtCustomTranslate : ques?.question ): ''\"\n [required]=\"ques.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n [minDate]=\"ques.minDate\"\n [rows]=\"3\"\n (inputValue)=\"childEventCapture($event.value,$event.question)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.col-lg-6,.col-lg-4{padding-left:5px!important;padding-right:5px!important}.form-row{display:-ms-flexbox!important;display:flex!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"] }]
|
|
761
|
+
], template: "<!-- HA 18JAN24 Added class for styling -->\n<div [style]=\"bookStyle\" class=\"content-box form-group\">\n <div class=\"form-row\">\n <!-- HA 20DEC23 Directive and Question Style from salesforce -->\n <!-- RA09DEC24 Changed keys-->\n <div [class]=\"'col-lg-' + ques.size + ' paddingnone'\" *ngFor=\"let ques of questions;let i = index\"\n [id]=\"ques.id\" [style]=\"ques?.style?.questionStyle\">\n <!-- VD 09May24 is hide field change-->\n <div *ngIf=\"!ques.isHidden\" class=\"nxtInputContainer\">\n <!-- AP-28MAR25 Show label if enabled and not a Boolean type -->\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\"\n *ngIf=\"ques.style?.showLabel ? (ques.style?.showLabel && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'RichTextArea' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' &&ques.type !== 'Email' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label'): (ques.style?.showLabel !== false && ques.type !== 'Boolean' && ques.type !== 'Text' && ques.type !== 'List' && ques?.type !== 'Dropdown' && ques.type !== 'DateTime' && ques.type !== 'Location' && ques.type !== 'Number' && ques.type !== 'Date' && ques.type !== 'Time' && ques.type !== 'TextArea' && ques.type !== 'Label')\"\n [style]=\"ques.style?.labelStyle\">\n <span [class]=\"'dis-flex shengel-myt-font3 myt-font7 '\" [style]=\"ques.style?.labelValueStyle\"\n [ngStyle]=\"{\n 'font-family': ques.font,\n 'color': ques.fontColor,\n 'font-size': ques.fontSize,\n 'font-weight': ques.fontWeight\n }\">{{ ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText):''}}\n <div *ngIf=\"ques.isOptional && !ques.isReadOnly\" style=\"color: red;\">*</div>\n <!-- SKS13MAR25 only show on file type -->\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips help text -->\n <div *ngIf=\"ques.questionText && ques?.helpText && ques.type === 'File'\" class=\"icon\"\n [matTooltip]=\"ques?.helpText\" matTooltipClass=\"white-tooltip\">i</div>\n <!-- RS 17JAN2025 -->\n <!-- Displays icons with tooltips for file requirements -->\n <div class=\"icon\" *ngIf=\"ques.fieldsMeta && ques.type === 'File'\"\n [matTooltip]=\"getFileRequirements(ques.fieldsMeta)\" matTooltipClass=\"white-tooltip\"\n style=\"margin-left: 4px;\">i</div>\n </span>\n </div>\n <!-- calendar -->\n <div *ngIf=\"ques.type === 'Calendar'\">\n <app-custom-calendar [question]=\"ques\" (eventSelected)=\"getCalendarEvent($event)\"\n (dateSelected)=\"getCurrentCalendar($event)\" (openModal)=\"openCalendarModal($event)\"\n (closeModal)=\"closeCalendarModal($event)\"></app-custom-calendar>\n <!-- model used in calendar component -->\n <app-custom-model *ngIf=\"isCalendarModalOpen\" [modalTitle]=\"calendarModalTitle\"\n [isModalOpen]=\"isCalendarModalOpen\" [modalSize]=\"calendarModalSize\"\n [saveButtonValue]=\"calendarSaveButtonValue\" [modalFooter]=\"modalCalendarModalFooter\"\n (saveButtonEmit)=\"onCalendarModalSave()\" (cancelButtonEmit)=\"closeCalendarModal($event)\">\n <lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\"\n (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n </app-custom-model>\n </div>\n\n <!-- SKS11JUN25 for pick location -->\n <app-pick-location *ngIf=\"ques.type === 'Location'\" [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.selectedValue\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n\n <!-- SKS25MAR25 Image -->\n <div *ngIf=\"ques.type === 'Image'\" (mouseenter)=\"isImageHover = true;\"\n (mouseleave)=\"isImageHover = false;\">\n <div *ngIf=\"isImageHover\" style=\"display: flex; justify-content: end;\">\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageEdit(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.1067 6.07174L9.92833 4.8934L2.16667 12.6551V13.8334H3.345L11.1067 6.07174ZM12.285 4.8934L13.4633 3.71507L12.285 2.53674L11.1067 3.71507L12.285 4.8934ZM4.035 15.5001H0.5V11.9642L11.6958 0.768403C11.8521 0.612177 12.064 0.524414 12.285 0.524414C12.506 0.524414 12.7179 0.612177 12.8742 0.768403L15.2317 3.1259C15.3879 3.28218 15.4757 3.4941 15.4757 3.71507C15.4757 3.93604 15.3879 4.14796 15.2317 4.30424L4.03583 15.5001H4.035Z\"\n fill=\"#6C757D\" />\n </svg>\n <svg *ngIf=\"!ques.isReadOnly\" (click)=\"onImageDelete(ques)\" width=\"16\" height=\"16\"\n viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M14 3.98726C11.78 3.76726 9.54667 3.65393 7.32 3.65393C6 3.65393 4.68 3.7206 3.36 3.85393L2 3.98726\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M5.6665 3.31362L5.81317 2.44028C5.91984 1.80695 5.99984 1.33362 7.1265 1.33362H8.87317C9.99984 1.33362 10.0865 1.83362 10.1865 2.44695L10.3332 3.31362\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M12.5667 6.09375L12.1334 12.8071C12.06 13.8537 12 14.6671 10.14 14.6671H5.86002C4.00002 14.6671 3.94002 13.8537 3.86668 12.8071L3.43335 6.09375\"\n stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.88647 11.0004H9.10647\" stroke=\"#FF2C10\" stroke-width=\"1.5\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M6.3335 8.33325H9.66683\" stroke=\"#FF2C10\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </div>\n <img *ngIf=\"ques.isReadOnly\" [src]=\"ques.imageData\" />\n <div *ngIf=\"!ques.isReadOnly\" class=\"logo-container\">\n <!-- Logo preview area -->\n <div class=\"logo-preview\" *ngIf=\"ques.input\">\n <img [src]=\"ques.imageData\" />\n </div>\n\n <!-- Upload button -->\n <div *ngIf=\"!ques.imageData\" class=\"logo-upload-placeholder\">\n <label for=\"logo-upload-{{i}}\" class=\"logo-upload-label\">\n <img src=\"../assets/icons/Image.svg\" alt=\"Upload\" />\n <span>Upload Image</span>\n </label>\n <input type=\"file\" id=\"logo-upload-{{i}}\" accept=\"image/*\"\n (change)=\"fileChangeEvent(ques, $event)\" style=\"display: none;\" />\n </div>\n </div>\n </div>\n <!-- MSM10JUL25 icon-selector -->\n <nxt-icon-selector [allIcons]=\"allIcons\" *ngIf=\"ques.type === 'Icon'\" [required]=\"ques.isOptional\" [mode]=\"isEdit !== true ? 'view' : 'edit'\" [question]=\"ques\" [labelFont]=\"ques.font\"\n [label]=\" ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText): ''\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\" [labelWeight]=\"ques.fontWeight\" [showLabel]=\"ques.style?.showLabel\" (iconSelected)=\"childEventCapture($event, ques);\"></nxt-icon-selector>\n\n <!-- SKS21MAR25 line -->\n <hr *ngIf=\"ques.type === 'Line'\" class=\"custom-line\" style=\"display: inline-flex\" />\n <!-- SKS13MAR25 data table -->\n <nxt-datatable *ngIf=\"ques.type === 'Table'\" isEditRow isDeleteRow actionButton isButtons [question]=\"ques\" from=\"formBuilder\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\" [apiMeta]=\"ques.subText\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [tableConfig]=\"ques.tableConfig\" tableId=\"\" direction=\"ltr\" tableWidth=\"auto\">\n </nxt-datatable>\n <!-- list -->\n <nxt-search-box *ngIf=\"ques.type === 'List'\" [question]=\"ques\" [readOnly]=\"ques.isReadOnly\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [placeHolderText]=\"ques.question || ''\" \n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (searchValueChange)=\"childEventCapture($event.value,$event.question)\">\n </nxt-search-box>\n\n <!-- Dropdown -->\n <!-- HA 09FEB24 Added condition of sqOption to the dropdown -->\n <app-custom-dropdown *ngIf=\"ques?.type === 'Dropdown' && ques?.options\" [options]=\"ques.options\" [token]=\"token\" [apiMeta]=\"ques.subText\"\n [id]=\"ques.id\" [selectedValue]=\"qbItem.isShengel ? ques.input : ques.selectedValue\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\" [referenceField]=\"ques.referenceField\"\n [readOnly]=\"ques.isReadOnly\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <!-- // VD 02Aug24 custom-radio component -->\n <div *ngIf=\"ques.type === 'Radio' && ques?.options\" class=\"\">\n <app-custom-radio [options]=\"ques.options\" [question]=\"ques\" [token]=\"token\" [apiMeta]=\"ques.subText\" [id]=\"ques.id\"\n [selectedValue]=\"ques.selectedValue\" [errorMessage]=\"ques.errorMessage\" [error]=\"ques.error\"\n [referenceField]=\"ques.referenceField\" [readOnly]=\"ques.isReadOnly\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n (valueChange)=\"childEventCapture($event.value,$event.question); clearSQError(ques.id)\">\n </app-custom-radio>\n </div>\n\n <!-- Attachment / Files -->\n <app-file-upload *ngIf=\"ques.type === 'File'\" [limitFileUploading]=\"5\" [error]=\"ques.error\" [question]=\"ques\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [allFiles]=\"ques.input\" (selectedFileData)=\"childEventCapture($event.value,$event.question)\"\n (deletedFileData)=\"deleteFile($event)\"\n ></app-file-upload>\n <!-- SKS11JUN25 Button -->\n <nxt-button\n *ngIf=\"ques.type === 'Button'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [btnHeight]=\"'50px'\" [btnWidth]=\"'150px'\" [buttonValue]=\"ques?.question\"\n (buttonClickEmit)=\"childEventCapture($event, ques)\"\n >\n </nxt-button>\n <!-- SKS11JUN25 book type -->\n <lib-questionbook *ngIf=\"ques.type === 'Book'\" [qbItem]=\"ques.qbItem\" [labelValue]=\"labelValue\"\n [questions]=\"readQuestions(ques.qbReference, ques.qbReferenceQuestions)\"\n (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n <!-- SKS11JUN25 Text, Email, label, number, Boolean, rich text editor, DateTime, Date, Time-->\n <nxt-input *ngIf=\"ques.type === 'Text' || ques.type === 'Email' || ques.type === 'Number' || ques.type === 'Label' || ques.type === 'Boolean' || ques.type === 'RichTextArea' || ques.type === 'DateTime' || ques.type === 'Date' || ques.type === 'Time' || ques.type === 'TextArea'\"\n [type]=\"ques.type === 'Text' ? 'text' : ques.type === 'Email' ? 'email' : ques.type === 'Number' ? 'number' : ques.type === 'Label' ? 'label' : ques.type === 'Boolean' ? 'checkbox' : ques.type === 'RichTextArea' ? 'richtext' : ques.type === 'DateTime' ? 'datetime' : ques.type === 'Date' ? 'date' : ques.type === 'Time' ? 'time' : ques.type === 'TextArea' ? 'textarea' : 'text'\"\n [mode]=\"isEdit !== true ? 'view' : 'edit'\"\n [value]=\"ques.input\"\n [question]=\"ques\"\n [labelFont]=\"ques.font\"\n [label]=\"ques?.questionText ? ((ques.id+'.questionText') | nxtCustomTranslate : ques?.questionText): ''\"\n [labelColor]=\"ques.fontColor\"\n [labelSize]=\"ques.fontSize\"\n [inputValueSize]=\"ques.fontSize\"\n [labelWeight]=\"ques.fontWeight\"\n [inputWeight]=\"ques.fontWeight\"\n [showLabel]=\"ques.style?.showLabel\"\n inputBorder=\"none\" svgHeight=\"20px\" svgWidth=\"20px\"\n [placeholder]=\"ques?.question ? ((ques.id+'.question') | nxtCustomTranslate : ques?.question ): ''\"\n [required]=\"ques.isOptional\" inputBgColor=\"#FAFAFA\"\n [inputId]=\"ques.trackingId\"\n [errorMessages]=\"{ required: 'This field is required' }\"\n [inputIconLeftSrc]=\"ques.iconLeftSrc\" \n [minDate]=\"ques.minDate\"\n [rows]=\"3\"\n (inputValue)=\"childEventCapture($event.value,$event.question)\"\n >\n </nxt-input>\n </div>\n </div>\n </div>\n</div>\n\n<!--SKS25MAR25 Modal Overlay -->\n<div class=\"modal-overlay\" *ngIf=\"isImageEdit\">\n <div class=\"modal-content\">\n <span class=\"close-button\" (click)=\"closeModal()\">\u00D7</span>\n\n <!-- Image Editor -->\n <div *ngIf=\"selectedImageElement?.type === 'Image'\">\n <image-cropper *ngIf=\"selectedImageElement.imageData\" [imageBase64]=\"selectedImageElement.orgImageData\"\n [disabled]=\"false\" [alignImage]=\"alignImage\" [roundCropper]=\"roundCropper\" [backgroundColor]=\"'white'\"\n imageAltText=\"Alternative image text\" [allowMoveImage]=\"false\" [hideResizeSquares]=\"false\"\n [canvasRotation]=\"canvasRotation\" [aspectRatio]=\"aspectRatio\" [containWithinAspectRatio]=\"false\"\n [maintainAspectRatio]=\"false\" [cropperStaticWidth]=\"cropperStaticWidth\"\n [cropperStaticHeight]=\"cropperStaticHeight\" [cropperMinWidth]=\"cropperMinWidth\"\n [cropperMinHeight]=\"cropperMinHeight\" [cropperMaxWidth]=\"cropperMaxWidth\"\n [cropperMaxHeight]=\"cropperMaxHeight\" [resetCropOnAspectRatioChange]='true' [(cropper)]=\"cropper\"\n [(transform)]=\"transform\" [onlyScaleDown]=\"true\" output=\"blob\" format=\"png\"\n (imageCropped)=\"imageCropped($event)\" (cropperReady)=\"cropperReady($event)\">\n </image-cropper>\n\n <!-- Controls -->\n <div *ngIf=\"selectedImageElement.imageData\" class=\"controls\">\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateLeft()\" title=\"Rotate Left\">\u27F2</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"rotateRight()\" title=\"Rotate Right\">\u27F3</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomOut()\" title=\"Zoom Out\">-</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"zoomIn()\" title=\"Zoom In\">+</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveLeft()\" title=\"Move Left\">\u2190</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveRight()\" title=\"Move Right\">\u2192</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveUp()\" title=\"Move Up\">\u2191</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"moveDown()\" title=\"Move Down\">\u2193</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipHorizontal()\" [class.enabled]=\"transform.flipH\"\n title=\"Flip Horizontally\">\u2194</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"flipVertical()\" [class.enabled]=\"transform.flipV\"\n title=\"Flip Vertically\">\u2195</div>\n <div class=\"cursor-pointer logo-icon\" (click)=\"resetImage()\" title=\"Reset\">\u00D7</div>\n </div>\n </div>\n </div>\n</div>", styles: [".col-lg-6{width:100%}.myt-font7{display:flex;justify-content:flex-start;align-items:center}.icon{display:inline-block;width:15px;height:15px;border-radius:50%;background-color:#08010177;color:#fff;text-align:center;line-height:16px;font-size:11px;font-family:Arial,sans-serif;font-weight:700;margin-left:5px}@media (min-width: 1200px){.col-lg-6{width:50%!important}.col-lg-6,.col-lg-4{padding-left:5px!important;padding-right:5px!important}.form-row{display:-ms-flexbox!important;display:flex!important;-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}}.icon{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background-color:#f5f5f5;border:1px solid #ddd;color:#666;margin-left:4px;font-size:12px;cursor:pointer!important}::ng-deep .mat-tooltip-panel{background:#fff!important}::ng-deep .mat-tooltip{background-color:#fff!important;color:#333!important;white-space:pre-line!important;line-height:1.5!important}.mat-tooltip{padding:8px 16px!important}::ng-deep .white-tooltip{white-space:pre-line!important;line-height:1.5!important}.nxtInputContainer div{padding-left:5px;padding-right:5px}.custom-line{width:100%;border:1px solid #000}.modal-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:#fff;padding:20px;width:500px;max-width:90%;border-radius:8px;position:relative;text-align:center}.close-button{position:absolute;top:6px;right:6px;font-size:25px;cursor:pointer;z-index:10}.controls{display:flex;gap:5px;justify-content:center;margin-top:10px}.logo-icon{cursor:pointer;padding:5px;border-radius:5px;background:#d3d3d3}.logo-icon:hover{background:#a9a9a9}.enabled{background:#007bff;color:#fff}input[type=checkbox]{width:21px}.boolean-question{display:flex;align-items:center;gap:10px;padding-top:14px;padding-bottom:12px}.form-control[disabled]{border-radius:5px;background-color:#e9ecef!important}\n"] }]
|
|
761
762
|
}], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.StorageService }, { type: i5.I18nService }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
|
|
762
763
|
type: Inject,
|
|
763
764
|
args: [DOCUMENT]
|
|
@@ -800,4 +801,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
800
801
|
}], handleCalendarEvent: [{
|
|
801
802
|
type: Output
|
|
802
803
|
}] } });
|
|
803
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0RSxNQUFNLGVBQWUsQ0FBQztBQUVqSyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDLENBQUMsb0NBQW9DO0FBS3BJLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7Ozs7QUFZMUUsTUFBTSxPQUFPLHFCQUFxQjtJQXVGWjtJQUNWO0lBQ0E7SUFDQTtJQUNEO0lBQ0M7SUFDa0I7SUE1Rm5CLE1BQU0sQ0FBZTtJQUNyQixZQUFZLENBQVc7SUFDdkIsU0FBUyxDQUFRO0lBQ2pCLFlBQVksQ0FBTTtJQUNsQixVQUFVLENBQVM7SUFDbkIsS0FBSyxDQUFTLENBQUMsc0NBQXNDO0lBQ3JELE1BQU0sQ0FBVTtJQUNmLGNBQWMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUM1RCxjQUFjLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUMsQ0FBQyxvQ0FBb0M7SUFDakcscUJBQXFCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEUsWUFBWSxDQUFNO0lBQ2xCLFFBQVEsQ0FBTTtJQUNkLFFBQVEsR0FBVSxFQUFFLENBQUMsQ0FBQywwQ0FBMEM7SUFDaEUsVUFBVSxDQUFTLENBQUMsMENBQTBDO0lBQzlELFVBQVUsR0FBVyxFQUFFLENBQUMsQ0FBQywwQ0FBMEM7SUFDbkUsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQiwyRkFBMkY7SUFDM0YsWUFBWSxDQUFhO0lBQ3pCLGdCQUFnQixHQUFVLEVBQUUsQ0FBQztJQUM3QixjQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDckQsdUVBQXVFO0lBQ3ZFLEtBQUssQ0FBZTtJQUNwQixpREFBaUQ7SUFDakQsS0FBSyxDQUFNO0lBQ1gsU0FBUyxDQUFNO0lBQ2YsWUFBWSxDQUFlO0lBQzNCLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0Isb0JBQW9CLENBQU07SUFDMUIsU0FBUyxHQUFtQjtRQUMxQixhQUFhLEVBQUUsSUFBSTtRQUNuQixLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sRUFBRSxDQUFDO1FBQ1QsS0FBSyxFQUFFLEtBQUs7UUFDWixLQUFLLEVBQUUsS0FBSztRQUNaLFVBQVUsRUFBRSxDQUFDO1FBQ2IsVUFBVSxFQUFFLENBQUM7S0FDZCxDQUFDO0lBQ0YsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUNuQixPQUFPLENBQW1CO0lBQzFCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFDcEIsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFDcEIsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLG1CQUFtQixHQUFHLENBQUMsQ0FBQztJQUN4QixXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLGlCQUFpQixHQUFpQixJQUFJLENBQUM7SUFDdkMsVUFBVSxHQUFHLFFBQWlCLENBQUM7SUFDL0IsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUVyQixlQUFlO0lBQ2YsaUVBQWlFO0lBQ2pFLG1CQUFtQixDQUFDLFVBQWU7UUFDakMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxVQUFVLEtBQUssUUFBUSxDQUFFLENBQUMsQ0FBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUU7WUFDekYsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9CLElBQUksQ0FBQyxVQUFVO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBRTNCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUV4QixJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3BDLFlBQVksQ0FBQyxJQUFJLENBQUMscUJBQXFCLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvRSxDQUFDO1lBRUQsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNCLFlBQVksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLFVBQVUsQ0FBQyxXQUFXLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQztZQUNwRixDQUFDO1lBRUQsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLFlBQVksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7WUFFRCxPQUFPLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFDUyxzQkFBc0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUN6RSw4QkFBOEI7SUFDcEIsa0JBQWtCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDM0QsbUJBQW1CLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDL0QsZ0JBQWdCLEdBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN6QyxZQUFvQixTQUE0QixFQUN0QyxXQUF3QixFQUN4QixhQUE0QixFQUM1QixjQUE4QixFQUMvQixXQUF3QixFQUN2QixHQUFzQixFQUNKLFFBQWtCO1FBTjFCLGNBQVMsR0FBVCxTQUFTLENBQW1CO1FBQ3RDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN2QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNKLGFBQVEsR0FBUixRQUFRLENBQVU7SUFFOUMsQ0FBQztJQUVELFFBQVE7UUFDTixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLCtEQUErRDtRQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FDNUQsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNkLElBQUksV0FBVyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWU7UUFDYiwrRUFBK0U7UUFDOUUsb0ZBQW9GO1FBQ3JGLDBCQUEwQjtRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLElBQUksRUFBRSxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUNsRyxJQUFJLE1BQU0sR0FBUSxJQUFJLENBQUMsT0FBTyxDQUFBO2dCQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QixJQUFJLEtBQVUsQ0FBQztnQkFDZixLQUFLLEdBQUcsRUFBRSxDQUFBO2dCQUNWLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLEVBQUUsWUFBWSxJQUFJLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQTtnQkFDcEYsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUssSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUE7Z0JBQzFULEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFBO2dCQUNyRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQTtnQkFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBUztRQUN4Qix1REFBdUQ7UUFDdkQsdURBQXVEO1FBQ3ZELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUM5QixJQUFJLEtBQUssR0FBUSxHQUFHLENBQUM7Z0JBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO3dCQUN0RCxzQ0FBc0M7d0JBQ3RDLDZDQUE2Qzt3QkFDN0Msa0VBQWtFO3dCQUNsRSxrRkFBa0Y7d0JBQ2xGLE1BQU07d0JBQ04sTUFBTTtvQkFDUixDQUFDO29CQUNELDBDQUEwQzt5QkFDckMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO3dCQUN6RCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFLLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQ2pFLENBQUM7b0JBQ0Qsc0NBQXNDO3lCQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7d0JBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7d0JBQ3hDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO29CQUN4RixDQUFDO29CQUNELDhDQUE4Qzt5QkFDekMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUNsQyxJQUFJLE9BQU8sR0FBRyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQzt3QkFDM0csSUFBSSxPQUFPLEVBQUUsQ0FBQzs0QkFDWixJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQzs0QkFDNUIsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dDQUN2QixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29DQUN4QixJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO3dDQUM5QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3dDQUN2RCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO29DQUNoRCxDQUFDO2dDQUNILENBQUMsQ0FBQyxDQUFDOzRCQUNMLENBQUM7NEJBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0NBQ2xDLEtBQUssRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7b0NBQzdCLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQ0FDeEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7d0NBQ3pDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7NENBQzlDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnREFDakMsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLENBQUMsRUFBRSxDQUFDO29EQUM5QixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFLENBQUM7d0RBQzlFLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztvREFDN0QsQ0FBQztvREFBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7d0RBQzFELEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO3dEQUN4QixLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSyxJQUFJLENBQUMsWUFBWSxDQUFDO29EQUN4QyxDQUFDO3lEQUFNLENBQUM7d0RBQ04sS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztvREFDdkMsQ0FBQztnREFDSCxDQUFDOzRDQUNILENBQUMsQ0FBQyxDQUFDO3dDQUNMLENBQUM7d0NBQ0QsNEZBQTRGO29DQUM5RixDQUFDLENBQUMsQ0FBQTtvQ0FDRiw2RkFBNkY7Z0NBQy9GLENBQUMsQ0FBQyxDQUFDOzRCQUNMLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO29CQUNELGtDQUFrQzt5QkFDN0IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO3dCQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzt3QkFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ3JCLENBQUM7eUJBQ0ksQ0FBQzt3QkFDSixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO29CQUMxQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUNJLENBQUM7WUFDSixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNwRCx1Q0FBdUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUM3QixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNuRSxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDL0Isa0NBQWtDO2dCQUNsQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7WUFDeEUsQ0FBQztZQUNELFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzdCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDakQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxFQUFFLGNBQWMsQ0FBQztZQUNsRCxRQUFRLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFFLGlEQUFpRDtRQUNyRyxDQUFDO0lBQ0gsQ0FBQztJQUNGLDZFQUE2RTtJQUM3RSxhQUFhLENBQUMsR0FBUSxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsY0FBYyxHQUFHLElBQUk7UUFDNUQsSUFBSSxNQUFNLEdBQVUsRUFBRSxDQUFDO1FBRXZCLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBRXJELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7Z0JBRWpELEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQzFCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQzt3QkFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7b0JBQ3RHLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztvQkFDakYsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNuRCxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7Z0JBQ3BELENBQUM7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMseUJBQXlCO1lBQ25GLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0I7WUFDdEQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQ0MscUJBQXFCO0lBQ3JCLDBCQUEwQjtJQUMxQixXQUFXO1FBQ1QsMERBQTBEO1FBQzFELDJCQUEyQjtRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDdkIsdUVBQXVFO1lBQ3ZFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNwSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNuRyxDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRztvQkFDbEIsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLFlBQVksRUFBRSxFQUFFO29CQUNoQixpQkFBaUIsRUFBRSxFQUFFO29CQUNyQixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLFdBQVcsRUFBRSxFQUFFO29CQUNmLFdBQVcsRUFBRSxJQUFJO29CQUNqQixXQUFXLEVBQUUsS0FBSztvQkFDbEIsZUFBZSxFQUFFLEVBQUU7aUJBQ3BCLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQy9CLElBQUksV0FBVyxHQUFHLE9BQU8sRUFBRSxZQUFZLENBQUM7WUFDeEMsSUFBSSxRQUFRLEdBQUcsV0FBVyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDbkQsT0FBTyxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUM7WUFDaEMscURBQXFEO1lBQ3JELHVFQUF1RTtZQUN2RSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzVCLElBQUksT0FBTyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxFQUFFLEdBQUcsT0FBTyxPQUFPLENBQUMsc0JBQXNCLENBQUMsS0FBSyxRQUFRLENBQUUsQ0FBQyxDQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUU7b0JBQ2pKLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUM3QixFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxHQUFHLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDakosQ0FBQzt5QkFDSSxDQUFDO3dCQUNKLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0JBQy9DLENBQUM7b0JBRUQsNkJBQTZCO29CQUM3QixFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdkgsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZILEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNySSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDdkgsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZILEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNwSCxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDdEgsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBRWhJLHFDQUFxQztvQkFDckMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRTt3QkFDM0QsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDO3dCQUNwRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDakgsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2pILGdCQUFnQixDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNoSSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDakgsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQ2pILGdCQUFnQixDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUM5RyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDaEgsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQzVILENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1lBRTFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RGLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25GLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JGLE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRS9GLDhDQUE4QztZQUM5QywwQkFBMEI7WUFDekIsb0ZBQW9GO1lBQ3JGLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUMzQixPQUFPLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDaEQsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxPQUFPLEVBQUUsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDOUcsSUFBSSxhQUFhLEdBQW1CLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ3BELElBQUksYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ25DLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixDQUFDO2dCQUNELHVDQUF1QztnQkFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FDL0QsQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDZCx1Q0FBdUM7b0JBQ3ZDLElBQUksV0FBVyxJQUFJLFNBQVMsSUFBSSxhQUFhLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDL0QsSUFBSSxXQUFXLENBQUMsY0FBYyxJQUFJLFdBQVcsQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLENBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQSxDQUFDLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEtBQUssYUFBYSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQzs0QkFDOVAsZ0NBQWdDOzRCQUNoQyxJQUFJLGFBQWEsQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dDQUN6RCxPQUFPLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQ0FDekIsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0NBQ25CLE9BQU8sQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO2dDQUNsQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO29DQUN2RCxPQUFPLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUM7Z0NBQ3RELENBQUM7NEJBQ0gsQ0FBQztpQ0FBTSxDQUFDO2dDQUNOLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dDQUN4QixPQUFPLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQ0FDbkIsT0FBTyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7Z0NBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0NBQ3ZDLDBEQUEwRDtnQ0FDMUQsSUFBSSxPQUFPLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQ0FDdkQsT0FBTyxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7Z0NBQzlCLENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQyxDQUNGLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELGlCQUFpQjtZQUNqQixxQ0FBcUM7WUFDckMseUNBQXlDO1lBQ3pDLElBQUk7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCx1Q0FBdUM7SUFDdEMsb0ZBQW9GO0lBQ3JGLHFCQUFxQixDQUFDLFNBQVM7UUFDN0IsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDOUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2YsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxFQUFFLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFGLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLFNBQVMsQ0FBQztZQUNwSSxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUVILGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDMUIsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDbkIsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDZCxFQUFFLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvQixrREFBa0Q7WUFDbEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDSCxpRUFBaUU7SUFDL0QsWUFBWSxDQUFDLE1BQU07UUFDakIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFFLEtBQUssSUFBSSxFQUFFLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdEIsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsT0FBTztRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFVO1FBQ2pDLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNwRCwyQ0FBMkM7Z0JBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDNUQsbUNBQW1DO2dCQUNuQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDdkMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3pDLENBQUMsQ0FBRSxzQ0FBc0M7WUFDM0MsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFBLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3JFLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzVFLGdDQUFnQztnQkFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN6RixrQ0FBa0M7b0JBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUM3RCxDQUFDO3FCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyRixtQ0FBbUM7b0JBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixDQUFDO2dCQUNELGlFQUFpRTtnQkFDakUsSUFBSSxLQUFLLEVBQUUsZ0JBQWdCLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDakUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7Z0JBQ25GLENBQUM7WUFDSCxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLGlEQUFpRDtnQkFDNUcsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQzt3QkFDekQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO3dCQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztvQkFDM0IsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUNwQixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztZQUNILENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixtRUFBbUU7Z0JBQ25FLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNwTCxDQUFDLENBQUEsWUFBWTtpQkFDUixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUM7WUFDdEMsQ0FBQyxDQUFBLDBCQUEwQjtpQkFDdEIsSUFBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNoQyxDQUFDO1lBQ0Qsb0JBQW9CO1lBQ3BCLCtCQUErQjtpQkFDMUIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEMsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDbkMsQ0FBQztpQkFDSSxDQUFDO2dCQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUM5QixDQUFDO1lBQ0QsWUFBWTtZQUNaLHdEQUF3RDtZQUN4RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQ3BDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO2dCQUNqRCxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssY0FBYyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQzNFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQ3RFLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xELElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbEQsNkZBQTZGO1lBQzdGLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLG9DQUFvQztZQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBRyxJQUFJLEVBQUUsaUJBQWlCLEVBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFDRCxVQUFVLENBQUMsUUFBYTtJQUN4QixDQUFDO0lBQ0QsV0FBVyxDQUFDLEtBQVU7UUFDcEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsOEJBQThCO0lBQzlCLGtCQUFrQixDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBVTtRQUN6QixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUNELGlCQUFpQjtJQUNqQixnQ0FBZ0M7SUFDaEMsZ0VBQWdFO0lBQ2hFLDBCQUEwQjtJQUMxQixnQ0FBZ0M7SUFDaEMsc0ZBQXNGO0lBQ3RGLDZDQUE2QztJQUM3QyxvR0FBb0c7SUFDcEcsaUdBQWlHO0lBQ2pHLE1BQU07SUFDTixJQUFJO0lBRUosbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQzVCLGtCQUFrQixDQUFNO0lBQ3hCLGlCQUFpQixDQUFNO0lBQ3ZCLHVCQUF1QixDQUFNO0lBQzdCLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUN4QixjQUFjLENBQU07SUFDcEIsd0JBQXdCLENBQU07SUFFOUIsaUJBQWlCLENBQUMsS0FBSztRQUNyQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQ3JELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBQ3BELENBQUM7SUFHRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBR0QsbUJBQW1CLENBQUMsS0FBSztJQUN6QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBSztRQUN0QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFTLEVBQUUsS0FBVTtRQUN6QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDO2dCQUNILE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7Z0JBQzlCLDBDQUEwQztnQkFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUMvQyxDQUFDO2dCQUVELE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVU7UUFDbEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFnQixDQUFDLENBQUM7WUFDdkQsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFTO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUNELEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBUztRQUMzQixJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QiwwQ0FBMEM7WUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQy9DLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxjQUFjO1FBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDakIsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSztTQUM3QixDQUFDO0lBQ0osQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsYUFBYSxFQUFFLElBQUk7WUFDbkIsS0FBSyxFQUFFLENBQUM7WUFDUixNQUFNLEVBQUUsQ0FBQztZQUNULEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLEtBQUs7WUFDWixVQUFVLEVBQUUsQ0FBQztZQUNiLFVBQVUsRUFBRSxDQUFDO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBTSxHQUFHLEVBQUU7U0FDbEMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBTSxHQUFHLEVBQUU7U0FDbEMsQ0FBQztJQUNKLENBQUM7SUFDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFXLEdBQUcsQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFXLEdBQUcsQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFXLEdBQUcsQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFXLEdBQUcsQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUNPLGVBQWU7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDakIsS0FBSyxFQUFFLFFBQVE7WUFDZixLQUFLLEVBQUUsUUFBUTtZQUNmLFVBQVUsRUFBRSxDQUFDO1lBQ2IsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUNELEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBVTtRQUMzQixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7WUFDN0MsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUdELFlBQVksQ0FBQyxxQkFBaUM7UUFDNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUNELHVDQUF1QztJQUN2QyxtQkFBbUIsQ0FBQyxTQUFpQjtRQUNuQyxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUM7YUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNYLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFnQixDQUFDLENBQUM7Z0JBQzFELE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxhQUFhLENBQUMsSUFBUyxFQUFFLElBQVE7UUFDL0IsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLG1DQUFtQztRQUNuQyxLQUFLLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4RCxJQUFJLENBQUMsR0FBYSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELCtCQUErQjtZQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNKLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO3dHQXp1QlUscUJBQXFCLHFNQTZGdEIsUUFBUTs0RkE3RlAscUJBQXFCLHlwQkN4Q2xDLDh2akJBaU9NLGlnRUR6TE8scUJBQXFCLDhYQU45QixZQUFZLGtiQUNaLFdBQVcsK0JBQUUscUJBQXFCLHN6QkFBRSxzQkFBc0IsbU5BQUUsb0JBQW9CLGdRQUFFLHVCQUF1QiwwUkFBRSxrQkFBa0Isa2FBQUUsWUFBWSxpTEFBRSxZQUFZLCs3QkFBRSxxQkFBcUIsd0pBQUUsb0JBQW9CLG9NQUFFLHVCQUF1Qiw4S0FBRSxRQUFRLDRDQUFFLGdCQUFnQiw2VEFBRSxRQUFRLDYwQkFBRSxxQkFBcUIsMFRBQUUsc0JBQXNCOzs0RkFLM1MscUJBQXFCO2tCQVZqQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixXQUFXLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQjtxQkFDclQ7OzBCQWlHRSxNQUFNOzJCQUFDLFFBQVE7eUNBNUZULE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFrRUksc0JBQXNCO3NCQUEvQixNQUFNO2dCQUVHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIFZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIFNpbXBsZUNoYW5nZXMsIENvbXBvbmVudFJlZiwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVlc3Rpb24sIFF1ZXN0aW9uQm9vayB9IGZyb20gJy4uLy4uL3dyYXBwZXInO1xuaW1wb3J0IHsgRXJyb3JXcmFwcGVyIH0gZnJvbSAnLi4vLi4vbW9kZWwvZXJyb3JXcmFwcGVyJztcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi9pMThuLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVwZW5kZW5jeU1ldGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RlcGVuZGVuY3lNZXRhJztcbmltcG9ydCB7IENyb3BwZXJQb3NpdGlvbiwgRGltZW5zaW9ucywgSW1hZ2VUcmFuc2Zvcm0gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEltYWdlQ3JvcHBlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaW1hZ2UtY3JvcHBlci9jb21wb25lbnQvaW1hZ2UtY3JvcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tUmFkaW9Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1yYWRpby9jdXN0b20tcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IE54dEZpbGVVcGxvYWRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21Ecm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLWRyb3Bkb3duL2N1c3RvbS1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnh0U2VhcmNoQm94IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zZWFyY2gtYm94L3NlYXJjaC1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IE54dERhdGF0YWJsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGlja0xvY2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9waWNrLWxvY2F0aW9uL3BpY2stbG9jYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbU1vZGVsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tbW9kZWwvY3VzdG9tLW1vZGVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21DYWxlbmRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLWNhbGVuZGFyL2N1c3RvbS1jYWxlbmRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSTE4blBpcGUgfSBmcm9tICcuLi8uLi9pMThuLnBpcGUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTnh0SW5wdXQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL254dC1pbnB1dC9ueHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE54dEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYnV0dG9uL254dC1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IEljb25TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaWNvbi1zZWxlY3Rvci9pY29uLXNlbGVjdG9yLmNvbXBvbmVudCc7IC8vTVNNMTBKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudFxuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zYWxlc2ZvcmNlL3NhbGVzZm9yY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2UvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBOeHRDdXN0b21UcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZS9jdXN0b20tdHJhbnNsYXRlLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcXVlc3Rpb25ib29rJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSwgSW1hZ2VDcm9wcGVyQ29tcG9uZW50LCBOeHRGaWxlVXBsb2FkQ29tcG9uZW50LCBDdXN0b21SYWRpb0NvbXBvbmVudCwgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQsIE54dEJ1dHRvbkNvbXBvbmVudCwgTnh0U2VhcmNoQm94LCBOeHREYXRhdGFibGUsIFBpY2tMb2NhdGlvbkNvbXBvbmVudCwgQ3VzdG9tTW9kZWxDb21wb25lbnQsIEN1c3RvbUNhbGVuZGFyQ29tcG9uZW50LCBJMThuUGlwZSwgTWF0VG9vbHRpcE1vZHVsZSwgTnh0SW5wdXQsIEljb25TZWxlY3RvckNvbXBvbmVudCwgTnh0Q3VzdG9tVHJhbnNsYXRlUGlwZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbmJvb2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgQElucHV0KCkgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcbiAgQElucHV0KCkgcXVlc3Rpb25zOiBhbnlbXTtcbiAgQElucHV0KCkgZXJyb3JGaWVsZElkOiBhbnk7XG4gIEBJbnB1dCgpIGxhYmVsVmFsdWU6IHN0cmluZztcbiAgQElucHV0KCkgdG9rZW46IHN0cmluZzsgLy8gVkQgMTlKQU4yNCAtIGdldHRpbmcgdG9rZW4gYXMgaW5wdXRcbiAgQElucHV0KCkgaXNFZGl0OiBib29sZWFuO1xuICBAT3V0cHV0KCkgaGFuZGxlRHJvcERvd246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTsgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gIEBPdXRwdXQoKSBzaW5nbGVGaWVsZENoYW5nZUVtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIGRyb3BEb3duRGF0YTogYW55O1xuICBASW5wdXQoKSBkYXRhQmluZDogYW55O1xuICBASW5wdXQoKSBhbGxJY29uczogYW55W10gPSBbXTsgLy9NU00xMEpVTDI1IGljb24gc2VsZWN0b3IgY29tcG9uZW50IGlucHV0XG4gIEBJbnB1dCgpIHRoZW1lQ29sb3I6IHN0cmluZzsgLy9NU00xMEpVTDI1IGljb24gc2VsZWN0b3IgY29tcG9uZW50IGlucHV0XG4gIEBJbnB1dCgpIGNkbkljb25VUkw6IHN0cmluZyA9ICcnOyAvL01TTTEwSlVMMjUgaWNvbiBzZWxlY3RvciBjb21wb25lbnQgaW5wdXRcbiAgQElucHV0KCkgZGlyZWN0aW9uID0gJ2x0cic7IFxuICAvL0BWaWV3Q2hpbGQoQ29tcG9uZW50aG9zdERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZHluYW1pY0hvc3Q6IENvbXBvbmVudGhvc3REaXJlY3RpdmU7XG4gIHN1YlF1ZXN0aW9uczogUXVlc3Rpb25bXTtcbiAgc2VsZWN0ZWRGaWxlRGF0YTogYW55W10gPSBbXTtcbiAgbG9hZENvbXBvbmVudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgcWJSZWY6IFF1ZXN0aW9uQm9vaztcbiAgLy8gIEhBIDE5REVDMjMgRGVjbGFyYXRpb24gZm9yIFNhbGVzZm9yY2UgU3R5bGluZ1xuICBzdHlsZTogYW55O1xuICBib29rU3R5bGU6IGFueTtcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIGlzSW1hZ2VFZGl0OiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkSW1hZ2VFbGVtZW50OiBhbnk7XG4gIHRyYW5zZm9ybTogSW1hZ2VUcmFuc2Zvcm0gPSB7XG4gICAgdHJhbnNsYXRlVW5pdDogJ3B4JyxcbiAgICBzY2FsZTogMSxcbiAgICByb3RhdGU6IDAsXG4gICAgZmxpcEg6IGZhbHNlLFxuICAgIGZsaXBWOiBmYWxzZSxcbiAgICB0cmFuc2xhdGVIOiAwLFxuICAgIHRyYW5zbGF0ZVY6IDBcbiAgfTtcbiAgY2FudmFzUm90YXRpb24gPSAwO1xuICBjcm9wcGVyPzogQ3JvcHBlclBvc2l0aW9uO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIGNyb3BwZXJNYXhIZWlnaHQgPSAwO1xuICBjcm9wcGVyTWF4V2lkdGggPSAwO1xuICBjcm9wcGVyTWluSGVpZ2h0ID0gMDtcbiAgY3JvcHBlck1pbldpZHRoID0gMDtcbiAgY3JvcHBlclN0YXRpY1dpZHRoID0gMDtcbiAgY3JvcHBlclN0YXRpY0hlaWdodCA9IDA7XG4gIGFzcGVjdFJhdGlvID0gNCAvIDM7XG4gIHJvdW5kQ3JvcHBlciA9IGZhbHNlO1xuICBpbWFnZUNoYW5nZWRFdmVudDogRXZlbnQgfCBudWxsID0gbnVsbDtcbiAgYWxpZ25JbWFnZSA9ICdjZW50ZXInIGFzIGNvbnN0O1xuICBpc0ltYWdlSG92ZXIgPSBmYWxzZTtcblxuICAvLyBSUyAxN0pBTjIwMjVcbiAgLy9Gb3JtYXRzIGFuZCByZXR1cm5zIGZpbGUgdXBsb2FkIHJlcXVpcmVtZW50cyBmcm9tIGEgSlNPTiBzdHJpbmdcbiAgZ2V0RmlsZVJlcXVpcmVtZW50cyhmaWVsZHNNZXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtZXRhRGF0YSA9IHR5cGVvZiBmaWVsZHNNZXRhID09PSAnb2JqZWN0JyAgPyAgZmllbGRzTWV0YSA6IEpTT04ucGFyc2UoZmllbGRzTWV0YSkgO1xuICAgICAgY29uc3QgZmlsZUNvbmZpZyA9IG1ldGFEYXRhWzBdO1xuXG4gICAgICBpZiAoIWZpbGVDb25maWcpIHJldHVybiAnJztcblxuICAgICAgY29uc3QgcmVxdWlyZW1lbnRzID0gW107XG5cbiAgICAgIGlmIChmaWxlQ29uZmlnLmFsbG93ZWRUeXBlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBBY2NlcHRlZCBmb3JtYXRzOiAke2ZpbGVDb25maWcuYWxsb3dlZFR5cGVzLmpvaW4oJywgJyl9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlQ29uZmlnLm1heEZpbGVTaXplKSB7XG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBNYXhpbXVtIHNpemUgcGVyIGZpbGU6ICR7ZmlsZUNvbmZpZy5tYXhGaWxlU2l6ZSAvIDEwNDg1NzZ9TUJgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVDb25maWcubWF4RmlsZXMpIHtcbiAgICAgICAgcmVxdWlyZW1lbnRzLnB1c2goYE1heGltdW0gbnVtYmVyIG9mIGZpbGVzOiAke2ZpbGVDb25maWcubWF4RmlsZXN9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXF1aXJlbWVudHMubWFwKHJlcSA9PiByZXEudHJpbSgpKS5qb2luKCdcXG4nKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBmaWVsZHNNZXRhOicsIGVycm9yKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbiAgQE91dHB1dCgpIGhhZGxlRHJvcERvd25EZXBlbmRlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiAgQE91dHB1dCgpIGhhbmRsZUNhbGVuZGFyRGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVDYWxlbmRhckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIGJvb2tRdWVzdGlvbnNNYXA6IGFueSA9IG5ldyBNYXAoKTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudFxuICApIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFZEIDEzU2VwMjQgY2hhbmdlc1xuICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcbiAgICAvLyBWRCBzZXAxMzI0IGNoYW5nZXMgLSBwcm9jZXNzIGRhdGEgd2hlbiBkYXRhYmluZCB2YWx1ZSBjaGFuZ2VcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jdXN0b21DaGFuZ2UkLnN1YnNjcmliZShcbiAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xuICAgICAgICBpZiAoY2hhbmdlVmFsdWUgPT0gJ2RhdGFCaW5kJykge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gU0tTMjBNQVIyNSBFbnN1cmUgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBhdmFpbGFibGUgYmVmb3JlIGNhbGxpbmcgdGhlIG1ldGhvZFxuICAgICAvLyBBUC0yNk1BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgICAvLyAgQVAtMjhNQVIyNSBBZGQgQm9vbGVhblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaChxdWVzID0+IHtcbiAgICAgICAgcXVlc1snc3ViVGV4dCddID0gdHlwZW9mIHF1ZXM/LnN1YlRleHQgPT09ICdvYmplY3QnID8gcXVlcz8uc3ViVGV4dCA6IEpTT04ucGFyc2UocXVlc1snc3ViVGV4dCddKTtcbiAgICAgICAgbGV0IGFwaU9iajogYW55ID0gcXVlcy5zdWJUZXh0XG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcyhxdWVzKTtcbiAgICAgICAgbGV0IGlucHV0OiBhbnk7XG4gICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgaW5wdXRbJ2ZpZWxkJ10gPSBhcGlPYmo/LmRlZmF1bHRGaWVsZCB8fCBhcGlPYmo/LmZpZWxkPy5bMF0gfHwgYXBpT2JqPy5maWVsZCB8fCBudWxsXG4gICAgICAgIGlucHV0Wyd2YWx1ZU9iaiddID0gcXVlcy50eXBlID09ICdJbWFnZScgPyBxdWVzLm9yZ0ltYWdlRGF0YSA6IHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nID8gIHR5cGVvZiBxdWVzLmlucHV0ICE9PSAndW5kZWZpbmVkJyA/IHF1ZXMuaW5wdXQgPT09IHRydWUgIDogdHlwZW9mIHF1ZXMuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHF1ZXMuZGVmYXVsdFZhbHVlID09PSB0cnVlIDogZmFsc2UgOiBxdWVzLnR5cGUgPT09ICdUYWJsZScgPyB7ZGF0YTogcXVlcy5pbnB1dH0gOiBxdWVzLmlucHV0ICB8fCBxdWVzLmRlZmF1bHRWYWx1ZSB8fCBudWxsXG4gICAgICAgIGlucHV0WydyZWZlcmVuY2VGaWVsZCddID0gcXVlcy5yZWZlcmVuY2VGaWVsZCB8fCBudWxsXG4gICAgICAgIGlucHV0Wydmcm9tUXVlc3Rpb25JZCddID0gcXVlcy5pZCB8fCBudWxsXG4gICAgICAgIHRoaXMuY2hpbGRFdmVudENhcHR1cmUoaW5wdXQsIHF1ZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgaGFuZGxlUXVlcyhxdWVzOiBhbnkpIHtcbiAgICAvLyBIQSAxOS1KQU4tMjQgSWYgY29uZGl0aW9uIGlzIGZvciBiaW5kLWluLCBjb3JyZWN0aW9uXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRpbmcgY29uZGl0aW9uIHRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvclxuICAgIGlmICh0aGlzLmRhdGFCaW5kICYmIE9iamVjdC5rZXlzKHRoaXMuZGF0YUJpbmQpLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmZsYXR0ZW5PYmplY3QodGhpcy5kYXRhQmluZClcbiAgICAgIGZvciAobGV0IFtrZXksIHZhbF0gb2YgcmVzdWx0KSB7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gdmFsO1xuICAgICAgICBpZiAocXVlcy5yZWZlcmVuY2VGaWVsZCA9PT0ga2V5KSB7XG4gICAgICAgICAgaWYgKHF1ZXMudHlwZSA9PT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT09ICdSYWRpbycpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuc3FPcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAvLyAgIGlmIChlbGVtZW50WydyZWZlcmVuY2VGaWVsZCddID09PSBrZXkpIHtcbiAgICAgICAgICAgIC8vICAgICBlbGVtZW50WydpbnB1dCddID0gcXVlcy5pbnB1dCA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgLy8gICAgIGVsZW1lbnRbJ3NlbGVjdGVkVmFsdWUnXSA9IHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMjRKQU4yNCBUbyBiaW5kLWluIERhdGUgYW5kIERhdGVUaW1lXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSBuZXcgRGF0ZSh2YWx1ZT8udG9TdHJpbmcoKSkgIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIQSAxMkZFQjI0IFRvIGJpbmQtaW4gTG9jYXRpb24gVHlwZVxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJykge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVbJ2FkZHJlc3MnXSA/IHZhbHVlWydhZGRyZXNzJ10gOiB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzIGZvciBkYXRhIGJpbmRJblxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0NhbGVuZGFyJykge1xuICAgICAgICAgICAgbGV0IGVudHJpZXMgPSB0eXBlb2YgcXVlc1snZmllbGRzTWV0YSddID09PSAnb2JqZWN0JyA/IHF1ZXNbJ2ZpZWxkc01ldGEnXSA6IEpTT04ucGFyc2UocXVlc1snZmllbGRzTWV0YSddKTtcbiAgICAgICAgICAgIGlmIChlbnRyaWVzKSB7XG4gICAgICAgICAgICAgIGxldCByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBxUmVmZXJlbmNlID0gSlNPTi5wYXJzZShlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUXVlc3Rpb25zLnB1c2gocVJlZmVyZW5jZT8ucXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlPy5mb3JFYWNoKGNhbGVuZGFyQXJyYXkgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjYWxlbmRhckFycmF5LmRhdGUpO1xuICAgICAgICAgICAgICAgICAgY2FsZW5kYXJBcnJheS5lbnRyaWVzLmZvckVhY2goaW5wdXRFbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbnB1dEVudHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVF1ZXN0aW9ucy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZWZlcmVuY2VGaWVsZCA9PSBrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnRGF0ZScgfHwgZmllbGQudHlwZSA9PSAnRGF0ZVRpbWUnIHx8IGZpZWxkLnR5cGUgPT0gJ1RpbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSBuZXcgRGF0ZSh2Py50b1N0cmluZygpKSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBpZiAoZmllbGQudHlwZSA9PT0gJ0Ryb3Bkb3duJyB8fCBmaWVsZC50eXBlID09PSAnUmFkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuc2VsZWN0ZWRWYWx1ZSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSB2ICB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IHYgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmFkZEV2ZW50KGRhdGUsIHJlZmVyZW5jZVF1ZXN0aW9ucyk7Ly9TS1MgMjdTRVAyNCBlYWNoIGV2ZW50IGFkZGVkIHRvIGFsbEV2ZW50cyBhcnJheVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuYWRkRXZlbnQoZGF0ZSxyZWZlcmVuY2VRdWVzdGlvbnMpOyAvL3RoaXMgaXMgb25seSBsYXN0IGV2ZW50IGFkZGVkIHRvIGFsbEV2ZW50cyBhcnJheVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdGaWxlJykge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IFtdO1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHt9O1xuICAgICAgcXVlc3Rpb25bJ2lkJ10gPSBxdWVzLmlkO1xuICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLW91dCBMb2NhdGlvbiBUeXBlXG4gICAgICBpZiAocXVlcy50eXBlID09PSAnTG9jYXRpb24nKSB7XG4gICAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dCA/IHF1ZXMuaW5wdXQgOiBxdWVzLnNlbGVjdGVkVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRmlsZScpIHtcbiAgICAgICAgLy8gVkQgMjMgT2N0MjQgLSBmaWxlIHR5cGUgY2hhbmdlc1xuICAgICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPyBxdWVzLmlucHV0IDogcXVlcy5kZWZhdWx0VmFsdWUgfHwgW107XG4gICAgICB9XG4gICAgICBxdWVzdGlvblsndHlwZSddID0gcXVlcy50eXBlO1xuICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uTnVtYmVyJ10gPSBxdWVzLnF1ZXN0aW9uTnVtYmVyO1xuICAgICAgcXVlc3Rpb25bJ3JlZmVyZW5jZUZpZWxkJ10gPSBxdWVzPy5yZWZlcmVuY2VGaWVsZDtcbiAgICAgIHF1ZXN0aW9uWydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzPy5zZWxlY3RlZFZhbHVlOyAgLy8gTVIgMzFKQU4yNCBOZWVkIHRvIHBhc3MgdGhlIHNlbGVjdGVkIHZhbHVlIHRvb1xuICAgIH1cbiAgfVxuIC8vIFNLUzIwTUFSMjUgZmxhdHRlbmluZyBuZXN0ZWQgb2JqZWN0cywgbWFwcGluZyB2YWx1ZXMgdXNpbmcgIHJlZmVyZW5jZUZpZWxkXG4gZmxhdHRlbk9iamVjdChvYmo6IGFueSwgcGFyZW50S2V5ID0gJycsIGluY2x1ZGVPYmplY3RzID0gdHJ1ZSkge1xuICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gIGZvciAobGV0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgIGxldCBuZXdLZXkgPSBwYXJlbnRLZXkgPyBgJHtwYXJlbnRLZXl9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHQucHVzaChbbmV3S2V5LCB2YWxdKTsgLy8gSW5jbHVkZSBmdWxsIGFycmF5XG5cbiAgICAgIHZhbC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZsYXR0ZW5PYmplY3QoaXRlbSwgYCR7bmV3S2V5fVske2luZGV4fV1gLCBmYWxzZSkpOyAvLyBGbGF0dGVuIG9iamVjdHMgaW4gYXJyYXlzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goW2Ake25ld0tleX1bJHtpbmRleH1dYCwgaXRlbV0pOyAvLyBTdG9yZSBwcmltaXRpdmUgdmFsdWVzIGluIGFycmF5c1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGluY2x1ZGVPYmplY3RzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtuZXdLZXksIHZhbF0pOyAvLyBJbmNsdWRlIGZ1bGwgb2JqZWN0XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCguLi50aGlzLmZsYXR0ZW5PYmplY3QodmFsLCBuZXdLZXksIGZhbHNlKSk7IC8vIEZsYXR0ZW4gbmVzdGVkIG9iamVjdHNcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goW25ld0tleSwgdmFsXSk7IC8vIFN0b3JlIGtleS12YWx1ZSBwYWlyc1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4gIC8vIFZEIDEzU2VwMjQgY2hhbmdlc1xuICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICBwcm9jZXNzRGF0YSgpIHtcbiAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gQm9vayBTdHlsaW5nKFNsYWVzZm9yY2UpXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5XG4gICAgaWYgKHRoaXMucWJJdGVtPy5zdHlsZSkge1xuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlID0gdHlwZW9mIHRoaXMucWJJdGVtLnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycgKyB0aGlzLnFiSXRlbT8uc3R5bGUpIDogdGhpcy5xYkl0ZW0uc3R5bGU7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbENsYXNzID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsQ2xhc3MgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dENsYXNzID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0Q2xhc3MgPyB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dFN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5ib29rU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLnNob3dMYWJlbCA9IHRoaXMucWJJdGVtLnN0eWxlPy5zaG93TGFiZWwgPyB0aGlzLnFiSXRlbS5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5xYkl0ZW0pIHtcbiAgICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUgPSB7XG4gICAgICAgICAgXCJsYWJlbENsYXNzXCI6IFwiXCIsXG4gICAgICAgICAgXCJsYWJlbFN0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJsYWJlbFZhbHVlU3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcImlucHV0Q2xhc3NcIjogXCJcIixcbiAgICAgICAgICBcImlucHV0U3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcImJvb2tTdHlsZVwiOiBcIlwiLFxuICAgICAgICAgIFwic2hvd0xhYmVsXCI6IHRydWUsXG4gICAgICAgICAgXCJkaXJlY3Rpb25cIjogXCJsdHJcIixcbiAgICAgICAgICBcInF1ZXN0aW9uU3R5bGVcIjogXCJcIlxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnFiSXRlbS5zdHlsZS5xdWVzdGlvblN0eWxlID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5xdWVzdGlvblN0eWxlID8gdGhpcy5xYkl0ZW0/LnN0eWxlLnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgIHRoaXMuYm9va1N0eWxlID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5ib29rU3R5bGU7XG4gICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHZhciBodG1sRWxlbWVudCA9IGVsZW1lbnQ/LnF1ZXN0aW9uVGV4dDtcbiAgICAgIHZhciB0ZXh0T25seSA9IGh0bWxFbGVtZW50Py5yZXBsYWNlKC88W14+XSo+L2csICcnKVxuICAgICAgZWxlbWVudC5xdWVzdGlvblRleHQgPSB0ZXh0T25seTtcbiAgICAgIC8vICBIQSAxOURFQzIzIExvZ2ljIGZvciBRdWVzdGlvbiBTdHlsaW5nKFNsYWVzZm9yY2UpXG4gICAgICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0Jvb2snKSB7XG4gICAgICAgIGlmIChlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddKSB7XG4gICAgICAgICAgdmFyIHFiID0gdHlwZW9mIGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10gPT09ICdvYmplY3QnICA/ICBlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddIDogSlNPTi5wYXJzZSggZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSkgO1xuICAgICAgICAgIGlmIChxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUpIHtcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9IHR5cGVvZiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyArIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSkgOiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQm9vayB0eXBlIHF1ZXN0aW9uIHN0eWxpbmdcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5pbnB1dENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuaW5wdXRTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmJvb2tTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uYm9va1N0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5zaG93TGFiZWwgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnNob3dMYWJlbCA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUucXVlc3Rpb25TdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG5cbiAgICAgICAgICAvLyBMb29wIGZvciBlYWNoIHF1ZXN0aW9uIGluIHRoZSBib29rXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddPy5zdWJRdWVzdGlvbnM/LmZvckVhY2gocXVlc3Rpb25Gcm9tQm9vayA9PiB7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgOiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsQ2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0Q2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0U3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmJvb2tTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmJvb2tTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnNob3dMYWJlbCA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnNob3dMYWJlbCA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5xdWVzdGlvblN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWxlbWVudFsncWJJdGVtJ10gPSBxYlsncXVlc3Rpb25ib29rJ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuc3R5bGUgPSBlbGVtZW50LnN0eWxlID8gdHlwZW9mIGVsZW1lbnQuc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyArIGVsZW1lbnQ/LnN0eWxlKSA6IGVsZW1lbnQ/LnN0eWxlIDogdGhpcy5xYkl0ZW0/LnN0eWxlO1xuXG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsQ2xhc3MgPSBlbGVtZW50LnN0eWxlPy5sYWJlbENsYXNzID8gZWxlbWVudC5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5sYWJlbFN0eWxlID8gZWxlbWVudC5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IGVsZW1lbnQuc3R5bGUubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuaW5wdXRDbGFzcyA9IGVsZW1lbnQuc3R5bGU/LmlucHV0Q2xhc3MgPyBlbGVtZW50LnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuaW5wdXRTdHlsZSA9IGVsZW1lbnQuc3R5bGUuaW5wdXRTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5ib29rU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5zaG93TGFiZWwgPSBlbGVtZW50LnN0eWxlPy5zaG93TGFiZWwgPyBlbGVtZW50LnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgZWxlbWVudC5zdHlsZS5xdWVzdGlvblN0eWxlID0gZWxlbWVudC5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IGVsZW1lbnQuc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuXG4gICAgICAvL1ZEIDAyQXVnMjQgZGVwZW5kZW50IGZpZWxkIHNob3cvaGlkZSBjaGFuZ2VzXG4gICAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgICAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICAgICAgaWYgKGVsZW1lbnQucmVmZXJlbmNlRmllbGQpIHtcbiAgICAgICAgZWxlbWVudC5kZXBlbmRlbnRSZWYgPSBlbGVtZW50LnJlZmVyZW5jZUZpZWxkO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuc3ViVGV4dCkge1xuICAgICAgICBlbGVtZW50WydzdWJUZXh0J10gPSB0eXBlb2YgZWxlbWVudD8uc3ViVGV4dCA9PT0gJ29iamVjdCcgPyBlbGVtZW50Py5zdWJUZXh0IDogSlNPTi5wYXJzZShlbGVtZW50WydzdWJUZXh0J10pO1xuICAgICAgICBsZXQgZGVwZW5kZW5jeU9iajogRGVwZW5kZW5jeU1ldGEgPSBlbGVtZW50LnN1YlRleHQ7XG4gICAgICAgIGlmIChkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpIHtcbiAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBWRCAwN0F1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBWRCAyMEF1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcbiAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQgJiYgZGVwZW5kZW5jeU9iai5pc0RlcGVuZGVudEZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCAmJiBjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPT0gdW5kZWZpbmVkICYmICggQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpPyBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQuaW5jbHVkZXMoY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQpIDogY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT09IGRlcGVuZGVuY3lPYmouc291cmNlUXVlc3Rpb25JZCkpIHtcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50LmlzSGlkZGVuRmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5T2JqLmRlcGVuZGVudFZhbHVlID09IGNoYW5nZVZhbHVlLnZhbHVlT2JqKSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZXBlbmRlbnRSZWYgPT0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VGaWVsZCA9IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnQuaWQpO1xuICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZGVwZW5kZW50IHNlbGVjdGlvbiByZW1vdmUgdGhlIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmZXJlbmNlRmllbGQgPSAnJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgLy8gc3VuZGF5IGNvbW1lbnRcbiAgICAgIC8vIGlmIChlbGVtZW50LnR5cGUgPT09ICdDYWxlbmRhcicpIHtcbiAgICAgIC8vICAgdGhpcy5vcGVuQ2FsZW5kYXJDb21wb25lbnQoZWxlbWVudCk7XG4gICAgICAvLyB9XG4gICAgfSk7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9ucyk7XG4gIH1cbiAgLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gICAvLyBBUC0yNk1BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnRJZCkge1xuICAgIGxldCBlbGVtZW50c1RvSGlkZSA9IHRoaXMucXVlc3Rpb25zLmZpbHRlcihlbCA9PiB7XG4gICAgICBpZiAoZWwuc3ViVGV4dCkge1xuICAgICAgICBlbFsnc3ViVGV4dCddID0gdHlwZW9mIGVsPy5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IGVsPy5zdWJUZXh0IDogSlNPTi5wYXJzZShlbFsnc3ViVGV4dCddKTtcbiAgICAgICAgbGV0IGRlcE9iaiA9IGVsLnN1YlRleHQ7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRlcE9iai5zb3VyY2VRdWVzdGlvbklkKT8gZGVwT2JqLnNvdXJjZVF1ZXN0aW9uSWQuaW5jbHVkZXMoZWxlbWVudElkKSA6IGRlcE9iai5zb3VyY2VRdWVzdGlvbklkID09IGVsZW1lbnRJZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIGVsZW1lbnRzVG9IaWRlLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgZWwuaW5wdXQgPSAnJztcbiAgICAgIGVsLnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbCk7XG4gICAgICAvLyBSZWN1cnNpdmVseSBoaWRlIGVsZW1lbnRzIGRlcGVuZGVudCBvbiB0aGlzIG9uZVxuICAgICAgdGhpcy5oaWRlRGVwZW5kZW50RWxlbWVudHMoZWwuaWQpO1xuICAgIH0pO1xuICB9XG4vL0FQLTE5TUFZMjUgRW5zdXJlIHNxTGlzdCBpcyBhbHdheXMgYW4gYXJyYXkgYnkgZGVmYXVsdGluZyB0byBbXVxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XG4gICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zPy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gcXVlc0lkKSB8fCBbXTtcbiAgICBmb3IgKHZhciBzcSBvZiBzcUxpc3QpIHtcbiAgICAgIHNxLmVycm9yID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xuICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocmVjb3Jkcyk7XG4gIH1cblxuICAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XG4gIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzogYW55KSB7XG4gICAgbGV0IGRyb3Bkb3duRGF0YSA9IHt9O1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XG4gICAgaWYgKHF1ZXMpIHtcbiAgICAgIGlmIChxdWVzLnR5cGUgPT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT0gJ1JhZGlvJykge1xuICAgICAgICAvLyBIQSAxOUpBTjI0IENvcnJlY3Rpb24gb2YgZHJvcGRvd24gdmFsdWVzXG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcbiAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGw7XG4gICAgICAgIC8vIGVtaXQgdGhlIGRyb3Bkb3duIGRhdGEgdG8gcGFyZW50XG4gICAgICAgIGRyb3Bkb3duRGF0YVsnZXZlbnQnXSA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBkcm9wZG93bkRhdGFbJ3F1ZXMnXSA9IHF1ZXM7XG4gICAgICAgIGlmIChkcm9wZG93bkRhdGFbJ2V2ZW50J10pIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZURyb3BEb3duLmVtaXQoZHJvcGRvd25EYXRhKTtcbiAgICAgICAgfSAgLy8gVkQgMjFERUMyMyAtIGRlcGVuZGVudCBmaWVsZCBjaGFuZ2VcbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iaj8gZXZlbnQudmFsdWVPYmouYWRkcmVzcyA6IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRmlsZScpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuc2VsZWN0ZWRGaWxlRGF0YSA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xuICAgICAgICAvLyBIYW5kbGUgZmlsZSB2YWxpZGF0aW9uIGVycm9yc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbCkgJiYgZXZlbnQudmFsdWVPYmoubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gTm8gZmlsZXMgdXBsb2FkZWQgd2hlbiByZXF1aXJlZFxuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBxdWVzLmVycm9yTWVzc2FnZSA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbCkgJiYgZXZlbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIEZpbGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkXG4gICAgICAgICAgcXVlcy5lcnJvciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSB2YWxpZGF0aW9uIGVycm9ycyBmcm9tIHRoZSBmaWxlIHVwbG9hZCBjb21wb25lbnRcbiAgICAgICAgaWYgKGV2ZW50Py52YWxpZGF0aW9uRXJyb3JzICYmIGV2ZW50LnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgcXVlcy5lcnJvci5tZXNzYWdlID0gZXZlbnQudmFsaWRhdGlvbkVycm9yc1swXTsgLy8gVXNlIHRoZSBmaXJzdCB2YWxpZGF0aW9uIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT0gJ0RhdGVUaW1lJykgeyAvLyBIQSAyNEpBTjI0IENvbnZlcnRpbmcgRGF0ZSBhbmQgRGF0ZVRpbWUgdG8gVVRDXG4gICAgICAgIGlmIChldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbCkge1xuICAgICAgICAgIGxldCBkID0gbmV3IERhdGUoZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGwpO1xuICAgICAgICAgIGlmICghaXNOYU4oZD8uZ2V0VGltZSgpKSkgeyAvL1NLUzIzQVBSMjUgQ2hlY2sgZm9yIHZhbGlkIGRhdGVcbiAgICAgICAgICAgICAgbGV0IHV0Y1N0cmluZyA9IGQ/LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB1dGNTdHJpbmc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdMaXN0Jykge1xuICAgICAgICAvLyBWRCAyMEF1ZzI0IGhhbmRsaW5nIHRoZSBsaXN0IHR5cGUgIGhhbmRsZSBtdWx0aXBsZSBvYmplY3QgdmFsdWVzXG4gICAgICAgIHF1ZXMuaW5wdXQgPSAoZXZlbnQudmFsdWVPYmogJiYgdHlwZW9mIGV2ZW50LnZhbHVlT2JqID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShldmVudC52YWx1ZU9iaikpID8gdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShldmVudD8udmFsdWVPYmosIGV2ZW50Py5maWVsZCkgOiBldmVudC52YWx1ZU9iajtcbiAgICAgIH0vL1JTIDA2SkFOMjVcbiAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqIHx8IG51bGw7XG4gICAgICB9Ly8gIEFQLTI4TUFSMjUgQWRkIEJvb2xlYW5cbiAgICAgIGVsc2UgaWYocXVlcy50eXBlID09PSAnQm9vbGVhbicpe1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQudmFsdWVPYmo7XG4gICAgICAgIHF1ZXMuYm9vbGVhbiA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgfVxuICAgICAgLy8gQVAtMTBBUFIyNSBOdW1iZXJcbiAgICAgIC8vIEFQMTlQQVIyNSAtaWYgY2hhbmdlIGVsc2UgaXNcbiAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IE51bWJlcihldmVudC52YWx1ZU9iaik7IFxuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdUYWJsZScpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqLmRhdGE7IFxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC52YWx1ZU9iajtcbiAgICAgIH1cbiAgICAgIC8vUlMgMDZKQU4yNVxuICAgICAgLy8gVmFsaWRhdGUgZXJyb3IgbWVzc2FnZSAtIG1vZGlmaWVkIHRvIGhhbmRsZSByaWNoIHRleHRcbiAgICAgIGNvbnN0IGhhc0Vycm9yID0gcXVlcy5lcnJvck1lc3NhZ2UgJiYgKFxuICAgICAgICAocXVlcy50eXBlID09PSAnRmlsZScgJiYgcXVlcy5pbnB1dC5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnICYmICghcXVlcy5pbnB1dCB8fCBxdWVzLmlucHV0LnRyaW0oKSA9PT0gJycpKSB8fFxuICAgICAgICAocXVlcy50eXBlICE9PSAnRmlsZScgJiYgcXVlcy5UeXBlICE9PSAnUmljaFRleHRBcmVhJyAmJiAhcXVlcy5pbnB1dClcbiAgICAgICk7XG4gICAgICBxdWVzLmVycm9yID0gaGFzRXJyb3IgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xuICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcbiAgICAgIC8vIE9uY2UgdGhlIHJpZ2h0IHZhbHVlIGlzIHN0b3JlZCBpbiBxdWVzLmlucHV0IHN0b3JlIHRoZSBxdWVzICh3aXRoIGlucHV0KSBpbiBzdG9yYWdlU2VydmljZVxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUocXVlcyk7XG4gICAgICAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cbiAgICAgIHRoaXMuaGFuZGxlUXVlc3Rpb24uZW1pdChxdWVzKTtcbiAgICB9XG4gICAgaWYocXVlcz8uc2luZ2xlRmllbGRDaGFuZ2Upe1xuICAgICAgdGhpcy5zaW5nbGVGaWVsZENoYW5nZUVtaXQuZW1pdChxdWVzKTtcbiAgICAgIHF1ZXMuc2luZ2xlRmllbGRDaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZGVsZXRlRmlsZShmaWxlRGF0YTogYW55KSB7XG4gIH1cbiAgZ2V0RHJvcERvd24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaGFkbGVEcm9wRG93bkRlcGVuZGVudC5lbWl0KGV2ZW50KTtcbiAgfVxuICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiAgZ2V0Q3VycmVudENhbGVuZGFyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRGF0ZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGdldENhbGVuZGFyRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5oYW5kbGVDYWxlbmRhckV2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuICAvLyBzdW5kYXkgY29tbWVudFxuICAvLyBvcGVuQ2FsZW5kYXJDb21wb25lbnQocXVlcykge1xuICAvLyAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmR5bmFtaWNIb3N0LnZpZXdDb250YWluZXJSZWY7XG4gIC8vICAgaWYodmlld0NvbnRhaW5lclJlZil7XG4gIC8vICAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gIC8vICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChDdXN0b21DYWxlbmRhckNvbXBvbmVudCk7XG4gIC8vICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucXVlc3Rpb24gPSBxdWVzO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRhdGVTZWxlY3RlZC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHRoaXMuZ2V0Q3VycmVudENhbGVuZGFyKGV2ZW50KSk7XG4gIC8vICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZXZlbnRTZWxlY3RlZC5zdWJzY3JpYmUoKGV2ZW50OmFueSkgPT4gdGhpcy5nZXRDYWxlbmRhckV2ZW50KGV2ZW50KSlcbiAgLy8gICB9XG4gIC8vIH1cblxuICBpc0NhbGVuZGFyTW9kYWxPcGVuID0gZmFsc2U7XG4gIGNhbGVuZGFyTW9kYWxUaXRsZTogYW55O1xuICBjYWxlbmRhck1vZGFsU2l6ZTogYW55O1xuICBjYWxlbmRhclNhdmVCdXR0b25WYWx1ZTogYW55O1xuICByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgcWJSZWZyZW5jZUJvb2s6IGFueTtcbiAgbW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyOiBhbnk7XG5cbiAgb3BlbkNhbGVuZGFyTW9kYWwoZXZlbnQpIHtcbiAgICB0aGlzLmlzQ2FsZW5kYXJNb2RhbE9wZW4gPSB0cnVlO1xuICAgIHRoaXMucWJSZWZyZW5jZUJvb2sgPSBldmVudC5xYlJlZnJlbmNlQm9vaztcbiAgICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucyA9IGV2ZW50LnJlZmVyZW5jZVF1ZXN0aW9ucztcbiAgICB0aGlzLmNhbGVuZGFyTW9kYWxUaXRsZSA9IGV2ZW50Lm1vZGFsVGl0bGU7XG4gICAgdGhpcy5jYWxlbmRhck1vZGFsU2l6ZSA9IGV2ZW50Lm1vZGFsU2l6ZTtcbiAgICB0aGlzLmNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlID0gZXZlbnQuc2F2ZUJ1dHRvblZhbHVlO1xuICAgIHRoaXMubW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyID0gZXZlbnQubW9kYWxGb290ZXI7XG4gIH1cblxuXG4gIG9uQ2FsZW5kYXJNb2RhbFNhdmUoKSB7XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmRhdGFDaGFuZ2VzKCdjYWxlbmRhci1tb2RhbC1zYXZlJyk7XG4gIH1cblxuXG4gIGhhbmRsZVF1ZXN0aW9uRXZlbnQoZXZlbnQpIHtcbiAgfVxuXG4gIGNsb3NlQ2FsZW5kYXJNb2RhbChldmVudCkge1xuICAgIHRoaXMuaXNDYWxlbmRhck1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMjVNQVIyNSBpbWFnZSBhZGRcbiAgYXN5bmMgZmlsZUNoYW5nZUV2ZW50KHF1ZXM6IGFueSwgZXZlbnQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGF3YWl0IHRoaXMucmVhZEZpbGVBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgIHF1ZXMuaW1hZ2VEYXRhID0gaW1hZ2VEYXRhO1xuICAgICAgICBxdWVzLm9yZ0ltYWdlRGF0YSA9IGltYWdlRGF0YTtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBsb2dvIHNpemUgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAgIGlmICghcXVlcy5pbWFnZVNpemUpIHtcbiAgICAgICAgICBxdWVzLmltYWdlU2l6ZSA9IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxNTAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY2hpbGRFdmVudENhcHR1cmUoaW1hZ2VEYXRhLCBxdWVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciByZWFkaW5nIGZpbGU6XCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRGaWxlQXNEYXRhVVJMKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHJlamVjdChlcnJvcik7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICB9KTtcbiAgfVxuICBhc3luYyBvbkltYWdlRWRpdChxdWVzOiBhbnkpIHtcbiAgICB0aGlzLmlzSW1hZ2VFZGl0ID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2VFbGVtZW50ID0gcXVlcztcbiAgfVxuICBhc3luYyBvbkltYWdlRGVsZXRlKHF1ZXM6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICBxdWVzLmltYWdlRGF0YSA9ICcnO1xuICAgICAgcXVlcy5vcmdJbWFnZURhdGEgPSAnJztcbiAgICAgIC8vIEluaXRpYWxpemUgbG9nbyBzaXplIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgaWYgKCFxdWVzLmltYWdlU2l6ZSkge1xuICAgICAgICBxdWVzLmltYWdlU2l6ZSA9IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxNTAgfTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuY2hpbGRFdmVudENhcHR1cmUocXVlcy5pbWFnZURhdGEsIHF1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVhZGluZyBmaWxlOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMjVNQVIyNSBpbWFnZSBlZGl0IGZ1bmN0aW9uc1xuICBmbGlwSG9yaXpvbnRhbCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgZmxpcEg6ICF0aGlzLnRyYW5zZm9ybS5mbGlwSFxuICAgIH07XG4gIH1cblxuICBmbGlwVmVydGljYWwoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIGZsaXBWOiAhdGhpcy50cmFuc2Zvcm0uZmxpcFZcbiAgICB9O1xuICB9XG5cbiAgcmVzZXRJbWFnZSgpIHtcbiAgICB0aGlzLmNhbnZhc1JvdGF0aW9uID0gMDtcbiAgICB0aGlzLmNyb3BwZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICB0cmFuc2xhdGVVbml0OiAncHgnLFxuICAgICAgc2NhbGU6IDEsXG4gICAgICByb3RhdGU6IDAsXG4gICAgICBmbGlwSDogZmFsc2UsXG4gICAgICBmbGlwVjogZmFsc2UsXG4gICAgICB0cmFuc2xhdGVIOiAwLFxuICAgICAgdHJhbnNsYXRlVjogMFxuICAgIH07XG4gIH1cblxuICB6b29tT3V0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBzY2FsZTogdGhpcy50cmFuc2Zvcm0uc2NhbGUhIC0gLjFcbiAgICB9O1xuICB9XG5cbiAgem9vbUluKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBzY2FsZTogdGhpcy50cmFuc2Zvcm0uc2NhbGUhICsgLjFcbiAgICB9O1xuICB9XG4gIHJvdGF0ZUxlZnQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gVXNlIHRpbWVvdXQgYmVjYXVzZSByb3RhdGluZyBpbWFnZSBpcyBhIGhlYXZ5IG9wZXJhdGlvbiBhbmQgd2lsbCBibG9jayB0aGUgdWkgdGhyZWFkXG4gICAgICB0aGlzLmNhbnZhc1JvdGF0aW9uLS07XG4gICAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcm90YXRlUmlnaHQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2FudmFzUm90YXRpb24rKztcbiAgICAgIHRoaXMuZmxpcEFmdGVyUm90YXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBtb3ZlTGVmdCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlSDogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlSCEgLSAxXG4gICAgfTtcbiAgfVxuXG4gIG1vdmVSaWdodCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlSDogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlSCEgKyAxXG4gICAgfTtcbiAgfVxuXG4gIG1vdmVEb3duKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVWOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWISArIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZVVwKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVWOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWISAtIDFcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgZmxpcEFmdGVyUm90YXRlKCkge1xuICAgIGNvbnN0IGZsaXBwZWRIID0gdGhpcy50cmFuc2Zvcm0uZmxpcEg7XG4gICAgY29uc3QgZmxpcHBlZFYgPSB0aGlzLnRyYW5zZm9ybS5mbGlwVjtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgZmxpcEg6IGZsaXBwZWRWLFxuICAgICAgZmxpcFY6IGZsaXBwZWRILFxuICAgICAgdHJhbnNsYXRlSDogMCxcbiAgICAgIHRyYW5zbGF0ZVY6IDBcbiAgICB9O1xuICB9XG4gIGFzeW5jIGltYWdlQ3JvcHBlZChldmVudDogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHRoaXMuY29udmVydEJsb2JUb0Jhc2U2NChldmVudC5vYmplY3RVcmwpO1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGEgPSBiYXNlNjQ7XG4gICAgICBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGJhc2U2NCwgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBpbiBpbWFnZUNyb3BwZWQ6XCIsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuXG4gIGNyb3BwZXJSZWFkeShzb3VyY2VJbWFnZURpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuICAvLyBTS1MyNU1BUjI1IGJsb2IgdG8gYmFzZSA2NCBjb252ZXJ0ZXJcbiAgY29udmVydEJsb2JUb0Jhc2U2NChvYmplY3RVcmw6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGZldGNoKG9iamVjdFVybClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJsb2IoKSlcbiAgICAgIC50aGVuKGJsb2IgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuICBjbG9zZU1vZGFsKCkge1xuICAgIHRoaXMuaXNJbWFnZUVkaXQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFNLUzI4TUFSMjUgZm9yIG5lc3RlZCBib29rIHJlYWRcbiAgcmVhZFF1ZXN0aW9ucyhxYklkOiBhbnksIHF1ZXM6YW55KSB7XG4gICAgbGV0IHF1ZXN0aW9ucyA9IFtdO1xuICAgIC8vIEFkZGVkIHRlcm5hcnkgdG8gYXZvaWQgdW5kZWZpbmVkXG4gICAgZm9yICh2YXIgc3EgaW4gcXVlcy5ib29rUXVlc3Rpb25zTWFwW3FiSWRdLnN1YlF1ZXN0aW9ucykge1xuICAgICAgbGV0IHE6IFF1ZXN0aW9uID0gcXVlcy5ib29rUXVlc3Rpb25zTWFwW3FiSWRdLnN1YlF1ZXN0aW9uc1tzcV07XG4gICAgICAvLyBpZiBxdWVzdGlvbiBpcyB0aGVyZSBwcm9jZXNzXG4gICAgICBpZiAocSkge1xuICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25zO1xuICB9XG59XG4iLCI8IS0tIEhBIDE4SkFOMjQgIEFkZGVkIGNsYXNzIGZvciBzdHlsaW5nIC0tPlxuPGRpdiBbc3R5bGVdPVwiYm9va1N0eWxlXCIgY2xhc3M9XCJjb250ZW50LWJveCBmb3JtLWdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDwhLS0gSEEgMjBERUMyMyBEaXJlY3RpdmUgYW5kIFF1ZXN0aW9uIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cbiAgICAgICAgPCEtLSBSQTA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cIidjb2wtbGctJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnXCIgKm5nRm9yPVwibGV0IHF1ZXMgb2YgcXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbc3R5bGVdPVwicXVlcz8uc3R5bGU/LnF1ZXN0aW9uU3R5bGVcIj5cbiAgICAgICAgICAgIDwhLS0gVkQgMDlNYXkyNCBpcyBoaWRlIGZpZWxkIGNoYW5nZS0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmlzSGlkZGVuXCIgY2xhc3M9XCJueHRJbnB1dENvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQVAtMjhNQVIyNSBTaG93IGxhYmVsIGlmIGVuYWJsZWQgYW5kIG5vdCBhIEJvb2xlYW4gdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsID8gKHF1ZXMuc3R5bGU/LnNob3dMYWJlbCAmJiBxdWVzLnR5cGUgIT09ICdCb29sZWFuJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0JyAmJiBxdWVzLnR5cGUgIT09ICdMaXN0JyAmJiBxdWVzPy50eXBlICE9PSAnRHJvcGRvd24nICYmIHF1ZXMudHlwZSAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgcXVlcy50eXBlICE9PSAnRGF0ZVRpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ0xvY2F0aW9uJyAmJiBxdWVzLnR5cGUgIT09ICdOdW1iZXInICYmcXVlcy50eXBlICE9PSAnRW1haWwnICYmICBxdWVzLnR5cGUgIT09ICdEYXRlJyAmJiBxdWVzLnR5cGUgIT09ICdUaW1lJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0QXJlYScgJiYgcXVlcy50eXBlICE9PSAnTGFiZWwnKTogKHF1ZXMuc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2UgJiYgcXVlcy50eXBlICE9PSAnQm9vbGVhbicgJiYgcXVlcy50eXBlICE9PSAnVGV4dCcgJiYgcXVlcy50eXBlICE9PSAnTGlzdCcgJiYgcXVlcz8udHlwZSAhPT0gJ0Ryb3Bkb3duJyAmJiBxdWVzLnR5cGUgIT09ICdEYXRlVGltZScgJiYgcXVlcy50eXBlICE9PSAnTG9jYXRpb24nICYmIHF1ZXMudHlwZSAhPT0gJ051bWJlcicgJiYgIHF1ZXMudHlwZSAhPT0gJ0RhdGUnICYmIHF1ZXMudHlwZSAhPT0gJ1RpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ1RleHRBcmVhJyAmJiBxdWVzLnR5cGUgIT09ICdMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInF1ZXMuc3R5bGU/LmxhYmVsU3R5bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidkaXMtZmxleCBzaGVuZ2VsLW15dC1mb250MyBteXQtZm9udDcgJ1wiIFtzdHlsZV09XCJxdWVzLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogcXVlcy5mb250LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJzogcXVlcy5mb250Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogcXVlcy5mb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXdlaWdodCc6IHF1ZXMuZm9udFdlaWdodFxuICAgICAgICAgICAgICAgICAgICAgIH1cIj57eyAocXVlcy5pZCsnLnF1ZXN0aW9uVGV4dCcpIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogcXVlcz8ucXVlc3Rpb25UZXh0fX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLmlzT3B0aW9uYWwgJiYgIXF1ZXMuaXNSZWFkT25seVwiIHN0eWxlPVwiY29sb3I6IHJlZDtcIj4qPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNLUzEzTUFSMjUgb25seSBzaG93IG9uIGZpbGUgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUlMgMTdKQU4yMDI1IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEaXNwbGF5cyBpY29ucyB3aXRoIHRvb2x0aXBzIGhlbHAgdGV4dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnF1ZXN0aW9uVGV4dCAmJiBxdWVzPy5oZWxwVGV4dCAmJiBxdWVzLnR5cGUgPT09ICdGaWxlJ1wiIGNsYXNzPVwiaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwicXVlcz8uaGVscFRleHRcIiBtYXRUb29sdGlwQ2xhc3M9XCJ3aGl0ZS10b29sdGlwXCI+aTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSUyAxN0pBTjIwMjUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tICBEaXNwbGF5cyBpY29ucyB3aXRoIHRvb2x0aXBzIGZvciBmaWxlIHJlcXVpcmVtZW50cyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uXCIgKm5nSWY9XCJxdWVzLmZpZWxkc01ldGEgJiYgcXVlcy50eXBlID09PSAnRmlsZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cImdldEZpbGVSZXF1aXJlbWVudHMocXVlcy5maWVsZHNNZXRhKVwiIG1hdFRvb2x0aXBDbGFzcz1cIndoaXRlLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDRweDtcIj5pPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIGNhbGVuZGFyICAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnQ2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWNhbGVuZGFyIFtxdWVzdGlvbl09XCJxdWVzXCIgKGV2ZW50U2VsZWN0ZWQpPVwiZ2V0Q2FsZW5kYXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0ZWQpPVwiZ2V0Q3VycmVudENhbGVuZGFyKCRldmVudClcIiAob3Blbk1vZGFsKT1cIm9wZW5DYWxlbmRhck1vZGFsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlTW9kYWwpPVwiY2xvc2VDYWxlbmRhck1vZGFsKCRldmVudClcIj48L2FwcC1jdXN0b20tY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gbW9kZWwgdXNlZCBpbiBjYWxlbmRhciBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLW1vZGVsICpuZ0lmPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiIFttb2RhbFRpdGxlXT1cImNhbGVuZGFyTW9kYWxUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNNb2RhbE9wZW5dPVwiaXNDYWxlbmRhck1vZGFsT3BlblwiIFttb2RhbFNpemVdPVwiY2FsZW5kYXJNb2RhbFNpemVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NhdmVCdXR0b25WYWx1ZV09XCJjYWxlbmRhclNhdmVCdXR0b25WYWx1ZVwiIFttb2RhbEZvb3Rlcl09XCJtb2RhbENhbGVuZGFyTW9kYWxGb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHNhdmVCdXR0b25FbWl0KT1cIm9uQ2FsZW5kYXJNb2RhbFNhdmUoKVwiIChjYW5jZWxCdXR0b25FbWl0KT1cImNsb3NlQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiUmVmcmVuY2VCb29rXCIgW3F1ZXN0aW9uc109XCJyZWZlcmVuY2VRdWVzdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGVRdWVzdGlvbik9XCJoYW5kbGVRdWVzdGlvbkV2ZW50KCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1tb2RlbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTFKVU4yNSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLXBpY2stbG9jYXRpb24gICpuZ0lmPVwicXVlcy50eXBlID09PSAnTG9jYXRpb24nXCIgW2FwaUtleV09XCJxYkl0ZW1bJ2FwaUtleSddXCIgW2FkZHJlc3NdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICAobG9jYXRpb25TZWxlY3RlZCk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtcGljay1sb2NhdGlvbj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjVNQVIyNSBJbWFnZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnSW1hZ2UnXCIgKG1vdXNlZW50ZXIpPVwiaXNJbWFnZUhvdmVyID0gdHJ1ZTtcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJpc0ltYWdlSG92ZXIgPSBmYWxzZTtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzSW1hZ2VIb3ZlclwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBlbmQ7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIXF1ZXMuaXNSZWFkT25seVwiIChjbGljayk9XCJvbkltYWdlRWRpdChxdWVzKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEuMTA2NyA2LjA3MTc0TDkuOTI4MzMgNC44OTM0TDIuMTY2NjcgMTIuNjU1MVYxMy44MzM0SDMuMzQ1TDExLjEwNjcgNi4wNzE3NFpNMTIuMjg1IDQuODkzNEwxMy40NjMzIDMuNzE1MDdMMTIuMjg1IDIuNTM2NzRMMTEuMTA2NyAzLjcxNTA3TDEyLjI4NSA0Ljg5MzRaTTQuMDM1IDE1LjUwMDFIMC41VjExLjk2NDJMMTEuNjk1OCAwLjc2ODQwM0MxMS44NTIxIDAuNjEyMTc3IDEyLjA2NCAwLjUyNDQxNCAxMi4yODUgMC41MjQ0MTRDMTIuNTA2IDAuNTI0NDE0IDEyLjcxNzkgMC42MTIxNzcgMTIuODc0MiAwLjc2ODQwM0wxNS4yMzE3IDMuMTI1OUMxNS4zODc5IDMuMjgyMTggMTUuNDc1NyAzLjQ5NDEgMTUuNDc1NyAzLjcxNTA3QzE1LjQ3NTcgMy45MzYwNCAxNS4zODc5IDQuMTQ3OTYgMTUuMjMxNyA0LjMwNDI0TDQuMDM1ODMgMTUuNTAwMUg0LjAzNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzZDNzU3RFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhcXVlcy5pc1JlYWRPbmx5XCIgKGNsaWNrKT1cIm9uSW1hZ2VEZWxldGUocXVlcylcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE0IDMuOTg3MjZDMTEuNzggMy43NjcyNiA5LjU0NjY3IDMuNjUzOTMgNy4zMiAzLjY1MzkzQzYgMy42NTM5MyA0LjY4IDMuNzIwNiAzLjM2IDMuODUzOTNMMiAzLjk4NzI2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk01LjY2NjUgMy4zMTM2Mkw1LjgxMzE3IDIuNDQwMjhDNS45MTk4NCAxLjgwNjk1IDUuOTk5ODQgMS4zMzM2MiA3LjEyNjUgMS4zMzM2Mkg4Ljg3MzE3QzkuOTk5ODQgMS4zMzM2MiAxMC4wODY1IDEuODMzNjIgMTAuMTg2NSAyLjQ0Njk1TDEwLjMzMzIgMy4zMTM2MlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuNTY2NyA2LjA5Mzc1TDEyLjEzMzQgMTIuODA3MUMxMi4wNiAxMy44NTM3IDEyIDE0LjY2NzEgMTAuMTQgMTQuNjY3MUg1Ljg2MDAyQzQuMDAwMDIgMTQuNjY3MSAzLjk0MDAyIDEzLjg1MzcgMy44NjY2OCAxMi44MDcxTDMuNDMzMzUgNi4wOTM3NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi44ODY0NyAxMS4wMDA0SDkuMTA2NDdcIiBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuMzMzNSA4LjMzMzI1SDkuNjY2ODNcIiBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInF1ZXMuaXNSZWFkT25seVwiIFtzcmNdPVwicXVlcy5pbWFnZURhdGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXMuaXNSZWFkT25seVwiIGNsYXNzPVwibG9nby1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTG9nbyBwcmV2aWV3IGFyZWEgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9nby1wcmV2aWV3XCIgKm5nSWY9XCJxdWVzLmlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInF1ZXMuaW1hZ2VEYXRhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFVwbG9hZCBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXMuaW1hZ2VEYXRhXCIgY2xhc3M9XCJsb2dvLXVwbG9hZC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJsb2dvLXVwbG9hZC17e2l9fVwiIGNsYXNzPVwibG9nby11cGxvYWQtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvSW1hZ2Uuc3ZnXCIgYWx0PVwiVXBsb2FkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+VXBsb2FkIEltYWdlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJsb2dvLXVwbG9hZC17e2l9fVwiIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImZpbGVDaGFuZ2VFdmVudChxdWVzLCAkZXZlbnQpXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBNU00xMEpVTDI1IGljb24tc2VsZWN0b3IgLS0+XG4gICAgICAgICAgICAgICAgPG54dC1pY29uLXNlbGVjdG9yIFthbGxJY29uc109XCJhbGxJY29uc1wiICpuZ0lmPVwicXVlcy50eXBlID09PSAnSWNvbidcIiBbcmVxdWlyZWRdPVwicXVlcy5pc09wdGlvbmFsXCIgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbbGFiZWxGb250XT1cInF1ZXMuZm9udFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIocXVlcy5pZCsnLnF1ZXN0aW9uVGV4dCcpIHwgbnh0Q3VzdG9tVHJhbnNsYXRlIDogcXVlcz8ucXVlc3Rpb25UZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29sb3JdPVwicXVlcy5mb250Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxTaXplXT1cInF1ZXMuZm9udFNpemVcIiBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCIgW3Nob3dMYWJlbF09XCJxdWVzLnN0eWxlPy5zaG93TGFiZWxcIiAoaWNvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7XCI+PC9ueHQtaWNvbi1zZWxlY3Rvcj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjFNQVIyNSBsaW5lIC0tPlxuICAgICAgICAgICAgICAgIDxociAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xpbmUnXCIgY2xhc3M9XCJjdXN0b20tbGluZVwiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWZsZXhcIiAvPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTNNQVIyNSBkYXRhIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxueHQtZGF0YXRhYmxlICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGFibGUnXCIgaXNFZGl0Um93IGlzRGVsZXRlUm93IGFjdGlvbkJ1dHRvbiBpc0J1dHRvbnMgW3F1ZXN0aW9uXT1cInF1ZXNcIiBmcm9tPVwiZm9ybUJ1aWxkZXJcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYmxlQ29uZmlnXT1cInF1ZXMudGFibGVDb25maWdcIiB0YWJsZUlkPVwiXCIgZGlyZWN0aW9uPVwibHRyXCIgdGFibGVXaWR0aD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICA8L254dC1kYXRhdGFibGU+XG4gICAgICAgICAgICAgICAgPCEtLSBsaXN0IC0tPlxuICAgICAgICAgICAgICAgIDxueHQtc2VhcmNoLWJveCAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMaXN0J1wiIFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLmlkXCIgW3BsYWNlSG9sZGVyVGV4dF09XCJxdWVzLnF1ZXN0aW9uIHx8ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIChzZWFyY2hWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiPlxuICAgICAgICAgICAgICAgIDwvbnh0LXNlYXJjaC1ib3g+XG5cbiAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDlGRUIyNCBBZGRlZCBjb25kaXRpb24gb2Ygc3FPcHRpb24gdG8gdGhlIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duICpuZ0lmPVwicXVlcz8udHlwZSA9PT0gJ0Ryb3Bkb3duJyAmJiBxdWVzPy5vcHRpb25zXCIgW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCIgW3Rva2VuXT1cInRva2VuXCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJxYkl0ZW0uaXNTaGVuZ2VsID8gcXVlcy5pbnB1dCA6IHF1ZXMuc2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcmVmZXJlbmNlRmllbGRdPVwicXVlcy5yZWZlcmVuY2VGaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDwhLS0gLy8gVkQgMDJBdWcyNCBjdXN0b20tcmFkaW8gY29tcG9uZW50IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdSYWRpbycgJiYgcXVlcz8ub3B0aW9uc1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXJhZGlvIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiIFtxdWVzdGlvbl09XCJxdWVzXCIgW3Rva2VuXT1cInRva2VuXCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCIgW2lkXT1cInF1ZXMuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCIgW2Vycm9yTWVzc2FnZV09XCJxdWVzLmVycm9yTWVzc2FnZVwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXJhZGlvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBBdHRhY2htZW50IC8gRmlsZXMgLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1maWxlLXVwbG9hZCAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0ZpbGUnXCIgW2xpbWl0RmlsZVVwbG9hZGluZ109XCI1XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIFthbGxGaWxlc109XCJxdWVzLmlucHV0XCIgKHNlbGVjdGVkRmlsZURhdGEpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LnZhbHVlLCRldmVudC5xdWVzdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAoZGVsZXRlZEZpbGVEYXRhKT1cImRlbGV0ZUZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1maWxlLXVwbG9hZD5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzExSlVOMjUgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgIDxueHQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlcy50eXBlID09PSAnQnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIFtidG5IZWlnaHRdPVwiJzUwcHgnXCIgW2J0bldpZHRoXT1cIicxNTBweCdcIiBbYnV0dG9uVmFsdWVdPVwicXVlcz8ucXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9ueHQtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTFKVU4yNSBib29rIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdCb29rJ1wiIFtxYkl0ZW1dPVwicXVlcy5xYkl0ZW1cIiBbbGFiZWxWYWx1ZV09XCJsYWJlbFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uc109XCJyZWFkUXVlc3Rpb25zKHF1ZXMucWJSZWZlcmVuY2UsIHF1ZXMucWJSZWZlcmVuY2VRdWVzdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IFRleHQsIEVtYWlsLCBsYWJlbCwgbnVtYmVyLCBCb29sZWFuLCByaWNoIHRleHQgZWRpdG9yLCBEYXRlVGltZSwgRGF0ZSwgVGltZS0tPlxuICAgICAgICAgICAgICAgIDxueHQtaW5wdXQgICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGV4dCcgfHwgcXVlcy50eXBlID09PSAnRW1haWwnIHx8IHF1ZXMudHlwZSA9PT0gJ051bWJlcicgfHwgcXVlcy50eXBlID09PSAnTGFiZWwnIHx8IHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nIHx8IHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScgfHwgcXVlcy50eXBlID09PSAnRGF0ZVRpbWUnIHx8IHF1ZXMudHlwZSA9PT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PT0gJ1RpbWUnIHx8IHF1ZXMudHlwZSA9PT0gJ1RleHRBcmVhJ1wiXG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInF1ZXMudHlwZSA9PT0gJ1RleHQnID8gJ3RleHQnIDogcXVlcy50eXBlID09PSAnRW1haWwnID8gJ2VtYWlsJyA6IHF1ZXMudHlwZSA9PT0gJ051bWJlcicgPyAnbnVtYmVyJyA6IHF1ZXMudHlwZSA9PT0gJ0xhYmVsJyA/ICdsYWJlbCcgOiBxdWVzLnR5cGUgPT09ICdCb29sZWFuJyA/ICdjaGVja2JveCcgOiBxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnID8gJ3JpY2h0ZXh0JyA6IHF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJyA/ICdkYXRldGltZScgOiBxdWVzLnR5cGUgPT09ICdEYXRlJyA/ICdkYXRlJyA6ICBxdWVzLnR5cGUgPT09ICdUaW1lJyA/ICd0aW1lJyA6IHF1ZXMudHlwZSA9PT0gJ1RleHRBcmVhJyA/ICd0ZXh0YXJlYScgOiAndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsRm9udF09XCJxdWVzLmZvbnRcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicXVlcz8ucXVlc3Rpb25UZXh0ID8gKChxdWVzLmlkKycucXVlc3Rpb25UZXh0JykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBxdWVzPy5xdWVzdGlvblRleHQpOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cInF1ZXMuZm9udENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsU2l6ZV09XCJxdWVzLmZvbnRTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0VmFsdWVTaXplXT1cInF1ZXMuZm9udFNpemVcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0V2VpZ2h0XT1cInF1ZXMuZm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93TGFiZWxdPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiIHN2Z1dpZHRoPVwiMjBweFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzPy5xdWVzdGlvbiA/ICgocXVlcy5pZCsnLnF1ZXN0aW9uJykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBxdWVzPy5xdWVzdGlvbiApOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJxdWVzLmlzT3B0aW9uYWxcIiBpbnB1dEJnQ29sb3I9XCIjRkFGQUZBXCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwicXVlcy50cmFja2luZ0lkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRJY29uTGVmdFNyY109XCJxdWVzLmljb25MZWZ0U3JjXCIgXG4gICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L254dC1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tU0tTMjVNQVIyNSBNb2RhbCBPdmVybGF5IC0tPlxuPGRpdiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIiAqbmdJZj1cImlzSW1hZ2VFZGl0XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zZS1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCI+w5c8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJbWFnZSBFZGl0b3IgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudD8udHlwZSA9PT0gJ0ltYWdlJ1wiPlxuICAgICAgICAgICAgPGltYWdlLWNyb3BwZXIgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGFcIiBbaW1hZ2VCYXNlNjRdPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQub3JnSW1hZ2VEYXRhXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbYWxpZ25JbWFnZV09XCJhbGlnbkltYWdlXCIgW3JvdW5kQ3JvcHBlcl09XCJyb3VuZENyb3BwZXJcIiBbYmFja2dyb3VuZENvbG9yXT1cIid3aGl0ZSdcIlxuICAgICAgICAgICAgICAgIGltYWdlQWx0VGV4dD1cIkFsdGVybmF0aXZlIGltYWdlIHRleHRcIiBbYWxsb3dNb3ZlSW1hZ2VdPVwiZmFsc2VcIiBbaGlkZVJlc2l6ZVNxdWFyZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtjYW52YXNSb3RhdGlvbl09XCJjYW52YXNSb3RhdGlvblwiIFthc3BlY3RSYXRpb109XCJhc3BlY3RSYXRpb1wiIFtjb250YWluV2l0aGluQXNwZWN0UmF0aW9dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cImZhbHNlXCIgW2Nyb3BwZXJTdGF0aWNXaWR0aF09XCJjcm9wcGVyU3RhdGljV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtjcm9wcGVyU3RhdGljSGVpZ2h0XT1cImNyb3BwZXJTdGF0aWNIZWlnaHRcIiBbY3JvcHBlck1pbldpZHRoXT1cImNyb3BwZXJNaW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgW2Nyb3BwZXJNaW5IZWlnaHRdPVwiY3JvcHBlck1pbkhlaWdodFwiIFtjcm9wcGVyTWF4V2lkdGhdPVwiY3JvcHBlck1heFdpZHRoXCJcbiAgICAgICAgICAgICAgICBbY3JvcHBlck1heEhlaWdodF09XCJjcm9wcGVyTWF4SGVpZ2h0XCIgW3Jlc2V0Q3JvcE9uQXNwZWN0UmF0aW9DaGFuZ2VdPSd0cnVlJyBbKGNyb3BwZXIpXT1cImNyb3BwZXJcIlxuICAgICAgICAgICAgICAgIFsodHJhbnNmb3JtKV09XCJ0cmFuc2Zvcm1cIiBbb25seVNjYWxlRG93bl09XCJ0cnVlXCIgb3V0cHV0PVwiYmxvYlwiIGZvcm1hdD1cInBuZ1wiXG4gICAgICAgICAgICAgICAgKGltYWdlQ3JvcHBlZCk9XCJpbWFnZUNyb3BwZWQoJGV2ZW50KVwiIChjcm9wcGVyUmVhZHkpPVwiY3JvcHBlclJlYWR5KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvaW1hZ2UtY3JvcHBlcj5cblxuICAgICAgICAgICAgPCEtLSBDb250cm9scyAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGFcIiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyb3RhdGVMZWZ0KClcIiB0aXRsZT1cIlJvdGF0ZSBMZWZ0XCI+4p+yPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyb3RhdGVSaWdodCgpXCIgdGl0bGU9XCJSb3RhdGUgUmlnaHRcIj7in7M8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInpvb21PdXQoKVwiIHRpdGxlPVwiWm9vbSBPdXRcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJ6b29tSW4oKVwiIHRpdGxlPVwiWm9vbSBJblwiPis8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVMZWZ0KClcIiB0aXRsZT1cIk1vdmUgTGVmdFwiPuKGkDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZVJpZ2h0KClcIiB0aXRsZT1cIk1vdmUgUmlnaHRcIj7ihpI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVVcCgpXCIgdGl0bGU9XCJNb3ZlIFVwXCI+4oaRPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlRG93bigpXCIgdGl0bGU9XCJNb3ZlIERvd25cIj7ihpM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cImZsaXBIb3Jpem9udGFsKClcIiBbY2xhc3MuZW5hYmxlZF09XCJ0cmFuc2Zvcm0uZmxpcEhcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkZsaXAgSG9yaXpvbnRhbGx5XCI+4oaUPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJmbGlwVmVydGljYWwoKVwiIFtjbGFzcy5lbmFibGVkXT1cInRyYW5zZm9ybS5mbGlwVlwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRmxpcCBWZXJ0aWNhbGx5XCI+4oaVPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyZXNldEltYWdlKClcIiB0aXRsZT1cIlJlc2V0XCI+w5c8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|
|
804
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0RSxNQUFNLGVBQWUsQ0FBQztBQUVqSyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztB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QUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkcsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFL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QUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0I7cUJBQ3JUOzswQkFpR0UsTUFBTTsyQkFBQyxRQUFRO3lDQTVGVCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0UsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBa0VJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBTaW1wbGVDaGFuZ2VzLCBDb21wb25lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXN0aW9uLCBRdWVzdGlvbkJvb2sgfSBmcm9tICcuLi8uLi93cmFwcGVyJztcbmltcG9ydCB7IEVycm9yV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2Vycm9yV3JhcHBlcic7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlcGVuZGVuY3lNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kZXBlbmRlbmN5TWV0YSc7XG5pbXBvcnQgeyBDcm9wcGVyUG9zaXRpb24sIERpbWVuc2lvbnMsIEltYWdlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbWFnZUNyb3BwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvY29tcG9uZW50L2ltYWdlLWNyb3BwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbVJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tcmFkaW8vY3VzdG9tLXJhZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1kcm9wZG93bi9jdXN0b20tZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IE54dFNlYXJjaEJveCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHREYXRhdGFibGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBpY2tMb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcGljay1sb2NhdGlvbi9waWNrLWxvY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21Nb2RlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLW1vZGVsL2N1c3RvbS1tb2RlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1jYWxlbmRhci9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEkxOG5QaXBlIH0gZnJvbSAnLi4vLi4vaTE4bi5waXBlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ueHQtaW5wdXQvbnh0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2J1dHRvbi9ueHQtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ljb24tc2VsZWN0b3IvaWNvbi1zZWxlY3Rvci5jb21wb25lbnQnOyAvL01TTTEwSlVMMjUgaWNvbiBzZWxlY3RvciBjb21wb25lbnRcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS9zYWxlc2ZvcmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTnh0Q3VzdG9tVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGUvY3VzdG9tLXRyYW5zbGF0ZS5waXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXF1ZXN0aW9uYm9vaycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsIEltYWdlQ3JvcHBlckNvbXBvbmVudCwgTnh0RmlsZVVwbG9hZENvbXBvbmVudCwgQ3VzdG9tUmFkaW9Db21wb25lbnQsIEN1c3RvbURyb3Bkb3duQ29tcG9uZW50LCBOeHRCdXR0b25Db21wb25lbnQsIE54dFNlYXJjaEJveCwgTnh0RGF0YXRhYmxlLCBQaWNrTG9jYXRpb25Db21wb25lbnQsIEN1c3RvbU1vZGVsQ29tcG9uZW50LCBDdXN0b21DYWxlbmRhckNvbXBvbmVudCwgSTE4blBpcGUsIE1hdFRvb2x0aXBNb2R1bGUsIE54dElucHV0LCBJY29uU2VsZWN0b3JDb21wb25lbnQsIE54dEN1c3RvbVRyYW5zbGF0ZVBpcGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25ib29rQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIEBJbnB1dCgpIHF1ZXN0aW9uczogYW55W107XG4gIEBJbnB1dCgpIGVycm9yRmllbGRJZDogYW55O1xuICBASW5wdXQoKSBsYWJlbFZhbHVlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRva2VuOiBzdHJpbmc7IC8vIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0XG4gIEBJbnB1dCgpIGlzRWRpdDogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGhhbmRsZURyb3BEb3duOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IC8vIFZEIDE5SnVsMDEgLSBnZXQgdXBkYXRlZCBxdWVzdGlvblxuICBAT3V0cHV0KCkgc2luZ2xlRmllbGRDaGFuZ2VFbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoKSBkcm9wRG93bkRhdGE6IGFueTtcbiAgQElucHV0KCkgZGF0YUJpbmQ6IGFueTtcbiAgQElucHV0KCkgYWxsSWNvbnM6IGFueVtdID0gW107IC8vTVNNMTBKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudCBpbnB1dFxuICBASW5wdXQoKSB0aGVtZUNvbG9yOiBzdHJpbmc7IC8vTVNNMTBKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudCBpbnB1dFxuICBASW5wdXQoKSBjZG5JY29uVVJMOiBzdHJpbmcgPSAnJzsgLy9NU00xMEpVTDI1IGljb24gc2VsZWN0b3IgY29tcG9uZW50IGlucHV0XG4gIEBJbnB1dCgpIGRpcmVjdGlvbiA9ICdsdHInOyBcbiAgLy9AVmlld0NoaWxkKENvbXBvbmVudGhvc3REaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGR5bmFtaWNIb3N0OiBDb21wb25lbnRob3N0RGlyZWN0aXZlO1xuICBzdWJRdWVzdGlvbnM6IFF1ZXN0aW9uW107XG4gIHNlbGVjdGVkRmlsZURhdGE6IGFueVtdID0gW107XG4gIGxvYWRDb21wb25lbnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIC8vIEhBIDI4REVDMjMgQWRkZWQgc3R5bGluZyBhbmQgbG9naWNzIHRvIGxvYWQgdGhlIGJvb2sgdHlwZSBxdWVzdGlvbnMgXG4gIHFiUmVmOiBRdWVzdGlvbkJvb2s7XG4gIC8vICBIQSAxOURFQzIzIERlY2xhcmF0aW9uIGZvciBTYWxlc2ZvcmNlIFN0eWxpbmdcbiAgc3R5bGU6IGFueTtcbiAgYm9va1N0eWxlOiBhbnk7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBpc0ltYWdlRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZEltYWdlRWxlbWVudDogYW55O1xuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge1xuICAgIHRyYW5zbGF0ZVVuaXQ6ICdweCcsXG4gICAgc2NhbGU6IDEsXG4gICAgcm90YXRlOiAwLFxuICAgIGZsaXBIOiBmYWxzZSxcbiAgICBmbGlwVjogZmFsc2UsXG4gICAgdHJhbnNsYXRlSDogMCxcbiAgICB0cmFuc2xhdGVWOiAwXG4gIH07XG4gIGNhbnZhc1JvdGF0aW9uID0gMDtcbiAgY3JvcHBlcj86IENyb3BwZXJQb3NpdGlvbjtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBjcm9wcGVyTWF4SGVpZ2h0ID0gMDtcbiAgY3JvcHBlck1heFdpZHRoID0gMDtcbiAgY3JvcHBlck1pbkhlaWdodCA9IDA7XG4gIGNyb3BwZXJNaW5XaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNXaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNIZWlnaHQgPSAwO1xuICBhc3BlY3RSYXRpbyA9IDQgLyAzO1xuICByb3VuZENyb3BwZXIgPSBmYWxzZTtcbiAgaW1hZ2VDaGFuZ2VkRXZlbnQ6IEV2ZW50IHwgbnVsbCA9IG51bGw7XG4gIGFsaWduSW1hZ2UgPSAnY2VudGVyJyBhcyBjb25zdDtcbiAgaXNJbWFnZUhvdmVyID0gZmFsc2U7XG5cbiAgLy8gUlMgMTdKQU4yMDI1XG4gIC8vRm9ybWF0cyBhbmQgcmV0dXJucyBmaWxlIHVwbG9hZCByZXF1aXJlbWVudHMgZnJvbSBhIEpTT04gc3RyaW5nXG4gIGdldEZpbGVSZXF1aXJlbWVudHMoZmllbGRzTWV0YTogYW55KTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YURhdGEgPSB0eXBlb2YgZmllbGRzTWV0YSA9PT0gJ29iamVjdCcgID8gIGZpZWxkc01ldGEgOiBKU09OLnBhcnNlKGZpZWxkc01ldGEpIDtcbiAgICAgIGNvbnN0IGZpbGVDb25maWcgPSBtZXRhRGF0YVswXTtcblxuICAgICAgaWYgKCFmaWxlQ29uZmlnKSByZXR1cm4gJyc7XG5cbiAgICAgIGNvbnN0IHJlcXVpcmVtZW50cyA9IFtdO1xuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5hbGxvd2VkVHlwZXM/Lmxlbmd0aCkge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgQWNjZXB0ZWQgZm9ybWF0czogJHtmaWxlQ29uZmlnLmFsbG93ZWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5tYXhGaWxlU2l6ZSkge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgTWF4aW11bSBzaXplIHBlciBmaWxlOiAke2ZpbGVDb25maWcubWF4RmlsZVNpemUgLyAxMDQ4NTc2fU1CYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlQ29uZmlnLm1heEZpbGVzKSB7XG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBNYXhpbXVtIG51bWJlciBvZiBmaWxlczogJHtmaWxlQ29uZmlnLm1heEZpbGVzfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVxdWlyZW1lbnRzLm1hcChyZXEgPT4gcmVxLnRyaW0oKSkuam9pbignXFxuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgZmllbGRzTWV0YTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKSBoYWRsZURyb3BEb3duRGVwZW5kZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gIEBPdXRwdXQoKSBoYW5kbGVDYWxlbmRhckRhdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBib29rUXVlc3Rpb25zTWFwOiBhbnkgPSBuZXcgTWFwKCk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBWRCAxM1NlcDI0IGNoYW5nZXNcbiAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XG4gICAgLy8gVkQgc2VwMTMyNCBjaGFuZ2VzIC0gcHJvY2VzcyBkYXRhIHdoZW4gZGF0YWJpbmQgdmFsdWUgY2hhbmdlXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY3VzdG9tQ2hhbmdlJC5zdWJzY3JpYmUoXG4gICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGNoYW5nZVZhbHVlID09ICdkYXRhQmluZCcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFNLUzIwTUFSMjUgRW5zdXJlIHRoZSBjaGlsZCBjb21wb25lbnQgaXMgYXZhaWxhYmxlIGJlZm9yZSBjYWxsaW5nIHRoZSBtZXRob2RcbiAgICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgcXVlcy5zdWJUZXh0IGlzIGFsd2F5cyBhbiBvYmplY3QgYnkgcGFyc2luZyBpdCBpZiBpdCdzIGEgc3RyaW5nXG4gICAgLy8gIEFQLTI4TUFSMjUgQWRkIEJvb2xlYW5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2gocXVlcyA9PiB7XG4gICAgICAgIHF1ZXNbJ3N1YlRleHQnXSA9IHR5cGVvZiBxdWVzPy5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IHF1ZXM/LnN1YlRleHQgOiBKU09OLnBhcnNlKHF1ZXNbJ3N1YlRleHQnXSk7XG4gICAgICAgIGxldCBhcGlPYmo6IGFueSA9IHF1ZXMuc3ViVGV4dFxuICAgICAgICB0aGlzLmhhbmRsZVF1ZXMocXVlcyk7XG4gICAgICAgIGxldCBpbnB1dDogYW55O1xuICAgICAgICBpbnB1dCA9IHt9XG4gICAgICAgIGlucHV0Wydpc09iamVjdCddID0gIGFwaU9iaj8uaXNPYmplY3RcbiAgICAgICAgaW5wdXRbJ2ZpZWxkJ10gPSBhcGlPYmo/LmRlZmF1bHRGaWVsZCB8fCBhcGlPYmo/LmZpZWxkPy5bMF0gfHwgYXBpT2JqPy5maWVsZCB8fCBudWxsXG4gICAgICAgIGlucHV0Wyd2YWx1ZU9iaiddID0gcXVlcy50eXBlID09ICdJbWFnZScgPyBxdWVzLm9yZ0ltYWdlRGF0YSA6IHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nID8gIHR5cGVvZiBxdWVzLmlucHV0ICE9PSAndW5kZWZpbmVkJyA/IHF1ZXMuaW5wdXQgPT09IHRydWUgIDogdHlwZW9mIHF1ZXMuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHF1ZXMuZGVmYXVsdFZhbHVlID09PSB0cnVlIDogZmFsc2UgOiBxdWVzLnR5cGUgPT09ICdUYWJsZScgPyB7ZGF0YTogcXVlcy5pbnB1dH0gOiBxdWVzLmlucHV0ICB8fCBxdWVzLmRlZmF1bHRWYWx1ZSB8fCBudWxsXG4gICAgICAgIGlucHV0WydyZWZlcmVuY2VGaWVsZCddID0gcXVlcy5yZWZlcmVuY2VGaWVsZCB8fCBudWxsXG4gICAgICAgIGlucHV0Wydmcm9tUXVlc3Rpb25JZCddID0gcXVlcy5pZCB8fCBudWxsXG4gICAgICAgIHRoaXMuY2hpbGRFdmVudENhcHR1cmUoaW5wdXQsIHF1ZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgaGFuZGxlUXVlcyhxdWVzOiBhbnkpIHtcbiAgICAvLyBIQSAxOS1KQU4tMjQgSWYgY29uZGl0aW9uIGlzIGZvciBiaW5kLWluLCBjb3JyZWN0aW9uXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRpbmcgY29uZGl0aW9uIHRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvclxuICAgIGlmICh0aGlzLmRhdGFCaW5kICYmIE9iamVjdC5rZXlzKHRoaXMuZGF0YUJpbmQpLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmZsYXR0ZW5PYmplY3QodGhpcy5kYXRhQmluZClcbiAgICAgIGZvciAobGV0IFtrZXksIHZhbF0gb2YgcmVzdWx0KSB7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gdmFsO1xuICAgICAgICBpZiAocXVlcy5yZWZlcmVuY2VGaWVsZCA9PT0ga2V5KSB7XG4gICAgICAgICAgaWYgKHF1ZXMudHlwZSA9PT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT09ICdSYWRpbycpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuc3FPcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAvLyAgIGlmIChlbGVtZW50WydyZWZlcmVuY2VGaWVsZCddID09PSBrZXkpIHtcbiAgICAgICAgICAgIC8vICAgICBlbGVtZW50WydpbnB1dCddID0gcXVlcy5pbnB1dCA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgLy8gICAgIGVsZW1lbnRbJ3NlbGVjdGVkVmFsdWUnXSA9IHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMjRKQU4yNCBUbyBiaW5kLWluIERhdGUgYW5kIERhdGVUaW1lXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSBuZXcgRGF0ZSh2YWx1ZT8udG9TdHJpbmcoKSkgIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIQSAxMkZFQjI0IFRvIGJpbmQtaW4gTG9jYXRpb24gVHlwZVxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJykge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVbJ2FkZHJlc3MnXSA/IHZhbHVlWydhZGRyZXNzJ10gOiB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzIGZvciBkYXRhIGJpbmRJblxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0NhbGVuZGFyJykge1xuICAgICAgICAgICAgbGV0IGVudHJpZXMgPSB0eXBlb2YgcXVlc1snZmllbGRzTWV0YSddID09PSAnb2JqZWN0JyA/IHF1ZXNbJ2ZpZWxkc01ldGEnXSA6IEpTT04ucGFyc2UocXVlc1snZmllbGRzTWV0YSddKTtcbiAgICAgICAgICAgIGlmIChlbnRyaWVzKSB7XG4gICAgICAgICAgICAgIGxldCByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBxUmVmZXJlbmNlID0gSlNPTi5wYXJzZShlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUXVlc3Rpb25zLnB1c2gocVJlZmVyZW5jZT8ucXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlPy5mb3JFYWNoKGNhbGVuZGFyQXJyYXkgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjYWxlbmRhckFycmF5LmRhdGUpO1xuICAgICAgICAgICAgICAgICAgY2FsZW5kYXJBcnJheS5lbnRyaWVzLmZvckVhY2goaW5wdXRFbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbnB1dEVudHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVF1ZXN0aW9ucy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZWZlcmVuY2VGaWVsZCA9PSBrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnRGF0ZScgfHwgZmllbGQudHlwZSA9PSAnRGF0ZVRpbWUnIHx8IGZpZWxkLnR5cGUgPT0gJ1RpbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSBuZXcgRGF0ZSh2Py50b1N0cmluZygpKSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBpZiAoZmllbGQudHlwZSA9PT0gJ0Ryb3Bkb3duJyB8fCBmaWVsZC50eXBlID09PSAnUmFkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuc2VsZWN0ZWRWYWx1ZSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSB2ICB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IHYgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmFkZEV2ZW50KGRhdGUsIHJlZmVyZW5jZVF1ZXN0aW9ucyk7Ly9TS1MgMjdTRVAyNCBlYWNoIGV2ZW50IGFkZGVkIHRvIGFsbEV2ZW50cyBhcnJheVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuYWRkRXZlbnQoZGF0ZSxyZWZlcmVuY2VRdWVzdGlvbnMpOyAvL3RoaXMgaXMgb25seSBsYXN0IGV2ZW50IGFkZGVkIHRvIGFsbEV2ZW50cyBhcnJheVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdGaWxlJykge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IFtdO1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHt9O1xuICAgICAgcXVlc3Rpb25bJ2lkJ10gPSBxdWVzLmlkO1xuICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLW91dCBMb2NhdGlvbiBUeXBlXG4gICAgICBpZiAocXVlcy50eXBlID09PSAnTG9jYXRpb24nKSB7XG4gICAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dCA/IHF1ZXMuaW5wdXQgOiBxdWVzLnNlbGVjdGVkVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRmlsZScpIHtcbiAgICAgICAgLy8gVkQgMjMgT2N0MjQgLSBmaWxlIHR5cGUgY2hhbmdlc1xuICAgICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPyBxdWVzLmlucHV0IDogcXVlcy5kZWZhdWx0VmFsdWUgfHwgW107XG4gICAgICB9XG4gICAgICBxdWVzdGlvblsndHlwZSddID0gcXVlcy50eXBlO1xuICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uTnVtYmVyJ10gPSBxdWVzLnF1ZXN0aW9uTnVtYmVyO1xuICAgICAgcXVlc3Rpb25bJ3JlZmVyZW5jZUZpZWxkJ10gPSBxdWVzPy5yZWZlcmVuY2VGaWVsZDtcbiAgICAgIHF1ZXN0aW9uWydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzPy5zZWxlY3RlZFZhbHVlOyAgLy8gTVIgMzFKQU4yNCBOZWVkIHRvIHBhc3MgdGhlIHNlbGVjdGVkIHZhbHVlIHRvb1xuICAgIH1cbiAgfVxuIC8vIFNLUzIwTUFSMjUgZmxhdHRlbmluZyBuZXN0ZWQgb2JqZWN0cywgbWFwcGluZyB2YWx1ZXMgdXNpbmcgIHJlZmVyZW5jZUZpZWxkXG4gZmxhdHRlbk9iamVjdChvYmo6IGFueSwgcGFyZW50S2V5ID0gJycsIGluY2x1ZGVPYmplY3RzID0gdHJ1ZSkge1xuICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gIGZvciAobGV0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgIGxldCBuZXdLZXkgPSBwYXJlbnRLZXkgPyBgJHtwYXJlbnRLZXl9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHQucHVzaChbbmV3S2V5LCB2YWxdKTsgLy8gSW5jbHVkZSBmdWxsIGFycmF5XG5cbiAgICAgIHZhbC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZsYXR0ZW5PYmplY3QoaXRlbSwgYCR7bmV3S2V5fVske2luZGV4fV1gLCBmYWxzZSkpOyAvLyBGbGF0dGVuIG9iamVjdHMgaW4gYXJyYXlzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goW2Ake25ld0tleX1bJHtpbmRleH1dYCwgaXRlbV0pOyAvLyBTdG9yZSBwcmltaXRpdmUgdmFsdWVzIGluIGFycmF5c1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGluY2x1ZGVPYmplY3RzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtuZXdLZXksIHZhbF0pOyAvLyBJbmNsdWRlIGZ1bGwgb2JqZWN0XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCguLi50aGlzLmZsYXR0ZW5PYmplY3QodmFsLCBuZXdLZXksIGZhbHNlKSk7IC8vIEZsYXR0ZW4gbmVzdGVkIG9iamVjdHNcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goW25ld0tleSwgdmFsXSk7IC8vIFN0b3JlIGtleS12YWx1ZSBwYWlyc1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4gIC8vIFZEIDEzU2VwMjQgY2hhbmdlc1xuICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICBwcm9jZXNzRGF0YSgpIHtcbiAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gQm9vayBTdHlsaW5nKFNsYWVzZm9yY2UpXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5XG4gICAgaWYgKHRoaXMucWJJdGVtPy5zdHlsZSkge1xuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlID0gdHlwZW9mIHRoaXMucWJJdGVtLnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycgKyB0aGlzLnFiSXRlbT8uc3R5bGUpIDogdGhpcy5xYkl0ZW0uc3R5bGU7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbENsYXNzID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsQ2xhc3MgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dENsYXNzID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0Q2xhc3MgPyB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dFN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5ib29rU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLnNob3dMYWJlbCA9IHRoaXMucWJJdGVtLnN0eWxlPy5zaG93TGFiZWwgPyB0aGlzLnFiSXRlbS5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5xYkl0ZW0pIHtcbiAgICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUgPSB7XG4gICAgICAgICAgXCJsYWJlbENsYXNzXCI6IFwiXCIsXG4gICAgICAgICAgXCJsYWJlbFN0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJsYWJlbFZhbHVlU3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcImlucHV0Q2xhc3NcIjogXCJcIixcbiAgICAgICAgICBcImlucHV0U3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcImJvb2tTdHlsZVwiOiBcIlwiLFxuICAgICAgICAgIFwic2hvd0xhYmVsXCI6IHRydWUsXG4gICAgICAgICAgXCJkaXJlY3Rpb25cIjogXCJsdHJcIixcbiAgICAgICAgICBcInF1ZXN0aW9uU3R5bGVcIjogXCJcIlxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnFiSXRlbS5zdHlsZS5xdWVzdGlvblN0eWxlID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5xdWVzdGlvblN0eWxlID8gdGhpcy5xYkl0ZW0/LnN0eWxlLnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgIHRoaXMuYm9va1N0eWxlID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5ib29rU3R5bGU7XG4gICAgdGhpcy5xdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHZhciBodG1sRWxlbWVudCA9IGVsZW1lbnQ/LnF1ZXN0aW9uVGV4dDtcbiAgICAgIHZhciB0ZXh0T25seSA9IGh0bWxFbGVtZW50Py5yZXBsYWNlKC88W14+XSo+L2csICcnKVxuICAgICAgZWxlbWVudC5xdWVzdGlvblRleHQgPSB0ZXh0T25seTtcbiAgICAgIC8vICBIQSAxOURFQzIzIExvZ2ljIGZvciBRdWVzdGlvbiBTdHlsaW5nKFNsYWVzZm9yY2UpXG4gICAgICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0Jvb2snKSB7XG4gICAgICAgIGlmIChlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddKSB7XG4gICAgICAgICAgdmFyIHFiID0gdHlwZW9mIGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10gPT09ICdvYmplY3QnICA/ICBlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddIDogSlNPTi5wYXJzZSggZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSkgO1xuICAgICAgICAgIGlmIChxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUpIHtcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9IHR5cGVvZiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyArIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSkgOiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQm9vayB0eXBlIHF1ZXN0aW9uIHN0eWxpbmdcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5pbnB1dENsYXNzID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dENsYXNzID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuaW5wdXRTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmJvb2tTdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uYm9va1N0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5zaG93TGFiZWwgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnNob3dMYWJlbCA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUucXVlc3Rpb25TdHlsZSA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG5cbiAgICAgICAgICAvLyBMb29wIGZvciBlYWNoIHF1ZXN0aW9uIGluIHRoZSBib29rXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddPy5zdWJRdWVzdGlvbnM/LmZvckVhY2gocXVlc3Rpb25Gcm9tQm9vayA9PiB7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgOiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsQ2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0Q2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0U3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmJvb2tTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmJvb2tTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnNob3dMYWJlbCA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnNob3dMYWJlbCA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5xdWVzdGlvblN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWxlbWVudFsncWJJdGVtJ10gPSBxYlsncXVlc3Rpb25ib29rJ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuc3R5bGUgPSBlbGVtZW50LnN0eWxlID8gdHlwZW9mIGVsZW1lbnQuc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyArIGVsZW1lbnQ/LnN0eWxlKSA6IGVsZW1lbnQ/LnN0eWxlIDogdGhpcy5xYkl0ZW0/LnN0eWxlO1xuXG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsQ2xhc3MgPSBlbGVtZW50LnN0eWxlPy5sYWJlbENsYXNzID8gZWxlbWVudC5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5sYWJlbFN0eWxlID8gZWxlbWVudC5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IGVsZW1lbnQuc3R5bGUubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuaW5wdXRDbGFzcyA9IGVsZW1lbnQuc3R5bGU/LmlucHV0Q2xhc3MgPyBlbGVtZW50LnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuaW5wdXRTdHlsZSA9IGVsZW1lbnQuc3R5bGUuaW5wdXRTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5ib29rU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5zaG93TGFiZWwgPSBlbGVtZW50LnN0eWxlPy5zaG93TGFiZWwgPyBlbGVtZW50LnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgZWxlbWVudC5zdHlsZS5xdWVzdGlvblN0eWxlID0gZWxlbWVudC5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IGVsZW1lbnQuc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuXG4gICAgICAvL1ZEIDAyQXVnMjQgZGVwZW5kZW50IGZpZWxkIHNob3cvaGlkZSBjaGFuZ2VzXG4gICAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgICAgIC8vIEFQLTI2TUFSMjUgRW5zdXJlIHF1ZXMuc3ViVGV4dCBpcyBhbHdheXMgYW4gb2JqZWN0IGJ5IHBhcnNpbmcgaXQgaWYgaXQncyBhIHN0cmluZ1xuICAgICAgaWYgKGVsZW1lbnQucmVmZXJlbmNlRmllbGQpIHtcbiAgICAgICAgZWxlbWVudC5kZXBlbmRlbnRSZWYgPSBlbGVtZW50LnJlZmVyZW5jZUZpZWxkO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuc3ViVGV4dCkge1xuICAgICAgICBlbGVtZW50WydzdWJUZXh0J10gPSB0eXBlb2YgZWxlbWVudD8uc3ViVGV4dCA9PT0gJ29iamVjdCcgPyBlbGVtZW50Py5zdWJUZXh0IDogSlNPTi5wYXJzZShlbGVtZW50WydzdWJUZXh0J10pO1xuICAgICAgICBsZXQgZGVwZW5kZW5jeU9iajogRGVwZW5kZW5jeU1ldGEgPSBlbGVtZW50LnN1YlRleHQ7XG4gICAgICAgIGlmIChkZXBlbmRlbmN5T2JqLmlzRGVwZW5kZW50RmllbGQpIHtcbiAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBWRCAwN0F1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY2hhbmdlQW5ub3VuY2VkJC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XG4gICAgICAgICAgICAvLyBWRCAyMEF1ZzI0IC0gaXNEZXBlbmRlbnRGaWVsZCBjaGFuZ2VcbiAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZSAhPSB1bmRlZmluZWQgJiYgZGVwZW5kZW5jeU9iai5pc0RlcGVuZGVudEZpZWxkKSB7XG4gICAgICAgICAgICAgIGlmIChjaGFuZ2VWYWx1ZS5mcm9tUXVlc3Rpb25JZCAmJiBjaGFuZ2VWYWx1ZS52YWx1ZU9iaiAhPT0gdW5kZWZpbmVkICYmICggQXJyYXkuaXNBcnJheShkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQpPyBkZXBlbmRlbmN5T2JqLnNvdXJjZVF1ZXN0aW9uSWQuaW5jbHVkZXMoY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQpIDogY2hhbmdlVmFsdWUuZnJvbVF1ZXN0aW9uSWQgPT09IGRlcGVuZGVuY3lPYmouc291cmNlUXVlc3Rpb25JZCkpIHtcbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50LmlzSGlkZGVuRmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5T2JqLmRlcGVuZGVudFZhbHVlID09IGNoYW5nZVZhbHVlLnZhbHVlT2JqKSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gJyc7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZXBlbmRlbnRSZWYgPT0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VGaWVsZCA9IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50LmlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnQuaWQpO1xuICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gZGVwZW5kZW50IHNlbGVjdGlvbiByZW1vdmUgdGhlIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGVwZW5kZW50UmVmID09IGNoYW5nZVZhbHVlLnJlZmVyZW5jZUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVmZXJlbmNlRmllbGQgPSAnJztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgICAgLy8gc3VuZGF5IGNvbW1lbnRcbiAgICAgIC8vIGlmIChlbGVtZW50LnR5cGUgPT09ICdDYWxlbmRhcicpIHtcbiAgICAgIC8vICAgdGhpcy5vcGVuQ2FsZW5kYXJDb21wb25lbnQoZWxlbWVudCk7XG4gICAgICAvLyB9XG4gICAgfSk7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9ucyk7XG4gIH1cbiAgLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gICAvLyBBUC0yNk1BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnRJZCkge1xuICAgIGxldCBlbGVtZW50c1RvSGlkZSA9IHRoaXMucXVlc3Rpb25zLmZpbHRlcihlbCA9PiB7XG4gICAgICBpZiAoZWwuc3ViVGV4dCkge1xuICAgICAgICBlbFsnc3ViVGV4dCddID0gdHlwZW9mIGVsPy5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IGVsPy5zdWJUZXh0IDogSlNPTi5wYXJzZShlbFsnc3ViVGV4dCddKTtcbiAgICAgICAgbGV0IGRlcE9iaiA9IGVsLnN1YlRleHQ7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRlcE9iai5zb3VyY2VRdWVzdGlvbklkKT8gZGVwT2JqLnNvdXJjZVF1ZXN0aW9uSWQuaW5jbHVkZXMoZWxlbWVudElkKSA6IGRlcE9iai5zb3VyY2VRdWVzdGlvbklkID09IGVsZW1lbnRJZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIGVsZW1lbnRzVG9IaWRlLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgZWwuaW5wdXQgPSAnJztcbiAgICAgIGVsLnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShlbCk7XG4gICAgICAvLyBSZWN1cnNpdmVseSBoaWRlIGVsZW1lbnRzIGRlcGVuZGVudCBvbiB0aGlzIG9uZVxuICAgICAgdGhpcy5oaWRlRGVwZW5kZW50RWxlbWVudHMoZWwuaWQpO1xuICAgIH0pO1xuICB9XG4vL0FQLTE5TUFZMjUgRW5zdXJlIHNxTGlzdCBpcyBhbHdheXMgYW4gYXJyYXkgYnkgZGVmYXVsdGluZyB0byBbXVxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XG4gICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zPy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gcXVlc0lkKSB8fCBbXTtcbiAgICBmb3IgKHZhciBzcSBvZiBzcUxpc3QpIHtcbiAgICAgIHNxLmVycm9yID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xuICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocmVjb3Jkcyk7XG4gIH1cblxuICAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XG4gIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzogYW55KSB7XG4gICAgbGV0IGRyb3Bkb3duRGF0YSA9IHt9O1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XG4gICAgaWYgKHF1ZXMpIHtcbiAgICAgIGlmIChxdWVzLnR5cGUgPT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT0gJ1JhZGlvJykge1xuICAgICAgICAvLyBIQSAxOUpBTjI0IENvcnJlY3Rpb24gb2YgZHJvcGRvd24gdmFsdWVzXG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbDtcbiAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGw7XG4gICAgICAgIC8vIGVtaXQgdGhlIGRyb3Bkb3duIGRhdGEgdG8gcGFyZW50XG4gICAgICAgIGRyb3Bkb3duRGF0YVsnZXZlbnQnXSA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBkcm9wZG93bkRhdGFbJ3F1ZXMnXSA9IHF1ZXM7XG4gICAgICAgIGlmIChkcm9wZG93bkRhdGFbJ2V2ZW50J10pIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZURyb3BEb3duLmVtaXQoZHJvcGRvd25EYXRhKTtcbiAgICAgICAgfSAgLy8gVkQgMjFERUMyMyAtIGRlcGVuZGVudCBmaWVsZCBjaGFuZ2VcbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdMb2NhdGlvbicpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iaj8gZXZlbnQudmFsdWVPYmouYWRkcmVzcyA6IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRmlsZScpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IHRoaXMuc2VsZWN0ZWRGaWxlRGF0YSA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xuICAgICAgICAvLyBIYW5kbGUgZmlsZSB2YWxpZGF0aW9uIGVycm9yc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbCkgJiYgZXZlbnQudmFsdWVPYmoubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gTm8gZmlsZXMgdXBsb2FkZWQgd2hlbiByZXF1aXJlZFxuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBxdWVzLmVycm9yTWVzc2FnZSA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbCkgJiYgZXZlbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIEZpbGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkXG4gICAgICAgICAgcXVlcy5lcnJvciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSB2YWxpZGF0aW9uIGVycm9ycyBmcm9tIHRoZSBmaWxlIHVwbG9hZCBjb21wb25lbnRcbiAgICAgICAgaWYgKGV2ZW50Py52YWxpZGF0aW9uRXJyb3JzICYmIGV2ZW50LnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgcXVlcy5lcnJvci5tZXNzYWdlID0gZXZlbnQudmFsaWRhdGlvbkVycm9yc1swXTsgLy8gVXNlIHRoZSBmaXJzdCB2YWxpZGF0aW9uIGVycm9yXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT0gJ0RhdGVUaW1lJykgeyAvLyBIQSAyNEpBTjI0IENvbnZlcnRpbmcgRGF0ZSBhbmQgRGF0ZVRpbWUgdG8gVVRDXG4gICAgICAgIGlmIChldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqIDogbnVsbCkge1xuICAgICAgICAgIGxldCBkID0gbmV3IERhdGUoZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGwpO1xuICAgICAgICAgIGlmICghaXNOYU4oZD8uZ2V0VGltZSgpKSkgeyAvL1NLUzIzQVBSMjUgQ2hlY2sgZm9yIHZhbGlkIGRhdGVcbiAgICAgICAgICAgICAgbGV0IHV0Y1N0cmluZyA9IGQ/LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB1dGNTdHJpbmc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdMaXN0Jykge1xuICAgICAgICAvLyBWRCAyMEF1ZzI0IGhhbmRsaW5nIHRoZSBsaXN0IHR5cGUgIGhhbmRsZSBtdWx0aXBsZSBvYmplY3QgdmFsdWVzXG4gICAgICAgIHF1ZXMuaW5wdXQgPSAoZXZlbnQudmFsdWVPYmogJiYgdHlwZW9mIGV2ZW50LnZhbHVlT2JqID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShldmVudC52YWx1ZU9iaikpID8gIGV2ZW50LmlzT2JqZWN0ID8gIGV2ZW50LnZhbHVlT2JqIDogdGhpcy5kYXRhU2VydmljZS5nZXRWYWx1ZShldmVudD8udmFsdWVPYmosIGV2ZW50Py5maWVsZCkgOiBldmVudC52YWx1ZU9iajtcbiAgICAgIH0vL1JTIDA2SkFOMjVcbiAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqIHx8IG51bGw7XG4gICAgICB9Ly8gIEFQLTI4TUFSMjUgQWRkIEJvb2xlYW5cbiAgICAgIGVsc2UgaWYocXVlcy50eXBlID09PSAnQm9vbGVhbicpe1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQudmFsdWVPYmo7XG4gICAgICAgIHF1ZXMuYm9vbGVhbiA9IGV2ZW50LnZhbHVlT2JqO1xuICAgICAgfVxuICAgICAgLy8gQVAtMTBBUFIyNSBOdW1iZXJcbiAgICAgIC8vIEFQMTlQQVIyNSAtaWYgY2hhbmdlIGVsc2UgaXNcbiAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ051bWJlcicpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IE51bWJlcihldmVudC52YWx1ZU9iaik7IFxuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdUYWJsZScpIHtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqLmRhdGE7IFxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC52YWx1ZU9iajtcbiAgICAgIH1cbiAgICAgIC8vUlMgMDZKQU4yNVxuICAgICAgLy8gVmFsaWRhdGUgZXJyb3IgbWVzc2FnZSAtIG1vZGlmaWVkIHRvIGhhbmRsZSByaWNoIHRleHRcbiAgICAgIGNvbnN0IGhhc0Vycm9yID0gcXVlcy5lcnJvck1lc3NhZ2UgJiYgKFxuICAgICAgICAocXVlcy50eXBlID09PSAnRmlsZScgJiYgcXVlcy5pbnB1dC5sZW5ndGggPT09IDApIHx8XG4gICAgICAgIChxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnICYmICghcXVlcy5pbnB1dCB8fCBxdWVzLmlucHV0LnRyaW0oKSA9PT0gJycpKSB8fFxuICAgICAgICAocXVlcy50eXBlICE9PSAnRmlsZScgJiYgcXVlcy5UeXBlICE9PSAnUmljaFRleHRBcmVhJyAmJiAhcXVlcy5pbnB1dClcbiAgICAgICk7XG4gICAgICBxdWVzLmVycm9yID0gaGFzRXJyb3IgPyBuZXcgRXJyb3JXcmFwcGVyKCkgOiBudWxsO1xuICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcbiAgICAgIC8vIE9uY2UgdGhlIHJpZ2h0IHZhbHVlIGlzIHN0b3JlZCBpbiBxdWVzLmlucHV0IHN0b3JlIHRoZSBxdWVzICh3aXRoIGlucHV0KSBpbiBzdG9yYWdlU2VydmljZVxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUocXVlcyk7XG4gICAgICAvLyBWRCAxOUp1bDAxIC0gZ2V0IHVwZGF0ZWQgcXVlc3Rpb25cbiAgICAgIHRoaXMuaGFuZGxlUXVlc3Rpb24uZW1pdChxdWVzKTtcbiAgICB9XG4gICAgaWYocXVlcz8uc2luZ2xlRmllbGRDaGFuZ2Upe1xuICAgICAgdGhpcy5zaW5nbGVGaWVsZENoYW5nZUVtaXQuZW1pdChxdWVzKTtcbiAgICAgIHF1ZXMuc2luZ2xlRmllbGRDaGFuZ2UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZGVsZXRlRmlsZShmaWxlRGF0YTogYW55KSB7XG4gIH1cbiAgZ2V0RHJvcERvd24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaGFkbGVEcm9wRG93bkRlcGVuZGVudC5lbWl0KGV2ZW50KTtcbiAgfVxuICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiAgZ2V0Q3VycmVudENhbGVuZGFyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmhhbmRsZUNhbGVuZGFyRGF0ZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGdldENhbGVuZGFyRXZlbnQoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5oYW5kbGVDYWxlbmRhckV2ZW50LmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuICAvLyBzdW5kYXkgY29tbWVudFxuICAvLyBvcGVuQ2FsZW5kYXJDb21wb25lbnQocXVlcykge1xuICAvLyAgIGNvbnN0IHZpZXdDb250YWluZXJSZWYgPSB0aGlzLmR5bmFtaWNIb3N0LnZpZXdDb250YWluZXJSZWY7XG4gIC8vICAgaWYodmlld0NvbnRhaW5lclJlZil7XG4gIC8vICAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gIC8vICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChDdXN0b21DYWxlbmRhckNvbXBvbmVudCk7XG4gIC8vICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucXVlc3Rpb24gPSBxdWVzO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmRhdGVTZWxlY3RlZC5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHRoaXMuZ2V0Q3VycmVudENhbGVuZGFyKGV2ZW50KSk7XG4gIC8vICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuZXZlbnRTZWxlY3RlZC5zdWJzY3JpYmUoKGV2ZW50OmFueSkgPT4gdGhpcy5nZXRDYWxlbmRhckV2ZW50KGV2ZW50KSlcbiAgLy8gICB9XG4gIC8vIH1cblxuICBpc0NhbGVuZGFyTW9kYWxPcGVuID0gZmFsc2U7XG4gIGNhbGVuZGFyTW9kYWxUaXRsZTogYW55O1xuICBjYWxlbmRhck1vZGFsU2l6ZTogYW55O1xuICBjYWxlbmRhclNhdmVCdXR0b25WYWx1ZTogYW55O1xuICByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgcWJSZWZyZW5jZUJvb2s6IGFueTtcbiAgbW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyOiBhbnk7XG5cbiAgb3BlbkNhbGVuZGFyTW9kYWwoZXZlbnQpIHtcbiAgICB0aGlzLmlzQ2FsZW5kYXJNb2RhbE9wZW4gPSB0cnVlO1xuICAgIHRoaXMucWJSZWZyZW5jZUJvb2sgPSBldmVudC5xYlJlZnJlbmNlQm9vaztcbiAgICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucyA9IGV2ZW50LnJlZmVyZW5jZVF1ZXN0aW9ucztcbiAgICB0aGlzLmNhbGVuZGFyTW9kYWxUaXRsZSA9IGV2ZW50Lm1vZGFsVGl0bGU7XG4gICAgdGhpcy5jYWxlbmRhck1vZGFsU2l6ZSA9IGV2ZW50Lm1vZGFsU2l6ZTtcbiAgICB0aGlzLmNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlID0gZXZlbnQuc2F2ZUJ1dHRvblZhbHVlO1xuICAgIHRoaXMubW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyID0gZXZlbnQubW9kYWxGb290ZXI7XG4gIH1cblxuXG4gIG9uQ2FsZW5kYXJNb2RhbFNhdmUoKSB7XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmRhdGFDaGFuZ2VzKCdjYWxlbmRhci1tb2RhbC1zYXZlJyk7XG4gIH1cblxuXG4gIGhhbmRsZVF1ZXN0aW9uRXZlbnQoZXZlbnQpIHtcbiAgfVxuXG4gIGNsb3NlQ2FsZW5kYXJNb2RhbChldmVudCkge1xuICAgIHRoaXMuaXNDYWxlbmRhck1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgLy8gU0tTMjVNQVIyNSBpbWFnZSBhZGRcbiAgYXN5bmMgZmlsZUNoYW5nZUV2ZW50KHF1ZXM6IGFueSwgZXZlbnQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGltYWdlRGF0YSA9IGF3YWl0IHRoaXMucmVhZEZpbGVBc0RhdGFVUkwoZmlsZSk7XG4gICAgICAgIHF1ZXMuaW1hZ2VEYXRhID0gaW1hZ2VEYXRhO1xuICAgICAgICBxdWVzLm9yZ0ltYWdlRGF0YSA9IGltYWdlRGF0YTtcbiAgICAgICAgLy8gSW5pdGlhbGl6ZSBsb2dvIHNpemUgaWYgbm90IGFscmVhZHkgc2V0XG4gICAgICAgIGlmICghcXVlcy5pbWFnZVNpemUpIHtcbiAgICAgICAgICBxdWVzLmltYWdlU2l6ZSA9IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxNTAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuY2hpbGRFdmVudENhcHR1cmUoaW1hZ2VEYXRhLCBxdWVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciByZWFkaW5nIGZpbGU6XCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRGaWxlQXNEYXRhVVJMKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHJlamVjdChlcnJvcik7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICB9KTtcbiAgfVxuICBhc3luYyBvbkltYWdlRWRpdChxdWVzOiBhbnkpIHtcbiAgICB0aGlzLmlzSW1hZ2VFZGl0ID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkSW1hZ2VFbGVtZW50ID0gcXVlcztcbiAgfVxuICBhc3luYyBvbkltYWdlRGVsZXRlKHF1ZXM6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICBxdWVzLmltYWdlRGF0YSA9ICcnO1xuICAgICAgcXVlcy5vcmdJbWFnZURhdGEgPSAnJztcbiAgICAgIC8vIEluaXRpYWxpemUgbG9nbyBzaXplIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgaWYgKCFxdWVzLmltYWdlU2l6ZSkge1xuICAgICAgICBxdWVzLmltYWdlU2l6ZSA9IHsgd2lkdGg6IDE1MCwgaGVpZ2h0OiAxNTAgfTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuY2hpbGRFdmVudENhcHR1cmUocXVlcy5pbWFnZURhdGEsIHF1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVhZGluZyBmaWxlOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLy8gU0tTMjVNQVIyNSBpbWFnZSBlZGl0IGZ1bmN0aW9uc1xuICBmbGlwSG9yaXpvbnRhbCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgZmxpcEg6ICF0aGlzLnRyYW5zZm9ybS5mbGlwSFxuICAgIH07XG4gIH1cblxuICBmbGlwVmVydGljYWwoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIGZsaXBWOiAhdGhpcy50cmFuc2Zvcm0uZmxpcFZcbiAgICB9O1xuICB9XG5cbiAgcmVzZXRJbWFnZSgpIHtcbiAgICB0aGlzLmNhbnZhc1JvdGF0aW9uID0gMDtcbiAgICB0aGlzLmNyb3BwZXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICB0cmFuc2xhdGVVbml0OiAncHgnLFxuICAgICAgc2NhbGU6IDEsXG4gICAgICByb3RhdGU6IDAsXG4gICAgICBmbGlwSDogZmFsc2UsXG4gICAgICBmbGlwVjogZmFsc2UsXG4gICAgICB0cmFuc2xhdGVIOiAwLFxuICAgICAgdHJhbnNsYXRlVjogMFxuICAgIH07XG4gIH1cblxuICB6b29tT3V0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBzY2FsZTogdGhpcy50cmFuc2Zvcm0uc2NhbGUhIC0gLjFcbiAgICB9O1xuICB9XG5cbiAgem9vbUluKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBzY2FsZTogdGhpcy50cmFuc2Zvcm0uc2NhbGUhICsgLjFcbiAgICB9O1xuICB9XG4gIHJvdGF0ZUxlZnQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHsgLy8gVXNlIHRpbWVvdXQgYmVjYXVzZSByb3RhdGluZyBpbWFnZSBpcyBhIGhlYXZ5IG9wZXJhdGlvbiBhbmQgd2lsbCBibG9jayB0aGUgdWkgdGhyZWFkXG4gICAgICB0aGlzLmNhbnZhc1JvdGF0aW9uLS07XG4gICAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcm90YXRlUmlnaHQoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY2FudmFzUm90YXRpb24rKztcbiAgICAgIHRoaXMuZmxpcEFmdGVyUm90YXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBtb3ZlTGVmdCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlSDogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlSCEgLSAxXG4gICAgfTtcbiAgfVxuXG4gIG1vdmVSaWdodCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlSDogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlSCEgKyAxXG4gICAgfTtcbiAgfVxuXG4gIG1vdmVEb3duKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVWOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWISArIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZVVwKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVWOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVWISAtIDFcbiAgICB9O1xuICB9XG4gIHByaXZhdGUgZmxpcEFmdGVyUm90YXRlKCkge1xuICAgIGNvbnN0IGZsaXBwZWRIID0gdGhpcy50cmFuc2Zvcm0uZmxpcEg7XG4gICAgY29uc3QgZmxpcHBlZFYgPSB0aGlzLnRyYW5zZm9ybS5mbGlwVjtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgZmxpcEg6IGZsaXBwZWRWLFxuICAgICAgZmxpcFY6IGZsaXBwZWRILFxuICAgICAgdHJhbnNsYXRlSDogMCxcbiAgICAgIHRyYW5zbGF0ZVY6IDBcbiAgICB9O1xuICB9XG4gIGFzeW5jIGltYWdlQ3JvcHBlZChldmVudDogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHRoaXMuY29udmVydEJsb2JUb0Jhc2U2NChldmVudC5vYmplY3RVcmwpO1xuICAgICAgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGEgPSBiYXNlNjQ7XG4gICAgICBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGJhc2U2NCwgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBpbiBpbWFnZUNyb3BwZWQ6XCIsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuXG4gIGNyb3BwZXJSZWFkeShzb3VyY2VJbWFnZURpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuICAvLyBTS1MyNU1BUjI1IGJsb2IgdG8gYmFzZSA2NCBjb252ZXJ0ZXJcbiAgY29udmVydEJsb2JUb0Jhc2U2NChvYmplY3RVcmw6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGZldGNoKG9iamVjdFVybClcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJsb2IoKSlcbiAgICAgIC50aGVuKGJsb2IgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpO1xuICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuICBjbG9zZU1vZGFsKCkge1xuICAgIHRoaXMuaXNJbWFnZUVkaXQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFNLUzI4TUFSMjUgZm9yIG5lc3RlZCBib29rIHJlYWRcbiAgcmVhZFF1ZXN0aW9ucyhxYklkOiBhbnksIHF1ZXM6YW55KSB7XG4gICAgbGV0IHF1ZXN0aW9ucyA9IFtdO1xuICAgIC8vIEFkZGVkIHRlcm5hcnkgdG8gYXZvaWQgdW5kZWZpbmVkXG4gICAgZm9yICh2YXIgc3EgaW4gcXVlcy5ib29rUXVlc3Rpb25zTWFwW3FiSWRdLnN1YlF1ZXN0aW9ucykge1xuICAgICAgbGV0IHE6IFF1ZXN0aW9uID0gcXVlcy5ib29rUXVlc3Rpb25zTWFwW3FiSWRdLnN1YlF1ZXN0aW9uc1tzcV07XG4gICAgICAvLyBpZiBxdWVzdGlvbiBpcyB0aGVyZSBwcm9jZXNzXG4gICAgICBpZiAocSkge1xuICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlc3Rpb25zO1xuICB9XG59XG4iLCI8IS0tIEhBIDE4SkFOMjQgIEFkZGVkIGNsYXNzIGZvciBzdHlsaW5nIC0tPlxuPGRpdiBbc3R5bGVdPVwiYm9va1N0eWxlXCIgY2xhc3M9XCJjb250ZW50LWJveCBmb3JtLWdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDwhLS0gSEEgMjBERUMyMyBEaXJlY3RpdmUgYW5kIFF1ZXN0aW9uIFN0eWxlIGZyb20gc2FsZXNmb3JjZSAtLT5cbiAgICAgICAgPCEtLSBSQTA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cIidjb2wtbGctJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnXCIgKm5nRm9yPVwibGV0IHF1ZXMgb2YgcXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbc3R5bGVdPVwicXVlcz8uc3R5bGU/LnF1ZXN0aW9uU3R5bGVcIj5cbiAgICAgICAgICAgIDwhLS0gVkQgMDlNYXkyNCBpcyBoaWRlIGZpZWxkIGNoYW5nZS0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmlzSGlkZGVuXCIgY2xhc3M9XCJueHRJbnB1dENvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQVAtMjhNQVIyNSBTaG93IGxhYmVsIGlmIGVuYWJsZWQgYW5kIG5vdCBhIEJvb2xlYW4gdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsID8gKHF1ZXMuc3R5bGU/LnNob3dMYWJlbCAmJiBxdWVzLnR5cGUgIT09ICdCb29sZWFuJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0JyAmJiBxdWVzLnR5cGUgIT09ICdMaXN0JyAmJiBxdWVzPy50eXBlICE9PSAnRHJvcGRvd24nICYmIHF1ZXMudHlwZSAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgcXVlcy50eXBlICE9PSAnRGF0ZVRpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ0xvY2F0aW9uJyAmJiBxdWVzLnR5cGUgIT09ICdOdW1iZXInICYmcXVlcy50eXBlICE9PSAnRW1haWwnICYmICBxdWVzLnR5cGUgIT09ICdEYXRlJyAmJiBxdWVzLnR5cGUgIT09ICdUaW1lJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0QXJlYScgJiYgcXVlcy50eXBlICE9PSAnTGFiZWwnKTogKHF1ZXMuc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2UgJiYgcXVlcy50eXBlICE9PSAnQm9vbGVhbicgJiYgcXVlcy50eXBlICE9PSAnVGV4dCcgJiYgcXVlcy50eXBlICE9PSAnTGlzdCcgJiYgcXVlcz8udHlwZSAhPT0gJ0Ryb3Bkb3duJyAmJiBxdWVzLnR5cGUgIT09ICdEYXRlVGltZScgJiYgcXVlcy50eXBlICE9PSAnTG9jYXRpb24nICYmIHF1ZXMudHlwZSAhPT0gJ051bWJlcicgJiYgIHF1ZXMudHlwZSAhPT0gJ0RhdGUnICYmIHF1ZXMudHlwZSAhPT0gJ1RpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ1RleHRBcmVhJyAmJiBxdWVzLnR5cGUgIT09ICdMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInF1ZXMuc3R5bGU/LmxhYmVsU3R5bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidkaXMtZmxleCBzaGVuZ2VsLW15dC1mb250MyBteXQtZm9udDcgJ1wiIFtzdHlsZV09XCJxdWVzLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogcXVlcy5mb250LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJzogcXVlcy5mb250Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogcXVlcy5mb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXdlaWdodCc6IHF1ZXMuZm9udFdlaWdodFxuICAgICAgICAgICAgICAgICAgICAgIH1cIj57eyBxdWVzPy5xdWVzdGlvblRleHQgPyAoKHF1ZXMuaWQrJy5xdWVzdGlvblRleHQnKSB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6IHF1ZXM/LnF1ZXN0aW9uVGV4dCk6Jyd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuaXNPcHRpb25hbCAmJiAhcXVlcy5pc1JlYWRPbmx5XCIgc3R5bGU9XCJjb2xvcjogcmVkO1wiPio8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU0tTMTNNQVIyNSBvbmx5IHNob3cgb24gZmlsZSB0eXBlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBSUyAxN0pBTjIwMjUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERpc3BsYXlzIGljb25zIHdpdGggdG9vbHRpcHMgaGVscCB0ZXh0IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMucXVlc3Rpb25UZXh0ICYmIHF1ZXM/LmhlbHBUZXh0ICYmIHF1ZXMudHlwZSA9PT0gJ0ZpbGUnXCIgY2xhc3M9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJxdWVzPy5oZWxwVGV4dFwiIG1hdFRvb2x0aXBDbGFzcz1cIndoaXRlLXRvb2x0aXBcIj5pPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJTIDE3SkFOMjAyNSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gIERpc3BsYXlzIGljb25zIHdpdGggdG9vbHRpcHMgZm9yIGZpbGUgcmVxdWlyZW1lbnRzIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIiAqbmdJZj1cInF1ZXMuZmllbGRzTWV0YSAmJiBxdWVzLnR5cGUgPT09ICdGaWxlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiZ2V0RmlsZVJlcXVpcmVtZW50cyhxdWVzLmZpZWxkc01ldGEpXCIgbWF0VG9vbHRpcENsYXNzPVwid2hpdGUtdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tbGVmdDogNHB4O1wiPmk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gY2FsZW5kYXIgIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdDYWxlbmRhcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tY2FsZW5kYXIgW3F1ZXN0aW9uXT1cInF1ZXNcIiAoZXZlbnRTZWxlY3RlZCk9XCJnZXRDYWxlbmRhckV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3RlZCk9XCJnZXRDdXJyZW50Q2FsZW5kYXIoJGV2ZW50KVwiIChvcGVuTW9kYWwpPVwib3BlbkNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiPjwvYXBwLWN1c3RvbS1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBtb2RlbCB1c2VkIGluIGNhbGVuZGFyIGNvbXBvbmVudCAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tbW9kZWwgKm5nSWY9XCJpc0NhbGVuZGFyTW9kYWxPcGVuXCIgW21vZGFsVGl0bGVdPVwiY2FsZW5kYXJNb2RhbFRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc01vZGFsT3Blbl09XCJpc0NhbGVuZGFyTW9kYWxPcGVuXCIgW21vZGFsU2l6ZV09XCJjYWxlbmRhck1vZGFsU2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2F2ZUJ1dHRvblZhbHVlXT1cImNhbGVuZGFyU2F2ZUJ1dHRvblZhbHVlXCIgW21vZGFsRm9vdGVyXT1cIm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2F2ZUJ1dHRvbkVtaXQpPVwib25DYWxlbmRhck1vZGFsU2F2ZSgpXCIgKGNhbmNlbEJ1dHRvbkVtaXQpPVwiY2xvc2VDYWxlbmRhck1vZGFsKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb25ib29rIFtxYkl0ZW1dPVwicWJSZWZyZW5jZUJvb2tcIiBbcXVlc3Rpb25zXT1cInJlZmVyZW5jZVF1ZXN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhhbmRsZVF1ZXN0aW9uKT1cImhhbmRsZVF1ZXN0aW9uRXZlbnQoJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLW1vZGVsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IGZvciBwaWNrIGxvY2F0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMb2NhdGlvbidcIiBbYXBpS2V5XT1cInFiSXRlbVsnYXBpS2V5J11cIiBbYWRkcmVzc109XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIChsb2NhdGlvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1waWNrLWxvY2F0aW9uPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBTS1MyNU1BUjI1IEltYWdlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdJbWFnZSdcIiAobW91c2VlbnRlcik9XCJpc0ltYWdlSG92ZXIgPSB0cnVlO1wiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImlzSW1hZ2VIb3ZlciA9IGZhbHNlO1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNJbWFnZUhvdmVyXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGVuZDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKm5nSWY9XCIhcXVlcy5pc1JlYWRPbmx5XCIgKGNsaWNrKT1cIm9uSW1hZ2VFZGl0KHF1ZXMpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMS4xMDY3IDYuMDcxNzRMOS45MjgzMyA0Ljg5MzRMMi4xNjY2NyAxMi42NTUxVjEzLjgzMzRIMy4zNDVMMTEuMTA2NyA2LjA3MTc0Wk0xMi4yODUgNC44OTM0TDEzLjQ2MzMgMy43MTUwN0wxMi4yODUgMi41MzY3NEwxMS4xMDY3IDMuNzE1MDdMMTIuMjg1IDQuODkzNFpNNC4wMzUgMTUuNTAwMUgwLjVWMTEuOTY0MkwxMS42OTU4IDAuNzY4NDAzQzExLjg1MjEgMC42MTIxNzcgMTIuMDY0IDAuNTI0NDE0IDEyLjI4NSAwLjUyNDQxNEMxMi41MDYgMC41MjQ0MTQgMTIuNzE3OSAwLjYxMjE3NyAxMi44NzQyIDAuNzY4NDAzTDE1LjIzMTcgMy4xMjU5QzE1LjM4NzkgMy4yODIxOCAxNS40NzU3IDMuNDk0MSAxNS40NzU3IDMuNzE1MDdDMTUuNDc1NyAzLjkzNjA0IDE1LjM4NzkgNC4xNDc5NiAxNS4yMzE3IDQuMzA0MjRMNC4wMzU4MyAxNS41MDAxSDQuMDM1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjNkM3NTdEXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzLmlzUmVhZE9ubHlcIiAoY2xpY2spPVwib25JbWFnZURlbGV0ZShxdWVzKVwiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTQgMy45ODcyNkMxMS43OCAzLjc2NzI2IDkuNTQ2NjcgMy42NTM5MyA3LjMyIDMuNjUzOTNDNiAzLjY1MzkzIDQuNjggMy43MjA2IDMuMzYgMy44NTM5M0wyIDMuOTg3MjZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTUuNjY2NSAzLjMxMzYyTDUuODEzMTcgMi40NDAyOEM1LjkxOTg0IDEuODA2OTUgNS45OTk4NCAxLjMzMzYyIDcuMTI2NSAxLjMzMzYySDguODczMTdDOS45OTk4NCAxLjMzMzYyIDEwLjA4NjUgMS44MzM2MiAxMC4xODY1IDIuNDQ2OTVMMTAuMzMzMiAzLjMxMzYyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41NjY3IDYuMDkzNzVMMTIuMTMzNCAxMi44MDcxQzEyLjA2IDEzLjg1MzcgMTIgMTQuNjY3MSAxMC4xNCAxNC42NjcxSDUuODYwMDJDNC4wMDAwMiAxNC42NjcxIDMuOTQwMDIgMTMuODUzNyAzLjg2NjY4IDEyLjgwNzFMMy40MzMzNSA2LjA5Mzc1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02Ljg4NjQ3IDExLjAwMDRIOS4xMDY0N1wiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi4zMzM1IDguMzMzMjVIOS42NjY4M1wiIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwicXVlcy5pc1JlYWRPbmx5XCIgW3NyY109XCJxdWVzLmltYWdlRGF0YVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlcy5pc1JlYWRPbmx5XCIgY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBMb2dvIHByZXZpZXcgYXJlYSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2dvLXByZXZpZXdcIiAqbmdJZj1cInF1ZXMuaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicXVlcy5pbWFnZURhdGFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVXBsb2FkIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlcy5pbWFnZURhdGFcIiBjbGFzcz1cImxvZ28tdXBsb2FkLXBsYWNlaG9sZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImxvZ28tdXBsb2FkLXt7aX19XCIgY2xhc3M9XCJsb2dvLXVwbG9hZC1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4uL2Fzc2V0cy9pY29ucy9JbWFnZS5zdmdcIiBhbHQ9XCJVcGxvYWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5VcGxvYWQgSW1hZ2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cImxvZ28tdXBsb2FkLXt7aX19XCIgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZUNoYW5nZUV2ZW50KHF1ZXMsICRldmVudClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIE1TTTEwSlVMMjUgaWNvbi1zZWxlY3RvciAtLT5cbiAgICAgICAgICAgICAgICA8bnh0LWljb24tc2VsZWN0b3IgW2FsbEljb25zXT1cImFsbEljb25zXCIgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdJY29uJ1wiIFtyZXF1aXJlZF09XCJxdWVzLmlzT3B0aW9uYWxcIiBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIiBbcXVlc3Rpb25dPVwicXVlc1wiIFtsYWJlbEZvbnRdPVwicXVlcy5mb250XCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIiBxdWVzPy5xdWVzdGlvblRleHQgPyAoKHF1ZXMuaWQrJy5xdWVzdGlvblRleHQnKSB8IG54dEN1c3RvbVRyYW5zbGF0ZSA6IHF1ZXM/LnF1ZXN0aW9uVGV4dCk6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29sb3JdPVwicXVlcy5mb250Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxTaXplXT1cInF1ZXMuZm9udFNpemVcIiBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCIgW3Nob3dMYWJlbF09XCJxdWVzLnN0eWxlPy5zaG93TGFiZWxcIiAoaWNvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7XCI+PC9ueHQtaWNvbi1zZWxlY3Rvcj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjFNQVIyNSBsaW5lIC0tPlxuICAgICAgICAgICAgICAgIDxociAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xpbmUnXCIgY2xhc3M9XCJjdXN0b20tbGluZVwiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWZsZXhcIiAvPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTNNQVIyNSBkYXRhIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxueHQtZGF0YXRhYmxlICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGFibGUnXCIgaXNFZGl0Um93IGlzRGVsZXRlUm93IGFjdGlvbkJ1dHRvbiBpc0J1dHRvbnMgW3F1ZXN0aW9uXT1cInF1ZXNcIiBmcm9tPVwiZm9ybUJ1aWxkZXJcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYmxlQ29uZmlnXT1cInF1ZXMudGFibGVDb25maWdcIiB0YWJsZUlkPVwiXCIgZGlyZWN0aW9uPVwibHRyXCIgdGFibGVXaWR0aD1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICA8L254dC1kYXRhdGFibGU+XG4gICAgICAgICAgICAgICAgPCEtLSBsaXN0IC0tPlxuICAgICAgICAgICAgICAgIDxueHQtc2VhcmNoLWJveCAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMaXN0J1wiIFtxdWVzdGlvbl09XCJxdWVzXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJxdWVzLmlkXCIgW3BsYWNlSG9sZGVyVGV4dF09XCJxdWVzLnF1ZXN0aW9uIHx8ICcnXCIgXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIChzZWFyY2hWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiPlxuICAgICAgICAgICAgICAgIDwvbnh0LXNlYXJjaC1ib3g+XG5cbiAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDlGRUIyNCBBZGRlZCBjb25kaXRpb24gb2Ygc3FPcHRpb24gdG8gdGhlIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duICpuZ0lmPVwicXVlcz8udHlwZSA9PT0gJ0Ryb3Bkb3duJyAmJiBxdWVzPy5vcHRpb25zXCIgW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCIgW3Rva2VuXT1cInRva2VuXCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJxYkl0ZW0uaXNTaGVuZ2VsID8gcXVlcy5pbnB1dCA6IHF1ZXMuc2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcmVmZXJlbmNlRmllbGRdPVwicXVlcy5yZWZlcmVuY2VGaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkT25seV09XCJxdWVzLmlzUmVhZE9ubHlcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDwhLS0gLy8gVkQgMDJBdWcyNCBjdXN0b20tcmFkaW8gY29tcG9uZW50IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdSYWRpbycgJiYgcXVlcz8ub3B0aW9uc1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLXJhZGlvIFtvcHRpb25zXT1cInF1ZXMub3B0aW9uc1wiIFtxdWVzdGlvbl09XCJxdWVzXCIgW3Rva2VuXT1cInRva2VuXCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCIgW2lkXT1cInF1ZXMuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5zZWxlY3RlZFZhbHVlXCIgW2Vycm9yTWVzc2FnZV09XCJxdWVzLmVycm9yTWVzc2FnZVwiIFtlcnJvcl09XCJxdWVzLmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCIgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXJhZGlvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBBdHRhY2htZW50IC8gRmlsZXMgLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1maWxlLXVwbG9hZCAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0ZpbGUnXCIgW2xpbWl0RmlsZVVwbG9hZGluZ109XCI1XCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcXVlc3Rpb25dPVwicXVlc1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIFthbGxGaWxlc109XCJxdWVzLmlucHV0XCIgKHNlbGVjdGVkRmlsZURhdGEpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LnZhbHVlLCRldmVudC5xdWVzdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAoZGVsZXRlZEZpbGVEYXRhKT1cImRlbGV0ZUZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1maWxlLXVwbG9hZD5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzExSlVOMjUgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgIDxueHQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlcy50eXBlID09PSAnQnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIFtidG5IZWlnaHRdPVwiJzUwcHgnXCIgW2J0bldpZHRoXT1cIicxNTBweCdcIiBbYnV0dG9uVmFsdWVdPVwicXVlcz8ucXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAoYnV0dG9uQ2xpY2tFbWl0KT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9ueHQtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTFKVU4yNSBib29rIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdCb29rJ1wiIFtxYkl0ZW1dPVwicXVlcy5xYkl0ZW1cIiBbbGFiZWxWYWx1ZV09XCJsYWJlbFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uc109XCJyZWFkUXVlc3Rpb25zKHF1ZXMucWJSZWZlcmVuY2UsIHF1ZXMucWJSZWZlcmVuY2VRdWVzdGlvbnMpXCJcbiAgICAgICAgICAgICAgICAgICAgKGhhbmRsZURyb3BEb3duKT1cImdldERyb3BEb3duKCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XG4gICAgICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IFRleHQsIEVtYWlsLCBsYWJlbCwgbnVtYmVyLCBCb29sZWFuLCByaWNoIHRleHQgZWRpdG9yLCBEYXRlVGltZSwgRGF0ZSwgVGltZS0tPlxuICAgICAgICAgICAgICAgIDxueHQtaW5wdXQgICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGV4dCcgfHwgcXVlcy50eXBlID09PSAnRW1haWwnIHx8IHF1ZXMudHlwZSA9PT0gJ051bWJlcicgfHwgcXVlcy50eXBlID09PSAnTGFiZWwnIHx8IHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nIHx8IHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScgfHwgcXVlcy50eXBlID09PSAnRGF0ZVRpbWUnIHx8IHF1ZXMudHlwZSA9PT0gJ0RhdGUnIHx8IHF1ZXMudHlwZSA9PT0gJ1RpbWUnIHx8IHF1ZXMudHlwZSA9PT0gJ1RleHRBcmVhJ1wiXG4gICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInF1ZXMudHlwZSA9PT0gJ1RleHQnID8gJ3RleHQnIDogcXVlcy50eXBlID09PSAnRW1haWwnID8gJ2VtYWlsJyA6IHF1ZXMudHlwZSA9PT0gJ051bWJlcicgPyAnbnVtYmVyJyA6IHF1ZXMudHlwZSA9PT0gJ0xhYmVsJyA/ICdsYWJlbCcgOiBxdWVzLnR5cGUgPT09ICdCb29sZWFuJyA/ICdjaGVja2JveCcgOiBxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnID8gJ3JpY2h0ZXh0JyA6IHF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJyA/ICdkYXRldGltZScgOiBxdWVzLnR5cGUgPT09ICdEYXRlJyA/ICdkYXRlJyA6ICBxdWVzLnR5cGUgPT09ICdUaW1lJyA/ICd0aW1lJyA6IHF1ZXMudHlwZSA9PT0gJ1RleHRBcmVhJyA/ICd0ZXh0YXJlYScgOiAndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsRm9udF09XCJxdWVzLmZvbnRcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicXVlcz8ucXVlc3Rpb25UZXh0ID8gKChxdWVzLmlkKycucXVlc3Rpb25UZXh0JykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBxdWVzPy5xdWVzdGlvblRleHQpOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbG9yXT1cInF1ZXMuZm9udENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsU2l6ZV09XCJxdWVzLmZvbnRTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0VmFsdWVTaXplXT1cInF1ZXMuZm9udFNpemVcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0V2VpZ2h0XT1cInF1ZXMuZm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93TGFiZWxdPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRCb3JkZXI9XCJub25lXCIgc3ZnSGVpZ2h0PVwiMjBweFwiIHN2Z1dpZHRoPVwiMjBweFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzPy5xdWVzdGlvbiA/ICgocXVlcy5pZCsnLnF1ZXN0aW9uJykgfCBueHRDdXN0b21UcmFuc2xhdGUgOiBxdWVzPy5xdWVzdGlvbiApOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJxdWVzLmlzT3B0aW9uYWxcIiBpbnB1dEJnQ29sb3I9XCIjRkFGQUZBXCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwicXVlcy50cmFja2luZ0lkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRJY29uTGVmdFNyY109XCJxdWVzLmljb25MZWZ0U3JjXCIgXG4gICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L254dC1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tU0tTMjVNQVIyNSBNb2RhbCBPdmVybGF5IC0tPlxuPGRpdiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIiAqbmdJZj1cImlzSW1hZ2VFZGl0XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zZS1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCI+w5c8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJbWFnZSBFZGl0b3IgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudD8udHlwZSA9PT0gJ0ltYWdlJ1wiPlxuICAgICAgICAgICAgPGltYWdlLWNyb3BwZXIgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGFcIiBbaW1hZ2VCYXNlNjRdPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQub3JnSW1hZ2VEYXRhXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbYWxpZ25JbWFnZV09XCJhbGlnbkltYWdlXCIgW3JvdW5kQ3JvcHBlcl09XCJyb3VuZENyb3BwZXJcIiBbYmFja2dyb3VuZENvbG9yXT1cIid3aGl0ZSdcIlxuICAgICAgICAgICAgICAgIGltYWdlQWx0VGV4dD1cIkFsdGVybmF0aXZlIGltYWdlIHRleHRcIiBbYWxsb3dNb3ZlSW1hZ2VdPVwiZmFsc2VcIiBbaGlkZVJlc2l6ZVNxdWFyZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtjYW52YXNSb3RhdGlvbl09XCJjYW52YXNSb3RhdGlvblwiIFthc3BlY3RSYXRpb109XCJhc3BlY3RSYXRpb1wiIFtjb250YWluV2l0aGluQXNwZWN0UmF0aW9dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cImZhbHNlXCIgW2Nyb3BwZXJTdGF0aWNXaWR0aF09XCJjcm9wcGVyU3RhdGljV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtjcm9wcGVyU3RhdGljSGVpZ2h0XT1cImNyb3BwZXJTdGF0aWNIZWlnaHRcIiBbY3JvcHBlck1pbldpZHRoXT1cImNyb3BwZXJNaW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgW2Nyb3BwZXJNaW5IZWlnaHRdPVwiY3JvcHBlck1pbkhlaWdodFwiIFtjcm9wcGVyTWF4V2lkdGhdPVwiY3JvcHBlck1heFdpZHRoXCJcbiAgICAgICAgICAgICAgICBbY3JvcHBlck1heEhlaWdodF09XCJjcm9wcGVyTWF4SGVpZ2h0XCIgW3Jlc2V0Q3JvcE9uQXNwZWN0UmF0aW9DaGFuZ2VdPSd0cnVlJyBbKGNyb3BwZXIpXT1cImNyb3BwZXJcIlxuICAgICAgICAgICAgICAgIFsodHJhbnNmb3JtKV09XCJ0cmFuc2Zvcm1cIiBbb25seVNjYWxlRG93bl09XCJ0cnVlXCIgb3V0cHV0PVwiYmxvYlwiIGZvcm1hdD1cInBuZ1wiXG4gICAgICAgICAgICAgICAgKGltYWdlQ3JvcHBlZCk9XCJpbWFnZUNyb3BwZWQoJGV2ZW50KVwiIChjcm9wcGVyUmVhZHkpPVwiY3JvcHBlclJlYWR5KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvaW1hZ2UtY3JvcHBlcj5cblxuICAgICAgICAgICAgPCEtLSBDb250cm9scyAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGFcIiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyb3RhdGVMZWZ0KClcIiB0aXRsZT1cIlJvdGF0ZSBMZWZ0XCI+4p+yPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyb3RhdGVSaWdodCgpXCIgdGl0bGU9XCJSb3RhdGUgUmlnaHRcIj7in7M8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInpvb21PdXQoKVwiIHRpdGxlPVwiWm9vbSBPdXRcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJ6b29tSW4oKVwiIHRpdGxlPVwiWm9vbSBJblwiPis8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVMZWZ0KClcIiB0aXRsZT1cIk1vdmUgTGVmdFwiPuKGkDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZVJpZ2h0KClcIiB0aXRsZT1cIk1vdmUgUmlnaHRcIj7ihpI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVVcCgpXCIgdGl0bGU9XCJNb3ZlIFVwXCI+4oaRPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlRG93bigpXCIgdGl0bGU9XCJNb3ZlIERvd25cIj7ihpM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cImZsaXBIb3Jpem9udGFsKClcIiBbY2xhc3MuZW5hYmxlZF09XCJ0cmFuc2Zvcm0uZmxpcEhcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkZsaXAgSG9yaXpvbnRhbGx5XCI+4oaUPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJmbGlwVmVydGljYWwoKVwiIFtjbGFzcy5lbmFibGVkXT1cInRyYW5zZm9ybS5mbGlwVlwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRmxpcCBWZXJ0aWNhbGx5XCI+4oaVPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyZXNldEltYWdlKClcIiB0aXRsZT1cIlJlc2V0XCI+w5c8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
|