@rangertechnologies/ngnxt 2.1.173 → 2.1.176

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 (85) hide show
  1. package/esm2022/environments/version.mjs +2 -2
  2. package/esm2022/lib/components/button/nxt-button.component.mjs +42 -39
  3. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +48 -7
  4. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +41 -4
  5. package/esm2022/lib/components/datatable/datatable.component.mjs +6 -3
  6. package/esm2022/lib/components/file-upload/file-upload.component.mjs +24 -59
  7. package/esm2022/lib/components/nxt-input/nxt-input.component.mjs +2822 -0
  8. package/esm2022/lib/components/pick-location/pick-location.component.mjs +19 -5
  9. package/esm2022/lib/components/search-box/search-box.component.mjs +19 -13
  10. package/esm2022/lib/nxt-app.module.mjs +13 -292
  11. package/esm2022/lib/pages/booklet/booklet.component.mjs +20 -7
  12. package/esm2022/lib/pages/builder/element/element.component.mjs +9 -12
  13. package/esm2022/lib/pages/builder/form/form.component.mjs +6 -5
  14. package/esm2022/lib/pages/builder/properties/properties.component.mjs +29 -5
  15. package/esm2022/lib/pages/pdfDesigner/pdf-designer/pdf-designer.component.mjs +4 -5
  16. package/esm2022/lib/pages/pdfDesigner/pdf-properties/pdf-properties.component.mjs +2 -2
  17. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +14 -30
  18. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +21 -40
  19. package/esm2022/lib/services/form-builder.service.mjs +1 -1
  20. package/esm2022/public-api.mjs +2 -11
  21. package/fesm2022/rangertechnologies-ngnxt.mjs +15838 -14645
  22. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  23. package/lib/components/button/nxt-button.component.d.ts +13 -12
  24. package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +11 -4
  25. package/lib/components/custom-radio/custom-radio.component.d.ts +14 -3
  26. package/lib/components/datatable/datatable.component.d.ts +2 -1
  27. package/lib/components/file-upload/file-upload.component.d.ts +6 -5
  28. package/lib/components/nxt-input/nxt-input.component.d.ts +159 -0
  29. package/lib/components/pick-location/pick-location.component.d.ts +5 -3
  30. package/lib/components/search-box/search-box.component.d.ts +3 -2
  31. package/lib/nxt-app.module.d.ts +30 -55
  32. package/lib/pages/booklet/booklet.component.d.ts +3 -1
  33. package/lib/pages/builder/element/element.component.d.ts +1 -1
  34. package/lib/pages/builder/form/form.component.d.ts +1 -1
  35. package/lib/pages/builder/properties/properties.component.d.ts +93 -1
  36. package/lib/pages/questionbook/questionbook.component.d.ts +3 -3
  37. package/lib/pages/questionnaire/questionnaire.component.d.ts +6 -10
  38. package/lib/services/form-builder.service.d.ts +12 -22
  39. package/package.json +1 -1
  40. package/public-api.d.ts +1 -9
  41. package/rangertechnologies-ngnxt-2.1.176.tgz +0 -0
  42. package/src/lib/style.css +0 -1
  43. package/esm2022/lib/components/cards/group-card/group-card.component.mjs +0 -36
  44. package/esm2022/lib/components/cards/group-info/group-info.component.mjs +0 -102
  45. package/esm2022/lib/components/cards/image-card/image-card.component.mjs +0 -83
  46. package/esm2022/lib/components/cards/info-card/info-card.component.mjs +0 -109
  47. package/esm2022/lib/components/custom-button/custom-button.component.mjs +0 -42
  48. package/esm2022/lib/components/custom-date/custom-date.component.mjs +0 -48
  49. package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +0 -53
  50. package/esm2022/lib/components/custom-image/custom-image.component.mjs +0 -34
  51. package/esm2022/lib/components/custom-input/custom-input.component.mjs +0 -101
  52. package/esm2022/lib/components/custom-label/custom-label.component.mjs +0 -24
  53. package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +0 -182
  54. package/esm2022/lib/components/custom-table/custom-table.component.mjs +0 -252
  55. package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +0 -71
  56. package/esm2022/lib/components/custom-time/custom-time.component.mjs +0 -66
  57. package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +0 -45
  58. package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +0 -44
  59. package/esm2022/lib/components/file-view/file-view.component.mjs +0 -49
  60. package/esm2022/lib/components/loader/loader.component.mjs +0 -23
  61. package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +0 -128
  62. package/esm2022/lib/model/tableWrapper.mjs +0 -20
  63. package/esm2022/lib/pages/summary-page/summary-page.component.mjs +0 -79
  64. package/lib/components/cards/group-card/group-card.component.d.ts +0 -13
  65. package/lib/components/cards/group-info/group-info.component.d.ts +0 -47
  66. package/lib/components/cards/image-card/image-card.component.d.ts +0 -34
  67. package/lib/components/cards/info-card/info-card.component.d.ts +0 -39
  68. package/lib/components/custom-button/custom-button.component.d.ts +0 -16
  69. package/lib/components/custom-date/custom-date.component.d.ts +0 -16
  70. package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +0 -20
  71. package/lib/components/custom-image/custom-image.component.d.ts +0 -13
  72. package/lib/components/custom-input/custom-input.component.d.ts +0 -28
  73. package/lib/components/custom-label/custom-label.component.d.ts +0 -10
  74. package/lib/components/custom-rich-text/custom-rich-text.component.d.ts +0 -29
  75. package/lib/components/custom-table/custom-table.component.d.ts +0 -53
  76. package/lib/components/custom-text-area/custom-text-area.component.d.ts +0 -22
  77. package/lib/components/custom-time/custom-time.component.d.ts +0 -18
  78. package/lib/components/dependent-table/dependent-table.component.d.ts +0 -15
  79. package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +0 -16
  80. package/lib/components/file-view/file-view.component.d.ts +0 -16
  81. package/lib/components/loader/loader.component.d.ts +0 -11
  82. package/lib/components/table-appendix/table-appendix.component.d.ts +0 -30
  83. package/lib/model/tableWrapper.d.ts +0 -18
  84. package/lib/pages/summary-page/summary-page.component.d.ts +0 -20
  85. package/rangertechnologies-ngnxt-2.1.173.tgz +0 -0
@@ -1103,7 +1103,7 @@ export class PdfPropertiesComponent {
1103
1103
  }
1104
1104
  }
1105
1105
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PdfPropertiesComponent, deps: [{ token: i1.HttpClient }, { token: i2.PdfDesignerService }, { token: i3.TemplateService }], target: i0.ɵɵFactoryTarget.Component });
1106
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PdfPropertiesComponent, isStandalone: true, selector: "app-pdf-properties", inputs: { selectedElementType: "selectedElementType", templateSelected: "templateSelected" }, outputs: { formButtonHandler: "formButtonHandler", templateSaveHandler: "templateSaveHandler" }, host: { listeners: { "document:click": "onClickOutside($event)" } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "<!-- - Field and Element Properties -->\n<div class=\"container\">\n <div class=\"tabs\">\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'attributes'}\" (click)=\"setActiveTab('attributes')\">\n Attributes\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'property'}\" (click)=\"setActiveTab('property')\">\n Property\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'appearance'}\" (click)=\"setActiveTab('appearance')\">\n Appearance\n </div>\n </div>\n\n <div class=\"tab-content\" *ngIf=\"activeTab === 'attributes'\">\n <!-- Element Properrties -->\n <!-- Select element type show -->\n <div *ngIf=\"getProperties()\">\n <!-- SKS25MAR25 this is for image edit -->\n <div *ngIf=\"selectedElement?.type === 'image'\">\n <image-cropper *ngIf=\"selectedElement.imageData \" [imageBase64]=\"selectedElement.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)\"></image-cropper>\n <div *ngIf=\"selectedElement.imageData \" style=\"display: flex; gap: 2px;\">\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 <!-- SKS28MAR25 search pdf specific for pdf element -->\n <div *ngIf=\"selectedElement?.type === 'Pdf'\">\n <label class=\"text-sm\">Search Pdf</label>\n <div style=\"display: flex; gap: 2px; align-items: center; justify-content: center;\">\n <lib-search-box [question]=\"selectedElement\" [apiMeta]=\"bookSubtext\" [placeHolderText]=\"'Search...'\"\n (searchValueChange)=\"childEventCapture($event)\">\n </lib-search-box>\n <div class=\"link-icon\">\n <svg (click)=\"linkToggleDropdown($event)\" fill=\"#000000\" version=\"1.1\" id=\"Capa_1\"\n xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"24px\" height=\"24px\"\n viewBox=\"0 0 450 450\" xml:space=\"preserve\">\n <g>\n <g>\n <g>\n <path d=\"M318.15,230.195l77.934-77.937c31.894-31.892,31.894-83.782-0.004-115.674l-12.66-12.66\n c-31.893-31.896-83.78-31.896-115.674-0.004l-77.937,77.934c-17.588,17.588-25.457,41.264-23.646,64.311\n c-23.045-1.813-46.722,6.056-64.308,23.647L23.92,267.748c-31.894,31.889-31.894,83.779,0,115.674l12.664,12.662\n c31.893,31.893,83.783,31.893,115.674,0l77.935-77.936c17.592-17.59,25.459-41.266,23.647-64.309\n C276.884,255.654,300.56,247.783,318.15,230.195z M202.653,290.605l-77.936,77.938c-16.705,16.703-43.889,16.703-60.59,0\n l-12.666-12.666c-16.705-16.701-16.703-43.885,0-60.594l77.936-77.932c14.14-14.141,35.779-16.306,52.226-6.516l-32.302,32.307\n c-7.606,7.604-7.606,19.938,0,27.541c7.605,7.607,19.937,7.607,27.541,0l32.306-32.303\n C218.959,254.828,216.795,276.469,202.653,290.605z M238.382,209.169l32.299-32.306c7.608-7.602,7.608-19.935,0-27.538\n c-7.604-7.61-19.936-7.61-27.541-0.004l-32.303,32.303c-9.791-16.446-7.627-38.087,6.514-52.226l77.935-77.935\n c16.707-16.707,43.89-16.707,60.594,0l12.664,12.664c16.705,16.705,16.705,43.886,0,60.591l-77.936,77.937\n C276.468,216.797,254.828,218.959,238.382,209.169z\" />\n <path d=\"M343.466,261.465c-45.287,0-82,36.713-82,82s36.713,82,82,82c45.286,0,82-36.713,82-82S388.753,261.465,343.466,261.465z\n M372.505,333.564l-56.046,56.104c-0.239,0.238-0.536,0.41-0.862,0.496l-22.315,5.85c-0.649,0.168-1.347-0.02-1.822-0.494\n c-0.477-0.479-0.666-1.172-0.496-1.824l5.826-22.318c0.084-0.326,0.256-0.627,0.494-0.863l56.047-56.104\n c0.742-0.742,1.945-0.744,2.688-0.002l4.548,4.541c0.739,0.74,0.741,1.943,0,2.688l-37.433,37.471l4.709,4.703l37.435-37.471\n c0.739-0.742,1.94-0.742,2.682-0.002l4.55,4.541C373.25,331.617,373.25,332.822,372.505,333.564z M395.472,310.574l-17,17.018\n c-0.739,0.744-1.942,0.744-2.685,0.002l-16.489-16.475c-0.744-0.74-0.744-1.943-0.002-2.688l17-17.02\n c0.741-0.74,1.944-0.74,2.688-0.002l16.487,16.477C396.216,308.629,396.216,309.832,395.472,310.574z\" />\n </g>\n </g>\n </g>\n </svg>\n <div class=\"link-dropdown-menu\" *ngIf=\"isLinkDropdownOpen\" #dropdown>\n <label>Endpoint:</label>\n <input type=\"text\" [(ngModel)]=\"bookSubtext.endpoint\" />\n\n <label>Variable:</label>\n <input type=\"text\" [(ngModel)]=\"bookSubtext.variable\" />\n\n <label>Field:</label>\n <input type=\"text\" [ngModel]=\"fieldAsString\" (ngModelChange)=\"updateField($event)\" />\n\n <label>Default Field:</label>\n <input type=\"text\" [(ngModel)]=\"bookSubtext.defaultField\" />\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngFor=\"let prop of getProperties().elementProps\">\n <div class=\"form-group\">\n <label *ngIf=\"prop.type !== 'checkbox' && prop.type !== 'subQuestion'\" class=\"text-sm\">{{ prop.label\n }}</label>\n\n <!-- Text Input -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"headerSelect ? pdf.title : (selectedElement?.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key))\"\n (input)=\"headerSelect ? updateTitle($event.target.value) : (selectedElement?.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event.target.value) ) : setValueByPath(prop.key, $event.target.value))\"\n [class.read-only]=\"selectedElement.readOnly\" [readonly]=\"selectedElement.readOnly\" />\n\n <!-- questionNumber -->\n <input *ngIf=\"prop.key === 'questionNumber'\" type=\"number\" [value]=\"selectedElement.questionNumber\"\n (input)=\"setValueByPath('questionNumber', $event.target.value)\" />\n\n <!-- file -->\n <!-- Add this inside the elementProps loop where other inputs are rendered -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\" [value]=\"selectedElement[prop.key]\"\n (change)=\"setValueByPath(prop.key, $event.target.value)\">\n <option value=\"\">Select file category</option>\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n\n <div *ngIf=\"prop.type === 'checkbox'\">\n\n <input type=\"checkbox\"\n [checked]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ): getValueByPath(prop.key) \"\n (change)=\" selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : onToggleChange(prop.key, $event) ) : onToggleChange(prop.key, $event)\" />\n <span class=\"toggle-label\" style=\"padding-left: 10px;\">{{ prop.label }}</span>\n\n </div>\n <!-- SKS20MAR25 Subquestion Type -->\n <div *ngIf=\"prop.type === 'subQuestion'\">\n <div style=\"display: flex; flex-direction: row; gap: 10px; align-items: center;\">\n <div>{{ prop.label }}</div>\n <input type=\"checkbox\"\n [checked]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ): getValueByPath(prop.key) \"\n (change)=\" selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : onToggleChange(prop.key, $event) ) : onToggleChange(prop.key, $event)\" />\n </div>\n <!-- SKS20MAR25 Render subquestions when checkbox is checked -->\n <div\n *ngIf=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ): getValueByPath(prop.key)\">\n <div *ngFor=\"let subProp of prop.subQuestion\"\n style=\"background-color: #e7f2ff; padding: 8px; border-radius: 4px;\">\n <div class=\"form-group\">\n <label>{{ subProp.label }}</label>\n <div *ngIf=\"subProp.type === 'array'\">\n <!-- Iterate over filtered columns to display checkboxes -->\n <div *ngFor=\"let column of filteredColumns\">\n <label>\n <input type=\"checkbox\"\n [checked]=\"subProp.operands ? subProp.operands.includes(column.apiName) : false\"\n (change)=\"onCheckboxChange(subProp.targetArray,subProp.targetArrayKey,subProp.key, column.apiName, $event.target.checked)\">\n {{ column.apiName }}\n </label>\n </div>\n </div>\n <!-- SKS21MAR25 New radio type -->\n <div *ngIf=\"subProp.type === 'radio'\">\n <div *ngFor=\"let column of filteredColumns\">\n <label>\n <input type=\"radio\" [name]=\"subProp.key\" [value]=\"column.apiName\"\n [checked]=\"getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key) === column.apiName\"\n (change)=\"onRadioChange(subProp.targetArray, subProp.targetArrayKey, subProp.key, column.apiName)\">\n {{ column.apiName }}\n </label>\n </div>\n </div>\n <!-- SKS20MAR25 Add more subproperty types as needed -->\n <!-- Inside the subProp ngFor loop -->\n <input *ngIf=\"subProp.type === 'text'\" type=\"text\" [placeholder]=\"subProp.placeholder\"\n [value]=\"selectedElement.type === 'Table' ? (subProp.targetArray ? getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key ) : getValueByPath(subProp.key) ) : getValueByPath(subProp.key)\"\n (input)=\"selectedElement.type === 'Table' ? (subProp.targetArray ? updateValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key, $event) : setValueByPath(subProp.key, $event.target.value) ) : setValueByPath(subProp.key, $event.target.value)\" />\n\n <input *ngIf=\"subProp.type === 'boolean'\" type=\"checkbox\" [checked]=\"getValueByPath(subProp.key)\"\n (change)=\"setValueByPath(subProp.key, $event.target.checked)\" />\n <select *ngIf=\"subProp.type === 'select'\" [value]=\"getValueByPath(subProp.key)\"\n (change)=\"setValueByPath(subProp.key, $event.target.value)\">\n <option *ngFor=\"let option of subProp.options\" [value]=\"option\">{{ option }}</option>\n </select>\n <input *ngIf=\"subProp.type === 'checkbox'\" type=\"checkbox\" [checked]=\"getValueByPath(subProp.key)\"\n (change)=\"setValueByPath(subProp.key, $event.target.checked)\" />\n </div>\n </div>\n </div>\n </div>\n\n <!-- SKS20MAR25 Text Align Buttons -->\n <div *ngIf=\"prop.type === 'align'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onAlignSelect(option.value)\"\n [class.active]=\"selectedElement?.textAlign === option.value\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <div *ngIf=\"prop.type === 'style'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onStyleSelect(option.value)\"\n [class.active]=\"isStyleActive(option.value)\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <!-- Field Size Controls -->\n <!-- Change key width -->\n <div *ngIf=\"prop.key === 'width'\" [ngClass]=\"{'flex-container': true, 'custom-active': selectedElement?.width !== '*' && selectedElement?.width !== 'auto'}\">\n <select\n class=\"size-select\"\n [value]=\"selectedElement?.width === '*' ? 'Default' : selectedElement?.width === 'auto' ? 'Auto' : 'Custom'\"\n (change)=\"onWidthSelect(\n $event.target.value === 'Default' ? '*' :\n $event.target.value === 'Auto' ? 'auto' : 'custom'\n )\">\n <option value=\"Default\">Default</option>\n <option value=\"Auto\">Auto</option>\n <option value=\"Custom\">Custom</option>\n </select>\n \n <input\n *ngIf=\"selectedElement?.width !== '*' && selectedElement?.width !== 'auto'\"\n type=\"number\"\n class=\"size-input\"\n min=\"1\"\n max=\"100\"\n [value]=\"selectedElement?.width\"\n (input)=\"setValueByPath(\n 'width',\n $event.target.valueAsNumber < 1 ? 1 :\n $event.target.valueAsNumber > 100 ? 100 :\n $event.target.valueAsNumber\n )\" />\n </div> \n\n <!-- Line Properties -->\n <!-- Padding Top -->\n <div *ngIf=\"prop.key === 'paddingTop'\">\n <input type=\"number\" [placeholder]=\"prop.placeholder\" [value]=\"selectedElement?.paddingTop\"\n (input)=\"setValueByPath('paddingTop', $event.target.value)\" />\n </div>\n\n <!-- Padding Bottom -->\n <div *ngIf=\"prop.key === 'paddingBottom'\">\n <input type=\"number\" [placeholder]=\"prop.placeholder\" [value]=\"selectedElement?.paddingBottom\"\n (input)=\"setValueByPath('paddingBottom', $event.target.value)\" />\n </div>\n\n <!-- Line Style -->\n <div *ngIf=\"prop.key === 'lineStyle'\">\n <select [value]=\"selectedElement?.lineStyle\" (change)=\"setValueByPath('lineStyle', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\">{{ option }}</option>\n </select>\n </div>\n\n <!-- Color -->\n <div *ngIf=\"prop.key === 'color'\">\n <input type=\"color\" [value]=\"selectedElement?.color\"\n (input)=\"setValueByPath('color', $event.target.value)\" />\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'property'\">\n <!-- Field Elements Properties -->\n <!-- Show elements ID -->\n <div *ngIf=\"getProperties()\">\n <label>Label Id</label>\n <div\n style=\"font-size: 13px; padding: 11px; border-radius: 5px; background-color: #f8f8f8; border: 1px solid #ddd;\">\n {{ headerSelect ? bookId : selectedElement.id }}</div>\n <ng-container *ngFor=\"let prop of getProperties().fieldProps\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- SKS21MAR25 Toggle Group -->\n <div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n <div class=\"toggle-item\">\n <label class=\"toggle-label\">\n <input type=\"checkbox\" />\n Disabled\n </label>\n </div>\n </div>\n\n <!-- - handled options with UUID -->\n <div\n *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n class=\"options-container\">\n\n <div class=\"option-list\" (dragover)=\"onDragOver($event)\" (drop)=\"onDrop($event, prop.key)\">\n <div *ngFor=\"let option of selectedElement[prop.key]\" class=\"option-items\" [attr.data-id]=\"option.id\"\n draggable=\"true\" (dragstart)=\"onDragStart($event, option.id)\">\n\n <input type=\"text\" [(ngModel)]=\"option.value\" placeholder=\"Option\" class=\"options\" />\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], option.id)\">\n <span class=\"drag-handle\">\u2630</span>\n </div>\n </div>\n\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add</span>\n </div>\n </button>\n </div>\n\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"headerSelect ? pdf.title : (selectedElement?.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key))\"\n (input)=\"headerSelect ? updateTitle($event.target.value) : (selectedElement?.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event.target.value) ) : setValueByPath(prop.key, $event.target.value))\"\n [class.read-only]=\"selectedElement.readOnly\" [readonly]=\"selectedElement.readOnly\" />\n\n <!-- Sub Questions Toggle -->\n <div *ngIf=\"prop.type === 'subQuestion'\">\n <div class=\"style-toggle-header\" (click)=\"toggleSubQuestion(prop)\">\n <div class=\"head-elements\">Sub Text</div>\n <img [src]=\"prop.isExpanded ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\"\n alt=\"Toggle Arrow\" class=\"arrow-icon\">\n </div>\n\n <!-- Render subquestions when arrow is down -->\n <div *ngIf=\"prop.isExpanded\" style=\"border: 1px solid #ddd; padding: 8px; border-radius: 4px;\">\n <div *ngFor=\"let subProp of prop.subQuestion\" class=\"sub-question-container\">\n <div class=\"form-group\">\n <label>{{ subProp.label }}</label>\n\n <input *ngIf=\"subProp.type === 'text'\" type=\"text\" [placeholder]=\"subProp.placeholder\"\n [value]=\"getValueByPath(subProp.key)\" (input)=\"setValueByPath(subProp.key, $event.target.value)\" />\n \n <!-- Render input field only if subProp.type is 'array' -->\n <input *ngIf=\"subProp.type === 'array'\" type=\"text\" [placeholder]=\"subProp.placeholder\"\n [value]=\"getValueByPath(subProp.key)\" (input)=\"setValueByPath(subProp.key, $event.target.value)\" />\n <!-- <input type=\"text\" [ngModel]=\"fieldAsString\" (ngModelChange)=\"updateField($event)\" /> -->\n\n <input *ngIf=\"subProp.type === 'boolean'\" type=\"checkbox\" [checked]=\"getValueByPath(subProp.key)\"\n (change)=\"setValueByPath(subProp.key, $event.target.checked)\" />\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"prop.type === 'checkbox'\">\n <span class=\"toggle-label\" style=\"padding-right: 10px;\">{{ prop.label }}</span>\n <input type=\"checkbox\"\n [checked]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ): getValueByPath(prop.key) \"\n (change)=\" selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : onToggleChange(prop.key, $event) ) : onToggleChange(prop.key, $event)\" />\n\n </div>\n\n </div>\n </ng-container>\n\n <!-- SKS21MAR25 Move Style Outside the Loop -->\n <!-- Style Toggle -->\n <div class=\"style-toggle-header\" (click)=\"toggleStyleSection()\">\n <div class=\"head-elements\">Style</div>\n <img [src]=\"isStyleExpanded ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\"\n alt=\"Toggle Arrow\" class=\"arrow-icon\">\n </div>\n\n <div *ngIf=\"isStyleExpanded\" style=\"border: 1px solid #ddd; padding: 8px; border-radius: 4px;\">\n <div class=\"form-group\">\n <div *ngFor=\"let key of getStyleKeys()\">\n <label>{{ key }}</label>\n <input type=\"text\" [(ngModel)]=\"selectedElement.style[key]\"\n (input)=\"setValueByPath('style.' + key, $event.target.value)\" placeholder=\"Enter {{ key }}\" />\n </div>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'appearance'\">\n <div *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().appearance\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n <!-- Font Selection -->\n <div *ngIf=\"prop.key === 'font'\">\n <select *ngIf=\"prop.type === 'select'\" class=\"select-container\" [(ngModel)]=\"selectedElement.font\"\n (change)=\"setValueByPath('font', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\" (input)=\"setValueByPath(prop.key, $event.target.value)\" />\n\n<!-- Font Size -->\n<div *ngIf=\"prop.key === 'fontSize' && prop.type === 'number'\">\n <input type=\"number\" min=\"1\" max=\"100\" step=\"1\"\n [(ngModel)]=\"selectedElement.fontSize\"\n (change)=\"setValueByPath('fontSize', selectedElement.fontSize)\" />\n</div>\n <!-- Font Weight Selection -->\n <div *ngIf=\"prop.key === 'fontWeight'\">\n <select *ngIf=\"prop.type === 'select'\" [(ngModel)]=\"selectedElement[prop.key]\"\n (change)=\"setValueByPath(prop.key, $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n </div>\n\n <div class=\"flex-container\">\n <!-- Dropdown Box -->\n <div *ngIf=\"prop.type === 'dropdown'\" class=\"input-box-field\">\n <select [(ngModel)]=\"selectedElement[prop.key]\" (change)=\"setValueByPath(prop.key, $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n\n <!-- Color Picker -->\n <div *ngIf=\"prop.type === 'color'\" class=\"color-selector\">\n <input type=\"color\" [(ngModel)]=\"selectedElement.fontColor\"\n (change)=\"setValueByPath('fontColor', $event.target.value)\">\n </div>\n\n <!-- HEX Input Box -->\n <div *ngIf=\"prop.type === 'color'\" class=\"hex-input-container\">\n <span>HEX Code</span>\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key]\"\n (change)=\"setValueByPath(prop.key, $event.target.value)\" />\n </div>\n </div>\n\n <!-- Font Style -->\n<div *ngIf=\"prop.key === 'fontStyle'\">\n <select [(ngModel)]=\"selectedElement.fontStyle\"\n (change)=\"setValueByPath('fontStyle', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n</div>\n\n<!-- margin: [0, 10, 0, 0] // [ left, top, right, bottom ] -->\n<div *ngIf=\"prop.key === 'margin'&& selectedElement?.margin\">\n <div class=\"margin-inputs\">\n <div>\n <label>Right</label>\n <input type=\"number\" [(ngModel)]=\"selectedElement.margin[1]\"\n (change)=\"setValueByPath('margin', selectedElement.margin)\" />\n </div>\n <div>\n <label>Bottom</label>\n <input type=\"number\" [(ngModel)]=\"selectedElement.margin[2]\"\n (change)=\"setValueByPath('margin', selectedElement.margin)\" />\n </div>\n <div>\n <label>Left</label>\n <input type=\"number\" [(ngModel)]=\"selectedElement.margin[3]\"\n (change)=\"setValueByPath('margin', selectedElement.margin)\" />\n </div>\n <div>\n <label>Top</label>\n <input type=\"number\" [(ngModel)]=\"selectedElement.margin[0]\"\n (change)=\"setValueByPath('margin', selectedElement.margin)\" />\n </div>\n </div>\n</div>\n\n <!-- TextAlign -->\n <div *ngIf=\"prop.key === 'alignItems'\">\n <select [(ngModel)]=\"selectedElement.alignItems\"\n (change)=\"setValueByPath('alignItems', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n </div> \n\n </div>\n </ng-container>\n </div>\n </div>\n\n<!-- Default Save Button -->\n<div class=\"button-container\" *ngIf=\"!templateSelected\">\n <button class=\"cancel-btn\" (click)=\"onCancel()\">Cancel</button>\n <button class=\"save-btn\" (click)=\"handleButtonClick()\">Save</button>\n</div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\";*{margin:0;padding:0;box-sizing:border-box;font-family:Roboto,sans-serif}.properties{height:calc(100vh - 20px);overflow-y:auto}.design-header{display:flex;justify-content:center;align-items:center;padding:15px 20px;background:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a;margin-bottom:20px}.header-title{font-size:20px;font-weight:400;color:#222}.all-properties details{background:#fff;border:1px solid #ddd;border-radius:8px;margin-bottom:12px;padding:12px;box-shadow:0 2px 8px #0000000d}.all-properties summary{font-size:15px;font-weight:400;cursor:pointer;padding:6px;transition:color .3s}.all-properties summary:hover{color:#007bff}.inner-content{padding:12px 0}.head-elements{font-size:14px;font-weight:500;color:#444}label{font-size:14px;font-weight:500;color:#444;margin-bottom:5px;display:block}input[type=text],input[type=number],select{width:100%;height:40px;padding:10px;font-size:14px;border:1px solid #ccc;border-radius:6px;outline:none;transition:.3s;background:#f8f8f8;text-align:left}input:focus,select:focus{border-color:#007bff;background:#fff;box-shadow:0 0 5px #007bff4d}button{padding:10px 15px;border:none;border-radius:6px;background:#007bff;color:#fff;font-size:15px;cursor:pointer;transition:.3s}button:hover{background:#0056b3;transform:translateY(-2px)}.toggle-group{display:flex;align-items:center;gap:20px}.toggle-item{display:flex;align-items:center;gap:10px}.switch{position:relative;width:42px;height:22px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:20px;width:20px;left:1px;bottom:1px;background-color:#fff;transition:.4s;border-radius:50%}input:checked+.slider{background-color:#2196f3}input:checked+.slider:before{transform:translate(18px)}.radio-item{display:flex;align-items:center;gap:20px}.radio-item input{accent-color:#007bff}.options-container{display:flex;flex-direction:column;gap:12px}.options{width:100%}.field-size-controls{display:flex;align-items:center;gap:12px}.size-input{width:110px;text-align:center}.design-footer{display:flex;justify-content:space-between;margin-top:20px}.design-footer .btn{background:#007bff;color:#fff;padding:10px 18px;border-radius:6px;font-size:15px;transition:.3s}.design-footer .btn:hover{background:#0056b3}.input-container{display:flex;flex-direction:column;align-items:flex-start;gap:10px;width:100%}.subtext-textarea{width:100%;margin-left:auto}.container{width:100%;max-width:500px;margin:0 auto;background-color:#fff;box-shadow:0 2px 10px #0000001a;overflow:hidden;font-family:Arial,sans-serif}.tabs{display:flex;background-color:#f0f2f5;border-bottom:2px solid #0052cc}.tab{flex:1;padding:15px 10px;text-align:center;cursor:pointer}.tab.active{background-color:#0052cc;color:#fff;font-weight:700}.tab-content{padding:20px;max-height:77vh;overflow-y:auto;overflow-x:hidden}.form-group{margin-bottom:15px}label{display:flex;gap:16px;margin-bottom:8px;color:#666;font-size:14px}.required:before{content:\"*\";color:red;margin-right:3px}input[type=text],select{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box;font-size:14px}.select-container{position:relative;width:100%}.dropdown-arrow{position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none;color:#666;font-size:12px}.checkbox-row{display:flex;margin-bottom:10px}.checkbox-group{display:flex;align-items:center;margin-right:20px;min-width:120px}.checkbox-group input[type=checkbox]{margin-right:5px}.toggle-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:10px}.arrow-icon{width:19px;height:23px;transition:transform .3s ease}.icon{display:inline-block;width:18px;height:18px;border-radius:50%;text-align:center;line-height:18px;color:#fff;font-size:12px;margin-left:5px}.edit-icon{background-color:#4caf50}.view-icon{background-color:#2196f3}.delete-icon{background-color:#f44336}.color-picker-row{display:flex;align-items:center}.color-picker-container{display:flex;align-items:center;border:1px solid #ddd;border-radius:4px;margin-right:10px}.color-box{width:30px;border:none;height:30px}.hex-label{color:#999;margin-right:5px}.hex-input{width:100px}.divider{border-top:1px dashed #ddd;margin:20px 0}.button-container{display:flex;padding:15px;background-color:#f9f9f9;border-top:1px solid #eee}.cancel-btn,.save-btn{padding:12px;border:none;border-radius:4px;cursor:pointer;font-weight:700}.cancel-btn{flex:1;background-color:#fff;color:#666;border:1px solid #ddd;margin-right:10px}.cancel-btn:hover{background-color:#0052cc!important;color:#fff!important}.save-btn{flex:1;background-color:#0052cc;color:#fff}.toggle-group{display:grid;grid-template-columns:1fr 1fr;gap:10px}.toggle-item{display:flex;align-items:center;padding:8px}textarea{width:100%;min-height:55px;padding:8px;border:1px solid #ccc;border-radius:5px;font-size:14px;resize:vertical}.flex-container{display:flex;align-items:center;gap:12px;margin-bottom:1rem}.input-box-field select{background-color:#28343e;color:#fff;border:none;padding:10px 14px;border-radius:6px;appearance:none;-webkit-appearance:none;-moz-appearance:none;position:relative;font-size:14px;font-family:inherit}.input-box-field{position:relative}.input-box-field select::-ms-expand{display:none}.input-box-field:after{content:\"\\25bc\";position:absolute;top:50%;right:10px;transform:translateY(-50%);color:#1c1b1f;pointer-events:none;font-size:10px}.color-selector input[type=color]{width:78px;height:40px;border-radius:4px;background:none;cursor:pointer}.hex-input-container{display:flex;font-size:12px;gap:20px;color:#b0b0b0;align-items:center}.hex-input-container span{font-size:14px;margin-top:10px}.hex-input-container input[type=text]{padding:10px 12px;border:1px solid #d1d1d1;border-radius:6px;font-size:14px;width:120px;color:#28343e}input{width:auto}@media screen and (max-width: 1099px){.container{height:calc(100vh - 20px);min-height:calc(100vh - 20px)}.tabs{flex-direction:column}.tab{flex:1;padding:1rem;font-size:.9rem;text-align:center}.form-group{flex-direction:column}}@media screen and (max-width: 768px){.container{height:calc(100vh - 20px) h;min-height:calc(100vh - 20px)}.tabs{flex-direction:column}.tab{flex:1;padding:1rem;font-size:.9rem;text-align:center}.form-group{flex-direction:column}}@media screen and (max-width: 480px){.container{padding:0 10px}.tabs{flex-direction:column}.tab{flex:1;padding:1rem;border-bottom:1px solid #dee2e6}input[type=text],input[type=number],select,textarea{font-size:.9rem}}@media screen and (max-width: 768px){.tab-content[aria-label=attributes] .form-group,.tab-content[aria-label=property] .form-group,.tab-content[aria-label=appearance] .form-group{grid-template-columns:1fr}.toggle-group{flex-direction:column;align-items:flex-start}}.logo-icon{width:20px;height:20px;display:flex;justify-content:center;background-color:#d0d9ff;border-radius:4px}.link-icon{background-color:#e7f2ff;padding:5px;border-radius:5px;margin:5px;display:inline-block;cursor:pointer;position:relative;transition:background-color .3s,transform .2s}.link-icon:hover{background-color:#d0e5ff}.link-icon:active{background-color:#a8d0ff}.link-dropdown-menu{position:absolute;top:100%;right:0;background:#fff;border:1px solid #ccc;padding:10px;width:200px;box-shadow:0 4px 6px #0000001a}.link-dropdown-menu input{width:100%;margin-bottom:5px;padding:5px;border:1px solid #ccc;border-radius:3px}.option-items{display:flex;align-items:center;padding:5px;border:1px solid #ccc;margin-bottom:10px;cursor:grab;background:#fff}.drag-handle{margin-left:10px;cursor:grab}.option-items:active{opacity:.5}.style-toggle-header{display:flex;justify-content:space-between;align-items:center;background-color:#f8f8f8;border:1px solid #ddd;padding:10px;border-radius:6px;cursor:pointer;margin-bottom:6px}.button-toggle-wrapper{margin-top:8px}.toggle-button{padding:8px 16px;border:1px solid #cbd2d9;border-radius:6px;font-size:14px;cursor:pointer;transition:all .2s ease-in-out}.toggle-button.active:hover{background-color:#2c6dd5}.flex-container{display:flex;gap:8px;align-items:center}.size-select{transition:width .3s ease;width:100%;max-width:200px}.flex-container.custom-active .size-select{max-width:100px}.size-input{width:60px}.margin-inputs{display:flex;gap:15px;margin-top:5px}.margin-inputs>div{display:flex;flex-direction:column;width:60px}.margin-inputs label{font-size:12px;margin-bottom:3px}.pdf-actions-container{width:100%;max-width:400px;padding:10px}.pdf-action-card{background-color:#fff;border-radius:6px;padding:9px;box-shadow:0 2px 6px #0000001a;display:flex;flex-direction:column;gap:10px}.pdf-btn{display:flex;align-items:center;justify-content:center;gap:8px;padding:10px;background-color:#6c757d;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:14px;transition:background-color .2s}.pdf-btn:hover{background-color:#5a6268}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "filterName"], outputs: ["searchValueChange"] }, { 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"] }] });
1106
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PdfPropertiesComponent, isStandalone: true, selector: "app-pdf-properties", inputs: { selectedElementType: "selectedElementType", templateSelected: "templateSelected" }, outputs: { formButtonHandler: "formButtonHandler", templateSaveHandler: "templateSaveHandler" }, host: { listeners: { "document:click": "onClickOutside($event)" } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "<!-- - Field and Element Properties -->\n<div class=\"container\">\n <div class=\"tabs\">\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'attributes'}\" (click)=\"setActiveTab('attributes')\">\n Attributes\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'property'}\" (click)=\"setActiveTab('property')\">\n Property\n </div>\n <div class=\"tab\" [ngClass]=\"{'active': activeTab === 'appearance'}\" (click)=\"setActiveTab('appearance')\">\n Appearance\n </div>\n </div>\n\n <div class=\"tab-content\" *ngIf=\"activeTab === 'attributes'\">\n <!-- Element Properrties -->\n <!-- Select element type show -->\n <div *ngIf=\"getProperties()\">\n <!-- SKS25MAR25 this is for image edit -->\n <div *ngIf=\"selectedElement?.type === 'image'\">\n <image-cropper *ngIf=\"selectedElement.imageData \" [imageBase64]=\"selectedElement.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)\"></image-cropper>\n <div *ngIf=\"selectedElement.imageData \" style=\"display: flex; gap: 2px;\">\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 <!-- SKS28MAR25 search pdf specific for pdf element -->\n <div *ngIf=\"selectedElement?.type === 'Pdf'\">\n <label class=\"text-sm\">Search Pdf</label>\n <div style=\"display: flex; gap: 2px; align-items: center; justify-content: center;\">\n <lib-search-box [question]=\"selectedElement\" [apiMeta]=\"bookSubtext\" [placeHolderText]=\"'Search...'\"\n (searchValueChange)=\"childEventCapture($event)\">\n </lib-search-box>\n <div class=\"link-icon\">\n <svg (click)=\"linkToggleDropdown($event)\" fill=\"#000000\" version=\"1.1\" id=\"Capa_1\"\n xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"24px\" height=\"24px\"\n viewBox=\"0 0 450 450\" xml:space=\"preserve\">\n <g>\n <g>\n <g>\n <path d=\"M318.15,230.195l77.934-77.937c31.894-31.892,31.894-83.782-0.004-115.674l-12.66-12.66\n c-31.893-31.896-83.78-31.896-115.674-0.004l-77.937,77.934c-17.588,17.588-25.457,41.264-23.646,64.311\n c-23.045-1.813-46.722,6.056-64.308,23.647L23.92,267.748c-31.894,31.889-31.894,83.779,0,115.674l12.664,12.662\n c31.893,31.893,83.783,31.893,115.674,0l77.935-77.936c17.592-17.59,25.459-41.266,23.647-64.309\n C276.884,255.654,300.56,247.783,318.15,230.195z M202.653,290.605l-77.936,77.938c-16.705,16.703-43.889,16.703-60.59,0\n l-12.666-12.666c-16.705-16.701-16.703-43.885,0-60.594l77.936-77.932c14.14-14.141,35.779-16.306,52.226-6.516l-32.302,32.307\n c-7.606,7.604-7.606,19.938,0,27.541c7.605,7.607,19.937,7.607,27.541,0l32.306-32.303\n C218.959,254.828,216.795,276.469,202.653,290.605z M238.382,209.169l32.299-32.306c7.608-7.602,7.608-19.935,0-27.538\n c-7.604-7.61-19.936-7.61-27.541-0.004l-32.303,32.303c-9.791-16.446-7.627-38.087,6.514-52.226l77.935-77.935\n c16.707-16.707,43.89-16.707,60.594,0l12.664,12.664c16.705,16.705,16.705,43.886,0,60.591l-77.936,77.937\n C276.468,216.797,254.828,218.959,238.382,209.169z\" />\n <path d=\"M343.466,261.465c-45.287,0-82,36.713-82,82s36.713,82,82,82c45.286,0,82-36.713,82-82S388.753,261.465,343.466,261.465z\n M372.505,333.564l-56.046,56.104c-0.239,0.238-0.536,0.41-0.862,0.496l-22.315,5.85c-0.649,0.168-1.347-0.02-1.822-0.494\n c-0.477-0.479-0.666-1.172-0.496-1.824l5.826-22.318c0.084-0.326,0.256-0.627,0.494-0.863l56.047-56.104\n c0.742-0.742,1.945-0.744,2.688-0.002l4.548,4.541c0.739,0.74,0.741,1.943,0,2.688l-37.433,37.471l4.709,4.703l37.435-37.471\n c0.739-0.742,1.94-0.742,2.682-0.002l4.55,4.541C373.25,331.617,373.25,332.822,372.505,333.564z M395.472,310.574l-17,17.018\n c-0.739,0.744-1.942,0.744-2.685,0.002l-16.489-16.475c-0.744-0.74-0.744-1.943-0.002-2.688l17-17.02\n c0.741-0.74,1.944-0.74,2.688-0.002l16.487,16.477C396.216,308.629,396.216,309.832,395.472,310.574z\" />\n </g>\n </g>\n </g>\n </svg>\n <div class=\"link-dropdown-menu\" *ngIf=\"isLinkDropdownOpen\" #dropdown>\n <label>Endpoint:</label>\n <input type=\"text\" [(ngModel)]=\"bookSubtext.endpoint\" />\n\n <label>Variable:</label>\n <input type=\"text\" [(ngModel)]=\"bookSubtext.variable\" />\n\n <label>Field:</label>\n <input type=\"text\" [ngModel]=\"fieldAsString\" (ngModelChange)=\"updateField($event)\" />\n\n <label>Default Field:</label>\n <input type=\"text\" [(ngModel)]=\"bookSubtext.defaultField\" />\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngFor=\"let prop of getProperties().elementProps\">\n <div class=\"form-group\">\n <label *ngIf=\"prop.type !== 'checkbox' && prop.type !== 'subQuestion'\" class=\"text-sm\">{{ prop.label\n }}</label>\n\n <!-- Text Input -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"headerSelect ? pdf.title : (selectedElement?.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key))\"\n (input)=\"headerSelect ? updateTitle($event.target.value) : (selectedElement?.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event.target.value) ) : setValueByPath(prop.key, $event.target.value))\"\n [class.read-only]=\"selectedElement.readOnly\" [readonly]=\"selectedElement.readOnly\" />\n\n <!-- questionNumber -->\n <input *ngIf=\"prop.key === 'questionNumber'\" type=\"number\" [value]=\"selectedElement.questionNumber\"\n (input)=\"setValueByPath('questionNumber', $event.target.value)\" />\n\n <!-- file -->\n <!-- Add this inside the elementProps loop where other inputs are rendered -->\n <select *ngIf=\"prop.type === 'select' && prop.key === 'supportType'\" [value]=\"selectedElement[prop.key]\"\n (change)=\"setValueByPath(prop.key, $event.target.value)\">\n <option value=\"\">Select file category</option>\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\"> {{ option.label }} </option>\n </select>\n\n <div *ngIf=\"prop.type === 'checkbox'\">\n\n <input type=\"checkbox\"\n [checked]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ): getValueByPath(prop.key) \"\n (change)=\" selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : onToggleChange(prop.key, $event) ) : onToggleChange(prop.key, $event)\" />\n <span class=\"toggle-label\" style=\"padding-left: 10px;\">{{ prop.label }}</span>\n\n </div>\n <!-- SKS20MAR25 Subquestion Type -->\n <div *ngIf=\"prop.type === 'subQuestion'\">\n <div style=\"display: flex; flex-direction: row; gap: 10px; align-items: center;\">\n <div>{{ prop.label }}</div>\n <input type=\"checkbox\"\n [checked]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ): getValueByPath(prop.key) \"\n (change)=\" selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : onToggleChange(prop.key, $event) ) : onToggleChange(prop.key, $event)\" />\n </div>\n <!-- SKS20MAR25 Render subquestions when checkbox is checked -->\n <div\n *ngIf=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ): getValueByPath(prop.key)\">\n <div *ngFor=\"let subProp of prop.subQuestion\"\n style=\"background-color: #e7f2ff; padding: 8px; border-radius: 4px;\">\n <div class=\"form-group\">\n <label>{{ subProp.label }}</label>\n <div *ngIf=\"subProp.type === 'array'\">\n <!-- Iterate over filtered columns to display checkboxes -->\n <div *ngFor=\"let column of filteredColumns\">\n <label>\n <input type=\"checkbox\"\n [checked]=\"subProp.operands ? subProp.operands.includes(column.apiName) : false\"\n (change)=\"onCheckboxChange(subProp.targetArray,subProp.targetArrayKey,subProp.key, column.apiName, $event.target.checked)\">\n {{ column.apiName }}\n </label>\n </div>\n </div>\n <!-- SKS21MAR25 New radio type -->\n <div *ngIf=\"subProp.type === 'radio'\">\n <div *ngFor=\"let column of filteredColumns\">\n <label>\n <input type=\"radio\" [name]=\"subProp.key\" [value]=\"column.apiName\"\n [checked]=\"getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key) === column.apiName\"\n (change)=\"onRadioChange(subProp.targetArray, subProp.targetArrayKey, subProp.key, column.apiName)\">\n {{ column.apiName }}\n </label>\n </div>\n </div>\n <!-- SKS20MAR25 Add more subproperty types as needed -->\n <!-- Inside the subProp ngFor loop -->\n <input *ngIf=\"subProp.type === 'text'\" type=\"text\" [placeholder]=\"subProp.placeholder\"\n [value]=\"selectedElement.type === 'Table' ? (subProp.targetArray ? getValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key ) : getValueByPath(subProp.key) ) : getValueByPath(subProp.key)\"\n (input)=\"selectedElement.type === 'Table' ? (subProp.targetArray ? updateValueByArrayPath(subProp.targetArray, subProp.targetArrayKey, selectColumn, subProp.key, $event) : setValueByPath(subProp.key, $event.target.value) ) : setValueByPath(subProp.key, $event.target.value)\" />\n\n <input *ngIf=\"subProp.type === 'boolean'\" type=\"checkbox\" [checked]=\"getValueByPath(subProp.key)\"\n (change)=\"setValueByPath(subProp.key, $event.target.checked)\" />\n <select *ngIf=\"subProp.type === 'select'\" [value]=\"getValueByPath(subProp.key)\"\n (change)=\"setValueByPath(subProp.key, $event.target.value)\">\n <option *ngFor=\"let option of subProp.options\" [value]=\"option\">{{ option }}</option>\n </select>\n <input *ngIf=\"subProp.type === 'checkbox'\" type=\"checkbox\" [checked]=\"getValueByPath(subProp.key)\"\n (change)=\"setValueByPath(subProp.key, $event.target.checked)\" />\n </div>\n </div>\n </div>\n </div>\n\n <!-- SKS20MAR25 Text Align Buttons -->\n <div *ngIf=\"prop.type === 'align'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onAlignSelect(option.value)\"\n [class.active]=\"selectedElement?.textAlign === option.value\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <div *ngIf=\"prop.type === 'style'\">\n <button *ngFor=\"let option of prop.options\" (click)=\"onStyleSelect(option.value)\"\n [class.active]=\"isStyleActive(option.value)\" [title]=\"option.value\">\n <img [src]=\"'../assets/icons/' + option.icon + '.svg'\" [alt]=\"option.value\" class=\"icon-size\" />\n </button>\n </div>\n\n <!-- Field Size Controls -->\n <!-- Change key width -->\n <div *ngIf=\"prop.key === 'width'\" [ngClass]=\"{'flex-container': true, 'custom-active': selectedElement?.width !== '*' && selectedElement?.width !== 'auto'}\">\n <select\n class=\"size-select\"\n [value]=\"selectedElement?.width === '*' ? 'Default' : selectedElement?.width === 'auto' ? 'Auto' : 'Custom'\"\n (change)=\"onWidthSelect(\n $event.target.value === 'Default' ? '*' :\n $event.target.value === 'Auto' ? 'auto' : 'custom'\n )\">\n <option value=\"Default\">Default</option>\n <option value=\"Auto\">Auto</option>\n <option value=\"Custom\">Custom</option>\n </select>\n \n <input\n *ngIf=\"selectedElement?.width !== '*' && selectedElement?.width !== 'auto'\"\n type=\"number\"\n class=\"size-input\"\n min=\"1\"\n max=\"100\"\n [value]=\"selectedElement?.width\"\n (input)=\"setValueByPath(\n 'width',\n $event.target.valueAsNumber < 1 ? 1 :\n $event.target.valueAsNumber > 100 ? 100 :\n $event.target.valueAsNumber\n )\" />\n </div> \n\n <!-- Line Properties -->\n <!-- Padding Top -->\n <div *ngIf=\"prop.key === 'paddingTop'\">\n <input type=\"number\" [placeholder]=\"prop.placeholder\" [value]=\"selectedElement?.paddingTop\"\n (input)=\"setValueByPath('paddingTop', $event.target.value)\" />\n </div>\n\n <!-- Padding Bottom -->\n <div *ngIf=\"prop.key === 'paddingBottom'\">\n <input type=\"number\" [placeholder]=\"prop.placeholder\" [value]=\"selectedElement?.paddingBottom\"\n (input)=\"setValueByPath('paddingBottom', $event.target.value)\" />\n </div>\n\n <!-- Line Style -->\n <div *ngIf=\"prop.key === 'lineStyle'\">\n <select [value]=\"selectedElement?.lineStyle\" (change)=\"setValueByPath('lineStyle', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\">{{ option }}</option>\n </select>\n </div>\n\n <!-- Color -->\n <div *ngIf=\"prop.key === 'color'\">\n <input type=\"color\" [value]=\"selectedElement?.color\"\n (input)=\"setValueByPath('color', $event.target.value)\" />\n </div>\n\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'property'\">\n <!-- Field Elements Properties -->\n <!-- Show elements ID -->\n <div *ngIf=\"getProperties()\">\n <label>Label Id</label>\n <div\n style=\"font-size: 13px; padding: 11px; border-radius: 5px; background-color: #f8f8f8; border: 1px solid #ddd;\">\n {{ headerSelect ? bookId : selectedElement.id }}</div>\n <ng-container *ngFor=\"let prop of getProperties().fieldProps\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n\n <!-- SKS21MAR25 Toggle Group -->\n <div *ngIf=\"prop.type === 'toggleGroup'\" class=\"toggle-group\">\n <div class=\"toggle-item\">\n <label class=\"toggle-label\">\n <input type=\"checkbox\" />\n Disabled\n </label>\n </div>\n </div>\n\n <!-- - handled options with UUID -->\n <div\n *ngIf=\"prop.type === 'dropdown' || prop.type === 'checkbox' || prop.type === 'radio' && prop.key === 'options'\"\n class=\"options-container\">\n\n <div class=\"option-list\" (dragover)=\"onDragOver($event)\" (drop)=\"onDrop($event, prop.key)\">\n <div *ngFor=\"let option of selectedElement[prop.key]\" class=\"option-items\" [attr.data-id]=\"option.id\"\n draggable=\"true\" (dragstart)=\"onDragStart($event, option.id)\">\n\n <input type=\"text\" [(ngModel)]=\"option.value\" placeholder=\"Option\" class=\"options\" />\n <img src=\"../assets/icons/Trash.svg\" (click)=\"removeOption(selectedElement[prop.key], option.id)\">\n <span class=\"drag-handle\">\u2630</span>\n </div>\n </div>\n\n <button (click)=\"addOption(selectedElement[prop.key])\">\n <div class=\"add-varient\">\n <span class=\"text-lg\">+</span>\n <span>Add</span>\n </div>\n </button>\n </div>\n\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"headerSelect ? pdf.title : (selectedElement?.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ) : getValueByPath(prop.key))\"\n (input)=\"headerSelect ? updateTitle($event.target.value) : (selectedElement?.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : setValueByPath(prop.key, $event.target.value) ) : setValueByPath(prop.key, $event.target.value))\"\n [class.read-only]=\"selectedElement.readOnly\" [readonly]=\"selectedElement.readOnly\" />\n\n <!-- Sub Questions Toggle -->\n <div *ngIf=\"prop.type === 'subQuestion'\">\n <div class=\"style-toggle-header\" (click)=\"toggleSubQuestion(prop)\">\n <div class=\"head-elements\">Sub Text</div>\n <img [src]=\"prop.isExpanded ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\"\n alt=\"Toggle Arrow\" class=\"arrow-icon\">\n </div>\n\n <!-- Render subquestions when arrow is down -->\n <div *ngIf=\"prop.isExpanded\" style=\"border: 1px solid #ddd; padding: 8px; border-radius: 4px;\">\n <div *ngFor=\"let subProp of prop.subQuestion\" class=\"sub-question-container\">\n <div class=\"form-group\">\n <label>{{ subProp.label }}</label>\n\n <input *ngIf=\"subProp.type === 'text'\" type=\"text\" [placeholder]=\"subProp.placeholder\"\n [value]=\"getValueByPath(subProp.key)\" (input)=\"setValueByPath(subProp.key, $event.target.value)\" />\n \n <!-- Render input field only if subProp.type is 'array' -->\n <input *ngIf=\"subProp.type === 'array'\" type=\"text\" [placeholder]=\"subProp.placeholder\"\n [value]=\"getValueByPath(subProp.key)\" (input)=\"setValueByPath(subProp.key, $event.target.value)\" />\n <!-- <input type=\"text\" [ngModel]=\"fieldAsString\" (ngModelChange)=\"updateField($event)\" /> -->\n\n <input *ngIf=\"subProp.type === 'boolean'\" type=\"checkbox\" [checked]=\"getValueByPath(subProp.key)\"\n (change)=\"setValueByPath(subProp.key, $event.target.checked)\" />\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"prop.type === 'checkbox'\">\n <span class=\"toggle-label\" style=\"padding-right: 10px;\">{{ prop.label }}</span>\n <input type=\"checkbox\"\n [checked]=\"selectedElement.type === 'Table' ? (prop.targetArray ? getValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key ) : getValueByPath(prop.key) ): getValueByPath(prop.key) \"\n (change)=\" selectedElement.type === 'Table' ? (prop.targetArray ? updateValueByArrayPath(prop.targetArray, prop.targetArrayKey, selectColumn, prop.key, $event) : onToggleChange(prop.key, $event) ) : onToggleChange(prop.key, $event)\" />\n\n </div>\n\n </div>\n </ng-container>\n\n <!-- SKS21MAR25 Move Style Outside the Loop -->\n <!-- Style Toggle -->\n <div class=\"style-toggle-header\" (click)=\"toggleStyleSection()\">\n <div class=\"head-elements\">Style</div>\n <img [src]=\"isStyleExpanded ? '../assets/icons/arrow-down.svg' : '../assets/icons/arrow-right.svg'\"\n alt=\"Toggle Arrow\" class=\"arrow-icon\">\n </div>\n\n <div *ngIf=\"isStyleExpanded\" style=\"border: 1px solid #ddd; padding: 8px; border-radius: 4px;\">\n <div class=\"form-group\">\n <div *ngFor=\"let key of getStyleKeys()\">\n <label>{{ key }}</label>\n <input type=\"text\" [(ngModel)]=\"selectedElement.style[key]\"\n (input)=\"setValueByPath('style.' + key, $event.target.value)\" placeholder=\"Enter {{ key }}\" />\n </div>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"tab-content\" *ngIf=\"activeTab === 'appearance'\">\n <div *ngIf=\"getProperties()\">\n <ng-container *ngFor=\"let prop of getProperties().appearance\">\n <div class=\"form-group\">\n <label class=\"text-sm\">{{ prop.label }}</label>\n <!-- Font Selection -->\n <div *ngIf=\"prop.key === 'font'\">\n <select *ngIf=\"prop.type === 'select'\" class=\"select-container\" [(ngModel)]=\"selectedElement.font\"\n (change)=\"setValueByPath('font', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n <!-- Input Box -->\n <input *ngIf=\"prop.type === 'text'\" type=\"text\" [placeholder]=\"prop.placeholder\"\n [value]=\"selectedElement[prop.key]\" (input)=\"setValueByPath(prop.key, $event.target.value)\" />\n\n<!-- Font Size -->\n<div *ngIf=\"prop.key === 'fontSize' && prop.type === 'number'\">\n <input type=\"number\" min=\"1\" max=\"100\" step=\"1\"\n [(ngModel)]=\"selectedElement.fontSize\"\n (change)=\"setValueByPath('fontSize', selectedElement.fontSize)\" />\n</div>\n <!-- Font Weight Selection -->\n <div *ngIf=\"prop.key === 'fontWeight'\">\n <select *ngIf=\"prop.type === 'select'\" [(ngModel)]=\"selectedElement[prop.key]\"\n (change)=\"setValueByPath(prop.key, $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n </div>\n\n <div class=\"flex-container\">\n <!-- Dropdown Box -->\n <div *ngIf=\"prop.type === 'dropdown'\" class=\"input-box-field\">\n <select [(ngModel)]=\"selectedElement[prop.key]\" (change)=\"setValueByPath(prop.key, $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </div>\n\n <!-- Color Picker -->\n <div *ngIf=\"prop.type === 'color'\" class=\"color-selector\">\n <input type=\"color\" [(ngModel)]=\"selectedElement.fontColor\"\n (change)=\"setValueByPath('fontColor', $event.target.value)\">\n </div>\n\n <!-- HEX Input Box -->\n <div *ngIf=\"prop.type === 'color'\" class=\"hex-input-container\">\n <span>HEX Code</span>\n <input type=\"text\" [(ngModel)]=\"selectedElement[prop.key]\"\n (change)=\"setValueByPath(prop.key, $event.target.value)\" />\n </div>\n </div>\n\n <!-- Font Style -->\n<div *ngIf=\"prop.key === 'fontStyle'\">\n <select [(ngModel)]=\"selectedElement.fontStyle\"\n (change)=\"setValueByPath('fontStyle', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n</div>\n\n<!-- margin: [0, 10, 0, 0] // [ left, top, right, bottom ] -->\n<div *ngIf=\"prop.key === 'margin'&& selectedElement?.margin\">\n <div class=\"margin-inputs\">\n <div>\n <label>Right</label>\n <input type=\"number\" [(ngModel)]=\"selectedElement.margin[1]\"\n (change)=\"setValueByPath('margin', selectedElement.margin)\" />\n </div>\n <div>\n <label>Bottom</label>\n <input type=\"number\" [(ngModel)]=\"selectedElement.margin[2]\"\n (change)=\"setValueByPath('margin', selectedElement.margin)\" />\n </div>\n <div>\n <label>Left</label>\n <input type=\"number\" [(ngModel)]=\"selectedElement.margin[3]\"\n (change)=\"setValueByPath('margin', selectedElement.margin)\" />\n </div>\n <div>\n <label>Top</label>\n <input type=\"number\" [(ngModel)]=\"selectedElement.margin[0]\"\n (change)=\"setValueByPath('margin', selectedElement.margin)\" />\n </div>\n </div>\n</div>\n\n <!-- TextAlign -->\n <div *ngIf=\"prop.key === 'alignItems'\">\n <select [(ngModel)]=\"selectedElement.alignItems\"\n (change)=\"setValueByPath('alignItems', $event.target.value)\">\n <option *ngFor=\"let option of prop.options\" [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n </div> \n\n </div>\n </ng-container>\n </div>\n </div>\n\n<!-- Default Save Button -->\n<div class=\"button-container\" *ngIf=\"!templateSelected\">\n <button class=\"cancel-btn\" (click)=\"onCancel()\">Cancel</button>\n <button class=\"save-btn\" (click)=\"handleButtonClick()\">Save</button>\n</div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap\";*{margin:0;padding:0;box-sizing:border-box;font-family:Roboto,sans-serif}.properties{height:calc(100vh - 20px);overflow-y:auto}.design-header{display:flex;justify-content:center;align-items:center;padding:15px 20px;background:#fff;border-radius:8px;box-shadow:0 2px 10px #0000001a;margin-bottom:20px}.header-title{font-size:20px;font-weight:400;color:#222}.all-properties details{background:#fff;border:1px solid #ddd;border-radius:8px;margin-bottom:12px;padding:12px;box-shadow:0 2px 8px #0000000d}.all-properties summary{font-size:15px;font-weight:400;cursor:pointer;padding:6px;transition:color .3s}.all-properties summary:hover{color:#007bff}.inner-content{padding:12px 0}.head-elements{font-size:14px;font-weight:500;color:#444}label{font-size:14px;font-weight:500;color:#444;margin-bottom:5px;display:block}input[type=text],input[type=number],select{width:100%;height:40px;padding:10px;font-size:14px;border:1px solid #ccc;border-radius:6px;outline:none;transition:.3s;background:#f8f8f8;text-align:left}input:focus,select:focus{border-color:#007bff;background:#fff;box-shadow:0 0 5px #007bff4d}button{padding:10px 15px;border:none;border-radius:6px;background:#007bff;color:#fff;font-size:15px;cursor:pointer;transition:.3s}button:hover{background:#0056b3;transform:translateY(-2px)}.toggle-group{display:flex;align-items:center;gap:20px}.toggle-item{display:flex;align-items:center;gap:10px}.switch{position:relative;width:42px;height:22px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#ccc;transition:.4s;border-radius:24px}.slider:before{position:absolute;content:\"\";height:20px;width:20px;left:1px;bottom:1px;background-color:#fff;transition:.4s;border-radius:50%}input:checked+.slider{background-color:#2196f3}input:checked+.slider:before{transform:translate(18px)}.radio-item{display:flex;align-items:center;gap:20px}.radio-item input{accent-color:#007bff}.options-container{display:flex;flex-direction:column;gap:12px}.options{width:100%}.field-size-controls{display:flex;align-items:center;gap:12px}.size-input{width:110px;text-align:center}.design-footer{display:flex;justify-content:space-between;margin-top:20px}.design-footer .btn{background:#007bff;color:#fff;padding:10px 18px;border-radius:6px;font-size:15px;transition:.3s}.design-footer .btn:hover{background:#0056b3}.input-container{display:flex;flex-direction:column;align-items:flex-start;gap:10px;width:100%}.subtext-textarea{width:100%;margin-left:auto}.container{width:100%;max-width:500px;margin:0 auto;background-color:#fff;box-shadow:0 2px 10px #0000001a;overflow:hidden;font-family:Arial,sans-serif}.tabs{display:flex;background-color:#f0f2f5;border-bottom:2px solid #0052cc}.tab{flex:1;padding:15px 10px;text-align:center;cursor:pointer}.tab.active{background-color:#0052cc;color:#fff;font-weight:700}.tab-content{padding:20px;max-height:77vh;overflow-y:auto;overflow-x:hidden}.form-group{margin-bottom:15px}label{display:flex;gap:16px;margin-bottom:8px;color:#666;font-size:14px}.required:before{content:\"*\";color:red;margin-right:3px}input[type=text],select{width:100%;padding:10px;border:1px solid #ddd;border-radius:4px;box-sizing:border-box;font-size:14px}.select-container{position:relative;width:100%}.dropdown-arrow{position:absolute;right:10px;top:50%;transform:translateY(-50%);pointer-events:none;color:#666;font-size:12px}.checkbox-row{display:flex;margin-bottom:10px}.checkbox-group{display:flex;align-items:center;margin-right:20px;min-width:120px}.checkbox-group input[type=checkbox]{margin-right:5px}.toggle-header{display:flex;align-items:center;justify-content:space-between;cursor:pointer;padding:10px}.arrow-icon{width:19px;height:23px;transition:transform .3s ease}.icon{display:inline-block;width:18px;height:18px;border-radius:50%;text-align:center;line-height:18px;color:#fff;font-size:12px;margin-left:5px}.edit-icon{background-color:#4caf50}.view-icon{background-color:#2196f3}.delete-icon{background-color:#f44336}.color-picker-row{display:flex;align-items:center}.color-picker-container{display:flex;align-items:center;border:1px solid #ddd;border-radius:4px;margin-right:10px}.color-box{width:30px;border:none;height:30px}.hex-label{color:#999;margin-right:5px}.hex-input{width:100px}.divider{border-top:1px dashed #ddd;margin:20px 0}.button-container{display:flex;padding:15px;background-color:#f9f9f9;border-top:1px solid #eee}.cancel-btn,.save-btn{padding:12px;border:none;border-radius:4px;cursor:pointer;font-weight:700}.cancel-btn{flex:1;background-color:#fff;color:#666;border:1px solid #ddd;margin-right:10px}.cancel-btn:hover{background-color:#0052cc!important;color:#fff!important}.save-btn{flex:1;background-color:#0052cc;color:#fff}.toggle-group{display:grid;grid-template-columns:1fr 1fr;gap:10px}.toggle-item{display:flex;align-items:center;padding:8px}textarea{width:100%;min-height:55px;padding:8px;border:1px solid #ccc;border-radius:5px;font-size:14px;resize:vertical}.flex-container{display:flex;align-items:center;gap:12px;margin-bottom:1rem}.input-box-field select{background-color:#28343e;color:#fff;border:none;padding:10px 14px;border-radius:6px;appearance:none;-webkit-appearance:none;-moz-appearance:none;position:relative;font-size:14px;font-family:inherit}.input-box-field{position:relative}.input-box-field select::-ms-expand{display:none}.input-box-field:after{content:\"\\25bc\";position:absolute;top:50%;right:10px;transform:translateY(-50%);color:#1c1b1f;pointer-events:none;font-size:10px}.color-selector input[type=color]{width:78px;height:40px;border-radius:4px;background:none;cursor:pointer}.hex-input-container{display:flex;font-size:12px;gap:20px;color:#b0b0b0;align-items:center}.hex-input-container span{font-size:14px;margin-top:10px}.hex-input-container input[type=text]{padding:10px 12px;border:1px solid #d1d1d1;border-radius:6px;font-size:14px;width:120px;color:#28343e}input{width:auto}@media screen and (max-width: 1099px){.container{height:calc(100vh - 20px);min-height:calc(100vh - 20px)}.tabs{flex-direction:column}.tab{flex:1;padding:1rem;font-size:.9rem;text-align:center}.form-group{flex-direction:column}}@media screen and (max-width: 768px){.container{height:calc(100vh - 20px) h;min-height:calc(100vh - 20px)}.tabs{flex-direction:column}.tab{flex:1;padding:1rem;font-size:.9rem;text-align:center}.form-group{flex-direction:column}}@media screen and (max-width: 480px){.container{padding:0 10px}.tabs{flex-direction:column}.tab{flex:1;padding:1rem;border-bottom:1px solid #dee2e6}input[type=text],input[type=number],select,textarea{font-size:.9rem}}@media screen and (max-width: 768px){.tab-content[aria-label=attributes] .form-group,.tab-content[aria-label=property] .form-group,.tab-content[aria-label=appearance] .form-group{grid-template-columns:1fr}.toggle-group{flex-direction:column;align-items:flex-start}}.logo-icon{width:20px;height:20px;display:flex;justify-content:center;background-color:#d0d9ff;border-radius:4px}.link-icon{background-color:#e7f2ff;padding:5px;border-radius:5px;margin:5px;display:inline-block;cursor:pointer;position:relative;transition:background-color .3s,transform .2s}.link-icon:hover{background-color:#d0e5ff}.link-icon:active{background-color:#a8d0ff}.link-dropdown-menu{position:absolute;top:100%;right:0;background:#fff;border:1px solid #ccc;padding:10px;width:200px;box-shadow:0 4px 6px #0000001a}.link-dropdown-menu input{width:100%;margin-bottom:5px;padding:5px;border:1px solid #ccc;border-radius:3px}.option-items{display:flex;align-items:center;padding:5px;border:1px solid #ccc;margin-bottom:10px;cursor:grab;background:#fff}.drag-handle{margin-left:10px;cursor:grab}.option-items:active{opacity:.5}.style-toggle-header{display:flex;justify-content:space-between;align-items:center;background-color:#f8f8f8;border:1px solid #ddd;padding:10px;border-radius:6px;cursor:pointer;margin-bottom:6px}.button-toggle-wrapper{margin-top:8px}.toggle-button{padding:8px 16px;border:1px solid #cbd2d9;border-radius:6px;font-size:14px;cursor:pointer;transition:all .2s ease-in-out}.toggle-button.active:hover{background-color:#2c6dd5}.flex-container{display:flex;gap:8px;align-items:center}.size-select{transition:width .3s ease;width:100%;max-width:200px}.flex-container.custom-active .size-select{max-width:100px}.size-input{width:60px}.margin-inputs{display:flex;gap:15px;margin-top:5px}.margin-inputs>div{display:flex;flex-direction:column;width:60px}.margin-inputs label{font-size:12px;margin-bottom:3px}.pdf-actions-container{width:100%;max-width:400px;padding:10px}.pdf-action-card{background-color:#fff;border-radius:6px;padding:9px;box-shadow:0 2px 6px #0000001a;display:flex;flex-direction:column;gap:10px}.pdf-btn{display:flex;align-items:center;justify-content:center;gap:8px;padding:10px;background-color:#6c757d;color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:14px;transition:background-color .2s}.pdf-btn:hover{background-color:#5a6268}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id", "readOnly", "mode", "filterName"], outputs: ["searchValueChange"] }, { 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"] }] });
1107
1107
  }
1108
1108
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PdfPropertiesComponent, decorators: [{
1109
1109
  type: Component,
@@ -1123,4 +1123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1123
1123
  type: HostListener,
1124
1124
  args: ['document:click', ['$event']]
1125
1125
  }] } });
1126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXByb3BlcnRpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL3BkZkRlc2lnbmVyL3BkZi1wcm9wZXJ0aWVzL3BkZi1wcm9wZXJ0aWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9wZGZEZXNpZ25lci9wZGYtcHJvcGVydGllcy9wZGYtcHJvcGVydGllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDekYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUVBQXFFLENBQUM7Ozs7Ozs7QUFVNUcsTUFBTSxPQUFPLHNCQUFzQjtJQWtuQmI7SUFBMEI7SUFBK0M7SUFobkJuRixpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzVDLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDeEQsY0FBYyxHQUFXLEVBQUUsQ0FBQztJQUM1QixvQkFBb0IsR0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixtQkFBbUIsR0FBVyxFQUFFLENBQUM7SUFDMUMsYUFBYSxHQUFXLFlBQVksQ0FBQyxDQUFFLG9CQUFvQjtJQUMzRCxjQUFj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LElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN6Rix1REFBdUQ7WUFDdkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7d0dBL29DVSxzQkFBc0I7NEZBQXRCLHNCQUFzQix3YkNsQm5DLHM4M0JBcWVBLHczUkR2ZFksWUFBWSw2VkFBRSxXQUFXLGtpREFBRSxrQkFBa0IsK0tBQUUscUJBQXFCOzs0RkFJbkUsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixDQUFDOzhJQU1yRSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdFLG1CQUFtQjtzQkFBM0IsS0FBSztnQkF3Q0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVvQyxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBbWpDeEMsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDcm9wcGVyUG9zaXRpb24sIERpbWVuc2lvbnMsIEltYWdlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGRmRGVzaWduZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGRmLWRlc2lnbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3NlYXJjaC1ib3gvc2VhcmNoLWJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW1hZ2VDcm9wcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyL2NvbXBvbmVudC9pbWFnZS1jcm9wcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZW1wbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90ZW1wbGF0ZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBkZi1wcm9wZXJ0aWVzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFNlYXJjaEJveENvbXBvbmVudCwgSW1hZ2VDcm9wcGVyQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3BkZi1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3BkZi1wcm9wZXJ0aWVzLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIFBkZlByb3BlcnRpZXNDb21wb25lbnQge1xuXG4gIEBPdXRwdXQoKSBmb3JtQnV0dG9uSGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdGVtcGxhdGVTYXZlSGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkRWxlbWVudEluZGV4OiBudW1iZXIgPSAtMTtcbiAgQElucHV0KCkgc2VsZWN0ZWRFbGVtZW50VHlwZTogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkQWxpZ246IHN0cmluZyA9ICdhbGlnbi1sZWZ0JzsgIC8vIEFkZCB0aGlzIHByb3BlcnR5XG4gIHNlbGVjdGVkU3R5bGVzOiBzdHJpbmdbXSA9IFtdOyAgLy8gVXNpbmcgYXJyYXkgc2luY2UgbXVsdGlwbGUgc3R5bGVzIGNhbiBiZSBzZWxlY3RlZFxuICBzZWxlY3RlZEVsZW1lbnQ6IGFueSA9IG51bGw7ICAvLyBSZWNlaXZlIHRoZSBzZWxlY3RlZCBlbGVtZW50XG4gIGhlYWRlclNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBib29rSWQ6IGFueTtcbiAgcGRmOiBhbnk7XG4gIGFjdGl2ZVRhYjogc3RyaW5nID0gJ2F0dHJpYnV0ZXMnO1xuICBzZWxlY3RDb2x1bW46IGFueVxuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge1xuICAgIHRyYW5zbGF0ZVVuaXQ6ICdweCcsXG4gICAgc2NhbGU6IDEsXG4gICAgcm90YXRlOiAwLFxuICAgIGZsaXBIOiBmYWxzZSxcbiAgICBmbGlwVjogZmFsc2UsXG4gICAgdHJhbnNsYXRlSDogMCxcbiAgICB0cmFuc2xhdGVWOiAwXG4gIH07XG4gIGNhbnZhc1JvdGF0aW9uID0gMDtcbiAgY3JvcHBlcj86IENyb3BwZXJQb3NpdGlvbjtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBjcm9wcGVyTWF4SGVpZ2h0ID0gMDtcbiAgY3JvcHBlck1heFdpZHRoID0gMDtcbiAgY3JvcHBlck1pbkhlaWdodCA9IDA7XG4gIGNyb3BwZXJNaW5XaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNXaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNIZWlnaHQgPSAwO1xuICBhc3BlY3RSYXRpbyA9IDQgLyAzO1xuICByb3VuZENyb3BwZXIgPSBmYWxzZTtcbiAgaW1hZ2VDaGFuZ2VkRXZlbnQ6IEV2ZW50IHwgbnVsbCA9IG51bGw7XG4gIGFsaWduSW1hZ2UgPSAnY2VudGVyJyBhcyBjb25zdDtcbiAgLy8gIFwiZW5kcG9pbnRcIjogXCJodHRwczovL2Rldi1hcGkudmFsYXJoci5jb20vbnh0XCIsXG4gIC8vIFNLUzI4TUFSMjUgZGVmYXVsdCBwZGYgc2VhcmNoIGVuZHBvaW50XG4gIGJvb2tTdWJ0ZXh0ID0ge1xuICAgIFwiZW5kcG9pbnRcIjogXCJodHRwczovLzJmOGU0NTIzLWJiNGUtNDlkOS1hMTdhLTM2M2FkNTc3YmI2MC5tb2NrLnBzdG1uLmlvL3BkZlwiLFxuICAgIFwidmFyaWFibGVcIjogbnVsbCxcbiAgICBcImZpZWxkXCI6IFsndGl0bGUnXSxcbiAgICBcImRlZmF1bHRGaWVsZFwiOiBcInRpdGxlXCJcbiAgfVxuICBpc0xpbmtEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdGVtcGxhdGVTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRyb3Bkb3duITogRWxlbWVudFJlZjtcblxuXG4gIGRyYWdnZWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHBkZkVsZW1lbnRzOiBhbnlbXSA9IFtdO1xuIFxuICB1bmlxdWVfaWQ6IHN0cmluZyA9ICdwZGYtMTIzNCc7IC8vIHNob3VsZCBiZSBjb25zaXN0ZW50XG4gIHNlbGVjdGVkVGVtcGxhdGU6IGFueTtcblxuICBlbGVtZW50UHJvcGVydGllcyA9IHtcbiAgICAvLyBBUC0xME1BUjI1IC0gRGVmaW5lcyB0aGUgSGVhZGVyIGVsZW1lbnQgd2l0aCBhIHRleHQgaW5wdXQgZmllbGQgICBcbiAgICAvLyBBUC0yNU1BUjI1IEFkZCBzdWJ0ZXh0IGFsbCB2YXJpYWJsZXNcbiAgICAnSGVhZGVyJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAndGl0bGUnIH1dXG4gICAgfSxcblxuICAgICd0ZXh0Jzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRWxlbWVudCcsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdxdWVzdGlvbk51bWJlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJ3dpZHRoJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3dpZHRoJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3ZhbHVlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlIEZpZWxkJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW50ZXIgVGV4dFwiLCBcInR5cGVcIjogXCJzdWJRdWVzdGlvblwiLCBcImtleVwiOiBcImlzU3ViVGV4dFwiLFxuICAgICAgICAgIFwic3ViUXVlc3Rpb25cIjogW1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGFwcGVhcmFuY2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnU2VsZWN0IEZvbnQnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udCcsIHBsYWNlaG9sZGVyOiAnTGVmdCcsXG4gICAgICAgICAgb3B0aW9uczogWydIZWx2ZXRpY2EgTmV1ZScsICdBcmlhbCcsICdUaW1lcyBOZXcgUm9tYW4nLCAnUm9ib3RvJ11cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZvbnQgQ29sb3InLCB0eXBlOiAnY29sb3InLCBrZXk6ICdmb250Q29sb3InLCB2YWx1ZTogJycgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRm9udCBTaXplJyxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJywgICAgXG4gICAgICAgICAga2V5OiAnZm9udFNpemUnLFxuICAgICAgICAgIHZhbHVlOiAxNCAgICAgICAgICBcbiAgICAgICAgfSwgICAgICAgIFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFdlaWdodCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250V2VpZ2h0JywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgdmFsdWU6ICc0MDAnLCBsYWJlbDogJzQwMC1Ob3JtYWwnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNTAwJywgbGFiZWw6ICc1MDAtTWVkaXVtJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzYwMCcsIGxhYmVsOiAnNjAwLVNlbWkgQm9sZCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc3MDAnLCBsYWJlbDogJzcwMC1Cb2xkJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFN0eWxlJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRTdHlsZScsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm9ybWFsJywgdmFsdWU6ICdub3JtYWwnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQm9sZCcsIHZhbHVlOiAnYm9sZCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdJdGFsaWMnLCB2YWx1ZTogJ2l0YWxpYycgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnTWFyZ2luJywgdHlwZTogJ21hcmdpblBpY2tlcicsIGtleTogJ21hcmdpbicsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdMZWZ0LCBUb3AsIFJpZ2h0LCBCb3R0b20nLFxuICAgICAgICAgIHZhbHVlOiBbMCwgMCwgMCwgMF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQWxpZ24gSXRlbScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdhbGlnbkl0ZW1zJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdMZWZ0JywgdmFsdWU6ICdsZWZ0JyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0NlbnRlcicsIHZhbHVlOiAnY2VudGVyJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ1JpZ2h0JywgdmFsdWU6ICdyaWdodCcgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgICAgXG4gICAgfSxcbiAgICAnaW5wdXQnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFbGVtZW50JywgdHlwZTogJ251bWJlcicsIGtleTogJ3F1ZXN0aW9uTnVtYmVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnd2lkdGgnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnd2lkdGgnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1ZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0Jywga2V5OiAndmFsdWUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UgRmllbGQnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsXCI6IFwiXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbnRlciBUZXh0XCIsIFwidHlwZVwiOiBcInN1YlF1ZXN0aW9uXCIsIFwia2V5XCI6IFwiaXNTdWJUZXh0XCIsXG4gICAgICAgICAgXCJzdWJRdWVzdGlvblwiOiBbXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgYXBwZWFyYW5jZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdTZWxlY3QgRm9udCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250JywgcGxhY2Vob2xkZXI6ICdMZWZ0JyxcbiAgICAgICAgICBvcHRpb25zOiBbJ0hlbHZldGljYSBOZXVlJywgJ0FyaWFsJywgJ1RpbWVzIE5ldyBSb21hbicsICdSb2JvdG8nXVxuICAgICAgICB9LFxuICAgICAgICB7IGxhYmVsOiAnRm9udCBDb2xvcicsIHR5cGU6ICdjb2xvcicsIGtleTogJ2ZvbnRDb2xvcicsIHZhbHVlOiAnJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFNpemUnLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInLCAgICBcbiAgICAgICAgICBrZXk6ICdmb250U2l6ZScsXG4gICAgICAgICAgdmFsdWU6IDE0ICAgICAgICAgIFxuICAgICAgICB9LCAgICAgICAgXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgV2VpZ2h0JywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRXZWlnaHQnLCB2YWx1ZTogJycsXG4gICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgeyB2YWx1ZTogJzQwMCcsIGxhYmVsOiAnNDAwLU5vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc1MDAnLCBsYWJlbDogJzUwMC1NZWRpdW0nIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNjAwJywgbGFiZWw6ICc2MDAtU2VtaSBCb2xkJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzcwMCcsIGxhYmVsOiAnNzAwLUJvbGQnIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgU3R5bGUnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udFN0eWxlJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdOb3JtYWwnLCB2YWx1ZTogJ25vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdCb2xkJywgdmFsdWU6ICdib2xkJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0l0YWxpYycsIHZhbHVlOiAnaXRhbGljJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdNYXJnaW4nLCB0eXBlOiAnbWFyZ2luUGlja2VyJywga2V5OiAnbWFyZ2luJyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0xlZnQsIFRvcCwgUmlnaHQsIEJvdHRvbScsXG4gICAgICAgICAgdmFsdWU6IFswLCAwLCAwLCAwXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBbGlnbiBJdGVtJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2FsaWduSXRlbXMnLCB2YWx1ZTogJycsXG4gICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ0xlZnQnLCB2YWx1ZTogJ2xlZnQnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQ2VudGVyJywgdmFsdWU6ICdjZW50ZXInIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnUmlnaHQnLCB2YWx1ZTogJ3JpZ2h0JyB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgICBcbiAgICB9LFxuICAgICdkYXRlJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRWxlbWVudCcsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdxdWVzdGlvbk51bWJlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJ3dpZHRoJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3dpZHRoJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3ZhbHVlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlIEZpZWxkJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW50ZXIgVGV4dFwiLCBcInR5cGVcIjogXCJzdWJRdWVzdGlvblwiLCBcImtleVwiOiBcImlzU3ViVGV4dFwiLFxuICAgICAgICAgIFwic3ViUXVlc3Rpb25cIjogW1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGFwcGVhcmFuY2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnU2VsZWN0IEZvbnQnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udCcsIHBsYWNlaG9sZGVyOiAnTGVmdCcsXG4gICAgICAgICAgb3B0aW9uczogWydIZWx2ZXRpY2EgTmV1ZScsICdBcmlhbCcsICdUaW1lcyBOZXcgUm9tYW4nLCAnUm9ib3RvJ11cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZvbnQgQ29sb3InLCB0eXBlOiAnY29sb3InLCBrZXk6ICdmb250Q29sb3InLCB2YWx1ZTogJycgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRm9udCBTaXplJyxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJywgICAgXG4gICAgICAgICAga2V5OiAnZm9udFNpemUnLFxuICAgICAgICAgIHZhbHVlOiAxNCAgICAgICAgICBcbiAgICAgICAgfSwgICAgICAgIFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFdlaWdodCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250V2VpZ2h0JywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgdmFsdWU6ICc0MDAnLCBsYWJlbDogJzQwMC1Ob3JtYWwnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNTAwJywgbGFiZWw6ICc1MDAtTWVkaXVtJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzYwMCcsIGxhYmVsOiAnNjAwLVNlbWkgQm9sZCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc3MDAnLCBsYWJlbDogJzcwMC1Cb2xkJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFN0eWxlJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRTdHlsZScsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm9ybWFsJywgdmFsdWU6ICdub3JtYWwnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQm9sZCcsIHZhbHVlOiAnYm9sZCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdJdGFsaWMnLCB2YWx1ZTogJ2l0YWxpYycgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnTWFyZ2luJywgdHlwZTogJ21hcmdpblBpY2tlcicsIGtleTogJ21hcmdpbicsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdMZWZ0LCBUb3AsIFJpZ2h0LCBCb3R0b20nLFxuICAgICAgICAgIHZhbHVlOiBbMCwgMCwgMCwgMF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQWxpZ24gSXRlbScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdhbGlnbkl0ZW1zJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdMZWZ0JywgdmFsdWU6ICdsZWZ0JyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0NlbnRlcicsIHZhbHVlOiAnY2VudGVyJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ1JpZ2h0JywgdmFsdWU6ICdyaWdodCcgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgICAgXG4gICAgfSxcbiAgICAnUGRmJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbICAgXG4gICAgICAgIHsgbGFiZWw6ICdFbGVtZW50JywgdHlwZTogJ251bWJlcicsIGtleTogJ3F1ZXN0aW9uTnVtYmVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnd2lkdGgnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnd2lkdGgnIH1cbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3ZhbHVlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlIEZpZWxkJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW50ZXIgVGV4dFwiLCBcInR5cGVcIjogXCJzdWJRdWVzdGlvblwiLCBcImtleVwiOiBcImlzU3ViVGV4dFwiLFxuICAgICAgICAgIFwic3ViUXVlc3Rpb25cIjogW1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGFwcGVhcmFuY2U6IFtdXG4gICAgfSxcbiAgICAvLyBBUC0xOU1BUjI1IEFkZCBMaW5lIFByb3BlcnR5XG4gICAgJ0xpbmUnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xpbmUgV2lkdGgnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnd2lkdGgnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQYWRkaW5nIFRvcCcsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdwYWRkaW5nVG9wJywgcGxhY2Vob2xkZXI6ICdFbnRlciBwYWRkaW5nIHRvcCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BhZGRpbmcgQm90dG9tJywgdHlwZTogJ251bWJlcicsIGtleTogJ3BhZGRpbmdCb3R0b20nLCBwbGFjZWhvbGRlcjogJ0VudGVyIHBhZGRpbmcgYm90dG9tJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdMaW5lIFN0eWxlJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2xpbmVTdHlsZScsXG4gICAgICAgICAgb3B0aW9uczogWydTb2xpZCcsICdEYXNoZWQnLCAnRG90dGVkJ11cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtdLFxuICAgICAgYXBwZWFyYW5jZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdTZWxlY3QgRm9udCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250JywgcGxhY2Vob2xkZXI6ICdMZWZ0JyxcbiAgICAgICAgICBvcHRpb25zOiBbJ0hlbHZldGljYSBOZXVlJywgJ0FyaWFsJywgJ1RpbWVzIE5ldyBSb21hbicsICdSb2JvdG8nXVxuICAgICAgICB9LFxuICAgICAgICB7IGxhYmVsOiAnRm9udCBDb2xvcicsIHR5cGU6ICdjb2xvcicsIGtleTogJ2ZvbnRDb2xvcicsIHZhbHVlOiAnJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFNpemUnLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInLCAgICBcbiAgICAgICAgICBrZXk6ICdmb250U2l6ZScsXG4gICAgICAgICAgdmFsdWU6IDE0ICAgICAgICAgIFxuICAgICAgICB9LCAgICAgICAgXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgV2VpZ2h0JywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRXZWlnaHQnLCB2YWx1ZTogJycsXG4gICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgeyB2YWx1ZTogJzQwMCcsIGxhYmVsOiAnNDAwLU5vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc1MDAnLCBsYWJlbDogJzUwMC1NZWRpdW0nIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNjAwJywgbGFiZWw6ICc2MDAtU2VtaSBCb2xkJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzcwMCcsIGxhYmVsOiAnNzAwLUJvbGQnIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgU3R5bGUnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udFN0eWxlJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdOb3JtYWwnLCB2YWx1ZTogJ25vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdCb2xkJywgdmFsdWU6ICdib2xkJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0l0YWxpYycsIHZhbHVlOiAnaXRhbGljJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdNYXJnaW4nLCB0eXBlOiAnbWFyZ2luUGlja2VyJywga2V5OiAnbWFyZ2luJyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0xlZnQsIFRvcCwgUmlnaHQsIEJvdHRvbScsXG4gICAgICAgICAgdmFsdWU6IFswLCAwLCAwLCAwXVxuICAgICAgICB9LFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgbGFiZWw6ICdBbGlnbiBJdGVtJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2FsaWduSXRlbXMnLCB2YWx1ZTogJycsXG4gICAgICAgIC8vICAgb3B0aW9uczogW1xuICAgICAgICAvLyAgICAgeyBsYWJlbDogJ0xlZnQnLCB2YWx1ZTogJ2xlZnQnIH0sXG4gICAgICAgIC8vICAgICB7IGxhYmVsOiAnQ2VudGVyJywgdmFsdWU6ICdjZW50ZXInIH0sXG4gICAgICAgIC8vICAgICB7IGxhYmVsOiAnUmlnaHQnLCB2YWx1ZTogJ3JpZ2h0JyB9XG4gICAgICAgIC8vICAgXVxuICAgICAgICAvLyB9XG4gICAgICBdXG4gICAgICBcbiAgICB9LFxuXG4gICAgJ1NwYWNlJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdFbGVtZW50JywgdHlwZTogJ251bWJlcicsIGtleTogJ3F1ZXN0aW9uTnVtYmVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICd3aWR0aCcgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXSxcbiAgICAgIGFwcGVhcmFuY2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnU2VsZWN0IEZvbnQnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udCcsIHBsYWNlaG9sZGVyOiAnTGVmdCcsXG4gICAgICAgICAgb3B0aW9uczogWydIZWx2ZXRpY2EgTmV1ZScsICdBcmlhbCcsICdUaW1lcyBOZXcgUm9tYW4nLCAnUm9ib3RvJ11cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZvbnQgQ29sb3InLCB0eXBlOiAnY29sb3InLCBrZXk6ICdmb250Q29sb3InLCB2YWx1ZTogJycgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRm9udCBTaXplJyxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJywgICAgXG4gICAgICAgICAga2V5OiAnZm9udFNpemUnLFxuICAgICAgICAgIHZhbHVlOiAxNCAgICAgICAgICBcbiAgICAgICAgfSwgICAgICAgIFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFdlaWdodCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250V2VpZ2h0JywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgdmFsdWU6ICc0MDAnLCBsYWJlbDogJzQwMC1Ob3JtYWwnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNTAwJywgbGFiZWw6ICc1MDAtTWVkaXVtJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzYwMCcsIGxhYmVsOiAnNjAwLVNlbWkgQm9sZCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc3MDAnLCBsYWJlbDogJzcwMC1Cb2xkJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFN0eWxlJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRTdHlsZScsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm9ybWFsJywgdmFsdWU6ICdub3JtYWwnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQm9sZCcsIHZhbHVlOiAnYm9sZCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdJdGFsaWMnLCB2YWx1ZTogJ2l0YWxpYycgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnTWFyZ2luJywgdHlwZTogJ21hcmdpblBpY2tlcicsIGtleTogJ21hcmdpbicsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdMZWZ0LCBUb3AsIFJpZ2h0LCBCb3R0b20nLFxuICAgICAgICAgIHZhbHVlOiBbMCwgMCwgMCwgMF1cbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiAnQWxpZ24gSXRlbScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdhbGlnbkl0ZW1zJywgdmFsdWU6ICcnLFxuICAgICAgICAvLyAgIG9wdGlvbnM6IFtcbiAgICAgICAgLy8gICAgIHsgbGFiZWw6ICdMZWZ0JywgdmFsdWU6ICdsZWZ0JyB9LFxuICAgICAgICAvLyAgICAgeyBsYWJlbDogJ0NlbnRlcicsIHZhbHVlOiAnY2VudGVyJyB9LFxuICAgICAgICAvLyAgICAgeyBsYWJlbDogJ1JpZ2h0JywgdmFsdWU6ICdyaWdodCcgfVxuICAgICAgICAvLyAgIF1cbiAgICAgICAgLy8gfVxuICAgICAgXVxuICAgICAgXG4gICAgfSxcblxuICAgIFwiVGFibGVcIjoge1xuICAgICAgXCJlbGVtZW50UHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJyb3dDaG9pY2VcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwicm93Q2hvaWNlXCIgfSxcbiAgICAgICAgeyBsYWJlbDogJ3F1ZXN0aW9uTnVtYmVyJywgdHlwZTogJ251bWJlcicsIGtleTogJ3F1ZXN0aW9uTnVtYmVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnVGFibGUgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICd3aWR0aCcgfSxcbiAgICAgIF0sXG4gICAgICBcImZpZWxkUHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJ0YWJlbElkXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBfVGFiZWxfMDFcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmVsSWRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJ2YWx1ZVwiLCBcInBsYWNlaG9sZGVyXCI6IFwiVmFsdWVcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInZhbHVlXCIgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVudGVyIFRleHRcIiwgXCJ0eXBlXCI6IFwic3ViUXVlc3Rpb25cIiwgXCJrZXlcIjogXCJpc1N1YlRleHRcIixcbiAgICAgICAgICBcInN1YlF1ZXN0aW9uXCI6IFtcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYXBwZWFyYW5jZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdTZWxlY3QgRm9udCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250JywgcGxhY2Vob2xkZXI6ICdMZWZ0JyxcbiAgICAgICAgICBvcHRpb25zOiBbJ0hlbHZldGljYSBOZXVlJywgJ0FyaWFsJywgJ1RpbWVzIE5ldyBSb21hbicsICdSb2JvdG8nXVxuICAgICAgICB9LFxuICAgICAgICB7IGxhYmVsOiAnRm9udCBDb2xvcicsIHR5cGU6ICdjb2xvcicsIGtleTogJ2ZvbnRDb2xvcicsIHZhbHVlOiAnJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFNpemUnLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInLCAgICBcbiAgICAgICAgICBrZXk6ICdmb250U2l6ZScsXG4gICAgICAgICAgdmFsdWU6IDE0ICAgICAgICAgIFxuICAgICAgICB9LCAgICAgICAgXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgV2VpZ2h0JywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRXZWlnaHQnLCB2YWx1ZTogJycsXG4gICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgeyB2YWx1ZTogJzQwMCcsIGxhYmVsOiAnNDAwLU5vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc1MDAnLCBsYWJlbDogJzUwMC1NZWRpdW0nIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNjAwJywgbGFiZWw6ICc2MDAtU2VtaSBCb2xkJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzcwMCcsIGxhYmVsOiAnNzAwLUJvbGQnIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgU3R5bGUnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udFN0eWxlJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdOb3JtYWwnLCB2YWx1ZTogJ25vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdCb2xkJywgdmFsdWU6ICdib2xkJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0l0YWxpYycsIHZhbHVlOiAnaXRhbGljJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdNYXJnaW4nLCB0eXBlOiAnbWFyZ2luUGlja2VyJywga2V5OiAnbWFyZ2luJyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0xlZnQsIFRvcCwgUmlnaHQsIEJvdHRvbScsXG4gICAgICAgICAgdmFsdWU6IFswLCAwLCAwLCAwXVxuICAgICAgICB9LFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgbGFiZWw6ICdBbGlnbiBJdGVtJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2FsaWduSXRlbXMnLCB2YWx1ZTogJycsXG4gICAgICAgIC8vICAgb3B0aW9uczogW1xuICAgICAgICAvLyAgICAgeyBsYWJlbDogJ0xlZnQnLCB2YWx1ZTogJ2xlZnQnIH0sXG4gICAgICAgIC8vICAgICB7IGxhYmVsOiAnQ2VudGVyJywgdmFsdWU6ICdjZW50ZXInIH0sXG4gICAgICAgIC8vICAgICB7IGxhYmVsOiAnUmlnaHQnLCB2YWx1ZTogJ3JpZ2h0JyB9XG4gICAgICAgIC8vICAgXVxuICAgICAgICAvLyB9XG4gICAgICBdXG4gICAgICBcbiAgICB9LFxuXG4gICAgXCJUYWJsZUNvbHVtblwiOiB7XG4gICAgICBcImVsZW1lbnRQcm9wc1wiOiBbXG5cbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGVhZGVyTGFiZWxzXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBsb3llZSBEZXRhaWxzXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJ0YXJnZXRBcnJheVwiOiBcImZpZWxkc01ldGFcIiwgXCJ0YXJnZXRBcnJheUtleVwiOiBcInVuaXF1ZUlkZW50aWZpZXJcIiwgXCJrZXlcIjogXCJsYWJlbFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImFwaU5hbWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcImFwaU5hbWVcIiB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsXCI6IFwiU3VtbWFyeSBDb2x1bW5cIiwgXCJwbGFjZWhvbGRlclwiOiBcIlN1bW1hcnkgQ29sdW1uXCIsIFwidHlwZVwiOiBcInN1YlF1ZXN0aW9uXCIsIFwidGFyZ2V0QXJyYXlcIjogXCJmaWVsZHNNZXRhXCIsIFwidGFyZ2V0QXJyYXlLZXlcIjogXCJ1bmlxdWVJZGVudGlmaWVyXCIsIFwia2V5XCI6IFwic3VtbWFyeUNvbHVtblwiLFxuICAgICAgICAgIFwic3ViUXVlc3Rpb25cIjogW1xuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwiVHlwZVwiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW1wbG95ZWUgRGV0YWlsc1wiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwidGFyZ2V0QXJyYXlcIjogXCJmaWVsZHNNZXRhXCIsIFwidGFyZ2V0QXJyYXlLZXlcIjogXCJ1bmlxdWVJZGVudGlmaWVyXCIsIFwia2V5XCI6IFwiZmxkVHlwZVwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJPcGVyYXRpb25cIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcIm9wZXJhdGlvblwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJPcGVyYW5kc1wiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW1wbG95ZWUgRGV0YWlsc1wiLCBcInR5cGVcIjogXCJhcnJheVwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcIm9wZXJhbmRzXCIgfSxcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsXCI6IFwiU3VtbWFyeSBSb3dcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlN1bW1hcnkgUm93XCIsIFwidHlwZVwiOiBcInN1YlF1ZXN0aW9uXCIsIFwidGFyZ2V0QXJyYXlcIjogXCJmaWVsZHNNZXRhXCIsIFwidGFyZ2V0QXJyYXlLZXlcIjogXCJ1bmlxdWVJZGVudGlmaWVyXCIsIFwia2V5XCI6IFwic3VtbWFyeVJvd1wiLCBcInN1YlF1ZXN0aW9uXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcIlR5cGVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcImZsZFR5cGVcIiB9LFxuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwib3BlcmF0aW9uXCIsIFwicGxhY2Vob2xkZXJcIjogXCJvcGVyYXRpb25cIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcIm9wZXJhdGlvblwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJjb2x1bW5cIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwicmFkaW9cIiwgXCJ0YXJnZXRBcnJheVwiOiBcImZpZWxkc01ldGFcIiwgXCJ0YXJnZXRBcnJheUtleVwiOiBcInVuaXF1ZUlkZW50aWZpZXJcIiwgXCJrZXlcIjogXCJjb2x1bW5cIiB9LFxuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwib3BlcmFuZHNcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwiYXJyYXlcIiwgXCJ0YXJnZXRBcnJheVwiOiBcImZpZWxkc01ldGFcIiwgXCJ0YXJnZXRBcnJheUtleVwiOiBcInVuaXF1ZUlkZW50aWZpZXJcIiwgXCJrZXlcIjogXCJvcGVyYW5kc1wiIH0sXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiTGVmdFwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaW5wdXRUZXh0QWxpZ25tZW50XCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwidGFibGVTY2FsZVNpemVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIjA2IC0gRnVsbCBTY2FsZVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwidGFibGVTY2FsZVNpemVcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJyb3dDaG9pY2VcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwicm93Q2hvaWNlXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJxdWlja0FjdGlvblRvb2xzXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInF1aWNrQWN0aW9uVG9vbHNcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImVkaXRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiZWRpdFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2aWV3XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcInZpZXdcIiB9LFxuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwiZGVsZXRlXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImRlbGV0ZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImFkZFJlY29yZEV2ZW50XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImFkZFJlY29yZEV2ZW50XCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJ0YWJsZVNjcm9sbEV2ZW50Q2hvaWNlXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInRhYmxlU2Nyb2xsRXZlbnRDaG9pY2VcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImhvcml6b250YWxcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiaG9yaXpvbnRhbFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2ZXJ0aWNhbFwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJ2ZXJ0aWNhbFwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcImZpZWxkUHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJ0YWJlbElkXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBfVGFiZWxfMDFcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmVsSWRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJpbnB1dFRleHRBbGlnbm1lbnRcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkxlZnRcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlcXVpcmVkRmllbGRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwicmVxdWlyZWRGaWVsZFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcIlJlYWQgT25seVwiLCBcInR5cGVcIjogXCJjaGVja2JveFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcImVkaXRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJoaWRlTGFiZWxcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiaGlkZUxhYmVsXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiZGlzYWJsZWRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiZGlzYWJsZWRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJoaWRlRWxlbWVudHNcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiaGlkZUVsZW1lbnRzXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwibWFza2luZ1wiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJtYXNraW5nXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwidmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlZhbHVlXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJ2YWx1ZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlZmVyZW5jZUFuY2hvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiaHR0cDovL3NvdXJjZS9yYW5nZXJueHRfYmlvX2RhdGEvNzQvZC5kb2NcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJlZmVyZW5jZUFuY2hvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImNvbnRyb2xsaW5nRWxlbWVudHNcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiY29udHJvbGxpbmdFbGVtZW50c1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlzRGVwZW5kZW5jZVwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJpc0RlcGVuZGVuY2VcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJuZXdMaW5lXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcIm5ld0xpbmVcIiB9XG4gICAgICBdLFxuICAgICAgXCJhcHBlYXJhbmNlXCI6IFtcbiAgICAgICAgeyBcImxhYmVsXCI6IFwic2VsZWN0Rm9udFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiTGVmdFwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwic2VsZWN0Rm9udFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImZvbnRDb2xvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiIzI4MzQzRVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiZm9udENvbG9yXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGV4Q29kZVwiLCBcInBsYWNlaG9sZGVyXCI6IFwiIzI4MzQzRVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaGV4Q29kZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImZvbnRTaXplXCIsIFwicGxhY2Vob2xkZXJcIjogXCIzMDAgLSBNZWRpdW1cIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImZvbnRTaXplXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiZm9udFdpZHRoXCIsIFwicGxhY2Vob2xkZXJcIjogXCJMZWZ0XCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJmb250V2lkdGhcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCJwbGFjZWhvbGRlclwiOiBcIiNFMkUyRTJcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImJhY2tncm91bmRDb2xvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJhY2tncm91bmRIZXhDb2RlXCIsIFwicGxhY2Vob2xkZXJcIjogXCIjRTJFMkUyXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJiYWNrZ3JvdW5kSGV4Q29kZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlZmVyZW5jZUFuY2hvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiaHR0cDovL3NvdXJjZS9yYW5nZXJueHRfYmlvX2RhdGEvNzQvZC5kb2NcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJlZmVyZW5jZUFuY2hvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJsYW5rU3BhY2VcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiYmxhbmtTcGFjZVwiIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgJ1RleHRBcmVhJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdFbGVtZW50JywgdHlwZTogJ251bWJlcicsIGtleTogJ3F1ZXN0aW9uTnVtYmVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnd2lkdGgnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnd2lkdGgnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1ZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0Jywga2V5OiAndmFsdWUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UgRmllbGQnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsXCI6IFwiXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbnRlciBUZXh0XCIsIFwidHlwZVwiOiBcInN1YlF1ZXN0aW9uXCIsIFwia2V5XCI6IFwiaXNTdWJUZXh0XCIsXG4gICAgICAgICAgXCJzdWJRdWVzdGlvblwiOiBbXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgYXBwZWFyYW5jZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdTZWxlY3QgRm9udCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250JywgcGxhY2Vob2xkZXI6ICdMZWZ0JyxcbiAgICAgICAgICBvcHRpb25zOiBbJ0hlbHZldGljYSBOZXVlJywgJ0FyaWFsJywgJ1RpbWVzIE5ldyBSb21hbicsICdSb2JvdG8nXVxuICAgICAgICB9LFxuXG4gICAgICAgIHsgbGFiZWw6ICdGb250IENvbG9yJywgdHlwZTogJ2NvbG9yJywga2V5OiAnZm9udENvbG9yJywgdmFsdWU6ICcnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgU2l6ZScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250U2l6ZScsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnU21hbGwnLCB2YWx1ZTogJzEycHgnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnTWVkaXVtJywgdmFsdWU6ICcxNHB4JyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0xhcmdlJywgdmFsdWU6ICcxNnB4JyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgV2lkdGgnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udFdlaWdodCcsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IHZhbHVlOiAnNDAwJywgbGFiZWw6ICc0MDAtTm9ybWFsJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzUwMCcsIGxhYmVsOiAnNTAwLU1lZGl1bScgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc2MDAnLCBsYWJlbDogJzYwMC1TZW1pIEJvbGQnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNzAwJywgbGFiZWw6ICc3MDAtQm9sZCcgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgLy8geyBsYWJlbDogJ0JhY2tncm91bmQgQ29sb3InLCB0eXBlOiAnY29sb3InLCBrZXk6ICdiYWNrZ3JvdW5kQ29sb3InLCB2YWx1ZTogJycgfSxcbiAgICAgICAgXG4gICAgICBdXG4gICAgfSxcblxuICAgICdpbWFnZSc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRWxlbWVudCcsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdxdWVzdGlvbk51bWJlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJ3dpZHRoJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3dpZHRoJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3ZhbHVlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlIEZpZWxkJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW50ZXIgVGV4dFwiLCBcInR5cGVcIjogXCJzdWJRdWVzdGlvblwiLCBcImtleVwiOiBcImlzU3ViVGV4dFwiLFxuICAgICAgICAgIFwic3ViUXVlc3Rpb25cIjogW1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGFwcGVhcmFuY2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnU2VsZWN0IEZvbnQnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udCcsIHBsYWNlaG9sZGVyOiAnTGVmdCcsXG4gICAgICAgICAgb3B0aW9uczogWydIZWx2ZXRpY2EgTmV1ZScsICdBcmlhbCcsICdUaW1lcyBOZXcgUm9tYW4nLCAnUm9ib3RvJ11cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZvbnQgQ29sb3InLCB0eXBlOiAnY29sb3InLCBrZXk6ICdmb250Q29sb3InLCB2YWx1ZTogJycgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRm9udCBTaXplJyxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJywgICAgXG4gICAgICAgICAga2V5OiAnZm9udFNpemUnLFxuICAgICAgICAgIHZhbHVlOiAxNCAgICAgICAgICBcbiAgICAgICAgfSwgICAgICAgIFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFdlaWdodCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250V2VpZ2h0JywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgdmFsdWU6ICc0MDAnLCBsYWJlbDogJzQwMC1Ob3JtYWwnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNTAwJywgbGFiZWw6ICc1MDAtTWVkaXVtJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzYwMCcsIGxhYmVsOiAnNjAwLVNlbWkgQm9sZCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc3MDAnLCBsYWJlbDogJzcwMC1Cb2xkJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFN0eWxlJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRTdHlsZScsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm9ybWFsJywgdmFsdWU6ICdub3JtYWwnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQm9sZCcsIHZhbHVlOiAnYm9sZCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdJdGFsaWMnLCB2YWx1ZTogJ2l0YWxpYycgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnTWFyZ2luJywgdHlwZTogJ21hcmdpblBpY2tlcicsIGtleTogJ21hcmdpbicsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdMZWZ0LCBUb3AsIFJpZ2h0LCBCb3R0b20nLFxuICAgICAgICAgIHZhbHVlOiBbMCwgMCwgMCwgMF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQWxpZ24gSXRlbScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdhbGlnbkl0ZW1zJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdMZWZ0JywgdmFsdWU6ICdsZWZ0JyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0NlbnRlcicsIHZhbHVlOiAnY2VudGVyJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ1JpZ2h0JywgdmFsdWU6ICdyaWdodCcgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgICAgXG4gICAgfSxcblxuICB9O1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgcGRmRGVzaWduZXJTZXJ2aWNlOiBQZGZEZXNpZ25lclNlcnZpY2UscHJpdmF0ZSB0ZW1wbGF0ZVNlcnZpY2U6IFRlbXBsYXRlU2VydmljZSkgeyB9XG5cbiAgaGFuZGxlVGVtcGxhdGVTZWxlY3Rpb24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucGRmRWxlbWVudHMgPSBldmVudC5lbGVtZW50czsgXG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gZXZlbnQuc2VsZWN0ZWRUZW1wbGF0ZTtcbiAgfVxuXG4gIFxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vQVAtMTBNQVIyNSBTdWJzY3JpYmVzIHRvIGhlYWRlciBzZWxlY3Rpb24gY2hhbmdlcyBhbmQgdXBkYXRlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudCAgXG4gICAgdGhpcy5wZGZEZXNpZ25lclNlcnZpY2Uuc2VsZWN0SGVhZGVyU3ViamVjdCQuc3Vic2NyaWJlKGhlYWRlciA9PiB7XG4gICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50Wyd0eXBlJ10gPSBoZWFkZXI7XG4gICAgICAgIHRoaXMuaGVhZGVyU2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wZGYgPSB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5nZXRCb29rKCk7XG4gICAgICAgIHRoaXMuYm9va0lkID0gT2JqZWN0LmtleXModGhpcy5wZGYpWzBdXG4gICAgICB9XG5cbiAgICB9KTtcbiAgICB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5zZWxlY3RlZEVsZW1lbnQkLnN1YnNjcmliZShpbmRleCA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudEluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLmhlYWRlclNlbGVjdCA9IGZhbHNlO1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5nZXRFbGVtZW50cygpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50Py50eXBlID09PSAnVGFibGUnKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RDb2x1bW4gPSB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5nZXRTZWxlY3RUYWJsZUNvbHVtbigpID09PSB1bmRlZmluZWQgPyBudWxsIDogdGhpcy5wZGZEZXNpZ25lclNlcnZpY2UuZ2V0U2VsZWN0VGFibGVDb2x1bW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdENvbHVtbiA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRFbGVtZW50Lm1hcmdpbikge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50Lm1hcmdpbiA9IFswLCAwLCAwLCAwXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzKClcbiAgICB9KTtcbiAgfVxuICAvL0FQLTEwTUFSMjUgVXBkYXRlcyB0aGUgdGl0bGUgdXNpbmcgdGhlIGZvcm0gYnVpbGRlciBzZXJ2aWNlICBcbiAgdXBkYXRlVGl0bGUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucGRmRGVzaWduZXJTZXJ2aWNlLnVwZGF0ZVRpdGxlKGV2ZW50KTtcbiAgfVxuXG4gIGdldCBmaWVsZEFzU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYm9va1N1YnRleHQuZmllbGQuam9pbignLCAnKTsgLy9TS1MyOE1BUjI1IENvbnZlcnQgYXJyYXkgdG8gY29tbWEtc2VwYXJhdGVkIHN0cmluZ1xuICB9XG5cbiAgdXBkYXRlRmllbGQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuYm9va1N1YnRleHQuZmllbGQgPSB2YWx1ZS5zcGxpdCgnLCcpLm1hcChpdGVtID0+IGl0ZW0udHJpbSgpKTsgLy9TS1MyOE1BUjI1IENvbnZlcnQgc3RyaW5nIGJhY2sgdG8gYXJyYXlcbiAgfVxuICAvLyBTS1MyME1BUjI1IEdldHRlciB0byBmaWx0ZXIgY29sdW1ucywgZXhjbHVkaW5nIHRoZSBvbmUgd2l0aCBjdXJyZW50VW5pcXVlSWRlbnRpZmllclxuICBnZXQgZmlsdGVyZWRDb2x1bW5zKCk6IGFueVtdIHtcbiAgICBjb25zdCB0YXJnZXRBcnJheSA9IHRoaXMuZ2V0RGF0YUJ5UGF0aCgnZmllbGRzTWV0YScpO1xuICAgIHJldHVybiB0YXJnZXRBcnJheS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi51bmlxdWVJZGVudGlmaWVyICE9PSB0aGlzLnNlbGVjdENvbHVtbik7XG4gIH1cblxuICAvLyBTS1MyME1BUjI1IE1ldGhvZCB0byBoYW5kbGUgY2hlY2tib3ggY2hhbmdlc1xuICBvbkNoZWNrYm94Q2hhbmdlKHRhcmdldEFycmF5UGF0aDogYW55LCB0YXJnZXRBcnJheUtleTogYW55LCBrZXk6IGFueSwgYXBpTmFtZTogc3RyaW5nLCBpc0NoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCB0YXJnZXRBcnJheSA9IHRoaXMuZ2V0RGF0YUJ5UGF0aCh0YXJnZXRBcnJheVBhdGgpO1xuICAgIGNvbnN0IGZvdW5kSXRlbSA9IHRhcmdldEFycmF5LmZpbmQoaXRlbSA9PiBpdGVtW3RhcmdldEFycmF5S2V5XSA9PT0gdGhpcy5zZWxlY3RDb2x1bW4pO1xuICAgIGZvdW5kSXRlbVtrZXldID0gZm91bmRJdGVtW2tleV0gPyBmb3VuZEl0ZW1ba2V5XSA6IFtdO1xuICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgIC8vIEFkZCBhcGlOYW1lIHRvIHNlbGVjdGVkQXBpTmFtZXMgaWYgbm90IGFscmVhZHkgcHJlc2VudFxuICAgICAgaWYgKCFmb3VuZEl0ZW1ba2V5XS5pbmNsdWRlcyhhcGlOYW1lKSkge1xuICAgICAgICBmb3VuZEl0ZW1ba2V5XS5wdXNoKGFwaU5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1vdmUgYXBpTmFtZSBmcm9tIHNlbGVjdGVkQXBpTmFtZXMgaWYgcHJlc2VudFxuICAgICAgY29uc3QgaW5kZXggPSBmb3VuZEl0ZW1ba2V5XS5pbmRleE9mKGFwaU5hbWUpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgZm91bmRJdGVtW2tleV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdXBkYXRlUHJvcGVydHkoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWVCeVBhdGgoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICdxdWVzdGlvbicpIHtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUlucHV0KHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gU0tTMjFNQVIyNSByYWRpbyBidXR0b24gY2xpY2sgaGFuZGxlclxuICBvblJhZGlvQ2hhbmdlKHRhcmdldEFycmF5UGF0aDogYW55LCB0YXJnZXRBcnJheUtleTogYW55LCBrZXk6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudC50eXBlID09PSAnVGFibGUnKSB7XG4gICAgICAvLyB0aGlzLnVwZGF0ZVZhbHVlQnlBcnJheVBhdGgodGFyZ2V0QXJyYXksIHRhcmdldEFycmF5S2V5LCB0aGlzLnNlbGVjdENvbHVtbiwga2V5LCB2YWx1ZSk7XG4gICAgICBjb25zdCB0YXJnZXRBcnJheSA9IHRoaXMuZ2V0RGF0YUJ5UGF0aCh0YXJnZXRBcnJheVBhdGgpO1xuICAgICAgLy8gY29uc29sZS5sb2coXCJ0YXJnZXRBcnJheVwiLCB0YXJnZXRBcnJheSwgXCJ0YXJnZXRBcnJheUtleVwiLCB0YXJnZXRBcnJheUtleSwgXCJzZWxlY3RDb2x1bW5cIiwgdGhpcy5zZWxlY3RDb2x1bW4sIFwia2V5UGF0aFwiLCBrZXksIFwiZXZlbnRcIiwgdmFsdWUpXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0QXJyYXkpKSByZXR1cm47XG5cbiAgICAgIC8vIEZpbmQgdGhlIG9iamVjdCB0aGF0IG1hdGNoZXMgc2VsZWN0Q29sdW1uXG4gICAgICBsZXQgZm91bmRJdGVtID0gdGFyZ2V0QXJyYXkuZmluZChpdGVtID0+IGl0ZW1bdGFyZ2V0QXJyYXlLZXldID09PSB0aGlzLnNlbGVjdENvbHVtbik7XG5cbiAgICAgIC8vIElmIHRoZSBpdGVtIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgYW5kIGFkZCBpdFxuICAgICAgaWYgKCFmb3VuZEl0ZW0pIHtcbiAgICAgICAgZm91bmRJdGVtID0geyBbdGFyZ2V0QXJyYXlLZXldOiB0aGlzLnNlbGVjdENvbHVtbiB9OyAvLyBFbnN1cmUgdGhlIGtleSBleGlzdHNcbiAgICAgICAgdGFyZ2V0QXJyYXkucHVzaChmb3VuZEl0ZW0pO1xuICAgICAgfVxuXG4gICAgICAvLyBUcmF2ZXJzZSBhbmQgc2V0IHRoZSB2YWx1ZVxuICAgICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgbGV0IG9iaiA9IGZvdW5kSXRlbTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoIW9ialtrZXldKSBvYmpba2V5XSA9IHt9OyAvLyBJbml0aWFsaXplIG1pc3Npbmcgb2JqZWN0c1xuICAgICAgICBvYmogPSBvYmpba2V5XTtcbiAgICAgIH1cblxuICAgICAgLy8gQXNzaWduIHRoZSB2YWx1ZSBiYXNlZCBvbiBpbnB1dCB0eXBlXG4gICAgICBjb25zdCBsYXN0S2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuXG4gICAgICBvYmpbbGFzdEtleV0gPSB2YWx1ZTtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudCh0aGlzLnNlbGVjdGVkRWxlbWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRWYWx1ZUJ5UGF0aChrZXksIHZhbHVlKTsgLy8gRmFsbGJhY2sgZm9yIG5vbi1UYWJsZSBlbGVtZW50cywgaWYgYXBwbGljYWJsZVxuICAgIH1cbiAgfVxuICBvblJlcXVpcmVkQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XG4gICAgICBsZXQgbGFiZWwgPSB0aGlzLnNlbGVjdGVkRWxlbWVudC5sYWJlbCA/IHRoaXMuc2VsZWN0ZWRFbGVtZW50LmxhYmVsLnJlcGxhY2UoL1xccypcXCorJC8sICcnKSA6ICdMYWJlbCc7XG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBsYWJlbCA9IGAke2xhYmVsfSAqYDtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0eSgnbGFiZWwnLCBsYWJlbCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVG9nZ2xlIGZvciBTdWIgUXVlc3Rpb25zIChFYWNoIHByb3AgaGFzIGl0cyBvd24gc3RhdGUpXG4gIHRvZ2dsZVN1YlF1ZXN0aW9uKHByb3A6IGFueSkge1xuICAgIHByb3AuaXNFeHBhbmRlZCA9ICFwcm9wLmlzRXhwYW5kZWQ7XG4gIH1cblxuICAvLyBTZXBhcmF0ZSBUb2dnbGUgZm9yIFN0eWxlIFNlY3Rpb25cbiAgaXNTdHlsZUV4cGFuZGVkID0gZmFsc2U7XG5cbiAgdG9nZ2xlU3R5bGVTZWN0aW9uKCkge1xuICAgIHRoaXMuaXNTdHlsZUV4cGFuZGVkID0gIXRoaXMuaXNTdHlsZUV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllcygpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRFbGVtZW50KSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEFQLTEwTUFSMjUgUmV0cmlldmUgdGhlIGxhdGVzdCBwZGYgZGF0YVxuICAgIHRoaXMucGRmID0gdGhpcy5wZGZEZXNpZ25lclNlcnZpY2UuZ2V0Qm9vaygpO1xuXG4gICAgLy8gQVAtMTBNQVIyNSBJZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBhICdIZWFkZXInLCByZXR1cm4gaXRzIHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQ/LnR5cGUgPT09ICdIZWFkZXInKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllc1snSGVhZGVyJ107XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJykge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0Q29sdW1uICE9PSAnJyAmJiB0aGlzLnNlbGVjdENvbHVtbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllc1snVGFibGVDb2x1bW4nXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXNbdGhpcy5zZWxlY3RlZEVsZW1lbnQ/LnR5cGVdO1xuICB9XG4gIC8vIEFQLTI4TUFSMjUgQWRkIGFuIG9wdGlvbiB3aXRoIGEgdW5pcXVlIFVVSURcbiAgYWRkT3B0aW9uKG9wdGlvbnM6IGFueVtdKSB7XG4gICAgY29uc3QgdW5pcXVlX2lkID0gdXVpZHY0KCk7XG4gICAgb3B0aW9ucy5wdXNoKHsgaWQ6IHVuaXF1ZV9pZCx2YWx1ZTogJycgfSk7XG4gIH1cblxuICAvLyBBUC0yOE1BUjI1IEZ1bmN0aW9uIHRvIHJlbW92ZSBhbiBvcHRpb24gYmFzZWQgb24gaXRzIHVuaXF1ZSBVVUlEXG4gIHJlbW92ZU9wdGlvbihvcHRpb25zOiBhbnlbXSwgaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgob3B0aW9uID0+IG9wdGlvbi5pZCA9PT0gaWQpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIG9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVCdXR0b25DbGljaygpIHtcbiAgICB0aGlzLmZvcm1CdXR0b25IYW5kbGVyLmVtaXQodGhpcy5wZGZEZXNpZ25lclNlcnZpY2UuZG93bmxvYWRFbGVtZW50KCkpO1xuICB9XG4gIC8vIFNLUzEzTUFSMjUgYWN0aXZlIHRhYiBzZWxlY3RcbiAgc2V0QWN0aXZlVGFiKHRhYjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XG4gIH1cbiAgLy8gU0tTMTNNQVIyNSB0YWJsZSBwcm9wZXJ0eSBzYXZlXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICAvLyBjb25zb2xlLmxvZygnU2F2aW5nIGRhdGE6Jyk7XG4gIH1cbiAgLy8gU0tTMTNNQVIyNSB0YWJsZSBwcm9wZXJ0eSByZXNldFxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICAvLyBjb25zb2xlLmxvZygnT3BlcmF0aW9uIGNhbmNlbGxlZCcpO1xuICB9XG5cbiAgdXBkYXRlUHJvcGVydGllcyhlbGVtZW50VHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gUmVzZXQgYWxpZ25tZW50IGFuZCBzdHlsZXMgaWYgc3dpdGNoaW5nIGVsZW1lbnRzXG4gICAgdGhpcy5zZWxlY3RlZEFsaWduID0gJ2FsaWduLWxlZnQnO1xuICAgIHRoaXMuc2VsZWN0ZWRTdHlsZXMgPSBbXTtcblxuICAgIC8vIEZldGNoIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IHR5cGVcblxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKTtcbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9wZXJ0aWVzIGFyZSBkeW5hbWljYWxseSB1cGRhdGVkXG4gICAgfVxuICB9XG5cbiAgb25BbGlnblNlbGVjdCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC50ZXh0QWxpZ24gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBvblN0eWxlU2VsZWN0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRFbGVtZW50KSByZXR1cm47XG5cbiAgICAvLyBJbml0aWFsaXplIHN0eWxlcyBhcnJheSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGVzID0gdGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGVzIHx8IFtdO1xuXG4gICAgLy8gRW5zdXJlIG9ubHkgb25lIHN0eWxlIGlzIHNlbGVjdGVkIGF0IGEgdGltZVxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlcyA9IFt2YWx1ZV07XG5cbiAgfVxuXG4gIGlzU3R5bGVBY3RpdmUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRWxlbWVudD8uc3R5bGVzPy5pbmNsdWRlcyh2YWx1ZSkgfHwgZmFsc2U7XG4gIH1cbiAgZ2V0VmFsdWVCeVBhdGgocGF0aDogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gcGF0aD8uc3BsaXQoJy4nKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiBvYmo/LltrZXldID8/ICcnLCB0aGlzLnNlbGVjdGVkRWxlbWVudCk7XG4gIH1cblxuICBvblRvZ2dsZUNoYW5nZShwYXRoOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgdGhpcy5zZXRWYWx1ZUJ5UGF0aChwYXRoLCBjaGVja2VkKTtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQodGhpcy5zZWxlY3RlZEVsZW1lbnQpXG4gIH1cbiAgdmFsaWRhdGVJbnB1dCh2YWx1ZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZSA9PT0gJ3BsYWNlaG9sZGVyJykge1xuICAgICAgY29uc3QgcmVnZXggPSAvXlthLXpBLVowLTlcXHNdKiQvO1xuICAgICAgaWYgKCFyZWdleC50ZXN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdPbmx5IGxldHRlcnMgYW5kIG51bWJlcnMgYXJlIGFsbG93ZWQnO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgc2V0VmFsdWVCeVBhdGgocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID09PSAncXVlc3Rpb24nKSB7XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVJbnB1dCh2YWx1ZSwgdmFsdWUpKSB7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgbGV0IG9iaiA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50O1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXksIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIW9ialtrZXldKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBuZXh0IGtleSBpcyBhIG51bWJlciAoYXJyYXkgaW5kZXgpXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBrZXlzW2luZGV4ICsgMV07XG4gICAgICAgIG9ialtrZXldID0gaXNOYU4oTnVtYmVyKG5leHRLZXkpKSA/IHt9IDogW107XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPT09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG51bWJlciBmb3IgZm9udFNpemVcbiAgICAgICAgaWYgKGtleSA9PT0gJ2ZvbnRTaXplJykge1xuICAgICAgICAgIG9ialtrZXldID0gcGFyc2VJbnQodmFsdWUsIDEwKSB8fCAxNDsgLy8gRGVmYXVsdCB0byAxNCBpZiBpbnZhbGlkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTsgLy8gQXNzaWduIHZhbHVlIHRvIGxhc3Qga2V5XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IG9ialtrZXldOyAvLyBNb3ZlIGRlZXBlclxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucGRmRGVzaWduZXJTZXJ2aWNlLmVsZW1lbnRVcGRhdGUodGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCwgdGhpcy5zZWxlY3RlZEVsZW1lbnQpO1xuICB9XG4gIGdldFN0eWxlS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRWxlbWVudCB8fCAhdGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGUgfHwgdHlwZW9mIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGUpO1xuICB9ICBcblxuICAvLyBTS1MxOU1BUjI1IHVwZGF0ZSBlbGVtZW50IGluIHNlcnZpZXNcbiAgdXBkYXRlRWxlbWVudChlbGVtZW50OiBhbnkpIHtcbiAgICB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5lbGVtZW50VXBkYXRlKHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXgsIGVsZW1lbnQpXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50Py50eXBlID09PSAnVGFibGUnICYmIHRoaXMuc2VsZWN0Q29sdW1uKSB7XG4gICAgICBjb25zdCBmb3VuZEl0ZW0gPSB0aGlzLnNlbGVjdGVkRWxlbWVudFsnZmllbGRzTWV0YSddLmZpbmQoaXRlbSA9PiBpdGVtWyd1bmlxdWVJZGVudGlmaWVyJ10gPT09IHRoaXMuc2VsZWN0Q29sdW1uKTtcbiAgICAgIHRoaXMucGRmRGVzaWduZXJTZXJ2aWNlLnNldFNlbGVjdGVkVGFibGVFbGVtZW50KHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXgsIHsgY29sdW1uOiBmb3VuZEl0ZW0/LmFwaU5hbWUgfHwgbnVsbCB9KTtcbiAgICB9XG4gIH1cbiAgLy8gU0tTMTlNQVIyNSBnZXQgdmFsdWUgZnJvbSBhcnJheVxuICBnZXRWYWx1ZUJ5QXJyYXlQYXRoKHRhcmdldEFycmF5UGF0aDogYW55LCB0YXJnZXRBcnJheUtleTogc3RyaW5nLCBzZWxlY3RDb2x1bW46IHN0cmluZywga2V5UGF0aDogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCB0YXJnZXRBcnJheSA9IHRoaXMuZ2V0RGF0YUJ5UGF0aCh0YXJnZXRBcnJheVBhdGgpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXJnZXRBcnJheSkpIHJldHVybiAnJztcblxuICAgIGNvbnN0IGZvdW5kSXRlbSA9IHRhcmdldEFycmF5LmZpbmQoaXRlbSA9PiBpdGVtW3RhcmdldEFycmF5S2V5XSA9PT0gc2VsZWN0Q29sdW1uKTtcblxuICAgIHJldHVybiBmb3VuZEl0ZW0gPyBrZXlQYXRoLnNwbGl0KCcuJykucmVkdWNlKChvYmosIGtleSkgPT4gb2JqPy5ba2V5XSwgZm91bmRJdGVtKSA6ICcnO1xuICB9XG5cbiAgLy9TS1MxOU1BUjI1IEZ1bmN0aW9uIHRvIHVwZGF0ZSBhIHZhbHVlIGluIGFuIGFycmF5IGR5bmFtaWNhbGx5XG4gIHVwZGF0ZVZhbHVlQnlBcnJheVBhdGgodGFyZ2V0QXJyYXlQYXRoOiBhbnksIHRhcmdldEFycmF5S2V5OiBzdHJpbmcsIHNlbGVjdENvbHVtbjogc3RyaW5nLCBrZXlQYXRoOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldEFycmF5ID0gdGhpcy5nZXREYXRhQnlQYXRoKHRhcmdldEFycmF5UGF0aCk7XG4gICAgLy8gY29uc29sZS5sb2coXCJ0YXJnZXRBcnJheVwiLCB0YXJnZXRBcnJheSwgXCJ0YXJnZXRBcnJheUtleVwiLCB0YXJnZXRBcnJheUtleSwgXCJzZWxlY3RDb2x1bW5cIiwgc2VsZWN0Q29sdW1uLCBcImtleVBhdGhcIiwga2V5UGF0aCwgXCJldmVudFwiLCBldmVudClcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0QXJyYXkpKSByZXR1cm47XG5cbiAgICAvLyBGaW5kIHRoZSBvYmplY3QgdGhhdCBtYXRjaGVzIHNlbGVjdENvbHVtblxuICAgIGxldCBmb3VuZEl0ZW0gPSB0YXJnZXRBcnJheS5maW5kKGl0ZW0gPT4gaXRlbVt0YXJnZXRBcnJheUtleV0gPT09IHNlbGVjdENvbHVtbik7XG5cbiAgICAvLyBJZiB0aGUgaXRlbSBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGFuZCBhZGQgaXRcbiAgICBpZiAoIWZvdW5kSXRlbSkge1xuICAgICAgZm91bmRJdGVtID0geyBbdGFyZ2V0QXJyYXlLZXldOiBzZWxlY3RDb2x1bW4gfTsgLy8gRW5zdXJlIHRoZSBrZXkgZXhpc3RzXG4gICAgICB0YXJnZXRBcnJheS5wdXNoKGZvdW5kSXRlbSk7XG4gICAgfVxuXG4gICAgLy8gVHJhdmVyc2UgYW5kIHNldCB0aGUgdmFsdWVcbiAgICBjb25zdCBrZXlzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBvYmogPSBmb3VuZEl0ZW07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKCFvYmpba2V5XSkgb2JqW2tleV0gPSB7fTsgLy8gSW5pdGlhbGl6ZSBtaXNzaW5nIG9iamVjdHNcbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cblxuICAgIC8vIEFzc2lnbiB0aGUgdmFsdWUgYmFzZWQgb24gaW5wdXQgdHlwZVxuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICBvYmpbbGFzdEtleV0gPSBpbnB1dEVsZW1lbnQ/LnR5cGUgPT09ICdjaGVja2JveCcgPyBpbnB1dEVsZW1lbnQuY2hlY2tlZCA6IGlucHV0RWxlbWVudC52YWx1ZTtcbiAgICBpZiAoa2V5UGF0aCA9PT0gJ3N1bW1hcnlDb2x1bW4nKSB7XG4gICAgICBpZiAob2JqWydzdW1tYXJ5Um93J10gPT09IHRydWUpIHtcbiAgICAgICAgb2JqWydzdW1tYXJ5Um93J10gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dEVsZW1lbnQuY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBvYmpbJ2ZsZFR5cGUnXSA9ICdjYWxjdWxhdGlvbidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialsnZmxkVHlwZSddID0gJ1RleHQnXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChrZXlQYXRoID09PSAnc3VtbWFyeVJvdycpIHtcbiAgICAgIC8vdGhpcy5wZGZEZXNpZ25lclNlcnZpY2Uuc2V0U3VtbWFyeVJvd0RhdGEob2JqKTsgXG4gICAgICBpZiAob2JqWydzdW1tYXJ5Q29sdW1uJ10gPT09IHRydWUpIHtcbiAgICAgICAgb2JqWydzdW1tYXJ5Q29sdW1uJ10gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dEVsZW1lbnQuY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBvYmpbJ2ZsZFR5cGUnXSA9ICdjYWxjdWxhdGlvbidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialsnZmxkVHlwZSddID0gJ1RleHQnXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRWxlbWVudCh0aGlzLnNlbGVjdGVkRWxlbWVudClcbiAgfVxuICBnZXREYXRhQnlQYXRoKHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiBvYmo/LltrZXldLCB0aGlzLnNlbGVjdGVkRWxlbWVudCk7XG4gIH1cblxuICAvLyBTS1MyNU1BUjI1IGltYWdlIGVkaXQgZnVuY3Rpb25zXG4gIGZsaXBIb3Jpem9udGFsKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwSDogIXRoaXMudHJhbnNmb3JtLmZsaXBIXG4gICAgfTtcbiAgfVxuXG4gIGZsaXBWZXJ0aWNhbCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgZmxpcFY6ICF0aGlzLnRyYW5zZm9ybS5mbGlwVlxuICAgIH07XG4gIH1cblxuICByZXNldEltYWdlKCkge1xuICAgIHRoaXMuY2FudmFzUm90YXRpb24gPSAwO1xuICAgIHRoaXMuY3JvcHBlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIHRyYW5zbGF0ZVVuaXQ6ICdweCcsXG4gICAgICBzY2FsZTogMSxcbiAgICAgIHJvdGF0ZTogMCxcbiAgICAgIGZsaXBIOiBmYWxzZSxcbiAgICAgIGZsaXBWOiBmYWxzZSxcbiAgICAgIHRyYW5zbGF0ZUg6IDAsXG4gICAgICB0cmFuc2xhdGVWOiAwXG4gICAgfTtcbiAgfVxuXG4gIHpvb21PdXQoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHNjYWxlOiB0aGlzLnRyYW5zZm9ybS5zY2FsZSEgLSAuMVxuICAgIH07XG4gIH1cblxuICB6b29tSW4oKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHNjYWxlOiB0aGlzLnRyYW5zZm9ybS5zY2FsZSEgKyAuMVxuICAgIH07XG4gIH1cbiAgcm90YXRlTGVmdCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBVc2UgdGltZW91dCBiZWNhdXNlIHJvdGF0aW5nIGltYWdlIGlzIGEgaGVhdnkgb3BlcmF0aW9uIGFuZCB3aWxsIGJsb2NrIHRoZSB1aSB0aHJlYWRcbiAgICAgIHRoaXMuY2FudmFzUm90YXRpb24tLTtcbiAgICAgIHRoaXMuZmxpcEFmdGVyUm90YXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICByb3RhdGVSaWdodCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jYW52YXNSb3RhdGlvbisrO1xuICAgICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1vdmVMZWZ0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVIOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIISAtIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZVJpZ2h0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVIOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIISArIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZURvd24oKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZVY6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZVYhICsgMVxuICAgIH07XG4gIH1cblxuICBtb3ZlVXAoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZVY6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZVYhIC0gMVxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBmbGlwQWZ0ZXJSb3RhdGUoKSB7XG4gICAgY29uc3QgZmxpcHBlZEggPSB0aGlzLnRyYW5zZm9ybS5mbGlwSDtcbiAgICBjb25zdCBmbGlwcGVkViA9IHRoaXMudHJhbnNmb3JtLmZsaXBWO1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwSDogZmxpcHBlZFYsXG4gICAgICBmbGlwVjogZmxpcHBlZEgsXG4gICAgICB0cmFuc2xhdGVIOiAwLFxuICAgICAgdHJhbnNsYXRlVjogMFxuICAgIH07XG4gIH1cbiAgYXN5bmMgaW1hZ2VDcm9wcGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5jb252ZXJ0QmxvYlRvQmFzZTY0KGV2ZW50Lm9iamVjdFVybCk7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5pbWFnZURhdGEgPSBiYXNlNjQ7XG4gICAgICBhd2FpdCB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5lbGVtZW50VXBkYXRlKHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXgsIHRoaXMuc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdDUk9QUEVEJywgZXZlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gaW1hZ2VDcm9wcGVkOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cblxuICBjcm9wcGVyUmVhZHkoc291cmNlSW1hZ2VEaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ0Nyb3BwZXIgcmVhZHknLCBzb3VyY2VJbWFnZURpbWVuc2lvbnMpO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG4gIC8vIFNLUzI1TUFSMjUgYmxvYiB0byBiYXNlIDY0IGNvbnZlcnRlclxuICBjb252ZXJ0QmxvYlRvQmFzZTY0KG9iamVjdFVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZmV0Y2gob2JqZWN0VXJsKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuYmxvYigpKVxuICAgICAgLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG4gIC8vIFNLUzI4TUFSMjUgcWIgcGRmIHVwZGF0ZSBpbiBwZGYgZWxlbWVudFxuICBjaGlsZEV2ZW50Q2FwdHVyZShldmVudDogYW55KSB7XG4gICAgY29uc29sZS5sb2coXCJjaGlsZEV2ZW50Q2FwdHVyZVwiLGV2ZW50KVxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnBkZlJlZmVyZW5jZSA9IE9iamVjdC5rZXlzKGV2ZW50LnZhbHVlT2JqKVswXVxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnBkZlJlZmVyZW5jZVF1ZXN0aW9ucyA9IGV2ZW50LnZhbHVlT2JqXG4gICAgdGhpcy5wZGZEZXNpZ25lclNlcnZpY2UuZWxlbWVudFVwZGF0ZSh0aGlzLnNlbGVjdGVkRWxlbWVudEluZGV4LCB0aGlzLnNlbGVjdGVkRWxlbWVudCk7XG4gIH1cblxuICAvLyBTS1MyOE1BUjI1IHBkZiBzZWFyY2ggZHJvcGRvd24gZW1pdFxuICBsaW5rVG9nZ2xlRHJvcGRvd24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0xpbmtEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0xpbmtEcm9wZG93bk9wZW47XG4gIH1cblxuICAvLyBTS1MyOE1BUjI1IHBkZiBzZWFyY2ggZHJvcGRvd24gY2xvc2VcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkNsaWNrT3V0c2lkZShldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kcm9wZG93biAmJiAhdGhpcy5kcm9wZG93bi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuaXNMaW5rRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIEFQLTI4TUFSMjUgV2hlbiBkcmFnIHN0YXJ0cywgc3RvcmUgdGhlIGluZGV4XG4gIG9uRHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQsIGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRyYWdnZWRJZCA9IGlkO1xuICAgIGV2ZW50LmRhdGFUcmFuc2ZlciEuZWZmZWN0QWxsb3dlZCA9IFwibW92ZVwiO1xuICB9XG5cbiAgLy8gQVAtMjhNQVIyNSBQcmV2ZW50IGRlZmF1bHQgYmVoYXZpb3IgdG8gYWxsb3cgZHJvcFxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLy8gQVAtMjhNQVIyNSBTd2FwIHRoZSBkcmFnZ2VkIGl0ZW0gd2l0aCB0aGUgZHJvcHBlZCBwb3NpdGlvblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCwga2V5OiBzdHJpbmcpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHRhcmdldElkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcIi5vcHRpb24taXRlbXNcIik/LmdldEF0dHJpYnV0ZShcImRhdGEtaWRcIik7XG5cbiAgICBpZiAodGhpcy5kcmFnZ2VkSWQgJiYgdGFyZ2V0SWQgJiYgdGhpcy5kcmFnZ2VkSWQgIT09IHRhcmdldElkKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5zZWxlY3RlZEVsZW1lbnRba2V5XTtcblxuICAgICAgW29wdGlvbnNbdGhpcy5kcmFnZ2VkSWRdLCBvcHRpb25zW3RhcmdldElkXV0gPSBbb3B0aW9uc1t0YXJnZXRJZF0sIG9wdGlvbnNbdGhpcy5kcmFnZ2VkSWRdXTtcbiAgICAgIC8vIEZpbmQgdGhlIGluZGV4ZXMgb2YgdGhlIGRyYWdnZWQgYW5kIHRhcmdldCBvcHRpb25zXG4gICAgICBjb25zdCBkcmFnZ2VkSW5kZXggPSBvcHRpb25zLmZpbmRJbmRleChvcHRpb24gPT4gb3B0aW9uLmlkID09PSB0aGlzLmRyYWdnZWRJZCk7XG4gICAgICBjb25zdCB0YXJnZXRJbmRleCA9IG9wdGlvbnMuZmluZEluZGV4KG9wdGlvbiA9PiBvcHRpb24uaWQgPT09IHRhcmdldElkKTtcblxuICAgICAgLy8gU3dhcCB0aGUgaXRlbXNcbiAgICAgIGlmIChkcmFnZ2VkSW5kZXggIT09IC0xICYmIHRhcmdldEluZGV4ICE9PSAtMSkge1xuICAgICAgICBbb3B0aW9uc1tkcmFnZ2VkSW5kZXhdLCBvcHRpb25zW3RhcmdldEluZGV4XV0gPSBbb3B0aW9uc1t0YXJnZXRJbmRleF0sIG9wdGlvbnNbZHJhZ2dlZEluZGV4XV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnZ2VkSWQgPSBudWxsO1xuICB9XG4gIG9uV2lkdGhTZWxlY3QodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PT0gJyonIHx8IHZhbHVlID09PSAnYXV0bycpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVCeVBhdGgoJ3dpZHRoJywgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQ/LndpZHRoID09PSAnKicgfHwgdGhpcy5zZWxlY3RlZEVsZW1lbnQ/LndpZHRoID09PSAnYXV0bycpIHtcbiAgICAgIC8vIERlZmF1bHQgdG8gMTAwIGlmIHN3aXRjaGluZyBmcm9tICogb3IgYXV0byB0byBjdXN0b21cbiAgICAgIHRoaXMuc2V0VmFsdWVCeVBhdGgoJ3dpZHRoJywgMTAwKTtcbiAgICB9XG4gIH1cbiAgXG59XG4iLCI8IS0tICAtIEZpZWxkIGFuZCBFbGVtZW50IFByb3BlcnRpZXMgLS0+XG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAnYXR0cmlidXRlcyd9XCIgKGNsaWNrKT1cInNldEFjdGl2ZVRhYignYXR0cmlidXRlcycpXCI+XG4gICAgICBBdHRyaWJ1dGVzXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAncHJvcGVydHknfVwiIChjbGljayk9XCJzZXRBY3RpdmVUYWIoJ3Byb3BlcnR5JylcIj5cbiAgICAgIFByb3BlcnR5XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAnYXBwZWFyYW5jZSd9XCIgKGNsaWNrKT1cInNldEFjdGl2ZVRhYignYXBwZWFyYW5jZScpXCI+XG4gICAgICBBcHBlYXJhbmNlXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiICpuZ0lmPVwiYWN0aXZlVGFiID09PSAnYXR0cmlidXRlcydcIj5cbiAgICA8IS0tIEVsZW1lbnQgUHJvcGVycnRpZXMgLS0+XG4gICAgPCEtLSAgU2VsZWN0IGVsZW1lbnQgdHlwZSBzaG93IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJnZXRQcm9wZXJ0aWVzKClcIj5cbiAgICAgIDwhLS0gU0tTMjVNQVIyNSB0aGlzIGlzIGZvciBpbWFnZSBlZGl0IC0tPlxuICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ2ltYWdlJ1wiPlxuICAgICAgICA8aW1hZ2UtY3JvcHBlciAqbmdJZj1cInNlbGVjdGVkRWxlbWVudC5pbWFnZURhdGEgXCIgW2ltYWdlQmFzZTY0XT1cInNlbGVjdGVkRWxlbWVudC5vcmdJbWFnZURhdGFcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiIFthbGlnbkltYWdlXT1cImFsaWduSW1hZ2VcIiBbcm91bmRDcm9wcGVyXT1cInJvdW5kQ3JvcHBlclwiIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ3doaXRlJ1wiXG4gICAgICAgICAgaW1hZ2VBbHRUZXh0PVwiQWx0ZXJuYXRpdmUgaW1hZ2UgdGV4dFwiIFthbGxvd01vdmVJbWFnZV09XCJmYWxzZVwiIFtoaWRlUmVzaXplU3F1YXJlc109XCJmYWxzZVwiXG4gICAgICAgICAgW2NhbnZhc1JvdGF0aW9uXT1cImNhbnZhc1JvdGF0aW9uXCIgW2FzcGVjdFJhdGlvXT1cImFzcGVjdFJhdGlvXCIgW2NvbnRhaW5XaXRoaW5Bc3BlY3RSYXRpb109XCJmYWxzZVwiXG4gICAgICAgICAgW21haW50YWluQXNwZWN0UmF0aW9dPVwiZmFsc2VcIiBbY3JvcHBlclN0YXRpY1dpZHRoXT1cImNyb3BwZXJTdGF0aWNXaWR0aFwiXG4gICAgICAgICAgW2Nyb3BwZXJTdGF0aWNIZWlnaHRdPVwiY3JvcHBlclN0YXRpY0hlaWdodFwiIFtjcm9wcGVyTWluV2lkdGhdPVwiY3JvcHBlck1pbldpZHRoXCJcbiAgICAgICAgICBbY3JvcHBlck1pbkhlaWdodF09XCJjcm9wcGVyTWluSGVpZ2h0XCIgW2Nyb3BwZXJNYXhXaWR0aF09XCJjcm9wcGVyTWF4V2lkdGhcIlxuICAgICAgICAgIFtjcm9wcGVyTWF4SGVpZ2h0XT1cImNyb3BwZXJNYXhIZWlnaHRcIiBbcmVzZXRDcm9wT25Bc3BlY3RSYXRpb0NoYW5nZV09J3RydWUnIFsoY3JvcHBlcildPVwiY3JvcHBlclwiXG4gICAgICAgICAgWyh0cmFuc2Zvcm0pXT1cInRyYW5zZm9ybVwiIFtvbmx5U2NhbGVEb3duXT1cInRydWVcIiBvdXRwdXQ9XCJibG9iXCIgZm9ybWF0PVwicG5nXCJcbiAgICAgICAgICAoaW1hZ2VDcm9wcGVkKT1cImltYWdlQ3JvcHBlZCgkZXZlbnQpXCIgKGNyb3BwZXJSZWFkeSk9XCJjcm9wcGVyUmVhZHkoJGV2ZW50KVwiPjwvaW1hZ2UtY3JvcHBlcj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkRWxlbWVudC5pbWFnZURhdGEgXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDJweDtcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInJvdGF0ZUxlZnQoKVwiIHRpdGxlPVwiUm90YXRlIExlZnRcIj7in7I8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInJvdGF0ZVJpZ2h0KClcIiB0aXRsZT1cIlJvdGF0ZSBSaWdodFwiPuKfszwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwiem9vbU91dCgpXCIgdGl0bGU9XCJab29tIE91dFwiPi08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInpvb21JbigpXCIgdGl0bGU9XCJab29tIEluXCI+KzwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZUxlZnQoKVwiIHRpdGxlPVwiTW92ZSBMZWZ0XCI+4oaQPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlUmlnaHQoKVwiIHRpdGxlPVwiTW92ZSBSaWdodFwiPuKGkjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZVVwKClcIiB0aXRsZT1cIk1vdmUgVXBcIj7ihpE8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVEb3duKClcIiB0aXRsZT1cIk1vdmUgRG93blwiPuKGkzwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwiZmxpcEhvcml6b250YWwoKVwiIFtjbGFzcy5lbmFibGVkXT1cInRyYW5zZm9ybS5mbGlwSFwiXG4gICAgICAgICAgICB0aXRsZT1cIkZsaXAgSG9yaXpvbnRhbGx5XCI+4oaUPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJmbGlwVmVydGljYWwoKVwiIFtjbGFzcy5lbmFibGVkXT1cInRyYW5zZm9ybS5mbGlwVlwiXG4gICAgICAgICAgICB0aXRsZT1cIkZsaXAgVmVydGljYWxseVwiPuKGlTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwicmVzZXRJbWFnZSgpXCIgdGl0bGU9XCJSZXNldFwiPsOXPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIFNLUzI4TUFSMjUgc2VhcmNoIHBkZiBzcGVjaWZpYyBmb3IgcGRmIGVsZW1lbnQgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRFbGVtZW50Py50eXBlID09PSAnUGRmJ1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtXCI+U2VhcmNoIFBkZjwvbGFiZWw+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDJweDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCI+XG4gICAgICAgICAgPGxpYi1zZWFyY2gtYm94IFtxdWVzdGlvbl09XCJzZWxlY3RlZEVsZW1lbnRcIiBbYXBpTWV0YV09XCJib29rU3VidGV4dFwiIFtwbGFjZUhvbGRlclRleHRdPVwiJ1NlYXJjaC4uLidcIlxuICAgICAgICAgICAgKHNlYXJjaFZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudClcIj5cbiAgICAgICAgICA8L2xpYi1zZWFyY2gtYm94PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rLWljb25cIj5cbiAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImxpbmtUb2dnbGVEcm9wZG93bigkZXZlbnQpXCIgZmlsbD1cIiMwMDAwMDBcIiB2ZXJzaW9uPVwiMS4xXCIgaWQ9XCJDYXBhXzFcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgd2lkdGg9XCIyNHB4XCIgaGVpZ2h0PVwiMjRweFwiXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNDUwIDQ1MFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XG4gICAgICAgICAgICAgIDxnPlxuICAgICAgICAgICAgICAgIDxnPlxuICAgICAgICAgICAgICAgICAgPGc+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMzE4LjE1LDIzMC4xOTVsNzcuOTM0LTc3LjkzN2MzMS44OTQtMzEuODkyLDMxLjg5NC04My43ODItMC4wMDQtMTE1LjY3NGwtMTIuNjYtMTIuNjZcbiAgICAgICAgICBjLTMxLjg5My0zMS44OTYtODMuNzgtMzEuODk2LTExNS42NzQtMC4wMDRsLTc3LjkzNyw3Ny45MzRjLTE3LjU4OCwxNy41ODgtMjUuNDU3LDQxLjI2NC0yMy42NDYsNjQuMzExXG4gICAgICAgICAgYy0yMy4wNDUtMS44MTMtNDYuNzIyLDYuMDU2LTY0LjMwOCwyMy42NDdMMjMuOTIsMjY3Ljc0OGMtMzEuODk0LDMxLjg4OS0zMS44OTQsODMuNzc5LDAsMTE1LjY3NGwxMi42NjQsMTIuNjYyXG4gICAgICAgICAgYzMxLjg5MywzMS44OTMsODMuNzgzLDMxLjg5MywxMTUuNjc0LDBsNzcuOTM1LTc3LjkzNmMxNy41OTItMTcuNTksMjUuNDU5LTQxLjI2NiwyMy42NDctNjQuMzA5XG4gICAgICAgICAgQzI3Ni44ODQsMjU1LjY1NCwzMDAuNTYsMjQ3Ljc4MywzMTguMTUsMjMwLjE5NXogTTIwMi42NTMsMjkwLjYwNWwtNzcuOTM2LDc3LjkzOGMtMTYuNzA1LDE2LjcwMy00My44ODksMTYuNzAzLTYwLjU5LDBcbiAgICAgICAgICBsLTEyLjY2Ni0xMi42NjZjLTE2LjcwNS0xNi43MDEtMTYuNzAzLTQzLjg4NSwwLTYwLjU5NGw3Ny45MzYtNzcuOTMyYzE0LjE0LTE0LjE0MSwzNS43NzktMTYuMzA2LDUyLjIyNi02LjUxNmwtMzIuMzAyLDMyLjMwN1xuICAgICAgICAgIGMtNy42MDYsNy42MDQtNy42MDYsMTkuOTM4LDAsMjcuNTQxYzcuNjA1LDcuNjA3LDE5LjkzNyw3LjYwNywyNy41NDEsMGwzMi4zMDYtMzIuMzAzXG4gICAgICAgICAgQzIxOC45NTksMjU0LjgyOCwyMTYuNzk1LDI3Ni40NjksMjAyLjY1MywyOTAuNjA1eiBNMjM4LjM4MiwyMDkuMTY5bDMyLjI5OS0zMi4zMDZjNy42MDgtNy42MDIsNy42MDgtMTkuOTM1LDAtMjcuNTM4XG4gICAgICAgICAgYy03LjYwNC03LjYxLTE5LjkzNi03LjYxLTI3LjU0MS0wLjAwNGwtMzIuMzAzLDMyLjMwM2MtOS43OTEtMTYuNDQ2LTcuNjI3LTM4LjA4Nyw2LjUxNC01Mi4yMjZsNzcuOTM1LTc3LjkzNVxuICAgICAgICAgIGMxNi43MDctMTYuNzA3LDQzLjg5LTE2LjcwNyw2MC41OTQsMGwxMi42NjQsMTIuNjY0YzE2LjcwNSwxNi43MDUsMTYuNzA1LDQzLjg4NiwwLDYwLjU5MWwtNzcuOTM2LDc3LjkzN1xuICAgICAgICAgIEMyNzYuNDY4LDIxNi43OTcsMjU0LjgyOCwyMTguOTU5LDIzOC4zODIsMjA5LjE2OXpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTM0My40NjYsMjYxLjQ2NWMtNDUuMjg3LDAtODIsMzYuNzEzLTgyLDgyczM2LjcxMyw4Miw4Miw4MmM0NS4yODYsMCw4Mi0zNi43MTMsODItODJTMzg4Ljc1MywyNjEuNDY1LDM0My40NjYsMjYxLjQ2NXpcbiAgICAgICAgICAgTTM3Mi41MDUsMzMzLjU2NGwtNTYuMDQ2LDU2LjEwNGMtMC4yMzksMC4yMzgtMC41MzYsMC40MS0wLjg2MiwwLjQ5NmwtMjIuMzE1LDUuODVjLTAuNjQ5LDAuMTY4LTEuMzQ3LTAuMDItMS44MjItMC40OTRcbiAgICAgICAgICBjLTAuNDc3LTAuNDc5LTAuNjY2LTEuMTcyLTAuNDk2LTEuODI0bDUuODI2LTIyLjMxOGMwLjA4NC0wLjMyNiwwLjI1Ni0wLjYyNywwLjQ5NC0wLjg2M2w1Ni4wNDctNTYuMTA0XG4gICAgICAgICAgYzAuNzQyLTAuNzQyLDEuOTQ1LTAuNzQ0LDIuNjg4LTAuMDAybDQuNTQ4LDQuNTQxYzAuNzM5LDAuNzQsMC43NDEsMS45NDMsMCwyLjY4OGwtMzcuNDMzLDM3LjQ3MWw0LjcwOSw0LjcwM2wzNy40MzUtMzcuNDcxXG4gICAgICAgICAgYzAuNzM5LTAuNzQyLDEuOTQtMC43NDIsMi42ODItMC4wMDJsNC41NSw0LjU0MUMzNzMuMjUsMzMxLjYxNywzNzMuMjUsMzMyLjgyMiwzNzIuNTA1LDMzMy41NjR6IE0zOTUuNDcyLDMxMC41NzRsLTE3LDE3LjAxOFxuICAgICAgICAgIGMtMC43MzksMC43NDQtMS45NDIsMC43NDQtMi42ODUsMC4wMDJsLTE2LjQ4OS0xNi40NzVjLTAuNzQ0LTAuNzQtMC43NDQtMS45NDMtMC4wMDItMi42ODhsMTctMTcuMDJcbiAgICAgICAgICBjMC43NDEtMC43NCwxLjk0NC0wLjc0LDIuNjg4LTAuMDAybDE2LjQ4NywxNi40NzdDMzk2LjIxNiwzMDguNjI5LDM5Ni4yMTYsMzA5LjgzMiwzOTUuNDcyLDMxMC41NzR6XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmstZHJvcGRvd24tbWVudVwiICpuZ0lmPVwiaXNMaW5rRHJvcGRvd25PcGVuXCIgI2Ryb3Bkb3duPlxuICAgICAgICAgICAgICA8bGFiZWw+RW5kcG9pbnQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJib29rU3VidGV4dC5lbmRwb2ludFwiIC8+XG5cbiAgICAgICAgICAgICAgPGxhYmVsPlZhcmlhYmxlOjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiYm9va1N1YnRleHQudmFyaWFibGVcIiAvPlxuXG4gICAgICAgICAgICAgIDxsYWJlbD5GaWVsZDo8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbbmdNb2RlbF09XCJmaWVsZEFzU3RyaW5nXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRmllbGQoJGV2ZW50KVwiIC8+XG5cbiAgICAgICAgICAgICAgPGxhYmVsPkRlZmF1bHQgRmllbGQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJib29rU3VidGV4dC5kZWZhdWx0RmllbGRcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9wIG9mIGdldFByb3BlcnRpZXMoKS5lbGVtZW50UHJvcHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJwcm9wLnR5cGUgIT09ICdjaGVja2JveCcgJiYgcHJvcC50eXBlICE9PSAnc3ViUXVlc3Rpb24nXCIgY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgcHJvcC5sYWJlbFxuICAgICAgICAgICAgfX08L2xhYmVsPlxuXG4gICAgICAgICAgPCEtLSBUZXh0IElucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3RleHQnXCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwicHJvcC5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiaGVhZGVyU2VsZWN0ID8gcGRmLnRpdGxlIDogKHNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gZ2V0VmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5ICkgOiBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkgKSA6ICBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkpXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJoZWFkZXJTZWxlY3QgPyB1cGRhdGVUaXRsZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSA6IChzZWxlY3RlZEVsZW1lbnQ/LnR5cGUgPT09ICdUYWJsZScgPyAocHJvcC50YXJnZXRBcnJheSA/IHVwZGF0ZVZhbHVlQnlBcnJheVBhdGgocHJvcC50YXJnZXRBcnJheSwgcHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBwcm9wLmtleSwgJGV2ZW50KSA6IHNldFZhbHVlQnlQYXRoKHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKSApIDogc2V0VmFsdWVCeVBhdGgocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpKVwiXG4gICAgICAgICAgICBbY2xhc3MucmVhZC1vbmx5XT1cInNlbGVjdGVkRWxlbWVudC5yZWFkT25seVwiIFtyZWFkb25seV09XCJzZWxlY3RlZEVsZW1lbnQucmVhZE9ubHlcIiAvPlxuXG4gICAgICAgICAgPCEtLSBxdWVzdGlvbk51bWJlciAtLT5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ3F1ZXN0aW9uTnVtYmVyJ1wiIHR5cGU9XCJudW1iZXJcIiBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50LnF1ZXN0aW9uTnVtYmVyXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJzZXRWYWx1ZUJ5UGF0aCgncXVlc3Rpb25OdW1iZXInLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIC8+XG5cbiAgICAgICAgICA8IS0tIGZpbGUgLS0+XG4gICAgICAgICAgPCEtLSBBZGQgdGhpcyBpbnNpZGUgdGhlIGVsZW1lbnRQcm9wcyBsb29wIHdoZXJlIG90aGVyIGlucHV0cyBhcmUgcmVuZGVyZWQgLS0+XG4gICAgICAgICAgPHNlbGVjdCAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcC5rZXkgPT09ICdzdXBwb3J0VHlwZSdcIiBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCBmaWxlIGNhdGVnb3J5PC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPiB7eyBvcHRpb24ubGFiZWwgfX0gPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnY2hlY2tib3gnXCI+XG5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZEVsZW1lbnQudHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gZ2V0VmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5ICkgOiBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkgKTogIGdldFZhbHVlQnlQYXRoKHByb3Aua2V5KSBcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIiBzZWxlY3RlZEVsZW1lbnQudHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gdXBkYXRlVmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5LCAkZXZlbnQpIDogb25Ub2dnbGVDaGFuZ2UocHJvcC5rZXksICRldmVudCkgKSA6IG9uVG9nZ2xlQ2hhbmdlKHByb3Aua2V5LCAkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweDtcIj57eyBwcm9wLmxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBTS1MyME1BUjI1IFN1YnF1ZXN0aW9uIFR5cGUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3N1YlF1ZXN0aW9uJ1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGdhcDogMTBweDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgPGRpdj57eyBwcm9wLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkRWxlbWVudC50eXBlID09PSAnVGFibGUnID8gKHByb3AudGFyZ2V0QXJyYXkgPyBnZXRWYWx1ZUJ5QXJyYXlQYXRoKHByb3AudGFyZ2V0QXJyYXksIHByb3AudGFyZ2V0QXJyYXlLZXksIHNlbGVjdENvbHVtbiwgcHJvcC5rZXkgKSA6IGdldFZhbHVlQnlQYXRoKHByb3Aua2V5KSApOiAgZ2V0VmFsdWVCeVBhdGgocHJvcC5rZXkpIFwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIgc2VsZWN0ZWRFbGVtZW50LnR5cGUgPT09ICdUYWJsZScgPyAocHJvcC50YXJnZXRBcnJheSA/IHVwZGF0ZVZhbHVlQnlBcnJheVBhdGgocHJvcC50YXJnZXRBcnJheSwgcHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBwcm9wLmtleSwgJGV2ZW50KSA6IG9uVG9nZ2xlQ2hhbmdlKHByb3Aua2V5LCAkZXZlbnQpICkgOiBvblRvZ2dsZUNoYW5nZShwcm9wLmtleSwgJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gU0tTMjBNQVIyNSBSZW5kZXIgc3VicXVlc3Rpb25zIHdoZW4gY2hlY2tib3ggaXMgY2hlY2tlZCAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEVsZW1lbnQudHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gZ2V0VmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5ICkgOiBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkgKTogIGdldFZhbHVlQnlQYXRoKHByb3Aua2V5KVwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWJQcm9wIG9mIHByb3Auc3ViUXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2U3ZjJmZjsgcGFkZGluZzogOHB4OyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyBzdWJQcm9wLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdWJQcm9wLnR5cGUgPT09ICdhcnJheSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBJdGVyYXRlIG92ZXIgZmlsdGVyZWQgY29sdW1ucyB0byBkaXNwbGF5IGNoZWNrYm94ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBmaWx0ZXJlZENvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic3ViUHJvcC5vcGVyYW5kcyA/IHN1YlByb3Aub3BlcmFuZHMuaW5jbHVkZXMoY29sdW1uLmFwaU5hbWUpIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2Uoc3ViUHJvcC50YXJnZXRBcnJheSxzdWJQcm9wLnRhcmdldEFycmF5S2V5LHN1YlByb3Aua2V5LCBjb2x1bW4uYXBpTmFtZSwgJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmFwaU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyMU1BUjI1IE5ldyByYWRpbyB0eXBlIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN1YlByb3AudHlwZSA9PT0gJ3JhZGlvJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtuYW1lXT1cInN1YlByb3Aua2V5XCIgW3ZhbHVlXT1cImNvbHVtbi5hcGlOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0VmFsdWVCeUFycmF5UGF0aChzdWJQcm9wLnRhcmdldEFycmF5LCBzdWJQcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHN1YlByb3Aua2V5KSA9PT0gY29sdW1uLmFwaU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9DaGFuZ2Uoc3ViUHJvcC50YXJnZXRBcnJheSwgc3ViUHJvcC50YXJnZXRBcnJheUtleSwgc3ViUHJvcC5rZXksIGNvbHVtbi5hcGlOYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmFwaU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyME1BUjI1IEFkZCBtb3JlIHN1YnByb3BlcnR5IHR5cGVzIGFzIG5lZWRlZCAtLT5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSW5zaWRlIHRoZSBzdWJQcm9wIG5nRm9yIGxvb3AgLS0+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJzdWJQcm9wLnR5cGUgPT09ICd0ZXh0J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInN1YlByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50LnR5cGUgPT09ICdUYWJsZScgPyAoc3ViUHJvcC50YXJnZXRBcnJheSA/IGdldFZhbHVlQnlBcnJheVBhdGgoc3ViUHJvcC50YXJnZXRBcnJheSwgc3ViUHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBzdWJQcm9wLmtleSApIDogZ2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXkpICkgOiBnZXRWYWx1ZUJ5UGF0aChzdWJQcm9wLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwic2VsZWN0ZWRFbGVtZW50LnR5cGUgPT09ICdUYWJsZScgPyAoc3ViUHJvcC50YXJnZXRBcnJheSA/IHVwZGF0ZVZhbHVlQnlBcnJheVBhdGgoc3ViUHJvcC50YXJnZXRBcnJheSwgc3ViUHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBzdWJQcm9wLmtleSwgJGV2ZW50KSA6IHNldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKSApIDogc2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cblxuICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwic3ViUHJvcC50eXBlID09PSAnYm9vbGVhbidcIiB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJnZXRWYWx1ZUJ5UGF0aChzdWJQcm9wLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LmNoZWNrZWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJzdWJQcm9wLnR5cGUgPT09ICdzZWxlY3QnXCIgW3ZhbHVlXT1cImdldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzdWJQcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+e3sgb3B0aW9uIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInN1YlByb3AudHlwZSA9PT0gJ2NoZWNrYm94J1wiIHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImdldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXksICRldmVudC50YXJnZXQuY2hlY2tlZClcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBTS1MyME1BUjI1IFRleHQgQWxpZ24gQnV0dG9ucyAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnYWxpZ24nXCI+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcC5vcHRpb25zXCIgKGNsaWNrKT1cIm9uQWxpZ25TZWxlY3Qob3B0aW9uLnZhbHVlKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRFbGVtZW50Py50ZXh0QWxpZ24gPT09IG9wdGlvbi52YWx1ZVwiIFt0aXRsZV09XCJvcHRpb24udmFsdWVcIj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIicuLi9hc3NldHMvaWNvbnMvJyArIG9wdGlvbi5pY29uICsgJy5zdmcnXCIgW2FsdF09XCJvcHRpb24udmFsdWVcIiBjbGFzcz1cImljb24tc2l6ZVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzdHlsZSdcIj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiAoY2xpY2spPVwib25TdHlsZVNlbGVjdChvcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc1N0eWxlQWN0aXZlKG9wdGlvbi52YWx1ZSlcIiBbdGl0bGVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCInLi4vYXNzZXRzL2ljb25zLycgKyBvcHRpb24uaWNvbiArICcuc3ZnJ1wiIFthbHRdPVwib3B0aW9uLnZhbHVlXCIgY2xhc3M9XCJpY29uLXNpemVcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEZpZWxkIFNpemUgQ29udHJvbHMgLS0+XG4gICAgICAgICAgPCEtLSAgQ2hhbmdlIGtleSB3aWR0aCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICd3aWR0aCdcIiBbbmdDbGFzc109XCJ7J2ZsZXgtY29udGFpbmVyJzogdHJ1ZSwgJ2N1c3RvbS1hY3RpdmUnOiBzZWxlY3RlZEVsZW1lbnQ/LndpZHRoICE9PSAnKicgJiYgc2VsZWN0ZWRFbGVtZW50Py53aWR0aCAhPT0gJ2F1dG8nfVwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cInNpemUtc2VsZWN0XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudD8ud2lkdGggPT09ICcqJyA/ICdEZWZhdWx0JyA6IHNlbGVjdGVkRWxlbWVudD8ud2lkdGggPT09ICdhdXRvJyA/ICdBdXRvJyA6ICdDdXN0b20nXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbldpZHRoU2VsZWN0KFxuICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQudmFsdWUgPT09ICdEZWZhdWx0JyA/ICcqJyA6XG4gICAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJ0F1dG8nID8gJ2F1dG8nIDogJ2N1c3RvbSdcbiAgICAgICAgICAgICAgKVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRGVmYXVsdFwiPkRlZmF1bHQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkF1dG9cIj5BdXRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDdXN0b21cIj5DdXN0b208L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIFxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRFbGVtZW50Py53aWR0aCAhPT0gJyonICYmIHNlbGVjdGVkRWxlbWVudD8ud2lkdGggIT09ICdhdXRvJ1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNpemUtaW5wdXRcIlxuICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudD8ud2lkdGhcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwic2V0VmFsdWVCeVBhdGgoXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAkZXZlbnQudGFyZ2V0LnZhbHVlQXNOdW1iZXIgPCAxID8gMSA6XG4gICAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC52YWx1ZUFzTnVtYmVyID4gMTAwID8gMTAwIDpcbiAgICAgICAgICAgICAgICAkZXZlbnQudGFyZ2V0LnZhbHVlQXNOdW1iZXJcbiAgICAgICAgICAgICAgKVwiIC8+XG4gICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgPCEtLSAgTGluZSBQcm9wZXJ0aWVzIC0tPlxuICAgICAgICAgIDwhLS0gUGFkZGluZyBUb3AgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAncGFkZGluZ1RvcCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgW3BsYWNlaG9sZGVyXT1cInByb3AucGxhY2Vob2xkZXJcIiBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50Py5wYWRkaW5nVG9wXCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cInNldFZhbHVlQnlQYXRoKCdwYWRkaW5nVG9wJywgJGV2ZW50LnRhcmdldC52YWx1ZSlcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBQYWRkaW5nIEJvdHRvbSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdwYWRkaW5nQm90dG9tJ1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBbcGxhY2Vob2xkZXJdPVwicHJvcC5wbGFjZWhvbGRlclwiIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LnBhZGRpbmdCb3R0b21cIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwic2V0VmFsdWVCeVBhdGgoJ3BhZGRpbmdCb3R0b20nLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIExpbmUgU3R5bGUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnbGluZVN0eWxlJ1wiPlxuICAgICAgICAgICAgPHNlbGVjdCBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50Py5saW5lU3R5bGVcIiAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdsaW5lU3R5bGUnLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIENvbG9yIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ2NvbG9yJ1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LmNvbG9yXCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cInNldFZhbHVlQnlQYXRoKCdjb2xvcicsICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCIgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdwcm9wZXJ0eSdcIj5cbiAgICA8IS0tIEZpZWxkIEVsZW1lbnRzIFByb3BlcnRpZXMgLS0+XG4gICAgPCEtLSAgU2hvdyBlbGVtZW50cyBJRCAgLS0+XG4gICAgPGRpdiAqbmdJZj1cImdldFByb3BlcnRpZXMoKVwiPlxuICAgICAgPGxhYmVsPkxhYmVsIElkPC9sYWJlbD5cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7IHBhZGRpbmc6IDExcHg7IGJvcmRlci1yYWRpdXM6IDVweDsgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcIj5cbiAgICAgICAge3sgaGVhZGVyU2VsZWN0ID8gYm9va0lkIDogc2VsZWN0ZWRFbGVtZW50LmlkIH19PC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9wIG9mIGdldFByb3BlcnRpZXMoKS5maWVsZFByb3BzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1zbVwiPnt7IHByb3AubGFiZWwgfX08L2xhYmVsPlxuXG4gICAgICAgICAgPCEtLSBTS1MyMU1BUjI1IFRvZ2dsZSBHcm91cCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAndG9nZ2xlR3JvdXAnXCIgY2xhc3M9XCJ0b2dnbGUtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtaXRlbVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0b2dnbGUtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgLz5cbiAgICAgICAgICAgICAgICBEaXNhYmxlZFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tICAtIGhhbmRsZWQgb3B0aW9ucyB3aXRoIFVVSUQgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdkcm9wZG93bicgfHwgcHJvcC50eXBlID09PSAnY2hlY2tib3gnIHx8IHByb3AudHlwZSA9PT0gJ3JhZGlvJyAmJiBwcm9wLmtleSA9PT0gJ29wdGlvbnMnXCJcbiAgICAgICAgICAgIGNsYXNzPVwib3B0aW9ucy1jb250YWluZXJcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1saXN0XCIgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQsIHByb3Aua2V5KVwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVwiIGNsYXNzPVwib3B0aW9uLWl0ZW1zXCIgW2F0dHIuZGF0YS1pZF09XCJvcHRpb24uaWRcIlxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIiAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgb3B0aW9uLmlkKVwiPlxuXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJvcHRpb24udmFsdWVcIiBwbGFjZWhvbGRlcj1cIk9wdGlvblwiIGNsYXNzPVwib3B0aW9uc1wiIC8+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZU9wdGlvbihzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldLCBvcHRpb24uaWQpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcmFnLWhhbmRsZVwiPuKYsDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkT3B0aW9uKHNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV0pXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtdmFyaWVudFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sZ1wiPis8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+QWRkPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGlucHV0ICpuZ0lmPVwicHJvcC50eXBlID09PSAndGV4dCdcIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJwcm9wLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJoZWFkZXJTZWxlY3QgPyBwZGYudGl0bGUgOiAoc2VsZWN0ZWRFbGVtZW50Py50eXBlID09PSAnVGFibGUnID8gKHByb3AudGFyZ2V0QXJyYXkgPyBnZXRWYWx1ZUJ5QXJyYXlQYXRoKHByb3AudGFyZ2V0QXJyYXksIHByb3AudGFyZ2V0QXJyYXlLZXksIHNlbGVjdENvbHVtbiwgcHJvcC5rZXkgKSA6IGdldFZhbHVlQnlQYXRoKHByb3Aua2V5KSApIDogIGdldFZhbHVlQnlQYXRoKHByb3Aua2V5KSlcIlxuICAgICAgICAgICAgKGlucHV0KT1cImhlYWRlclNlbGVjdCA/IHVwZGF0ZVRpdGxlKCRldmVudC50YXJnZXQudmFsdWUpIDogKHNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gdXBkYXRlVmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5LCAkZXZlbnQpIDogc2V0VmFsdWVCeVBhdGgocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpICkgOiBzZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSwgJGV2ZW50LnRhcmdldC52YWx1ZSkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5yZWFkLW9ubHldPVwic2VsZWN0ZWRFbGVtZW50LnJlYWRPbmx5XCIgW3JlYWRvbmx5XT1cInNlbGVjdGVkRWxlbWVudC5yZWFkT25seVwiIC8+XG5cbiAgICAgICAgICA8IS0tIFN1YiBRdWVzdGlvbnMgVG9nZ2xlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzdWJRdWVzdGlvbidcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHlsZS10b2dnbGUtaGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZVN1YlF1ZXN0aW9uKHByb3ApXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkLWVsZW1lbnRzXCI+U3ViIFRleHQ8L2Rpdj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInByb3AuaXNFeHBhbmRlZCA/ICcuLi9hc3NldHMvaWNvbnMvYXJyb3ctZG93bi5zdmcnIDogJy4uL2Fzc2V0cy9pY29ucy9hcnJvdy1yaWdodC5zdmcnXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJUb2dnbGUgQXJyb3dcIiBjbGFzcz1cImFycm93LWljb25cIj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFJlbmRlciBzdWJxdWVzdGlvbnMgd2hlbiBhcnJvdyBpcyBkb3duIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AuaXNFeHBhbmRlZFwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI2RkZDsgcGFkZGluZzogOHB4OyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHN1YlByb3Agb2YgcHJvcC5zdWJRdWVzdGlvblwiIGNsYXNzPVwic3ViLXF1ZXN0aW9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgc3ViUHJvcC5sYWJlbCB9fTwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInN1YlByb3AudHlwZSA9PT0gJ3RleHQnXCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwic3ViUHJvcC5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWYWx1ZUJ5UGF0aChzdWJQcm9wLmtleSlcIiAoaW5wdXQpPVwic2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA8IS0tICBSZW5kZXIgaW5wdXQgZmllbGQgb25seSBpZiBzdWJQcm9wLnR5cGUgaXMgJ2FycmF5JyAtLT5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInN1YlByb3AudHlwZSA9PT0gJ2FycmF5J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInN1YlByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXkpXCIgKGlucHV0KT1cInNldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW25nTW9kZWxdPVwiZmllbGRBc1N0cmluZ1wiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpZWxkKCRldmVudClcIiAvPiAtLT5cblxuICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwic3ViUHJvcC50eXBlID09PSAnYm9vbGVhbidcIiB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJnZXRWYWx1ZUJ5UGF0aChzdWJQcm9wLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LmNoZWNrZWQpXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWxhYmVsXCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMHB4O1wiPnt7IHByb3AubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRFbGVtZW50LnR5cGUgPT09ICdUYWJsZScgPyAocHJvcC50YXJnZXRBcnJheSA/IGdldFZhbHVlQnlBcnJheVBhdGgocHJvcC50YXJnZXRBcnJheSwgcHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBwcm9wLmtleSApIDogZ2V0VmFsdWVCeVBhdGgocHJvcC5rZXkpICk6ICBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkgXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCIgc2VsZWN0ZWRFbGVtZW50LnR5cGUgPT09ICdUYWJsZScgPyAocHJvcC50YXJnZXRBcnJheSA/IHVwZGF0ZVZhbHVlQnlBcnJheVBhdGgocHJvcC50YXJnZXRBcnJheSwgcHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBwcm9wLmtleSwgJGV2ZW50KSA6IG9uVG9nZ2xlQ2hhbmdlKHByb3Aua2V5LCAkZXZlbnQpICkgOiBvblRvZ2dsZUNoYW5nZShwcm9wLmtleSwgJGV2ZW50KVwiIC8+XG5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFNLUzIxTUFSMjUgTW92ZSBTdHlsZSBPdXRzaWRlIHRoZSBMb29wIC0tPlxuICAgICAgPCEtLSBTdHlsZSBUb2dnbGUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic3R5bGUtdG9nZ2xlLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVTdHlsZVNlY3Rpb24oKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZC1lbGVtZW50c1wiPlN0eWxlPC9kaXY+XG4gICAgICAgIDxpbWcgW3NyY109XCJpc1N0eWxlRXhwYW5kZWQgPyAnLi4vYXNzZXRzL2ljb25zL2Fycm93LWRvd24uc3ZnJyA6ICcuLi9hc3NldHMvaWNvbnMvYXJyb3ctcmlnaHQuc3ZnJ1wiXG4gICAgICAgICAgYWx0PVwiVG9nZ2xlIEFycm93XCIgY2xhc3M9XCJhcnJvdy1pY29uXCI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cImlzU3R5bGVFeHBhbmRlZFwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI2RkZDsgcGFkZGluZzogOHB4OyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQga2V5IG9mIGdldFN0eWxlS2V5cygpXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sga2V5IH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50LnN0eWxlW2tleV1cIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwic2V0VmFsdWVCeVBhdGgoJ3N0eWxlLicgKyBrZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgcGxhY2Vob2xkZXI9XCJFbnRlciB7eyBrZXkgfX1cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnRcIiAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ2FwcGVhcmFuY2UnXCI+XG4gICAgPGRpdiAqbmdJZj1cImdldFByb3BlcnRpZXMoKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJvcCBvZiBnZXRQcm9wZXJ0aWVzKCkuYXBwZWFyYW5jZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtc21cIj57eyBwcm9wLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICA8IS0tIEZvbnQgU2VsZWN0aW9uIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ2ZvbnQnXCI+XG4gICAgICAgICAgICA8c2VsZWN0ICpuZ0lmPVwicHJvcC50eXBlID09PSAnc2VsZWN0J1wiIGNsYXNzPVwic2VsZWN0LWNvbnRhaW5lclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50LmZvbnRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdmb250JywgJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICB7eyBvcHRpb24gfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIElucHV0IEJveCAtLT5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICd0ZXh0J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV1cIiAoaW5wdXQpPVwic2V0VmFsdWVCeVBhdGgocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cblxuPCEtLSBGb250IFNpemUgLS0+XG48ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdmb250U2l6ZScgJiYgcHJvcC50eXBlID09PSAnbnVtYmVyJ1wiPlxuICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjFcIiBtYXg9XCIxMDBcIiBzdGVwPVwiMVwiXG4gICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRWxlbWVudC5mb250U2l6ZVwiXG4gICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdmb250U2l6ZScsIHNlbGVjdGVkRWxlbWVudC5mb250U2l6ZSlcIiAvPlxuPC9kaXY+XG4gICAgICAgICAgPCEtLSBGb250IFdlaWdodCBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnZm9udFdlaWdodCdcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzZWxlY3QnXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSwgJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cbiAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPCEtLSBEcm9wZG93biBCb3ggLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnZHJvcGRvd24nXCIgY2xhc3M9XCJpbnB1dC1ib3gtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV1cIiAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24gfX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb2xvciBQaWNrZXIgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnY29sb3InXCIgY2xhc3M9XCJjb2xvci1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEVsZW1lbnQuZm9udENvbG9yXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdmb250Q29sb3InLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gSEVYIElucHV0IEJveCAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdjb2xvcidcIiBjbGFzcz1cImhleC1pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4+SEVYIENvZGU8L3NwYW4+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSwgJGV2ZW50LnRhcmdldC52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEZvbnQgU3R5bGUgLS0+XG48ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdmb250U3R5bGUnXCI+XG4gIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEVsZW1lbnQuZm9udFN0eWxlXCJcbiAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdmb250U3R5bGUnLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICA8L29wdGlvbj5cbiAgPC9zZWxlY3Q+XG48L2Rpdj5cblxuPCEtLSBtYXJnaW46IFswLCAxMCwgMCwgMF0gLy8gWyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gXSAtLT5cbjxkaXYgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ21hcmdpbicmJiBzZWxlY3RlZEVsZW1lbnQ/Lm1hcmdpblwiPlxuICA8ZGl2IGNsYXNzPVwibWFyZ2luLWlucHV0c1wiPlxuICAgIDxkaXY+XG4gICAgICA8bGFiZWw+UmlnaHQ8L2xhYmVsPlxuICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRWxlbWVudC5tYXJnaW5bMV1cIlxuICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VmFsdWVCeVBhdGgoJ21hcmdpbicsIHNlbGVjdGVkRWxlbWVudC5tYXJnaW4pXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGxhYmVsPkJvdHRvbTwvbGFiZWw+XG4gICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50Lm1hcmdpblsyXVwiXG4gICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZUJ5UGF0aCgnbWFyZ2luJywgc2VsZWN0ZWRFbGVtZW50Lm1hcmdpbilcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8bGFiZWw+TGVmdDwvbGFiZWw+XG4gICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50Lm1hcmdpblszXVwiXG4gICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZUJ5UGF0aCgnbWFyZ2luJywgc2VsZWN0ZWRFbGVtZW50Lm1hcmdpbilcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8bGFiZWw+VG9wPC9sYWJlbD5cbiAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEVsZW1lbnQubWFyZ2luWzBdXCJcbiAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdtYXJnaW4nLCBzZWxlY3RlZEVsZW1lbnQubWFyZ2luKVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRleHRBbGlnbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdhbGlnbkl0ZW1zJ1wiPlxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRWxlbWVudC5hbGlnbkl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZUJ5UGF0aCgnYWxpZ25JdGVtcycsICRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48IS0tIERlZmF1bHQgU2F2ZSBCdXR0b24gLS0+XG48ZGl2IGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiICpuZ0lmPVwiIXRlbXBsYXRlU2VsZWN0ZWRcIj5cbiAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idG5cIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICA8YnV0dG9uIGNsYXNzPVwic2F2ZS1idG5cIiAoY2xpY2spPVwiaGFuZGxlQnV0dG9uQ2xpY2soKVwiPlNhdmU8L2J1dHRvbj5cbjwvZGl2PlxuPC9kaXY+XG4iXX0=
1126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXByb3BlcnRpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL3BhZ2VzL3BkZkRlc2lnbmVyL3BkZi1wcm9wZXJ0aWVzL3BkZi1wcm9wZXJ0aWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9wZGZEZXNpZ25lci9wZGYtcHJvcGVydGllcy9wZGYtcHJvcGVydGllcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBaUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5JLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDekYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUVBQXFFLENBQUM7Ozs7Ozs7QUFVNUcsTUFBTSxPQUFPLHNCQUFzQjtJQWtuQmI7SUFBMEI7SUFBK0M7SUFobkJuRixpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQzVDLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDeEQsY0FBYyxHQUFXLEVBQUUsQ0FBQztJQUM1QixvQkFBb0IsR0FBVyxDQUFDLENBQUMsQ0FBQztJQUN6QixtQkFBbUIsR0FBVyxFQUFFLENBQUM7SUFDMUMsYUFBYSxHQUFXLFlBQVksQ0FBQyxDQUFFLG9CQUFvQjtJQUMzRCxjQUFjLEdBQWEsRUFBRSxDQUFDLENBQUUsb0RBQW9EO0lBQ3BGLGVBQWUsR0FBUSxJQUFJLENBQUMsQ0FBRSwrQkFBK0I7SUFDN0QsWUFBWSxHQUFZLEtBQUssQ0FBQztJQUM5QixNQUFNLENBQU07SUFDWixHQUFHLENBQU07SUFDVCxTQUFTLEdBQVcsWUFBWSxDQUFDO0lBQ2pDLFlBQVksQ0FBSztJQUNqQixTQUFTLEdBQW1CO1FBQzFCLGFBQWEsRUFBRSxJQUFJO1FBQ25CLEtBQUssRUFBRSxDQUFDO1FBQ1IsTUFBTSxFQUFFLENBQUM7UUFDVCxLQUFLLEVBQUUsS0FBSztRQUNaLEtBQUssRUFBRSxLQUFLO1FBQ1osVUFBVSxFQUFFLENBQUM7UUFDYixVQUFVLEVBQUUsQ0FBQztLQUNkLENBQUM7SUFDRixjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sQ0FBbUI7SUFDMUIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDckIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUNwQixnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDckIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUNwQixrQkFBa0IsR0FBRyxDQUFDLENBQUM7SUFDdkIsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLFdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsaUJBQWlCLEdBQWlCLElBQUksQ0FBQztJQUN2QyxVQUFVLEdBQUcsUUFBaUIsQ0FBQztJQUMvQixrREFBa0Q7SUFDbEQseUNBQXlDO0lBQ3pDLFdBQVcsR0FBRztRQUNaLFVBQVUsRUFBRSxnRUFBZ0U7UUFDNUUsVUFBVSxFQUFFLElBQUk7UUFDaEIsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ2xCLGNBQWMsRUFBRSxPQUFPO0tBQ3hCLENBQUE7SUFDRCxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEIsZ0JBQWdCLEdBQVksS0FBSyxDQUFDO0lBRUQsUUFBUSxDQUFjO0lBR2hFLFNBQVMsR0FBa0IsSUFBSSxDQUFDO0lBQ2hDLFdBQVcsR0FBVSxFQUFFLENBQUM7SUFFeEIsU0FBUyxHQUFXLFVBQVUsQ0FBQyxDQUFDLHVCQUF1QjtJQUN2RCxnQkFBZ0IsQ0FBTTtJQUV0QixpQkFBaUIsR0FBRztRQUNsQixxRUFBcUU7UUFDckUsdUNBQXVDO1FBQ3ZDLFFBQVEsRUFBRTtZQUNSLFlBQVksRUFBRTtnQkFDWixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7YUFBQztTQUM3RTtRQUVELE1BQU0sRUFBRTtZQUNOLFlBQVksRUFBRTtnQkFDWixFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7Z0JBQ25GLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDM0QsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTthQUNwRDtZQUNELFVBQVUsRUFBRTtnQkFDVixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFO2dCQUN4RCxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUNoRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7Z0JBQzFFLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDakc7b0JBQ0UsT0FBTyxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFdBQVc7b0JBQ25GLGFBQWEsRUFBRSxFQUNkO2lCQUNGO2FBQ0Y7WUFDRCxVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU07b0JBQ3RFLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLENBQUM7aUJBQ2xFO2dCQUNELEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDbkU7b0JBQ0UsS0FBSyxFQUFFLFdBQVc7b0JBQ2xCLElBQUksRUFBRSxRQUFRO29CQUNkLEdBQUcsRUFBRSxVQUFVO29CQUNmLEtBQUssRUFBRSxFQUFFO2lCQUNWO2dCQUNEO29CQUNFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNsRSxPQUFPLEVBQUU7d0JBQ1AsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7d0JBQ3JDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO3dCQUNyQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTt3QkFDeEMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7cUJBQ3BDO2lCQUNGO2dCQUNEO29CQUNFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNoRSxPQUFPLEVBQUU7d0JBQ1AsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7d0JBQ3BDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO3dCQUNoQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtxQkFDckM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxRQUFRO29CQUNwRCxXQUFXLEVBQUUsMEJBQTBCO29CQUN2QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3BCO2dCQUNEO29CQUNFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUNqRSxPQUFPLEVBQUU7d0JBQ1AsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQ2hDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3dCQUNwQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtxQkFDbkM7aUJBQ0Y7YUFDRjtTQUVGO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsWUFBWSxFQUFFO2dCQUNaLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRTtnQkFDbkYsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO2dCQUMzRCxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO2FBQ3BEO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUU7Z0JBQ3hELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQ2hFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtnQkFDMUUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO2dCQUNqRztvQkFDRSxPQUFPLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVztvQkFDbkYsYUFBYSxFQUFFLEVBQ2Q7aUJBQ0Y7YUFDRjtZQUNELFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTTtvQkFDdEUsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztpQkFDbEU7Z0JBQ0QsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNuRTtvQkFDRSxLQUFLLEVBQUUsV0FBVztvQkFDbEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsR0FBRyxFQUFFLFVBQVU7b0JBQ2YsS0FBSyxFQUFFLEVBQUU7aUJBQ1Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2xFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTt3QkFDckMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7d0JBQ3JDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO3dCQUN4QyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtxQkFDcEM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2hFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTt3QkFDcEMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQ2hDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFFBQVE7b0JBQ3BELFdBQVcsRUFBRSwwQkFBMEI7b0JBQ3ZDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDcEI7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2pFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTt3QkFDaEMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7d0JBQ3BDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO3FCQUNuQztpQkFDRjthQUNGO1NBRUY7UUFDRCxNQUFNLEVBQUU7WUFDTixZQUFZLEVBQUU7Z0JBQ1osRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO2dCQUNuRixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzNELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7YUFDcEQ7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRTtnQkFDeEQsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtnQkFDaEUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO2dCQUMxRSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ2pHO29CQUNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXO29CQUNuRixhQUFhLEVBQUUsRUFDZDtpQkFDRjthQUNGO1lBQ0QsVUFBVSxFQUFFO2dCQUNWO29CQUNFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNO29CQUN0RSxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxDQUFDO2lCQUNsRTtnQkFDRCxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0JBQ25FO29CQUNFLEtBQUssRUFBRSxXQUFXO29CQUNsQixJQUFJLEVBQUUsUUFBUTtvQkFDZCxHQUFHLEVBQUUsVUFBVTtvQkFDZixLQUFLLEVBQUUsRUFBRTtpQkFDVjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDbEUsT0FBTyxFQUFFO3dCQUNQLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO3dCQUNyQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTt3QkFDckMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7d0JBQ3hDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO3FCQUNwQztpQkFDRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDaEUsT0FBTyxFQUFFO3dCQUNQLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3dCQUNwQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTt3QkFDaEMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7cUJBQ3JDO2lCQUNGO2dCQUNEO29CQUNFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsUUFBUTtvQkFDcEQsV0FBVyxFQUFFLDBCQUEwQjtvQkFDdkMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNwQjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDakUsT0FBTyxFQUFFO3dCQUNQLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO3dCQUNoQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTt3QkFDcEMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7cUJBQ25DO2lCQUNGO2FBQ0Y7U0FFRjtRQUNELEtBQUssRUFBRTtZQUNMLFlBQVksRUFBRTtnQkFDWixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzNELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7YUFDcEQ7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtnQkFDaEUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO2dCQUMxRSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ2pHO29CQUNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXO29CQUNuRixhQUFhLEVBQUUsRUFDZDtpQkFDRjthQUNGO1lBQ0QsVUFBVSxFQUFFLEVBQUU7U0FDZjtRQUNELCtCQUErQjtRQUMvQixNQUFNLEVBQUU7WUFDTixZQUFZLEVBQUU7Z0JBQ1osRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtnQkFDeEQsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUU7Z0JBQzdGLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUU7Z0JBQ3RHO29CQUNFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsV0FBVztvQkFDckQsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7aUJBQ3ZDO2FBQ0Y7WUFDRCxVQUFVLEVBQUUsRUFBRTtZQUNkLFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTTtvQkFDdEUsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztpQkFDbEU7Z0JBQ0QsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNuRTtvQkFDRSxLQUFLLEVBQUUsV0FBVztvQkFDbEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsR0FBRyxFQUFFLFVBQVU7b0JBQ2YsS0FBSyxFQUFFLEVBQUU7aUJBQ1Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2xFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTt3QkFDckMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7d0JBQ3JDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO3dCQUN4QyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtxQkFDcEM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2hFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTt3QkFDcEMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQ2hDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFFBQVE7b0JBQ3BELFdBQVcsRUFBRSwwQkFBMEI7b0JBQ3ZDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDcEI7Z0JBQ0QsSUFBSTtnQkFDSix1RUFBdUU7Z0JBQ3ZFLGVBQWU7Z0JBQ2Ysd0NBQXdDO2dCQUN4Qyw0Q0FBNEM7Z0JBQzVDLHlDQUF5QztnQkFDekMsTUFBTTtnQkFDTixJQUFJO2FBQ0w7U0FFRjtRQUVELE9BQU8sRUFBRTtZQUNQLFlBQVksRUFBRTtnQkFDWixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzNELEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7YUFDekQ7WUFDRCxVQUFVLEVBQUUsRUFBRTtZQUNkLFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTTtvQkFDdEUsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztpQkFDbEU7Z0JBQ0QsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNuRTtvQkFDRSxLQUFLLEVBQUUsV0FBVztvQkFDbEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsR0FBRyxFQUFFLFVBQVU7b0JBQ2YsS0FBSyxFQUFFLEVBQUU7aUJBQ1Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2xFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTt3QkFDckMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7d0JBQ3JDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO3dCQUN4QyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtxQkFDcEM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2hFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTt3QkFDcEMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQ2hDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFFBQVE7b0JBQ3BELFdBQVcsRUFBRSwwQkFBMEI7b0JBQ3ZDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDcEI7Z0JBQ0QsSUFBSTtnQkFDSix1RUFBdUU7Z0JBQ3ZFLGVBQWU7Z0JBQ2Ysd0NBQXdDO2dCQUN4Qyw0Q0FBNEM7Z0JBQzVDLHlDQUF5QztnQkFDekMsTUFBTTtnQkFDTixJQUFJO2FBQ0w7U0FFRjtRQUVELE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRTtnQkFDZCxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7Z0JBQy9FLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO2dCQUNsRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO2FBQ3pEO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDdkYsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUM1RSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO2dCQUMzRjtvQkFDRSxPQUFPLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVztvQkFDbkYsYUFBYSxFQUFFLEVBQ2Q7aUJBQ0Y7YUFDRjtZQUNELFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTTtvQkFDdEUsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztpQkFDbEU7Z0JBQ0QsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNuRTtvQkFDRSxLQUFLLEVBQUUsV0FBVztvQkFDbEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsR0FBRyxFQUFFLFVBQVU7b0JBQ2YsS0FBSyxFQUFFLEVBQUU7aUJBQ1Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2xFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTt3QkFDckMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7d0JBQ3JDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO3dCQUN4QyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtxQkFDcEM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2hFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTt3QkFDcEMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQ2hDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFFBQVE7b0JBQ3BELFdBQVcsRUFBRSwwQkFBMEI7b0JBQ3ZDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDcEI7Z0JBQ0QsSUFBSTtnQkFDSix1RUFBdUU7Z0JBQ3ZFLGVBQWU7Z0JBQ2Ysd0NBQXdDO2dCQUN4Qyw0Q0FBNEM7Z0JBQzVDLHlDQUF5QztnQkFDekMsTUFBTTtnQkFDTixJQUFJO2FBQ0w7U0FFRjtRQUVELGFBQWEsRUFBRTtZQUNiLGNBQWMsRUFBRTtnQkFFZCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNqSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUU5SjtvQkFDRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsZUFBZTtvQkFDNUssYUFBYSxFQUFFO3dCQUNiLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7d0JBQzNKLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7d0JBQ2xLLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7cUJBQ2xLO2lCQUNGO2dCQUNEO29CQUNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUU7d0JBQ2xMLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7d0JBQzNKLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO3dCQUMzSixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3dCQUM3SixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO3FCQUNsSztpQkFDRjtnQkFFRCxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFO2dCQUNyRyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3hHLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtnQkFDL0U7b0JBQ0UsT0FBTyxFQUFFLGtCQUFrQjtvQkFDM0IsTUFBTSxFQUFFLE9BQU87b0JBQ2YsS0FBSyxFQUFFLGtCQUFrQjtvQkFDekIsVUFBVSxFQUFFO3dCQUNWLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQ3BELEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQ3BELEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7cUJBQ3pEO2lCQUNGO2dCQUNELEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFO2dCQUN4RTtvQkFDRSxPQUFPLEVBQUUsd0JBQXdCO29CQUNqQyxNQUFNLEVBQUUsT0FBTztvQkFDZixLQUFLLEVBQUUsd0JBQXdCO29CQUMvQixVQUFVLEVBQUU7d0JBQ1YsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTt3QkFDaEUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtxQkFDN0Q7aUJBQ0Y7YUFDRjtZQUNELFlBQVksRUFBRTtnQkFDWixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQ3ZGLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUU7Z0JBQ3JHLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7Z0JBQ3RFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtnQkFDOUgsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtnQkFDOUQsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtnQkFDNUQsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDcEUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDMUQsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUM1RSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQ3BJLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFO2dCQUNsRixFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFO2dCQUNwRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQzNEO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFDckYsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUN0RixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQ2xGLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtnQkFDekYsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUNuRixFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFO2dCQUNsRyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFO2dCQUN0RyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsMkNBQTJDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQ3BJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7YUFDakU7U0FDRjtRQUVELFVBQVUsRUFBRTtZQUNWLFlBQVksRUFBRTtnQkFDWixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzNELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUU7YUFDcEQ7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRTtnQkFDeEQsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtnQkFDaEUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO2dCQUMxRSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ2pHO29CQUNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXO29CQUNuRixhQUFhLEVBQUUsRUFDZDtpQkFDRjthQUNGO1lBQ0QsVUFBVSxFQUFFO2dCQUNWO29CQUNFLEtBQUssRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNO29CQUN0RSxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxDQUFDO2lCQUNsRTtnQkFFRCxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0JBQ25FO29CQUNFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUM5RCxPQUFPLEVBQUU7d0JBQ1AsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQ2pDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO3dCQUNsQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtxQkFDbEM7aUJBQ0Y7Z0JBRUQ7b0JBQ0UsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2pFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTt3QkFDckMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7d0JBQ3JDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO3dCQUN4QyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtxQkFDcEM7aUJBQ0Y7Z0JBQ0QsbUZBQW1GO2FBRXBGO1NBQ0Y7UUFFRCxPQUFPLEVBQUU7WUFDUCxZQUFZLEVBQUU7Z0JBQ1osRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO2dCQUMzRCxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFO2FBQ3BEO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUU7Z0JBQ3hELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQ2hFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRTtnQkFDMUUsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFFO2dCQUNqRztvQkFDRSxPQUFPLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsV0FBVztvQkFDbkYsYUFBYSxFQUFFLEVBQ2Q7aUJBQ0Y7YUFDRjtZQUNELFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTTtvQkFDdEUsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztpQkFDbEU7Z0JBQ0QsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNuRTtvQkFDRSxLQUFLLEVBQUUsV0FBVztvQkFDbEIsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsR0FBRyxFQUFFLFVBQVU7b0JBQ2YsS0FBSyxFQUFFLEVBQUU7aUJBQ1Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2xFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTt3QkFDckMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUU7d0JBQ3JDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFO3dCQUN4QyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtxQkFDcEM7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2hFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTt3QkFDcEMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7d0JBQ2hDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO3FCQUNyQztpQkFDRjtnQkFDRDtvQkFDRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFFBQVE7b0JBQ3BELFdBQVcsRUFBRSwwQkFBMEI7b0JBQ3ZDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDcEI7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ2pFLE9BQU8sRUFBRTt3QkFDUCxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTt3QkFDaEMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7d0JBQ3BDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO3FCQUNuQztpQkFDRjthQUNGO1NBRUY7S0FFRixDQUFDO0lBQ0YsWUFBWSxDQUFTO0lBRXJCLFlBQW9CLElBQWdCLEVBQVUsa0JBQXNDLEVBQVMsZUFBZ0M7UUFBekcsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBUyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFBSSxDQUFDO0lBRWxJLHVCQUF1QixDQUFDLEtBQVU7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFDakQsQ0FBQztJQUlELFFBQVE7UUFDTixzRkFBc0Y7UUFDdEYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5RCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO2dCQUM1QixDQUFDO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDekIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDeEMsQ0FBQztRQUVILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNmLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQzNDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUMzSSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUE7Z0JBQzFCLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELCtEQUErRDtJQUMvRCxXQUFXLENBQUMsS0FBVTtRQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG9EQUFvRDtJQUNoRyxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWE7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLHlDQUF5QztJQUMvRyxDQUFDO0lBQ0Qsc0ZBQXNGO0lBQ3RGLElBQUksZUFBZTtRQUNqQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3JELE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVELCtDQUErQztJQUMvQyxnQkFBZ0IsQ0FBQyxlQUFvQixFQUFFLGNBQW1CLEVBQUUsR0FBUSxFQUFFLE9BQWUsRUFBRSxTQUFrQjtRQUN2RyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZGLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCx5REFBeUQ7WUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQixDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixrREFBa0Q7WUFDbEQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNmLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELGNBQWMsQ0FBQyxHQUFXLEVBQUUsS0FBVTtRQUNwQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCx3Q0FBd0M7SUFDeEMsYUFBYSxDQUFDLGVBQW9CLEVBQUUsY0FBbUIsRUFBRSxHQUFRLEVBQUUsS0FBVTtRQUMzRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzFDLDJGQUEyRjtZQUMzRixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3hELCtJQUErSTtZQUMvSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQUUsT0FBTztZQUV4Qyw0Q0FBNEM7WUFDNUMsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFckYsZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDZixTQUFTLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtnQkFDN0UsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQsNkJBQTZCO1lBQzdCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDO1lBRXBCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyw2QkFBNkI7Z0JBQzNELEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakIsQ0FBQztZQUVELHVDQUF1QztZQUN2QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV0QyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxpREFBaUQ7UUFDcEYsQ0FBQztJQUNILENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxLQUFjO1FBQzdCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFFckcsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixLQUFLLEdBQUcsR0FBRyxLQUFLLElBQUksQ0FBQztZQUN2QixDQUFDO1lBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCx5REFBeUQ7SUFDekQsaUJBQWlCLENBQUMsSUFBUztRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFFeEIsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQy9DLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFdkMsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTdDLDBFQUEwRTtRQUMxRSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzNDLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDM0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCw4Q0FBOEM7SUFDOUMsU0FBUyxDQUFDLE9BQWM7UUFDdEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELG1FQUFtRTtJQUNuRSxZQUFZLENBQUMsT0FBYyxFQUFFLEVBQVU7UUFDckMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUNELCtCQUErQjtJQUMvQixZQUFZLENBQUMsR0FBVztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztJQUN2QixDQUFDO0lBQ0QsaUNBQWlDO0lBQ2pDLE1BQU07UUFDSiwrQkFBK0I7SUFDakMsQ0FBQztJQUNELGtDQUFrQztJQUNsQyxRQUFRO1FBQ04sc0NBQXNDO0lBQ3hDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxXQUFtQjtRQUNsQyxtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFFekIsb0RBQW9EO1FBRXBELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsbURBQW1EO1FBQ3JELENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTztRQUVsQyw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBRWhFLDhDQUE4QztRQUM5QyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhDLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixPQUFPLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDaEUsQ0FBQztJQUNELGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBWSxFQUFFLEtBQVk7UUFDdkMsTUFBTSxPQUFPLEdBQUksS0FBSyxDQUFDLE1BQTJCLENBQUMsT0FBTyxDQUFDO1FBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBYSxFQUFFLElBQVk7UUFDdkMsSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDM0IsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxzQ0FBc0MsQ0FBQztnQkFDM0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELGNBQWMsQ0FBQyxJQUFZLEVBQUUsS0FBVTtRQUNyQyxJQUFJLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUUvQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDZCxrREFBa0Q7Z0JBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlDLENBQUM7WUFDRCxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5Qix1Q0FBdUM7Z0JBQ3ZDLElBQUksR0FBRyxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQywyQkFBMkI7Z0JBQ25FLENBQUM7cUJBQU0sQ0FBQztvQkFDTixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsMkJBQTJCO2dCQUMvQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxjQUFjO1lBQ2hDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBQ0QsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzRyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLGFBQWEsQ0FBQyxPQUFZO1FBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3pFLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNySCxDQUFDO0lBQ0gsQ0FBQztJQUNELGtDQUFrQztJQUNsQyxtQkFBbUIsQ0FBQyxlQUFvQixFQUFFLGNBQXNCLEVBQUUsWUFBb0IsRUFBRSxPQUFlO1FBQ3JHLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFM0MsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxZQUFZLENBQUMsQ0FBQztRQUVsRixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pGLENBQUM7SUFFRCwrREFBK0Q7SUFDL0Qsc0JBQXNCLENBQUMsZUFBb0IsRUFBRSxjQUFzQixFQUFFLFlBQW9CLEVBQUUsT0FBZSxFQUFFLEtBQVk7UUFDdEgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4RCw4SUFBOEk7UUFDOUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQUUsT0FBTztRQUV4Qyw0Q0FBNEM7UUFDNUMsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxZQUFZLENBQUMsQ0FBQztRQUVoRixnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsU0FBUyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtZQUN4RSxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFFRCw2QkFBNkI7UUFDN0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUM7UUFFcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyw2QkFBNkI7WUFDM0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDO1FBRUQsdUNBQXVDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBRXRELEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxZQUFZLEVBQUUsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUM3RixJQUFJLE9BQU8sS0FBSyxlQUFlLEVBQUUsQ0FBQztZQUNoQyxJQUFJLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSxZQUFZLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNsQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsYUFBYSxDQUFBO1lBQ2hDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFBO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDN0Isa0RBQWtEO1lBQ2xELElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNsQyxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQy9CLENBQUM7WUFDRCxJQUFJLFlBQVksQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxhQUFhLENBQUE7WUFDaEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUE7WUFDekIsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQTtJQUMxQyxDQUFDO0lBQ0QsYUFBYSxDQUFDLElBQVk7UUFDeEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLGNBQWM7UUFDWixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUs7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRztZQUNmLEdBQUcsSUFBSSxDQUFDLFNBQVM7WUFDakIsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1NBQzdCLENBQUM7SUFDSixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixhQUFhLEVBQUUsSUFBSTtZQUNuQixLQUFLLEVBQUUsQ0FBQztZQUNSLE1BQU0sRUFBRSxDQUFDO1lBQ1QsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsS0FBSztZQUNaLFVBQVUsRUFBRSxDQUFDO1lBQ2IsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFNLEdBQUcsRUFBRTtTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFNLEdBQUcsRUFBRTtTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVcsR0FBRyxDQUFDO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVcsR0FBRyxDQUFDO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVcsR0FBRyxDQUFDO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxTQUFTLEdBQUc7WUFDZixHQUFHLElBQUksQ0FBQyxTQUFTO1lBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVcsR0FBRyxDQUFDO1NBQzNDLENBQUM7SUFDSixDQUFDO0lBQ08sZUFBZTtRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsU0FBUztZQUNqQixLQUFLLEVBQUUsUUFBUTtZQUNmLEtBQUssRUFBRSxRQUFRO1lBQ2YsVUFBVSxFQUFFLENBQUM7WUFDYixVQUFVLEVBQUUsQ0FBQztTQUNkLENBQUM7SUFDSixDQUFDO0lBQ0QsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFVO1FBQzNCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7WUFDeEMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDN0YsaUNBQWlDO1FBQ25DLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUdELFlBQVksQ0FBQyxxQkFBaUM7UUFDNUMsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCx1Q0FBdUM7SUFDdkMsbUJBQW1CLENBQUMsU0FBaUI7UUFDbkMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDO2FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDWCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNyQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixNQUFNLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBZ0IsQ0FBQyxDQUFDO2dCQUMxRCxNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsMENBQTBDO0lBQzFDLGlCQUFpQixDQUFDLEtBQVU7UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBQyxLQUFLLENBQUMsQ0FBQTtRQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsRSxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUE7UUFDM0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsa0JBQWtCLENBQUMsS0FBWTtRQUM3QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ3JELENBQUM7SUFFRCx1Q0FBdUM7SUFFdkMsY0FBYyxDQUFDLEtBQVk7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFDRCwrQ0FBK0M7SUFDL0MsV0FBVyxDQUFDLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixLQUFLLENBQUMsWUFBYSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFDN0MsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxVQUFVLENBQUMsS0FBZ0I7UUFDekIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsTUFBTSxDQUFDLEtBQWdCLEVBQUUsR0FBVztRQUNsQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsTUFBTSxRQUFRLEdBQUksS0FBSyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqRyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUUxQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzVGLHFEQUFxRDtZQUNyRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0UsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUM7WUFFeEUsaUJBQWlCO1lBQ2pCLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNoRyxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBYTtRQUN6QixJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUN6Rix1REFBdUQ7WUFDdkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7d0dBL29DVSxzQkFBc0I7NEZBQXRCLHNCQUFzQix3YkNsQm5DLHM4M0JBcWVBLHczUkR2ZFksWUFBWSw2VkFBRSxXQUFXLGtpREFBRSxrQkFBa0IsdUxBQUUscUJBQXFCOzs0RkFJbkUsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLG9CQUFvQixjQUNsQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixDQUFDOzhJQU1yRSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdFLG1CQUFtQjtzQkFBM0IsS0FBSztnQkF3Q0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVvQyxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBbWpDeEMsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDcm9wcGVyUG9zaXRpb24sIERpbWVuc2lvbnMsIEltYWdlVHJhbnNmb3JtIH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUGRmRGVzaWduZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGRmLWRlc2lnbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3NlYXJjaC1ib3gvc2VhcmNoLWJveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSW1hZ2VDcm9wcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9pbWFnZS1jcm9wcGVyL2NvbXBvbmVudC9pbWFnZS1jcm9wcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZW1wbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90ZW1wbGF0ZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXBkZi1wcm9wZXJ0aWVzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFNlYXJjaEJveENvbXBvbmVudCwgSW1hZ2VDcm9wcGVyQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL3BkZi1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3BkZi1wcm9wZXJ0aWVzLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIFBkZlByb3BlcnRpZXNDb21wb25lbnQge1xuXG4gIEBPdXRwdXQoKSBmb3JtQnV0dG9uSGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgdGVtcGxhdGVTYXZlSGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBzZWxlY3RlZE9wdGlvbjogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkRWxlbWVudEluZGV4OiBudW1iZXIgPSAtMTtcbiAgQElucHV0KCkgc2VsZWN0ZWRFbGVtZW50VHlwZTogc3RyaW5nID0gJyc7XG4gIHNlbGVjdGVkQWxpZ246IHN0cmluZyA9ICdhbGlnbi1sZWZ0JzsgIC8vIEFkZCB0aGlzIHByb3BlcnR5XG4gIHNlbGVjdGVkU3R5bGVzOiBzdHJpbmdbXSA9IFtdOyAgLy8gVXNpbmcgYXJyYXkgc2luY2UgbXVsdGlwbGUgc3R5bGVzIGNhbiBiZSBzZWxlY3RlZFxuICBzZWxlY3RlZEVsZW1lbnQ6IGFueSA9IG51bGw7ICAvLyBSZWNlaXZlIHRoZSBzZWxlY3RlZCBlbGVtZW50XG4gIGhlYWRlclNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBib29rSWQ6IGFueTtcbiAgcGRmOiBhbnk7XG4gIGFjdGl2ZVRhYjogc3RyaW5nID0gJ2F0dHJpYnV0ZXMnO1xuICBzZWxlY3RDb2x1bW46IGFueVxuICB0cmFuc2Zvcm06IEltYWdlVHJhbnNmb3JtID0ge1xuICAgIHRyYW5zbGF0ZVVuaXQ6ICdweCcsXG4gICAgc2NhbGU6IDEsXG4gICAgcm90YXRlOiAwLFxuICAgIGZsaXBIOiBmYWxzZSxcbiAgICBmbGlwVjogZmFsc2UsXG4gICAgdHJhbnNsYXRlSDogMCxcbiAgICB0cmFuc2xhdGVWOiAwXG4gIH07XG4gIGNhbnZhc1JvdGF0aW9uID0gMDtcbiAgY3JvcHBlcj86IENyb3BwZXJQb3NpdGlvbjtcbiAgbG9hZGluZyA9IGZhbHNlO1xuICBjcm9wcGVyTWF4SGVpZ2h0ID0gMDtcbiAgY3JvcHBlck1heFdpZHRoID0gMDtcbiAgY3JvcHBlck1pbkhlaWdodCA9IDA7XG4gIGNyb3BwZXJNaW5XaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNXaWR0aCA9IDA7XG4gIGNyb3BwZXJTdGF0aWNIZWlnaHQgPSAwO1xuICBhc3BlY3RSYXRpbyA9IDQgLyAzO1xuICByb3VuZENyb3BwZXIgPSBmYWxzZTtcbiAgaW1hZ2VDaGFuZ2VkRXZlbnQ6IEV2ZW50IHwgbnVsbCA9IG51bGw7XG4gIGFsaWduSW1hZ2UgPSAnY2VudGVyJyBhcyBjb25zdDtcbiAgLy8gIFwiZW5kcG9pbnRcIjogXCJodHRwczovL2Rldi1hcGkudmFsYXJoci5jb20vbnh0XCIsXG4gIC8vIFNLUzI4TUFSMjUgZGVmYXVsdCBwZGYgc2VhcmNoIGVuZHBvaW50XG4gIGJvb2tTdWJ0ZXh0ID0ge1xuICAgIFwiZW5kcG9pbnRcIjogXCJodHRwczovLzJmOGU0NTIzLWJiNGUtNDlkOS1hMTdhLTM2M2FkNTc3YmI2MC5tb2NrLnBzdG1uLmlvL3BkZlwiLFxuICAgIFwidmFyaWFibGVcIjogbnVsbCxcbiAgICBcImZpZWxkXCI6IFsndGl0bGUnXSxcbiAgICBcImRlZmF1bHRGaWVsZFwiOiBcInRpdGxlXCJcbiAgfVxuICBpc0xpbmtEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdGVtcGxhdGVTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRyb3Bkb3duITogRWxlbWVudFJlZjtcblxuXG4gIGRyYWdnZWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHBkZkVsZW1lbnRzOiBhbnlbXSA9IFtdO1xuIFxuICB1bmlxdWVfaWQ6IHN0cmluZyA9ICdwZGYtMTIzNCc7IC8vIHNob3VsZCBiZSBjb25zaXN0ZW50XG4gIHNlbGVjdGVkVGVtcGxhdGU6IGFueTtcblxuICBlbGVtZW50UHJvcGVydGllcyA9IHtcbiAgICAvLyBBUC0xME1BUjI1IC0gRGVmaW5lcyB0aGUgSGVhZGVyIGVsZW1lbnQgd2l0aCBhIHRleHQgaW5wdXQgZmllbGQgICBcbiAgICAvLyBBUC0yNU1BUjI1IEFkZCBzdWJ0ZXh0IGFsbCB2YXJpYWJsZXNcbiAgICAnSGVhZGVyJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdMYWJlbCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAndGl0bGUnIH1dXG4gICAgfSxcblxuICAgICd0ZXh0Jzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRWxlbWVudCcsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdxdWVzdGlvbk51bWJlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJ3dpZHRoJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3dpZHRoJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3ZhbHVlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlIEZpZWxkJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW50ZXIgVGV4dFwiLCBcInR5cGVcIjogXCJzdWJRdWVzdGlvblwiLCBcImtleVwiOiBcImlzU3ViVGV4dFwiLFxuICAgICAgICAgIFwic3ViUXVlc3Rpb25cIjogW1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGFwcGVhcmFuY2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnU2VsZWN0IEZvbnQnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udCcsIHBsYWNlaG9sZGVyOiAnTGVmdCcsXG4gICAgICAgICAgb3B0aW9uczogWydIZWx2ZXRpY2EgTmV1ZScsICdBcmlhbCcsICdUaW1lcyBOZXcgUm9tYW4nLCAnUm9ib3RvJ11cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZvbnQgQ29sb3InLCB0eXBlOiAnY29sb3InLCBrZXk6ICdmb250Q29sb3InLCB2YWx1ZTogJycgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRm9udCBTaXplJyxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJywgICAgXG4gICAgICAgICAga2V5OiAnZm9udFNpemUnLFxuICAgICAgICAgIHZhbHVlOiAxNCAgICAgICAgICBcbiAgICAgICAgfSwgICAgICAgIFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFdlaWdodCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250V2VpZ2h0JywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgdmFsdWU6ICc0MDAnLCBsYWJlbDogJzQwMC1Ob3JtYWwnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNTAwJywgbGFiZWw6ICc1MDAtTWVkaXVtJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzYwMCcsIGxhYmVsOiAnNjAwLVNlbWkgQm9sZCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc3MDAnLCBsYWJlbDogJzcwMC1Cb2xkJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFN0eWxlJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRTdHlsZScsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm9ybWFsJywgdmFsdWU6ICdub3JtYWwnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQm9sZCcsIHZhbHVlOiAnYm9sZCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdJdGFsaWMnLCB2YWx1ZTogJ2l0YWxpYycgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnTWFyZ2luJywgdHlwZTogJ21hcmdpblBpY2tlcicsIGtleTogJ21hcmdpbicsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdMZWZ0LCBUb3AsIFJpZ2h0LCBCb3R0b20nLFxuICAgICAgICAgIHZhbHVlOiBbMCwgMCwgMCwgMF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQWxpZ24gSXRlbScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdhbGlnbkl0ZW1zJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdMZWZ0JywgdmFsdWU6ICdsZWZ0JyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0NlbnRlcicsIHZhbHVlOiAnY2VudGVyJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ1JpZ2h0JywgdmFsdWU6ICdyaWdodCcgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgICAgXG4gICAgfSxcbiAgICAnaW5wdXQnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ1BsYWNlIEhvbGRlcicsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncXVlc3Rpb24nIH0sXG4gICAgICAgIHsgbGFiZWw6ICdFbGVtZW50JywgdHlwZTogJ251bWJlcicsIGtleTogJ3F1ZXN0aW9uTnVtYmVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnd2lkdGgnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnd2lkdGgnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1ZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0Jywga2V5OiAndmFsdWUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UgRmllbGQnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsXCI6IFwiXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbnRlciBUZXh0XCIsIFwidHlwZVwiOiBcInN1YlF1ZXN0aW9uXCIsIFwia2V5XCI6IFwiaXNTdWJUZXh0XCIsXG4gICAgICAgICAgXCJzdWJRdWVzdGlvblwiOiBbXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgYXBwZWFyYW5jZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdTZWxlY3QgRm9udCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250JywgcGxhY2Vob2xkZXI6ICdMZWZ0JyxcbiAgICAgICAgICBvcHRpb25zOiBbJ0hlbHZldGljYSBOZXVlJywgJ0FyaWFsJywgJ1RpbWVzIE5ldyBSb21hbicsICdSb2JvdG8nXVxuICAgICAgICB9LFxuICAgICAgICB7IGxhYmVsOiAnRm9udCBDb2xvcicsIHR5cGU6ICdjb2xvcicsIGtleTogJ2ZvbnRDb2xvcicsIHZhbHVlOiAnJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFNpemUnLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInLCAgICBcbiAgICAgICAgICBrZXk6ICdmb250U2l6ZScsXG4gICAgICAgICAgdmFsdWU6IDE0ICAgICAgICAgIFxuICAgICAgICB9LCAgICAgICAgXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgV2VpZ2h0JywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRXZWlnaHQnLCB2YWx1ZTogJycsXG4gICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgeyB2YWx1ZTogJzQwMCcsIGxhYmVsOiAnNDAwLU5vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc1MDAnLCBsYWJlbDogJzUwMC1NZWRpdW0nIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNjAwJywgbGFiZWw6ICc2MDAtU2VtaSBCb2xkJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzcwMCcsIGxhYmVsOiAnNzAwLUJvbGQnIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgU3R5bGUnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udFN0eWxlJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdOb3JtYWwnLCB2YWx1ZTogJ25vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdCb2xkJywgdmFsdWU6ICdib2xkJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0l0YWxpYycsIHZhbHVlOiAnaXRhbGljJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdNYXJnaW4nLCB0eXBlOiAnbWFyZ2luUGlja2VyJywga2V5OiAnbWFyZ2luJyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0xlZnQsIFRvcCwgUmlnaHQsIEJvdHRvbScsXG4gICAgICAgICAgdmFsdWU6IFswLCAwLCAwLCAwXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdBbGlnbiBJdGVtJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2FsaWduSXRlbXMnLCB2YWx1ZTogJycsXG4gICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgeyBsYWJlbDogJ0xlZnQnLCB2YWx1ZTogJ2xlZnQnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQ2VudGVyJywgdmFsdWU6ICdjZW50ZXInIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnUmlnaHQnLCB2YWx1ZTogJ3JpZ2h0JyB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgICBcbiAgICB9LFxuICAgICdkYXRlJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdQbGFjZSBIb2xkZXInLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3F1ZXN0aW9uJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRWxlbWVudCcsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdxdWVzdGlvbk51bWJlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJ3dpZHRoJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3dpZHRoJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3ZhbHVlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlIEZpZWxkJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW50ZXIgVGV4dFwiLCBcInR5cGVcIjogXCJzdWJRdWVzdGlvblwiLCBcImtleVwiOiBcImlzU3ViVGV4dFwiLFxuICAgICAgICAgIFwic3ViUXVlc3Rpb25cIjogW1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGFwcGVhcmFuY2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnU2VsZWN0IEZvbnQnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udCcsIHBsYWNlaG9sZGVyOiAnTGVmdCcsXG4gICAgICAgICAgb3B0aW9uczogWydIZWx2ZXRpY2EgTmV1ZScsICdBcmlhbCcsICdUaW1lcyBOZXcgUm9tYW4nLCAnUm9ib3RvJ11cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZvbnQgQ29sb3InLCB0eXBlOiAnY29sb3InLCBrZXk6ICdmb250Q29sb3InLCB2YWx1ZTogJycgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRm9udCBTaXplJyxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJywgICAgXG4gICAgICAgICAga2V5OiAnZm9udFNpemUnLFxuICAgICAgICAgIHZhbHVlOiAxNCAgICAgICAgICBcbiAgICAgICAgfSwgICAgICAgIFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFdlaWdodCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250V2VpZ2h0JywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgdmFsdWU6ICc0MDAnLCBsYWJlbDogJzQwMC1Ob3JtYWwnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNTAwJywgbGFiZWw6ICc1MDAtTWVkaXVtJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzYwMCcsIGxhYmVsOiAnNjAwLVNlbWkgQm9sZCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc3MDAnLCBsYWJlbDogJzcwMC1Cb2xkJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFN0eWxlJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRTdHlsZScsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm9ybWFsJywgdmFsdWU6ICdub3JtYWwnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQm9sZCcsIHZhbHVlOiAnYm9sZCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdJdGFsaWMnLCB2YWx1ZTogJ2l0YWxpYycgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnTWFyZ2luJywgdHlwZTogJ21hcmdpblBpY2tlcicsIGtleTogJ21hcmdpbicsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdMZWZ0LCBUb3AsIFJpZ2h0LCBCb3R0b20nLFxuICAgICAgICAgIHZhbHVlOiBbMCwgMCwgMCwgMF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQWxpZ24gSXRlbScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdhbGlnbkl0ZW1zJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdMZWZ0JywgdmFsdWU6ICdsZWZ0JyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0NlbnRlcicsIHZhbHVlOiAnY2VudGVyJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ1JpZ2h0JywgdmFsdWU6ICdyaWdodCcgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgICAgXG4gICAgfSxcbiAgICAnUGRmJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbICAgXG4gICAgICAgIHsgbGFiZWw6ICdFbGVtZW50JywgdHlwZTogJ251bWJlcicsIGtleTogJ3F1ZXN0aW9uTnVtYmVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnd2lkdGgnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnd2lkdGgnIH1cbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3ZhbHVlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlIEZpZWxkJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW50ZXIgVGV4dFwiLCBcInR5cGVcIjogXCJzdWJRdWVzdGlvblwiLCBcImtleVwiOiBcImlzU3ViVGV4dFwiLFxuICAgICAgICAgIFwic3ViUXVlc3Rpb25cIjogW1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGFwcGVhcmFuY2U6IFtdXG4gICAgfSxcbiAgICAvLyBBUC0xOU1BUjI1IEFkZCBMaW5lIFByb3BlcnR5XG4gICAgJ0xpbmUnOiB7XG4gICAgICBlbGVtZW50UHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJ0xpbmUgV2lkdGgnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnd2lkdGgnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdQYWRkaW5nIFRvcCcsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdwYWRkaW5nVG9wJywgcGxhY2Vob2xkZXI6ICdFbnRlciBwYWRkaW5nIHRvcCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1BhZGRpbmcgQm90dG9tJywgdHlwZTogJ251bWJlcicsIGtleTogJ3BhZGRpbmdCb3R0b20nLCBwbGFjZWhvbGRlcjogJ0VudGVyIHBhZGRpbmcgYm90dG9tJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdMaW5lIFN0eWxlJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2xpbmVTdHlsZScsXG4gICAgICAgICAgb3B0aW9uczogWydTb2xpZCcsICdEYXNoZWQnLCAnRG90dGVkJ11cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtdLFxuICAgICAgYXBwZWFyYW5jZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdTZWxlY3QgRm9udCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250JywgcGxhY2Vob2xkZXI6ICdMZWZ0JyxcbiAgICAgICAgICBvcHRpb25zOiBbJ0hlbHZldGljYSBOZXVlJywgJ0FyaWFsJywgJ1RpbWVzIE5ldyBSb21hbicsICdSb2JvdG8nXVxuICAgICAgICB9LFxuICAgICAgICB7IGxhYmVsOiAnRm9udCBDb2xvcicsIHR5cGU6ICdjb2xvcicsIGtleTogJ2ZvbnRDb2xvcicsIHZhbHVlOiAnJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFNpemUnLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInLCAgICBcbiAgICAgICAgICBrZXk6ICdmb250U2l6ZScsXG4gICAgICAgICAgdmFsdWU6IDE0ICAgICAgICAgIFxuICAgICAgICB9LCAgICAgICAgXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgV2VpZ2h0JywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRXZWlnaHQnLCB2YWx1ZTogJycsXG4gICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgeyB2YWx1ZTogJzQwMCcsIGxhYmVsOiAnNDAwLU5vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc1MDAnLCBsYWJlbDogJzUwMC1NZWRpdW0nIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNjAwJywgbGFiZWw6ICc2MDAtU2VtaSBCb2xkJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzcwMCcsIGxhYmVsOiAnNzAwLUJvbGQnIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgU3R5bGUnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udFN0eWxlJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdOb3JtYWwnLCB2YWx1ZTogJ25vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdCb2xkJywgdmFsdWU6ICdib2xkJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0l0YWxpYycsIHZhbHVlOiAnaXRhbGljJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdNYXJnaW4nLCB0eXBlOiAnbWFyZ2luUGlja2VyJywga2V5OiAnbWFyZ2luJyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0xlZnQsIFRvcCwgUmlnaHQsIEJvdHRvbScsXG4gICAgICAgICAgdmFsdWU6IFswLCAwLCAwLCAwXVxuICAgICAgICB9LFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgbGFiZWw6ICdBbGlnbiBJdGVtJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2FsaWduSXRlbXMnLCB2YWx1ZTogJycsXG4gICAgICAgIC8vICAgb3B0aW9uczogW1xuICAgICAgICAvLyAgICAgeyBsYWJlbDogJ0xlZnQnLCB2YWx1ZTogJ2xlZnQnIH0sXG4gICAgICAgIC8vICAgICB7IGxhYmVsOiAnQ2VudGVyJywgdmFsdWU6ICdjZW50ZXInIH0sXG4gICAgICAgIC8vICAgICB7IGxhYmVsOiAnUmlnaHQnLCB2YWx1ZTogJ3JpZ2h0JyB9XG4gICAgICAgIC8vICAgXVxuICAgICAgICAvLyB9XG4gICAgICBdXG4gICAgICBcbiAgICB9LFxuXG4gICAgJ1NwYWNlJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdFbGVtZW50JywgdHlwZTogJ251bWJlcicsIGtleTogJ3F1ZXN0aW9uTnVtYmVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRmllbGQgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICd3aWR0aCcgfSxcbiAgICAgIF0sXG4gICAgICBmaWVsZFByb3BzOiBbXSxcbiAgICAgIGFwcGVhcmFuY2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnU2VsZWN0IEZvbnQnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udCcsIHBsYWNlaG9sZGVyOiAnTGVmdCcsXG4gICAgICAgICAgb3B0aW9uczogWydIZWx2ZXRpY2EgTmV1ZScsICdBcmlhbCcsICdUaW1lcyBOZXcgUm9tYW4nLCAnUm9ib3RvJ11cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZvbnQgQ29sb3InLCB0eXBlOiAnY29sb3InLCBrZXk6ICdmb250Q29sb3InLCB2YWx1ZTogJycgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRm9udCBTaXplJyxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJywgICAgXG4gICAgICAgICAga2V5OiAnZm9udFNpemUnLFxuICAgICAgICAgIHZhbHVlOiAxNCAgICAgICAgICBcbiAgICAgICAgfSwgICAgICAgIFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFdlaWdodCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250V2VpZ2h0JywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgdmFsdWU6ICc0MDAnLCBsYWJlbDogJzQwMC1Ob3JtYWwnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNTAwJywgbGFiZWw6ICc1MDAtTWVkaXVtJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzYwMCcsIGxhYmVsOiAnNjAwLVNlbWkgQm9sZCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc3MDAnLCBsYWJlbDogJzcwMC1Cb2xkJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFN0eWxlJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRTdHlsZScsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm9ybWFsJywgdmFsdWU6ICdub3JtYWwnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQm9sZCcsIHZhbHVlOiAnYm9sZCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdJdGFsaWMnLCB2YWx1ZTogJ2l0YWxpYycgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnTWFyZ2luJywgdHlwZTogJ21hcmdpblBpY2tlcicsIGtleTogJ21hcmdpbicsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdMZWZ0LCBUb3AsIFJpZ2h0LCBCb3R0b20nLFxuICAgICAgICAgIHZhbHVlOiBbMCwgMCwgMCwgMF1cbiAgICAgICAgfSxcbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgIGxhYmVsOiAnQWxpZ24gSXRlbScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdhbGlnbkl0ZW1zJywgdmFsdWU6ICcnLFxuICAgICAgICAvLyAgIG9wdGlvbnM6IFtcbiAgICAgICAgLy8gICAgIHsgbGFiZWw6ICdMZWZ0JywgdmFsdWU6ICdsZWZ0JyB9LFxuICAgICAgICAvLyAgICAgeyBsYWJlbDogJ0NlbnRlcicsIHZhbHVlOiAnY2VudGVyJyB9LFxuICAgICAgICAvLyAgICAgeyBsYWJlbDogJ1JpZ2h0JywgdmFsdWU6ICdyaWdodCcgfVxuICAgICAgICAvLyAgIF1cbiAgICAgICAgLy8gfVxuICAgICAgXVxuICAgICAgXG4gICAgfSxcblxuICAgIFwiVGFibGVcIjoge1xuICAgICAgXCJlbGVtZW50UHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJyb3dDaG9pY2VcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwicm93Q2hvaWNlXCIgfSxcbiAgICAgICAgeyBsYWJlbDogJ3F1ZXN0aW9uTnVtYmVyJywgdHlwZTogJ251bWJlcicsIGtleTogJ3F1ZXN0aW9uTnVtYmVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnVGFibGUgU2l6ZScsIHR5cGU6ICdmaWVsZFNpemUnLCBrZXk6ICd3aWR0aCcgfSxcbiAgICAgIF0sXG4gICAgICBcImZpZWxkUHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJ0YWJlbElkXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBfVGFiZWxfMDFcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmVsSWRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJ2YWx1ZVwiLCBcInBsYWNlaG9sZGVyXCI6IFwiVmFsdWVcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInZhbHVlXCIgfSxcbiAgICAgICAgeyBsYWJlbDogJ1JlZmVyZW5jZScsIHBsYWNlaG9sZGVyOiAnUmVmZXJlbmNlIEZpZWxkJywgdHlwZTogJ3RleHQnLCBrZXk6ICdyZWZlcmVuY2VGaWVsZCcgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVudGVyIFRleHRcIiwgXCJ0eXBlXCI6IFwic3ViUXVlc3Rpb25cIiwgXCJrZXlcIjogXCJpc1N1YlRleHRcIixcbiAgICAgICAgICBcInN1YlF1ZXN0aW9uXCI6IFtcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYXBwZWFyYW5jZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdTZWxlY3QgRm9udCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250JywgcGxhY2Vob2xkZXI6ICdMZWZ0JyxcbiAgICAgICAgICBvcHRpb25zOiBbJ0hlbHZldGljYSBOZXVlJywgJ0FyaWFsJywgJ1RpbWVzIE5ldyBSb21hbicsICdSb2JvdG8nXVxuICAgICAgICB9LFxuICAgICAgICB7IGxhYmVsOiAnRm9udCBDb2xvcicsIHR5cGU6ICdjb2xvcicsIGtleTogJ2ZvbnRDb2xvcicsIHZhbHVlOiAnJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFNpemUnLFxuICAgICAgICAgIHR5cGU6ICdudW1iZXInLCAgICBcbiAgICAgICAgICBrZXk6ICdmb250U2l6ZScsXG4gICAgICAgICAgdmFsdWU6IDE0ICAgICAgICAgIFxuICAgICAgICB9LCAgICAgICAgXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgV2VpZ2h0JywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRXZWlnaHQnLCB2YWx1ZTogJycsXG4gICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgeyB2YWx1ZTogJzQwMCcsIGxhYmVsOiAnNDAwLU5vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc1MDAnLCBsYWJlbDogJzUwMC1NZWRpdW0nIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNjAwJywgbGFiZWw6ICc2MDAtU2VtaSBCb2xkJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzcwMCcsIGxhYmVsOiAnNzAwLUJvbGQnIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgU3R5bGUnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udFN0eWxlJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdOb3JtYWwnLCB2YWx1ZTogJ25vcm1hbCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdCb2xkJywgdmFsdWU6ICdib2xkJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0l0YWxpYycsIHZhbHVlOiAnaXRhbGljJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdNYXJnaW4nLCB0eXBlOiAnbWFyZ2luUGlja2VyJywga2V5OiAnbWFyZ2luJyxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ0xlZnQsIFRvcCwgUmlnaHQsIEJvdHRvbScsXG4gICAgICAgICAgdmFsdWU6IFswLCAwLCAwLCAwXVxuICAgICAgICB9LFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgbGFiZWw6ICdBbGlnbiBJdGVtJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2FsaWduSXRlbXMnLCB2YWx1ZTogJycsXG4gICAgICAgIC8vICAgb3B0aW9uczogW1xuICAgICAgICAvLyAgICAgeyBsYWJlbDogJ0xlZnQnLCB2YWx1ZTogJ2xlZnQnIH0sXG4gICAgICAgIC8vICAgICB7IGxhYmVsOiAnQ2VudGVyJywgdmFsdWU6ICdjZW50ZXInIH0sXG4gICAgICAgIC8vICAgICB7IGxhYmVsOiAnUmlnaHQnLCB2YWx1ZTogJ3JpZ2h0JyB9XG4gICAgICAgIC8vICAgXVxuICAgICAgICAvLyB9XG4gICAgICBdXG4gICAgICBcbiAgICB9LFxuXG4gICAgXCJUYWJsZUNvbHVtblwiOiB7XG4gICAgICBcImVsZW1lbnRQcm9wc1wiOiBbXG5cbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGVhZGVyTGFiZWxzXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBsb3llZSBEZXRhaWxzXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJ0YXJnZXRBcnJheVwiOiBcImZpZWxkc01ldGFcIiwgXCJ0YXJnZXRBcnJheUtleVwiOiBcInVuaXF1ZUlkZW50aWZpZXJcIiwgXCJrZXlcIjogXCJsYWJlbFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImFwaU5hbWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcImFwaU5hbWVcIiB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsXCI6IFwiU3VtbWFyeSBDb2x1bW5cIiwgXCJwbGFjZWhvbGRlclwiOiBcIlN1bW1hcnkgQ29sdW1uXCIsIFwidHlwZVwiOiBcInN1YlF1ZXN0aW9uXCIsIFwidGFyZ2V0QXJyYXlcIjogXCJmaWVsZHNNZXRhXCIsIFwidGFyZ2V0QXJyYXlLZXlcIjogXCJ1bmlxdWVJZGVudGlmaWVyXCIsIFwia2V5XCI6IFwic3VtbWFyeUNvbHVtblwiLFxuICAgICAgICAgIFwic3ViUXVlc3Rpb25cIjogW1xuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwiVHlwZVwiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW1wbG95ZWUgRGV0YWlsc1wiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwidGFyZ2V0QXJyYXlcIjogXCJmaWVsZHNNZXRhXCIsIFwidGFyZ2V0QXJyYXlLZXlcIjogXCJ1bmlxdWVJZGVudGlmaWVyXCIsIFwia2V5XCI6IFwiZmxkVHlwZVwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJPcGVyYXRpb25cIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcIm9wZXJhdGlvblwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJPcGVyYW5kc1wiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW1wbG95ZWUgRGV0YWlsc1wiLCBcInR5cGVcIjogXCJhcnJheVwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcIm9wZXJhbmRzXCIgfSxcbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsXCI6IFwiU3VtbWFyeSBSb3dcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlN1bW1hcnkgUm93XCIsIFwidHlwZVwiOiBcInN1YlF1ZXN0aW9uXCIsIFwidGFyZ2V0QXJyYXlcIjogXCJmaWVsZHNNZXRhXCIsIFwidGFyZ2V0QXJyYXlLZXlcIjogXCJ1bmlxdWVJZGVudGlmaWVyXCIsIFwia2V5XCI6IFwic3VtbWFyeVJvd1wiLCBcInN1YlF1ZXN0aW9uXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcIlR5cGVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcImZsZFR5cGVcIiB9LFxuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwib3BlcmF0aW9uXCIsIFwicGxhY2Vob2xkZXJcIjogXCJvcGVyYXRpb25cIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcIm9wZXJhdGlvblwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJjb2x1bW5cIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwicmFkaW9cIiwgXCJ0YXJnZXRBcnJheVwiOiBcImZpZWxkc01ldGFcIiwgXCJ0YXJnZXRBcnJheUtleVwiOiBcInVuaXF1ZUlkZW50aWZpZXJcIiwgXCJrZXlcIjogXCJjb2x1bW5cIiB9LFxuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwib3BlcmFuZHNcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkVtcGxveWVlIERldGFpbHNcIiwgXCJ0eXBlXCI6IFwiYXJyYXlcIiwgXCJ0YXJnZXRBcnJheVwiOiBcImZpZWxkc01ldGFcIiwgXCJ0YXJnZXRBcnJheUtleVwiOiBcInVuaXF1ZUlkZW50aWZpZXJcIiwgXCJrZXlcIjogXCJvcGVyYW5kc1wiIH0sXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiTGVmdFwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaW5wdXRUZXh0QWxpZ25tZW50XCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwidGFibGVTY2FsZVNpemVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIjA2IC0gRnVsbCBTY2FsZVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwidGFibGVTY2FsZVNpemVcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJyb3dDaG9pY2VcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwicm93Q2hvaWNlXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJxdWlja0FjdGlvblRvb2xzXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInF1aWNrQWN0aW9uVG9vbHNcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImVkaXRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiZWRpdFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2aWV3XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcInZpZXdcIiB9LFxuICAgICAgICAgICAgeyBcImxhYmVsXCI6IFwiZGVsZXRlXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImRlbGV0ZVwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImFkZFJlY29yZEV2ZW50XCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcImFkZFJlY29yZEV2ZW50XCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwibGFiZWxcIjogXCJ0YWJsZVNjcm9sbEV2ZW50Q2hvaWNlXCIsXG4gICAgICAgICAgXCJ0eXBlXCI6IFwiZ3JvdXBcIixcbiAgICAgICAgICBcImtleVwiOiBcInRhYmxlU2Nyb2xsRXZlbnRDaG9pY2VcIixcbiAgICAgICAgICBcImNoaWxkcmVuXCI6IFtcbiAgICAgICAgICAgIHsgXCJsYWJlbFwiOiBcImhvcml6b250YWxcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiaG9yaXpvbnRhbFwiIH0sXG4gICAgICAgICAgICB7IFwibGFiZWxcIjogXCJ2ZXJ0aWNhbFwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJ2ZXJ0aWNhbFwiIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBcImZpZWxkUHJvcHNcIjogW1xuICAgICAgICB7IFwibGFiZWxcIjogXCJ0YWJlbElkXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbXBfVGFiZWxfMDFcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInRhYmVsSWRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJpbnB1dFRleHRBbGlnbm1lbnRcIiwgXCJwbGFjZWhvbGRlclwiOiBcIkxlZnRcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImlucHV0VGV4dEFsaWdubWVudFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlcXVpcmVkRmllbGRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwicmVxdWlyZWRGaWVsZFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcIlJlYWQgT25seVwiLCBcInR5cGVcIjogXCJjaGVja2JveFwiLCBcInRhcmdldEFycmF5XCI6IFwiZmllbGRzTWV0YVwiLCBcInRhcmdldEFycmF5S2V5XCI6IFwidW5pcXVlSWRlbnRpZmllclwiLCBcImtleVwiOiBcImVkaXRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJoaWRlTGFiZWxcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiaGlkZUxhYmVsXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiZGlzYWJsZWRcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiZGlzYWJsZWRcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJoaWRlRWxlbWVudHNcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiaGlkZUVsZW1lbnRzXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwibWFza2luZ1wiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJtYXNraW5nXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwidmFsdWVcIiwgXCJwbGFjZWhvbGRlclwiOiBcIlZhbHVlXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJ2YWx1ZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlZmVyZW5jZUFuY2hvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiaHR0cDovL3NvdXJjZS9yYW5nZXJueHRfYmlvX2RhdGEvNzQvZC5kb2NcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJlZmVyZW5jZUFuY2hvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImNvbnRyb2xsaW5nRWxlbWVudHNcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiY29udHJvbGxpbmdFbGVtZW50c1wiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImlzRGVwZW5kZW5jZVwiLCBcInR5cGVcIjogXCJ0b2dnbGVcIiwgXCJrZXlcIjogXCJpc0RlcGVuZGVuY2VcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJuZXdMaW5lXCIsIFwidHlwZVwiOiBcInRvZ2dsZVwiLCBcImtleVwiOiBcIm5ld0xpbmVcIiB9XG4gICAgICBdLFxuICAgICAgXCJhcHBlYXJhbmNlXCI6IFtcbiAgICAgICAgeyBcImxhYmVsXCI6IFwic2VsZWN0Rm9udFwiLCBcInBsYWNlaG9sZGVyXCI6IFwiTGVmdFwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwic2VsZWN0Rm9udFwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImZvbnRDb2xvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiIzI4MzQzRVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiZm9udENvbG9yXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiaGV4Q29kZVwiLCBcInBsYWNlaG9sZGVyXCI6IFwiIzI4MzQzRVwiLCBcInR5cGVcIjogXCJ0ZXh0XCIsIFwia2V5XCI6IFwiaGV4Q29kZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImZvbnRTaXplXCIsIFwicGxhY2Vob2xkZXJcIjogXCIzMDAgLSBNZWRpdW1cIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImZvbnRTaXplXCIgfSxcbiAgICAgICAgeyBcImxhYmVsXCI6IFwiZm9udFdpZHRoXCIsIFwicGxhY2Vob2xkZXJcIjogXCJMZWZ0XCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJmb250V2lkdGhcIiB9LFxuICAgICAgICB7IFwibGFiZWxcIjogXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCJwbGFjZWhvbGRlclwiOiBcIiNFMkUyRTJcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcImJhY2tncm91bmRDb2xvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJhY2tncm91bmRIZXhDb2RlXCIsIFwicGxhY2Vob2xkZXJcIjogXCIjRTJFMkUyXCIsIFwidHlwZVwiOiBcInRleHRcIiwgXCJrZXlcIjogXCJiYWNrZ3JvdW5kSGV4Q29kZVwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcInJlZmVyZW5jZUFuY2hvclwiLCBcInBsYWNlaG9sZGVyXCI6IFwiaHR0cDovL3NvdXJjZS9yYW5nZXJueHRfYmlvX2RhdGEvNzQvZC5kb2NcIiwgXCJ0eXBlXCI6IFwidGV4dFwiLCBcImtleVwiOiBcInJlZmVyZW5jZUFuY2hvclwiIH0sXG4gICAgICAgIHsgXCJsYWJlbFwiOiBcImJsYW5rU3BhY2VcIiwgXCJ0eXBlXCI6IFwidG9nZ2xlXCIsIFwia2V5XCI6IFwiYmxhbmtTcGFjZVwiIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgJ1RleHRBcmVhJzoge1xuICAgICAgZWxlbWVudFByb3BzOiBbXG4gICAgICAgIHsgbGFiZWw6ICdFbGVtZW50JywgdHlwZTogJ251bWJlcicsIGtleTogJ3F1ZXN0aW9uTnVtYmVyJyB9LFxuICAgICAgICB7IGxhYmVsOiAnd2lkdGgnLCB0eXBlOiAnZmllbGRTaXplJywga2V5OiAnd2lkdGgnIH0sXG4gICAgICBdLFxuICAgICAgZmllbGRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnJywgdHlwZTogJ3RvZ2dsZUdyb3VwJywga2V5OiAndG9nZ2xlT3B0aW9ucycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0hlbHAgVGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgICAgeyBsYWJlbDogJ1ZhbHVlJywgcGxhY2Vob2xkZXI6ICdFbnRlciBUZXh0ICcsIHR5cGU6ICd0ZXh0Jywga2V5OiAndmFsdWUnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdSZWZlcmVuY2UgRmllbGQnLCBwbGFjZWhvbGRlcjogJ1JlZmVyZW5jZSBGaWVsZCcsIHR5cGU6ICd0ZXh0Jywga2V5OiAncmVmZXJlbmNlRmllbGQnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcImxhYmVsXCI6IFwiXCIsIFwicGxhY2Vob2xkZXJcIjogXCJFbnRlciBUZXh0XCIsIFwidHlwZVwiOiBcInN1YlF1ZXN0aW9uXCIsIFwia2V5XCI6IFwiaXNTdWJUZXh0XCIsXG4gICAgICAgICAgXCJzdWJRdWVzdGlvblwiOiBbXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgYXBwZWFyYW5jZTogW1xuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdTZWxlY3QgRm9udCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250JywgcGxhY2Vob2xkZXI6ICdMZWZ0JyxcbiAgICAgICAgICBvcHRpb25zOiBbJ0hlbHZldGljYSBOZXVlJywgJ0FyaWFsJywgJ1RpbWVzIE5ldyBSb21hbicsICdSb2JvdG8nXVxuICAgICAgICB9LFxuXG4gICAgICAgIHsgbGFiZWw6ICdGb250IENvbG9yJywgdHlwZTogJ2NvbG9yJywga2V5OiAnZm9udENvbG9yJywgdmFsdWU6ICcnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgU2l6ZScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250U2l6ZScsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnU21hbGwnLCB2YWx1ZTogJzEycHgnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnTWVkaXVtJywgdmFsdWU6ICcxNHB4JyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0xhcmdlJywgdmFsdWU6ICcxNnB4JyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogJ0ZvbnQgV2lkdGgnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udFdlaWdodCcsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IHZhbHVlOiAnNDAwJywgbGFiZWw6ICc0MDAtTm9ybWFsJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzUwMCcsIGxhYmVsOiAnNTAwLU1lZGl1bScgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc2MDAnLCBsYWJlbDogJzYwMC1TZW1pIEJvbGQnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNzAwJywgbGFiZWw6ICc3MDAtQm9sZCcgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgLy8geyBsYWJlbDogJ0JhY2tncm91bmQgQ29sb3InLCB0eXBlOiAnY29sb3InLCBrZXk6ICdiYWNrZ3JvdW5kQ29sb3InLCB2YWx1ZTogJycgfSxcbiAgICAgICAgXG4gICAgICBdXG4gICAgfSxcblxuICAgICdpbWFnZSc6IHtcbiAgICAgIGVsZW1lbnRQcm9wczogW1xuICAgICAgICB7IGxhYmVsOiAnRWxlbWVudCcsIHR5cGU6ICdudW1iZXInLCBrZXk6ICdxdWVzdGlvbk51bWJlcicgfSxcbiAgICAgICAgeyBsYWJlbDogJ3dpZHRoJywgdHlwZTogJ2ZpZWxkU2l6ZScsIGtleTogJ3dpZHRoJyB9LFxuICAgICAgXSxcbiAgICAgIGZpZWxkUHJvcHM6IFtcbiAgICAgICAgeyBsYWJlbDogJycsIHR5cGU6ICd0b2dnbGVHcm91cCcsIGtleTogJ3RvZ2dsZU9wdGlvbnMnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdIZWxwIFRleHQnLCBwbGFjZWhvbGRlcjogJ0VudGVyIFRleHQgJywgdHlwZTogJ3RleHQnIH0sXG4gICAgICAgIHsgbGFiZWw6ICdWYWx1ZScsIHBsYWNlaG9sZGVyOiAnRW50ZXIgVGV4dCAnLCB0eXBlOiAndGV4dCcsIGtleTogJ3ZhbHVlJyB9LFxuICAgICAgICB7IGxhYmVsOiAnUmVmZXJlbmNlIEZpZWxkJywgcGxhY2Vob2xkZXI6ICdSZWZlcmVuY2UgRmllbGQnLCB0eXBlOiAndGV4dCcsIGtleTogJ3JlZmVyZW5jZUZpZWxkJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCJsYWJlbFwiOiBcIlwiLCBcInBsYWNlaG9sZGVyXCI6IFwiRW50ZXIgVGV4dFwiLCBcInR5cGVcIjogXCJzdWJRdWVzdGlvblwiLCBcImtleVwiOiBcImlzU3ViVGV4dFwiLFxuICAgICAgICAgIFwic3ViUXVlc3Rpb25cIjogW1xuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGFwcGVhcmFuY2U6IFtcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnU2VsZWN0IEZvbnQnLCB0eXBlOiAnc2VsZWN0Jywga2V5OiAnZm9udCcsIHBsYWNlaG9sZGVyOiAnTGVmdCcsXG4gICAgICAgICAgb3B0aW9uczogWydIZWx2ZXRpY2EgTmV1ZScsICdBcmlhbCcsICdUaW1lcyBOZXcgUm9tYW4nLCAnUm9ib3RvJ11cbiAgICAgICAgfSxcbiAgICAgICAgeyBsYWJlbDogJ0ZvbnQgQ29sb3InLCB0eXBlOiAnY29sb3InLCBrZXk6ICdmb250Q29sb3InLCB2YWx1ZTogJycgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnRm9udCBTaXplJyxcbiAgICAgICAgICB0eXBlOiAnbnVtYmVyJywgICAgXG4gICAgICAgICAga2V5OiAnZm9udFNpemUnLFxuICAgICAgICAgIHZhbHVlOiAxNCAgICAgICAgICBcbiAgICAgICAgfSwgICAgICAgIFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFdlaWdodCcsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdmb250V2VpZ2h0JywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgdmFsdWU6ICc0MDAnLCBsYWJlbDogJzQwMC1Ob3JtYWwnIH0sXG4gICAgICAgICAgICB7IHZhbHVlOiAnNTAwJywgbGFiZWw6ICc1MDAtTWVkaXVtJyB9LFxuICAgICAgICAgICAgeyB2YWx1ZTogJzYwMCcsIGxhYmVsOiAnNjAwLVNlbWkgQm9sZCcgfSxcbiAgICAgICAgICAgIHsgdmFsdWU6ICc3MDAnLCBsYWJlbDogJzcwMC1Cb2xkJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6ICdGb250IFN0eWxlJywgdHlwZTogJ3NlbGVjdCcsIGtleTogJ2ZvbnRTdHlsZScsIHZhbHVlOiAnJyxcbiAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm9ybWFsJywgdmFsdWU6ICdub3JtYWwnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnQm9sZCcsIHZhbHVlOiAnYm9sZCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdJdGFsaWMnLCB2YWx1ZTogJ2l0YWxpYycgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnTWFyZ2luJywgdHlwZTogJ21hcmdpblBpY2tlcicsIGtleTogJ21hcmdpbicsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICdMZWZ0LCBUb3AsIFJpZ2h0LCBCb3R0b20nLFxuICAgICAgICAgIHZhbHVlOiBbMCwgMCwgMCwgMF1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiAnQWxpZ24gSXRlbScsIHR5cGU6ICdzZWxlY3QnLCBrZXk6ICdhbGlnbkl0ZW1zJywgdmFsdWU6ICcnLFxuICAgICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdMZWZ0JywgdmFsdWU6ICdsZWZ0JyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0NlbnRlcicsIHZhbHVlOiAnY2VudGVyJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ1JpZ2h0JywgdmFsdWU6ICdyaWdodCcgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgXVxuICAgICAgXG4gICAgfSxcblxuICB9O1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgcGRmRGVzaWduZXJTZXJ2aWNlOiBQZGZEZXNpZ25lclNlcnZpY2UscHJpdmF0ZSB0ZW1wbGF0ZVNlcnZpY2U6IFRlbXBsYXRlU2VydmljZSkgeyB9XG5cbiAgaGFuZGxlVGVtcGxhdGVTZWxlY3Rpb24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucGRmRWxlbWVudHMgPSBldmVudC5lbGVtZW50czsgXG4gICAgdGhpcy5zZWxlY3RlZFRlbXBsYXRlID0gZXZlbnQuc2VsZWN0ZWRUZW1wbGF0ZTtcbiAgfVxuXG4gIFxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vQVAtMTBNQVIyNSBTdWJzY3JpYmVzIHRvIGhlYWRlciBzZWxlY3Rpb24gY2hhbmdlcyBhbmQgdXBkYXRlcyB0aGUgc2VsZWN0ZWQgZWxlbWVudCAgXG4gICAgdGhpcy5wZGZEZXNpZ25lclNlcnZpY2Uuc2VsZWN0SGVhZGVyU3ViamVjdCQuc3Vic2NyaWJlKGhlYWRlciA9PiB7XG4gICAgICBpZiAoaGVhZGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50Wyd0eXBlJ10gPSBoZWFkZXI7XG4gICAgICAgIHRoaXMuaGVhZGVyU2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wZGYgPSB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5nZXRCb29rKCk7XG4gICAgICAgIHRoaXMuYm9va0lkID0gT2JqZWN0LmtleXModGhpcy5wZGYpWzBdXG4gICAgICB9XG5cbiAgICB9KTtcbiAgICB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5zZWxlY3RlZEVsZW1lbnQkLnN1YnNjcmliZShpbmRleCA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudEluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLmhlYWRlclNlbGVjdCA9IGZhbHNlO1xuICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5nZXRFbGVtZW50cygpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudCA9IGVsZW1lbnRzW2luZGV4XTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50Py50eXBlID09PSAnVGFibGUnKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RDb2x1bW4gPSB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5nZXRTZWxlY3RUYWJsZUNvbHVtbigpID09PSB1bmRlZmluZWQgPyBudWxsIDogdGhpcy5wZGZEZXNpZ25lclNlcnZpY2UuZ2V0U2VsZWN0VGFibGVDb2x1bW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdENvbHVtbiA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRFbGVtZW50Lm1hcmdpbikge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50Lm1hcmdpbiA9IFswLCAwLCAwLCAwXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzKClcbiAgICB9KTtcbiAgfVxuICAvL0FQLTEwTUFSMjUgVXBkYXRlcyB0aGUgdGl0bGUgdXNpbmcgdGhlIGZvcm0gYnVpbGRlciBzZXJ2aWNlICBcbiAgdXBkYXRlVGl0bGUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucGRmRGVzaWduZXJTZXJ2aWNlLnVwZGF0ZVRpdGxlKGV2ZW50KTtcbiAgfVxuXG4gIGdldCBmaWVsZEFzU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYm9va1N1YnRleHQuZmllbGQuam9pbignLCAnKTsgLy9TS1MyOE1BUjI1IENvbnZlcnQgYXJyYXkgdG8gY29tbWEtc2VwYXJhdGVkIHN0cmluZ1xuICB9XG5cbiAgdXBkYXRlRmllbGQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuYm9va1N1YnRleHQuZmllbGQgPSB2YWx1ZS5zcGxpdCgnLCcpLm1hcChpdGVtID0+IGl0ZW0udHJpbSgpKTsgLy9TS1MyOE1BUjI1IENvbnZlcnQgc3RyaW5nIGJhY2sgdG8gYXJyYXlcbiAgfVxuICAvLyBTS1MyME1BUjI1IEdldHRlciB0byBmaWx0ZXIgY29sdW1ucywgZXhjbHVkaW5nIHRoZSBvbmUgd2l0aCBjdXJyZW50VW5pcXVlSWRlbnRpZmllclxuICBnZXQgZmlsdGVyZWRDb2x1bW5zKCk6IGFueVtdIHtcbiAgICBjb25zdCB0YXJnZXRBcnJheSA9IHRoaXMuZ2V0RGF0YUJ5UGF0aCgnZmllbGRzTWV0YScpO1xuICAgIHJldHVybiB0YXJnZXRBcnJheS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi51bmlxdWVJZGVudGlmaWVyICE9PSB0aGlzLnNlbGVjdENvbHVtbik7XG4gIH1cblxuICAvLyBTS1MyME1BUjI1IE1ldGhvZCB0byBoYW5kbGUgY2hlY2tib3ggY2hhbmdlc1xuICBvbkNoZWNrYm94Q2hhbmdlKHRhcmdldEFycmF5UGF0aDogYW55LCB0YXJnZXRBcnJheUtleTogYW55LCBrZXk6IGFueSwgYXBpTmFtZTogc3RyaW5nLCBpc0NoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICBjb25zdCB0YXJnZXRBcnJheSA9IHRoaXMuZ2V0RGF0YUJ5UGF0aCh0YXJnZXRBcnJheVBhdGgpO1xuICAgIGNvbnN0IGZvdW5kSXRlbSA9IHRhcmdldEFycmF5LmZpbmQoaXRlbSA9PiBpdGVtW3RhcmdldEFycmF5S2V5XSA9PT0gdGhpcy5zZWxlY3RDb2x1bW4pO1xuICAgIGZvdW5kSXRlbVtrZXldID0gZm91bmRJdGVtW2tleV0gPyBmb3VuZEl0ZW1ba2V5XSA6IFtdO1xuICAgIGlmIChpc0NoZWNrZWQpIHtcbiAgICAgIC8vIEFkZCBhcGlOYW1lIHRvIHNlbGVjdGVkQXBpTmFtZXMgaWYgbm90IGFscmVhZHkgcHJlc2VudFxuICAgICAgaWYgKCFmb3VuZEl0ZW1ba2V5XS5pbmNsdWRlcyhhcGlOYW1lKSkge1xuICAgICAgICBmb3VuZEl0ZW1ba2V5XS5wdXNoKGFwaU5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1vdmUgYXBpTmFtZSBmcm9tIHNlbGVjdGVkQXBpTmFtZXMgaWYgcHJlc2VudFxuICAgICAgY29uc3QgaW5kZXggPSBmb3VuZEl0ZW1ba2V5XS5pbmRleE9mKGFwaU5hbWUpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgZm91bmRJdGVtW2tleV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdXBkYXRlUHJvcGVydHkoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWVCeVBhdGgoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIGlmIChrZXkgPT09ICdxdWVzdGlvbicpIHtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUlucHV0KHZhbHVlLCBrZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gU0tTMjFNQVIyNSByYWRpbyBidXR0b24gY2xpY2sgaGFuZGxlclxuICBvblJhZGlvQ2hhbmdlKHRhcmdldEFycmF5UGF0aDogYW55LCB0YXJnZXRBcnJheUtleTogYW55LCBrZXk6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudC50eXBlID09PSAnVGFibGUnKSB7XG4gICAgICAvLyB0aGlzLnVwZGF0ZVZhbHVlQnlBcnJheVBhdGgodGFyZ2V0QXJyYXksIHRhcmdldEFycmF5S2V5LCB0aGlzLnNlbGVjdENvbHVtbiwga2V5LCB2YWx1ZSk7XG4gICAgICBjb25zdCB0YXJnZXRBcnJheSA9IHRoaXMuZ2V0RGF0YUJ5UGF0aCh0YXJnZXRBcnJheVBhdGgpO1xuICAgICAgLy8gY29uc29sZS5sb2coXCJ0YXJnZXRBcnJheVwiLCB0YXJnZXRBcnJheSwgXCJ0YXJnZXRBcnJheUtleVwiLCB0YXJnZXRBcnJheUtleSwgXCJzZWxlY3RDb2x1bW5cIiwgdGhpcy5zZWxlY3RDb2x1bW4sIFwia2V5UGF0aFwiLCBrZXksIFwiZXZlbnRcIiwgdmFsdWUpXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0QXJyYXkpKSByZXR1cm47XG5cbiAgICAgIC8vIEZpbmQgdGhlIG9iamVjdCB0aGF0IG1hdGNoZXMgc2VsZWN0Q29sdW1uXG4gICAgICBsZXQgZm91bmRJdGVtID0gdGFyZ2V0QXJyYXkuZmluZChpdGVtID0+IGl0ZW1bdGFyZ2V0QXJyYXlLZXldID09PSB0aGlzLnNlbGVjdENvbHVtbik7XG5cbiAgICAgIC8vIElmIHRoZSBpdGVtIGRvZXMgbm90IGV4aXN0LCBjcmVhdGUgYW5kIGFkZCBpdFxuICAgICAgaWYgKCFmb3VuZEl0ZW0pIHtcbiAgICAgICAgZm91bmRJdGVtID0geyBbdGFyZ2V0QXJyYXlLZXldOiB0aGlzLnNlbGVjdENvbHVtbiB9OyAvLyBFbnN1cmUgdGhlIGtleSBleGlzdHNcbiAgICAgICAgdGFyZ2V0QXJyYXkucHVzaChmb3VuZEl0ZW0pO1xuICAgICAgfVxuXG4gICAgICAvLyBUcmF2ZXJzZSBhbmQgc2V0IHRoZSB2YWx1ZVxuICAgICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgbGV0IG9iaiA9IGZvdW5kSXRlbTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoIW9ialtrZXldKSBvYmpba2V5XSA9IHt9OyAvLyBJbml0aWFsaXplIG1pc3Npbmcgb2JqZWN0c1xuICAgICAgICBvYmogPSBvYmpba2V5XTtcbiAgICAgIH1cblxuICAgICAgLy8gQXNzaWduIHRoZSB2YWx1ZSBiYXNlZCBvbiBpbnB1dCB0eXBlXG4gICAgICBjb25zdCBsYXN0S2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuXG4gICAgICBvYmpbbGFzdEtleV0gPSB2YWx1ZTtcbiAgICAgIHRoaXMudXBkYXRlRWxlbWVudCh0aGlzLnNlbGVjdGVkRWxlbWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRWYWx1ZUJ5UGF0aChrZXksIHZhbHVlKTsgLy8gRmFsbGJhY2sgZm9yIG5vbi1UYWJsZSBlbGVtZW50cywgaWYgYXBwbGljYWJsZVxuICAgIH1cbiAgfVxuICBvblJlcXVpcmVkQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XG4gICAgICBsZXQgbGFiZWwgPSB0aGlzLnNlbGVjdGVkRWxlbWVudC5sYWJlbCA/IHRoaXMuc2VsZWN0ZWRFbGVtZW50LmxhYmVsLnJlcGxhY2UoL1xccypcXCorJC8sICcnKSA6ICdMYWJlbCc7XG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBsYWJlbCA9IGAke2xhYmVsfSAqYDtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVQcm9wZXJ0eSgnbGFiZWwnLCBsYWJlbCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVG9nZ2xlIGZvciBTdWIgUXVlc3Rpb25zIChFYWNoIHByb3AgaGFzIGl0cyBvd24gc3RhdGUpXG4gIHRvZ2dsZVN1YlF1ZXN0aW9uKHByb3A6IGFueSkge1xuICAgIHByb3AuaXNFeHBhbmRlZCA9ICFwcm9wLmlzRXhwYW5kZWQ7XG4gIH1cblxuICAvLyBTZXBhcmF0ZSBUb2dnbGUgZm9yIFN0eWxlIFNlY3Rpb25cbiAgaXNTdHlsZUV4cGFuZGVkID0gZmFsc2U7XG5cbiAgdG9nZ2xlU3R5bGVTZWN0aW9uKCkge1xuICAgIHRoaXMuaXNTdHlsZUV4cGFuZGVkID0gIXRoaXMuaXNTdHlsZUV4cGFuZGVkO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllcygpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRFbGVtZW50KSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEFQLTEwTUFSMjUgUmV0cmlldmUgdGhlIGxhdGVzdCBwZGYgZGF0YVxuICAgIHRoaXMucGRmID0gdGhpcy5wZGZEZXNpZ25lclNlcnZpY2UuZ2V0Qm9vaygpO1xuXG4gICAgLy8gQVAtMTBNQVIyNSBJZiB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBhICdIZWFkZXInLCByZXR1cm4gaXRzIHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQ/LnR5cGUgPT09ICdIZWFkZXInKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllc1snSGVhZGVyJ107XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJykge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0Q29sdW1uICE9PSAnJyAmJiB0aGlzLnNlbGVjdENvbHVtbiAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllc1snVGFibGVDb2x1bW4nXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXNbdGhpcy5zZWxlY3RlZEVsZW1lbnQ/LnR5cGVdO1xuICB9XG4gIC8vIEFQLTI4TUFSMjUgQWRkIGFuIG9wdGlvbiB3aXRoIGEgdW5pcXVlIFVVSURcbiAgYWRkT3B0aW9uKG9wdGlvbnM6IGFueVtdKSB7XG4gICAgY29uc3QgdW5pcXVlX2lkID0gdXVpZHY0KCk7XG4gICAgb3B0aW9ucy5wdXNoKHsgaWQ6IHVuaXF1ZV9pZCx2YWx1ZTogJycgfSk7XG4gIH1cblxuICAvLyBBUC0yOE1BUjI1IEZ1bmN0aW9uIHRvIHJlbW92ZSBhbiBvcHRpb24gYmFzZWQgb24gaXRzIHVuaXF1ZSBVVUlEXG4gIHJlbW92ZU9wdGlvbihvcHRpb25zOiBhbnlbXSwgaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgob3B0aW9uID0+IG9wdGlvbi5pZCA9PT0gaWQpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIG9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVCdXR0b25DbGljaygpIHtcbiAgICB0aGlzLmZvcm1CdXR0b25IYW5kbGVyLmVtaXQodGhpcy5wZGZEZXNpZ25lclNlcnZpY2UuZG93bmxvYWRFbGVtZW50KCkpO1xuICB9XG4gIC8vIFNLUzEzTUFSMjUgYWN0aXZlIHRhYiBzZWxlY3RcbiAgc2V0QWN0aXZlVGFiKHRhYjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0YWI7XG4gIH1cbiAgLy8gU0tTMTNNQVIyNSB0YWJsZSBwcm9wZXJ0eSBzYXZlXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICAvLyBjb25zb2xlLmxvZygnU2F2aW5nIGRhdGE6Jyk7XG4gIH1cbiAgLy8gU0tTMTNNQVIyNSB0YWJsZSBwcm9wZXJ0eSByZXNldFxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICAvLyBjb25zb2xlLmxvZygnT3BlcmF0aW9uIGNhbmNlbGxlZCcpO1xuICB9XG5cbiAgdXBkYXRlUHJvcGVydGllcyhlbGVtZW50VHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gUmVzZXQgYWxpZ25tZW50IGFuZCBzdHlsZXMgaWYgc3dpdGNoaW5nIGVsZW1lbnRzXG4gICAgdGhpcy5zZWxlY3RlZEFsaWduID0gJ2FsaWduLWxlZnQnO1xuICAgIHRoaXMuc2VsZWN0ZWRTdHlsZXMgPSBbXTtcblxuICAgIC8vIEZldGNoIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50IHR5cGVcblxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKTtcbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBwcm9wZXJ0aWVzIGFyZSBkeW5hbWljYWxseSB1cGRhdGVkXG4gICAgfVxuICB9XG5cbiAgb25BbGlnblNlbGVjdCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50KSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC50ZXh0QWxpZ24gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBvblN0eWxlU2VsZWN0KHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRFbGVtZW50KSByZXR1cm47XG5cbiAgICAvLyBJbml0aWFsaXplIHN0eWxlcyBhcnJheSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgdGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGVzID0gdGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGVzIHx8IFtdO1xuXG4gICAgLy8gRW5zdXJlIG9ubHkgb25lIHN0eWxlIGlzIHNlbGVjdGVkIGF0IGEgdGltZVxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlcyA9IFt2YWx1ZV07XG5cbiAgfVxuXG4gIGlzU3R5bGVBY3RpdmUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRWxlbWVudD8uc3R5bGVzPy5pbmNsdWRlcyh2YWx1ZSkgfHwgZmFsc2U7XG4gIH1cbiAgZ2V0VmFsdWVCeVBhdGgocGF0aDogc3RyaW5nKTogYW55IHtcbiAgICByZXR1cm4gcGF0aD8uc3BsaXQoJy4nKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiBvYmo/LltrZXldID8/ICcnLCB0aGlzLnNlbGVjdGVkRWxlbWVudCk7XG4gIH1cblxuICBvblRvZ2dsZUNoYW5nZShwYXRoOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgdGhpcy5zZXRWYWx1ZUJ5UGF0aChwYXRoLCBjaGVja2VkKTtcbiAgICB0aGlzLnVwZGF0ZUVsZW1lbnQodGhpcy5zZWxlY3RlZEVsZW1lbnQpXG4gIH1cbiAgdmFsaWRhdGVJbnB1dCh2YWx1ZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZSA9PT0gJ3BsYWNlaG9sZGVyJykge1xuICAgICAgY29uc3QgcmVnZXggPSAvXlthLXpBLVowLTlcXHNdKiQvO1xuICAgICAgaWYgKCFyZWdleC50ZXN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdPbmx5IGxldHRlcnMgYW5kIG51bWJlcnMgYXJlIGFsbG93ZWQnO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgc2V0VmFsdWVCeVBhdGgocGF0aDogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlID09PSAncXVlc3Rpb24nKSB7XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVJbnB1dCh2YWx1ZSwgdmFsdWUpKSB7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgbGV0IG9iaiA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50O1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXksIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIW9ialtrZXldKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBuZXh0IGtleSBpcyBhIG51bWJlciAoYXJyYXkgaW5kZXgpXG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBrZXlzW2luZGV4ICsgMV07XG4gICAgICAgIG9ialtrZXldID0gaXNOYU4oTnVtYmVyKG5leHRLZXkpKSA/IHt9IDogW107XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPT09IGtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG51bWJlciBmb3IgZm9udFNpemVcbiAgICAgICAgaWYgKGtleSA9PT0gJ2ZvbnRTaXplJykge1xuICAgICAgICAgIG9ialtrZXldID0gcGFyc2VJbnQodmFsdWUsIDEwKSB8fCAxNDsgLy8gRGVmYXVsdCB0byAxNCBpZiBpbnZhbGlkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTsgLy8gQXNzaWduIHZhbHVlIHRvIGxhc3Qga2V5XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iaiA9IG9ialtrZXldOyAvLyBNb3ZlIGRlZXBlclxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucGRmRGVzaWduZXJTZXJ2aWNlLmVsZW1lbnRVcGRhdGUodGhpcy5zZWxlY3RlZEVsZW1lbnRJbmRleCwgdGhpcy5zZWxlY3RlZEVsZW1lbnQpO1xuICB9XG4gIGdldFN0eWxlS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkRWxlbWVudCB8fCAhdGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGUgfHwgdHlwZW9mIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnN0eWxlICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZWxlY3RlZEVsZW1lbnQuc3R5bGUpO1xuICB9ICBcblxuICAvLyBTS1MxOU1BUjI1IHVwZGF0ZSBlbGVtZW50IGluIHNlcnZpZXNcbiAgdXBkYXRlRWxlbWVudChlbGVtZW50OiBhbnkpIHtcbiAgICB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5lbGVtZW50VXBkYXRlKHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXgsIGVsZW1lbnQpXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRFbGVtZW50Py50eXBlID09PSAnVGFibGUnICYmIHRoaXMuc2VsZWN0Q29sdW1uKSB7XG4gICAgICBjb25zdCBmb3VuZEl0ZW0gPSB0aGlzLnNlbGVjdGVkRWxlbWVudFsnZmllbGRzTWV0YSddLmZpbmQoaXRlbSA9PiBpdGVtWyd1bmlxdWVJZGVudGlmaWVyJ10gPT09IHRoaXMuc2VsZWN0Q29sdW1uKTtcbiAgICAgIHRoaXMucGRmRGVzaWduZXJTZXJ2aWNlLnNldFNlbGVjdGVkVGFibGVFbGVtZW50KHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXgsIHsgY29sdW1uOiBmb3VuZEl0ZW0/LmFwaU5hbWUgfHwgbnVsbCB9KTtcbiAgICB9XG4gIH1cbiAgLy8gU0tTMTlNQVIyNSBnZXQgdmFsdWUgZnJvbSBhcnJheVxuICBnZXRWYWx1ZUJ5QXJyYXlQYXRoKHRhcmdldEFycmF5UGF0aDogYW55LCB0YXJnZXRBcnJheUtleTogc3RyaW5nLCBzZWxlY3RDb2x1bW46IHN0cmluZywga2V5UGF0aDogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCB0YXJnZXRBcnJheSA9IHRoaXMuZ2V0RGF0YUJ5UGF0aCh0YXJnZXRBcnJheVBhdGgpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0YXJnZXRBcnJheSkpIHJldHVybiAnJztcblxuICAgIGNvbnN0IGZvdW5kSXRlbSA9IHRhcmdldEFycmF5LmZpbmQoaXRlbSA9PiBpdGVtW3RhcmdldEFycmF5S2V5XSA9PT0gc2VsZWN0Q29sdW1uKTtcblxuICAgIHJldHVybiBmb3VuZEl0ZW0gPyBrZXlQYXRoLnNwbGl0KCcuJykucmVkdWNlKChvYmosIGtleSkgPT4gb2JqPy5ba2V5XSwgZm91bmRJdGVtKSA6ICcnO1xuICB9XG5cbiAgLy9TS1MxOU1BUjI1IEZ1bmN0aW9uIHRvIHVwZGF0ZSBhIHZhbHVlIGluIGFuIGFycmF5IGR5bmFtaWNhbGx5XG4gIHVwZGF0ZVZhbHVlQnlBcnJheVBhdGgodGFyZ2V0QXJyYXlQYXRoOiBhbnksIHRhcmdldEFycmF5S2V5OiBzdHJpbmcsIHNlbGVjdENvbHVtbjogc3RyaW5nLCBrZXlQYXRoOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldEFycmF5ID0gdGhpcy5nZXREYXRhQnlQYXRoKHRhcmdldEFycmF5UGF0aCk7XG4gICAgLy8gY29uc29sZS5sb2coXCJ0YXJnZXRBcnJheVwiLCB0YXJnZXRBcnJheSwgXCJ0YXJnZXRBcnJheUtleVwiLCB0YXJnZXRBcnJheUtleSwgXCJzZWxlY3RDb2x1bW5cIiwgc2VsZWN0Q29sdW1uLCBcImtleVBhdGhcIiwga2V5UGF0aCwgXCJldmVudFwiLCBldmVudClcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0QXJyYXkpKSByZXR1cm47XG5cbiAgICAvLyBGaW5kIHRoZSBvYmplY3QgdGhhdCBtYXRjaGVzIHNlbGVjdENvbHVtblxuICAgIGxldCBmb3VuZEl0ZW0gPSB0YXJnZXRBcnJheS5maW5kKGl0ZW0gPT4gaXRlbVt0YXJnZXRBcnJheUtleV0gPT09IHNlbGVjdENvbHVtbik7XG5cbiAgICAvLyBJZiB0aGUgaXRlbSBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGFuZCBhZGQgaXRcbiAgICBpZiAoIWZvdW5kSXRlbSkge1xuICAgICAgZm91bmRJdGVtID0geyBbdGFyZ2V0QXJyYXlLZXldOiBzZWxlY3RDb2x1bW4gfTsgLy8gRW5zdXJlIHRoZSBrZXkgZXhpc3RzXG4gICAgICB0YXJnZXRBcnJheS5wdXNoKGZvdW5kSXRlbSk7XG4gICAgfVxuXG4gICAgLy8gVHJhdmVyc2UgYW5kIHNldCB0aGUgdmFsdWVcbiAgICBjb25zdCBrZXlzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBvYmogPSBmb3VuZEl0ZW07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYgKCFvYmpba2V5XSkgb2JqW2tleV0gPSB7fTsgLy8gSW5pdGlhbGl6ZSBtaXNzaW5nIG9iamVjdHNcbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cblxuICAgIC8vIEFzc2lnbiB0aGUgdmFsdWUgYmFzZWQgb24gaW5wdXQgdHlwZVxuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICBvYmpbbGFzdEtleV0gPSBpbnB1dEVsZW1lbnQ/LnR5cGUgPT09ICdjaGVja2JveCcgPyBpbnB1dEVsZW1lbnQuY2hlY2tlZCA6IGlucHV0RWxlbWVudC52YWx1ZTtcbiAgICBpZiAoa2V5UGF0aCA9PT0gJ3N1bW1hcnlDb2x1bW4nKSB7XG4gICAgICBpZiAob2JqWydzdW1tYXJ5Um93J10gPT09IHRydWUpIHtcbiAgICAgICAgb2JqWydzdW1tYXJ5Um93J10gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dEVsZW1lbnQuY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBvYmpbJ2ZsZFR5cGUnXSA9ICdjYWxjdWxhdGlvbidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialsnZmxkVHlwZSddID0gJ1RleHQnXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChrZXlQYXRoID09PSAnc3VtbWFyeVJvdycpIHtcbiAgICAgIC8vdGhpcy5wZGZEZXNpZ25lclNlcnZpY2Uuc2V0U3VtbWFyeVJvd0RhdGEob2JqKTsgXG4gICAgICBpZiAob2JqWydzdW1tYXJ5Q29sdW1uJ10gPT09IHRydWUpIHtcbiAgICAgICAgb2JqWydzdW1tYXJ5Q29sdW1uJ10gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dEVsZW1lbnQuY2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBvYmpbJ2ZsZFR5cGUnXSA9ICdjYWxjdWxhdGlvbidcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialsnZmxkVHlwZSddID0gJ1RleHQnXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRWxlbWVudCh0aGlzLnNlbGVjdGVkRWxlbWVudClcbiAgfVxuICBnZXREYXRhQnlQYXRoKHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHBhdGguc3BsaXQoJy4nKS5yZWR1Y2UoKG9iaiwga2V5KSA9PiBvYmo/LltrZXldLCB0aGlzLnNlbGVjdGVkRWxlbWVudCk7XG4gIH1cblxuICAvLyBTS1MyNU1BUjI1IGltYWdlIGVkaXQgZnVuY3Rpb25zXG4gIGZsaXBIb3Jpem9udGFsKCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwSDogIXRoaXMudHJhbnNmb3JtLmZsaXBIXG4gICAgfTtcbiAgfVxuXG4gIGZsaXBWZXJ0aWNhbCgpIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIC4uLnRoaXMudHJhbnNmb3JtLFxuICAgICAgZmxpcFY6ICF0aGlzLnRyYW5zZm9ybS5mbGlwVlxuICAgIH07XG4gIH1cblxuICByZXNldEltYWdlKCkge1xuICAgIHRoaXMuY2FudmFzUm90YXRpb24gPSAwO1xuICAgIHRoaXMuY3JvcHBlciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHtcbiAgICAgIHRyYW5zbGF0ZVVuaXQ6ICdweCcsXG4gICAgICBzY2FsZTogMSxcbiAgICAgIHJvdGF0ZTogMCxcbiAgICAgIGZsaXBIOiBmYWxzZSxcbiAgICAgIGZsaXBWOiBmYWxzZSxcbiAgICAgIHRyYW5zbGF0ZUg6IDAsXG4gICAgICB0cmFuc2xhdGVWOiAwXG4gICAgfTtcbiAgfVxuXG4gIHpvb21PdXQoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHNjYWxlOiB0aGlzLnRyYW5zZm9ybS5zY2FsZSEgLSAuMVxuICAgIH07XG4gIH1cblxuICB6b29tSW4oKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHNjYWxlOiB0aGlzLnRyYW5zZm9ybS5zY2FsZSEgKyAuMVxuICAgIH07XG4gIH1cbiAgcm90YXRlTGVmdCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4geyAvLyBVc2UgdGltZW91dCBiZWNhdXNlIHJvdGF0aW5nIGltYWdlIGlzIGEgaGVhdnkgb3BlcmF0aW9uIGFuZCB3aWxsIGJsb2NrIHRoZSB1aSB0aHJlYWRcbiAgICAgIHRoaXMuY2FudmFzUm90YXRpb24tLTtcbiAgICAgIHRoaXMuZmxpcEFmdGVyUm90YXRlKCk7XG4gICAgfSk7XG4gIH1cblxuICByb3RhdGVSaWdodCgpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jYW52YXNSb3RhdGlvbisrO1xuICAgICAgdGhpcy5mbGlwQWZ0ZXJSb3RhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG1vdmVMZWZ0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVIOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIISAtIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZVJpZ2h0KCkge1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICB0cmFuc2xhdGVIOiB0aGlzLnRyYW5zZm9ybS50cmFuc2xhdGVIISArIDFcbiAgICB9O1xuICB9XG5cbiAgbW92ZURvd24oKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZVY6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZVYhICsgMVxuICAgIH07XG4gIH1cblxuICBtb3ZlVXAoKSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSB7XG4gICAgICAuLi50aGlzLnRyYW5zZm9ybSxcbiAgICAgIHRyYW5zbGF0ZVY6IHRoaXMudHJhbnNmb3JtLnRyYW5zbGF0ZVYhIC0gMVxuICAgIH07XG4gIH1cbiAgcHJpdmF0ZSBmbGlwQWZ0ZXJSb3RhdGUoKSB7XG4gICAgY29uc3QgZmxpcHBlZEggPSB0aGlzLnRyYW5zZm9ybS5mbGlwSDtcbiAgICBjb25zdCBmbGlwcGVkViA9IHRoaXMudHJhbnNmb3JtLmZsaXBWO1xuICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgLi4udGhpcy50cmFuc2Zvcm0sXG4gICAgICBmbGlwSDogZmxpcHBlZFYsXG4gICAgICBmbGlwVjogZmxpcHBlZEgsXG4gICAgICB0cmFuc2xhdGVIOiAwLFxuICAgICAgdHJhbnNsYXRlVjogMFxuICAgIH07XG4gIH1cbiAgYXN5bmMgaW1hZ2VDcm9wcGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgdGhpcy5jb252ZXJ0QmxvYlRvQmFzZTY0KGV2ZW50Lm9iamVjdFVybCk7XG4gICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5pbWFnZURhdGEgPSBiYXNlNjQ7XG4gICAgICBhd2FpdCB0aGlzLnBkZkRlc2lnbmVyU2VydmljZS5lbGVtZW50VXBkYXRlKHRoaXMuc2VsZWN0ZWRFbGVtZW50SW5kZXgsIHRoaXMuc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdDUk9QUEVEJywgZXZlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgaW4gaW1hZ2VDcm9wcGVkOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cblxuICBjcm9wcGVyUmVhZHkoc291cmNlSW1hZ2VEaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ0Nyb3BwZXIgcmVhZHknLCBzb3VyY2VJbWFnZURpbWVuc2lvbnMpO1xuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG4gIC8vIFNLUzI1TUFSMjUgYmxvYiB0byBiYXNlIDY0IGNvbnZlcnRlclxuICBjb252ZXJ0QmxvYlRvQmFzZTY0KG9iamVjdFVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gZmV0Y2gob2JqZWN0VXJsKVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuYmxvYigpKVxuICAgICAgLnRoZW4oYmxvYiA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTtcbiAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG4gIC8vIFNLUzI4TUFSMjUgcWIgcGRmIHVwZGF0ZSBpbiBwZGYgZWxlbWVudFxuICBjaGlsZEV2ZW50Q2FwdHVyZShldmVudDogYW55KSB7XG4gICAgY29uc29sZS5sb2coXCJjaGlsZEV2ZW50Q2FwdHVyZVwiLGV2ZW50KVxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnBkZlJlZmVyZW5jZSA9IE9iamVjdC5rZXlzKGV2ZW50LnZhbHVlT2JqKVswXVxuICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnBkZlJlZmVyZW5jZVF1ZXN0aW9ucyA9IGV2ZW50LnZhbHVlT2JqXG4gICAgdGhpcy5wZGZEZXNpZ25lclNlcnZpY2UuZWxlbWVudFVwZGF0ZSh0aGlzLnNlbGVjdGVkRWxlbWVudEluZGV4LCB0aGlzLnNlbGVjdGVkRWxlbWVudCk7XG4gIH1cblxuICAvLyBTS1MyOE1BUjI1IHBkZiBzZWFyY2ggZHJvcGRvd24gZW1pdFxuICBsaW5rVG9nZ2xlRHJvcGRvd24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0xpbmtEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0xpbmtEcm9wZG93bk9wZW47XG4gIH1cblxuICAvLyBTS1MyOE1BUjI1IHBkZiBzZWFyY2ggZHJvcGRvd24gY2xvc2VcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkNsaWNrT3V0c2lkZShldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5kcm9wZG93biAmJiAhdGhpcy5kcm9wZG93bi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuaXNMaW5rRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIEFQLTI4TUFSMjUgV2hlbiBkcmFnIHN0YXJ0cywgc3RvcmUgdGhlIGluZGV4XG4gIG9uRHJhZ1N0YXJ0KGV2ZW50OiBEcmFnRXZlbnQsIGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRyYWdnZWRJZCA9IGlkO1xuICAgIGV2ZW50LmRhdGFUcmFuc2ZlciEuZWZmZWN0QWxsb3dlZCA9IFwibW92ZVwiO1xuICB9XG5cbiAgLy8gQVAtMjhNQVIyNSBQcmV2ZW50IGRlZmF1bHQgYmVoYXZpb3IgdG8gYWxsb3cgZHJvcFxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLy8gQVAtMjhNQVIyNSBTd2FwIHRoZSBkcmFnZ2VkIGl0ZW0gd2l0aCB0aGUgZHJvcHBlZCBwb3NpdGlvblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCwga2V5OiBzdHJpbmcpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IHRhcmdldElkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChcIi5vcHRpb24taXRlbXNcIik/LmdldEF0dHJpYnV0ZShcImRhdGEtaWRcIik7XG5cbiAgICBpZiAodGhpcy5kcmFnZ2VkSWQgJiYgdGFyZ2V0SWQgJiYgdGhpcy5kcmFnZ2VkSWQgIT09IHRhcmdldElkKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5zZWxlY3RlZEVsZW1lbnRba2V5XTtcblxuICAgICAgW29wdGlvbnNbdGhpcy5kcmFnZ2VkSWRdLCBvcHRpb25zW3RhcmdldElkXV0gPSBbb3B0aW9uc1t0YXJnZXRJZF0sIG9wdGlvbnNbdGhpcy5kcmFnZ2VkSWRdXTtcbiAgICAgIC8vIEZpbmQgdGhlIGluZGV4ZXMgb2YgdGhlIGRyYWdnZWQgYW5kIHRhcmdldCBvcHRpb25zXG4gICAgICBjb25zdCBkcmFnZ2VkSW5kZXggPSBvcHRpb25zLmZpbmRJbmRleChvcHRpb24gPT4gb3B0aW9uLmlkID09PSB0aGlzLmRyYWdnZWRJZCk7XG4gICAgICBjb25zdCB0YXJnZXRJbmRleCA9IG9wdGlvbnMuZmluZEluZGV4KG9wdGlvbiA9PiBvcHRpb24uaWQgPT09IHRhcmdldElkKTtcblxuICAgICAgLy8gU3dhcCB0aGUgaXRlbXNcbiAgICAgIGlmIChkcmFnZ2VkSW5kZXggIT09IC0xICYmIHRhcmdldEluZGV4ICE9PSAtMSkge1xuICAgICAgICBbb3B0aW9uc1tkcmFnZ2VkSW5kZXhdLCBvcHRpb25zW3RhcmdldEluZGV4XV0gPSBbb3B0aW9uc1t0YXJnZXRJbmRleF0sIG9wdGlvbnNbZHJhZ2dlZEluZGV4XV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kcmFnZ2VkSWQgPSBudWxsO1xuICB9XG4gIG9uV2lkdGhTZWxlY3QodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PT0gJyonIHx8IHZhbHVlID09PSAnYXV0bycpIHtcbiAgICAgIHRoaXMuc2V0VmFsdWVCeVBhdGgoJ3dpZHRoJywgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEVsZW1lbnQ/LndpZHRoID09PSAnKicgfHwgdGhpcy5zZWxlY3RlZEVsZW1lbnQ/LndpZHRoID09PSAnYXV0bycpIHtcbiAgICAgIC8vIERlZmF1bHQgdG8gMTAwIGlmIHN3aXRjaGluZyBmcm9tICogb3IgYXV0byB0byBjdXN0b21cbiAgICAgIHRoaXMuc2V0VmFsdWVCeVBhdGgoJ3dpZHRoJywgMTAwKTtcbiAgICB9XG4gIH1cbiAgXG59XG4iLCI8IS0tICAtIEZpZWxkIGFuZCBFbGVtZW50IFByb3BlcnRpZXMgLS0+XG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAnYXR0cmlidXRlcyd9XCIgKGNsaWNrKT1cInNldEFjdGl2ZVRhYignYXR0cmlidXRlcycpXCI+XG4gICAgICBBdHRyaWJ1dGVzXG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAncHJvcGVydHknfVwiIChjbGljayk9XCJzZXRBY3RpdmVUYWIoJ3Byb3BlcnR5JylcIj5cbiAgICAgIFByb3BlcnR5XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRhYlwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogYWN0aXZlVGFiID09PSAnYXBwZWFyYW5jZSd9XCIgKGNsaWNrKT1cInNldEFjdGl2ZVRhYignYXBwZWFyYW5jZScpXCI+XG4gICAgICBBcHBlYXJhbmNlXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiICpuZ0lmPVwiYWN0aXZlVGFiID09PSAnYXR0cmlidXRlcydcIj5cbiAgICA8IS0tIEVsZW1lbnQgUHJvcGVycnRpZXMgLS0+XG4gICAgPCEtLSAgU2VsZWN0IGVsZW1lbnQgdHlwZSBzaG93IC0tPlxuICAgIDxkaXYgKm5nSWY9XCJnZXRQcm9wZXJ0aWVzKClcIj5cbiAgICAgIDwhLS0gU0tTMjVNQVIyNSB0aGlzIGlzIGZvciBpbWFnZSBlZGl0IC0tPlxuICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ2ltYWdlJ1wiPlxuICAgICAgICA8aW1hZ2UtY3JvcHBlciAqbmdJZj1cInNlbGVjdGVkRWxlbWVudC5pbWFnZURhdGEgXCIgW2ltYWdlQmFzZTY0XT1cInNlbGVjdGVkRWxlbWVudC5vcmdJbWFnZURhdGFcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiIFthbGlnbkltYWdlXT1cImFsaWduSW1hZ2VcIiBbcm91bmRDcm9wcGVyXT1cInJvdW5kQ3JvcHBlclwiIFtiYWNrZ3JvdW5kQ29sb3JdPVwiJ3doaXRlJ1wiXG4gICAgICAgICAgaW1hZ2VBbHRUZXh0PVwiQWx0ZXJuYXRpdmUgaW1hZ2UgdGV4dFwiIFthbGxvd01vdmVJbWFnZV09XCJmYWxzZVwiIFtoaWRlUmVzaXplU3F1YXJlc109XCJmYWxzZVwiXG4gICAgICAgICAgW2NhbnZhc1JvdGF0aW9uXT1cImNhbnZhc1JvdGF0aW9uXCIgW2FzcGVjdFJhdGlvXT1cImFzcGVjdFJhdGlvXCIgW2NvbnRhaW5XaXRoaW5Bc3BlY3RSYXRpb109XCJmYWxzZVwiXG4gICAgICAgICAgW21haW50YWluQXNwZWN0UmF0aW9dPVwiZmFsc2VcIiBbY3JvcHBlclN0YXRpY1dpZHRoXT1cImNyb3BwZXJTdGF0aWNXaWR0aFwiXG4gICAgICAgICAgW2Nyb3BwZXJTdGF0aWNIZWlnaHRdPVwiY3JvcHBlclN0YXRpY0hlaWdodFwiIFtjcm9wcGVyTWluV2lkdGhdPVwiY3JvcHBlck1pbldpZHRoXCJcbiAgICAgICAgICBbY3JvcHBlck1pbkhlaWdodF09XCJjcm9wcGVyTWluSGVpZ2h0XCIgW2Nyb3BwZXJNYXhXaWR0aF09XCJjcm9wcGVyTWF4V2lkdGhcIlxuICAgICAgICAgIFtjcm9wcGVyTWF4SGVpZ2h0XT1cImNyb3BwZXJNYXhIZWlnaHRcIiBbcmVzZXRDcm9wT25Bc3BlY3RSYXRpb0NoYW5nZV09J3RydWUnIFsoY3JvcHBlcildPVwiY3JvcHBlclwiXG4gICAgICAgICAgWyh0cmFuc2Zvcm0pXT1cInRyYW5zZm9ybVwiIFtvbmx5U2NhbGVEb3duXT1cInRydWVcIiBvdXRwdXQ9XCJibG9iXCIgZm9ybWF0PVwicG5nXCJcbiAgICAgICAgICAoaW1hZ2VDcm9wcGVkKT1cImltYWdlQ3JvcHBlZCgkZXZlbnQpXCIgKGNyb3BwZXJSZWFkeSk9XCJjcm9wcGVyUmVhZHkoJGV2ZW50KVwiPjwvaW1hZ2UtY3JvcHBlcj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkRWxlbWVudC5pbWFnZURhdGEgXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDJweDtcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInJvdGF0ZUxlZnQoKVwiIHRpdGxlPVwiUm90YXRlIExlZnRcIj7in7I8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInJvdGF0ZVJpZ2h0KClcIiB0aXRsZT1cIlJvdGF0ZSBSaWdodFwiPuKfszwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwiem9vbU91dCgpXCIgdGl0bGU9XCJab29tIE91dFwiPi08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cInpvb21JbigpXCIgdGl0bGU9XCJab29tIEluXCI+KzwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZUxlZnQoKVwiIHRpdGxlPVwiTW92ZSBMZWZ0XCI+4oaQPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJtb3ZlUmlnaHQoKVwiIHRpdGxlPVwiTW92ZSBSaWdodFwiPuKGkjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwibW92ZVVwKClcIiB0aXRsZT1cIk1vdmUgVXBcIj7ihpE8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgbG9nby1pY29uXCIgKGNsaWNrKT1cIm1vdmVEb3duKClcIiB0aXRsZT1cIk1vdmUgRG93blwiPuKGkzwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwiZmxpcEhvcml6b250YWwoKVwiIFtjbGFzcy5lbmFibGVkXT1cInRyYW5zZm9ybS5mbGlwSFwiXG4gICAgICAgICAgICB0aXRsZT1cIkZsaXAgSG9yaXpvbnRhbGx5XCI+4oaUPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGxvZ28taWNvblwiIChjbGljayk9XCJmbGlwVmVydGljYWwoKVwiIFtjbGFzcy5lbmFibGVkXT1cInRyYW5zZm9ybS5mbGlwVlwiXG4gICAgICAgICAgICB0aXRsZT1cIkZsaXAgVmVydGljYWxseVwiPuKGlTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBsb2dvLWljb25cIiAoY2xpY2spPVwicmVzZXRJbWFnZSgpXCIgdGl0bGU9XCJSZXNldFwiPsOXPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIFNLUzI4TUFSMjUgc2VhcmNoIHBkZiBzcGVjaWZpYyBmb3IgcGRmIGVsZW1lbnQgLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRFbGVtZW50Py50eXBlID09PSAnUGRmJ1wiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXNtXCI+U2VhcmNoIFBkZjwvbGFiZWw+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDJweDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCI+XG4gICAgICAgICAgPGxpYi1zZWFyY2gtYm94IFtxdWVzdGlvbl09XCJzZWxlY3RlZEVsZW1lbnRcIiBbYXBpTWV0YV09XCJib29rU3VidGV4dFwiIFtwbGFjZUhvbGRlclRleHRdPVwiJ1NlYXJjaC4uLidcIlxuICAgICAgICAgICAgKHNlYXJjaFZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudClcIj5cbiAgICAgICAgICA8L2xpYi1zZWFyY2gtYm94PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaW5rLWljb25cIj5cbiAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImxpbmtUb2dnbGVEcm9wZG93bigkZXZlbnQpXCIgZmlsbD1cIiMwMDAwMDBcIiB2ZXJzaW9uPVwiMS4xXCIgaWQ9XCJDYXBhXzFcIlxuICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgd2lkdGg9XCIyNHB4XCIgaGVpZ2h0PVwiMjRweFwiXG4gICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNDUwIDQ1MFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XG4gICAgICAgICAgICAgIDxnPlxuICAgICAgICAgICAgICAgIDxnPlxuICAgICAgICAgICAgICAgICAgPGc+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMzE4LjE1LDIzMC4xOTVsNzcuOTM0LTc3LjkzN2MzMS44OTQtMzEuODkyLDMxLjg5NC04My43ODItMC4wMDQtMTE1LjY3NGwtMTIuNjYtMTIuNjZcbiAgICAgICAgICBjLTMxLjg5My0zMS44OTYtODMuNzgtMzEuODk2LTExNS42NzQtMC4wMDRsLTc3LjkzNyw3Ny45MzRjLTE3LjU4OCwxNy41ODgtMjUuNDU3LDQxLjI2NC0yMy42NDYsNjQuMzExXG4gICAgICAgICAgYy0yMy4wNDUtMS44MTMtNDYuNzIyLDYuMDU2LTY0LjMwOCwyMy42NDdMMjMuOTIsMjY3Ljc0OGMtMzEuODk0LDMxLjg4OS0zMS44OTQsODMuNzc5LDAsMTE1LjY3NGwxMi42NjQsMTIuNjYyXG4gICAgICAgICAgYzMxLjg5MywzMS44OTMsODMuNzgzLDMxLjg5MywxMTUuNjc0LDBsNzcuOTM1LTc3LjkzNmMxNy41OTItMTcuNTksMjUuNDU5LTQxLjI2NiwyMy42NDctNjQuMzA5XG4gICAgICAgICAgQzI3Ni44ODQsMjU1LjY1NCwzMDAuNTYsMjQ3Ljc4MywzMTguMTUsMjMwLjE5NXogTTIwMi42NTMsMjkwLjYwNWwtNzcuOTM2LDc3LjkzOGMtMTYuNzA1LDE2LjcwMy00My44ODksMTYuNzAzLTYwLjU5LDBcbiAgICAgICAgICBsLTEyLjY2Ni0xMi42NjZjLTE2LjcwNS0xNi43MDEtMTYuNzAzLTQzLjg4NSwwLTYwLjU5NGw3Ny45MzYtNzcuOTMyYzE0LjE0LTE0LjE0MSwzNS43NzktMTYuMzA2LDUyLjIyNi02LjUxNmwtMzIuMzAyLDMyLjMwN1xuICAgICAgICAgIGMtNy42MDYsNy42MDQtNy42MDYsMTkuOTM4LDAsMjcuNTQxYzcuNjA1LDcuNjA3LDE5LjkzNyw3LjYwNywyNy41NDEsMGwzMi4zMDYtMzIuMzAzXG4gICAgICAgICAgQzIxOC45NTksMjU0LjgyOCwyMTYuNzk1LDI3Ni40NjksMjAyLjY1MywyOTAuNjA1eiBNMjM4LjM4MiwyMDkuMTY5bDMyLjI5OS0zMi4zMDZjNy42MDgtNy42MDIsNy42MDgtMTkuOTM1LDAtMjcuNTM4XG4gICAgICAgICAgYy03LjYwNC03LjYxLTE5LjkzNi03LjYxLTI3LjU0MS0wLjAwNGwtMzIuMzAzLDMyLjMwM2MtOS43OTEtMTYuNDQ2LTcuNjI3LTM4LjA4Nyw2LjUxNC01Mi4yMjZsNzcuOTM1LTc3LjkzNVxuICAgICAgICAgIGMxNi43MDctMTYuNzA3LDQzLjg5LTE2LjcwNyw2MC41OTQsMGwxMi42NjQsMTIuNjY0YzE2LjcwNSwxNi43MDUsMTYuNzA1LDQzLjg4NiwwLDYwLjU5MWwtNzcuOTM2LDc3LjkzN1xuICAgICAgICAgIEMyNzYuNDY4LDIxNi43OTcsMjU0LjgyOCwyMTguOTU5LDIzOC4zODIsMjA5LjE2OXpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTM0My40NjYsMjYxLjQ2NWMtNDUuMjg3LDAtODIsMzYuNzEzLTgyLDgyczM2LjcxMyw4Miw4Miw4MmM0NS4yODYsMCw4Mi0zNi43MTMsODItODJTMzg4Ljc1MywyNjEuNDY1LDM0My40NjYsMjYxLjQ2NXpcbiAgICAgICAgICAgTTM3Mi41MDUsMzMzLjU2NGwtNTYuMDQ2LDU2LjEwNGMtMC4yMzksMC4yMzgtMC41MzYsMC40MS0wLjg2MiwwLjQ5NmwtMjIuMzE1LDUuODVjLTAuNjQ5LDAuMTY4LTEuMzQ3LTAuMDItMS44MjItMC40OTRcbiAgICAgICAgICBjLTAuNDc3LTAuNDc5LTAuNjY2LTEuMTcyLTAuNDk2LTEuODI0bDUuODI2LTIyLjMxOGMwLjA4NC0wLjMyNiwwLjI1Ni0wLjYyNywwLjQ5NC0wLjg2M2w1Ni4wNDctNTYuMTA0XG4gICAgICAgICAgYzAuNzQyLTAuNzQyLDEuOTQ1LTAuNzQ0LDIuNjg4LTAuMDAybDQuNTQ4LDQuNTQxYzAuNzM5LDAuNzQsMC43NDEsMS45NDMsMCwyLjY4OGwtMzcuNDMzLDM3LjQ3MWw0LjcwOSw0LjcwM2wzNy40MzUtMzcuNDcxXG4gICAgICAgICAgYzAuNzM5LTAuNzQyLDEuOTQtMC43NDIsMi42ODItMC4wMDJsNC41NSw0LjU0MUMzNzMuMjUsMzMxLjYxNywzNzMuMjUsMzMyLjgyMiwzNzIuNTA1LDMzMy41NjR6IE0zOTUuNDcyLDMxMC41NzRsLTE3LDE3LjAxOFxuICAgICAgICAgIGMtMC43MzksMC43NDQtMS45NDIsMC43NDQtMi42ODUsMC4wMDJsLTE2LjQ4OS0xNi40NzVjLTAuNzQ0LTAuNzQtMC43NDQtMS45NDMtMC4wMDItMi42ODhsMTctMTcuMDJcbiAgICAgICAgICBjMC43NDEtMC43NCwxLjk0NC0wLjc0LDIuNjg4LTAuMDAybDE2LjQ4NywxNi40NzdDMzk2LjIxNiwzMDguNjI5LDM5Ni4yMTYsMzA5LjgzMiwzOTUuNDcyLDMxMC41NzR6XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpbmstZHJvcGRvd24tbWVudVwiICpuZ0lmPVwiaXNMaW5rRHJvcGRvd25PcGVuXCIgI2Ryb3Bkb3duPlxuICAgICAgICAgICAgICA8bGFiZWw+RW5kcG9pbnQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJib29rU3VidGV4dC5lbmRwb2ludFwiIC8+XG5cbiAgICAgICAgICAgICAgPGxhYmVsPlZhcmlhYmxlOjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiYm9va1N1YnRleHQudmFyaWFibGVcIiAvPlxuXG4gICAgICAgICAgICAgIDxsYWJlbD5GaWVsZDo8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbbmdNb2RlbF09XCJmaWVsZEFzU3RyaW5nXCIgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlRmllbGQoJGV2ZW50KVwiIC8+XG5cbiAgICAgICAgICAgICAgPGxhYmVsPkRlZmF1bHQgRmllbGQ6PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJib29rU3VidGV4dC5kZWZhdWx0RmllbGRcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9wIG9mIGdldFByb3BlcnRpZXMoKS5lbGVtZW50UHJvcHNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJwcm9wLnR5cGUgIT09ICdjaGVja2JveCcgJiYgcHJvcC50eXBlICE9PSAnc3ViUXVlc3Rpb24nXCIgY2xhc3M9XCJ0ZXh0LXNtXCI+e3sgcHJvcC5sYWJlbFxuICAgICAgICAgICAgfX08L2xhYmVsPlxuXG4gICAgICAgICAgPCEtLSBUZXh0IElucHV0IC0tPlxuICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3RleHQnXCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwicHJvcC5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiaGVhZGVyU2VsZWN0ID8gcGRmLnRpdGxlIDogKHNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gZ2V0VmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5ICkgOiBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkgKSA6ICBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkpXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJoZWFkZXJTZWxlY3QgPyB1cGRhdGVUaXRsZSgkZXZlbnQudGFyZ2V0LnZhbHVlKSA6IChzZWxlY3RlZEVsZW1lbnQ/LnR5cGUgPT09ICdUYWJsZScgPyAocHJvcC50YXJnZXRBcnJheSA/IHVwZGF0ZVZhbHVlQnlBcnJheVBhdGgocHJvcC50YXJnZXRBcnJheSwgcHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBwcm9wLmtleSwgJGV2ZW50KSA6IHNldFZhbHVlQnlQYXRoKHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKSApIDogc2V0VmFsdWVCeVBhdGgocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpKVwiXG4gICAgICAgICAgICBbY2xhc3MucmVhZC1vbmx5XT1cInNlbGVjdGVkRWxlbWVudC5yZWFkT25seVwiIFtyZWFkb25seV09XCJzZWxlY3RlZEVsZW1lbnQucmVhZE9ubHlcIiAvPlxuXG4gICAgICAgICAgPCEtLSBxdWVzdGlvbk51bWJlciAtLT5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ3F1ZXN0aW9uTnVtYmVyJ1wiIHR5cGU9XCJudW1iZXJcIiBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50LnF1ZXN0aW9uTnVtYmVyXCJcbiAgICAgICAgICAgIChpbnB1dCk9XCJzZXRWYWx1ZUJ5UGF0aCgncXVlc3Rpb25OdW1iZXInLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIC8+XG5cbiAgICAgICAgICA8IS0tIGZpbGUgLS0+XG4gICAgICAgICAgPCEtLSBBZGQgdGhpcyBpbnNpZGUgdGhlIGVsZW1lbnRQcm9wcyBsb29wIHdoZXJlIG90aGVyIGlucHV0cyBhcmUgcmVuZGVyZWQgLS0+XG4gICAgICAgICAgPHNlbGVjdCAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcC5rZXkgPT09ICdzdXBwb3J0VHlwZSdcIiBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCBmaWxlIGNhdGVnb3J5PC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPiB7eyBvcHRpb24ubGFiZWwgfX0gPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnY2hlY2tib3gnXCI+XG5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3RlZEVsZW1lbnQudHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gZ2V0VmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5ICkgOiBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkgKTogIGdldFZhbHVlQnlQYXRoKHByb3Aua2V5KSBcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIiBzZWxlY3RlZEVsZW1lbnQudHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gdXBkYXRlVmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5LCAkZXZlbnQpIDogb25Ub2dnbGVDaGFuZ2UocHJvcC5rZXksICRldmVudCkgKSA6IG9uVG9nZ2xlQ2hhbmdlKHByb3Aua2V5LCAkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtbGFiZWxcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweDtcIj57eyBwcm9wLmxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBTS1MyME1BUjI1IFN1YnF1ZXN0aW9uIFR5cGUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AudHlwZSA9PT0gJ3N1YlF1ZXN0aW9uJ1wiPlxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiByb3c7IGdhcDogMTBweDsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgPGRpdj57eyBwcm9wLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGVkRWxlbWVudC50eXBlID09PSAnVGFibGUnID8gKHByb3AudGFyZ2V0QXJyYXkgPyBnZXRWYWx1ZUJ5QXJyYXlQYXRoKHByb3AudGFyZ2V0QXJyYXksIHByb3AudGFyZ2V0QXJyYXlLZXksIHNlbGVjdENvbHVtbiwgcHJvcC5rZXkgKSA6IGdldFZhbHVlQnlQYXRoKHByb3Aua2V5KSApOiAgZ2V0VmFsdWVCeVBhdGgocHJvcC5rZXkpIFwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIgc2VsZWN0ZWRFbGVtZW50LnR5cGUgPT09ICdUYWJsZScgPyAocHJvcC50YXJnZXRBcnJheSA/IHVwZGF0ZVZhbHVlQnlBcnJheVBhdGgocHJvcC50YXJnZXRBcnJheSwgcHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBwcm9wLmtleSwgJGV2ZW50KSA6IG9uVG9nZ2xlQ2hhbmdlKHByb3Aua2V5LCAkZXZlbnQpICkgOiBvblRvZ2dsZUNoYW5nZShwcm9wLmtleSwgJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gU0tTMjBNQVIyNSBSZW5kZXIgc3VicXVlc3Rpb25zIHdoZW4gY2hlY2tib3ggaXMgY2hlY2tlZCAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3RlZEVsZW1lbnQudHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gZ2V0VmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5ICkgOiBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkgKTogIGdldFZhbHVlQnlQYXRoKHByb3Aua2V5KVwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdWJQcm9wIG9mIHByb3Auc3ViUXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2U3ZjJmZjsgcGFkZGluZzogOHB4OyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyBzdWJQcm9wLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzdWJQcm9wLnR5cGUgPT09ICdhcnJheSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBJdGVyYXRlIG92ZXIgZmlsdGVyZWQgY29sdW1ucyB0byBkaXNwbGF5IGNoZWNrYm94ZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBmaWx0ZXJlZENvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic3ViUHJvcC5vcGVyYW5kcyA/IHN1YlByb3Aub3BlcmFuZHMuaW5jbHVkZXMoY29sdW1uLmFwaU5hbWUpIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2Uoc3ViUHJvcC50YXJnZXRBcnJheSxzdWJQcm9wLnRhcmdldEFycmF5S2V5LHN1YlByb3Aua2V5LCBjb2x1bW4uYXBpTmFtZSwgJGV2ZW50LnRhcmdldC5jaGVja2VkKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmFwaU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyMU1BUjI1IE5ldyByYWRpbyB0eXBlIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInN1YlByb3AudHlwZSA9PT0gJ3JhZGlvJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtuYW1lXT1cInN1YlByb3Aua2V5XCIgW3ZhbHVlXT1cImNvbHVtbi5hcGlOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0VmFsdWVCeUFycmF5UGF0aChzdWJQcm9wLnRhcmdldEFycmF5LCBzdWJQcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHN1YlByb3Aua2V5KSA9PT0gY29sdW1uLmFwaU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUmFkaW9DaGFuZ2Uoc3ViUHJvcC50YXJnZXRBcnJheSwgc3ViUHJvcC50YXJnZXRBcnJheUtleSwgc3ViUHJvcC5rZXksIGNvbHVtbi5hcGlOYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sdW1uLmFwaU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPCEtLSBTS1MyME1BUjI1IEFkZCBtb3JlIHN1YnByb3BlcnR5IHR5cGVzIGFzIG5lZWRlZCAtLT5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSW5zaWRlIHRoZSBzdWJQcm9wIG5nRm9yIGxvb3AgLS0+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJzdWJQcm9wLnR5cGUgPT09ICd0ZXh0J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInN1YlByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50LnR5cGUgPT09ICdUYWJsZScgPyAoc3ViUHJvcC50YXJnZXRBcnJheSA/IGdldFZhbHVlQnlBcnJheVBhdGgoc3ViUHJvcC50YXJnZXRBcnJheSwgc3ViUHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBzdWJQcm9wLmtleSApIDogZ2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXkpICkgOiBnZXRWYWx1ZUJ5UGF0aChzdWJQcm9wLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwic2VsZWN0ZWRFbGVtZW50LnR5cGUgPT09ICdUYWJsZScgPyAoc3ViUHJvcC50YXJnZXRBcnJheSA/IHVwZGF0ZVZhbHVlQnlBcnJheVBhdGgoc3ViUHJvcC50YXJnZXRBcnJheSwgc3ViUHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBzdWJQcm9wLmtleSwgJGV2ZW50KSA6IHNldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKSApIDogc2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cblxuICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwic3ViUHJvcC50eXBlID09PSAnYm9vbGVhbidcIiB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJnZXRWYWx1ZUJ5UGF0aChzdWJQcm9wLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LmNoZWNrZWQpXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJzdWJQcm9wLnR5cGUgPT09ICdzZWxlY3QnXCIgW3ZhbHVlXT1cImdldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBzdWJQcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+e3sgb3B0aW9uIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInN1YlByb3AudHlwZSA9PT0gJ2NoZWNrYm94J1wiIHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImdldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5KVwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXksICRldmVudC50YXJnZXQuY2hlY2tlZClcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBTS1MyME1BUjI1IFRleHQgQWxpZ24gQnV0dG9ucyAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnYWxpZ24nXCI+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcC5vcHRpb25zXCIgKGNsaWNrKT1cIm9uQWxpZ25TZWxlY3Qob3B0aW9uLnZhbHVlKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRFbGVtZW50Py50ZXh0QWxpZ24gPT09IG9wdGlvbi52YWx1ZVwiIFt0aXRsZV09XCJvcHRpb24udmFsdWVcIj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIicuLi9hc3NldHMvaWNvbnMvJyArIG9wdGlvbi5pY29uICsgJy5zdmcnXCIgW2FsdF09XCJvcHRpb24udmFsdWVcIiBjbGFzcz1cImljb24tc2l6ZVwiIC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzdHlsZSdcIj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiAoY2xpY2spPVwib25TdHlsZVNlbGVjdChvcHRpb24udmFsdWUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc1N0eWxlQWN0aXZlKG9wdGlvbi52YWx1ZSlcIiBbdGl0bGVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCInLi4vYXNzZXRzL2ljb25zLycgKyBvcHRpb24uaWNvbiArICcuc3ZnJ1wiIFthbHRdPVwib3B0aW9uLnZhbHVlXCIgY2xhc3M9XCJpY29uLXNpemVcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEZpZWxkIFNpemUgQ29udHJvbHMgLS0+XG4gICAgICAgICAgPCEtLSAgQ2hhbmdlIGtleSB3aWR0aCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICd3aWR0aCdcIiBbbmdDbGFzc109XCJ7J2ZsZXgtY29udGFpbmVyJzogdHJ1ZSwgJ2N1c3RvbS1hY3RpdmUnOiBzZWxlY3RlZEVsZW1lbnQ/LndpZHRoICE9PSAnKicgJiYgc2VsZWN0ZWRFbGVtZW50Py53aWR0aCAhPT0gJ2F1dG8nfVwiPlxuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICBjbGFzcz1cInNpemUtc2VsZWN0XCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudD8ud2lkdGggPT09ICcqJyA/ICdEZWZhdWx0JyA6IHNlbGVjdGVkRWxlbWVudD8ud2lkdGggPT09ICdhdXRvJyA/ICdBdXRvJyA6ICdDdXN0b20nXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbldpZHRoU2VsZWN0KFxuICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQudmFsdWUgPT09ICdEZWZhdWx0JyA/ICcqJyA6XG4gICAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJ0F1dG8nID8gJ2F1dG8nIDogJ2N1c3RvbSdcbiAgICAgICAgICAgICAgKVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRGVmYXVsdFwiPkRlZmF1bHQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkF1dG9cIj5BdXRvPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDdXN0b21cIj5DdXN0b208L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIFxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRFbGVtZW50Py53aWR0aCAhPT0gJyonICYmIHNlbGVjdGVkRWxlbWVudD8ud2lkdGggIT09ICdhdXRvJ1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNpemUtaW5wdXRcIlxuICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudD8ud2lkdGhcIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwic2V0VmFsdWVCeVBhdGgoXG4gICAgICAgICAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgICAgICAgICAkZXZlbnQudGFyZ2V0LnZhbHVlQXNOdW1iZXIgPCAxID8gMSA6XG4gICAgICAgICAgICAgICAgJGV2ZW50LnRhcmdldC52YWx1ZUFzTnVtYmVyID4gMTAwID8gMTAwIDpcbiAgICAgICAgICAgICAgICAkZXZlbnQudGFyZ2V0LnZhbHVlQXNOdW1iZXJcbiAgICAgICAgICAgICAgKVwiIC8+XG4gICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgPCEtLSAgTGluZSBQcm9wZXJ0aWVzIC0tPlxuICAgICAgICAgIDwhLS0gUGFkZGluZyBUb3AgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAncGFkZGluZ1RvcCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgW3BsYWNlaG9sZGVyXT1cInByb3AucGxhY2Vob2xkZXJcIiBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50Py5wYWRkaW5nVG9wXCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cInNldFZhbHVlQnlQYXRoKCdwYWRkaW5nVG9wJywgJGV2ZW50LnRhcmdldC52YWx1ZSlcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBQYWRkaW5nIEJvdHRvbSAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdwYWRkaW5nQm90dG9tJ1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBbcGxhY2Vob2xkZXJdPVwicHJvcC5wbGFjZWhvbGRlclwiIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LnBhZGRpbmdCb3R0b21cIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwic2V0VmFsdWVCeVBhdGgoJ3BhZGRpbmdCb3R0b20nLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIExpbmUgU3R5bGUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnbGluZVN0eWxlJ1wiPlxuICAgICAgICAgICAgPHNlbGVjdCBbdmFsdWVdPVwic2VsZWN0ZWRFbGVtZW50Py5saW5lU3R5bGVcIiAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdsaW5lU3R5bGUnLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcHJvcC5vcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7IG9wdGlvbiB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIENvbG9yIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ2NvbG9yJ1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIFt2YWx1ZV09XCJzZWxlY3RlZEVsZW1lbnQ/LmNvbG9yXCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cInNldFZhbHVlQnlQYXRoKCdjb2xvcicsICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCIgKm5nSWY9XCJhY3RpdmVUYWIgPT09ICdwcm9wZXJ0eSdcIj5cbiAgICA8IS0tIEZpZWxkIEVsZW1lbnRzIFByb3BlcnRpZXMgLS0+XG4gICAgPCEtLSAgU2hvdyBlbGVtZW50cyBJRCAgLS0+XG4gICAgPGRpdiAqbmdJZj1cImdldFByb3BlcnRpZXMoKVwiPlxuICAgICAgPGxhYmVsPkxhYmVsIElkPC9sYWJlbD5cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEzcHg7IHBhZGRpbmc6IDExcHg7IGJvcmRlci1yYWRpdXM6IDVweDsgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsgYm9yZGVyOiAxcHggc29saWQgI2RkZDtcIj5cbiAgICAgICAge3sgaGVhZGVyU2VsZWN0ID8gYm9va0lkIDogc2VsZWN0ZWRFbGVtZW50LmlkIH19PC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwcm9wIG9mIGdldFByb3BlcnRpZXMoKS5maWVsZFByb3BzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1zbVwiPnt7IHByb3AubGFiZWwgfX08L2xhYmVsPlxuXG4gICAgICAgICAgPCEtLSBTS1MyMU1BUjI1IFRvZ2dsZSBHcm91cCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAndG9nZ2xlR3JvdXAnXCIgY2xhc3M9XCJ0b2dnbGUtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtaXRlbVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0b2dnbGUtbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgLz5cbiAgICAgICAgICAgICAgICBEaXNhYmxlZFxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tICAtIGhhbmRsZWQgb3B0aW9ucyB3aXRoIFVVSUQgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdkcm9wZG93bicgfHwgcHJvcC50eXBlID09PSAnY2hlY2tib3gnIHx8IHByb3AudHlwZSA9PT0gJ3JhZGlvJyAmJiBwcm9wLmtleSA9PT0gJ29wdGlvbnMnXCJcbiAgICAgICAgICAgIGNsYXNzPVwib3B0aW9ucy1jb250YWluZXJcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1saXN0XCIgKGRyYWdvdmVyKT1cIm9uRHJhZ092ZXIoJGV2ZW50KVwiIChkcm9wKT1cIm9uRHJvcCgkZXZlbnQsIHByb3Aua2V5KVwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygc2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVwiIGNsYXNzPVwib3B0aW9uLWl0ZW1zXCIgW2F0dHIuZGF0YS1pZF09XCJvcHRpb24uaWRcIlxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIiAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudCwgb3B0aW9uLmlkKVwiPlxuXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJvcHRpb24udmFsdWVcIiBwbGFjZWhvbGRlcj1cIk9wdGlvblwiIGNsYXNzPVwib3B0aW9uc1wiIC8+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCIuLi9hc3NldHMvaWNvbnMvVHJhc2guc3ZnXCIgKGNsaWNrKT1cInJlbW92ZU9wdGlvbihzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldLCBvcHRpb24uaWQpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcmFnLWhhbmRsZVwiPuKYsDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkT3B0aW9uKHNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV0pXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtdmFyaWVudFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sZ1wiPis8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4+QWRkPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGlucHV0ICpuZ0lmPVwicHJvcC50eXBlID09PSAndGV4dCdcIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJwcm9wLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJoZWFkZXJTZWxlY3QgPyBwZGYudGl0bGUgOiAoc2VsZWN0ZWRFbGVtZW50Py50eXBlID09PSAnVGFibGUnID8gKHByb3AudGFyZ2V0QXJyYXkgPyBnZXRWYWx1ZUJ5QXJyYXlQYXRoKHByb3AudGFyZ2V0QXJyYXksIHByb3AudGFyZ2V0QXJyYXlLZXksIHNlbGVjdENvbHVtbiwgcHJvcC5rZXkgKSA6IGdldFZhbHVlQnlQYXRoKHByb3Aua2V5KSApIDogIGdldFZhbHVlQnlQYXRoKHByb3Aua2V5KSlcIlxuICAgICAgICAgICAgKGlucHV0KT1cImhlYWRlclNlbGVjdCA/IHVwZGF0ZVRpdGxlKCRldmVudC50YXJnZXQudmFsdWUpIDogKHNlbGVjdGVkRWxlbWVudD8udHlwZSA9PT0gJ1RhYmxlJyA/IChwcm9wLnRhcmdldEFycmF5ID8gdXBkYXRlVmFsdWVCeUFycmF5UGF0aChwcm9wLnRhcmdldEFycmF5LCBwcm9wLnRhcmdldEFycmF5S2V5LCBzZWxlY3RDb2x1bW4sIHByb3Aua2V5LCAkZXZlbnQpIDogc2V0VmFsdWVCeVBhdGgocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpICkgOiBzZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSwgJGV2ZW50LnRhcmdldC52YWx1ZSkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5yZWFkLW9ubHldPVwic2VsZWN0ZWRFbGVtZW50LnJlYWRPbmx5XCIgW3JlYWRvbmx5XT1cInNlbGVjdGVkRWxlbWVudC5yZWFkT25seVwiIC8+XG5cbiAgICAgICAgICA8IS0tIFN1YiBRdWVzdGlvbnMgVG9nZ2xlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzdWJRdWVzdGlvbidcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHlsZS10b2dnbGUtaGVhZGVyXCIgKGNsaWNrKT1cInRvZ2dsZVN1YlF1ZXN0aW9uKHByb3ApXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkLWVsZW1lbnRzXCI+U3ViIFRleHQ8L2Rpdj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInByb3AuaXNFeHBhbmRlZCA/ICcuLi9hc3NldHMvaWNvbnMvYXJyb3ctZG93bi5zdmcnIDogJy4uL2Fzc2V0cy9pY29ucy9hcnJvdy1yaWdodC5zdmcnXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCJUb2dnbGUgQXJyb3dcIiBjbGFzcz1cImFycm93LWljb25cIj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFJlbmRlciBzdWJxdWVzdGlvbnMgd2hlbiBhcnJvdyBpcyBkb3duIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInByb3AuaXNFeHBhbmRlZFwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI2RkZDsgcGFkZGluZzogOHB4OyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHN1YlByb3Agb2YgcHJvcC5zdWJRdWVzdGlvblwiIGNsYXNzPVwic3ViLXF1ZXN0aW9uLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgc3ViUHJvcC5sYWJlbCB9fTwvbGFiZWw+XG5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInN1YlByb3AudHlwZSA9PT0gJ3RleHQnXCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwic3ViUHJvcC5wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRWYWx1ZUJ5UGF0aChzdWJQcm9wLmtleSlcIiAoaW5wdXQpPVwic2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA8IS0tICBSZW5kZXIgaW5wdXQgZmllbGQgb25seSBpZiBzdWJQcm9wLnR5cGUgaXMgJ2FycmF5JyAtLT5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cInN1YlByb3AudHlwZSA9PT0gJ2FycmF5J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInN1YlByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmFsdWVCeVBhdGgoc3ViUHJvcC5rZXkpXCIgKGlucHV0KT1cInNldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW25nTW9kZWxdPVwiZmllbGRBc1N0cmluZ1wiIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpZWxkKCRldmVudClcIiAvPiAtLT5cblxuICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwic3ViUHJvcC50eXBlID09PSAnYm9vbGVhbidcIiB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJnZXRWYWx1ZUJ5UGF0aChzdWJQcm9wLmtleSlcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKHN1YlByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LmNoZWNrZWQpXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdjaGVja2JveCdcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWxhYmVsXCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxMHB4O1wiPnt7IHByb3AubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRFbGVtZW50LnR5cGUgPT09ICdUYWJsZScgPyAocHJvcC50YXJnZXRBcnJheSA/IGdldFZhbHVlQnlBcnJheVBhdGgocHJvcC50YXJnZXRBcnJheSwgcHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBwcm9wLmtleSApIDogZ2V0VmFsdWVCeVBhdGgocHJvcC5rZXkpICk6ICBnZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSkgXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCIgc2VsZWN0ZWRFbGVtZW50LnR5cGUgPT09ICdUYWJsZScgPyAocHJvcC50YXJnZXRBcnJheSA/IHVwZGF0ZVZhbHVlQnlBcnJheVBhdGgocHJvcC50YXJnZXRBcnJheSwgcHJvcC50YXJnZXRBcnJheUtleSwgc2VsZWN0Q29sdW1uLCBwcm9wLmtleSwgJGV2ZW50KSA6IG9uVG9nZ2xlQ2hhbmdlKHByb3Aua2V5LCAkZXZlbnQpICkgOiBvblRvZ2dsZUNoYW5nZShwcm9wLmtleSwgJGV2ZW50KVwiIC8+XG5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFNLUzIxTUFSMjUgTW92ZSBTdHlsZSBPdXRzaWRlIHRoZSBMb29wIC0tPlxuICAgICAgPCEtLSBTdHlsZSBUb2dnbGUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwic3R5bGUtdG9nZ2xlLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVTdHlsZVNlY3Rpb24oKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZC1lbGVtZW50c1wiPlN0eWxlPC9kaXY+XG4gICAgICAgIDxpbWcgW3NyY109XCJpc1N0eWxlRXhwYW5kZWQgPyAnLi4vYXNzZXRzL2ljb25zL2Fycm93LWRvd24uc3ZnJyA6ICcuLi9hc3NldHMvaWNvbnMvYXJyb3ctcmlnaHQuc3ZnJ1wiXG4gICAgICAgICAgYWx0PVwiVG9nZ2xlIEFycm93XCIgY2xhc3M9XCJhcnJvdy1pY29uXCI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cImlzU3R5bGVFeHBhbmRlZFwiIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI2RkZDsgcGFkZGluZzogOHB4OyBib3JkZXItcmFkaXVzOiA0cHg7XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQga2V5IG9mIGdldFN0eWxlS2V5cygpXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sga2V5IH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50LnN0eWxlW2tleV1cIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwic2V0VmFsdWVCeVBhdGgoJ3N0eWxlLicgKyBrZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgcGxhY2Vob2xkZXI9XCJFbnRlciB7eyBrZXkgfX1cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnRcIiAqbmdJZj1cImFjdGl2ZVRhYiA9PT0gJ2FwcGVhcmFuY2UnXCI+XG4gICAgPGRpdiAqbmdJZj1cImdldFByb3BlcnRpZXMoKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcHJvcCBvZiBnZXRQcm9wZXJ0aWVzKCkuYXBwZWFyYW5jZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtc21cIj57eyBwcm9wLmxhYmVsIH19PC9sYWJlbD5cbiAgICAgICAgICA8IS0tIEZvbnQgU2VsZWN0aW9uIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ2ZvbnQnXCI+XG4gICAgICAgICAgICA8c2VsZWN0ICpuZ0lmPVwicHJvcC50eXBlID09PSAnc2VsZWN0J1wiIGNsYXNzPVwic2VsZWN0LWNvbnRhaW5lclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50LmZvbnRcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdmb250JywgJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICB7eyBvcHRpb24gfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIElucHV0IEJveCAtLT5cbiAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICd0ZXh0J1wiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cInByb3AucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV1cIiAoaW5wdXQpPVwic2V0VmFsdWVCeVBhdGgocHJvcC5rZXksICRldmVudC50YXJnZXQudmFsdWUpXCIgLz5cblxuPCEtLSBGb250IFNpemUgLS0+XG48ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdmb250U2l6ZScgJiYgcHJvcC50eXBlID09PSAnbnVtYmVyJ1wiPlxuICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjFcIiBtYXg9XCIxMDBcIiBzdGVwPVwiMVwiXG4gICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRWxlbWVudC5mb250U2l6ZVwiXG4gICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdmb250U2l6ZScsIHNlbGVjdGVkRWxlbWVudC5mb250U2l6ZSlcIiAvPlxuPC9kaXY+XG4gICAgICAgICAgPCEtLSBGb250IFdlaWdodCBTZWxlY3Rpb24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInByb3Aua2V5ID09PSAnZm9udFdlaWdodCdcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdzZWxlY3QnXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEVsZW1lbnRbcHJvcC5rZXldXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSwgJGV2ZW50LnRhcmdldC52YWx1ZSlcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb3Aub3B0aW9uc1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cbiAgICAgICAgICAgICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPCEtLSBEcm9wZG93biBCb3ggLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnZHJvcGRvd24nXCIgY2xhc3M9XCJpbnB1dC1ib3gtZmllbGRcIj5cbiAgICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRWxlbWVudFtwcm9wLmtleV1cIiAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKHByb3Aua2V5LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24gfX1cbiAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBDb2xvciBQaWNrZXIgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC50eXBlID09PSAnY29sb3InXCIgY2xhc3M9XCJjb2xvci1zZWxlY3RvclwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEVsZW1lbnQuZm9udENvbG9yXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdmb250Q29sb3InLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gSEVYIElucHV0IEJveCAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9wLnR5cGUgPT09ICdjb2xvcidcIiBjbGFzcz1cImhleC1pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4+SEVYIENvZGU8L3NwYW4+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50W3Byb3Aua2V5XVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZUJ5UGF0aChwcm9wLmtleSwgJGV2ZW50LnRhcmdldC52YWx1ZSlcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEZvbnQgU3R5bGUgLS0+XG48ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdmb250U3R5bGUnXCI+XG4gIDxzZWxlY3QgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEVsZW1lbnQuZm9udFN0eWxlXCJcbiAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdmb250U3R5bGUnLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxuICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICA8L29wdGlvbj5cbiAgPC9zZWxlY3Q+XG48L2Rpdj5cblxuPCEtLSBtYXJnaW46IFswLCAxMCwgMCwgMF0gLy8gWyBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20gXSAtLT5cbjxkaXYgKm5nSWY9XCJwcm9wLmtleSA9PT0gJ21hcmdpbicmJiBzZWxlY3RlZEVsZW1lbnQ/Lm1hcmdpblwiPlxuICA8ZGl2IGNsYXNzPVwibWFyZ2luLWlucHV0c1wiPlxuICAgIDxkaXY+XG4gICAgICA8bGFiZWw+UmlnaHQ8L2xhYmVsPlxuICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRWxlbWVudC5tYXJnaW5bMV1cIlxuICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0VmFsdWVCeVBhdGgoJ21hcmdpbicsIHNlbGVjdGVkRWxlbWVudC5tYXJnaW4pXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGxhYmVsPkJvdHRvbTwvbGFiZWw+XG4gICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50Lm1hcmdpblsyXVwiXG4gICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZUJ5UGF0aCgnbWFyZ2luJywgc2VsZWN0ZWRFbGVtZW50Lm1hcmdpbilcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8bGFiZWw+TGVmdDwvbGFiZWw+XG4gICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRFbGVtZW50Lm1hcmdpblszXVwiXG4gICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZUJ5UGF0aCgnbWFyZ2luJywgc2VsZWN0ZWRFbGVtZW50Lm1hcmdpbilcIiAvPlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8bGFiZWw+VG9wPC9sYWJlbD5cbiAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEVsZW1lbnQubWFyZ2luWzBdXCJcbiAgICAgICAgICAgICAoY2hhbmdlKT1cInNldFZhbHVlQnlQYXRoKCdtYXJnaW4nLCBzZWxlY3RlZEVsZW1lbnQubWFyZ2luKVwiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRleHRBbGlnbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicHJvcC5rZXkgPT09ICdhbGlnbkl0ZW1zJ1wiPlxuICAgICAgICAgICAgPHNlbGVjdCBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRWxlbWVudC5hbGlnbkl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRWYWx1ZUJ5UGF0aCgnYWxpZ25JdGVtcycsICRldmVudC50YXJnZXQudmFsdWUpXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBwcm9wLm9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG48IS0tIERlZmF1bHQgU2F2ZSBCdXR0b24gLS0+XG48ZGl2IGNsYXNzPVwiYnV0dG9uLWNvbnRhaW5lclwiICpuZ0lmPVwiIXRlbXBsYXRlU2VsZWN0ZWRcIj5cbiAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idG5cIiAoY2xpY2spPVwib25DYW5jZWwoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICA8YnV0dG9uIGNsYXNzPVwic2F2ZS1idG5cIiAoY2xpY2spPVwiaGFuZGxlQnV0dG9uQ2xpY2soKVwiPlNhdmU8L2J1dHRvbj5cbjwvZGl2PlxuPC9kaXY+XG4iXX0=