@rangertechnologies/ngnxt 2.1.243 → 2.1.244

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/esm2022/environments/version.mjs +2 -2
  2. package/esm2022/lib/components/button/nxt-button.component.mjs +4 -4
  3. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +1 -1
  4. package/esm2022/lib/components/datatable/datatable.component.mjs +16 -28
  5. package/esm2022/lib/components/file-upload/file-upload.component.mjs +5 -5
  6. package/esm2022/lib/components/list-view-filter/list-view-filter.component.mjs +12 -12
  7. package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +8 -8
  8. package/esm2022/lib/components/pagination/pagination.component.mjs +4 -4
  9. package/esm2022/lib/components/pick-location/pick-location.component.mjs +1 -1
  10. package/esm2022/lib/components/search-box/search-box.component.mjs +1 -1
  11. package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +1 -1
  12. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +4 -4
  13. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +2 -2
  14. package/esm2022/lib/pipe/custom-translate.pipe.mjs +6 -6
  15. package/esm2022/lib/pipe/get-value.pipe.mjs +5 -5
  16. package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +5 -5
  17. package/fesm2022/rangertechnologies-ngnxt.mjs +6198 -6316
  18. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  19. package/lib/components/file-upload/file-upload.component.d.ts +3 -3
  20. package/lib/components/list-view-filter/list-view-filter.component.d.ts +3 -3
  21. package/lib/components/nxt-input/nxt-input.component.d.ts +3 -3
  22. package/lib/pipe/custom-translate.pipe.d.ts +3 -3
  23. package/lib/pipe/get-value.pipe.d.ts +3 -3
  24. package/lib/pipe/search-filter/search-filter.pipe.d.ts +3 -3
  25. package/package.json +1 -1
  26. package/rangertechnologies-ngnxt-2.1.244.tgz +0 -0
  27. package/esm2022/lib/pipe/date/date.pipe.mjs +0 -28
  28. package/esm2022/lib/pipe/editColumnCheck/edit-column-check.pipe.mjs +0 -28
  29. package/esm2022/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.mjs +0 -20
  30. package/esm2022/lib/pipe/editColumnType/edit-column-type.pipe.mjs +0 -20
  31. package/esm2022/lib/pipe/time/time.pipe.mjs +0 -26
  32. package/lib/pipe/date/date.pipe.d.ts +0 -7
  33. package/lib/pipe/editColumnCheck/edit-column-check.pipe.d.ts +0 -7
  34. package/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.d.ts +0 -7
  35. package/lib/pipe/editColumnType/edit-column-type.pipe.d.ts +0 -7
  36. package/lib/pipe/time/time.pipe.d.ts +0 -7
  37. package/rangertechnologies-ngnxt-2.1.243.tgz +0 -0
@@ -5,7 +5,7 @@ import { BehaviorSubject } from 'rxjs';
5
5
  import { FormsModule } from '@angular/forms';
6
6
  import { ImageCropperComponent } from '../../components/image-cropper/component/image-cropper.component';
7
7
  import { CustomRadioComponent } from '../../components/custom-radio/custom-radio.component';
8
- import { FileUploadComponent } from '../../components/file-upload/file-upload.component';
8
+ import { NxtFileUploadComponent } from '../../components/file-upload/file-upload.component';
9
9
  import { CustomDropdownComponent } from '../../components/custom-dropdown/custom-dropdown.component';
10
10
  import { NxtSearchBox } from '../../components/search-box/search-box.component';
11
11
  import { NxtDatatable } from '../../components/datatable/datatable.component';
@@ -785,13 +785,13 @@ export class QuestionbookComponent {
785
785
  return questions;
786
786
  }
787
787
  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 });
788
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, isStandalone: true, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", isEdit: "isEdit", dropDownData: "dropDownData", dataBind: "dataBind", allIcons: "allIcons", themeColor: "themeColor", cdnIconURL: "cdnIconURL" }, 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\" [dir]=\"ques.langDirection\" [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 }\">{{\n removeCharacters(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]=\"removeCharacters(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.data, 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]=\"removeCharacters(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\"\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", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "isEdit", "dropDownData", "dataBind", "allIcons", "themeColor", "cdnIconURL"], 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: FileUploadComponent, 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: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { 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", "inputClicked"] }, { 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"] }] });
788
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QuestionbookComponent, isStandalone: true, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", translatedQuestions: "translatedQuestions", questions: "questions", errorFieldId: "errorFieldId", labelValue: "labelValue", token: "token", isEdit: "isEdit", dropDownData: "dropDownData", dataBind: "dataBind", allIcons: "allIcons", themeColor: "themeColor", cdnIconURL: "cdnIconURL" }, 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\" [dir]=\"ques.langDirection\" [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 }\">{{\n removeCharacters(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]=\"removeCharacters(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.data, 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]=\"removeCharacters(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\"\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", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "isEdit", "dropDownData", "dataBind", "allIcons", "themeColor", "cdnIconURL"], 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: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { 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"] }] });
789
789
  }
790
790
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionbookComponent, decorators: [{
791
791
  type: Component,
792
792
  args: [{ selector: 'lib-questionbook', standalone: true, imports: [
793
793
  CommonModule,
794
- FormsModule, ImageCropperComponent, FileUploadComponent, CustomRadioComponent, CustomDropdownComponent, NxtButtonComponent, NxtSearchBox, NxtDatatable, PickLocationComponent, CustomModelComponent, CustomCalendarComponent, I18nPipe, MatTooltipModule, NxtInput, IconSelectorComponent
794
+ FormsModule, ImageCropperComponent, NxtFileUploadComponent, CustomRadioComponent, CustomDropdownComponent, NxtButtonComponent, NxtSearchBox, NxtDatatable, PickLocationComponent, CustomModelComponent, CustomCalendarComponent, I18nPipe, MatTooltipModule, NxtInput, IconSelectorComponent
795
795
  ], 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\" [dir]=\"ques.langDirection\" [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 }\">{{\n removeCharacters(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]=\"removeCharacters(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.data, 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]=\"removeCharacters(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\"\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"] }]
796
796
  }], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.StorageService }, { type: i5.I18nService }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
797
797
  type: Inject,
@@ -835,4 +835,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
835
835
  }], handleCalendarEvent: [{
836
836
  type: Output
837
837
  }] } });
838
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0RSxNQUFNLGVBQWUsQ0FBQztBQU1qSyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDekYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztB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QUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9GLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25HLENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7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QkFDSCxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUUxSSxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFB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S0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBbUVJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBTaW1wbGVDaGFuZ2VzLCBDb21wb25lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXN0aW9uLCBRdWVzdGlvbkJvb2sgfSBmcm9tICcuLi8uLi93cmFwcGVyJztcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2Vycm9yV3JhcHBlcic7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlcGVuZGVuY3lNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kZXBlbmRlbmN5TWV0YSc7XG5pbXBvcnQgeyBDcm9wcGVyUG9zaXRpb24sIERpbWVuc2lvbnMsIEltYWdlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbWFnZUNyb3BwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvY29tcG9uZW50L2ltYWdlLWNyb3BwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbVJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tcmFkaW8vY3VzdG9tLXJhZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1kcm9wZG93bi9jdXN0b20tZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IE54dFNlYXJjaEJveCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHREYXRhdGFibGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBpY2tMb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcGljay1sb2NhdGlvbi9waWNrLWxvY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21Nb2RlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLW1vZGVsL2N1c3RvbS1tb2RlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1jYWxlbmRhci9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEkxOG5QaXBlIH0gZnJvbSAnLi4vLi4vaTE4bi5waXBlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ueHQtaW5wdXQvbnh0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2J1dHRvbi9ueHQtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ljb24tc2VsZWN0b3IvaWNvbi1zZWxlY3Rvci5jb21wb25lbnQnOyAvL01TTTEwSlVMMjUgaWNvbiBzZWxlY3RvciBjb21wb25lbnRcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXF1ZXN0aW9uYm9vaycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsIEltYWdlQ3JvcHBlckNvbXBvbmVudCwgRmlsZVVwbG9hZENvbXBvbmVudCwgQ3VzdG9tUmFkaW9Db21wb25lbnQsIEN1c3RvbURyb3Bkb3duQ29tcG9uZW50LCBOeHRCdXR0b25Db21wb25lbnQsIE54dFNlYXJjaEJveCwgTnh0RGF0YXRhYmxlLCBQaWNrTG9jYXRpb25Db21wb25lbnQsIEN1c3RvbU1vZGVsQ29tcG9uZW50LCBDdXN0b21DYWxlbmRhckNvbXBvbmVudCwgSTE4blBpcGUsIE1hdFRvb2x0aXBNb2R1bGUsIE54dElucHV0LCBJY29uU2VsZWN0b3JDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25ib29rQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIEBJbnB1dCgpIHRyYW5zbGF0ZWRRdWVzdGlvbnM6IGFueVtdID0gW10gIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gIEBJbnB1dCgpIHF1ZXN0aW9uczogYW55W107XG4gIEBJbnB1dCgpIGVycm9yRmllbGRJZDogYW55O1xuICBASW5wdXQoKSBsYWJlbFZhbHVlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRva2VuOiBzdHJpbmc7IC8vIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0XG4gIEBJbnB1dCgpIGlzRWRpdDogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGhhbmRsZURyb3BEb3duOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IC8vIFZEIDE5SnVsMDEgLSBnZXQgdXBkYXRlZCBxdWVzdGlvblxuICBAT3V0cHV0KCkgc2luZ2xlRmllbGRDaGFuZ2VFbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoKSBkcm9wRG93bkRhdGE6IGFueTtcbiAgQElucHV0KCkgZGF0YUJpbmQ6IGFueTtcbiAgQElucHV0KCkgYWxsSWNvbnM6IGFueVtdID0gW107IC8vTVNNMTBKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudCBpbnB1dFxuICBASW5wdXQoKSB0aGVtZUNvbG9yOiBzdHJpbmc7IC8vTVNNMTBKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudCBpbnB1dFxuICBASW5wdXQoKSBjZG5JY29uVVJMOiBzdHJpbmcgPSAnJzsgLy9NU00xMEpVTDI1IGljb24gc2VsZWN0b3IgY29tcG9uZW50IGlucHV0XG4gIC8vQFZpZXdDaGlsZChDb21wb25lbnRob3N0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljSG9zdDogQ29tcG9uZW50aG9zdERpcmVjdGl2ZTtcbiAgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdO1xuICBzZWxlY3RlZEZpbGVEYXRhOiBhbnlbXSA9IFtdO1xuICBsb2FkQ29tcG9uZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICBxYlJlZjogUXVlc3Rpb25Cb29rO1xuICAvLyAgSEEgMTlERUMyMyBEZWNsYXJhdGlvbiBmb3IgU2FsZXNmb3JjZSBTdHlsaW5nXG4gIHN0eWxlOiBhbnk7XG4gIGxhbmdEaXJlY3Rpb24gPSAnbHRyJztcbiAgYm9va1N0eWxlOiBhbnk7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBpc0ltYWdlRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZEltYWdlRWxlbWVudDogYW55O1xuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge1xuICAgIHRyYW5zbGF0ZVVuaXQ6ICdweCcsXG4gICAgc2NhbGU6IDEsXG4gICAgcm90YXRlOiAwLFxuICAgIGZsaXBIOiBmYWxzZSxcbiAgICBmbGlwVjogZmFsc2UsXG4gICAgdHJhbnNsYXRlSDogMCxcbiAgICB0cmFuc2xhdGVWOiAwXG4gIH07XG4gIGNhbnZhc1JvdGF0aW9uID0gMDtcbiAgY3JvcHBlcj86IENyb3BwZXJQb3NpdGlvbjtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBjcm9wcGVyTWF4SGVpZ2h0ID0gMDtcbiAgY3JvcHBlck1heFdpZHRoID0gMDtcbiAgY3JvcHBlck1pbkhlaWdodCA9IDA7XG4gIGNyb3BwZXJNaW5XaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNXaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNIZWlnaHQgPSAwO1xuICBhc3BlY3RSYXRpbyA9IDQgLyAzO1xuICByb3VuZENyb3BwZXIgPSBmYWxzZTtcbiAgaW1hZ2VDaGFuZ2VkRXZlbnQ6IEV2ZW50IHwgbnVsbCA9IG51bGw7XG4gIGFsaWduSW1hZ2UgPSAnY2VudGVyJyBhcyBjb25zdDtcbiAgaXNJbWFnZUhvdmVyID0gZmFsc2U7XG5cbiAgLy8gUlMgMTdKQU4yMDI1XG4gIC8vRm9ybWF0cyBhbmQgcmV0dXJucyBmaWxlIHVwbG9hZCByZXF1aXJlbWVudHMgZnJvbSBhIEpTT04gc3RyaW5nXG4gIGdldEZpbGVSZXF1aXJlbWVudHMoZmllbGRzTWV0YTogYW55KTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YURhdGEgPSB0eXBlb2YgZmllbGRzTWV0YSA9PT0gJ29iamVjdCcgID8gIGZpZWxkc01ldGEgOiBKU09OLnBhcnNlKGZpZWxkc01ldGEpIDtcbiAgICAgIGNvbnN0IGZpbGVDb25maWcgPSBtZXRhRGF0YVswXTtcblxuICAgICAgaWYgKCFmaWxlQ29uZmlnKSByZXR1cm4gJyc7XG5cbiAgICAgIGNvbnN0IHJlcXVpcmVtZW50cyA9IFtdO1xuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5hbGxvd2VkVHlwZXM/Lmxlbmd0aCkge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgQWNjZXB0ZWQgZm9ybWF0czogJHtmaWxlQ29uZmlnLmFsbG93ZWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5tYXhGaWxlU2l6ZSkge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgTWF4aW11bSBzaXplIHBlciBmaWxlOiAke2ZpbGVDb25maWcubWF4RmlsZVNpemUgLyAxMDQ4NTc2fU1CYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlQ29uZmlnLm1heEZpbGVzKSB7XG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBNYXhpbXVtIG51bWJlciBvZiBmaWxlczogJHtmaWxlQ29uZmlnLm1heEZpbGVzfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVxdWlyZW1lbnRzLm1hcChyZXEgPT4gcmVxLnRyaW0oKSkuam9pbignXFxuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgZmllbGRzTWV0YTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKSBoYWRsZURyb3BEb3duRGVwZW5kZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gIEBPdXRwdXQoKSBoYW5kbGVDYWxlbmRhckRhdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBib29rUXVlc3Rpb25zTWFwOiBhbnkgPSBuZXcgTWFwKCk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBWRCAxM1NlcDI0IGNoYW5nZXNcbiAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XG4gICAgLy8gVkQgc2VwMTMyNCBjaGFuZ2VzIC0gcHJvY2VzcyBkYXRhIHdoZW4gZGF0YWJpbmQgdmFsdWUgY2hhbmdlXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY3VzdG9tQ2hhbmdlJC5zdWJzY3JpYmUoXG4gICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGNoYW5nZVZhbHVlID09ICdkYXRhQmluZCcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFNLUzIwTUFSMjUgRW5zdXJlIHRoZSBjaGlsZCBjb21wb25lbnQgaXMgYXZhaWxhYmxlIGJlZm9yZSBjYWxsaW5nIHRoZSBtZXRob2RcbiAgICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgcXVlcy5zdWJUZXh0IGlzIGFsd2F5cyBhbiBvYmplY3QgYnkgcGFyc2luZyBpdCBpZiBpdCdzIGEgc3RyaW5nXG4gICAgLy8gIEFQLTI4TUFSMjUgQWRkIEJvb2xlYW5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2gocXVlcyA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcyhxdWVzKTtcbiAgICAgICAgbGV0IGlucHV0OiBhbnk7XG4gICAgICAgIGlmIChxdWVzLnR5cGUgPT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT0gJ1JhZGlvJyB8fCBxdWVzLnR5cGUgPT0gJ0xvY2F0aW9uJykge1xuICAgICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgICBpbnB1dFsndmFsdWVPYmonXSA9IHF1ZXMuaW5wdXQgIHx8IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IG51bGxcbiAgICAgICAgICBpbnB1dFsncmVmZXJlbmNlRmllbGQnXSA9IHF1ZXMucmVmZXJlbmNlRmllbGQgfHwgbnVsbFxuICAgICAgICAgIGlucHV0Wydmcm9tUXVlc3Rpb25JZCddID0gcXVlcy5pZCB8fCBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT0gJ0RhdGVUaW1lJykge1xuICAgICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgICBpbnB1dCA9IHF1ZXMuaW5wdXQgfHwgcXVlcy5kZWZhdWx0VmFsdWUgfHwgbnVsbFxuICAgICAgICB9IFxuICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0ltYWdlJykge1xuICAgICAgICAgIGlucHV0ID0gcXVlcy5vcmdJbWFnZURhdGFcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nKXtcbiAgICAgICAgICBpbnB1dCA9IHR5cGVvZiBxdWVzLmlucHV0ICE9PSAndW5kZWZpbmVkJyA/IHF1ZXMuaW5wdXQgPT09IHRydWUgfHwgcXVlcy5pbnB1dCA9PT0gJ3RydWUnIDogdHlwZW9mIHF1ZXMuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHF1ZXMuZGVmYXVsdFZhbHVlID09PSB0cnVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlID09PSAndHJ1ZScgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpbnB1dCA9IHF1ZXMuaW5wdXQgfHwgcXVlcy5kZWZhdWx0VmFsdWUgfHwgbnVsbFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hpbGRFdmVudENhcHR1cmUoaW5wdXQsIHF1ZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgaGFuZGxlUXVlcyhxdWVzOiBhbnkpIHtcbiAgICAvLyBIQSAxOS1KQU4tMjQgSWYgY29uZGl0aW9uIGlzIGZvciBiaW5kLWluLCBjb3JyZWN0aW9uXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRpbmcgY29uZGl0aW9uIHRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvclxuICAgIGlmICh0aGlzLmRhdGFCaW5kICYmIE9iamVjdC5rZXlzKHRoaXMuZGF0YUJpbmQpLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmZsYXR0ZW5PYmplY3QodGhpcy5kYXRhQmluZClcbiAgICAgIGZvciAobGV0IFtrZXksIHZhbF0gb2YgcmVzdWx0KSB7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gdmFsO1xuICAgICAgICBpZiAocXVlcy5yZWZlcmVuY2VGaWVsZCA9PT0ga2V5KSB7XG4gICAgICAgICAgaWYgKHF1ZXMudHlwZSA9PT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT09ICdSYWRpbycpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuc3FPcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAvLyAgIGlmIChlbGVtZW50WydyZWZlcmVuY2VGaWVsZCddID09PSBrZXkpIHtcbiAgICAgICAgICAgIC8vICAgICBlbGVtZW50WydpbnB1dCddID0gcXVlcy5pbnB1dCA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgLy8gICAgIGVsZW1lbnRbJ3NlbGVjdGVkVmFsdWUnXSA9IHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMjRKQU4yNCBUbyBiaW5kLWluIERhdGUgYW5kIERhdGVUaW1lXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSBuZXcgRGF0ZSh2YWx1ZT8udG9TdHJpbmcoKSkgIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIQSAxMkZFQjI0IFRvIGJpbmQtaW4gTG9jYXRpb24gVHlwZVxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJykge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVbJ2FkZHJlc3MnXSA/IHZhbHVlWydhZGRyZXNzJ10gOiB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzIGZvciBkYXRhIGJpbmRJblxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0NhbGVuZGFyJykge1xuICAgICAgICAgICAgbGV0IGVudHJpZXMgPSB0eXBlb2YgcXVlc1snZmllbGRzTWV0YSddID09PSAnb2JqZWN0JyA/IHF1ZXNbJ2ZpZWxkc01ldGEnXSA6IEpTT04ucGFyc2UocXVlc1snZmllbGRzTWV0YSddKTtcbiAgICAgICAgICAgIGlmIChlbnRyaWVzKSB7XG4gICAgICAgICAgICAgIGxldCByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBxUmVmZXJlbmNlID0gSlNPTi5wYXJzZShlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUXVlc3Rpb25zLnB1c2gocVJlZmVyZW5jZT8ucXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlPy5mb3JFYWNoKGNhbGVuZGFyQXJyYXkgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjYWxlbmRhckFycmF5LmRhdGUpO1xuICAgICAgICAgICAgICAgICAgY2FsZW5kYXJBcnJheS5lbnRyaWVzLmZvckVhY2goaW5wdXRFbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbnB1dEVudHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVF1ZXN0aW9ucy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZWZlcmVuY2VGaWVsZCA9PSBrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnRGF0ZScgfHwgZmllbGQudHlwZSA9PSAnRGF0ZVRpbWUnIHx8IGZpZWxkLnR5cGUgPT0gJ1RpbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSBuZXcgRGF0ZSh2Py50b1N0cmluZygpKSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBpZiAoZmllbGQudHlwZSA9PT0gJ0Ryb3Bkb3duJyB8fCBmaWVsZC50eXBlID09PSAnUmFkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuc2VsZWN0ZWRWYWx1ZSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSB2ICB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IHYgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmFkZEV2ZW50KGRhdGUsIHJlZmVyZW5jZVF1ZXN0aW9ucyk7Ly9TS1MgMjdTRVAyNCBlYWNoIGV2ZW50IGFkZGVkIHRvIGFsbEV2ZW50cyBhcnJheVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuYWRkRXZlbnQoZGF0ZSxyZWZlcmVuY2VRdWVzdGlvbnMpOyAvL3RoaXMgaXMgb25seSBsYXN0IGV2ZW50IGFkZGVkIHRvIGFsbEV2ZW50cyBhcnJheVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdGaWxlJykge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IFtdO1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHt9O1xuICAgICAgcXVlc3Rpb25bJ2lkJ10gPSBxdWVzLmlkO1xuICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLW91dCBMb2NhdGlvbiBUeXBlXG4gICAgICBpZiAocXVlcy50eXBlID09PSAnTG9jYXRpb24nKSB7XG4gICAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dCA/IHF1ZXMuaW5wdXQgOiBxdWVzLnNlbGVjdGVkVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRmlsZScpIHtcbiAgICAgICAgLy8gVkQgMjMgT2N0MjQgLSBmaWxlIHR5cGUgY2hhbmdlc1xuICAgICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPyBxdWVzLmlucHV0IDogcXVlcy5kZWZhdWx0VmFsdWUgfHwgW107XG4gICAgICB9XG4gICAgICBxdWVzdGlvblsndHlwZSddID0gcXVlcy50eXBlO1xuICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uTnVtYmVyJ10gPSBxdWVzLnF1ZXN0aW9uTnVtYmVyO1xuICAgICAgcXVlc3Rpb25bJ3JlZmVyZW5jZUZpZWxkJ10gPSBxdWVzPy5yZWZlcmVuY2VGaWVsZDtcbiAgICAgIHF1ZXN0aW9uWydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzPy5zZWxlY3RlZFZhbHVlOyAgLy8gTVIgMzFKQU4yNCBOZWVkIHRvIHBhc3MgdGhlIHNlbGVjdGVkIHZhbHVlIHRvb1xuICAgIH1cbiAgfVxuIC8vIFNLUzIwTUFSMjUgZmxhdHRlbmluZyBuZXN0ZWQgb2JqZWN0cywgbWFwcGluZyB2YWx1ZXMgdXNpbmcgIHJlZmVyZW5jZUZpZWxkXG4gZmxhdHRlbk9iamVjdChvYmo6IGFueSwgcGFyZW50S2V5ID0gJycsIGluY2x1ZGVPYmplY3RzID0gdHJ1ZSkge1xuICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gIGZvciAobGV0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgIGxldCBuZXdLZXkgPSBwYXJlbnRLZXkgPyBgJHtwYXJlbnRLZXl9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHQucHVzaChbbmV3S2V5LCB2YWxdKTsgLy8gSW5jbHVkZSBmdWxsIGFycmF5XG5cbiAgICAgIHZhbC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZsYXR0ZW5PYmplY3QoaXRlbSwgYCR7bmV3S2V5fVske2luZGV4fV1gLCBmYWxzZSkpOyAvLyBGbGF0dGVuIG9iamVjdHMgaW4gYXJyYXlzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goW2Ake25ld0tleX1bJHtpbmRleH1dYCwgaXRlbV0pOyAvLyBTdG9yZSBwcmltaXRpdmUgdmFsdWVzIGluIGFycmF5c1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGluY2x1ZGVPYmplY3RzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtuZXdLZXksIHZhbF0pOyAvLyBJbmNsdWRlIGZ1bGwgb2JqZWN0XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCguLi50aGlzLmZsYXR0ZW5PYmplY3QodmFsLCBuZXdLZXksIGZhbHNlKSk7IC8vIEZsYXR0ZW4gbmVzdGVkIG9iamVjdHNcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goW25ld0tleSwgdmFsXSk7IC8vIFN0b3JlIGtleS12YWx1ZSBwYWlyc1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4gIC8vIFZEIDEzU2VwMjQgY2hhbmdlc1xuICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICBwcm9jZXNzRGF0YSgpIHtcbiAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gQm9vayBTdHlsaW5nKFNsYWVzZm9yY2UpXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5XG4gICAgaWYgKHRoaXMucWJJdGVtPy5zdHlsZSkge1xuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlID0gdHlwZW9mIHRoaXMucWJJdGVtLnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycgKyB0aGlzLnFiSXRlbT8uc3R5bGUpIDogdGhpcy5xYkl0ZW0uc3R5bGU7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbENsYXNzID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsQ2xhc3MgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dENsYXNzID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0Q2xhc3MgPyB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dFN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5ib29rU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLnNob3dMYWJlbCA9IHRoaXMucWJJdGVtLnN0eWxlPy5zaG93TGFiZWwgPyB0aGlzLnFiSXRlbS5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5xYkl0ZW0pIHtcbiAgICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUgPSB7XG4gICAgICAgICAgXCJsYWJlbENsYXNzXCI6IFwiXCIsXG4gICAgICAgICAgXCJsYWJlbFN0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJsYWJlbFZhbHVlU3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcImlucHV0Q2xhc3NcIjogXCJcIixcbiAgICAgICAgICBcImlucHV0U3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcImJvb2tTdHlsZVwiOiBcIlwiLFxuICAgICAgICAgIFwic2hvd0xhYmVsXCI6IHRydWUsXG4gICAgICAgICAgXCJkaXJlY3Rpb25cIjogXCJsdHJcIixcbiAgICAgICAgICBcInF1ZXN0aW9uU3R5bGVcIjogXCJcIlxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnFiSXRlbS5zdHlsZS5xdWVzdGlvblN0eWxlID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5xdWVzdGlvblN0eWxlID8gdGhpcy5xYkl0ZW0/LnN0eWxlLnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHRoaXMucWJJdGVtLnN0eWxlLmRpcmVjdGlvbiA9IHRoaXMucWJJdGVtPy5zdHlsZT8uZGlyZWN0aW9uID8gdGhpcy5xYkl0ZW0/LnN0eWxlPy5kaXJlY3Rpb24gOiAnbHRyJztcbiAgICB0aGlzLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtPy5zdHlsZT8uYm9va1N0eWxlO1xuICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB2YXIgaHRtbEVsZW1lbnQgPSBlbGVtZW50Py5xdWVzdGlvblRleHQ7XG4gICAgICB2YXIgdGV4dE9ubHkgPSBodG1sRWxlbWVudD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJylcbiAgICAgIGVsZW1lbnQucXVlc3Rpb25UZXh0ID0gdGV4dE9ubHk7XG4gICAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gU3R5bGluZyhTbGFlc2ZvcmNlKVxuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdCb29rJykge1xuICAgICAgICBpZiAoZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSkge1xuICAgICAgICAgIHZhciBxYiA9IHR5cGVvZiBlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddID09PSAnb2JqZWN0JyAgPyAgZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSA6IEpTT04ucGFyc2UoIGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10pIDtcbiAgICAgICAgICBpZiAocWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlKSB7XG4gICAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPSB0eXBlb2YgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycgKyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUpIDogcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEJvb2sgdHlwZSBxdWVzdGlvbiBzdHlsaW5nXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsQ2xhc3MgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsQ2xhc3MgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbFN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbFN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuaW5wdXRDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmlucHV0U3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0U3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5ib29rU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmJvb2tTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuc2hvd0xhYmVsID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5zaG93TGFiZWwgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydsYW5nRGlyZWN0aW9uJ10gPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuZGlyZWN0aW9uID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG5cbiAgICAgICAgICAvLyBMb29wIGZvciBlYWNoIHF1ZXN0aW9uIGluIHRoZSBib29rXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddPy5zdWJRdWVzdGlvbnM/LmZvckVhY2gocXVlc3Rpb25Gcm9tQm9vayA9PiB7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgOiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsQ2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0Q2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0U3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmJvb2tTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmJvb2tTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnNob3dMYWJlbCA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnNob3dMYWJlbCA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5xdWVzdGlvblN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rWydsYW5nRGlyZWN0aW9uJ10gPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5kaXJlY3Rpb24gPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWxlbWVudFsncWJJdGVtJ10gPSBxYlsncXVlc3Rpb25ib29rJ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuc3R5bGUgPSBlbGVtZW50LnN0eWxlID8gdHlwZW9mIGVsZW1lbnQuc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyArIGVsZW1lbnQ/LnN0eWxlKSA6IGVsZW1lbnQ/LnN0eWxlIDogdGhpcy5xYkl0ZW0/LnN0eWxlO1xuXG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsQ2xhc3MgPSBlbGVtZW50LnN0eWxlPy5sYWJlbENsYXNzID8gZWxlbWVudC5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5sYWJlbFN0eWxlID8gZWxlbWVudC5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IGVsZW1lbnQuc3R5bGUubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuaW5wdXRDbGFzcyA9IGVsZW1lbnQuc3R5bGU/LmlucHV0Q2xhc3MgPyBlbGVtZW50LnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuaW5wdXRTdHlsZSA9IGVsZW1lbnQuc3R5bGUuaW5wdXRTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5ib29rU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5zaG93TGFiZWwgPSBlbGVtZW50LnN0eWxlPy5zaG93TGFiZWwgPyBlbGVtZW50LnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgZWxlbWVudC5zdHlsZS5xdWVzdGlvblN0eWxlID0gZWxlbWVudC5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IGVsZW1lbnQuc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuXG4gICAgICBlbGVtZW50WydsYW5nRGlyZWN0aW9uJ10gPSBlbGVtZW50LnN0eWxlPy5kaXJlY3Rpb24gPyBlbGVtZW50LnN0eWxlPy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG5cblxuICAgICAgLy9WRCAwMkF1ZzI0IGRlcGVuZGVudCBmaWVsZCBzaG93L2hpZGUgY2hhbmdlc1xuICAgICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgICAgICAvLyBBUC0yNk1BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgICAgIGlmIChlbGVtZW50LnJlZmVyZW5jZUZpZWxkKSB7XG4gICAgICAgIGVsZW1lbnQuZGVwZW5kZW50UmVmID0gZWxlbWVudC5yZWZlcmVuY2VGaWVsZDtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50LnN1YlRleHQpIHtcbiAgICAgICAgZWxlbWVudFsnc3ViVGV4dCddID0gdHlwZW9mIGVsZW1lbnQ/LnN1YlRleHQgPT09ICdvYmplY3QnID8gZWxlbWVudD8uc3ViVGV4dCA6IEpTT04ucGFyc2UoZWxlbWVudFsnc3ViVGV4dCddKTtcbiAgICAgICAgbGV0IGRlcGVuZGVuY3lPYmo6IERlcGVuZGVuY3lNZXRhID0gZWxlbWVudC5zdWJUZXh0O1xuICAgICAgICBpZiAoZGVwZW5kZW5jeU9iai5pc0RlcGVuZGVudEZpZWxkKSB7XG4gICAgICAgICAgZWxlbWVudC5pc0hpZGRlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmNoYW5nZUFubm91bmNlZCQuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gVkQgMjBBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkICYmIGRlcGVuZGVuY3lPYmouaXNEZXBlbmRlbnRGaWVsZCkge1xuICAgICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUudmFsdWVPYmogIT0gdW5kZWZpbmVkICYmIGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09IGRlcGVuZGVuY3lPYmouc291cmNlUXVlc3Rpb25JZCkge1xuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQuaXNIaWRkZW5GaWVsZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY3lPYmouZGVwZW5kZW50VmFsdWUgPT0gY2hhbmdlVmFsdWUudmFsdWVPYmopIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRlcGVuZGVudFJlZiA9PSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlZmVyZW5jZUZpZWxkID0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbnB1dCA9ICcnO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlRGVwZW5kZW50RWxlbWVudHMoZWxlbWVudC5pZCk7XG4gICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBkZXBlbmRlbnQgc2VsZWN0aW9uIHJlbW92ZSB0aGUgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZXBlbmRlbnRSZWYgPT0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VGaWVsZCA9ICcnO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUoZWxlbWVudCk7XG4gICAgICB9XG4gICAgICAvLyBzdW5kYXkgY29tbWVudFxuICAgICAgLy8gaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0NhbGVuZGFyJykge1xuICAgICAgLy8gICB0aGlzLm9wZW5DYWxlbmRhckNvbXBvbmVudChlbGVtZW50KTtcbiAgICAgIC8vIH1cbiAgICB9KTtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25zKTtcbiAgICB0aGlzLnByb2Nlc3NUcmFuc2xhdGVkUXVlc3Rpb25zKCk7XG4gIH1cbiAgLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gICAvLyBBUC0yNk1BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnRJZCkge1xuICAgIGxldCBlbGVtZW50c1RvSGlkZSA9IHRoaXMucXVlc3Rpb25zLmZpbHRlcihlbCA9PiB7XG4gICAgICBpZiAoZWwuc3ViVGV4dCkge1xuICAgICAgICBlbFsnc3ViVGV4dCddID0gdHlwZW9mIGVsPy5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IGVsPy5zdWJUZXh0IDogSlNPTi5wYXJzZShlbFsnc3ViVGV4dCddKTtcbiAgICAgICAgbGV0IGRlcE9iaiA9IGVsLnN1YlRleHQ7XG4gICAgICAgIHJldHVybiBkZXBPYmouc291cmNlUXVlc3Rpb25JZCA9PSBlbGVtZW50SWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBlbGVtZW50c1RvSGlkZS5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGVsLmlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgIGVsLmlucHV0ID0gJyc7XG4gICAgICBlbC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUoZWwpO1xuICAgICAgLy8gUmVjdXJzaXZlbHkgaGlkZSBlbGVtZW50cyBkZXBlbmRlbnQgb24gdGhpcyBvbmVcbiAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsLmlkKTtcbiAgICB9KTtcbiAgfVxuLy9BUC0xOU1BWTI1IEVuc3VyZSBzcUxpc3QgaXMgYWx3YXlzIGFuIGFycmF5IGJ5IGRlZmF1bHRpbmcgdG8gW11cbiAgY2xlYXJTUUVycm9yKHF1ZXNJZCkge1xuICAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucz8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlkID09IHF1ZXNJZCkgfHwgW107XG4gICAgZm9yICh2YXIgc3Egb2Ygc3FMaXN0KSB7XG4gICAgICBzcS5lcnJvciA9IG51bGw7XG4gICAgfVxuICB9XG4gIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gIHByb2Nlc3NUcmFuc2xhdGVkUXVlc3Rpb25zKCkge1xuICAgIGlmICh0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMgJiYgdGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goKG9yZ1F1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zLmZvckVhY2goKHRyYW5zUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChvcmdRdWVzdGlvbi51bmlxdWVJZGVudGlmaWVyID09IHRyYW5zUXVlc3Rpb24uaWRlbnRpZmllcikge1xuICAgICAgICAgICAgb3JnUXVlc3Rpb24ucXVlc3Rpb25UZXh0ID0gdHJhbnNRdWVzdGlvbi5sYWJlbDtcbiAgICAgICAgICAgIG9yZ1F1ZXN0aW9uLnF1ZXN0aW9uID0gdHJhbnNRdWVzdGlvbi5wbGFjZUhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0U3ViUXVlc3Rpb25zKHJlY29yZHMpIHtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHJlY29yZHMpO1xuICB9XG5cbiAgLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuICBjaGlsZEV2ZW50Q2FwdHVyZShldmVudCwgcXVlcz86IGFueSkge1xuICAgIGxldCBkcm9wZG93bkRhdGEgPSB7fTtcbiAgICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgIGlmIChxdWVzKSB7XG4gICAgICBpZiAocXVlcy50eXBlID09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09ICdSYWRpbycpIHtcbiAgICAgICAgLy8gSEEgMTlKQU4yNCBDb3JyZWN0aW9uIG9mIGRyb3Bkb3duIHZhbHVlc1xuICAgICAgICBxdWVzLnNlbGVjdGVkT2JqID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGw7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC5zZWxlY3RlZE9iaiA/IGV2ZW50LnNlbGVjdGVkT2JqIDogZXZlbnQudmFsdWVPYmo7XG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xuICAgICAgICAvLyBlbWl0IHRoZSBkcm9wZG93biBkYXRhIHRvIHBhcmVudFxuICAgICAgICBkcm9wZG93bkRhdGFbJ2V2ZW50J10gPSBldmVudC52YWx1ZU9iajtcbiAgICAgICAgZHJvcGRvd25EYXRhWydxdWVzJ10gPSBxdWVzO1xuICAgICAgICBpZiAoZHJvcGRvd25EYXRhWydldmVudCddKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVEcm9wRG93bi5lbWl0KGRyb3Bkb3duRGF0YSk7XG4gICAgICAgIH0gIC8vIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlXG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnTG9jYXRpb24nKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC52YWx1ZU9iajtcbiAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWVPYmo/IGV2ZW50LnZhbHVlT2JqLmFkZHJlc3MgOiBudWxsO1xuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0ZpbGUnKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLnNlbGVjdGVkRmlsZURhdGEgPSBldmVudDtcblxuICAgICAgICAvLyBIYW5kbGUgZmlsZSB2YWxpZGF0aW9uIGVycm9yc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkgJiYgZXZlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gTm8gZmlsZXMgdXBsb2FkZWQgd2hlbiByZXF1aXJlZFxuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBxdWVzLmVycm9yTWVzc2FnZSA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShldmVudCkgJiYgZXZlbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIEZpbGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkXG4gICAgICAgICAgcXVlcy5lcnJvciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIHZhbGlkYXRpb24gZXJyb3JzIGZyb20gdGhlIGZpbGUgdXBsb2FkIGNvbXBvbmVudFxuICAgICAgICBpZiAoZXZlbnQ/LnZhbGlkYXRpb25FcnJvcnMgJiYgZXZlbnQudmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcXVlcy5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICBxdWVzLmVycm9yLm1lc3NhZ2UgPSBldmVudC52YWxpZGF0aW9uRXJyb3JzWzBdOyAvLyBVc2UgdGhlIGZpcnN0IHZhbGlkYXRpb24gZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpIHsgLy8gSEEgMjRKQU4yNCBDb252ZXJ0aW5nIERhdGUgYW5kIERhdGVUaW1lIHRvIFVUQ1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICBsZXQgZCA9IG5ldyBEYXRlKGV2ZW50KTtcbiAgICAgICAgICBpZiAoIWlzTmFOKGQ/LmdldFRpbWUoKSkpIHsgLy9TS1MyM0FQUjI1IENoZWNrIGZvciB2YWxpZCBkYXRlXG4gICAgICAgICAgICAgIGxldCB1dGNTdHJpbmcgPSBkPy50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICBxdWVzLmlucHV0ID0gdXRjU3RyaW5nO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnTGlzdCcpIHtcbiAgICAgICAgLy8gVkQgMjBBdWcyNCBoYW5kbGluZyB0aGUgbGlzdCB0eXBlICBoYW5kbGUgbXVsdGlwbGUgb2JqZWN0IHZhbHVlc1xuICAgICAgICBxdWVzLmlucHV0ID0gKGV2ZW50ICYmIHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZXZlbnQpKSA/IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZXZlbnQ/LnZhbHVlT2JqLCBldmVudD8uZmllbGQpIDogZXZlbnQ7XG4gICAgICB9Ly9SUyAwNkpBTjI1XG4gICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudCB8fCBudWxsO1xuICAgICAgfS8vICBBUC0yOE1BUjI1IEFkZCBCb29sZWFuXG4gICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nKXtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50O1xuICAgICAgICBxdWVzLmJvb2xlYW4gPSBldmVudDtcbiAgICAgIH1cbiAgICAgIC8vIEFQLTEwQVBSMjUgTnVtYmVyXG4gICAgICAvLyBBUDE5UEFSMjUgLWlmIGNoYW5nZSBlbHNlIGlzXG4gICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBOdW1iZXIoZXZlbnQpOyBcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQ7XG4gICAgICB9XG4gICAgICAvL1JTIDA2SkFOMjVcbiAgICAgIC8vIFZhbGlkYXRlIGVycm9yIG1lc3NhZ2UgLSBtb2RpZmllZCB0byBoYW5kbGUgcmljaCB0ZXh0XG4gICAgICBjb25zdCBoYXNFcnJvciA9IHF1ZXMuZXJyb3JNZXNzYWdlICYmIChcbiAgICAgICAgKHF1ZXMudHlwZSA9PT0gJ0ZpbGUnICYmIHF1ZXMuaW5wdXQubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAocXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyAmJiAoIXF1ZXMuaW5wdXQgfHwgcXVlcy5pbnB1dC50cmltKCkgPT09ICcnKSkgfHxcbiAgICAgICAgKHF1ZXMudHlwZSAhPT0gJ0ZpbGUnICYmIHF1ZXMuVHlwZSAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgIXF1ZXMuaW5wdXQpXG4gICAgICApO1xuICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcbiAgICAgIHF1ZXMuZXJyb3IgPSBoYXNFcnJvciA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XG4gICAgICAvLyBPbmNlIHRoZSByaWdodCB2YWx1ZSBpcyBzdG9yZWQgaW4gcXVlcy5pbnB1dCBzdG9yZSB0aGUgcXVlcyAod2l0aCBpbnB1dCkgaW4gc3RvcmFnZVNlcnZpY2VcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKHF1ZXMpO1xuICAgICAgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gICAgICB0aGlzLmhhbmRsZVF1ZXN0aW9uLmVtaXQocXVlcyk7XG4gICAgfVxuICAgIGlmKHF1ZXM/LnNpbmdsZUZpZWxkQ2hhbmdlKXtcbiAgICAgIHRoaXMuc2luZ2xlRmllbGRDaGFuZ2VFbWl0LmVtaXQocXVlcyk7XG4gICAgICBxdWVzLnNpbmdsZUZpZWxkQ2hhbmdlID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGRlbGV0ZUZpbGUoZmlsZURhdGE6IGFueSkge1xuICB9XG4gIGdldERyb3BEb3duKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmhhZGxlRHJvcERvd25EZXBlbmRlbnQuZW1pdChldmVudCk7XG4gIH1cbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gIGdldEN1cnJlbnRDYWxlbmRhcihldmVudDogYW55KSB7XG4gICAgdGhpcy5oYW5kbGVDYWxlbmRhckRhdGUuZW1pdChldmVudCk7XG4gIH1cblxuICBnZXRDYWxlbmRhckV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2FsZW5kYXJFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBWRCAwNlNlcDI0IHJlbW92ZSB0aGUgc3BlY2lhbCBjaGFyZWN0ZXJzIGFuZCB0YWdzIFxuICAvLyBmcm9tIHRoZSBxdWVzdGlvblRleHRcbiAgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzdGlvblRleHQ6IHN0cmluZykge1xuICAgIGxldCB1cGRhdGVkVGV4dCA9IHF1ZXN0aW9uVGV4dD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJyk7XG4gICAgcmV0dXJuIHVwZGF0ZWRUZXh0O1xuICB9XG5cbiAgLy8gc3VuZGF5IGNvbW1lbnRcbiAgLy8gb3BlbkNhbGVuZGFyQ29tcG9uZW50KHF1ZXMpIHtcbiAgLy8gICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljSG9zdC52aWV3Q29udGFpbmVyUmVmO1xuICAvLyAgIGlmKHZpZXdDb250YWluZXJSZWYpe1xuICAvLyAgICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAvLyAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQpO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnF1ZXN0aW9uID0gcXVlcztcbiAgLy8gICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kYXRlU2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB0aGlzLmdldEN1cnJlbnRDYWxlbmRhcihldmVudCkpO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmV2ZW50U2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDphbnkpID0+IHRoaXMuZ2V0Q2FsZW5kYXJFdmVudChldmVudCkpXG4gIC8vICAgfVxuICAvLyB9XG5cbiAgaXNDYWxlbmRhck1vZGFsT3BlbiA9IGZhbHNlO1xuICBjYWxlbmRhck1vZGFsVGl0bGU6IGFueTtcbiAgY2FsZW5kYXJNb2RhbFNpemU6IGFueTtcbiAgY2FsZW5kYXJTYXZlQnV0dG9uVmFsdWU6IGFueTtcbiAgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XG4gIHFiUmVmcmVuY2VCb29rOiBhbnk7XG4gIG1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlcjogYW55O1xuXG4gIG9wZW5DYWxlbmRhck1vZGFsKGV2ZW50KSB7XG4gICAgdGhpcy5pc0NhbGVuZGFyTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnFiUmVmcmVuY2VCb29rID0gZXZlbnQucWJSZWZyZW5jZUJvb2s7XG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMgPSBldmVudC5yZWZlcmVuY2VRdWVzdGlvbnM7XG4gICAgdGhpcy5jYWxlbmRhck1vZGFsVGl0bGUgPSBldmVudC5tb2RhbFRpdGxlO1xuICAgIHRoaXMuY2FsZW5kYXJNb2RhbFNpemUgPSBldmVudC5tb2RhbFNpemU7XG4gICAgdGhpcy5jYWxlbmRhclNhdmVCdXR0b25WYWx1ZSA9IGV2ZW50LnNhdmVCdXR0b25WYWx1ZTtcbiAgICB0aGlzLm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlciA9IGV2ZW50Lm1vZGFsRm9vdGVyO1xuICB9XG5cblxuICBvbkNhbGVuZGFyTW9kYWxTYXZlKCkge1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5kYXRhQ2hhbmdlcygnY2FsZW5kYXItbW9kYWwtc2F2ZScpO1xuICB9XG5cblxuICBoYW5kbGVRdWVzdGlvbkV2ZW50KGV2ZW50KSB7XG4gIH1cblxuICBjbG9zZUNhbGVuZGFyTW9kYWwoZXZlbnQpIHtcbiAgICB0aGlzLmlzQ2FsZW5kYXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFNLUzI1TUFSMjUgaW1hZ2UgYWRkXG4gIGFzeW5jIGZpbGVDaGFuZ2VFdmVudChxdWVzOiBhbnksIGV2ZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBhd2FpdCB0aGlzLnJlYWRGaWxlQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICBxdWVzLmltYWdlRGF0YSA9IGltYWdlRGF0YTtcbiAgICAgICAgcXVlcy5vcmdJbWFnZURhdGEgPSBpbWFnZURhdGE7XG4gICAgICAgIC8vIEluaXRpYWxpemUgbG9nbyBzaXplIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICBpZiAoIXF1ZXMuaW1hZ2VTaXplKSB7XG4gICAgICAgICAgcXVlcy5pbWFnZVNpemUgPSB7IHdpZHRoOiAxNTAsIGhlaWdodDogMTUwIH07XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGltYWdlRGF0YSwgcXVlcyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVhZGluZyBmaWxlOlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkRmlsZUFzRGF0YVVSTChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgb25JbWFnZUVkaXQocXVlczogYW55KSB7XG4gICAgdGhpcy5pc0ltYWdlRWRpdCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudCA9IHF1ZXM7XG4gIH1cbiAgYXN5bmMgb25JbWFnZURlbGV0ZShxdWVzOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgcXVlcy5pbWFnZURhdGEgPSAnJztcbiAgICAgIHF1ZXMub3JnSW1hZ2VEYXRhID0gJyc7XG4gICAgICAvLyBJbml0aWFsaXplIGxvZ28gc2l6ZSBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgIGlmICghcXVlcy5pbWFnZVNpemUpIHtcbiAgICAgICAgcXVlcy5pbWFnZVNpemUgPSB7IHdpZHRoOiAxNTAsIGhlaWdodDogMTUwIH07XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKHF1ZXMuaW1hZ2VEYXRhLCBxdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHJlYWRpbmcgZmlsZTpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzI1TUFSMjUgaW1hZ2UgZWRpdCBmdW5jdGlvbnNcbiAgZmxpcEhvcml6b250YWwoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIGZsaXBIOiAhdGhpcy50cmFuc2Zvcm0uZmxpcEhcbiAgICB9O1xuICB9XG5cbiAgZmxpcFZlcnRpY2FsKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwVjogIXRoaXMudHJhbnNmb3JtLmZsaXBWXG4gICAgfTtcbiAgfVxuXG4gIHJlc2V0SW1hZ2UoKSB7XG4gICAgdGhpcy5jYW52YXNSb3RhdGlvbiA9IDA7XG4gICAgdGhpcy5jcm9wcGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgdHJhbnNsYXRlVW5pdDogJ3B4JyxcbiAgICAgIHNjYWxlOiAxLFxuICAgICAgcm90YXRlOiAwLFxuICAgICAgZmxpcEg6IGZhbHNlLFxuICAgICAgZmxpcFY6IGZhbHNlLFxuICAgICAgdHJhbnNsYXRlSDogMCxcbiAgICAgIHRyYW5zbGF0ZVY6IDBcbiAgICB9O1xuICB9XG5cbiAgem9vbU91dCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgc2NhbGU6IHRoaXMudHJhbnNmb3JtLnNjYWxlISAtIC4xXG4gICAgfTtcbiAgfVxuXG4gIHpvb21JbigpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgc2NhbGU6IHRoaXMudHJhbnNmb3JtLnNjYWxlISArIC4xXG4gICAgfTtcbiAgfVxuICByb3RhdGVMZWZ0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIFVzZSB0aW1lb3V0IGJlY2F1c2Ugcm90YXRpbmcgaW1hZ2UgaXMgYSBoZWF2eSBvcGVyYXRpb24gYW5kIHdpbGwgYmxvY2sgdGhlIHVpIHRocmVhZFxuICAgICAgdGhpcy5jYW52YXNSb3RhdGlvbi0tO1xuICAgICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJvdGF0ZVJpZ2h0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNhbnZhc1JvdGF0aW9uKys7XG4gICAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgbW92ZUxlZnQoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZUg6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZUghIC0gMVxuICAgIH07XG4gIH1cblxuICBtb3ZlUmlnaHQoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZUg6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZUghICsgMVxuICAgIH07XG4gIH1cblxuICBtb3ZlRG93bigpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlVjogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlViEgKyAxXG4gICAgfTtcbiAgfVxuXG4gIG1vdmVVcCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlVjogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlViEgLSAxXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGZsaXBBZnRlclJvdGF0ZSgpIHtcbiAgICBjb25zdCBmbGlwcGVkSCA9IHRoaXMudHJhbnNmb3JtLmZsaXBIO1xuICAgIGNvbnN0IGZsaXBwZWRWID0gdGhpcy50cmFuc2Zvcm0uZmxpcFY7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIGZsaXBIOiBmbGlwcGVkVixcbiAgICAgIGZsaXBWOiBmbGlwcGVkSCxcbiAgICAgIHRyYW5zbGF0ZUg6IDAsXG4gICAgICB0cmFuc2xhdGVWOiAwXG4gICAgfTtcbiAgfVxuICBhc3luYyBpbWFnZUNyb3BwZWQoZXZlbnQ6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCB0aGlzLmNvbnZlcnRCbG9iVG9CYXNlNjQoZXZlbnQub2JqZWN0VXJsKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZUVsZW1lbnQuaW1hZ2VEYXRhID0gYmFzZTY0O1xuICAgICAgYXdhaXQgdGhpcy5jaGlsZEV2ZW50Q2FwdHVyZShiYXNlNjQsIHRoaXMuc2VsZWN0ZWRJbWFnZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gaW1hZ2VDcm9wcGVkOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cblxuICBjcm9wcGVyUmVhZHkoc291cmNlSW1hZ2VEaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cbiAgLy8gU0tTMjVNQVIyNSBibG9iIHRvIGJhc2UgNjQgY29udmVydGVyXG4gIGNvbnZlcnRCbG9iVG9CYXNlNjQob2JqZWN0VXJsOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBmZXRjaChvYmplY3RVcmwpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5ibG9iKCkpXG4gICAgICAudGhlbihibG9iID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLmlzSW1hZ2VFZGl0ID0gZmFsc2U7XG4gIH1cblxuICAvLyBTS1MyOE1BUjI1IGZvciBuZXN0ZWQgYm9vayByZWFkXG4gIHJlYWRRdWVzdGlvbnMocWJJZDogYW55LCBxdWVzOmFueSkge1xuICAgIGxldCBxdWVzdGlvbnMgPSBbXTtcbiAgICAvLyBBZGRlZCB0ZXJuYXJ5IHRvIGF2b2lkIHVuZGVmaW5lZFxuICAgIGZvciAodmFyIHNxIGluIHF1ZXMuYm9va1F1ZXN0aW9uc01hcFtxYklkXS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgIGxldCBxOiBRdWVzdGlvbiA9IHF1ZXMuYm9va1F1ZXN0aW9uc01hcFtxYklkXS5zdWJRdWVzdGlvbnNbc3FdO1xuICAgICAgLy8gaWYgcXVlc3Rpb24gaXMgdGhlcmUgcHJvY2Vzc1xuICAgICAgaWYgKHEpIHtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaChxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9ucztcbiAgfVxufVxuIiwiPCEtLSBIQSAxOEpBTjI0ICBBZGRlZCBjbGFzcyBmb3Igc3R5bGluZyAtLT5cbjxkaXYgW3N0eWxlXT1cImJvb2tTdHlsZVwiIGNsYXNzPVwiY29udGVudC1ib3ggZm9ybS1ncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRGlyZWN0aXZlIGFuZCBRdWVzdGlvbiBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XG4gICAgICAgIDwhLS0gUkEwOURFQzI0IENoYW5nZWQga2V5cy0tPlxuICAgICAgICA8ZGl2IFtjbGFzc109XCInY29sLWxnLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiICpuZ0Zvcj1cImxldCBxdWVzIG9mIHF1ZXN0aW9ucztsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIFtpZF09XCJxdWVzLmlkXCIgW2Rpcl09XCJxdWVzLmxhbmdEaXJlY3Rpb25cIiBbc3R5bGVdPVwicXVlcz8uc3R5bGU/LnF1ZXN0aW9uU3R5bGVcIj5cbiAgICAgICAgICAgIDwhLS0gVkQgMDlNYXkyNCBpcyBoaWRlIGZpZWxkIGNoYW5nZS0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmlzSGlkZGVuXCIgY2xhc3M9XCJueHRJbnB1dENvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQVAtMjhNQVIyNSBTaG93IGxhYmVsIGlmIGVuYWJsZWQgYW5kIG5vdCBhIEJvb2xlYW4gdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsID8gKHF1ZXMuc3R5bGU/LnNob3dMYWJlbCAmJiBxdWVzLnR5cGUgIT09ICdCb29sZWFuJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0JyAmJiBxdWVzLnR5cGUgIT09ICdMaXN0JyAmJiBxdWVzPy50eXBlICE9PSAnRHJvcGRvd24nICYmIHF1ZXMudHlwZSAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgcXVlcy50eXBlICE9PSAnRGF0ZVRpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ0xvY2F0aW9uJyAmJiBxdWVzLnR5cGUgIT09ICdOdW1iZXInICYmcXVlcy50eXBlICE9PSAnRW1haWwnICYmICBxdWVzLnR5cGUgIT09ICdEYXRlJyAmJiBxdWVzLnR5cGUgIT09ICdUaW1lJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0QXJlYScgJiYgcXVlcy50eXBlICE9PSAnTGFiZWwnKTogKHF1ZXMuc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2UgJiYgcXVlcy50eXBlICE9PSAnQm9vbGVhbicgJiYgcXVlcy50eXBlICE9PSAnVGV4dCcgJiYgcXVlcy50eXBlICE9PSAnTGlzdCcgJiYgcXVlcz8udHlwZSAhPT0gJ0Ryb3Bkb3duJyAmJiBxdWVzLnR5cGUgIT09ICdEYXRlVGltZScgJiYgcXVlcy50eXBlICE9PSAnTG9jYXRpb24nICYmIHF1ZXMudHlwZSAhPT0gJ051bWJlcicgJiYgIHF1ZXMudHlwZSAhPT0gJ0RhdGUnICYmIHF1ZXMudHlwZSAhPT0gJ1RpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ1RleHRBcmVhJyAmJiBxdWVzLnR5cGUgIT09ICdMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInF1ZXMuc3R5bGU/LmxhYmVsU3R5bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidkaXMtZmxleCBzaGVuZ2VsLW15dC1mb250MyBteXQtZm9udDcgJ1wiIFtzdHlsZV09XCJxdWVzLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogcXVlcy5mb250LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJzogcXVlcy5mb250Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogcXVlcy5mb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXdlaWdodCc6IHF1ZXMuZm9udFdlaWdodFxuICAgICAgICAgICAgICAgICAgICAgIH1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5pc09wdGlvbmFsICYmICFxdWVzLmlzUmVhZE9ubHlcIiBzdHlsZT1cImNvbG9yOiByZWQ7XCI+KjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MxM01BUjI1IG9ubHkgc2hvdyBvbiBmaWxlIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJTIDE3SkFOMjAyNSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGlzcGxheXMgaWNvbnMgd2l0aCB0b29sdGlwcyBoZWxwIHRleHQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5xdWVzdGlvblRleHQgJiYgcXVlcz8uaGVscFRleHQgJiYgcXVlcy50eXBlID09PSAnRmlsZSdcIiBjbGFzcz1cImljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInF1ZXM/LmhlbHBUZXh0XCIgbWF0VG9vbHRpcENsYXNzPVwid2hpdGUtdG9vbHRpcFwiPmk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUlMgMTdKQU4yMDI1IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAgRGlzcGxheXMgaWNvbnMgd2l0aCB0b29sdGlwcyBmb3IgZmlsZSByZXF1aXJlbWVudHMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiICpuZ0lmPVwicXVlcy5maWVsZHNNZXRhICYmIHF1ZXMudHlwZSA9PT0gJ0ZpbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRGaWxlUmVxdWlyZW1lbnRzKHF1ZXMuZmllbGRzTWV0YSlcIiBtYXRUb29sdGlwQ2xhc3M9XCJ3aGl0ZS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA0cHg7XCI+aTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBjYWxlbmRhciAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0NhbGVuZGFyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1jYWxlbmRhciBbcXVlc3Rpb25dPVwicXVlc1wiIChldmVudFNlbGVjdGVkKT1cImdldENhbGVuZGFyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdGVkKT1cImdldEN1cnJlbnRDYWxlbmRhcigkZXZlbnQpXCIgKG9wZW5Nb2RhbCk9XCJvcGVuQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZU1vZGFsKT1cImNsb3NlQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCI+PC9hcHAtY3VzdG9tLWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIG1vZGVsIHVzZWQgaW4gY2FsZW5kYXIgY29tcG9uZW50IC0tPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1tb2RlbCAqbmdJZj1cImlzQ2FsZW5kYXJNb2RhbE9wZW5cIiBbbW9kYWxUaXRsZV09XCJjYWxlbmRhck1vZGFsVGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzTW9kYWxPcGVuXT1cImlzQ2FsZW5kYXJNb2RhbE9wZW5cIiBbbW9kYWxTaXplXT1cImNhbGVuZGFyTW9kYWxTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzYXZlQnV0dG9uVmFsdWVdPVwiY2FsZW5kYXJTYXZlQnV0dG9uVmFsdWVcIiBbbW9kYWxGb290ZXJdPVwibW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlQnV0dG9uRW1pdCk9XCJvbkNhbGVuZGFyTW9kYWxTYXZlKClcIiAoY2FuY2VsQnV0dG9uRW1pdCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgW3FiSXRlbV09XCJxYlJlZnJlbmNlQm9va1wiIFtxdWVzdGlvbnNdPVwicmVmZXJlbmNlUXVlc3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlUXVlc3Rpb24pPVwiaGFuZGxlUXVlc3Rpb25FdmVudCgkZXZlbnQpXCI+PC9saWItcXVlc3Rpb25ib29rPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tbW9kZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzExSlVOMjUgZm9yIHBpY2sgbG9jYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uICAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJ1wiIFthcGlLZXldPVwicWJJdGVtWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXMuc2VsZWN0ZWRWYWx1ZVwiIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgKGxvY2F0aW9uU2VsZWN0ZWQpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXBpY2stbG9jYXRpb24+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzI1TUFSMjUgSW1hZ2UgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0ltYWdlJ1wiIChtb3VzZWVudGVyKT1cImlzSW1hZ2VIb3ZlciA9IHRydWU7XCJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaXNJbWFnZUhvdmVyID0gZmFsc2U7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ltYWdlSG92ZXJcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogZW5kO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzLmlzUmVhZE9ubHlcIiAoY2xpY2spPVwib25JbWFnZUVkaXQocXVlcylcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjEwNjcgNi4wNzE3NEw5LjkyODMzIDQuODkzNEwyLjE2NjY3IDEyLjY1NTFWMTMuODMzNEgzLjM0NUwxMS4xMDY3IDYuMDcxNzRaTTEyLjI4NSA0Ljg5MzRMMTMuNDYzMyAzLjcxNTA3TDEyLjI4NSAyLjUzNjc0TDExLjEwNjcgMy43MTUwN0wxMi4yODUgNC44OTM0Wk00LjAzNSAxNS41MDAxSDAuNVYxMS45NjQyTDExLjY5NTggMC43Njg0MDNDMTEuODUyMSAwLjYxMjE3NyAxMi4wNjQgMC41MjQ0MTQgMTIuMjg1IDAuNTI0NDE0QzEyLjUwNiAwLjUyNDQxNCAxMi43MTc5IDAuNjEyMTc3IDEyLjg3NDIgMC43Njg0MDNMMTUuMjMxNyAzLjEyNTlDMTUuMzg3OSAzLjI4MjE4IDE1LjQ3NTcgMy40OTQxIDE1LjQ3NTcgMy43MTUwN0MxNS40NzU3IDMuOTM2MDQgMTUuMzg3OSA0LjE0Nzk2IDE1LjIzMTcgNC4zMDQyNEw0LjAzNTgzIDE1LjUwMDFINC4wMzVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM2Qzc1N0RcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIXF1ZXMuaXNSZWFkT25seVwiIChjbGljayk9XCJvbkltYWdlRGVsZXRlKHF1ZXMpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNCAzLjk4NzI2QzExLjc4IDMuNzY3MjYgOS41NDY2NyAzLjY1MzkzIDcuMzIgMy42NTM5M0M2IDMuNjUzOTMgNC42OCAzLjcyMDYgMy4zNiAzLjg1MzkzTDIgMy45ODcyNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNS42NjY1IDMuMzEzNjJMNS44MTMxNyAyLjQ0MDI4QzUuOTE5ODQgMS44MDY5NSA1Ljk5OTg0IDEuMzMzNjIgNy4xMjY1IDEuMzMzNjJIOC44NzMxN0M5Ljk5OTg0IDEuMzMzNjIgMTAuMDg2NSAxLjgzMzYyIDEwLjE4NjUgMi40NDY5NUwxMC4zMzMyIDMuMzEzNjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyLjU2NjcgNi4wOTM3NUwxMi4xMzM0IDEyLjgwNzFDMTIuMDYgMTMuODUzNyAxMiAxNC42NjcxIDEwLjE0IDE0LjY2NzFINS44NjAwMkM0LjAwMDAyIDE0LjY2NzEgMy45NDAwMiAxMy44NTM3IDMuODY2NjggMTIuODA3MUwzLjQzMzM1IDYuMDkzNzVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuODg2NDcgMTEuMDAwNEg5LjEwNjQ3XCIgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjMzMzUgOC4zMzMyNUg5LjY2NjgzXCIgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJxdWVzLmlzUmVhZE9ubHlcIiBbc3JjXT1cInF1ZXMuaW1hZ2VEYXRhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmlzUmVhZE9ubHlcIiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvZ28gcHJldmlldyBhcmVhIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tcHJldmlld1wiICpuZ0lmPVwicXVlcy5pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJxdWVzLmltYWdlRGF0YVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBVcGxvYWQgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmltYWdlRGF0YVwiIGNsYXNzPVwibG9nby11cGxvYWQtcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibG9nby11cGxvYWQte3tpfX1cIiBjbGFzcz1cImxvZ28tdXBsb2FkLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL0ltYWdlLnN2Z1wiIGFsdD1cIlVwbG9hZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlVwbG9hZCBJbWFnZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwibG9nby11cGxvYWQte3tpfX1cIiBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlRXZlbnQocXVlcywgJGV2ZW50KVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gTVNNMTBKVUwyNSBpY29uLXNlbGVjdG9yIC0tPlxuICAgICAgICAgICAgICAgIDxueHQtaWNvbi1zZWxlY3RvciBbYWxsSWNvbnNdPVwiYWxsSWNvbnNcIiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0ljb24nXCIgW3JlcXVpcmVkXT1cInF1ZXMuaXNPcHRpb25hbFwiIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiIFtxdWVzdGlvbl09XCJxdWVzXCIgW2xhYmVsRm9udF09XCJxdWVzLmZvbnRcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29sb3JdPVwicXVlcy5mb250Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxTaXplXT1cInF1ZXMuZm9udFNpemVcIiBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCIgW3Nob3dMYWJlbF09XCJxdWVzLnN0eWxlPy5zaG93TGFiZWxcIiAoaWNvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7XCI+PC9ueHQtaWNvbi1zZWxlY3Rvcj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjFNQVIyNSBsaW5lIC0tPlxuICAgICAgICAgICAgICAgIDxociAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xpbmUnXCIgY2xhc3M9XCJjdXN0b20tbGluZVwiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWZsZXhcIiAvPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTNNQVIyNSBkYXRhIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxueHQtZGF0YXRhYmxlICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGFibGUnXCIgaXNFZGl0Um93IGlzRGVsZXRlUm93IGFjdGlvbkJ1dHRvbiBpc0J1dHRvbnMgW3F1ZXN0aW9uXT1cInF1ZXNcIiBmcm9tPVwiZm9ybUJ1aWxkZXJcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LmRhdGEsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICBbdGFibGVDb25maWddPVwicXVlcy50YWJsZUNvbmZpZ1wiIHRhYmxlSWQ9XCJcIiBkaXJlY3Rpb249XCJsdHJcIiB0YWJsZVdpZHRoPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgIDwvbnh0LWRhdGF0YWJsZT5cbiAgICAgICAgICAgICAgICA8IS0tIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgPG54dC1zZWFyY2gtYm94ICAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xpc3QnXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbcGxhY2VIb2xkZXJUZXh0XT1cInF1ZXMucXVlc3Rpb24gfHwgJydcIiBcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlYXJjaFZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pXCI+XG4gICAgICAgICAgICAgICAgPC9ueHQtc2VhcmNoLWJveD5cblxuICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIGNvbmRpdGlvbiBvZiBzcU9wdGlvbiB0byB0aGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gKm5nSWY9XCJxdWVzPy50eXBlID09PSAnRHJvcGRvd24nICYmIHF1ZXM/Lm9wdGlvbnNcIiBbb3B0aW9uc109XCJxdWVzLm9wdGlvbnNcIiBbdG9rZW5dPVwidG9rZW5cIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwicXVlcy5pZFwiIFtzZWxlY3RlZFZhbHVlXT1cInFiSXRlbS5pc1NoZW5nZWwgPyBxdWVzLmlucHV0IDogcXVlcy5zZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLS17eydzZWxlY3QnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fS0tLVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IGN1c3RvbS1yYWRpbyBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1JhZGlvJyAmJiBxdWVzPy5vcHRpb25zXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tcmFkaW8gW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbdG9rZW5dPVwidG9rZW5cIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIiBbaWRdPVwicXVlcy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMucmVmZXJlbmNlRmllbGRcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LnZhbHVlLCRldmVudC5xdWVzdGlvbik7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tcmFkaW8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlcyAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLWZpbGUtdXBsb2FkICpuZ0lmPVwicXVlcy50eXBlID09PSAnRmlsZSdcIiBbbGltaXRGaWxlVXBsb2FkaW5nXT1cIjVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsbEZpbGVzXT1cInF1ZXMuaW5wdXRcIiAoc2VsZWN0ZWRGaWxlRGF0YSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVkRmlsZURhdGEpPVwiZGVsZXRlRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWZpbGUtdXBsb2FkPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTFKVU4yNSBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPG54dC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdCdXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2J0bkhlaWdodF09XCInNTBweCdcIiBbYnRuV2lkdGhdPVwiJzE1MHB4J1wiIFtidXR0b25WYWx1ZV09XCJxdWVzPy5xdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIChidXR0b25DbGlja0VtaXQpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L254dC1idXR0b24+XG4gICAgICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IGJvb2sgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0Jvb2snXCIgW3FiSXRlbV09XCJxdWVzLnFiSXRlbVwiIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25zXT1cInJlYWRRdWVzdGlvbnMocXVlcy5xYlJlZmVyZW5jZSwgcXVlcy5xYlJlZmVyZW5jZVF1ZXN0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzExSlVOMjUgVGV4dCwgRW1haWwsIGxhYmVsLCBudW1iZXIsIEJvb2xlYW4sIHJpY2ggdGV4dCBlZGl0b3IsIERhdGVUaW1lLCBEYXRlLCBUaW1lLS0+XG4gICAgICAgICAgICAgICAgPG54dC1pbnB1dCAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0JyB8fCBxdWVzLnR5cGUgPT09ICdFbWFpbCcgfHwgcXVlcy50eXBlID09PSAnTnVtYmVyJyB8fCBxdWVzLnR5cGUgPT09ICdMYWJlbCcgfHwgcXVlcy50eXBlID09PSAnQm9vbGVhbicgfHwgcXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlVGltZScgfHwgcXVlcy50eXBlID09PSAnRGF0ZScgfHwgcXVlcy50eXBlID09PSAnVGltZScgfHwgcXVlcy50eXBlID09PSAnVGV4dEFyZWEnXCJcbiAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwicXVlcy50eXBlID09PSAnVGV4dCcgPyAndGV4dCcgOiBxdWVzLnR5cGUgPT09ICdFbWFpbCcgPyAnZW1haWwnIDogcXVlcy50eXBlID09PSAnTnVtYmVyJyA/ICdudW1iZXInIDogcXVlcy50eXBlID09PSAnTGFiZWwnID8gJ2xhYmVsJyA6IHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nID8gJ2NoZWNrYm94JyA6IHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScgPyAncmljaHRleHQnIDogcXVlcy50eXBlID09PSAnRGF0ZVRpbWUnID8gJ2RhdGV0aW1lJyA6IHF1ZXMudHlwZSA9PT0gJ0RhdGUnID8gJ2RhdGUnIDogIHF1ZXMudHlwZSA9PT0gJ1RpbWUnID8gJ3RpbWUnIDogcXVlcy50eXBlID09PSAnVGV4dEFyZWEnID8gJ3RleHRhcmVhJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzLmlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxGb250XT1cInF1ZXMuZm9udFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJyZW1vdmVDaGFyYWN0ZXJzKHF1ZXM/LnF1ZXN0aW9uVGV4dClcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2xvcl09XCJxdWVzLmZvbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbFNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFZhbHVlU2l6ZV09XCJxdWVzLmZvbnRTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsV2VpZ2h0XT1cInF1ZXMuZm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFdlaWdodF09XCJxdWVzLmZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cInF1ZXMuc3R5bGU/LnNob3dMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGlucHV0Qm9yZGVyPVwibm9uZVwiIHN2Z0hlaWdodD1cIjIwcHhcIiBzdmdXaWR0aD1cIjIwcHhcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJxdWVzLmlzT3B0aW9uYWxcIiBpbnB1dEJnQ29sb3I9XCIjRkFGQUZBXCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwicXVlcy50cmFja2luZ0lkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRJY29uTGVmdFNyY109XCJxdWVzLmljb25MZWZ0U3JjXCIgXG4gICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L254dC1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tU0tTMjVNQVIyNSBNb2RhbCBPdmVybGF5IC0tPlxuPGRpdiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIiAqbmdJZj1cImlzSW1hZ2VFZGl0XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zZS1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCI+w5c8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJbWFnZSBFZGl0b3IgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudD8udHlwZSA9PT0gJ0ltYWdlJ1wiPlxuICAgICAgICAgICAgPGltYWdlLWNyb3BwZXIgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGFcIiBbaW1hZ2VCYXNlNjRdPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQub3JnSW1hZ2VEYXRhXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbYWxpZ25JbWFnZV09XCJhbGlnbkltYWdlXCIgW3JvdW5kQ3JvcHBlcl09XCJyb3VuZENyb3BwZXJcIiBbYmFja2dyb3VuZENvbG9yXT1cIid3aGl0ZSdcIlxuICAgICAgICAgICAgICAgIGltYWdlQWx0VGV4dD1cIkFsdGVybmF0aXZlIGltYWdlIHRleHRcIiBbYWxsb3dNb3ZlSW1hZ2VdPVwiZmFsc2VcIiBbaGlkZVJlc2l6ZVNxdWFyZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtjYW52YXNSb3RhdGlvbl09XCJjYW52YXNSb3RhdGlvblwiIFthc3BlY3RSYXRpb109XCJhc3BlY3RSYXRpb1wiIFtjb250YWluV2l0aGluQXNwZWN0UmF0aW9dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cImZhbHNlXCIgW2Nyb3BwZXJTdGF0aWNXaWR0aF09XCJjcm9wcGVyU3RhdGljV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtjcm9wcGVyU3RhdGljSGVpZ2h0XT1cImNyb3BwZXJTdGF0aWNIZWlnaHRcIiBbY3JvcHBlck1pbldpZHRoXT1cImNyb3BwZXJNaW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgW2Nyb3BwZXJNaW5IZWlnaHRdPVwiY3JvcHBlck1pbkhlaWdodFwiIFtjcm9wcGVyTWF4V2lkdGhdPVwiY3JvcHBlck1heFdpZHRoXCJcbiAgICAgICAgICAgICAgICBbY3JvcHBlck1heEhlaWdodF09XCJjcm9wcGVyTWF4SGVpZ2h0XCIgW3Jlc2V0Q3JvcE9uQXNwZWN0UmF0aW9DaGFuZ2VdPSd0cnVlJyBbKGNyb3BwZXIpXT1cImNyb3BwZXJcIlxuICAgICAgICAgICAgICAgIFsodHJhbnNmb3JtKV09XCJ0cmFuc2Zvcm1cIiBbb25seVNjYWxlRG93bl09XCJ0cnVlXCIgb3V0cHV0PVwiYmxvYlwiIGZvcm1hdD1cInBuZ1wiXG4gICAgICAgICAgICAgICAgKGltYWdlQ3JvcHBlZCk9XCJpbWFnZUNyb3BwZWQoJGV2ZW50KVwiIChjcm9wcGVyUmVhZHkpPVwiY3JvcHBlclJlYWR5KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvaW1hZ2UtY3JvcHBlcj5cblxuICAgICAgICAgICAgPCEtLSBDb250cm9scyAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGFcIiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyb3RhdGVMZWZ0KClcIiB0aXRsZT1cIlJvdGF0ZSBMZWZ0XCI+4p+yPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyb3RhdGVSaWdodCgpXCIgdGl0bGU9XCJSb3RhdGUgUmlnaHRcIj7in7M8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInpvb21PdXQoKVwiIHRpdGxlPVwiWm9vbSBPdXRcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJ6b29tSW4oKVwiIHRpdGxlPVwiWm9vbSBJblwiPis8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVMZWZ0KClcIiB0aXRsZT1cIk1vdmUgTGVmdFwiPuKGkDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZVJpZ2h0KClcIiB0aXRsZT1cIk1vdmUgUmlnaHRcIj7ihpI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVVcCgpXCIgdGl0bGU9XCJNb3ZlIFVwXCI+4oaRPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlRG93bigpXCIgdGl0bGU9XCJNb3ZlIERvd25cIj7ihpM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cImZsaXBIb3Jpem9udGFsKClcIiBbY2xhc3MuZW5hYmxlZF09XCJ0cmFuc2Zvcm0uZmxpcEhcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkZsaXAgSG9yaXpvbnRhbGx5XCI+4oaUPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJmbGlwVmVydGljYWwoKVwiIFtjbGFzcy5lbmFibGVkXT1cInRyYW5zZm9ybS5mbGlwVlwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRmxpcCBWZXJ0aWNhbGx5XCI+4oaVPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyZXNldEltYWdlKClcIiB0aXRsZT1cIlJlc2V0XCI+w5c8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
838
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUE0RSxNQUFNLGVBQWUsQ0FBQztBQU1qSyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDekcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDNUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDckcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztB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QUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9GLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25HLENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7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QkFDSCxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO1lBQ0gsQ0FBQztZQUNELE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztZQUUxSSxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFB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S0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBbUVJLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBWaWV3Q2hpbGQsIENoYW5nZURldGVjdG9yUmVmLCBTaW1wbGVDaGFuZ2VzLCBDb21wb25lbnRSZWYsIEFmdGVyVmlld0luaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXN0aW9uLCBRdWVzdGlvbkJvb2sgfSBmcm9tICcuLi8uLi93cmFwcGVyJztcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVycm9yV3JhcHBlciB9IGZyb20gJy4uLy4uL21vZGVsL2Vycm9yV3JhcHBlcic7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlcGVuZGVuY3lNZXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9kZXBlbmRlbmN5TWV0YSc7XG5pbXBvcnQgeyBDcm9wcGVyUG9zaXRpb24sIERpbWVuc2lvbnMsIEltYWdlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJbWFnZUNyb3BwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ltYWdlLWNyb3BwZXIvY29tcG9uZW50L2ltYWdlLWNyb3BwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbVJhZGlvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jdXN0b20tcmFkaW8vY3VzdG9tLXJhZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1kcm9wZG93bi9jdXN0b20tZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IE54dFNlYXJjaEJveCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2VhcmNoLWJveC9zZWFyY2gtYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHREYXRhdGFibGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBpY2tMb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvcGljay1sb2NhdGlvbi9waWNrLWxvY2F0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDdXN0b21Nb2RlbENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3VzdG9tLW1vZGVsL2N1c3RvbS1tb2RlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2N1c3RvbS1jYWxlbmRhci9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEkxOG5QaXBlIH0gZnJvbSAnLi4vLi4vaTE4bi5waXBlJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE54dElucHV0IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9ueHQtaW5wdXQvbnh0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOeHRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2J1dHRvbi9ueHQtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2ljb24tc2VsZWN0b3IvaWNvbi1zZWxlY3Rvci5jb21wb25lbnQnOyAvL01TTTEwSlVMMjUgaWNvbiBzZWxlY3RvciBjb21wb25lbnRcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXF1ZXN0aW9uYm9vaycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsIEltYWdlQ3JvcHBlckNvbXBvbmVudCwgTnh0RmlsZVVwbG9hZENvbXBvbmVudCwgQ3VzdG9tUmFkaW9Db21wb25lbnQsIEN1c3RvbURyb3Bkb3duQ29tcG9uZW50LCBOeHRCdXR0b25Db21wb25lbnQsIE54dFNlYXJjaEJveCwgTnh0RGF0YXRhYmxlLCBQaWNrTG9jYXRpb25Db21wb25lbnQsIEN1c3RvbU1vZGVsQ29tcG9uZW50LCBDdXN0b21DYWxlbmRhckNvbXBvbmVudCwgSTE4blBpcGUsIE1hdFRvb2x0aXBNb2R1bGUsIE54dElucHV0LCBJY29uU2VsZWN0b3JDb21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25ib29rQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIEBJbnB1dCgpIHRyYW5zbGF0ZWRRdWVzdGlvbnM6IGFueVtdID0gW10gIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gIEBJbnB1dCgpIHF1ZXN0aW9uczogYW55W107XG4gIEBJbnB1dCgpIGVycm9yRmllbGRJZDogYW55O1xuICBASW5wdXQoKSBsYWJlbFZhbHVlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRva2VuOiBzdHJpbmc7IC8vIFZEIDE5SkFOMjQgLSBnZXR0aW5nIHRva2VuIGFzIGlucHV0XG4gIEBJbnB1dCgpIGlzRWRpdDogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGhhbmRsZURyb3BEb3duOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUXVlc3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IC8vIFZEIDE5SnVsMDEgLSBnZXQgdXBkYXRlZCBxdWVzdGlvblxuICBAT3V0cHV0KCkgc2luZ2xlRmllbGRDaGFuZ2VFbWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoKSBkcm9wRG93bkRhdGE6IGFueTtcbiAgQElucHV0KCkgZGF0YUJpbmQ6IGFueTtcbiAgQElucHV0KCkgYWxsSWNvbnM6IGFueVtdID0gW107IC8vTVNNMTBKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudCBpbnB1dFxuICBASW5wdXQoKSB0aGVtZUNvbG9yOiBzdHJpbmc7IC8vTVNNMTBKVUwyNSBpY29uIHNlbGVjdG9yIGNvbXBvbmVudCBpbnB1dFxuICBASW5wdXQoKSBjZG5JY29uVVJMOiBzdHJpbmcgPSAnJzsgLy9NU00xMEpVTDI1IGljb24gc2VsZWN0b3IgY29tcG9uZW50IGlucHV0XG4gIC8vQFZpZXdDaGlsZChDb21wb25lbnRob3N0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljSG9zdDogQ29tcG9uZW50aG9zdERpcmVjdGl2ZTtcbiAgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdO1xuICBzZWxlY3RlZEZpbGVEYXRhOiBhbnlbXSA9IFtdO1xuICBsb2FkQ29tcG9uZW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvLyBIQSAyOERFQzIzIEFkZGVkIHN0eWxpbmcgYW5kIGxvZ2ljcyB0byBsb2FkIHRoZSBib29rIHR5cGUgcXVlc3Rpb25zIFxuICBxYlJlZjogUXVlc3Rpb25Cb29rO1xuICAvLyAgSEEgMTlERUMyMyBEZWNsYXJhdGlvbiBmb3IgU2FsZXNmb3JjZSBTdHlsaW5nXG4gIHN0eWxlOiBhbnk7XG4gIGxhbmdEaXJlY3Rpb24gPSAnbHRyJztcbiAgYm9va1N0eWxlOiBhbnk7XG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBpc0ltYWdlRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZEltYWdlRWxlbWVudDogYW55O1xuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge1xuICAgIHRyYW5zbGF0ZVVuaXQ6ICdweCcsXG4gICAgc2NhbGU6IDEsXG4gICAgcm90YXRlOiAwLFxuICAgIGZsaXBIOiBmYWxzZSxcbiAgICBmbGlwVjogZmFsc2UsXG4gICAgdHJhbnNsYXRlSDogMCxcbiAgICB0cmFuc2xhdGVWOiAwXG4gIH07XG4gIGNhbnZhc1JvdGF0aW9uID0gMDtcbiAgY3JvcHBlcj86IENyb3BwZXJQb3NpdGlvbjtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBjcm9wcGVyTWF4SGVpZ2h0ID0gMDtcbiAgY3JvcHBlck1heFdpZHRoID0gMDtcbiAgY3JvcHBlck1pbkhlaWdodCA9IDA7XG4gIGNyb3BwZXJNaW5XaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNXaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNIZWlnaHQgPSAwO1xuICBhc3BlY3RSYXRpbyA9IDQgLyAzO1xuICByb3VuZENyb3BwZXIgPSBmYWxzZTtcbiAgaW1hZ2VDaGFuZ2VkRXZlbnQ6IEV2ZW50IHwgbnVsbCA9IG51bGw7XG4gIGFsaWduSW1hZ2UgPSAnY2VudGVyJyBhcyBjb25zdDtcbiAgaXNJbWFnZUhvdmVyID0gZmFsc2U7XG5cbiAgLy8gUlMgMTdKQU4yMDI1XG4gIC8vRm9ybWF0cyBhbmQgcmV0dXJucyBmaWxlIHVwbG9hZCByZXF1aXJlbWVudHMgZnJvbSBhIEpTT04gc3RyaW5nXG4gIGdldEZpbGVSZXF1aXJlbWVudHMoZmllbGRzTWV0YTogYW55KTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YURhdGEgPSB0eXBlb2YgZmllbGRzTWV0YSA9PT0gJ29iamVjdCcgID8gIGZpZWxkc01ldGEgOiBKU09OLnBhcnNlKGZpZWxkc01ldGEpIDtcbiAgICAgIGNvbnN0IGZpbGVDb25maWcgPSBtZXRhRGF0YVswXTtcblxuICAgICAgaWYgKCFmaWxlQ29uZmlnKSByZXR1cm4gJyc7XG5cbiAgICAgIGNvbnN0IHJlcXVpcmVtZW50cyA9IFtdO1xuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5hbGxvd2VkVHlwZXM/Lmxlbmd0aCkge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgQWNjZXB0ZWQgZm9ybWF0czogJHtmaWxlQ29uZmlnLmFsbG93ZWRUeXBlcy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUNvbmZpZy5tYXhGaWxlU2l6ZSkge1xuICAgICAgICByZXF1aXJlbWVudHMucHVzaChgTWF4aW11bSBzaXplIHBlciBmaWxlOiAke2ZpbGVDb25maWcubWF4RmlsZVNpemUgLyAxMDQ4NTc2fU1CYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlQ29uZmlnLm1heEZpbGVzKSB7XG4gICAgICAgIHJlcXVpcmVtZW50cy5wdXNoKGBNYXhpbXVtIG51bWJlciBvZiBmaWxlczogJHtmaWxlQ29uZmlnLm1heEZpbGVzfWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVxdWlyZW1lbnRzLm1hcChyZXEgPT4gcmVxLnRyaW0oKSkuam9pbignXFxuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgZmllbGRzTWV0YTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG4gIEBPdXRwdXQoKSBoYWRsZURyb3BEb3duRGVwZW5kZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gIEBPdXRwdXQoKSBoYW5kbGVDYWxlbmRhckRhdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlQ2FsZW5kYXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBib29rUXVlc3Rpb25zTWFwOiBhbnkgPSBuZXcgTWFwKCk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBWRCAxM1NlcDI0IGNoYW5nZXNcbiAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XG4gICAgLy8gVkQgc2VwMTMyNCBjaGFuZ2VzIC0gcHJvY2VzcyBkYXRhIHdoZW4gZGF0YWJpbmQgdmFsdWUgY2hhbmdlXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY3VzdG9tQ2hhbmdlJC5zdWJzY3JpYmUoXG4gICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgaWYgKGNoYW5nZVZhbHVlID09ICdkYXRhQmluZCcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIFNLUzIwTUFSMjUgRW5zdXJlIHRoZSBjaGlsZCBjb21wb25lbnQgaXMgYXZhaWxhYmxlIGJlZm9yZSBjYWxsaW5nIHRoZSBtZXRob2RcbiAgICAgLy8gQVAtMjZNQVIyNSBFbnN1cmUgcXVlcy5zdWJUZXh0IGlzIGFsd2F5cyBhbiBvYmplY3QgYnkgcGFyc2luZyBpdCBpZiBpdCdzIGEgc3RyaW5nXG4gICAgLy8gIEFQLTI4TUFSMjUgQWRkIEJvb2xlYW5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2gocXVlcyA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUXVlcyhxdWVzKTtcbiAgICAgICAgbGV0IGlucHV0OiBhbnk7XG4gICAgICAgIGlmIChxdWVzLnR5cGUgPT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT0gJ1JhZGlvJyB8fCBxdWVzLnR5cGUgPT0gJ0xvY2F0aW9uJykge1xuICAgICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgICBpbnB1dFsndmFsdWVPYmonXSA9IHF1ZXMuaW5wdXQgIHx8IHF1ZXMuZGVmYXVsdFZhbHVlIHx8IG51bGxcbiAgICAgICAgICBpbnB1dFsncmVmZXJlbmNlRmllbGQnXSA9IHF1ZXMucmVmZXJlbmNlRmllbGQgfHwgbnVsbFxuICAgICAgICAgIGlucHV0Wydmcm9tUXVlc3Rpb25JZCddID0gcXVlcy5pZCB8fCBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAocXVlcy50eXBlID09ICdEYXRlJyB8fCBxdWVzLnR5cGUgPT0gJ0RhdGVUaW1lJykge1xuICAgICAgICAgIGlucHV0ID0ge31cbiAgICAgICAgICBpbnB1dCA9IHF1ZXMuaW5wdXQgfHwgcXVlcy5kZWZhdWx0VmFsdWUgfHwgbnVsbFxuICAgICAgICB9IFxuICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0ltYWdlJykge1xuICAgICAgICAgIGlucHV0ID0gcXVlcy5vcmdJbWFnZURhdGFcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nKXtcbiAgICAgICAgICBpbnB1dCA9IHR5cGVvZiBxdWVzLmlucHV0ICE9PSAndW5kZWZpbmVkJyA/IHF1ZXMuaW5wdXQgPT09IHRydWUgfHwgcXVlcy5pbnB1dCA9PT0gJ3RydWUnIDogdHlwZW9mIHF1ZXMuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJyA/IHF1ZXMuZGVmYXVsdFZhbHVlID09PSB0cnVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlID09PSAndHJ1ZScgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpbnB1dCA9IHF1ZXMuaW5wdXQgfHwgcXVlcy5kZWZhdWx0VmFsdWUgfHwgbnVsbFxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hpbGRFdmVudENhcHR1cmUoaW5wdXQsIHF1ZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgaGFuZGxlUXVlcyhxdWVzOiBhbnkpIHtcbiAgICAvLyBIQSAxOS1KQU4tMjQgSWYgY29uZGl0aW9uIGlzIGZvciBiaW5kLWluLCBjb3JyZWN0aW9uXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRpbmcgY29uZGl0aW9uIHRvIGF2b2lkIHVuZGVmaW5lZCBlcnJvclxuICAgIGlmICh0aGlzLmRhdGFCaW5kICYmIE9iamVjdC5rZXlzKHRoaXMuZGF0YUJpbmQpLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmZsYXR0ZW5PYmplY3QodGhpcy5kYXRhQmluZClcbiAgICAgIGZvciAobGV0IFtrZXksIHZhbF0gb2YgcmVzdWx0KSB7XG4gICAgICAgIGxldCB2YWx1ZTogYW55ID0gdmFsO1xuICAgICAgICBpZiAocXVlcy5yZWZlcmVuY2VGaWVsZCA9PT0ga2V5KSB7XG4gICAgICAgICAgaWYgKHF1ZXMudHlwZSA9PT0gJ0Ryb3Bkb3duJyB8fCBxdWVzLnR5cGUgPT09ICdSYWRpbycpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuc3FPcHRpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAvLyAgIGlmIChlbGVtZW50WydyZWZlcmVuY2VGaWVsZCddID09PSBrZXkpIHtcbiAgICAgICAgICAgIC8vICAgICBlbGVtZW50WydpbnB1dCddID0gcXVlcy5pbnB1dCA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgLy8gICAgIGVsZW1lbnRbJ3NlbGVjdGVkVmFsdWUnXSA9IHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMjRKQU4yNCBUbyBiaW5kLWluIERhdGUgYW5kIERhdGVUaW1lXG4gICAgICAgICAgZWxzZSBpZiAocXVlcy50eXBlID09PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSBuZXcgRGF0ZSh2YWx1ZT8udG9TdHJpbmcoKSkgIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIQSAxMkZFQjI0IFRvIGJpbmQtaW4gTG9jYXRpb24gVHlwZVxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJykge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHZhbHVlIHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVbJ2FkZHJlc3MnXSA/IHZhbHVlWydhZGRyZXNzJ10gOiB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzIGZvciBkYXRhIGJpbmRJblxuICAgICAgICAgIGVsc2UgaWYgKHF1ZXMudHlwZSA9PT0gJ0NhbGVuZGFyJykge1xuICAgICAgICAgICAgbGV0IGVudHJpZXMgPSB0eXBlb2YgcXVlc1snZmllbGRzTWV0YSddID09PSAnb2JqZWN0JyA/IHF1ZXNbJ2ZpZWxkc01ldGEnXSA6IEpTT04ucGFyc2UocXVlc1snZmllbGRzTWV0YSddKTtcbiAgICAgICAgICAgIGlmIChlbnRyaWVzKSB7XG4gICAgICAgICAgICAgIGxldCByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGVudHJpZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBxUmVmZXJlbmNlID0gSlNPTi5wYXJzZShlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlUXVlc3Rpb25zLnB1c2gocVJlZmVyZW5jZT8ucXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VRdWVzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlPy5mb3JFYWNoKGNhbGVuZGFyQXJyYXkgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjYWxlbmRhckFycmF5LmRhdGUpO1xuICAgICAgICAgICAgICAgICAgY2FsZW5kYXJBcnJheS5lbnRyaWVzLmZvckVhY2goaW5wdXRFbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhpbnB1dEVudHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVF1ZXN0aW9ucy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC5yZWZlcmVuY2VGaWVsZCA9PSBrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAnRGF0ZScgfHwgZmllbGQudHlwZSA9PSAnRGF0ZVRpbWUnIHx8IGZpZWxkLnR5cGUgPT0gJ1RpbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSBuZXcgRGF0ZSh2Py50b1N0cmluZygpKSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBpZiAoZmllbGQudHlwZSA9PT0gJ0Ryb3Bkb3duJyB8fCBmaWVsZC50eXBlID09PSAnUmFkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuc2VsZWN0ZWRWYWx1ZSA9IHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuaW5wdXQgPSB2ICB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5pbnB1dCA9IHYgfHwgcXVlcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmFkZEV2ZW50KGRhdGUsIHJlZmVyZW5jZVF1ZXN0aW9ucyk7Ly9TS1MgMjdTRVAyNCBlYWNoIGV2ZW50IGFkZGVkIHRvIGFsbEV2ZW50cyBhcnJheVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuYWRkRXZlbnQoZGF0ZSxyZWZlcmVuY2VRdWVzdGlvbnMpOyAvL3RoaXMgaXMgb25seSBsYXN0IGV2ZW50IGFkZGVkIHRvIGFsbEV2ZW50cyBhcnJheVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIDIzIE9jdDI0IC0gZmlsZSB0eXBlIGNoYW5nZXNcbiAgICAgICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdGaWxlJykge1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IFtdO1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSB2YWx1ZSB8fCBxdWVzLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IHt9O1xuICAgICAgcXVlc3Rpb25bJ2lkJ10gPSBxdWVzLmlkO1xuICAgICAgcXVlc3Rpb25bJ2lucHV0J10gPSBxdWVzLmlucHV0IHx8IHF1ZXMuZGVmYXVsdFZhbHVlO1xuICAgICAgLy8gSEEgMTJGRUIyNCBUbyBiaW5kLW91dCBMb2NhdGlvbiBUeXBlXG4gICAgICBpZiAocXVlcy50eXBlID09PSAnTG9jYXRpb24nKSB7XG4gICAgICAgIHF1ZXN0aW9uWydpbnB1dCddID0gcXVlcy5pbnB1dCA/IHF1ZXMuaW5wdXQgOiBxdWVzLnNlbGVjdGVkVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRmlsZScpIHtcbiAgICAgICAgLy8gVkQgMjMgT2N0MjQgLSBmaWxlIHR5cGUgY2hhbmdlc1xuICAgICAgICBxdWVzdGlvblsnaW5wdXQnXSA9IHF1ZXMuaW5wdXQgPyBxdWVzLmlucHV0IDogcXVlcy5kZWZhdWx0VmFsdWUgfHwgW107XG4gICAgICB9XG4gICAgICBxdWVzdGlvblsndHlwZSddID0gcXVlcy50eXBlO1xuICAgICAgcXVlc3Rpb25bJ3F1ZXN0aW9uTnVtYmVyJ10gPSBxdWVzLnF1ZXN0aW9uTnVtYmVyO1xuICAgICAgcXVlc3Rpb25bJ3JlZmVyZW5jZUZpZWxkJ10gPSBxdWVzPy5yZWZlcmVuY2VGaWVsZDtcbiAgICAgIHF1ZXN0aW9uWydzZWxlY3RlZFZhbHVlJ10gPSBxdWVzPy5zZWxlY3RlZFZhbHVlOyAgLy8gTVIgMzFKQU4yNCBOZWVkIHRvIHBhc3MgdGhlIHNlbGVjdGVkIHZhbHVlIHRvb1xuICAgIH1cbiAgfVxuIC8vIFNLUzIwTUFSMjUgZmxhdHRlbmluZyBuZXN0ZWQgb2JqZWN0cywgbWFwcGluZyB2YWx1ZXMgdXNpbmcgIHJlZmVyZW5jZUZpZWxkXG4gZmxhdHRlbk9iamVjdChvYmo6IGFueSwgcGFyZW50S2V5ID0gJycsIGluY2x1ZGVPYmplY3RzID0gdHJ1ZSkge1xuICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gIGZvciAobGV0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgIGxldCBuZXdLZXkgPSBwYXJlbnRLZXkgPyBgJHtwYXJlbnRLZXl9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXN1bHQucHVzaChbbmV3S2V5LCB2YWxdKTsgLy8gSW5jbHVkZSBmdWxsIGFycmF5XG5cbiAgICAgIHZhbC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gIT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZsYXR0ZW5PYmplY3QoaXRlbSwgYCR7bmV3S2V5fVske2luZGV4fV1gLCBmYWxzZSkpOyAvLyBGbGF0dGVuIG9iamVjdHMgaW4gYXJyYXlzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goW2Ake25ld0tleX1bJHtpbmRleH1dYCwgaXRlbV0pOyAvLyBTdG9yZSBwcmltaXRpdmUgdmFsdWVzIGluIGFycmF5c1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGluY2x1ZGVPYmplY3RzKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFtuZXdLZXksIHZhbF0pOyAvLyBJbmNsdWRlIGZ1bGwgb2JqZWN0XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCguLi50aGlzLmZsYXR0ZW5PYmplY3QodmFsLCBuZXdLZXksIGZhbHNlKSk7IC8vIEZsYXR0ZW4gbmVzdGVkIG9iamVjdHNcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goW25ld0tleSwgdmFsXSk7IC8vIFN0b3JlIGtleS12YWx1ZSBwYWlyc1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4gIC8vIFZEIDEzU2VwMjQgY2hhbmdlc1xuICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICBwcm9jZXNzRGF0YSgpIHtcbiAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gQm9vayBTdHlsaW5nKFNsYWVzZm9yY2UpXG4gICAgLy8gSEEgMDlGRUIyNCBBZGRlZCB0ZXJuYXJ5XG4gICAgaWYgKHRoaXMucWJJdGVtPy5zdHlsZSkge1xuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlID0gdHlwZW9mIHRoaXMucWJJdGVtLnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycgKyB0aGlzLnFiSXRlbT8uc3R5bGUpIDogdGhpcy5xYkl0ZW0uc3R5bGU7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbENsYXNzID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsQ2xhc3MgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5sYWJlbFZhbHVlU3R5bGUgPSB0aGlzLnFiSXRlbS5zdHlsZT8ubGFiZWxWYWx1ZVN0eWxlID8gdGhpcy5xYkl0ZW0uc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dENsYXNzID0gdGhpcy5xYkl0ZW0uc3R5bGU/LmlucHV0Q2xhc3MgPyB0aGlzLnFiSXRlbS5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICB0aGlzLnFiSXRlbS5zdHlsZS5pbnB1dFN0eWxlID0gdGhpcy5xYkl0ZW0uc3R5bGUuaW5wdXRTdHlsZSA/IHRoaXMucWJJdGVtLnN0eWxlPy5pbnB1dFN0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlPy5ib29rU3R5bGUgPyB0aGlzLnFiSXRlbS5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgIHRoaXMucWJJdGVtLnN0eWxlLnNob3dMYWJlbCA9IHRoaXMucWJJdGVtLnN0eWxlPy5zaG93TGFiZWwgPyB0aGlzLnFiSXRlbS5zdHlsZT8uc2hvd0xhYmVsIDogdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy5xYkl0ZW0pIHtcbiAgICAgICAgdGhpcy5xYkl0ZW0uc3R5bGUgPSB7XG4gICAgICAgICAgXCJsYWJlbENsYXNzXCI6IFwiXCIsXG4gICAgICAgICAgXCJsYWJlbFN0eWxlXCI6IFwiXCIsXG4gICAgICAgICAgXCJsYWJlbFZhbHVlU3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcImlucHV0Q2xhc3NcIjogXCJcIixcbiAgICAgICAgICBcImlucHV0U3R5bGVcIjogXCJcIixcbiAgICAgICAgICBcImJvb2tTdHlsZVwiOiBcIlwiLFxuICAgICAgICAgIFwic2hvd0xhYmVsXCI6IHRydWUsXG4gICAgICAgICAgXCJkaXJlY3Rpb25cIjogXCJsdHJcIixcbiAgICAgICAgICBcInF1ZXN0aW9uU3R5bGVcIjogXCJcIlxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnFiSXRlbS5zdHlsZS5xdWVzdGlvblN0eWxlID0gdGhpcy5xYkl0ZW0/LnN0eWxlPy5xdWVzdGlvblN0eWxlID8gdGhpcy5xYkl0ZW0/LnN0eWxlLnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgIHRoaXMubGFuZ0RpcmVjdGlvbiA9IHRoaXMucWJJdGVtLnN0eWxlLmRpcmVjdGlvbiA9IHRoaXMucWJJdGVtPy5zdHlsZT8uZGlyZWN0aW9uID8gdGhpcy5xYkl0ZW0/LnN0eWxlPy5kaXJlY3Rpb24gOiAnbHRyJztcbiAgICB0aGlzLmJvb2tTdHlsZSA9IHRoaXMucWJJdGVtPy5zdHlsZT8uYm9va1N0eWxlO1xuICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB2YXIgaHRtbEVsZW1lbnQgPSBlbGVtZW50Py5xdWVzdGlvblRleHQ7XG4gICAgICB2YXIgdGV4dE9ubHkgPSBodG1sRWxlbWVudD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJylcbiAgICAgIGVsZW1lbnQucXVlc3Rpb25UZXh0ID0gdGV4dE9ubHk7XG4gICAgICAvLyAgSEEgMTlERUMyMyBMb2dpYyBmb3IgUXVlc3Rpb24gU3R5bGluZyhTbGFlc2ZvcmNlKVxuICAgICAgLy8gSEEgMjhERUMyMyBBZGRlZCBzdHlsaW5nIGFuZCBsb2dpY3MgdG8gbG9hZCB0aGUgYm9vayB0eXBlIHF1ZXN0aW9ucyBcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdCb29rJykge1xuICAgICAgICBpZiAoZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSkge1xuICAgICAgICAgIHZhciBxYiA9IHR5cGVvZiBlbGVtZW50WydxYlJlZmVyZW5jZVF1ZXN0aW9ucyddID09PSAnb2JqZWN0JyAgPyAgZWxlbWVudFsncWJSZWZlcmVuY2VRdWVzdGlvbnMnXSA6IEpTT04ucGFyc2UoIGVsZW1lbnRbJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10pIDtcbiAgICAgICAgICBpZiAocWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlKSB7XG4gICAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUgPSB0eXBlb2YgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoJycgKyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUpIDogcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZSA9IHRoaXMucWJJdGVtLnN0eWxlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEJvb2sgdHlwZSBxdWVzdGlvbiBzdHlsaW5nXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmxhYmVsQ2xhc3MgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsQ2xhc3MgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmxhYmVsQ2xhc3MgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5sYWJlbFN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbFN0eWxlID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbFN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxWYWx1ZVN0eWxlID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuaW5wdXRDbGFzcyA9IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRDbGFzcyA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLmlucHV0U3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0U3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZS5ib29rU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LmJvb2tTdHlsZSA/IHFiWydxdWVzdGlvbmJvb2snXS5zdHlsZT8uYm9va1N0eWxlIDogXCJcIjtcbiAgICAgICAgICBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuc2hvd0xhYmVsID0gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5zaG93TGFiZWwgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnF1ZXN0aW9uU3R5bGUgPyBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuICAgICAgICAgIHFiWydsYW5nRGlyZWN0aW9uJ10gPSBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGUuZGlyZWN0aW9uID8gcWJbJ3F1ZXN0aW9uYm9vayddLnN0eWxlPy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG5cbiAgICAgICAgICAvLyBMb29wIGZvciBlYWNoIHF1ZXN0aW9uIGluIHRoZSBib29rXG4gICAgICAgICAgcWJbJ3F1ZXN0aW9uYm9vayddPy5zdWJRdWVzdGlvbnM/LmZvckVhY2gocXVlc3Rpb25Gcm9tQm9vayA9PiB7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlID0gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGUgOiBxYlsncXVlc3Rpb25ib29rJ10uc3R5bGU7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsQ2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5sYWJlbFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0Q2xhc3MgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dENsYXNzID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRDbGFzcyA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmlucHV0U3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5pbnB1dFN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8uaW5wdXRTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLmJvb2tTdHlsZSA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmJvb2tTdHlsZSA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LmJvb2tTdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnNob3dMYWJlbCA9IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnNob3dMYWJlbCA/IHF1ZXN0aW9uRnJvbUJvb2suc3R5bGU/LnNob3dMYWJlbCA6IHRydWU7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rLnN0eWxlLnF1ZXN0aW9uU3R5bGUgPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5xdWVzdGlvblN0eWxlID8gcXVlc3Rpb25Gcm9tQm9vay5zdHlsZT8ucXVlc3Rpb25TdHlsZSA6IFwiXCI7XG4gICAgICAgICAgICBxdWVzdGlvbkZyb21Cb29rWydsYW5nRGlyZWN0aW9uJ10gPSBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5kaXJlY3Rpb24gPyBxdWVzdGlvbkZyb21Cb29rLnN0eWxlPy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZWxlbWVudFsncWJJdGVtJ10gPSBxYlsncXVlc3Rpb25ib29rJ107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuc3R5bGUgPSBlbGVtZW50LnN0eWxlID8gdHlwZW9mIGVsZW1lbnQuc3R5bGUgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSgnJyArIGVsZW1lbnQ/LnN0eWxlKSA6IGVsZW1lbnQ/LnN0eWxlIDogdGhpcy5xYkl0ZW0/LnN0eWxlO1xuXG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsQ2xhc3MgPSBlbGVtZW50LnN0eWxlPy5sYWJlbENsYXNzID8gZWxlbWVudC5zdHlsZT8ubGFiZWxDbGFzcyA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5sYWJlbFN0eWxlID8gZWxlbWVudC5zdHlsZT8ubGFiZWxTdHlsZSA6IFwiXCI7XG4gICAgICBlbGVtZW50LnN0eWxlLmxhYmVsVmFsdWVTdHlsZSA9IGVsZW1lbnQuc3R5bGU/LmxhYmVsVmFsdWVTdHlsZSA/IGVsZW1lbnQuc3R5bGUubGFiZWxWYWx1ZVN0eWxlIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuaW5wdXRDbGFzcyA9IGVsZW1lbnQuc3R5bGU/LmlucHV0Q2xhc3MgPyBlbGVtZW50LnN0eWxlPy5pbnB1dENsYXNzIDogXCJcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuaW5wdXRTdHlsZSA9IGVsZW1lbnQuc3R5bGUuaW5wdXRTdHlsZSA/IGVsZW1lbnQuc3R5bGU/LmlucHV0U3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5ib29rU3R5bGUgPSBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgPyBlbGVtZW50LnN0eWxlPy5ib29rU3R5bGUgOiBcIlwiO1xuICAgICAgZWxlbWVudC5zdHlsZS5zaG93TGFiZWwgPSBlbGVtZW50LnN0eWxlPy5zaG93TGFiZWwgPyBlbGVtZW50LnN0eWxlPy5zaG93TGFiZWwgOiB0cnVlO1xuICAgICAgZWxlbWVudC5zdHlsZS5xdWVzdGlvblN0eWxlID0gZWxlbWVudC5zdHlsZT8ucXVlc3Rpb25TdHlsZSA/IGVsZW1lbnQuc3R5bGU/LnF1ZXN0aW9uU3R5bGUgOiBcIlwiO1xuXG4gICAgICBlbGVtZW50WydsYW5nRGlyZWN0aW9uJ10gPSBlbGVtZW50LnN0eWxlPy5kaXJlY3Rpb24gPyBlbGVtZW50LnN0eWxlPy5kaXJlY3Rpb24gOiB0aGlzLmxhbmdEaXJlY3Rpb247XG5cblxuICAgICAgLy9WRCAwMkF1ZzI0IGRlcGVuZGVudCBmaWVsZCBzaG93L2hpZGUgY2hhbmdlc1xuICAgICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgICAgICAvLyBBUC0yNk1BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgICAgIGlmIChlbGVtZW50LnJlZmVyZW5jZUZpZWxkKSB7XG4gICAgICAgIGVsZW1lbnQuZGVwZW5kZW50UmVmID0gZWxlbWVudC5yZWZlcmVuY2VGaWVsZDtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50LnN1YlRleHQpIHtcbiAgICAgICAgZWxlbWVudFsnc3ViVGV4dCddID0gdHlwZW9mIGVsZW1lbnQ/LnN1YlRleHQgPT09ICdvYmplY3QnID8gZWxlbWVudD8uc3ViVGV4dCA6IEpTT04ucGFyc2UoZWxlbWVudFsnc3ViVGV4dCddKTtcbiAgICAgICAgbGV0IGRlcGVuZGVuY3lPYmo6IERlcGVuZGVuY3lNZXRhID0gZWxlbWVudC5zdWJUZXh0O1xuICAgICAgICBpZiAoZGVwZW5kZW5jeU9iai5pc0RlcGVuZGVudEZpZWxkKSB7XG4gICAgICAgICAgZWxlbWVudC5pc0hpZGRlbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VTZXJ2aWNlLmNoYW5nZUFubm91bmNlZCQuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2VWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gVkQgMjBBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUgIT0gdW5kZWZpbmVkICYmIGRlcGVuZGVuY3lPYmouaXNEZXBlbmRlbnRGaWVsZCkge1xuICAgICAgICAgICAgICBpZiAoY2hhbmdlVmFsdWUudmFsdWVPYmogIT0gdW5kZWZpbmVkICYmIGNoYW5nZVZhbHVlLmZyb21RdWVzdGlvbklkID09IGRlcGVuZGVuY3lPYmouc291cmNlUXVlc3Rpb25JZCkge1xuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQuaXNIaWRkZW5GaWVsZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY3lPYmouZGVwZW5kZW50VmFsdWUgPT0gY2hhbmdlVmFsdWUudmFsdWVPYmopIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSAnJztcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRlcGVuZGVudFJlZiA9PSBjaGFuZ2VWYWx1ZS5yZWZlcmVuY2VGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlZmVyZW5jZUZpZWxkID0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQ7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5pbnB1dCA9ICcnO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlRGVwZW5kZW50RWxlbWVudHMoZWxlbWVudC5pZCk7XG4gICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBkZXBlbmRlbnQgc2VsZWN0aW9uIHJlbW92ZSB0aGUgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kZXBlbmRlbnRSZWYgPT0gY2hhbmdlVmFsdWUucmVmZXJlbmNlRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZWZlcmVuY2VGaWVsZCA9ICcnO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUoZWxlbWVudCk7XG4gICAgICB9XG4gICAgICAvLyBzdW5kYXkgY29tbWVudFxuICAgICAgLy8gaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0NhbGVuZGFyJykge1xuICAgICAgLy8gICB0aGlzLm9wZW5DYWxlbmRhckNvbXBvbmVudChlbGVtZW50KTtcbiAgICAgIC8vIH1cbiAgICB9KTtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25zKTtcbiAgICB0aGlzLnByb2Nlc3NUcmFuc2xhdGVkUXVlc3Rpb25zKCk7XG4gIH1cbiAgLy8gVkQgMDdBdWcyNCAtIGlzRGVwZW5kZW50RmllbGQgY2hhbmdlXG4gICAvLyBBUC0yNk1BUjI1IEVuc3VyZSBxdWVzLnN1YlRleHQgaXMgYWx3YXlzIGFuIG9iamVjdCBieSBwYXJzaW5nIGl0IGlmIGl0J3MgYSBzdHJpbmdcbiAgaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsZW1lbnRJZCkge1xuICAgIGxldCBlbGVtZW50c1RvSGlkZSA9IHRoaXMucXVlc3Rpb25zLmZpbHRlcihlbCA9PiB7XG4gICAgICBpZiAoZWwuc3ViVGV4dCkge1xuICAgICAgICBlbFsnc3ViVGV4dCddID0gdHlwZW9mIGVsPy5zdWJUZXh0ID09PSAnb2JqZWN0JyA/IGVsPy5zdWJUZXh0IDogSlNPTi5wYXJzZShlbFsnc3ViVGV4dCddKTtcbiAgICAgICAgbGV0IGRlcE9iaiA9IGVsLnN1YlRleHQ7XG4gICAgICAgIHJldHVybiBkZXBPYmouc291cmNlUXVlc3Rpb25JZCA9PSBlbGVtZW50SWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBlbGVtZW50c1RvSGlkZS5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGVsLmlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgIGVsLmlucHV0ID0gJyc7XG4gICAgICBlbC5zZWxlY3RlZFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS51cGRhdGUoZWwpO1xuICAgICAgLy8gUmVjdXJzaXZlbHkgaGlkZSBlbGVtZW50cyBkZXBlbmRlbnQgb24gdGhpcyBvbmVcbiAgICAgIHRoaXMuaGlkZURlcGVuZGVudEVsZW1lbnRzKGVsLmlkKTtcbiAgICB9KTtcbiAgfVxuLy9BUC0xOU1BWTI1IEVuc3VyZSBzcUxpc3QgaXMgYWx3YXlzIGFuIGFycmF5IGJ5IGRlZmF1bHRpbmcgdG8gW11cbiAgY2xlYXJTUUVycm9yKHF1ZXNJZCkge1xuICAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucz8uZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlkID09IHF1ZXNJZCkgfHwgW107XG4gICAgZm9yICh2YXIgc3Egb2Ygc3FMaXN0KSB7XG4gICAgICBzcS5lcnJvciA9IG51bGw7XG4gICAgfVxuICB9XG4gIC8vIFZEIDExSnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gIHByb2Nlc3NUcmFuc2xhdGVkUXVlc3Rpb25zKCkge1xuICAgIGlmICh0aGlzLnRyYW5zbGF0ZWRRdWVzdGlvbnMgJiYgdGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goKG9yZ1F1ZXN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVkUXVlc3Rpb25zLmZvckVhY2goKHRyYW5zUXVlc3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChvcmdRdWVzdGlvbi51bmlxdWVJZGVudGlmaWVyID09IHRyYW5zUXVlc3Rpb24uaWRlbnRpZmllcikge1xuICAgICAgICAgICAgb3JnUXVlc3Rpb24ucXVlc3Rpb25UZXh0ID0gdHJhbnNRdWVzdGlvbi5sYWJlbDtcbiAgICAgICAgICAgIG9yZ1F1ZXN0aW9uLnF1ZXN0aW9uID0gdHJhbnNRdWVzdGlvbi5wbGFjZUhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0U3ViUXVlc3Rpb25zKHJlY29yZHMpIHtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHJlY29yZHMpO1xuICB9XG5cbiAgLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuICBjaGlsZEV2ZW50Q2FwdHVyZShldmVudCwgcXVlcz86IGFueSkge1xuICAgIGxldCBkcm9wZG93bkRhdGEgPSB7fTtcbiAgICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgIGlmIChxdWVzKSB7XG4gICAgICBpZiAocXVlcy50eXBlID09ICdEcm9wZG93bicgfHwgcXVlcy50eXBlID09ICdSYWRpbycpIHtcbiAgICAgICAgLy8gSEEgMTlKQU4yNCBDb3JyZWN0aW9uIG9mIGRyb3Bkb3duIHZhbHVlc1xuICAgICAgICBxdWVzLnNlbGVjdGVkT2JqID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iaiA6IG51bGw7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC5zZWxlY3RlZE9iaiA/IGV2ZW50LnNlbGVjdGVkT2JqIDogZXZlbnQudmFsdWVPYmo7XG4gICAgICAgIHF1ZXMuc2VsZWN0ZWRWYWx1ZSA9IGV2ZW50LnZhbHVlT2JqID8gZXZlbnQudmFsdWVPYmogOiBudWxsO1xuICAgICAgICAvLyBlbWl0IHRoZSBkcm9wZG93biBkYXRhIHRvIHBhcmVudFxuICAgICAgICBkcm9wZG93bkRhdGFbJ2V2ZW50J10gPSBldmVudC52YWx1ZU9iajtcbiAgICAgICAgZHJvcGRvd25EYXRhWydxdWVzJ10gPSBxdWVzO1xuICAgICAgICBpZiAoZHJvcGRvd25EYXRhWydldmVudCddKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVEcm9wRG93bi5lbWl0KGRyb3Bkb3duRGF0YSk7XG4gICAgICAgIH0gIC8vIFZEIDIxREVDMjMgLSBkZXBlbmRlbnQgZmllbGQgY2hhbmdlXG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnTG9jYXRpb24nKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudC52YWx1ZU9iajtcbiAgICAgICAgcXVlcy5zZWxlY3RlZFZhbHVlID0gZXZlbnQudmFsdWVPYmo/IGV2ZW50LnZhbHVlT2JqLmFkZHJlc3MgOiBudWxsO1xuICAgICAgfSBlbHNlIGlmIChxdWVzLnR5cGUgPT0gJ0ZpbGUnKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLnNlbGVjdGVkRmlsZURhdGEgPSBldmVudDtcblxuICAgICAgICAvLyBIYW5kbGUgZmlsZSB2YWxpZGF0aW9uIGVycm9yc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkgJiYgZXZlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gTm8gZmlsZXMgdXBsb2FkZWQgd2hlbiByZXF1aXJlZFxuICAgICAgICAgIHF1ZXMuZXJyb3IgPSBxdWVzLmVycm9yTWVzc2FnZSA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShldmVudCkgJiYgZXZlbnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIEZpbGVzIHdlcmUgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkXG4gICAgICAgICAgcXVlcy5lcnJvciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIHZhbGlkYXRpb24gZXJyb3JzIGZyb20gdGhlIGZpbGUgdXBsb2FkIGNvbXBvbmVudFxuICAgICAgICBpZiAoZXZlbnQ/LnZhbGlkYXRpb25FcnJvcnMgJiYgZXZlbnQudmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcXVlcy5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICBxdWVzLmVycm9yLm1lc3NhZ2UgPSBldmVudC52YWxpZGF0aW9uRXJyb3JzWzBdOyAvLyBVc2UgdGhlIGZpcnN0IHZhbGlkYXRpb24gZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnRGF0ZScgfHwgcXVlcy50eXBlID09ICdEYXRlVGltZScpIHsgLy8gSEEgMjRKQU4yNCBDb252ZXJ0aW5nIERhdGUgYW5kIERhdGVUaW1lIHRvIFVUQ1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICBsZXQgZCA9IG5ldyBEYXRlKGV2ZW50KTtcbiAgICAgICAgICBpZiAoIWlzTmFOKGQ/LmdldFRpbWUoKSkpIHsgLy9TS1MyM0FQUjI1IENoZWNrIGZvciB2YWxpZCBkYXRlXG4gICAgICAgICAgICAgIGxldCB1dGNTdHJpbmcgPSBkPy50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgICBxdWVzLmlucHV0ID0gdXRjU3RyaW5nO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHF1ZXMudHlwZSA9PSAnTGlzdCcpIHtcbiAgICAgICAgLy8gVkQgMjBBdWcyNCBoYW5kbGluZyB0aGUgbGlzdCB0eXBlICBoYW5kbGUgbXVsdGlwbGUgb2JqZWN0IHZhbHVlc1xuICAgICAgICBxdWVzLmlucHV0ID0gKGV2ZW50ICYmIHR5cGVvZiBldmVudCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoZXZlbnQpKSA/IHRoaXMuZGF0YVNlcnZpY2UuZ2V0VmFsdWUoZXZlbnQ/LnZhbHVlT2JqLCBldmVudD8uZmllbGQpIDogZXZlbnQ7XG4gICAgICB9Ly9SUyAwNkpBTjI1XG4gICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBldmVudCB8fCBudWxsO1xuICAgICAgfS8vICBBUC0yOE1BUjI1IEFkZCBCb29sZWFuXG4gICAgICBlbHNlIGlmKHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nKXtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50O1xuICAgICAgICBxdWVzLmJvb2xlYW4gPSBldmVudDtcbiAgICAgIH1cbiAgICAgIC8vIEFQLTEwQVBSMjUgTnVtYmVyXG4gICAgICAvLyBBUDE5UEFSMjUgLWlmIGNoYW5nZSBlbHNlIGlzXG4gICAgICBlbHNlIGlmIChxdWVzLnR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBOdW1iZXIoZXZlbnQpOyBcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBxdWVzLmlucHV0ID0gZXZlbnQ7XG4gICAgICB9XG4gICAgICAvL1JTIDA2SkFOMjVcbiAgICAgIC8vIFZhbGlkYXRlIGVycm9yIG1lc3NhZ2UgLSBtb2RpZmllZCB0byBoYW5kbGUgcmljaCB0ZXh0XG4gICAgICBjb25zdCBoYXNFcnJvciA9IHF1ZXMuZXJyb3JNZXNzYWdlICYmIChcbiAgICAgICAgKHF1ZXMudHlwZSA9PT0gJ0ZpbGUnICYmIHF1ZXMuaW5wdXQubGVuZ3RoID09PSAwKSB8fFxuICAgICAgICAocXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyAmJiAoIXF1ZXMuaW5wdXQgfHwgcXVlcy5pbnB1dC50cmltKCkgPT09ICcnKSkgfHxcbiAgICAgICAgKHF1ZXMudHlwZSAhPT0gJ0ZpbGUnICYmIHF1ZXMuVHlwZSAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgIXF1ZXMuaW5wdXQpXG4gICAgICApO1xuICAgICAgcXVlcy5lcnJvciA9IGhhc0Vycm9yID8gbmV3IEVycm9yV3JhcHBlcigpIDogbnVsbDtcbiAgICAgIHF1ZXMuZXJyb3IgPSBoYXNFcnJvciA/IG5ldyBFcnJvcldyYXBwZXIoKSA6IG51bGw7XG4gICAgICAvLyBPbmNlIHRoZSByaWdodCB2YWx1ZSBpcyBzdG9yZWQgaW4gcXVlcy5pbnB1dCBzdG9yZSB0aGUgcXVlcyAod2l0aCBpbnB1dCkgaW4gc3RvcmFnZVNlcnZpY2VcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2UudXBkYXRlKHF1ZXMpO1xuICAgICAgLy8gVkQgMTlKdWwwMSAtIGdldCB1cGRhdGVkIHF1ZXN0aW9uXG4gICAgICB0aGlzLmhhbmRsZVF1ZXN0aW9uLmVtaXQocXVlcyk7XG4gICAgfVxuICAgIGlmKHF1ZXM/LnNpbmdsZUZpZWxkQ2hhbmdlKXtcbiAgICAgIHRoaXMuc2luZ2xlRmllbGRDaGFuZ2VFbWl0LmVtaXQocXVlcyk7XG4gICAgICBxdWVzLnNpbmdsZUZpZWxkQ2hhbmdlID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGRlbGV0ZUZpbGUoZmlsZURhdGE6IGFueSkge1xuICB9XG4gIGdldERyb3BEb3duKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmhhZGxlRHJvcERvd25EZXBlbmRlbnQuZW1pdChldmVudCk7XG4gIH1cbiAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gIGdldEN1cnJlbnRDYWxlbmRhcihldmVudDogYW55KSB7XG4gICAgdGhpcy5oYW5kbGVDYWxlbmRhckRhdGUuZW1pdChldmVudCk7XG4gIH1cblxuICBnZXRDYWxlbmRhckV2ZW50KGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2FsZW5kYXJFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBWRCAwNlNlcDI0IHJlbW92ZSB0aGUgc3BlY2lhbCBjaGFyZWN0ZXJzIGFuZCB0YWdzIFxuICAvLyBmcm9tIHRoZSBxdWVzdGlvblRleHRcbiAgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzdGlvblRleHQ6IHN0cmluZykge1xuICAgIGxldCB1cGRhdGVkVGV4dCA9IHF1ZXN0aW9uVGV4dD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJyk7XG4gICAgcmV0dXJuIHVwZGF0ZWRUZXh0O1xuICB9XG5cbiAgLy8gc3VuZGF5IGNvbW1lbnRcbiAgLy8gb3BlbkNhbGVuZGFyQ29tcG9uZW50KHF1ZXMpIHtcbiAgLy8gICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljSG9zdC52aWV3Q29udGFpbmVyUmVmO1xuICAvLyAgIGlmKHZpZXdDb250YWluZXJSZWYpe1xuICAvLyAgICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAvLyAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoQ3VzdG9tQ2FsZW5kYXJDb21wb25lbnQpO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnF1ZXN0aW9uID0gcXVlcztcbiAgLy8gICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5kYXRlU2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB0aGlzLmdldEN1cnJlbnRDYWxlbmRhcihldmVudCkpO1xuICAvLyAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmV2ZW50U2VsZWN0ZWQuc3Vic2NyaWJlKChldmVudDphbnkpID0+IHRoaXMuZ2V0Q2FsZW5kYXJFdmVudChldmVudCkpXG4gIC8vICAgfVxuICAvLyB9XG5cbiAgaXNDYWxlbmRhck1vZGFsT3BlbiA9IGZhbHNlO1xuICBjYWxlbmRhck1vZGFsVGl0bGU6IGFueTtcbiAgY2FsZW5kYXJNb2RhbFNpemU6IGFueTtcbiAgY2FsZW5kYXJTYXZlQnV0dG9uVmFsdWU6IGFueTtcbiAgcmVmZXJlbmNlUXVlc3Rpb25zID0gW107XG4gIHFiUmVmcmVuY2VCb29rOiBhbnk7XG4gIG1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlcjogYW55O1xuXG4gIG9wZW5DYWxlbmRhck1vZGFsKGV2ZW50KSB7XG4gICAgdGhpcy5pc0NhbGVuZGFyTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB0aGlzLnFiUmVmcmVuY2VCb29rID0gZXZlbnQucWJSZWZyZW5jZUJvb2s7XG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMgPSBldmVudC5yZWZlcmVuY2VRdWVzdGlvbnM7XG4gICAgdGhpcy5jYWxlbmRhck1vZGFsVGl0bGUgPSBldmVudC5tb2RhbFRpdGxlO1xuICAgIHRoaXMuY2FsZW5kYXJNb2RhbFNpemUgPSBldmVudC5tb2RhbFNpemU7XG4gICAgdGhpcy5jYWxlbmRhclNhdmVCdXR0b25WYWx1ZSA9IGV2ZW50LnNhdmVCdXR0b25WYWx1ZTtcbiAgICB0aGlzLm1vZGFsQ2FsZW5kYXJNb2RhbEZvb3RlciA9IGV2ZW50Lm1vZGFsRm9vdGVyO1xuICB9XG5cblxuICBvbkNhbGVuZGFyTW9kYWxTYXZlKCkge1xuICAgIHRoaXMuY2hhbmdlU2VydmljZS5kYXRhQ2hhbmdlcygnY2FsZW5kYXItbW9kYWwtc2F2ZScpO1xuICB9XG5cblxuICBoYW5kbGVRdWVzdGlvbkV2ZW50KGV2ZW50KSB7XG4gIH1cblxuICBjbG9zZUNhbGVuZGFyTW9kYWwoZXZlbnQpIHtcbiAgICB0aGlzLmlzQ2FsZW5kYXJNb2RhbE9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFNLUzI1TUFSMjUgaW1hZ2UgYWRkXG4gIGFzeW5jIGZpbGVDaGFuZ2VFdmVudChxdWVzOiBhbnksIGV2ZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWFnZURhdGEgPSBhd2FpdCB0aGlzLnJlYWRGaWxlQXNEYXRhVVJMKGZpbGUpO1xuICAgICAgICBxdWVzLmltYWdlRGF0YSA9IGltYWdlRGF0YTtcbiAgICAgICAgcXVlcy5vcmdJbWFnZURhdGEgPSBpbWFnZURhdGE7XG4gICAgICAgIC8vIEluaXRpYWxpemUgbG9nbyBzaXplIGlmIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICBpZiAoIXF1ZXMuaW1hZ2VTaXplKSB7XG4gICAgICAgICAgcXVlcy5pbWFnZVNpemUgPSB7IHdpZHRoOiAxNTAsIGhlaWdodDogMTUwIH07XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKGltYWdlRGF0YSwgcXVlcyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgcmVhZGluZyBmaWxlOlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkRmlsZUFzRGF0YVVSTChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgb25JbWFnZUVkaXQocXVlczogYW55KSB7XG4gICAgdGhpcy5pc0ltYWdlRWRpdCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEltYWdlRWxlbWVudCA9IHF1ZXM7XG4gIH1cbiAgYXN5bmMgb25JbWFnZURlbGV0ZShxdWVzOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgcXVlcy5pbWFnZURhdGEgPSAnJztcbiAgICAgIHF1ZXMub3JnSW1hZ2VEYXRhID0gJyc7XG4gICAgICAvLyBJbml0aWFsaXplIGxvZ28gc2l6ZSBpZiBub3QgYWxyZWFkeSBzZXRcbiAgICAgIGlmICghcXVlcy5pbWFnZVNpemUpIHtcbiAgICAgICAgcXVlcy5pbWFnZVNpemUgPSB7IHdpZHRoOiAxNTAsIGhlaWdodDogMTUwIH07XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmNoaWxkRXZlbnRDYXB0dXJlKHF1ZXMuaW1hZ2VEYXRhLCBxdWVzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHJlYWRpbmcgZmlsZTpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNLUzI1TUFSMjUgaW1hZ2UgZWRpdCBmdW5jdGlvbnNcbiAgZmxpcEhvcml6b250YWwoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIGZsaXBIOiAhdGhpcy50cmFuc2Zvcm0uZmxpcEhcbiAgICB9O1xuICB9XG5cbiAgZmxpcFZlcnRpY2FsKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwVjogIXRoaXMudHJhbnNmb3JtLmZsaXBWXG4gICAgfTtcbiAgfVxuXG4gIHJlc2V0SW1hZ2UoKSB7XG4gICAgdGhpcy5jYW52YXNSb3RhdGlvbiA9IDA7XG4gICAgdGhpcy5jcm9wcGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgdHJhbnNsYXRlVW5pdDogJ3B4JyxcbiAgICAgIHNjYWxlOiAxLFxuICAgICAgcm90YXRlOiAwLFxuICAgICAgZmxpcEg6IGZhbHNlLFxuICAgICAgZmxpcFY6IGZhbHNlLFxuICAgICAgdHJhbnNsYXRlSDogMCxcbiAgICAgIHRyYW5zbGF0ZVY6IDBcbiAgICB9O1xuICB9XG5cbiAgem9vbU91dCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgc2NhbGU6IHRoaXMudHJhbnNmb3JtLnNjYWxlISAtIC4xXG4gICAgfTtcbiAgfVxuXG4gIHpvb21JbigpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgc2NhbGU6IHRoaXMudHJhbnNmb3JtLnNjYWxlISArIC4xXG4gICAgfTtcbiAgfVxuICByb3RhdGVMZWZ0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7IC8vIFVzZSB0aW1lb3V0IGJlY2F1c2Ugcm90YXRpbmcgaW1hZ2UgaXMgYSBoZWF2eSBvcGVyYXRpb24gYW5kIHdpbGwgYmxvY2sgdGhlIHVpIHRocmVhZFxuICAgICAgdGhpcy5jYW52YXNSb3RhdGlvbi0tO1xuICAgICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJvdGF0ZVJpZ2h0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNhbnZhc1JvdGF0aW9uKys7XG4gICAgICB0aGlzLmZsaXBBZnRlclJvdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgbW92ZUxlZnQoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZUg6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZUghIC0gMVxuICAgIH07XG4gIH1cblxuICBtb3ZlUmlnaHQoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZUg6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZUghICsgMVxuICAgIH07XG4gIH1cblxuICBtb3ZlRG93bigpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlVjogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlViEgKyAxXG4gICAgfTtcbiAgfVxuXG4gIG1vdmVVcCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgdHJhbnNsYXRlVjogdGhpcy50cmFuc2Zvcm0udHJhbnNsYXRlViEgLSAxXG4gICAgfTtcbiAgfVxuICBwcml2YXRlIGZsaXBBZnRlclJvdGF0ZSgpIHtcbiAgICBjb25zdCBmbGlwcGVkSCA9IHRoaXMudHJhbnNmb3JtLmZsaXBIO1xuICAgIGNvbnN0IGZsaXBwZWRWID0gdGhpcy50cmFuc2Zvcm0uZmxpcFY7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIGZsaXBIOiBmbGlwcGVkVixcbiAgICAgIGZsaXBWOiBmbGlwcGVkSCxcbiAgICAgIHRyYW5zbGF0ZUg6IDAsXG4gICAgICB0cmFuc2xhdGVWOiAwXG4gICAgfTtcbiAgfVxuICBhc3luYyBpbWFnZUNyb3BwZWQoZXZlbnQ6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlNjQgPSBhd2FpdCB0aGlzLmNvbnZlcnRCbG9iVG9CYXNlNjQoZXZlbnQub2JqZWN0VXJsKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbWFnZUVsZW1lbnQuaW1hZ2VEYXRhID0gYmFzZTY0O1xuICAgICAgYXdhaXQgdGhpcy5jaGlsZEV2ZW50Q2FwdHVyZShiYXNlNjQsIHRoaXMuc2VsZWN0ZWRJbWFnZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gaW1hZ2VDcm9wcGVkOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cblxuICBjcm9wcGVyUmVhZHkoc291cmNlSW1hZ2VEaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gIH1cbiAgLy8gU0tTMjVNQVIyNSBibG9iIHRvIGJhc2UgNjQgY29udmVydGVyXG4gIGNvbnZlcnRCbG9iVG9CYXNlNjQob2JqZWN0VXJsOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBmZXRjaChvYmplY3RVcmwpXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5ibG9iKCkpXG4gICAgICAudGhlbihibG9iID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKTtcbiAgICAgICAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLmlzSW1hZ2VFZGl0ID0gZmFsc2U7XG4gIH1cblxuICAvLyBTS1MyOE1BUjI1IGZvciBuZXN0ZWQgYm9vayByZWFkXG4gIHJlYWRRdWVzdGlvbnMocWJJZDogYW55LCBxdWVzOmFueSkge1xuICAgIGxldCBxdWVzdGlvbnMgPSBbXTtcbiAgICAvLyBBZGRlZCB0ZXJuYXJ5IHRvIGF2b2lkIHVuZGVmaW5lZFxuICAgIGZvciAodmFyIHNxIGluIHF1ZXMuYm9va1F1ZXN0aW9uc01hcFtxYklkXS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgIGxldCBxOiBRdWVzdGlvbiA9IHF1ZXMuYm9va1F1ZXN0aW9uc01hcFtxYklkXS5zdWJRdWVzdGlvbnNbc3FdO1xuICAgICAgLy8gaWYgcXVlc3Rpb24gaXMgdGhlcmUgcHJvY2Vzc1xuICAgICAgaWYgKHEpIHtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaChxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9ucztcbiAgfVxufVxuIiwiPCEtLSBIQSAxOEpBTjI0ICBBZGRlZCBjbGFzcyBmb3Igc3R5bGluZyAtLT5cbjxkaXYgW3N0eWxlXT1cImJvb2tTdHlsZVwiIGNsYXNzPVwiY29udGVudC1ib3ggZm9ybS1ncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRGlyZWN0aXZlIGFuZCBRdWVzdGlvbiBTdHlsZSBmcm9tIHNhbGVzZm9yY2UgLS0+XG4gICAgICAgIDwhLS0gUkEwOURFQzI0IENoYW5nZWQga2V5cy0tPlxuICAgICAgICA8ZGl2IFtjbGFzc109XCInY29sLWxnLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiICpuZ0Zvcj1cImxldCBxdWVzIG9mIHF1ZXN0aW9ucztsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIFtpZF09XCJxdWVzLmlkXCIgW2Rpcl09XCJxdWVzLmxhbmdEaXJlY3Rpb25cIiBbc3R5bGVdPVwicXVlcz8uc3R5bGU/LnF1ZXN0aW9uU3R5bGVcIj5cbiAgICAgICAgICAgIDwhLS0gVkQgMDlNYXkyNCBpcyBoaWRlIGZpZWxkIGNoYW5nZS0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmlzSGlkZGVuXCIgY2xhc3M9XCJueHRJbnB1dENvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQVAtMjhNQVIyNSBTaG93IGxhYmVsIGlmIGVuYWJsZWQgYW5kIG5vdCBhIEJvb2xlYW4gdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicXVlcy5zdHlsZT8uc2hvd0xhYmVsID8gKHF1ZXMuc3R5bGU/LnNob3dMYWJlbCAmJiBxdWVzLnR5cGUgIT09ICdCb29sZWFuJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0JyAmJiBxdWVzLnR5cGUgIT09ICdMaXN0JyAmJiBxdWVzPy50eXBlICE9PSAnRHJvcGRvd24nICYmIHF1ZXMudHlwZSAhPT0gJ1JpY2hUZXh0QXJlYScgJiYgcXVlcy50eXBlICE9PSAnRGF0ZVRpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ0xvY2F0aW9uJyAmJiBxdWVzLnR5cGUgIT09ICdOdW1iZXInICYmcXVlcy50eXBlICE9PSAnRW1haWwnICYmICBxdWVzLnR5cGUgIT09ICdEYXRlJyAmJiBxdWVzLnR5cGUgIT09ICdUaW1lJyAmJiBxdWVzLnR5cGUgIT09ICdUZXh0QXJlYScgJiYgcXVlcy50eXBlICE9PSAnTGFiZWwnKTogKHF1ZXMuc3R5bGU/LnNob3dMYWJlbCAhPT0gZmFsc2UgJiYgcXVlcy50eXBlICE9PSAnQm9vbGVhbicgJiYgcXVlcy50eXBlICE9PSAnVGV4dCcgJiYgcXVlcy50eXBlICE9PSAnTGlzdCcgJiYgcXVlcz8udHlwZSAhPT0gJ0Ryb3Bkb3duJyAmJiBxdWVzLnR5cGUgIT09ICdEYXRlVGltZScgJiYgcXVlcy50eXBlICE9PSAnTG9jYXRpb24nICYmIHF1ZXMudHlwZSAhPT0gJ051bWJlcicgJiYgIHF1ZXMudHlwZSAhPT0gJ0RhdGUnICYmIHF1ZXMudHlwZSAhPT0gJ1RpbWUnICYmIHF1ZXMudHlwZSAhPT0gJ1RleHRBcmVhJyAmJiBxdWVzLnR5cGUgIT09ICdMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInF1ZXMuc3R5bGU/LmxhYmVsU3R5bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cIidkaXMtZmxleCBzaGVuZ2VsLW15dC1mb250MyBteXQtZm9udDcgJ1wiIFtzdHlsZV09XCJxdWVzLnN0eWxlPy5sYWJlbFZhbHVlU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtZmFtaWx5JzogcXVlcy5mb250LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJzogcXVlcy5mb250Q29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogcXVlcy5mb250U2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXdlaWdodCc6IHF1ZXMuZm9udFdlaWdodFxuICAgICAgICAgICAgICAgICAgICAgIH1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5pc09wdGlvbmFsICYmICFxdWVzLmlzUmVhZE9ubHlcIiBzdHlsZT1cImNvbG9yOiByZWQ7XCI+KjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTS1MxM01BUjI1IG9ubHkgc2hvdyBvbiBmaWxlIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJTIDE3SkFOMjAyNSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGlzcGxheXMgaWNvbnMgd2l0aCB0b29sdGlwcyBoZWxwIHRleHQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5xdWVzdGlvblRleHQgJiYgcXVlcz8uaGVscFRleHQgJiYgcXVlcy50eXBlID09PSAnRmlsZSdcIiBjbGFzcz1cImljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cInF1ZXM/LmhlbHBUZXh0XCIgbWF0VG9vbHRpcENsYXNzPVwid2hpdGUtdG9vbHRpcFwiPmk8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUlMgMTdKQU4yMDI1IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAgRGlzcGxheXMgaWNvbnMgd2l0aCB0b29sdGlwcyBmb3IgZmlsZSByZXF1aXJlbWVudHMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvblwiICpuZ0lmPVwicXVlcy5maWVsZHNNZXRhICYmIHF1ZXMudHlwZSA9PT0gJ0ZpbGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJnZXRGaWxlUmVxdWlyZW1lbnRzKHF1ZXMuZmllbGRzTWV0YSlcIiBtYXRUb29sdGlwQ2xhc3M9XCJ3aGl0ZS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiA0cHg7XCI+aTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBjYWxlbmRhciAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0NhbGVuZGFyJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1jYWxlbmRhciBbcXVlc3Rpb25dPVwicXVlc1wiIChldmVudFNlbGVjdGVkKT1cImdldENhbGVuZGFyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZVNlbGVjdGVkKT1cImdldEN1cnJlbnRDYWxlbmRhcigkZXZlbnQpXCIgKG9wZW5Nb2RhbCk9XCJvcGVuQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZU1vZGFsKT1cImNsb3NlQ2FsZW5kYXJNb2RhbCgkZXZlbnQpXCI+PC9hcHAtY3VzdG9tLWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIG1vZGVsIHVzZWQgaW4gY2FsZW5kYXIgY29tcG9uZW50IC0tPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1tb2RlbCAqbmdJZj1cImlzQ2FsZW5kYXJNb2RhbE9wZW5cIiBbbW9kYWxUaXRsZV09XCJjYWxlbmRhck1vZGFsVGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzTW9kYWxPcGVuXT1cImlzQ2FsZW5kYXJNb2RhbE9wZW5cIiBbbW9kYWxTaXplXT1cImNhbGVuZGFyTW9kYWxTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzYXZlQnV0dG9uVmFsdWVdPVwiY2FsZW5kYXJTYXZlQnV0dG9uVmFsdWVcIiBbbW9kYWxGb290ZXJdPVwibW9kYWxDYWxlbmRhck1vZGFsRm9vdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzYXZlQnV0dG9uRW1pdCk9XCJvbkNhbGVuZGFyTW9kYWxTYXZlKClcIiAoY2FuY2VsQnV0dG9uRW1pdCk9XCJjbG9zZUNhbGVuZGFyTW9kYWwoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbmJvb2sgW3FiSXRlbV09XCJxYlJlZnJlbmNlQm9va1wiIFtxdWVzdGlvbnNdPVwicmVmZXJlbmNlUXVlc3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlUXVlc3Rpb24pPVwiaGFuZGxlUXVlc3Rpb25FdmVudCgkZXZlbnQpXCI+PC9saWItcXVlc3Rpb25ib29rPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tbW9kZWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzExSlVOMjUgZm9yIHBpY2sgbG9jYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uICAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJ1wiIFthcGlLZXldPVwicWJJdGVtWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXMuc2VsZWN0ZWRWYWx1ZVwiIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgKGxvY2F0aW9uU2VsZWN0ZWQpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxuICAgICAgICAgICAgICAgIDwvYXBwLXBpY2stbG9jYXRpb24+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzI1TUFSMjUgSW1hZ2UgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0ltYWdlJ1wiIChtb3VzZWVudGVyKT1cImlzSW1hZ2VIb3ZlciA9IHRydWU7XCJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiaXNJbWFnZUhvdmVyID0gZmFsc2U7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0ltYWdlSG92ZXJcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogZW5kO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cIiFxdWVzLmlzUmVhZE9ubHlcIiAoY2xpY2spPVwib25JbWFnZUVkaXQocXVlcylcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTExLjEwNjcgNi4wNzE3NEw5LjkyODMzIDQuODkzNEwyLjE2NjY3IDEyLjY1NTFWMTMuODMzNEgzLjM0NUwxMS4xMDY3IDYuMDcxNzRaTTEyLjI4NSA0Ljg5MzRMMTMuNDYzMyAzLjcxNTA3TDEyLjI4NSAyLjUzNjc0TDExLjEwNjcgMy43MTUwN0wxMi4yODUgNC44OTM0Wk00LjAzNSAxNS41MDAxSDAuNVYxMS45NjQyTDExLjY5NTggMC43Njg0MDNDMTEuODUyMSAwLjYxMjE3NyAxMi4wNjQgMC41MjQ0MTQgMTIuMjg1IDAuNTI0NDE0QzEyLjUwNiAwLjUyNDQxNCAxMi43MTc5IDAuNjEyMTc3IDEyLjg3NDIgMC43Njg0MDNMMTUuMjMxNyAzLjEyNTlDMTUuMzg3OSAzLjI4MjE4IDE1LjQ3NTcgMy40OTQxIDE1LjQ3NTcgMy43MTUwN0MxNS40NzU3IDMuOTM2MDQgMTUuMzg3OSA0LjE0Nzk2IDE1LjIzMTcgNC4zMDQyNEw0LjAzNTgzIDE1LjUwMDFINC4wMzVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM2Qzc1N0RcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnICpuZ0lmPVwiIXF1ZXMuaXNSZWFkT25seVwiIChjbGljayk9XCJvbkltYWdlRGVsZXRlKHF1ZXMpXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNCAzLjk4NzI2QzExLjc4IDMuNzY3MjYgOS41NDY2NyAzLjY1MzkzIDcuMzIgMy42NTM5M0M2IDMuNjUzOTMgNC42OCAzLjcyMDYgMy4zNiAzLjg1MzkzTDIgMy45ODcyNlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNGRjJDMTBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNS42NjY1IDMuMzEzNjJMNS44MTMxNyAyLjQ0MDI4QzUuOTE5ODQgMS44MDY5NSA1Ljk5OTg0IDEuMzMzNjIgNy4xMjY1IDEuMzMzNjJIOC44NzMxN0M5Ljk5OTg0IDEuMzMzNjIgMTAuMDg2NSAxLjgzMzYyIDEwLjE4NjUgMi40NDY5NUwxMC4zMzMyIDMuMzEzNjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyLjU2NjcgNi4wOTM3NUwxMi4xMzM0IDEyLjgwNzFDMTIuMDYgMTMuODUzNyAxMiAxNC42NjcxIDEwLjE0IDE0LjY2NzFINS44NjAwMkM0LjAwMDAyIDE0LjY2NzEgMy45NDAwMiAxMy44NTM3IDMuODY2NjggMTIuODA3MUwzLjQzMzM1IDYuMDkzNzVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjRkYyQzEwXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuODg2NDcgMTEuMDAwNEg5LjEwNjQ3XCIgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjMzMzUgOC4zMzMyNUg5LjY2NjgzXCIgc3Ryb2tlPVwiI0ZGMkMxMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJxdWVzLmlzUmVhZE9ubHlcIiBbc3JjXT1cInF1ZXMuaW1hZ2VEYXRhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmlzUmVhZE9ubHlcIiBjbGFzcz1cImxvZ28tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvZ28gcHJldmlldyBhcmVhIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvZ28tcHJldmlld1wiICpuZ0lmPVwicXVlcy5pbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJxdWVzLmltYWdlRGF0YVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBVcGxvYWQgYnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzLmltYWdlRGF0YVwiIGNsYXNzPVwibG9nby11cGxvYWQtcGxhY2Vob2xkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibG9nby11cGxvYWQte3tpfX1cIiBjbGFzcz1cImxvZ28tdXBsb2FkLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiLi4vYXNzZXRzL2ljb25zL0ltYWdlLnN2Z1wiIGFsdD1cIlVwbG9hZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlVwbG9hZCBJbWFnZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwibG9nby11cGxvYWQte3tpfX1cIiBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJmaWxlQ2hhbmdlRXZlbnQocXVlcywgJGV2ZW50KVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gTVNNMTBKVUwyNSBpY29uLXNlbGVjdG9yIC0tPlxuICAgICAgICAgICAgICAgIDxueHQtaWNvbi1zZWxlY3RvciBbYWxsSWNvbnNdPVwiYWxsSWNvbnNcIiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0ljb24nXCIgW3JlcXVpcmVkXT1cInF1ZXMuaXNPcHRpb25hbFwiIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiIFtxdWVzdGlvbl09XCJxdWVzXCIgW2xhYmVsRm9udF09XCJxdWVzLmZvbnRcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicmVtb3ZlQ2hhcmFjdGVycyhxdWVzPy5xdWVzdGlvblRleHQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29sb3JdPVwicXVlcy5mb250Q29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxTaXplXT1cInF1ZXMuZm9udFNpemVcIiBbbGFiZWxXZWlnaHRdPVwicXVlcy5mb250V2VpZ2h0XCIgW3Nob3dMYWJlbF09XCJxdWVzLnN0eWxlPy5zaG93TGFiZWxcIiAoaWNvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7XCI+PC9ueHQtaWNvbi1zZWxlY3Rvcj5cblxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMjFNQVIyNSBsaW5lIC0tPlxuICAgICAgICAgICAgICAgIDxociAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xpbmUnXCIgY2xhc3M9XCJjdXN0b20tbGluZVwiIHN0eWxlPVwiZGlzcGxheTogaW5saW5lLWZsZXhcIiAvPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTNNQVIyNSBkYXRhIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxueHQtZGF0YXRhYmxlICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGFibGUnXCIgaXNFZGl0Um93IGlzRGVsZXRlUm93IGFjdGlvbkJ1dHRvbiBpc0J1dHRvbnMgW3F1ZXN0aW9uXT1cInF1ZXNcIiBmcm9tPVwiZm9ybUJ1aWxkZXJcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LmRhdGEsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCJpc0VkaXQgIT09IHRydWUgPyAndmlldycgOiAnZWRpdCdcIlxuICAgICAgICAgICAgICAgICAgICBbdGFibGVDb25maWddPVwicXVlcy50YWJsZUNvbmZpZ1wiIHRhYmxlSWQ9XCJcIiBkaXJlY3Rpb249XCJsdHJcIiB0YWJsZVdpZHRoPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgIDwvbnh0LWRhdGF0YWJsZT5cbiAgICAgICAgICAgICAgICA8IS0tIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgPG54dC1zZWFyY2gtYm94ICAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xpc3QnXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCIgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuaWRcIiBbcGxhY2VIb2xkZXJUZXh0XT1cInF1ZXMucXVlc3Rpb24gfHwgJydcIiBcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlYXJjaFZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pXCI+XG4gICAgICAgICAgICAgICAgPC9ueHQtc2VhcmNoLWJveD5cblxuICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwOUZFQjI0IEFkZGVkIGNvbmRpdGlvbiBvZiBzcU9wdGlvbiB0byB0aGUgZHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gKm5nSWY9XCJxdWVzPy50eXBlID09PSAnRHJvcGRvd24nICYmIHF1ZXM/Lm9wdGlvbnNcIiBbb3B0aW9uc109XCJxdWVzLm9wdGlvbnNcIiBbdG9rZW5dPVwidG9rZW5cIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwicXVlcy5pZFwiIFtzZWxlY3RlZFZhbHVlXT1cInFiSXRlbS5pc1NoZW5nZWwgPyBxdWVzLmlucHV0IDogcXVlcy5zZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLS17eydzZWxlY3QnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fS0tLVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5lcnJvck1lc3NhZ2VcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtyZWZlcmVuY2VGaWVsZF09XCJxdWVzLnJlZmVyZW5jZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRPbmx5XT1cInF1ZXMuaXNSZWFkT25seVwiIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudC52YWx1ZSwkZXZlbnQucXVlc3Rpb24pOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPCEtLSAvLyBWRCAwMkF1ZzI0IGN1c3RvbS1yYWRpbyBjb21wb25lbnQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1JhZGlvJyAmJiBxdWVzPy5vcHRpb25zXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tcmFkaW8gW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbdG9rZW5dPVwidG9rZW5cIiBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIiBbaWRdPVwicXVlcy5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbZXJyb3JNZXNzYWdlXT1cInF1ZXMuZXJyb3JNZXNzYWdlXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlZmVyZW5jZUZpZWxkXT1cInF1ZXMucmVmZXJlbmNlRmllbGRcIiBbcmVhZE9ubHldPVwicXVlcy5pc1JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LnZhbHVlLCRldmVudC5xdWVzdGlvbik7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tcmFkaW8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlcyAtLT5cbiAgICAgICAgICAgICAgICA8YXBwLWZpbGUtdXBsb2FkICpuZ0lmPVwicXVlcy50eXBlID09PSAnRmlsZSdcIiBbbGltaXRGaWxlVXBsb2FkaW5nXT1cIjVcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsbEZpbGVzXT1cInF1ZXMuaW5wdXRcIiAoc2VsZWN0ZWRGaWxlRGF0YSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIChkZWxldGVkRmlsZURhdGEpPVwiZGVsZXRlRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWZpbGUtdXBsb2FkPlxuICAgICAgICAgICAgICAgIDwhLS0gU0tTMTFKVU4yNSBCdXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPG54dC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdCdXR0b24nXCJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVdPVwiaXNFZGl0ICE9PSB0cnVlID8gJ3ZpZXcnIDogJ2VkaXQnXCJcbiAgICAgICAgICAgICAgICAgICAgW2J0bkhlaWdodF09XCInNTBweCdcIiBbYnRuV2lkdGhdPVwiJzE1MHB4J1wiIFtidXR0b25WYWx1ZV09XCJxdWVzPy5xdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIChidXR0b25DbGlja0VtaXQpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L254dC1idXR0b24+XG4gICAgICAgICAgICAgICAgPCEtLSBTS1MxMUpVTjI1IGJvb2sgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uYm9vayAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0Jvb2snXCIgW3FiSXRlbV09XCJxdWVzLnFiSXRlbVwiIFtsYWJlbFZhbHVlXT1cImxhYmVsVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbcXVlc3Rpb25zXT1cInJlYWRRdWVzdGlvbnMocXVlcy5xYlJlZmVyZW5jZSwgcXVlcy5xYlJlZmVyZW5jZVF1ZXN0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICAoaGFuZGxlRHJvcERvd24pPVwiZ2V0RHJvcERvd24oJGV2ZW50KVwiPjwvbGliLXF1ZXN0aW9uYm9vaz5cbiAgICAgICAgICAgICAgICA8IS0tIFNLUzExSlVOMjUgVGV4dCwgRW1haWwsIGxhYmVsLCBudW1iZXIsIEJvb2xlYW4sIHJpY2ggdGV4dCBlZGl0b3IsIERhdGVUaW1lLCBEYXRlLCBUaW1lLS0+XG4gICAgICAgICAgICAgICAgPG54dC1pbnB1dCAgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0JyB8fCBxdWVzLnR5cGUgPT09ICdFbWFpbCcgfHwgcXVlcy50eXBlID09PSAnTnVtYmVyJyB8fCBxdWVzLnR5cGUgPT09ICdMYWJlbCcgfHwgcXVlcy50eXBlID09PSAnQm9vbGVhbicgfHwgcXVlcy50eXBlID09PSAnUmljaFRleHRBcmVhJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlVGltZScgfHwgcXVlcy50eXBlID09PSAnRGF0ZScgfHwgcXVlcy50eXBlID09PSAnVGltZScgfHwgcXVlcy50eXBlID09PSAnVGV4dEFyZWEnXCJcbiAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwicXVlcy50eXBlID09PSAnVGV4dCcgPyAndGV4dCcgOiBxdWVzLnR5cGUgPT09ICdFbWFpbCcgPyAnZW1haWwnIDogcXVlcy50eXBlID09PSAnTnVtYmVyJyA/ICdudW1iZXInIDogcXVlcy50eXBlID09PSAnTGFiZWwnID8gJ2xhYmVsJyA6IHF1ZXMudHlwZSA9PT0gJ0Jvb2xlYW4nID8gJ2NoZWNrYm94JyA6IHF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYScgPyAncmljaHRleHQnIDogcXVlcy50eXBlID09PSAnRGF0ZVRpbWUnID8gJ2RhdGV0aW1lJyA6IHF1ZXMudHlwZSA9PT0gJ0RhdGUnID8gJ2RhdGUnIDogIHF1ZXMudHlwZSA9PT0gJ1RpbWUnID8gJ3RpbWUnIDogcXVlcy50eXBlID09PSAnVGV4dEFyZWEnID8gJ3RleHRhcmVhJyA6ICd0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICAgIFttb2RlXT1cImlzRWRpdCAhPT0gdHJ1ZSA/ICd2aWV3JyA6ICdlZGl0J1wiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzLmlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxGb250XT1cInF1ZXMuZm9udFwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJyZW1vdmVDaGFyYWN0ZXJzKHF1ZXM/LnF1ZXN0aW9uVGV4dClcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxDb2xvcl09XCJxdWVzLmZvbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbFNpemVdPVwicXVlcy5mb250U2l6ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFZhbHVlU2l6ZV09XCJxdWVzLmZvbnRTaXplXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsV2VpZ2h0XT1cInF1ZXMuZm9udFdlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFdlaWdodF09XCJxdWVzLmZvbnRXZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cInF1ZXMuc3R5bGU/LnNob3dMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGlucHV0Qm9yZGVyPVwibm9uZVwiIHN2Z0hlaWdodD1cIjIwcHhcIiBzdmdXaWR0aD1cIjIwcHhcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJxdWVzLmlzT3B0aW9uYWxcIiBpbnB1dEJnQ29sb3I9XCIjRkFGQUZBXCJcbiAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwicXVlcy50cmFja2luZ0lkXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZXNdPVwieyByZXF1aXJlZDogJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnIH1cIlxuICAgICAgICAgICAgICAgICAgICBbaW5wdXRJY29uTGVmdFNyY109XCJxdWVzLmljb25MZWZ0U3JjXCIgXG4gICAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dzXT1cIjNcIlxuICAgICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQudmFsdWUsJGV2ZW50LnF1ZXN0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L254dC1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tU0tTMjVNQVIyNSBNb2RhbCBPdmVybGF5IC0tPlxuPGRpdiBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIiAqbmdJZj1cImlzSW1hZ2VFZGl0XCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjbG9zZS1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VNb2RhbCgpXCI+w5c8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBJbWFnZSBFZGl0b3IgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudD8udHlwZSA9PT0gJ0ltYWdlJ1wiPlxuICAgICAgICAgICAgPGltYWdlLWNyb3BwZXIgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGFcIiBbaW1hZ2VCYXNlNjRdPVwic2VsZWN0ZWRJbWFnZUVsZW1lbnQub3JnSW1hZ2VEYXRhXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIiBbYWxpZ25JbWFnZV09XCJhbGlnbkltYWdlXCIgW3JvdW5kQ3JvcHBlcl09XCJyb3VuZENyb3BwZXJcIiBbYmFja2dyb3VuZENvbG9yXT1cIid3aGl0ZSdcIlxuICAgICAgICAgICAgICAgIGltYWdlQWx0VGV4dD1cIkFsdGVybmF0aXZlIGltYWdlIHRleHRcIiBbYWxsb3dNb3ZlSW1hZ2VdPVwiZmFsc2VcIiBbaGlkZVJlc2l6ZVNxdWFyZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtjYW52YXNSb3RhdGlvbl09XCJjYW52YXNSb3RhdGlvblwiIFthc3BlY3RSYXRpb109XCJhc3BlY3RSYXRpb1wiIFtjb250YWluV2l0aGluQXNwZWN0UmF0aW9dPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFttYWludGFpbkFzcGVjdFJhdGlvXT1cImZhbHNlXCIgW2Nyb3BwZXJTdGF0aWNXaWR0aF09XCJjcm9wcGVyU3RhdGljV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtjcm9wcGVyU3RhdGljSGVpZ2h0XT1cImNyb3BwZXJTdGF0aWNIZWlnaHRcIiBbY3JvcHBlck1pbldpZHRoXT1cImNyb3BwZXJNaW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgW2Nyb3BwZXJNaW5IZWlnaHRdPVwiY3JvcHBlck1pbkhlaWdodFwiIFtjcm9wcGVyTWF4V2lkdGhdPVwiY3JvcHBlck1heFdpZHRoXCJcbiAgICAgICAgICAgICAgICBbY3JvcHBlck1heEhlaWdodF09XCJjcm9wcGVyTWF4SGVpZ2h0XCIgW3Jlc2V0Q3JvcE9uQXNwZWN0UmF0aW9DaGFuZ2VdPSd0cnVlJyBbKGNyb3BwZXIpXT1cImNyb3BwZXJcIlxuICAgICAgICAgICAgICAgIFsodHJhbnNmb3JtKV09XCJ0cmFuc2Zvcm1cIiBbb25seVNjYWxlRG93bl09XCJ0cnVlXCIgb3V0cHV0PVwiYmxvYlwiIGZvcm1hdD1cInBuZ1wiXG4gICAgICAgICAgICAgICAgKGltYWdlQ3JvcHBlZCk9XCJpbWFnZUNyb3BwZWQoJGV2ZW50KVwiIChjcm9wcGVyUmVhZHkpPVwiY3JvcHBlclJlYWR5KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvaW1hZ2UtY3JvcHBlcj5cblxuICAgICAgICAgICAgPCEtLSBDb250cm9scyAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZEltYWdlRWxlbWVudC5pbWFnZURhdGFcIiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyb3RhdGVMZWZ0KClcIiB0aXRsZT1cIlJvdGF0ZSBMZWZ0XCI+4p+yPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyb3RhdGVSaWdodCgpXCIgdGl0bGU9XCJSb3RhdGUgUmlnaHRcIj7in7M8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInpvb21PdXQoKVwiIHRpdGxlPVwiWm9vbSBPdXRcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJ6b29tSW4oKVwiIHRpdGxlPVwiWm9vbSBJblwiPis8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVMZWZ0KClcIiB0aXRsZT1cIk1vdmUgTGVmdFwiPuKGkDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZVJpZ2h0KClcIiB0aXRsZT1cIk1vdmUgUmlnaHRcIj7ihpI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVVcCgpXCIgdGl0bGU9XCJNb3ZlIFVwXCI+4oaRPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlRG93bigpXCIgdGl0bGU9XCJNb3ZlIERvd25cIj7ihpM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cImZsaXBIb3Jpem9udGFsKClcIiBbY2xhc3MuZW5hYmxlZF09XCJ0cmFuc2Zvcm0uZmxpcEhcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkZsaXAgSG9yaXpvbnRhbGx5XCI+4oaUPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJmbGlwVmVydGljYWwoKVwiIFtjbGFzcy5lbmFibGVkXT1cInRyYW5zZm9ybS5mbGlwVlwiXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiRmxpcCBWZXJ0aWNhbGx5XCI+4oaVPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJyZXNldEltYWdlKClcIiB0aXRsZT1cIlJlc2V0XCI+w5c8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==