bways-report 0.1.8 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +463 -316
  2. package/esm2022/lib/core/config/bways-report-config.mjs +31 -32
  3. package/esm2022/lib/core/models/index.mjs +1 -1
  4. package/esm2022/lib/core/models/report-api-endpoint.model.mjs +8 -0
  5. package/esm2022/lib/core/models/report-component.model.mjs +1 -1
  6. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  7. package/esm2022/lib/core/services/index.mjs +2 -1
  8. package/esm2022/lib/core/services/report-api-execution.service.mjs +210 -0
  9. package/esm2022/lib/core/services/report-data-discovery.service.mjs +76 -4
  10. package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
  11. package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
  12. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  13. package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
  14. package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
  15. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +31 -1
  16. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +27 -2
  17. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
  18. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
  19. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
  20. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
  21. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +4 -37
  22. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +28 -51
  23. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
  24. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
  25. package/esm2022/lib/data-access/adapters/index.mjs +1 -1
  26. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
  27. package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
  28. package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
  29. package/esm2022/lib/data-access/contracts/index.mjs +1 -1
  30. package/esm2022/lib/data-access/contracts/lookup.contract.mjs +1 -1
  31. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
  32. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +536 -6
  33. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +55 -17
  34. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +546 -119
  35. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +3 -3
  36. package/esm2022/lib/features/designer/components/property-editor/property-editor-action.component.mjs +3 -3
  37. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +142 -8
  38. package/esm2022/lib/features/designer/components/property-editor/property-editor-general.component.mjs +3 -3
  39. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +129 -28
  40. package/esm2022/lib/features/designer/components/property-editor/property-editor-layout.component.mjs +3 -3
  41. package/esm2022/lib/features/designer/components/property-editor/property-editor-report.component.mjs +3 -3
  42. package/esm2022/lib/features/designer/components/property-editor/property-editor-validation.component.mjs +3 -3
  43. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +27 -13
  44. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
  45. package/esm2022/lib/features/designer/designer.component.mjs +109 -75
  46. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
  47. package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
  48. package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
  49. package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
  50. package/esm2022/lib/features/designer/utilities/canvas-layout.util.mjs +2 -1
  51. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
  52. package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
  53. package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
  54. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
  55. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
  56. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +6 -4
  57. package/esm2022/lib/features/routing/report-routes.mjs +6 -6
  58. package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
  59. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
  60. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +23 -4
  61. package/esm2022/lib/features/runtime/report-execution.service.mjs +36 -6
  62. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +54 -11
  63. package/esm2022/lib/features/runtime/report-runtime.component.mjs +105 -68
  64. package/esm2022/lib/features/runtime/rpt-report.component.mjs +50 -42
  65. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
  66. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +16 -7
  67. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +53 -1
  68. package/esm2022/lib/primitives/components/index.mjs +2 -1
  69. package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +428 -0
  70. package/esm2022/lib/primitives/register-builtins.mjs +51 -2
  71. package/esm2022/lib/provide-reporting.mjs +11 -29
  72. package/fesm2022/bways-report.mjs +3745 -1281
  73. package/fesm2022/bways-report.mjs.map +1 -1
  74. package/lib/core/config/bways-report-config.d.ts +27 -5
  75. package/lib/core/models/index.d.ts +2 -1
  76. package/lib/core/models/report-api-endpoint.model.d.ts +30 -0
  77. package/lib/core/models/report-component.model.d.ts +16 -4
  78. package/lib/core/models/report-datasource.model.d.ts +21 -2
  79. package/lib/core/services/index.d.ts +1 -0
  80. package/lib/core/services/report-api-execution.service.d.ts +41 -0
  81. package/lib/core/services/report-data-discovery.service.d.ts +23 -1
  82. package/lib/core/services/report-session-context.service.d.ts +9 -0
  83. package/lib/core/tokens/designer-config.token.d.ts +4 -0
  84. package/lib/core/tokens/reporting-config.token.d.ts +4 -0
  85. package/lib/core/utils/report-endpoint.util.d.ts +12 -0
  86. package/lib/core/utils/report-request-scope.d.ts +14 -0
  87. package/lib/data-access/adapters/endpoint-datasource.adapter.d.ts +2 -0
  88. package/lib/data-access/adapters/endpoint-lookup.adapter.d.ts +1 -0
  89. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
  90. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
  91. package/lib/data-access/adapters/endpoint-tokens.d.ts +7 -0
  92. package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
  93. package/lib/data-access/adapters/http-lookup.adapter.d.ts +3 -4
  94. package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
  95. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
  96. package/lib/data-access/adapters/index.d.ts +1 -1
  97. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
  98. package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
  99. package/lib/data-access/adapters/session-headers.d.ts +3 -0
  100. package/lib/data-access/contracts/index.d.ts +1 -0
  101. package/lib/data-access/contracts/lookup.contract.d.ts +3 -0
  102. package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
  103. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +16 -0
  104. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
  105. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
  106. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +21 -3
  107. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +20 -7
  108. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +2 -1
  109. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
  110. package/lib/features/designer/designer.component.d.ts +16 -2
  111. package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
  112. package/lib/features/designer/services/designer-config.service.d.ts +13 -0
  113. package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
  114. package/lib/features/persistence/services/report-store.service.d.ts +15 -1
  115. package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
  116. package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
  117. package/lib/features/runtime/report-execution.service.d.ts +4 -0
  118. package/lib/features/runtime/report-grid-bridge.component.d.ts +4 -1
  119. package/lib/features/runtime/report-runtime.component.d.ts +14 -1
  120. package/lib/features/runtime/rpt-report.component.d.ts +5 -0
  121. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
  122. package/lib/primitives/components/index.d.ts +2 -0
  123. package/lib/primitives/components/radio/rpt-radio.component.d.ts +77 -0
  124. package/package.json +2 -1
@@ -147,10 +147,11 @@ export function getComponentIconName(type) {
147
147
  case 'date-range': return 'calendar';
148
148
  case 'number': return 'number';
149
149
  case 'checkbox': return 'checkbox';
150
+ case 'radio': return 'radio';
150
151
  case 'button': return 'button';
151
152
  case 'kpi-card': return 'kpi';
152
153
  case 'chart': return 'chart-bar';
153
154
  default: return 'box';
154
155
  }
155
156
  }
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLWxheW91dC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvdXRpbGl0aWVzL2NhbnZhcy1sYXlvdXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7OztHQUlHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxJQUErQixFQUMvQixlQUF1QixFQUFFLEVBQ3pCLFlBQTRCO0lBRTVCLElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksV0FBVyxDQUFDO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLElBQStCLEVBQy9CLGVBQXVCLEVBQUUsRUFDekIsSUFBYTtJQUViLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdB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LENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQVk7SUFDL0MsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxhQUFhLENBQUM7UUFDbkMsS0FBSyxVQUFVLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQztRQUNuQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDO1FBQy9CLEtBQUssWUFBWSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUM7UUFDckMsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQztRQUMvQixLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDO1FBQ25DLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUM7UUFDL0IsS0FBSyxVQUFVLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQztRQUM5QixLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sV0FBVyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDO0lBQ3hCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1jb21wb25lbnQubW9kZWwnO1xuXG4vKipcbiAqIFB1cmUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGRlc2lnbiBjYW52YXMgbGF5b3V0LCBncmlkIGNhbGN1bGF0aW9ucywgYW5kIHNpemluZy5cbiAqXG4gKiBJbXBsZW1lbnRlZCBhcyBmcmFtZXdvcmstaW5kZXBlbmRlbnQgcHVyZSBmdW5jdGlvbnMgcGVyIFJ1bGUgMTAgJiAxMSAoUHVyZSBMb2dpYyBGaXJzdCkuXG4gKi9cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgZWZmZWN0aXZlIGNvbHVtbiBzcGFuIGZvciBhIGNvbXBvbmVudC5cbiAqIFVzZXMgbGF5b3V0LmNvbHVtblNwYW4gaWYgc3BlY2lmaWVkLCBvdGhlcndpc2UgZGVmYXVsdHMgYmFzZWQgb24gY29tcG9uZW50IHR5cGUgKGUuZy4gMiBmb3IgYnV0dG9uLCA0IGZvciBvdGhlcnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudFNwYW4oXG4gIGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24sXG4gIHRvdGFsQ29sdW1uczogbnVtYmVyID0gMTIsXG4gIG92ZXJyaWRlU3Bhbj86IG51bWJlciB8IG51bGxcbik6IG51bWJlciB7XG4gIGlmIChvdmVycmlkZVNwYW4gIT09IHVuZGVmaW5lZCAmJiBvdmVycmlkZVNwYW4gIT09IG51bGwpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5taW4odG90YWxDb2x1bW5zLCBvdmVycmlkZVNwYW4pKTtcbiAgfVxuICBjb25zdCBkZWZhdWx0U3BhbiA9IGNvbXAudHlwZSA9PT0gJ2J1dHRvbicgPyAyIDogNDtcbiAgY29uc3QgcmF3U3BhbiA9IGNvbXAubGF5b3V0Py5jb2x1bW5TcGFuID8/IGRlZmF1bHRTcGFuO1xuICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5taW4odG90YWxDb2x1bW5zLCByYXdTcGFuKSk7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIENTUyBgZ3JpZC1jb2x1bW5gIHNwZWNpZmljYXRpb24gc3RyaW5nIGZvciBhIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUdyaWRDb2x1bW4oXG4gIGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24sXG4gIHRvdGFsQ29sdW1uczogbnVtYmVyID0gMTIsXG4gIHNwYW4/OiBudW1iZXJcbik6IHN0cmluZyB7XG4gIGNvbnN0IGVmZmVjdGl2ZVNwYW4gPSBzcGFuID8/IHJlc29sdmVDb21wb25lbnRTcGFuKGNvbXAsIHRvdGFsQ29sdW1ucyk7XG4gIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihlZmZlY3RpdmVTcGFuLCB0b3RhbENvbHVtbnMpKTtcbiAgY29uc3QgY29sID0gY29tcC5sYXlvdXQ/LmNvbHVtbjtcblxuICBpZiAoY29sICYmIGNvbCA+PSAxICYmIGNvbCA8PSB0b3RhbENvbHVtbnMpIHtcbiAgICByZXR1cm4gYCR7Y29sfSAvIHNwYW4gJHtjbGFtcGVkfWA7XG4gIH1cblxuICByZXR1cm4gY29tcC5sYXlvdXQ/Lm5ld1JvdyA/IGAxIC8gc3BhbiAke2NsYW1wZWR9YCA6IGBzcGFuICR7Y2xhbXBlZH1gO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSBDU1MgYGdyaWQtcm93YCBzcGVjaWZpY2F0aW9uIHN0cmluZyBmb3IgYSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVHcmlkUm93KGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24pOiBzdHJpbmcge1xuICBjb25zdCByb3dTcGFuID0gY29tcC5sYXlvdXQ/LnJvd1NwYW47XG4gIGlmIChyb3dTcGFuICYmIHJvd1NwYW4gPiAxKSB7XG4gICAgcmV0dXJuIGBzcGFuICR7cm93U3Bhbn1gO1xuICB9XG4gIHJldHVybiAnYXV0byc7XG59XG5cbi8qKlxuICogT3ZlcmhlYWQgaW4gcGl4ZWxzIGZvciB0aGUgVmlzdWFsIENhbnZhcyBjYXJkIChjYXJkIGhlYWRlciAzMnB4ICsgY2FyZCBib2R5IHZlcnRpY2FsIHBhZGRpbmcgMTZweCkuXG4gKiBBZGRpbmcgdGhpcyBvdmVyaGVhZCB0byB0aGUgY29tcG9uZW50J3MgbG9naWNhbCBoZWlnaHQgZW5zdXJlcyB0aGF0IHRoZSBjYW52YXMgY2FyZCBib2R5XG4gKiByZW5kZXJzIGF0IHRoZSBleGFjdCBzYW1lIHBpeGVsIGRpbWVuc2lvbnMgYXMgdGhlIGxpdmUgcHJldmlldyBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBDQU5WQVNfQ0FSRF9PVkVSSEVBRCA9IDQ4O1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBDU1MgaGVpZ2h0IHByb3BlcnR5IGZvciB0aGUgY2FudmFzIGNvbXBvbmVudCBjYXJkLlxuICogQWNjb3VudHMgZm9yIHRoZSBjYXJkIGhlYWRlciBhbmQgcGFkZGluZyBvdmVyaGVhZCBzbyB0aGUgaW5uZXIgbW9jayBib2R5XG4gKiBhY2N1cmF0ZWx5IG1pcnJvcnMgdGhlIHJ1bnRpbWUgY29tcG9uZW50IGhlaWdodC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDYW52YXNDYXJkSGVpZ2h0KFxuICBjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uLFxuICBvdmVycmlkZUNvbXBvbmVudEhlaWdodD86IG51bWJlciB8IG51bGwsXG4gIG92ZXJoZWFkOiBudW1iZXIgPSBDQU5WQVNfQ0FSRF9PVkVSSEVBRFxuKTogc3RyaW5nIHtcbiAgaWYgKG92ZXJyaWRlQ29tcG9uZW50SGVpZ2h0ICE9PSB1bmRlZmluZWQgJiYgb3ZlcnJpZGVDb21wb25lbnRIZWlnaHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYCR7b3ZlcnJpZGVDb21wb25lbnRIZWlnaHQgKyBvdmVyaGVhZH1weGA7XG4gIH1cbiAgY29uc3QgaCA9IGNvbXAubGF5b3V0Py5oZWlnaHQ7XG4gIGlmICghaCB8fCBoID09PSAnYXV0bycpIHJldHVybiAnYXV0byc7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KGgsIDEwKTtcbiAgcmV0dXJuIGlzTmFOKHBhcnNlZCkgPyBoIDogYCR7cGFyc2VkICsgb3ZlcmhlYWR9cHhgO1xufVxuXG4vKipcbiAqIE5hdHVyYWwgbWluaW11bSBoZWlnaHQgaW4gcGl4ZWxzIHJlcXVpcmVkIGZvciBhIGNvbXBvbmVudCB0eXBlIHRvIHJlbmRlciB3aXRob3V0IGNyYW1waW5nIG9yIG92ZXJmbG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmF0dXJhbE1pbkhlaWdodCh0eXBlOiBzdHJpbmcpOiBudW1iZXIge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdjaGFydCc6XG4gICAgICByZXR1cm4gMjQwO1xuICAgIGNhc2UgJ2twaS1jYXJkJzpcbiAgICAgIHJldHVybiAxMDA7XG4gICAgY2FzZSAndGFibGUnOlxuICAgIGNhc2UgJ2dyaWQnOlxuICAgICAgcmV0dXJuIDIwMDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgQ1NTIG1pbi1oZWlnaHQgcHJvcGVydHkgZm9yIHRoZSBjYW52YXMgY29tcG9uZW50IGNhcmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ2FudmFzQ2FyZE1pbkhlaWdodChcbiAgY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbixcbiAgb3ZlcnJpZGVDb21wb25lbnRIZWlnaHQ/OiBudW1iZXIgfCBudWxsLFxuICBvdmVyaGVhZDogbnVtYmVyID0gQ0FOVkFTX0NBUkRfT1ZFUkhFQURcbik6IHN0cmluZyB7XG4gIGNvbnN0IG5hdHVyYWxNaW4gPSBnZXRDb21wb25lbnROYXR1cmFsTWluSGVpZ2h0KGNvbXAudHlwZSk7XG4gIGlmIChvdmVycmlkZUNvbXBvbmVudEhlaWdodCAhPT0gdW5kZWZpbmVkICYmIG92ZXJyaWRlQ29tcG9uZW50SGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGAke01hdGgubWF4KG5hdHVyYWxNaW4sIG92ZXJyaWRlQ29tcG9uZW50SGVpZ2h0KSArIG92ZXJoZWFkfXB4YDtcbiAgfVxuICBjb25zdCBtaW5IID0gY29tcC5sYXlvdXQ/Lm1pbkhlaWdodDtcbiAgaWYgKCFtaW5IIHx8IG1pbkggPT09ICdhdXRvJykge1xuICAgIHJldHVybiBuYXR1cmFsTWluID4gMCA/IGAke25hdHVyYWxNaW4gKyBvdmVyaGVhZH1weGAgOiAnYXV0byc7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQobWluSCwgMTApO1xuICByZXR1cm4gaXNOYU4ocGFyc2VkKSA/IG1pbkggOiBgJHtNYXRoLm1heChuYXR1cmFsTWluLCBwYXJzZWQpICsgb3ZlcmhlYWR9cHhgO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBDU1MgaGVpZ2h0IHByb3BlcnR5IGZvciBhIHJ1bnRpbWUgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudEhlaWdodChcbiAgY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbixcbiAgb3ZlcnJpZGVIZWlnaHQ/OiBudW1iZXIgfCBudWxsXG4pOiBzdHJpbmcge1xuICBjb25zdCBuYXR1cmFsTWluID0gZ2V0Q29tcG9uZW50TmF0dXJhbE1pbkhlaWdodChjb21wLnR5cGUpO1xuICBpZiAob3ZlcnJpZGVIZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBvdmVycmlkZUhlaWdodCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBgJHtNYXRoLm1heChuYXR1cmFsTWluLCBvdmVycmlkZUhlaWdodCl9cHhgO1xuICB9XG4gIGNvbnN0IGggPSBjb21wLmxheW91dD8uaGVpZ2h0O1xuICBpZiAoIWggfHwgaCA9PT0gJ2F1dG8nKSByZXR1cm4gJ2F1dG8nO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChoLCAxMCk7XG4gIGlmIChpc05hTihwYXJzZWQpKSByZXR1cm4gaDtcbiAgcmV0dXJuIGAke01hdGgubWF4KG5hdHVyYWxNaW4sIHBhcnNlZCl9cHhgO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBDU1MgbWluLWhlaWdodCBwcm9wZXJ0eSBmb3IgYSBydW50aW1lIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDb21wb25lbnRNaW5IZWlnaHQoXG4gIGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24sXG4gIG92ZXJyaWRlSGVpZ2h0PzogbnVtYmVyIHwgbnVsbFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbmF0dXJhbE1pbiA9IGdldENvbXBvbmVudE5hdHVyYWxNaW5IZWlnaHQoY29tcC50eXBlKTtcbiAgaWYgKG92ZXJyaWRlSGVpZ2h0ICE9PSB1bmRlZmluZWQgJiYgb3ZlcnJpZGVIZWlnaHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYCR7TWF0aC5tYXgobmF0dXJhbE1pbiwgb3ZlcnJpZGVIZWlnaHQpfXB4YDtcbiAgfVxuICBjb25zdCBtaW5IID0gY29tcC5sYXlvdXQ/Lm1pbkhlaWdodDtcbiAgaWYgKCFtaW5IIHx8IG1pbkggPT09ICdhdXRvJykge1xuICAgIHJldHVybiBuYXR1cmFsTWluID4gMCA/IGAke25hdHVyYWxNaW59cHhgIDogJ2F1dG8nO1xuICB9XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KG1pbkgsIDEwKTtcbiAgcmV0dXJuIGlzTmFOKHBhcnNlZCkgPyBtaW5IIDogYCR7TWF0aC5tYXgobmF0dXJhbE1pbiwgcGFyc2VkKX1weGA7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlcyBuZXcgc25hcHBlZCBzcGFuIGdpdmVuIGRyYWcgZGVsdGFYLCBjb2x1bW4gd2lkdGgsIGFuZCBncmlkIGdhcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVNuYXBwZWRTcGFuKFxuICBkZWx0YVg6IG51bWJlcixcbiAgc3RhcnRTcGFuOiBudW1iZXIsXG4gIGNvbFdpZHRoOiBudW1iZXIsXG4gIGdhcDogbnVtYmVyLFxuICB0b3RhbENvbHM6IG51bWJlclxuKTogbnVtYmVyIHtcbiAgY29uc3Qgc3RlcCA9IGNvbFdpZHRoICsgZ2FwO1xuICBpZiAoc3RlcCA8PSAwKSByZXR1cm4gc3RhcnRTcGFuO1xuICBjb25zdCBzcGFuRGVsdGEgPSBNYXRoLnJvdW5kKGRlbHRhWCAvIHN0ZXApO1xuICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5taW4odG90YWxDb2xzLCBzdGFydFNwYW4gKyBzcGFuRGVsdGEpKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIG5ldyBoZWlnaHQgZ2l2ZW4gZHJhZyBkZWx0YVkgYW5kIG1pbmltdW0gaGVpZ2h0IGNvbnN0cmFpbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVTbmFwcGVkSGVpZ2h0KFxuICBkZWx0YVk6IG51bWJlcixcbiAgc3RhcnRIZWlnaHQ6IG51bWJlcixcbiAgbWluSGVpZ2h0OiBudW1iZXIgPSA1MFxuKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KG1pbkhlaWdodCwgTWF0aC5yb3VuZChzdGFydEhlaWdodCArIGRlbHRhWSkpO1xufVxuXG4vKipcbiAqIE1hcHMgY29tcG9uZW50IHR5cGUgdG8gc3RhbmRhcmQgaWNvbiBpZGVudGlmaWVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcG9uZW50SWNvbk5hbWUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnaW5wdXQnOiByZXR1cm4gJ3RleHQtZmllbGRzJztcbiAgICBjYXNlICdkcm9wZG93bic6IHJldHVybiAnZHJvcGRvd24nO1xuICAgIGNhc2UgJ2RhdGUnOiByZXR1cm4gJ2NhbGVuZGFyJztcbiAgICBjYXNlICdkYXRlLXJhbmdlJzogcmV0dXJuICdjYWxlbmRhcic7XG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICdudW1iZXInO1xuICAgIGNhc2UgJ2NoZWNrYm94JzogcmV0dXJuICdjaGVja2JveCc7XG4gICAgY2FzZSAnYnV0dG9uJzogcmV0dXJuICdidXR0b24nO1xuICAgIGNhc2UgJ2twaS1jYXJkJzogcmV0dXJuICdrcGknO1xuICAgIGNhc2UgJ2NoYXJ0JzogcmV0dXJuICdjaGFydC1iYXInO1xuICAgIGRlZmF1bHQ6IHJldHVybiAnYm94JztcbiAgfVxufVxuIl19
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLWxheW91dC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZGVzaWduZXIvdXRpbGl0aWVzL2NhbnZhcy1sYXlvdXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7OztHQUlHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxJQUErQixFQUMvQixlQUF1QixFQUFFLEVBQ3pCLFlBQTRCO0lBRTVCLElBQUksWUFBWSxLQUFLLFNBQVMsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDeEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLElBQUksV0FBVyxDQUFDO0lBQ3ZELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLElBQStCLEVBQy9CLGVBQXVCLEVBQUUsRUFDekIsSUFBYTtJQUViLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdB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LENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLElBQVk7SUFDL0MsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNiLEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxhQUFhLENBQUM7UUFDbkMsS0FBSyxVQUFVLENBQUMsQ0FBQyxPQUFPLFVBQVUsQ0FBQztRQUNuQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDO1FBQy9CLEtBQUssWUFBWSxDQUFDLENBQUMsT0FBTyxVQUFVLENBQUM7UUFDckMsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQztRQUMvQixLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sVUFBVSxDQUFDO1FBQ25DLEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxPQUFPLENBQUM7UUFDN0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQztRQUMvQixLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDO1FBQzlCLEtBQUssT0FBTyxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUM7UUFDakMsT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUM7SUFDeEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5cbi8qKlxuICogUHVyZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgZGVzaWduIGNhbnZhcyBsYXlvdXQsIGdyaWQgY2FsY3VsYXRpb25zLCBhbmQgc2l6aW5nLlxuICpcbiAqIEltcGxlbWVudGVkIGFzIGZyYW1ld29yay1pbmRlcGVuZGVudCBwdXJlIGZ1bmN0aW9ucyBwZXIgUnVsZSAxMCAmIDExIChQdXJlIExvZ2ljIEZpcnN0KS5cbiAqL1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBlZmZlY3RpdmUgY29sdW1uIHNwYW4gZm9yIGEgY29tcG9uZW50LlxuICogVXNlcyBsYXlvdXQuY29sdW1uU3BhbiBpZiBzcGVjaWZpZWQsIG90aGVyd2lzZSBkZWZhdWx0cyBiYXNlZCBvbiBjb21wb25lbnQgdHlwZSAoZS5nLiAyIGZvciBidXR0b24sIDQgZm9yIG90aGVycykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50U3BhbihcbiAgY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbixcbiAgdG90YWxDb2x1bW5zOiBudW1iZXIgPSAxMixcbiAgb3ZlcnJpZGVTcGFuPzogbnVtYmVyIHwgbnVsbFxuKTogbnVtYmVyIHtcbiAgaWYgKG92ZXJyaWRlU3BhbiAhPT0gdW5kZWZpbmVkICYmIG92ZXJyaWRlU3BhbiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLm1pbih0b3RhbENvbHVtbnMsIG92ZXJyaWRlU3BhbikpO1xuICB9XG4gIGNvbnN0IGRlZmF1bHRTcGFuID0gY29tcC50eXBlID09PSAnYnV0dG9uJyA/IDIgOiA0O1xuICBjb25zdCByYXdTcGFuID0gY29tcC5sYXlvdXQ/LmNvbHVtblNwYW4gPz8gZGVmYXVsdFNwYW47XG4gIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLm1pbih0b3RhbENvbHVtbnMsIHJhd1NwYW4pKTtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgQ1NTIGBncmlkLWNvbHVtbmAgc3BlY2lmaWNhdGlvbiBzdHJpbmcgZm9yIGEgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlR3JpZENvbHVtbihcbiAgY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbixcbiAgdG90YWxDb2x1bW5zOiBudW1iZXIgPSAxMixcbiAgc3Bhbj86IG51bWJlclxuKTogc3RyaW5nIHtcbiAgY29uc3QgZWZmZWN0aXZlU3BhbiA9IHNwYW4gPz8gcmVzb2x2ZUNvbXBvbmVudFNwYW4oY29tcCwgdG90YWxDb2x1bW5zKTtcbiAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWF4KDEsIE1hdGgubWluKGVmZmVjdGl2ZVNwYW4sIHRvdGFsQ29sdW1ucykpO1xuICBjb25zdCBjb2wgPSBjb21wLmxheW91dD8uY29sdW1uO1xuXG4gIGlmIChjb2wgJiYgY29sID49IDEgJiYgY29sIDw9IHRvdGFsQ29sdW1ucykge1xuICAgIHJldHVybiBgJHtjb2x9IC8gc3BhbiAke2NsYW1wZWR9YDtcbiAgfVxuXG4gIHJldHVybiBjb21wLmxheW91dD8ubmV3Um93ID8gYDEgLyBzcGFuICR7Y2xhbXBlZH1gIDogYHNwYW4gJHtjbGFtcGVkfWA7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIENTUyBgZ3JpZC1yb3dgIHNwZWNpZmljYXRpb24gc3RyaW5nIGZvciBhIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUdyaWRSb3coY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gIGNvbnN0IHJvd1NwYW4gPSBjb21wLmxheW91dD8ucm93U3BhbjtcbiAgaWYgKHJvd1NwYW4gJiYgcm93U3BhbiA+IDEpIHtcbiAgICByZXR1cm4gYHNwYW4gJHtyb3dTcGFufWA7XG4gIH1cbiAgcmV0dXJuICdhdXRvJztcbn1cblxuLyoqXG4gKiBPdmVyaGVhZCBpbiBwaXhlbHMgZm9yIHRoZSBWaXN1YWwgQ2FudmFzIGNhcmQgKGNhcmQgaGVhZGVyIDMycHggKyBjYXJkIGJvZHkgdmVydGljYWwgcGFkZGluZyAxNnB4KS5cbiAqIEFkZGluZyB0aGlzIG92ZXJoZWFkIHRvIHRoZSBjb21wb25lbnQncyBsb2dpY2FsIGhlaWdodCBlbnN1cmVzIHRoYXQgdGhlIGNhbnZhcyBjYXJkIGJvZHlcbiAqIHJlbmRlcnMgYXQgdGhlIGV4YWN0IHNhbWUgcGl4ZWwgZGltZW5zaW9ucyBhcyB0aGUgbGl2ZSBwcmV2aWV3IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IENBTlZBU19DQVJEX09WRVJIRUFEID0gNDg7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIENTUyBoZWlnaHQgcHJvcGVydHkgZm9yIHRoZSBjYW52YXMgY29tcG9uZW50IGNhcmQuXG4gKiBBY2NvdW50cyBmb3IgdGhlIGNhcmQgaGVhZGVyIGFuZCBwYWRkaW5nIG92ZXJoZWFkIHNvIHRoZSBpbm5lciBtb2NrIGJvZHlcbiAqIGFjY3VyYXRlbHkgbWlycm9ycyB0aGUgcnVudGltZSBjb21wb25lbnQgaGVpZ2h0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNhbnZhc0NhcmRIZWlnaHQoXG4gIGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24sXG4gIG92ZXJyaWRlQ29tcG9uZW50SGVpZ2h0PzogbnVtYmVyIHwgbnVsbCxcbiAgb3ZlcmhlYWQ6IG51bWJlciA9IENBTlZBU19DQVJEX09WRVJIRUFEXG4pOiBzdHJpbmcge1xuICBpZiAob3ZlcnJpZGVDb21wb25lbnRIZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBvdmVycmlkZUNvbXBvbmVudEhlaWdodCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBgJHtvdmVycmlkZUNvbXBvbmVudEhlaWdodCArIG92ZXJoZWFkfXB4YDtcbiAgfVxuICBjb25zdCBoID0gY29tcC5sYXlvdXQ/LmhlaWdodDtcbiAgaWYgKCFoIHx8IGggPT09ICdhdXRvJykgcmV0dXJuICdhdXRvJztcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoaCwgMTApO1xuICByZXR1cm4gaXNOYU4ocGFyc2VkKSA/IGggOiBgJHtwYXJzZWQgKyBvdmVyaGVhZH1weGA7XG59XG5cbi8qKlxuICogTmF0dXJhbCBtaW5pbXVtIGhlaWdodCBpbiBwaXhlbHMgcmVxdWlyZWQgZm9yIGEgY29tcG9uZW50IHR5cGUgdG8gcmVuZGVyIHdpdGhvdXQgY3JhbXBpbmcgb3Igb3ZlcmZsb3cuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wb25lbnROYXR1cmFsTWluSGVpZ2h0KHR5cGU6IHN0cmluZyk6IG51bWJlciB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2NoYXJ0JzpcbiAgICAgIHJldHVybiAyNDA7XG4gICAgY2FzZSAna3BpLWNhcmQnOlxuICAgICAgcmV0dXJuIDEwMDtcbiAgICBjYXNlICd0YWJsZSc6XG4gICAgY2FzZSAnZ3JpZCc6XG4gICAgICByZXR1cm4gMjAwO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBDU1MgbWluLWhlaWdodCBwcm9wZXJ0eSBmb3IgdGhlIGNhbnZhcyBjb21wb25lbnQgY2FyZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDYW52YXNDYXJkTWluSGVpZ2h0KFxuICBjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uLFxuICBvdmVycmlkZUNvbXBvbmVudEhlaWdodD86IG51bWJlciB8IG51bGwsXG4gIG92ZXJoZWFkOiBudW1iZXIgPSBDQU5WQVNfQ0FSRF9PVkVSSEVBRFxuKTogc3RyaW5nIHtcbiAgY29uc3QgbmF0dXJhbE1pbiA9IGdldENvbXBvbmVudE5hdHVyYWxNaW5IZWlnaHQoY29tcC50eXBlKTtcbiAgaWYgKG92ZXJyaWRlQ29tcG9uZW50SGVpZ2h0ICE9PSB1bmRlZmluZWQgJiYgb3ZlcnJpZGVDb21wb25lbnRIZWlnaHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gYCR7TWF0aC5tYXgobmF0dXJhbE1pbiwgb3ZlcnJpZGVDb21wb25lbnRIZWlnaHQpICsgb3ZlcmhlYWR9cHhgO1xuICB9XG4gIGNvbnN0IG1pbkggPSBjb21wLmxheW91dD8ubWluSGVpZ2h0O1xuICBpZiAoIW1pbkggfHwgbWluSCA9PT0gJ2F1dG8nKSB7XG4gICAgcmV0dXJuIG5hdHVyYWxNaW4gPiAwID8gYCR7bmF0dXJhbE1pbiArIG92ZXJoZWFkfXB4YCA6ICdhdXRvJztcbiAgfVxuICBjb25zdCBwYXJzZWQgPSBwYXJzZUludChtaW5ILCAxMCk7XG4gIHJldHVybiBpc05hTihwYXJzZWQpID8gbWluSCA6IGAke01hdGgubWF4KG5hdHVyYWxNaW4sIHBhcnNlZCkgKyBvdmVyaGVhZH1weGA7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIENTUyBoZWlnaHQgcHJvcGVydHkgZm9yIGEgcnVudGltZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQ29tcG9uZW50SGVpZ2h0KFxuICBjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uLFxuICBvdmVycmlkZUhlaWdodD86IG51bWJlciB8IG51bGxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG5hdHVyYWxNaW4gPSBnZXRDb21wb25lbnROYXR1cmFsTWluSGVpZ2h0KGNvbXAudHlwZSk7XG4gIGlmIChvdmVycmlkZUhlaWdodCAhPT0gdW5kZWZpbmVkICYmIG92ZXJyaWRlSGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGAke01hdGgubWF4KG5hdHVyYWxNaW4sIG92ZXJyaWRlSGVpZ2h0KX1weGA7XG4gIH1cbiAgY29uc3QgaCA9IGNvbXAubGF5b3V0Py5oZWlnaHQ7XG4gIGlmICghaCB8fCBoID09PSAnYXV0bycpIHJldHVybiAnYXV0byc7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KGgsIDEwKTtcbiAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBoO1xuICByZXR1cm4gYCR7TWF0aC5tYXgobmF0dXJhbE1pbiwgcGFyc2VkKX1weGA7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIENTUyBtaW4taGVpZ2h0IHByb3BlcnR5IGZvciBhIHJ1bnRpbWUgY29tcG9uZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbXBvbmVudE1pbkhlaWdodChcbiAgY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbixcbiAgb3ZlcnJpZGVIZWlnaHQ/OiBudW1iZXIgfCBudWxsXG4pOiBzdHJpbmcge1xuICBjb25zdCBuYXR1cmFsTWluID0gZ2V0Q29tcG9uZW50TmF0dXJhbE1pbkhlaWdodChjb21wLnR5cGUpO1xuICBpZiAob3ZlcnJpZGVIZWlnaHQgIT09IHVuZGVmaW5lZCAmJiBvdmVycmlkZUhlaWdodCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBgJHtNYXRoLm1heChuYXR1cmFsTWluLCBvdmVycmlkZUhlaWdodCl9cHhgO1xuICB9XG4gIGNvbnN0IG1pbkggPSBjb21wLmxheW91dD8ubWluSGVpZ2h0O1xuICBpZiAoIW1pbkggfHwgbWluSCA9PT0gJ2F1dG8nKSB7XG4gICAgcmV0dXJuIG5hdHVyYWxNaW4gPiAwID8gYCR7bmF0dXJhbE1pbn1weGAgOiAnYXV0byc7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQobWluSCwgMTApO1xuICByZXR1cm4gaXNOYU4ocGFyc2VkKSA/IG1pbkggOiBgJHtNYXRoLm1heChuYXR1cmFsTWluLCBwYXJzZWQpfXB4YDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIG5ldyBzbmFwcGVkIHNwYW4gZ2l2ZW4gZHJhZyBkZWx0YVgsIGNvbHVtbiB3aWR0aCwgYW5kIGdyaWQgZ2FwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXRlU25hcHBlZFNwYW4oXG4gIGRlbHRhWDogbnVtYmVyLFxuICBzdGFydFNwYW46IG51bWJlcixcbiAgY29sV2lkdGg6IG51bWJlcixcbiAgZ2FwOiBudW1iZXIsXG4gIHRvdGFsQ29sczogbnVtYmVyXG4pOiBudW1iZXIge1xuICBjb25zdCBzdGVwID0gY29sV2lkdGggKyBnYXA7XG4gIGlmIChzdGVwIDw9IDApIHJldHVybiBzdGFydFNwYW47XG4gIGNvbnN0IHNwYW5EZWx0YSA9IE1hdGgucm91bmQoZGVsdGFYIC8gc3RlcCk7XG4gIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLm1pbih0b3RhbENvbHMsIHN0YXJ0U3BhbiArIHNwYW5EZWx0YSkpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgbmV3IGhlaWdodCBnaXZlbiBkcmFnIGRlbHRhWSBhbmQgbWluaW11bSBoZWlnaHQgY29uc3RyYWludC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVNuYXBwZWRIZWlnaHQoXG4gIGRlbHRhWTogbnVtYmVyLFxuICBzdGFydEhlaWdodDogbnVtYmVyLFxuICBtaW5IZWlnaHQ6IG51bWJlciA9IDUwXG4pOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgobWluSGVpZ2h0LCBNYXRoLnJvdW5kKHN0YXJ0SGVpZ2h0ICsgZGVsdGFZKSk7XG59XG5cbi8qKlxuICogTWFwcyBjb21wb25lbnQgdHlwZSB0byBzdGFuZGFyZCBpY29uIGlkZW50aWZpZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb21wb25lbnRJY29uTmFtZSh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdpbnB1dCc6IHJldHVybiAndGV4dC1maWVsZHMnO1xuICAgIGNhc2UgJ2Ryb3Bkb3duJzogcmV0dXJuICdkcm9wZG93bic7XG4gICAgY2FzZSAnZGF0ZSc6IHJldHVybiAnY2FsZW5kYXInO1xuICAgIGNhc2UgJ2RhdGUtcmFuZ2UnOiByZXR1cm4gJ2NhbGVuZGFyJztcbiAgICBjYXNlICdudW1iZXInOiByZXR1cm4gJ251bWJlcic7XG4gICAgY2FzZSAnY2hlY2tib3gnOiByZXR1cm4gJ2NoZWNrYm94JztcbiAgICBjYXNlICdyYWRpbyc6IHJldHVybiAncmFkaW8nO1xuICAgIGNhc2UgJ2J1dHRvbic6IHJldHVybiAnYnV0dG9uJztcbiAgICBjYXNlICdrcGktY2FyZCc6IHJldHVybiAna3BpJztcbiAgICBjYXNlICdjaGFydCc6IHJldHVybiAnY2hhcnQtYmFyJztcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2JveCc7XG4gIH1cbn1cbiJdfQ==
@@ -140,7 +140,7 @@ export class BwaysReportBuilderComponent {
140
140
  }
141
141
  </div>
142
142
  </div>
143
- `, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif)}.rpt-builder-container{display:flex;flex-direction:column;position:relative;overflow:hidden;background:#f8fafc;box-sizing:border-box}.rpt-builder-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;background:#fff;border-bottom:1px solid #e2e8f0;z-index:10;flex-shrink:0}.rpt-header-left{display:flex;align-items:center;gap:10px}.rpt-header-label{font-size:.8125rem;font-weight:600;color:#475569}.rpt-select-wrapper{position:relative;display:inline-flex;align-items:center}.rpt-report-select{appearance:none;-webkit-appearance:none;padding:5px 28px 5px 12px;font-size:.8125rem;font-weight:500;color:#0f172a;background:#f8fafc;border:1px solid #cbd5e1;border-radius:6px;outline:none;cursor:pointer;min-width:220px;transition:all .15s ease}.rpt-report-select:focus{background:#fff;border-color:#2563eb;box-shadow:0 0 0 2px #2563eb26}.rpt-select-arrow{position:absolute;right:10px;pointer-events:none;color:#64748b}.rpt-btn-new-report{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;background:#eff6ff;border:1px solid #bfdbfe;color:#2563eb;border-radius:6px;font-size:.8125rem;font-weight:600;cursor:pointer;transition:all .15s ease}.rpt-btn-new-report:hover{background:#dbeafe;border-color:#93c5fd}.rpt-header-right{display:flex;align-items:center;gap:12px}.rpt-save-status{display:inline-flex;align-items:center;gap:5px;font-size:.75rem;font-weight:600;color:#16a34a;background:#f0fdf4;padding:3px 8px;border-radius:9999px;border:1px solid #bbf7d0;animation:rpt-status-fade .2s ease}@keyframes rpt-status-fade{0%{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}.rpt-builder-designer-area{flex:1;width:100%;height:100%;overflow:hidden;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DesignerComponent, selector: "rpt-designer", inputs: ["reportId", "initialReport"], outputs: ["save", "definitionChange"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
143
+ `, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif)}.rpt-builder-container{min-height:0;display:flex;flex-direction:column;position:relative;overflow:hidden;background:#f8fafc;box-sizing:border-box}.rpt-builder-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;background:#fff;border-bottom:1px solid #e2e8f0;z-index:10;flex-shrink:0}.rpt-header-left{display:flex;align-items:center;gap:10px}.rpt-header-label{font-size:.8125rem;font-weight:600;color:#475569}.rpt-select-wrapper{position:relative;display:inline-flex;align-items:center}.rpt-report-select{appearance:none;-webkit-appearance:none;padding:5px 28px 5px 12px;font-size:.8125rem;font-weight:500;color:#0f172a;background:#f8fafc;border:1px solid #cbd5e1;border-radius:6px;outline:none;cursor:pointer;min-width:220px;transition:all .15s ease}.rpt-report-select:focus{background:#fff;border-color:#2563eb;box-shadow:0 0 0 2px #2563eb26}.rpt-select-arrow{position:absolute;right:10px;pointer-events:none;color:#64748b}.rpt-btn-new-report{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;background:#eff6ff;border:1px solid #bfdbfe;color:#2563eb;border-radius:6px;font-size:.8125rem;font-weight:600;cursor:pointer;transition:all .15s ease}.rpt-btn-new-report:hover{background:#dbeafe;border-color:#93c5fd}.rpt-header-right{display:flex;align-items:center;gap:12px}.rpt-save-status{display:inline-flex;align-items:center;gap:5px;font-size:.75rem;font-weight:600;color:#16a34a;background:#f0fdf4;padding:3px 8px;border-radius:9999px;border:1px solid #bbf7d0;animation:rpt-status-fade .2s ease}@keyframes rpt-status-fade{0%{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}.rpt-builder-designer-area{flex:1;min-height:0;width:100%;height:100%;overflow:hidden;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DesignerComponent, selector: "rpt-designer", inputs: ["config", "apiUrl", "reportId", "initialReport"], outputs: ["save", "definitionChange"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
144
144
  }
145
145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BwaysReportBuilderComponent, decorators: [{
146
146
  type: Component,
@@ -202,6 +202,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
202
202
  }
203
203
  </div>
204
204
  </div>
205
- `, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif)}.rpt-builder-container{display:flex;flex-direction:column;position:relative;overflow:hidden;background:#f8fafc;box-sizing:border-box}.rpt-builder-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;background:#fff;border-bottom:1px solid #e2e8f0;z-index:10;flex-shrink:0}.rpt-header-left{display:flex;align-items:center;gap:10px}.rpt-header-label{font-size:.8125rem;font-weight:600;color:#475569}.rpt-select-wrapper{position:relative;display:inline-flex;align-items:center}.rpt-report-select{appearance:none;-webkit-appearance:none;padding:5px 28px 5px 12px;font-size:.8125rem;font-weight:500;color:#0f172a;background:#f8fafc;border:1px solid #cbd5e1;border-radius:6px;outline:none;cursor:pointer;min-width:220px;transition:all .15s ease}.rpt-report-select:focus{background:#fff;border-color:#2563eb;box-shadow:0 0 0 2px #2563eb26}.rpt-select-arrow{position:absolute;right:10px;pointer-events:none;color:#64748b}.rpt-btn-new-report{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;background:#eff6ff;border:1px solid #bfdbfe;color:#2563eb;border-radius:6px;font-size:.8125rem;font-weight:600;cursor:pointer;transition:all .15s ease}.rpt-btn-new-report:hover{background:#dbeafe;border-color:#93c5fd}.rpt-header-right{display:flex;align-items:center;gap:12px}.rpt-save-status{display:inline-flex;align-items:center;gap:5px;font-size:.75rem;font-weight:600;color:#16a34a;background:#f0fdf4;padding:3px 8px;border-radius:9999px;border:1px solid #bbf7d0;animation:rpt-status-fade .2s ease}@keyframes rpt-status-fade{0%{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}.rpt-builder-designer-area{flex:1;width:100%;height:100%;overflow:hidden;position:relative}\n"] }]
205
+ `, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif)}.rpt-builder-container{min-height:0;display:flex;flex-direction:column;position:relative;overflow:hidden;background:#f8fafc;box-sizing:border-box}.rpt-builder-header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px;background:#fff;border-bottom:1px solid #e2e8f0;z-index:10;flex-shrink:0}.rpt-header-left{display:flex;align-items:center;gap:10px}.rpt-header-label{font-size:.8125rem;font-weight:600;color:#475569}.rpt-select-wrapper{position:relative;display:inline-flex;align-items:center}.rpt-report-select{appearance:none;-webkit-appearance:none;padding:5px 28px 5px 12px;font-size:.8125rem;font-weight:500;color:#0f172a;background:#f8fafc;border:1px solid #cbd5e1;border-radius:6px;outline:none;cursor:pointer;min-width:220px;transition:all .15s ease}.rpt-report-select:focus{background:#fff;border-color:#2563eb;box-shadow:0 0 0 2px #2563eb26}.rpt-select-arrow{position:absolute;right:10px;pointer-events:none;color:#64748b}.rpt-btn-new-report{display:inline-flex;align-items:center;gap:5px;padding:5px 12px;background:#eff6ff;border:1px solid #bfdbfe;color:#2563eb;border-radius:6px;font-size:.8125rem;font-weight:600;cursor:pointer;transition:all .15s ease}.rpt-btn-new-report:hover{background:#dbeafe;border-color:#93c5fd}.rpt-header-right{display:flex;align-items:center;gap:12px}.rpt-save-status{display:inline-flex;align-items:center;gap:5px;font-size:.75rem;font-weight:600;color:#16a34a;background:#f0fdf4;padding:3px 8px;border-radius:9999px;border:1px solid #bbf7d0;animation:rpt-status-fade .2s ease}@keyframes rpt-status-fade{0%{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}.rpt-builder-designer-area{flex:1;min-height:0;width:100%;height:100%;overflow:hidden;position:relative}\n"] }]
206
206
  }] });
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYndheXMtcmVwb3J0LWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZW1iZWQvYndheXMtcmVwb3J0LWJ1aWxkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQzs7O0FBRXZGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQW1NSCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3JCLEtBQUssR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWpELDBEQUEwRDtJQUNqRCxLQUFLLEdBQUcsS0FBSyxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBRXZDLDJEQUEyRDtJQUNsRCxNQUFNLEdBQUcsS0FBSyxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBRXhDLGlEQUFpRDtJQUN4QyxRQUFRLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUV6RCxvRkFBb0Y7SUFDM0UsY0FBYyxHQUFH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NEZBK0w3RCwyQkFBMkI7a0JBbE12QyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLG1CQUN4RCx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uLCBSZXBvcnRTdW1tYXJ5IH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vcGVyc2lzdGVuY2Uvc2VydmljZXMvcmVwb3J0LXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVzaWduZXJDb21wb25lbnQgfSBmcm9tICcuLi9kZXNpZ25lci9kZXNpZ25lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogYDxid2F5cy1yZXBvcnQtYnVpbGRlcj5gXG4gKlxuICogRHJvcC1pbiwgc2luZ2xlLXRhZyB2aXN1YWwgcmVwb3J0IGRlc2lnbmVyIGNvbXBvbmVudCBmb3IgaG9zdCBhcHBsaWNhdGlvbnMuXG4gKlxuICogV3JhcHMgdGhlIGZ1bGwgdmlzdWFsIGJ1aWxkZXIgd2l0aDpcbiAqIC0gRGlyZWN0IHdpZHRoIGFuZCBoZWlnaHQgaW5wdXRzIChgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiY2FsYygxMDB2aCAtIDY0cHgpXCJgKVxuICogLSBCdWlsdC1pbiByZXBvcnQgc2VsZWN0b3IgZHJvcGRvd24gYW5kIFwiKyBOZXcgUmVwb3J0XCIgYnV0dG9uXG4gKiAtIEF1dG9tYXRpYyBwZXJzaXN0ZW5jZSBhbmQgbWVudSBzeW5jaHJvbml6YXRpb25cbiAqXG4gKiBVc2FnZTpcbiAqIGBgYGh0bWxcbiAqIDwhLS0gRHJvcCBhbnl3aGVyZSBpbiB5b3VyIGFkbWluIG9yIHJlcG9ydCBtYW5hZ2VtZW50IHBhZ2UgLS0+XG4gKiA8YndheXMtcmVwb3J0LWJ1aWxkZXIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiY2FsYygxMDB2aCAtIDY0cHgpXCIgLz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdid2F5cy1yZXBvcnQtYnVpbGRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBEZXNpZ25lckNvbXBvbmVudCwgUnB0SWNvbkNvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicnB0LWJ1aWxkZXItY29udGFpbmVyXCJcbiAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aCgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0KClcIlxuICAgID5cbiAgICAgIEBpZiAoc2hvd1JlcG9ydExpc3QoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWJ1aWxkZXItaGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1oZWFkZXItbGVmdFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtaGVhZGVyLWxhYmVsXCI+UmVwb3J0Ojwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXJlcG9ydC1zZWxlY3RcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImFjdGl2ZVJlcG9ydElkKCkgPz8gJydcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VsZWN0UmVwb3J0KCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIE5ldyBSZXBvcnQgKHVuc2F2ZWQpIC0tPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiByZXBvcnRzTGlzdCgpOyB0cmFjayBpdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJpdGVtLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fSB7eyBpdGVtLmNhdGVnb3J5ID8gJygnICsgaXRlbS5jYXRlZ29yeSArICcpJyA6ICcnIH19XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZXZyb24tZG93blwiIFtzaXplXT1cIjEyXCIgY2xhc3M9XCJycHQtc2VsZWN0LWFycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInJwdC1idG4tbmV3LXJlcG9ydFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVOZXdSZXBvcnQoKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiQ3JlYXRlIGEgbmV3IGJsYW5rIHJlcG9ydFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwicGx1c1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+TmV3PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWhlYWRlci1yaWdodFwiPlxuICAgICAgICAgICAgQGlmIChzYXZlU3RhdHVzKCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtc2F2ZS1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgIHt7IHNhdmVTdGF0dXMoKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwicnB0LWJ1aWxkZXItZGVzaWduZXItYXJlYVwiPlxuICAgICAgICBAaWYgKGRlc2lnbmVyS2V5KCkpIHtcbiAgICAgICAgICA8cnB0LWRlc2lnbmVyXG4gICAgICAgICAgICBbcmVwb3J0SWRdPVwiYWN0aXZlUmVwb3J0SWQoKSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICAgKHNhdmUpPVwib25SZXBvcnRTYXZlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChkZWZpbml0aW9uQ2hhbmdlKT1cImRlZmluaXRpb25DaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgc2Fucy1zZXJpZik7XG4gICAgfVxuXG4gICAgLnJwdC1idWlsZGVyLWNvbnRhaW5lciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG5cbiAgICAucnB0LWJ1aWxkZXItaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgcGFkZGluZzogOHB4IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMmU4ZjA7XG4gICAgICB6LWluZGV4OiAxMDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cblxuICAgIC5ycHQtaGVhZGVyLWxlZnQge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDEwcHg7XG4gICAgfVxuXG4gICAgLnJwdC1oZWFkZXItbGFiZWwge1xuICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICM0NzU1Njk7XG4gICAgfVxuXG4gICAgLnJwdC1zZWxlY3Qtd3JhcHBlciB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgfVxuXG4gICAgLnJwdC1yZXBvcnQtc2VsZWN0IHtcbiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgICBwYWRkaW5nOiA1cHggMjhweCA1cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNjYmQ1ZTE7XG4gICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgbWluLXdpZHRoOiAyMjBweDtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlO1xuICAgIH1cblxuICAgIC5ycHQtcmVwb3J0LXNlbGVjdDpmb2N1cyB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjMjU2M2ViO1xuICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMTUpO1xuICAgIH1cblxuICAgIC5ycHQtc2VsZWN0LWFycm93IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAxMHB4O1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBjb2xvcjogIzY0NzQ4YjtcbiAgICB9XG5cbiAgICAucnB0LWJ0bi1uZXctcmVwb3J0IHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgcGFkZGluZzogNXB4IDEycHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZWZmNmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JmZGJmZTtcbiAgICAgIGNvbG9yOiAjMjU2M2ViO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgfVxuXG4gICAgLnJwdC1idG4tbmV3LXJlcG9ydDpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZGJlYWZlO1xuICAgICAgYm9yZGVyLWNvbG9yOiAjOTNjNWZkO1xuICAgIH1cblxuICAgIC5ycHQtaGVhZGVyLXJpZ2h0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiAxMnB4O1xuICAgIH1cblxuICAgIC5ycHQtc2F2ZS1zdGF0dXMge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA1cHg7XG4gICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICMxNmEzNGE7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjBmZGY0O1xuICAgICAgcGFkZGluZzogM3B4IDhweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OTlweDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiYmY3ZDA7XG4gICAgICBhbmltYXRpb246IHJwdC1zdGF0dXMtZmFkZSAyMDBtcyBlYXNlO1xuICAgIH1cblxuICAgIEBrZXlmcmFtZXMgcnB0LXN0YXR1cy1mYWRlIHtcbiAgICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7IH1cbiAgICAgIHRvIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XG4gICAgfVxuXG4gICAgLnJwdC1idWlsZGVyLWRlc2lnbmVyLWFyZWEge1xuICAgICAgZmxleDogMTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB9XG4gIGBdLFxufSlcbmV4cG9ydCBjbGFzcyBCd2F5c1JlcG9ydEJ1aWxkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlID0gaW5qZWN0KFJlcG9ydFN0b3JlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAvKiogV2lkdGggb2YgdGhlIGJ1aWxkZXIgY29udGFpbmVyLiBEZWZhdWx0cyB0byAnMTAwJScuICovXG4gIHJlYWRvbmx5IHdpZHRoID0gaW5wdXQ8c3RyaW5nPignMTAwJScpO1xuXG4gIC8qKiBIZWlnaHQgb2YgdGhlIGJ1aWxkZXIgY29udGFpbmVyLiBEZWZhdWx0cyB0byAnMTAwJScuICovXG4gIHJlYWRvbmx5IGhlaWdodCA9IGlucHV0PHN0cmluZz4oJzEwMCUnKTtcblxuICAvKiogSW5pdGlhbCByZXBvcnQgSUQgdG8gb3BlbiBpbiB0aGUgZGVzaWduZXIuICovXG4gIHJlYWRvbmx5IHJlcG9ydElkID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgdGhlIHRvcCBzd2l0Y2hlciBiYXIgd2l0aCByZXBvcnQgc2VsZWN0b3IgYW5kIFwiKyBOZXdcIiBidXR0b24uICovXG4gIHJlYWRvbmx5IHNob3dSZXBvcnRMaXN0ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIHJlcG9ydCBkZWZpbml0aW9uIGlzIHNhdmVkLiAqL1xuICByZWFkb25seSBzYXZlZCA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHJlcG9ydCBkZWZpbml0aW9uIGNoYW5nZXMuICovXG4gIHJlYWRvbmx5IGRlZmluaXRpb25DaGFuZ2UgPSBvdXRwdXQ8UmVwb3J0RGVmaW5pdGlvbj4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgcmVwb3J0IGlzIHNlbGVjdGVkIGZyb20gdGhlIGxpc3QuICovXG4gIHJlYWRvbmx5IHJlcG9ydFNlbGVjdCA9IG91dHB1dDxzdHJpbmc+KCk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlUmVwb3J0SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHJlcG9ydHNMaXN0ID0gc2lnbmFsPFJlcG9ydFN1bW1hcnlbXT4oW10pO1xuICByZWFkb25seSBzYXZlU3RhdHVzID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBkZXNpZ25lcktleSA9IHNpZ25hbDxudW1iZXI+KDEpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlcG9ydElkKCkpIHtcbiAgICAgIHRoaXMuYWN0aXZlUmVwb3J0SWQuc2V0KHRoaXMucmVwb3J0SWQoKSEpO1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaFJlcG9ydHMoKTtcbiAgfVxuXG4gIG9uU2VsZWN0UmVwb3J0KGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBpZCA/IGlkIDogbnVsbDtcbiAgICB0aGlzLmFjdGl2ZVJlcG9ydElkLnNldCh0YXJnZXQpO1xuICAgIHRoaXMuZGVzaWduZXJLZXkudXBkYXRlKChrKSA9PiBrICsgMSk7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5yZXBvcnRTZWxlY3QuZW1pdCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZU5ld1JlcG9ydCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVJlcG9ydElkLnNldChudWxsKTtcbiAgICB0aGlzLmRlc2lnbmVyS2V5LnVwZGF0ZSgoaykgPT4gayArIDEpO1xuICB9XG5cbiAgb25SZXBvcnRTYXZlZChkZWY6IFJlcG9ydERlZmluaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVJlcG9ydElkLnNldChkZWYuaWQpO1xuICAgIHRoaXMuc2F2ZVN0YXR1cy5zZXQoYFNhdmVkIFwiJHtkZWYubmFtZX1cImApO1xuICAgIHRoaXMuc2F2ZWQuZW1pdChkZWYpO1xuXG4gICAgLy8gUmVmcmVzaCBzdG9yZSBzdW1tYXJpZXMgc28gbmF2aWdhdGlvbiByZWZsZWN0cyBjaGFuZ2VzIGltbWVkaWF0ZWx5XG4gICAgdGhpcy5yZWZyZXNoUmVwb3J0cygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNhdmVTdGF0dXMuc2V0KG51bGwpO1xuICAgIH0sIDM1MDApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWZyZXNoUmVwb3J0cygpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JlXG4gICAgICAubG9hZFN1bW1hcmllcygpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAobGlzdCkgPT4gdGhpcy5yZXBvcnRzTGlzdC5zZXQobGlzdCksXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLndhcm4oJ1tid2F5cy1yZXBvcnRdIEZhaWxlZCB0byBsb2FkIHJlcG9ydHMgbGlzdDonLCBlcnIpLFxuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYndheXMtcmVwb3J0LWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZW1iZWQvYndheXMtcmVwb3J0LWJ1aWxkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNsRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQzs7O0FBRXZGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQXFNSCxNQUFNLE9BQU8sMkJBQTJCO0lBQ3JCLEtBQUssR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWpELDBEQUEwRDtJQUNqRCxLQUFLLEdBQUcsS0FBSyxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBRXZDLDJEQUEyRDtJQUNsRCxNQUFNLEdBQUcsS0FBSyxDQUFTLE1BQU0sQ0FBQyxDQUFDO0lBRXhDLGlEQUFpRDtJQUN4QyxRQUFRLEdBQUcsS0FBSyxDQUFxQixTQUFTLENBQUMsQ0FBQztJQUV6RCxvRkFBb0Y7SUFDM0UsY0FBYyxHQUFH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NEZBaU03RCwyQkFBMkI7a0JBcE12QyxTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLG1CQUN4RCx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBSZXBvcnREZWZpbml0aW9uLCBSZXBvcnRTdW1tYXJ5IH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWRlZmluaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgUmVwb3J0U3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vcGVyc2lzdGVuY2Uvc2VydmljZXMvcmVwb3J0LXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGVzaWduZXJDb21wb25lbnQgfSBmcm9tICcuLi9kZXNpZ25lci9kZXNpZ25lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5cbi8qKlxuICogYDxid2F5cy1yZXBvcnQtYnVpbGRlcj5gXG4gKlxuICogRHJvcC1pbiwgc2luZ2xlLXRhZyB2aXN1YWwgcmVwb3J0IGRlc2lnbmVyIGNvbXBvbmVudCBmb3IgaG9zdCBhcHBsaWNhdGlvbnMuXG4gKlxuICogV3JhcHMgdGhlIGZ1bGwgdmlzdWFsIGJ1aWxkZXIgd2l0aDpcbiAqIC0gRGlyZWN0IHdpZHRoIGFuZCBoZWlnaHQgaW5wdXRzIChgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiY2FsYygxMDB2aCAtIDY0cHgpXCJgKVxuICogLSBCdWlsdC1pbiByZXBvcnQgc2VsZWN0b3IgZHJvcGRvd24gYW5kIFwiKyBOZXcgUmVwb3J0XCIgYnV0dG9uXG4gKiAtIEF1dG9tYXRpYyBwZXJzaXN0ZW5jZSBhbmQgbWVudSBzeW5jaHJvbml6YXRpb25cbiAqXG4gKiBVc2FnZTpcbiAqIGBgYGh0bWxcbiAqIDwhLS0gRHJvcCBhbnl3aGVyZSBpbiB5b3VyIGFkbWluIG9yIHJlcG9ydCBtYW5hZ2VtZW50IHBhZ2UgLS0+XG4gKiA8YndheXMtcmVwb3J0LWJ1aWxkZXIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiY2FsYygxMDB2aCAtIDY0cHgpXCIgLz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdid2F5cy1yZXBvcnQtYnVpbGRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBEZXNpZ25lckNvbXBvbmVudCwgUnB0SWNvbkNvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicnB0LWJ1aWxkZXItY29udGFpbmVyXCJcbiAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aCgpXCJcbiAgICAgIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0KClcIlxuICAgID5cbiAgICAgIEBpZiAoc2hvd1JlcG9ydExpc3QoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWJ1aWxkZXItaGVhZGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1oZWFkZXItbGVmdFwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtaGVhZGVyLWxhYmVsXCI+UmVwb3J0Ojwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXJlcG9ydC1zZWxlY3RcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImFjdGl2ZVJlcG9ydElkKCkgPz8gJydcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VsZWN0UmVwb3J0KCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPi0tIE5ldyBSZXBvcnQgKHVuc2F2ZWQpIC0tPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiByZXBvcnRzTGlzdCgpOyB0cmFjayBpdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJpdGVtLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fSB7eyBpdGVtLmNhdGVnb3J5ID8gJygnICsgaXRlbS5jYXRlZ29yeSArICcpJyA6ICcnIH19XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZXZyb24tZG93blwiIFtzaXplXT1cIjEyXCIgY2xhc3M9XCJycHQtc2VsZWN0LWFycm93XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cInJwdC1idG4tbmV3LXJlcG9ydFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVOZXdSZXBvcnQoKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiQ3JlYXRlIGEgbmV3IGJsYW5rIHJlcG9ydFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwicGx1c1wiIFtzaXplXT1cIjE0XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+TmV3PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWhlYWRlci1yaWdodFwiPlxuICAgICAgICAgICAgQGlmIChzYXZlU3RhdHVzKCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtc2F2ZS1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTNcIiAvPlxuICAgICAgICAgICAgICAgIHt7IHNhdmVTdGF0dXMoKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwicnB0LWJ1aWxkZXItZGVzaWduZXItYXJlYVwiPlxuICAgICAgICBAaWYgKGRlc2lnbmVyS2V5KCkpIHtcbiAgICAgICAgICA8cnB0LWRlc2lnbmVyXG4gICAgICAgICAgICBbcmVwb3J0SWRdPVwiYWN0aXZlUmVwb3J0SWQoKSA/PyB1bmRlZmluZWRcIlxuICAgICAgICAgICAgKHNhdmUpPVwib25SZXBvcnRTYXZlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChkZWZpbml0aW9uQ2hhbmdlKT1cImRlZmluaXRpb25DaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgc2Fucy1zZXJpZik7XG4gICAgfVxuXG4gICAgLnJwdC1idWlsZGVyLWNvbnRhaW5lciB7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuXG4gICAgLnJwdC1idWlsZGVyLWhlYWRlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIHBhZGRpbmc6IDhweCAxNnB4O1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgICAgei1pbmRleDogMTA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG5cbiAgICAucnB0LWhlYWRlci1sZWZ0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiAxMHB4O1xuICAgIH1cblxuICAgIC5ycHQtaGVhZGVyLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjNDc1NTY5O1xuICAgIH1cblxuICAgIC5ycHQtc2VsZWN0LXdyYXBwZXIge1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIH1cblxuICAgIC5ycHQtcmVwb3J0LXNlbGVjdCB7XG4gICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgcGFkZGluZzogNXB4IDI4cHggNXB4IDEycHg7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogIzBmMTcyYTtcbiAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2JkNWUxO1xuICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIG1pbi13aWR0aDogMjIwcHg7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICB9XG5cbiAgICAucnB0LXJlcG9ydC1zZWxlY3Q6Zm9jdXMge1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIGJvcmRlci1jb2xvcjogIzI1NjNlYjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjE1KTtcbiAgICB9XG5cbiAgICAucnB0LXNlbGVjdC1hcnJvdyB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICByaWdodDogMTBweDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgfVxuXG4gICAgLnJwdC1idG4tbmV3LXJlcG9ydCB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDVweDtcbiAgICAgIHBhZGRpbmc6IDVweCAxMnB4O1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNiZmRiZmU7XG4gICAgICBjb2xvcjogIzI1NjNlYjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlO1xuICAgIH1cblxuICAgIC5ycHQtYnRuLW5ldy1yZXBvcnQ6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogI2RiZWFmZTtcbiAgICAgIGJvcmRlci1jb2xvcjogIzkzYzVmZDtcbiAgICB9XG5cbiAgICAucnB0LWhlYWRlci1yaWdodCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogMTJweDtcbiAgICB9XG5cbiAgICAucnB0LXNhdmUtc3RhdHVzIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNXB4O1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjMTZhMzRhO1xuICAgICAgYmFja2dyb3VuZDogI2YwZmRmNDtcbiAgICAgIHBhZGRpbmc6IDNweCA4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA5OTk5cHg7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjYmJmN2QwO1xuICAgICAgYW5pbWF0aW9uOiBycHQtc3RhdHVzLWZhZGUgMjAwbXMgZWFzZTtcbiAgICB9XG5cbiAgICBAa2V5ZnJhbWVzIHJwdC1zdGF0dXMtZmFkZSB7XG4gICAgICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOyB9XG4gICAgICB0byB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuICAgIH1cblxuICAgIC5ycHQtYnVpbGRlci1kZXNpZ25lci1hcmVhIHtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cbiAgYF0sXG59KVxuZXhwb3J0IGNsYXNzIEJ3YXlzUmVwb3J0QnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoUmVwb3J0U3RvcmVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIC8qKiBXaWR0aCBvZiB0aGUgYnVpbGRlciBjb250YWluZXIuIERlZmF1bHRzIHRvICcxMDAlJy4gKi9cbiAgcmVhZG9ubHkgd2lkdGggPSBpbnB1dDxzdHJpbmc+KCcxMDAlJyk7XG5cbiAgLyoqIEhlaWdodCBvZiB0aGUgYnVpbGRlciBjb250YWluZXIuIERlZmF1bHRzIHRvICcxMDAlJy4gKi9cbiAgcmVhZG9ubHkgaGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMTAwJScpO1xuXG4gIC8qKiBJbml0aWFsIHJlcG9ydCBJRCB0byBvcGVuIGluIHRoZSBkZXNpZ25lci4gKi9cbiAgcmVhZG9ubHkgcmVwb3J0SWQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgdG9wIHN3aXRjaGVyIGJhciB3aXRoIHJlcG9ydCBzZWxlY3RvciBhbmQgXCIrIE5ld1wiIGJ1dHRvbi4gKi9cbiAgcmVhZG9ubHkgc2hvd1JlcG9ydExpc3QgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgcmVwb3J0IGRlZmluaXRpb24gaXMgc2F2ZWQuICovXG4gIHJlYWRvbmx5IHNhdmVkID0gb3V0cHV0PFJlcG9ydERlZmluaXRpb24+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgcmVwb3J0IGRlZmluaXRpb24gY2hhbmdlcy4gKi9cbiAgcmVhZG9ubHkgZGVmaW5pdGlvbkNoYW5nZSA9IG91dHB1dDxSZXBvcnREZWZpbml0aW9uPigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSByZXBvcnQgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgbGlzdC4gKi9cbiAgcmVhZG9ubHkgcmVwb3J0U2VsZWN0ID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICByZWFkb25seSBhY3RpdmVSZXBvcnRJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgcmVwb3J0c0xpc3QgPSBzaWduYWw8UmVwb3J0U3VtbWFyeVtdPihbXSk7XG4gIHJlYWRvbmx5IHNhdmVTdGF0dXMgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGRlc2lnbmVyS2V5ID0gc2lnbmFsPG51bWJlcj4oMSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVwb3J0SWQoKSkge1xuICAgICAgdGhpcy5hY3RpdmVSZXBvcnRJZC5zZXQodGhpcy5yZXBvcnRJZCgpISk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoUmVwb3J0cygpO1xuICB9XG5cbiAgb25TZWxlY3RSZXBvcnQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGlkID8gaWQgOiBudWxsO1xuICAgIHRoaXMuYWN0aXZlUmVwb3J0SWQuc2V0KHRhcmdldCk7XG4gICAgdGhpcy5kZXNpZ25lcktleS51cGRhdGUoKGspID0+IGsgKyAxKTtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICB0aGlzLnJlcG9ydFNlbGVjdC5lbWl0KHRhcmdldCk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlTmV3UmVwb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlUmVwb3J0SWQuc2V0KG51bGwpO1xuICAgIHRoaXMuZGVzaWduZXJLZXkudXBkYXRlKChrKSA9PiBrICsgMSk7XG4gIH1cblxuICBvblJlcG9ydFNhdmVkKGRlZjogUmVwb3J0RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlUmVwb3J0SWQuc2V0KGRlZi5pZCk7XG4gICAgdGhpcy5zYXZlU3RhdHVzLnNldChgU2F2ZWQgXCIke2RlZi5uYW1lfVwiYCk7XG4gICAgdGhpcy5zYXZlZC5lbWl0KGRlZik7XG5cbiAgICAvLyBSZWZyZXNoIHN0b3JlIHN1bW1hcmllcyBzbyBuYXZpZ2F0aW9uIHJlZmxlY3RzIGNoYW5nZXMgaW1tZWRpYXRlbHlcbiAgICB0aGlzLnJlZnJlc2hSZXBvcnRzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2F2ZVN0YXR1cy5zZXQobnVsbCk7XG4gICAgfSwgMzUwMCk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hSZXBvcnRzKCk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmVcbiAgICAgIC5sb2FkU3VtbWFyaWVzKClcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChsaXN0KSA9PiB0aGlzLnJlcG9ydHNMaXN0LnNldChsaXN0KSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUud2FybignW2J3YXlzLXJlcG9ydF0gRmFpbGVkIHRvIGxvYWQgcmVwb3J0cyBsaXN0OicsIGVyciksXG4gICAgICB9KTtcbiAgfVxufVxuIl19
@@ -10,6 +10,10 @@ export function sanitizeCsvCell(value, delimiter = ',') {
10
10
  return '';
11
11
  }
12
12
  let str = String(value);
13
+ // Neutralize formulas in untrusted text while preserving numeric cell values.
14
+ if (typeof value === 'string' && /^[\s\u0000-\u001f]*[=+@-]/.test(str)) {
15
+ str = "'" + str;
16
+ }
13
17
  // If value contains delimiter, quote, or newline, escape and wrap in quotes
14
18
  const mustQuote = str.includes(delimiter) ||
15
19
  str.includes('"') ||
@@ -43,12 +47,13 @@ export function formatFilterSummary(summary) {
43
47
  */
44
48
  export function generateCsvContent(rows, columns, delimiter = ',', includeHeader = true, addBom = true, brandedHeader) {
45
49
  const lines = [];
50
+ const addMetadata = (line) => lines.push(sanitizeCsvCell(line, delimiter));
46
51
  if (brandedHeader) {
47
52
  if (brandedHeader.companyName || brandedHeader.branchName) {
48
- lines.push(`# Company: ${brandedHeader.companyName ?? ''}${brandedHeader.branchName ? ` | Branch: ${brandedHeader.branchName}` : ''}`);
53
+ addMetadata(`# Company: ${brandedHeader.companyName ?? ''}${brandedHeader.branchName ? ` | Branch: ${brandedHeader.branchName}` : ''}`);
49
54
  }
50
55
  if (brandedHeader.reportTitle) {
51
- lines.push(`# Report: ${brandedHeader.reportTitle}`);
56
+ addMetadata(`# Report: ${brandedHeader.reportTitle}`);
52
57
  }
53
58
  const genInfo = [];
54
59
  if (brandedHeader.generatedAt) {
@@ -61,13 +66,13 @@ export function generateCsvContent(rows, columns, delimiter = ',', includeHeader
61
66
  genInfo.push(`User: ${brandedHeader.generatedBy}`);
62
67
  }
63
68
  if (genInfo.length > 0) {
64
- lines.push(`# ${genInfo.join(' | ')}`);
69
+ addMetadata(`# ${genInfo.join(' | ')}`);
65
70
  }
66
71
  const filterText = formatFilterSummary(brandedHeader.activeFilterSummary);
67
72
  if (filterText) {
68
- lines.push(`# Active Filters: ${filterText}`);
73
+ addMetadata(`# Active Filters: ${filterText}`);
69
74
  }
70
- lines.push('# ' + '-'.repeat(40));
75
+ addMetadata('# ' + '-'.repeat(40));
71
76
  }
72
77
  if (includeHeader) {
73
78
  const headerLine = columns
@@ -519,4 +524,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
519
524
  providedIn: 'root',
520
525
  }]
521
526
  }] });
522
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZXhwb3J0L3NlcnZpY2VzL3JlcG9ydC1leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFTM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7O0FBRXBHOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFjLEVBQUUsWUFBb0IsR0FBRztJQUNyRSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV4Qiw0RUFBNEU7SUFDNUUsTUFBTSxTQUFTLEdBQ2IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDdkIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDakIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVyQixJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2QsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDNUMsQ0FBQztJQUVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQTBDO0lB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Ozs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBCcmFuZGVkSGVhZGVyT3B0aW9ucyxcbiAgQ3N2RXhwb3J0T3B0aW9ucyxcbiAgRXhjZWxFeHBvcnRPcHRpb25zLFxuICBFeHBvcnRDb2x1bW4sXG4gIEh0bWxFeHBvcnRPcHRpb25zLFxuICBKc29uRXhwb3J0T3B0aW9ucyxcbn0gZnJvbSAnLi4vbW9kZWxzL2V4cG9ydC5tb2RlbHMnO1xuaW1wb3J0IHsgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UnO1xuXG4vKipcbiAqIFNhbml0aXplcyBhbmQgZXNjYXBlcyBhIHNpbmdsZSBjZWxsIHZhbHVlIGZvciBDU1Ygb3V0cHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVDc3ZDZWxsKHZhbHVlOiB1bmtub3duLCBkZWxpbWl0ZXI6IHN0cmluZyA9ICcsJyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgbGV0IHN0ciA9IFN0cmluZyh2YWx1ZSk7XG5cbiAgLy8gSWYgdmFsdWUgY29udGFpbnMgZGVsaW1pdGVyLCBxdW90ZSwgb3IgbmV3bGluZSwgZXNjYXBlIGFuZCB3cmFwIGluIHF1b3Rlc1xuICBjb25zdCBtdXN0UXVvdGUgPVxuICAgIHN0ci5pbmNsdWRlcyhkZWxpbWl0ZXIpIHx8XG4gICAgc3RyLmluY2x1ZGVzKCdcIicpIHx8XG4gICAgc3RyLmluY2x1ZGVzKCdcXG4nKSB8fFxuICAgIHN0ci5pbmNsdWRlcygnXFxyJyk7XG5cbiAgaWYgKG11c3RRdW90ZSkge1xuICAgIHN0ciA9ICdcIicgKyBzdHIucmVwbGFjZSgvXCIvZywgJ1wiXCInKSArICdcIic7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYSByZWNvcmQgb3Igc3RyaW5nIG9mIGFjdGl2ZSBmaWx0ZXIgY3JpdGVyaWEgaW50byBhIGNsZWFuIHRleHQgbGluZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbHRlclN1bW1hcnkoc3VtbWFyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFzdW1tYXJ5KSByZXR1cm4gJyc7XG4gIGlmICh0eXBlb2Ygc3VtbWFyeSA9PT0gJ3N0cmluZycpIHJldHVybiBzdW1tYXJ5O1xuXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhzdW1tYXJ5KVxuICAgIC5maWx0ZXIoKFtfLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwgJiYgdiAhPT0gJycpXG4gICAgLm1hcCgoW2ssIHZdKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgJ2Zyb20nIGluIHYgJiYgJ3RvJyBpbiB2KSB7XG4gICAgICAgIHJldHVybiBgJHtrfTogJHsodiBhcyBhbnkpLmZyb219IHRvICR7KHYgYXMgYW55KS50b31gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke2t9OiAke3Z9YDtcbiAgICB9KVxuICAgIC5qb2luKCcgfCAnKTtcbn1cblxuLyoqXG4gKiBQdXJlIGdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgQ1NWIGNvbnRlbnQgc3RyaW5nIGZyb20gcm93IGRhdGEgYW5kIGNvbHVtbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNzdkNvbnRlbnQoXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gIGNvbHVtbnM6IEV4cG9ydENvbHVtbltdLFxuICBkZWxpbWl0ZXI6IHN0cmluZyA9ICcsJyxcbiAgaW5jbHVkZUhlYWRlcjogYm9vbGVhbiA9IHRydWUsXG4gIGFkZEJvbTogYm9vbGVhbiA9IHRydWUsXG4gIGJyYW5kZWRIZWFkZXI/OiBCcmFuZGVkSGVhZGVyT3B0aW9uc1xuKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGJyYW5kZWRIZWFkZXIpIHtcbiAgICBpZiAoYnJhbmRlZEhlYWRlci5jb21wYW55TmFtZSB8fCBicmFuZGVkSGVhZGVyLmJyYW5jaE5hbWUpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgIGAjIENvbXBhbnk6ICR7YnJhbmRlZEhlYWRlci5jb21wYW55TmFtZSA/PyAnJ30ke1xuICAgICAgICAgIGJyYW5kZWRIZWFkZXIuYnJhbmNoTmFtZSA/IGAgfCBCcmFuY2g6ICR7YnJhbmRlZEhlYWRlci5icmFuY2hOYW1lfWAgOiAnJ1xuICAgICAgICB9YFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGJyYW5kZWRIZWFkZXIucmVwb3J0VGl0bGUpIHtcbiAgICAgIGxpbmVzLnB1c2goYCMgUmVwb3J0OiAke2JyYW5kZWRIZWFkZXIucmVwb3J0VGl0bGV9YCk7XG4gICAgfVxuICAgIGNvbnN0IGdlbkluZm86IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGJyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQXQpIHtcbiAgICAgIGNvbnN0IGR0ID1cbiAgICAgICAgYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRBdCBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICA/IGJyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQXQudG9JU09TdHJpbmcoKS5yZXBsYWNlKCdUJywgJyAnKS5zbGljZSgwLCAxOSlcbiAgICAgICAgICA6IFN0cmluZyhicmFuZGVkSGVhZGVyLmdlbmVyYXRlZEF0KTtcbiAgICAgIGdlbkluZm8ucHVzaChgR2VuZXJhdGVkOiAke2R0fWApO1xuICAgIH1cbiAgICBpZiAoYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRCeSkge1xuICAgICAgZ2VuSW5mby5wdXNoKGBVc2VyOiAke2JyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQnl9YCk7XG4gICAgfVxuICAgIGlmIChnZW5JbmZvLmxlbmd0aCA+IDApIHtcbiAgICAgIGxpbmVzLnB1c2goYCMgJHtnZW5JbmZvLmpvaW4oJyB8ICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJUZXh0ID0gZm9ybWF0RmlsdGVyU3VtbWFyeShicmFuZGVkSGVhZGVyLmFjdGl2ZUZpbHRlclN1bW1hcnkpO1xuICAgIGlmIChmaWx0ZXJUZXh0KSB7XG4gICAgICBsaW5lcy5wdXNoKGAjIEFjdGl2ZSBGaWx0ZXJzOiAke2ZpbHRlclRleHR9YCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJyMgJyArICctJy5yZXBlYXQoNDApKTtcbiAgfVxuXG4gIGlmIChpbmNsdWRlSGVhZGVyKSB7XG4gICAgY29uc3QgaGVhZGVyTGluZSA9IGNvbHVtbnNcbiAgICAgIC5tYXAoKGNvbCkgPT4gc2FuaXRpemVDc3ZDZWxsKGNvbC5oZWFkZXIsIGRlbGltaXRlcikpXG4gICAgICAuam9pbihkZWxpbWl0ZXIpO1xuICAgIGxpbmVzLnB1c2goaGVhZGVyTGluZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgY29uc3Qgcm93VmFsdWVzID0gY29sdW1ucy5tYXAoKGNvbCkgPT4ge1xuICAgICAgY29uc3QgdmFsID0gcm93W2NvbC5maWVsZF07XG4gICAgICBjb25zdCBmb3JtYXR0ZWQgPSBjb2wuZm9ybWF0dGVyID8gY29sLmZvcm1hdHRlcih2YWwsIHJvdykgOiB2YWw7XG4gICAgICByZXR1cm4gc2FuaXRpemVDc3ZDZWxsKGZvcm1hdHRlZCwgZGVsaW1pdGVyKTtcbiAgICB9KTtcbiAgICBsaW5lcy5wdXNoKHJvd1ZhbHVlcy5qb2luKGRlbGltaXRlcikpO1xuICB9XG5cbiAgY29uc3QgY3N2Qm9keSA9IGxpbmVzLmpvaW4oJ1xcclxcbicpO1xuICByZXR1cm4gYWRkQm9tID8gJ1xcdUZFRkYnICsgY3N2Qm9keSA6IGNzdkJvZHk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIEV4Y2VsLWNvbXBhdGlibGUgWE1MIFNwcmVhZHNoZWV0IChTcHJlYWRzaGVldE1MKSBkb2N1bWVudCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUV4Y2VsWG1sKFxuICByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLFxuICBjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSxcbiAgc2hlZXROYW1lOiBzdHJpbmcgPSAnUmVwb3J0IERhdGEnLFxuICBicmFuZGVkSGVhZGVyPzogQnJhbmRlZEhlYWRlck9wdGlvbnNcbik6IHN0cmluZyB7XG4gIGNvbnN0IGVzY2FwZVhtbCA9ICh2YWw6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICByZXR1cm4gU3RyaW5nKHZhbClcbiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpXG4gICAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgICAucmVwbGFjZSgvJy9nLCAnJmFwb3M7Jyk7XG4gIH07XG5cbiAgY29uc3QgeG1sUm93czogc3RyaW5nW10gPSBbXTtcblxuICBpZiAoYnJhbmRlZEhlYWRlcikge1xuICAgIGlmIChicmFuZGVkSGVhZGVyLmNvbXBhbnlOYW1lIHx8IGJyYW5kZWRIZWFkZXIucmVwb3J0VGl0bGUpIHtcbiAgICAgIGNvbnN0IHRpdGxlID0gW2JyYW5kZWRIZWFkZXIuY29tcGFueU5hbWUsIGJyYW5kZWRIZWFkZXIucmVwb3J0VGl0bGVdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAtICcpO1xuICAgICAgeG1sUm93cy5wdXNoKGBcbiAgICAgIDxSb3cgc3M6SGVpZ2h0PVwiMjRcIj5cbiAgICAgICAgPENlbGwgc3M6U3R5bGVJRD1cIlRpdGxlU3R5bGVcIiBzczpNZXJnZUFjcm9zcz1cIiR7TWF0aC5tYXgoMCwgY29sdW1ucy5sZW5ndGggLSAxKX1cIj5cbiAgICAgICAgICA8RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+JHtlc2NhcGVYbWwodGl0bGUpfTwvRGF0YT5cbiAgICAgICAgPC9DZWxsPlxuICAgICAgPC9Sb3c+YCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0YVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChicmFuZGVkSGVhZGVyLmJyYW5jaE5hbWUpIG1ldGFQYXJ0cy5wdXNoKGBCcmFuY2g6ICR7YnJhbmRlZEhlYWRlci5icmFuY2hOYW1lfWApO1xuICAgIGlmIChicmFuZGVkSGVhZGVyLmdlbmVyYXRlZEF0KSB7XG4gICAgICBjb25zdCBkdCA9XG4gICAgICAgIGJyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQXQgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgPyBicmFuZGVkSGVhZGVyLmdlbmVyYXRlZEF0LnRvSVNPU3RyaW5nKCkucmVwbGFjZSgnVCcsICcgJykuc2xpY2UoMCwgMTkpXG4gICAgICAgICAgOiBTdHJpbmcoYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRBdCk7XG4gICAgICBtZXRhUGFydHMucHVzaChgRGF0ZTogJHtkdH1gKTtcbiAgICB9XG4gICAgaWYgKGJyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQnkpIG1ldGFQYXJ0cy5wdXNoKGBVc2VyOiAke2JyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQnl9YCk7XG5cbiAgICBpZiAobWV0YVBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHhtbFJvd3MucHVzaChgXG4gICAgICA8Um93IHNzOkhlaWdodD1cIjE2XCI+XG4gICAgICAgIDxDZWxsIHNzOlN0eWxlSUQ9XCJTdWJUaXRsZVN0eWxlXCIgc3M6TWVyZ2VBY3Jvc3M9XCIke01hdGgubWF4KDAsIGNvbHVtbnMubGVuZ3RoIC0gMSl9XCI+XG4gICAgICAgICAgPERhdGEgc3M6VHlwZT1cIlN0cmluZ1wiPiR7ZXNjYXBlWG1sKG1ldGFQYXJ0cy5qb2luKCcgfCAnKSl9PC9EYXRhPlxuICAgICAgICA8L0NlbGw+XG4gICAgICA8L1Jvdz5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWx0ZXJUZXh0ID0gZm9ybWF0RmlsdGVyU3VtbWFyeShicmFuZGVkSGVhZGVyLmFjdGl2ZUZpbHRlclN1bW1hcnkpO1xuICAgIGlmIChmaWx0ZXJUZXh0KSB7XG4gICAgICB4bWxSb3dzLnB1c2goYFxuICAgICAgPFJvdyBzczpIZWlnaHQ9XCIxNlwiPlxuICAgICAgICA8Q2VsbCBzczpTdHlsZUlEPVwiRmlsdGVyU3R5bGVcIiBzczpNZXJnZUFjcm9zcz1cIiR7TWF0aC5tYXgoMCwgY29sdW1ucy5sZW5ndGggLSAxKX1cIj5cbiAgICAgICAgICA8RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+JHtlc2NhcGVYbWwoYEZpbHRlcnM6ICR7ZmlsdGVyVGV4dH1gKX08L0RhdGE+XG4gICAgICAgIDwvQ2VsbD5cbiAgICAgIDwvUm93PmApO1xuICAgIH1cblxuICAgIC8vIEJsYW5rIHJvdyBzZXBhcmF0b3JcbiAgICB4bWxSb3dzLnB1c2goJzxSb3cgc3M6SGVpZ2h0PVwiOFwiIC8+Jyk7XG4gIH1cblxuICAvLyBDb2x1bW4gSGVhZGVyc1xuICBjb25zdCBoZWFkZXJDZWxscyA9IGNvbHVtbnNcbiAgICAubWFwKFxuICAgICAgKGNvbCkgPT4gYFxuICAgICAgICA8Q2VsbCBzczpTdHlsZUlEPVwiSGVhZGVyU3R5bGVcIj48RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+JHtlc2NhcGVYbWwoY29sLmhlYWRlcil9PC9EYXRhPjwvQ2VsbD5gXG4gICAgKVxuICAgIC5qb2luKCcnKTtcbiAgeG1sUm93cy5wdXNoKGA8Um93IHNzOkhlaWdodD1cIjIwXCI+JHtoZWFkZXJDZWxsc31cXG4gICAgICA8L1Jvdz5gKTtcblxuICAvLyBEYXRhIHJvd3NcbiAgcm93cy5mb3JFYWNoKChyb3csIGlkeCkgPT4ge1xuICAgIGNvbnN0IGlzRXZlbiA9IGlkeCAlIDIgPT09IDA7XG4gICAgY29uc3Qgc3R5bGVJZCA9IGlzRXZlbiA/ICdEYXRhUm93RXZlbicgOiAnRGF0YVJvd09kZCc7XG4gICAgY29uc3QgY2VsbHMgPSBjb2x1bW5zXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gcm93W2NvbC5maWVsZF07XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGNvbC5mb3JtYXR0ZXIgPyBjb2wuZm9ybWF0dGVyKHZhbCwgcm93KSA6IHZhbDtcbiAgICAgICAgY29uc3QgaXNOdW0gPSB0eXBlb2YgZm9ybWF0dGVkID09PSAnbnVtYmVyJyAmJiAhaXNOYU4oZm9ybWF0dGVkKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGlzTnVtID8gJ051bWJlcicgOiAnU3RyaW5nJztcbiAgICAgICAgcmV0dXJuIGA8Q2VsbCBzczpTdHlsZUlEPVwiJHtzdHlsZUlkfVwiPjxEYXRhIHNzOlR5cGU9XCIke3R5cGV9XCI+JHtlc2NhcGVYbWwoZm9ybWF0dGVkKX08L0RhdGE+PC9DZWxsPmA7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJycpO1xuICAgIHhtbFJvd3MucHVzaChgICAgICAgPFJvdyBzczpIZWlnaHQ9XCIxN1wiPiR7Y2VsbHN9PC9Sb3c+YCk7XG4gIH0pO1xuXG4gIHJldHVybiBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG48P21zby1hcHBsaWNhdGlvbiBwcm9naWQ9XCJFeGNlbC5TaGVldFwiPz5cbjxXb3JrYm9vayB4bWxucz1cInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNwcmVhZHNoZWV0XCJcbiB4bWxuczpvPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlXCJcbiB4bWxuczp4PVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWxcIlxuIHhtbG5zOnNzPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c3ByZWFkc2hlZXRcIj5cbiA8U3R5bGVzPlxuICA8U3R5bGUgc3M6SUQ9XCJEZWZhdWx0XCIgc3M6TmFtZT1cIk5vcm1hbFwiPlxuICAgPEFsaWdubWVudCBzczpWZXJ0aWNhbD1cIkNlbnRlclwiLz5cbiAgIDxGb250IHNzOkZvbnROYW1lPVwiU2Vnb2UgVUlcIiBzczpTaXplPVwiMTBcIiBzczpDb2xvcj1cIiMwRjE3MkFcIi8+XG4gIDwvU3R5bGU+XG4gIDxTdHlsZSBzczpJRD1cIlRpdGxlU3R5bGVcIj5cbiAgIDxBbGlnbm1lbnQgc3M6SG9yaXpvbnRhbD1cIkxlZnRcIiBzczpWZXJ0aWNhbD1cIkNlbnRlclwiLz5cbiAgIDxGb250IHNzOkZvbnROYW1lPVwiU2Vnb2UgVUlcIiBzczpTaXplPVwiMTRcIiBzczpCb2xkPVwiMVwiIHNzOkNvbG9yPVwiIzFFMjkzQlwiLz5cbiAgPC9TdHlsZT5cbiAgPFN0eWxlIHNzOklEPVwiU3ViVGl0bGVTdHlsZVwiPlxuICAgPEFsaWdubWVudCBzczpIb3Jpem9udGFsPVwiTGVmdFwiIHNzOlZlcnRpY2FsPVwiQ2VudGVyXCIvPlxuICAgPEZvbnQgc3M6Rm9udE5hbWU9XCJTZWdvZSBVSVwiIHNzOlNpemU9XCI5XCIgc3M6SXRhbGljPVwiMVwiIHNzOkNvbG9yPVwiIzY0NzQ4QlwiLz5cbiAgPC9TdHlsZT5cbiAgPFN0eWxlIHNzOklEPVwiRmlsdGVyU3R5bGVcIj5cbiAgIDxBbGlnbm1lbnQgc3M6SG9yaXpvbnRhbD1cIkxlZnRcIiBzczpWZXJ0aWNhbD1cIkNlbnRlclwiLz5cbiAgIDxGb250IHNzOkZvbnROYW1lPVwiU2Vnb2UgVUlcIiBzczpTaXplPVwiOVwiIHNzOkJvbGQ9XCIxXCIgc3M6Q29sb3I9XCIjMjU2M0VCXCIvPlxuICAgPEludGVyaW9yIHNzOkNvbG9yPVwiI0VGRjZGRlwiIHNzOlBhdHRlcm49XCJTb2xpZFwiLz5cbiAgPC9TdHlsZT5cbiAgPFN0eWxlIHNzOklEPVwiSGVhZGVyU3R5bGVcIj5cbiAgIDxBbGlnbm1lbnQgc3M6SG9yaXpvbnRhbD1cIkxlZnRcIiBzczpWZXJ0aWNhbD1cIkNlbnRlclwiLz5cbiAgIDxCb3JkZXJzPlxuICAgIDxCb3JkZXIgc3M6UG9zaXRpb249XCJCb3R0b21cIiBzczpMaW5lU3R5bGU9XCJDb250aW51b3VzXCIgc3M6V2VpZ2h0PVwiMVwiIHNzOkNvbG9yPVwiI0NCRDVFMVwiLz5cbiAgIDwvQm9yZGVycz5cbiAgIDxGb250IHNzOkZvbnROYW1lPVwiU2Vnb2UgVUlcIiBzczpTaXplPVwiMTBcIiBzczpCb2xkPVwiMVwiIHNzOkNvbG9yPVwiI0ZGRkZGRlwiLz5cbiAgIDxJbnRlcmlvciBzczpDb2xvcj1cIiMyNTYzRUJcIiBzczpQYXR0ZXJuPVwiU29saWRcIi8+XG4gIDwvU3R5bGU+XG4gIDxTdHlsZSBzczpJRD1cIkRhdGFSb3dFdmVuXCI+XG4gICA8Qm9yZGVycz5cbiAgICA8Qm9yZGVyIHNzOlBvc2l0aW9uPVwiQm90dG9tXCIgc3M6TGluZVN0eWxlPVwiQ29udGludW91c1wiIHNzOldlaWdodD1cIjFcIiBzczpDb2xvcj1cIiNGMUY1RjlcIi8+XG4gICA8L0JvcmRlcnM+XG4gICA8SW50ZXJpb3Igc3M6Q29sb3I9XCIjRkZGRkZGXCIgc3M6UGF0dGVybj1cIlNvbGlkXCIvPlxuICA8L1N0eWxlPlxuICA8U3R5bGUgc3M6SUQ9XCJEYXRhUm93T2RkXCI+XG4gICA8Qm9yZGVycz5cbiAgICA8Qm9yZGVyIHNzOlBvc2l0aW9uPVwiQm90dG9tXCIgc3M6TGluZVN0eWxlPVwiQ29udGludW91c1wiIHNzOldlaWdodD1cIjFcIiBzczpDb2xvcj1cIiNGMUY1RjlcIi8+XG4gICA8L0JvcmRlcnM+XG4gICA8SW50ZXJpb3Igc3M6Q29sb3I9XCIjRjhGQUZDXCIgc3M6UGF0dGVybj1cIlNvbGlkXCIvPlxuICA8L1N0eWxlPlxuIDwvU3R5bGVzPlxuIDxXb3Jrc2hlZXQgc3M6TmFtZT1cIiR7ZXNjYXBlWG1sKHNoZWV0TmFtZSl9XCI+XG4gIDxUYWJsZT5cbiR7Y29sdW1ucy5tYXAoKCkgPT4gJyAgIDxDb2x1bW4gc3M6QXV0b0ZpdFdpZHRoPVwiMVwiIHNzOldpZHRoPVwiMTIwXCIvPicpLmpvaW4oJ1xcbicpfVxuJHt4bWxSb3dzLmpvaW4oJ1xcbicpfVxuICA8L1RhYmxlPlxuIDwvV29ya3NoZWV0PlxuPC9Xb3JrYm9vaz5gO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBIVE1MIGRvY3VtZW50IHN0cmluZyBmb3JtYXR0ZWQgZm9yIHByaW50aW5nIGFuZCBjbGVhbiBQREYgY29udmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlSHRtbENvbnRlbnQoXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gIGNvbHVtbnM6IEV4cG9ydENvbHVtbltdLFxuICB0aXRsZTogc3RyaW5nID0gJ1JlcG9ydCBFeHBvcnQnLFxuICBicmFuZGVkSGVhZGVyPzogQnJhbmRlZEhlYWRlck9wdGlvbnNcbik6IHN0cmluZyB7XG4gIGNvbnN0IGVzY2FwZUh0bWwgPSAodmFsOiB1bmtub3duKTogc3RyaW5nID0+IHtcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIFN0cmluZyh2YWwpXG4gICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKTtcbiAgfTtcblxuICBjb25zdCBoZWFkZXJIdG1sID0gYnJhbmRlZEhlYWRlclxuICAgID8gYFxuICAgIDxoZWFkZXIgY2xhc3M9XCJycHQtcHJpbnQtaGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicnB0LXByaW50LW1ldGFcIj5cbiAgICAgICAgJHtcbiAgICAgICAgICBicmFuZGVkSGVhZGVyLmNvbXBhbnlOYW1lXG4gICAgICAgICAgICA/IGA8aDEgY2xhc3M9XCJycHQtY29tcGFueS10aXRsZVwiPiR7ZXNjYXBlSHRtbChicmFuZGVkSGVhZGVyLmNvbXBhbnlOYW1lKX08L2gxPmBcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfVxuICAgICAgICA8aDIgY2xhc3M9XCJycHQtcmVwb3J0LXRpdGxlXCI+JHtlc2NhcGVIdG1sKGJyYW5kZWRIZWFkZXIucmVwb3J0VGl0bGUgfHwgdGl0bGUpfTwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtbWV0YS1yb3dcIj5cbiAgICAgICAgICAke2JyYW5kZWRIZWFkZXIuYnJhbmNoTmFtZSA/IGA8c3Bhbj48c3Ryb25nPkJyYW5jaDo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKGJyYW5kZWRIZWFkZXIuYnJhbmNoTmFtZSl9PC9zcGFuPmAgOiAnJ31cbiAgICAgICAgICAke1xuICAgICAgICAgICAgYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRBdFxuICAgICAgICAgICAgICA/IGA8c3Bhbj48c3Ryb25nPkRhdGU6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChcbiAgICAgICAgICAgICAgICAgIGJyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQXQgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgICAgICAgID8gYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRBdC50b0xvY2FsZVN0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIDogYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRBdFxuICAgICAgICAgICAgICAgICl9PC9zcGFuPmBcbiAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgIH1cbiAgICAgICAgICAke2JyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQnkgPyBgPHNwYW4+PHN0cm9uZz5Vc2VyOjwvc3Ryb25nPiAke2VzY2FwZUh0bWwoYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRCeSl9PC9zcGFuPmAgOiAnJ31cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgICR7XG4gICAgICAgIGJyYW5kZWRIZWFkZXIuYWN0aXZlRmlsdGVyU3VtbWFyeVxuICAgICAgICAgID8gYDxkaXYgY2xhc3M9XCJycHQtZmlsdGVyLWJveFwiPjxzdHJvbmc+QWN0aXZlIEZpbHRlcnM6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChcbiAgICAgICAgICAgICAgZm9ybWF0RmlsdGVyU3VtbWFyeShicmFuZGVkSGVhZGVyLmFjdGl2ZUZpbHRlclN1bW1hcnkpXG4gICAgICAgICAgICApfTwvZGl2PmBcbiAgICAgICAgICA6ICcnXG4gICAgICB9XG4gICAgPC9oZWFkZXI+XG4gIGBcbiAgICA6IGA8aDIgY2xhc3M9XCJycHQtcmVwb3J0LXRpdGxlXCI+JHtlc2NhcGVIdG1sKHRpdGxlKX08L2gyPmA7XG5cbiAgY29uc3Qgcm93c0h0bWwgPSByb3dzXG4gICAgLm1hcChcbiAgICAgIChyLCBpZHgpID0+IGBcbiAgICA8dHIgY2xhc3M9XCIke2lkeCAlIDIgPT09IDAgPyAnZXZlbicgOiAnb2RkJ31cIj5cbiAgICAgICR7Y29sdW1uc1xuICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSByW2NvbC5maWVsZF07XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gY29sLmZvcm1hdHRlciA/IGNvbC5mb3JtYXR0ZXIodmFsLCByKSA6IHZhbDtcbiAgICAgICAgICByZXR1cm4gYDx0ZD4ke2VzY2FwZUh0bWwoZm9ybWF0dGVkKX08L3RkPmA7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcnKX1cbiAgICA8L3RyPmBcbiAgICApXG4gICAgLmpvaW4oJycpO1xuXG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbCBsYW5nPVwiZW5cIj5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cbiAgPHRpdGxlPiR7ZXNjYXBlSHRtbCh0aXRsZSl9PC90aXRsZT5cbiAgPHN0eWxlPlxuICAgIGJvZHkge1xuICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgICBtYXJnaW46IDI0cHg7XG4gICAgICBjb2xvcjogIzBmMTcyYTtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgfVxuICAgIC5ycHQtcHJpbnQtaGVhZGVyIHtcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMjU2M2ViO1xuICAgICAgcGFkZGluZy1ib3R0b206IDEycHg7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgIH1cbiAgICAucnB0LWNvbXBhbnktdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiAjMWUyOTNiO1xuICAgICAgbWFyZ2luOiAwIDAgNHB4IDA7XG4gICAgfVxuICAgIC5ycHQtcmVwb3J0LXRpdGxlIHtcbiAgICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiAjMjU2M2ViO1xuICAgICAgbWFyZ2luOiAwIDAgNnB4IDA7XG4gICAgfVxuICAgIC5ycHQtbWV0YS1yb3cge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGdhcDogMTZweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGNvbG9yOiAjNjQ3NDhiO1xuICAgIH1cbiAgICAucnB0LWZpbHRlci1ib3gge1xuICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgcGFkZGluZzogNnB4IDEwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiAjZWZmNmZmO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2JmZGJmZTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIGNvbG9yOiAjMWU0MGFmO1xuICAgIH1cbiAgICB0YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICB9XG4gICAgdGgge1xuICAgICAgYmFja2dyb3VuZDogIzI1NjNlYjtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMxZDRlZDg7XG4gICAgfVxuICAgIHRkIHtcbiAgICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgI2UyZThmMDtcbiAgICB9XG4gICAgdHIuZXZlbiB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIH1cbiAgICB0ci5vZGQge1xuICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICB9XG4gICAgQG1lZGlhIHByaW50IHtcbiAgICAgIGJvZHkgeyBtYXJnaW46IDA7IH1cbiAgICAgIHRoIHsgLXdlYmtpdC1wcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0OyBwcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0OyB9XG4gICAgICAucnB0LWZpbHRlci1ib3ggeyAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7IHByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7IH1cbiAgICB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgJHtoZWFkZXJIdG1sfVxuICA8dGFibGU+XG4gICAgPHRoZWFkPlxuICAgICAgPHRyPlxuICAgICAgICAke2NvbHVtbnMubWFwKChjKSA9PiBgPHRoPiR7ZXNjYXBlSHRtbChjLmhlYWRlcil9PC90aD5gKS5qb2luKCcnKX1cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICAke3Jvd3NIdG1sfVxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydEV4cG9ydFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgLyoqXG4gICAqIEVucmljaGVzIGJyYW5kZWQgaGVhZGVyIG9wdGlvbnMgd2l0aCBmYWxsYmFjayBzZXNzaW9uIGNvbnRleHQgZGF0YSBpZiBhdmFpbGFibGUuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVCcmFuZGVkSGVhZGVyKGhlYWRlcj86IEJyYW5kZWRIZWFkZXJPcHRpb25zKTogQnJhbmRlZEhlYWRlck9wdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5zZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgIGlmICghaGVhZGVyICYmIE9iamVjdC5rZXlzKHNlc3Npb24pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFueU5hbWU6XG4gICAgICAgIGhlYWRlcj8uY29tcGFueU5hbWUgfHxcbiAgICAgICAgKHNlc3Npb25bJ2NvbXBhbnlOYW1lJ10gYXMgc3RyaW5nKSB8fFxuICAgICAgICAoc2Vzc2lvblsndGVuYW50TmFtZSddIGFzIHN0cmluZykgfHxcbiAgICAgICAgKHNlc3Npb25bJ2NvbXBhbnknXSBhcyBzdHJpbmcpLFxuICAgICAgYnJhbmNoTmFtZTpcbiAgICAgICAgaGVhZGVyPy5icmFuY2hOYW1lIHx8XG4gICAgICAgIChzZXNzaW9uWydicmFuY2hOYW1lJ10gYXMgc3RyaW5nKSB8fFxuICAgICAgICAoc2Vzc2lvblsnYnJhbmNoQ29kZSddIGFzIHN0cmluZyksXG4gICAgICByZXBvcnRUaXRsZTogaGVhZGVyPy5yZXBvcnRUaXRsZSxcbiAgICAgIGdlbmVyYXRlZEF0OiBoZWFkZXI/LmdlbmVyYXRlZEF0IHx8IG5ldyBEYXRlKCksXG4gICAgICBnZW5lcmF0ZWRCeTpcbiAgICAgICAgaGVhZGVyPy5nZW5lcmF0ZWRCeSB8fFxuICAgICAgICAoc2Vzc2lvblsndXNlck5hbWUnXSBhcyBzdHJpbmcpIHx8XG4gICAgICAgIChzZXNzaW9uWyd1c2VySWQnXSBhcyBzdHJpbmcpLFxuICAgICAgYWN0aXZlRmlsdGVyU3VtbWFyeTogaGVhZGVyPy5hY3RpdmVGaWx0ZXJTdW1tYXJ5LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuZCB0cmlnZ2VycyBicm93c2VyIGRvd25sb2FkIG9mIGEgQ1NWIGZpbGUuXG4gICAqL1xuICBleHBvcnRDc3Yocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgb3B0aW9uczogQ3N2RXhwb3J0T3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgaWYgKCFyb3dzIHx8IHJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tid2F5cy1yZXBvcnRdIE5vIHJvd3MgdG8gZXhwb3J0Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVsaW1pdGVyID0gb3B0aW9ucy5kZWxpbWl0ZXIgPz8gJywnO1xuICAgIGNvbnN0IGluY2x1ZGVIZWFkZXIgPSBvcHRpb25zLmluY2x1ZGVIZWFkZXIgIT09IGZhbHNlO1xuICAgIGNvbnN0IGFkZEJvbSA9IG9wdGlvbnMuYWRkQm9tICE9PSBmYWxzZTtcbiAgICBjb25zdCBmaWxlTmFtZSA9IG9wdGlvbnMuZmlsZU5hbWUgfHwgYHJlcG9ydC1leHBvcnQtJHtEYXRlLm5vdygpfS5jc3ZgO1xuICAgIGNvbnN0IGJyYW5kZWRIZWFkZXIgPSB0aGlzLnJlc29sdmVCcmFuZGVkSGVhZGVyKG9wdGlvbnMuYnJhbmRlZEhlYWRlcik7XG5cbiAgICAvLyBJZiBjb2x1bW5zIG5vdCBwcm92aWRlZCwgaW5mZXIgZnJvbSBmaXJzdCByb3cga2V5c1xuICAgIGNvbnN0IGNvbHVtbnM6IEV4cG9ydENvbHVtbltdID1cbiAgICAgIG9wdGlvbnMuY29sdW1ucyAmJiBvcHRpb25zLmNvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICA/IG9wdGlvbnMuY29sdW1uc1xuICAgICAgICA6IE9iamVjdC5rZXlzKHJvd3NbMF0pLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgIGhlYWRlcjoga2V5LFxuICAgICAgICAgIH0pKTtcblxuICAgIGNvbnN0IGNzdkNvbnRlbnQgPSBnZW5lcmF0ZUNzdkNvbnRlbnQoXG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIGRlbGltaXRlcixcbiAgICAgIGluY2x1ZGVIZWFkZXIsXG4gICAgICBhZGRCb20sXG4gICAgICBicmFuZGVkSGVhZGVyXG4gICAgKTtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2NzdkNvbnRlbnRdLCB7IHR5cGU6ICd0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04OycgfSk7XG4gICAgdGhpcy5kb3dubG9hZEJsb2IoYmxvYiwgZmlsZU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbmQgdHJpZ2dlcnMgYnJvd3NlciBkb3dubG9hZCBvZiBhbiBFeGNlbCBzcHJlYWRzaGVldCAoLnhscyBTcHJlYWRzaGVldE1MKS5cbiAgICovXG4gIGV4cG9ydEV4Y2VsKHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIG9wdGlvbnM6IEV4Y2VsRXhwb3J0T3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgaWYgKCFyb3dzIHx8IHJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tid2F5cy1yZXBvcnRdIE5vIHJvd3MgdG8gZXhwb3J0IHRvIEV4Y2VsJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmF3TmFtZSA9IG9wdGlvbnMuZmlsZU5hbWUgfHwgYHJlcG9ydC1leHBvcnQtJHtEYXRlLm5vdygpfWA7XG4gICAgY29uc3QgZmlsZU5hbWUgPSByYXdOYW1lLmVuZHNXaXRoKCcueGxzJykgfHwgcmF3TmFtZS5lbmRzV2l0aCgnLnhsc3gnKVxuICAgICAgPyByYXdOYW1lXG4gICAgICA6IGAke3Jhd05hbWV9Lnhsc2A7XG4gICAgY29uc3Qgc2hlZXROYW1lID0gb3B0aW9ucy5zaGVldE5hbWUgfHwgJ1JlcG9ydCBEYXRhJztcbiAgICBjb25zdCBicmFuZGVkSGVhZGVyID0gdGhpcy5yZXNvbHZlQnJhbmRlZEhlYWRlcihvcHRpb25zLmJyYW5kZWRIZWFkZXIpO1xuXG4gICAgY29uc3QgY29sdW1uczogRXhwb3J0Q29sdW1uW10gPVxuICAgICAgb3B0aW9ucy5jb2x1bW5zICYmIG9wdGlvbnMuY29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgID8gb3B0aW9ucy5jb2x1bW5zXG4gICAgICAgIDogT2JqZWN0LmtleXMocm93c1swXSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBmaWVsZDoga2V5LFxuICAgICAgICAgICAgaGVhZGVyOiBrZXksXG4gICAgICAgICAgfSkpO1xuXG4gICAgY29uc3QgeG1sQ29udGVudCA9IGdlbmVyYXRlRXhjZWxYbWwocm93cywgY29sdW1ucywgc2hlZXROYW1lLCBicmFuZGVkSGVhZGVyKTtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3htbENvbnRlbnRdLCB7XG4gICAgICB0eXBlOiAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsO2NoYXJzZXQ9dXRmLTg7JyxcbiAgICB9KTtcbiAgICB0aGlzLmRvd25sb2FkQmxvYihibG9iLCBmaWxlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuZCB0cmlnZ2VycyBicm93c2VyIGRvd25sb2FkIG9mIGEgc3R5bGVkLCBwcmludGFibGUgSFRNTCByZXBvcnQgZmlsZS5cbiAgICovXG4gIGV4cG9ydEh0bWwocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgb3B0aW9uczogSHRtbEV4cG9ydE9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIGlmICghcm93cyB8fCByb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCdbYndheXMtcmVwb3J0XSBObyByb3dzIHRvIGV4cG9ydCB0byBIVE1MJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZU5hbWUgPSBvcHRpb25zLmZpbGVOYW1lIHx8IGByZXBvcnQtZXhwb3J0LSR7RGF0ZS5ub3coKX0uaHRtbGA7XG4gICAgY29uc3QgdGl0bGUgPSBvcHRpb25zLnRpdGxlIHx8ICdSZXBvcnQgRXhwb3J0JztcbiAgICBjb25zdCBicmFuZGVkSGVhZGVyID0gdGhpcy5yZXNvbHZlQnJhbmRlZEhlYWRlcihvcHRpb25zLmJyYW5kZWRIZWFkZXIpO1xuXG4gICAgY29uc3QgY29sdW1uczogRXhwb3J0Q29sdW1uW10gPVxuICAgICAgb3B0aW9ucy5jb2x1bW5zICYmIG9wdGlvbnMuY29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgID8gb3B0aW9ucy5jb2x1bW5zXG4gICAgICAgIDogT2JqZWN0LmtleXMocm93c1swXSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBmaWVsZDoga2V5LFxuICAgICAgICAgICAgaGVhZGVyOiBrZXksXG4gICAgICAgICAgfSkpO1xuXG4gICAgY29uc3QgaHRtbENvbnRlbnQgPSBnZW5lcmF0ZUh0bWxDb250ZW50KHJvd3MsIGNvbHVtbnMsIHRpdGxlLCBicmFuZGVkSGVhZGVyKTtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2h0bWxDb250ZW50XSwgeyB0eXBlOiAndGV4dC9odG1sO2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICB0aGlzLmRvd25sb2FkQmxvYihibG9iLCBmaWxlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBwcmludGFibGUgd2luZG93IHdpdGggYnJhbmRlZCBzdHlsaW5nIGFuZCBvcHRpb25hbGx5IGNhbGxzIHdpbmRvdy5wcmludCgpLlxuICAgKi9cbiAgcHJpbnRSZXBvcnQocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgb3B0aW9uczogSHRtbEV4cG9ydE9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIGlmICghcm93cyB8fCByb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc29sZS53YXJuKCdbYndheXMtcmVwb3J0XSBObyByb3dzIHRvIHByaW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGl0bGUgPSBvcHRpb25zLnRpdGxlIHx8ICdSZXBvcnQgUHJpbnQgUHJldmlldyc7XG4gICAgY29uc3QgYnJhbmRlZEhlYWRlciA9IHRoaXMucmVzb2x2ZUJyYW5kZWRIZWFkZXIob3B0aW9ucy5icmFuZGVkSGVhZGVyKTtcbiAgICBjb25zdCBjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSA9XG4gICAgICBvcHRpb25zLmNvbHVtbnMgJiYgb3B0aW9ucy5jb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgPyBvcHRpb25zLmNvbHVtbnNcbiAgICAgICAgOiBPYmplY3Qua2V5cyhyb3dzWzBdKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGZpZWxkOiBrZXksXG4gICAgICAgICAgICBoZWFkZXI6IGtleSxcbiAgICAgICAgICB9KSk7XG5cbiAgICBjb25zdCBodG1sID0gZ2VuZXJhdGVIdG1sQ29udGVudChyb3dzLCBjb2x1bW5zLCB0aXRsZSwgYnJhbmRlZEhlYWRlcik7XG4gICAgY29uc3Qgd2luID0gd2luZG93Lm9wZW4oJycsICdfYmxhbmsnLCAnd2lkdGg9OTAwLGhlaWdodD03MDAnKTtcbiAgICBpZiAod2luKSB7XG4gICAgICB3aW4uZG9jdW1lbnQub3BlbigpO1xuICAgICAgd2luLmRvY3VtZW50LndyaXRlKGh0bWwpO1xuICAgICAgd2luLmRvY3VtZW50LmNsb3NlKCk7XG4gICAgICBpZiAob3B0aW9ucy5hdXRvUHJpbnQgIT09IGZhbHNlKSB7XG4gICAgICAgIHdpbi5mb2N1cygpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHdpbi5wcmludCgpLCAyNTApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW5kIHRyaWdnZXJzIGJyb3dzZXIgZG93bmxvYWQgb2YgYSBKU09OIGZpbGUuXG4gICAqL1xuICBleHBvcnRKc29uKGRhdGE6IHVua25vd24sIG9wdGlvbnM6IEpzb25FeHBvcnRPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IG9wdGlvbnMuZmlsZU5hbWUgfHwgYHJlcG9ydC1leHBvcnQtJHtEYXRlLm5vdygpfS5qc29uYDtcbiAgICBjb25zdCBwcmV0dHkgPSBvcHRpb25zLnByZXR0eSAhPT0gZmFsc2U7XG4gICAgY29uc3QganNvblN0cmluZyA9IHByZXR0eSA/IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpIDogSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG5cbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2pzb25TdHJpbmddLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICB0aGlzLmRvd25sb2FkQmxvYihibG9iLCBmaWxlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2FmZSBmaWxlIGRvd25sb2FkIHRyaWdnZXIgdmlhIHRlbXBvcmFyeSBhbmNob3IgdGFnLlxuICAgKi9cbiAgcHJpdmF0ZSBkb3dubG9hZEJsb2IoYmxvYjogQmxvYiwgZmlsZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kb2N1bWVudCB8fCAhdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBjb25zdCBsaW5rID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcbiAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgbGluay5jbGljaygpO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgfSwgMTAwKTtcbiAgfVxufVxuIl19
527
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4cG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvZXhwb3J0L3NlcnZpY2VzL3JlcG9ydC1leHBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFTM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7O0FBRXBHOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFjLEVBQUUsWUFBb0IsR0FBRztJQUNyRSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4Qiw4RUFBOEU7SUFDOUUsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksMkJBQTJCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdkUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbEIsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxNQUFNLFNBQVMsR0FDYixHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUN2QixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUNqQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXJCLElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcs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QUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQzt3R0EvTFUsbUJBQW1COzRHQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQnJhbmRlZEhlYWRlck9wdGlvbnMsXG4gIENzdkV4cG9ydE9wdGlvbnMsXG4gIEV4Y2VsRXhwb3J0T3B0aW9ucyxcbiAgRXhwb3J0Q29sdW1uLFxuICBIdG1sRXhwb3J0T3B0aW9ucyxcbiAgSnNvbkV4cG9ydE9wdGlvbnMsXG59IGZyb20gJy4uL21vZGVscy9leHBvcnQubW9kZWxzJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcblxuLyoqXG4gKiBTYW5pdGl6ZXMgYW5kIGVzY2FwZXMgYSBzaW5nbGUgY2VsbCB2YWx1ZSBmb3IgQ1NWIG91dHB1dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplQ3N2Q2VsbCh2YWx1ZTogdW5rbm93biwgZGVsaW1pdGVyOiBzdHJpbmcgPSAnLCcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGxldCBzdHIgPSBTdHJpbmcodmFsdWUpO1xuICAvLyBOZXV0cmFsaXplIGZvcm11bGFzIGluIHVudHJ1c3RlZCB0ZXh0IHdoaWxlIHByZXNlcnZpbmcgbnVtZXJpYyBjZWxsIHZhbHVlcy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15bXFxzXFx1MDAwMC1cXHUwMDFmXSpbPStALV0vLnRlc3Qoc3RyKSkge1xuICAgIHN0ciA9IFwiJ1wiICsgc3RyO1xuICB9XG5cbiAgLy8gSWYgdmFsdWUgY29udGFpbnMgZGVsaW1pdGVyLCBxdW90ZSwgb3IgbmV3bGluZSwgZXNjYXBlIGFuZCB3cmFwIGluIHF1b3Rlc1xuICBjb25zdCBtdXN0UXVvdGUgPVxuICAgIHN0ci5pbmNsdWRlcyhkZWxpbWl0ZXIpIHx8XG4gICAgc3RyLmluY2x1ZGVzKCdcIicpIHx8XG4gICAgc3RyLmluY2x1ZGVzKCdcXG4nKSB8fFxuICAgIHN0ci5pbmNsdWRlcygnXFxyJyk7XG5cbiAgaWYgKG11c3RRdW90ZSkge1xuICAgIHN0ciA9ICdcIicgKyBzdHIucmVwbGFjZSgvXCIvZywgJ1wiXCInKSArICdcIic7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgYSByZWNvcmQgb3Igc3RyaW5nIG9mIGFjdGl2ZSBmaWx0ZXIgY3JpdGVyaWEgaW50byBhIGNsZWFuIHRleHQgbGluZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbHRlclN1bW1hcnkoc3VtbWFyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFzdW1tYXJ5KSByZXR1cm4gJyc7XG4gIGlmICh0eXBlb2Ygc3VtbWFyeSA9PT0gJ3N0cmluZycpIHJldHVybiBzdW1tYXJ5O1xuXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhzdW1tYXJ5KVxuICAgIC5maWx0ZXIoKFtfLCB2XSkgPT4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwgJiYgdiAhPT0gJycpXG4gICAgLm1hcCgoW2ssIHZdKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgJ2Zyb20nIGluIHYgJiYgJ3RvJyBpbiB2KSB7XG4gICAgICAgIHJldHVybiBgJHtrfTogJHsodiBhcyBhbnkpLmZyb219IHRvICR7KHYgYXMgYW55KS50b31gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGAke2t9OiAke3Z9YDtcbiAgICB9KVxuICAgIC5qb2luKCcgfCAnKTtcbn1cblxuLyoqXG4gKiBQdXJlIGdlbmVyYXRvciBmdW5jdGlvbiB0byBjcmVhdGUgQ1NWIGNvbnRlbnQgc3RyaW5nIGZyb20gcm93IGRhdGEgYW5kIGNvbHVtbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNzdkNvbnRlbnQoXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gIGNvbHVtbnM6IEV4cG9ydENvbHVtbltdLFxuICBkZWxpbWl0ZXI6IHN0cmluZyA9ICcsJyxcbiAgaW5jbHVkZUhlYWRlcjogYm9vbGVhbiA9IHRydWUsXG4gIGFkZEJvbTogYm9vbGVhbiA9IHRydWUsXG4gIGJyYW5kZWRIZWFkZXI/OiBCcmFuZGVkSGVhZGVyT3B0aW9uc1xuKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgYWRkTWV0YWRhdGEgPSAobGluZTogc3RyaW5nKSA9PiBsaW5lcy5wdXNoKHNhbml0aXplQ3N2Q2VsbChsaW5lLCBkZWxpbWl0ZXIpKTtcbiAgaWYgKGJyYW5kZWRIZWFkZXIpIHtcbiAgICBpZiAoYnJhbmRlZEhlYWRlci5jb21wYW55TmFtZSB8fCBicmFuZGVkSGVhZGVyLmJyYW5jaE5hbWUpIHtcbiAgICAgIGFkZE1ldGFkYXRhKFxuICAgICAgICBgIyBDb21wYW55OiAke2JyYW5kZWRIZWFkZXIuY29tcGFueU5hbWUgPz8gJyd9JHtcbiAgICAgICAgICBicmFuZGVkSGVhZGVyLmJyYW5jaE5hbWUgPyBgIHwgQnJhbmNoOiAke2JyYW5kZWRIZWFkZXIuYnJhbmNoTmFtZX1gIDogJydcbiAgICAgICAgfWBcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChicmFuZGVkSGVhZGVyLnJlcG9ydFRpdGxlKSB7XG4gICAgICBhZGRNZXRhZGF0YShgIyBSZXBvcnQ6ICR7YnJhbmRlZEhlYWRlci5yZXBvcnRUaXRsZX1gKTtcbiAgICB9XG4gICAgY29uc3QgZ2VuSW5mbzogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAoYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRBdCkge1xuICAgICAgY29uc3QgZHQgPVxuICAgICAgICBicmFuZGVkSGVhZGVyLmdlbmVyYXRlZEF0IGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgID8gYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRBdC50b0lTT1N0cmluZygpLnJlcGxhY2UoJ1QnLCAnICcpLnNsaWNlKDAsIDE5KVxuICAgICAgICAgIDogU3RyaW5nKGJyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQXQpO1xuICAgICAgZ2VuSW5mby5wdXNoKGBHZW5lcmF0ZWQ6ICR7ZHR9YCk7XG4gICAgfVxuICAgIGlmIChicmFuZGVkSGVhZGVyLmdlbmVyYXRlZEJ5KSB7XG4gICAgICBnZW5JbmZvLnB1c2goYFVzZXI6ICR7YnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRCeX1gKTtcbiAgICB9XG4gICAgaWYgKGdlbkluZm8ubGVuZ3RoID4gMCkge1xuICAgICAgYWRkTWV0YWRhdGEoYCMgJHtnZW5JbmZvLmpvaW4oJyB8ICcpfWApO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJUZXh0ID0gZm9ybWF0RmlsdGVyU3VtbWFyeShicmFuZGVkSGVhZGVyLmFjdGl2ZUZpbHRlclN1bW1hcnkpO1xuICAgIGlmIChmaWx0ZXJUZXh0KSB7XG4gICAgICBhZGRNZXRhZGF0YShgIyBBY3RpdmUgRmlsdGVyczogJHtmaWx0ZXJUZXh0fWApO1xuICAgIH1cbiAgICBhZGRNZXRhZGF0YSgnIyAnICsgJy0nLnJlcGVhdCg0MCkpO1xuICB9XG5cbiAgaWYgKGluY2x1ZGVIZWFkZXIpIHtcbiAgICBjb25zdCBoZWFkZXJMaW5lID0gY29sdW1uc1xuICAgICAgLm1hcCgoY29sKSA9PiBzYW5pdGl6ZUNzdkNlbGwoY29sLmhlYWRlciwgZGVsaW1pdGVyKSlcbiAgICAgIC5qb2luKGRlbGltaXRlcik7XG4gICAgbGluZXMucHVzaChoZWFkZXJMaW5lKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICBjb25zdCByb3dWYWx1ZXMgPSBjb2x1bW5zLm1hcCgoY29sKSA9PiB7XG4gICAgICBjb25zdCB2YWwgPSByb3dbY29sLmZpZWxkXTtcbiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IGNvbC5mb3JtYXR0ZXIgPyBjb2wuZm9ybWF0dGVyKHZhbCwgcm93KSA6IHZhbDtcbiAgICAgIHJldHVybiBzYW5pdGl6ZUNzdkNlbGwoZm9ybWF0dGVkLCBkZWxpbWl0ZXIpO1xuICAgIH0pO1xuICAgIGxpbmVzLnB1c2gocm93VmFsdWVzLmpvaW4oZGVsaW1pdGVyKSk7XG4gIH1cblxuICBjb25zdCBjc3ZCb2R5ID0gbGluZXMuam9pbignXFxyXFxuJyk7XG4gIHJldHVybiBhZGRCb20gPyAnXFx1RkVGRicgKyBjc3ZCb2R5IDogY3N2Qm9keTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gRXhjZWwtY29tcGF0aWJsZSBYTUwgU3ByZWFkc2hlZXQgKFNwcmVhZHNoZWV0TUwpIGRvY3VtZW50IHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRXhjZWxYbWwoXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sXG4gIGNvbHVtbnM6IEV4cG9ydENvbHVtbltdLFxuICBzaGVldE5hbWU6IHN0cmluZyA9ICdSZXBvcnQgRGF0YScsXG4gIGJyYW5kZWRIZWFkZXI/OiBCcmFuZGVkSGVhZGVyT3B0aW9uc1xuKTogc3RyaW5nIHtcbiAgY29uc3QgZXNjYXBlWG1sID0gKHZhbDogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuICcnO1xuICAgIHJldHVybiBTdHJpbmcodmFsKVxuICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgIC5yZXBsYWNlKC8nL2csICcmYXBvczsnKTtcbiAgfTtcblxuICBjb25zdCB4bWxSb3dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGlmIChicmFuZGVkSGVhZGVyKSB7XG4gICAgaWYgKGJyYW5kZWRIZWFkZXIuY29tcGFueU5hbWUgfHwgYnJhbmRlZEhlYWRlci5yZXBvcnRUaXRsZSkge1xuICAgICAgY29uc3QgdGl0bGUgPSBbYnJhbmRlZEhlYWRlci5jb21wYW55TmFtZSwgYnJhbmRlZEhlYWRlci5yZXBvcnRUaXRsZV1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignIC0gJyk7XG4gICAgICB4bWxSb3dzLnB1c2goYFxuICAgICAgPFJvdyBzczpIZWlnaHQ9XCIyNFwiPlxuICAgICAgICA8Q2VsbCBzczpTdHlsZUlEPVwiVGl0bGVTdHlsZVwiIHNzOk1lcmdlQWNyb3NzPVwiJHtNYXRoLm1heCgwLCBjb2x1bW5zLmxlbmd0aCAtIDEpfVwiPlxuICAgICAgICAgIDxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj4ke2VzY2FwZVhtbCh0aXRsZSl9PC9EYXRhPlxuICAgICAgICA8L0NlbGw+XG4gICAgICA8L1Jvdz5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRhUGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGJyYW5kZWRIZWFkZXIuYnJhbmNoTmFtZSkgbWV0YVBhcnRzLnB1c2goYEJyYW5jaDogJHticmFuZGVkSGVhZGVyLmJyYW5jaE5hbWV9YCk7XG4gICAgaWYgKGJyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQXQpIHtcbiAgICAgIGNvbnN0IGR0ID1cbiAgICAgICAgYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRBdCBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICA/IGJyYW5kZWRIZWFkZXIuZ2VuZXJhdGVkQXQudG9JU09TdHJpbmcoKS5yZXBsYWNlKCdUJywgJyAnKS5zbGljZSgwLCAxOSlcbiAgICAgICAgICA6IFN0cmluZyhicmFuZGVkSGVhZGVyLmdlbmVyYXRlZEF0KTtcbiAgICAgIG1ldGFQYXJ0cy5wdXNoKGBEYXRlOiAke2R0fWApO1xuICAgIH1cbiAgICBpZiAoYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRCeSkgbWV0YVBhcnRzLnB1c2goYFVzZXI6ICR7YnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRCeX1gKTtcblxuICAgIGlmIChtZXRhUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgeG1sUm93cy5wdXNoKGBcbiAgICAgIDxSb3cgc3M6SGVpZ2h0PVwiMTZcIj5cbiAgICAgICAgPENlbGwgc3M6U3R5bGVJRD1cIlN1YlRpdGxlU3R5bGVcIiBzczpNZXJnZUFjcm9zcz1cIiR7TWF0aC5tYXgoMCwgY29sdW1ucy5sZW5ndGggLSAxKX1cIj5cbiAgICAgICAgICA8RGF0YSBzczpUeXBlPVwiU3RyaW5nXCI+JHtlc2NhcGVYbWwobWV0YVBhcnRzLmpvaW4oJyB8ICcpKX08L0RhdGE+XG4gICAgICAgIDwvQ2VsbD5cbiAgICAgIDwvUm93PmApO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlclRleHQgPSBmb3JtYXRGaWx0ZXJTdW1tYXJ5KGJyYW5kZWRIZWFkZXIuYWN0aXZlRmlsdGVyU3VtbWFyeSk7XG4gICAgaWYgKGZpbHRlclRleHQpIHtcbiAgICAgIHhtbFJvd3MucHVzaChgXG4gICAgICA8Um93IHNzOkhlaWdodD1cIjE2XCI+XG4gICAgICAgIDxDZWxsIHNzOlN0eWxlSUQ9XCJGaWx0ZXJTdHlsZVwiIHNzOk1lcmdlQWNyb3NzPVwiJHtNYXRoLm1heCgwLCBjb2x1bW5zLmxlbmd0aCAtIDEpfVwiPlxuICAgICAgICAgIDxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj4ke2VzY2FwZVhtbChgRmlsdGVyczogJHtmaWx0ZXJUZXh0fWApfTwvRGF0YT5cbiAgICAgICAgPC9DZWxsPlxuICAgICAgPC9Sb3c+YCk7XG4gICAgfVxuXG4gICAgLy8gQmxhbmsgcm93IHNlcGFyYXRvclxuICAgIHhtbFJvd3MucHVzaCgnPFJvdyBzczpIZWlnaHQ9XCI4XCIgLz4nKTtcbiAgfVxuXG4gIC8vIENvbHVtbiBIZWFkZXJzXG4gIGNvbnN0IGhlYWRlckNlbGxzID0gY29sdW1uc1xuICAgIC5tYXAoXG4gICAgICAoY29sKSA9PiBgXG4gICAgICAgIDxDZWxsIHNzOlN0eWxlSUQ9XCJIZWFkZXJTdHlsZVwiPjxEYXRhIHNzOlR5cGU9XCJTdHJpbmdcIj4ke2VzY2FwZVhtbChjb2wuaGVhZGVyKX08L0RhdGE+PC9DZWxsPmBcbiAgICApXG4gICAgLmpvaW4oJycpO1xuICB4bWxSb3dzLnB1c2goYDxSb3cgc3M6SGVpZ2h0PVwiMjBcIj4ke2hlYWRlckNlbGxzfVxcbiAgICAgIDwvUm93PmApO1xuXG4gIC8vIERhdGEgcm93c1xuICByb3dzLmZvckVhY2goKHJvdywgaWR4KSA9PiB7XG4gICAgY29uc3QgaXNFdmVuID0gaWR4ICUgMiA9PT0gMDtcbiAgICBjb25zdCBzdHlsZUlkID0gaXNFdmVuID8gJ0RhdGFSb3dFdmVuJyA6ICdEYXRhUm93T2RkJztcbiAgICBjb25zdCBjZWxscyA9IGNvbHVtbnNcbiAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gY29sLmZvcm1hdHRlciA/IGNvbC5mb3JtYXR0ZXIodmFsLCByb3cpIDogdmFsO1xuICAgICAgICBjb25zdCBpc051bSA9IHR5cGVvZiBmb3JtYXR0ZWQgPT09ICdudW1iZXInICYmICFpc05hTihmb3JtYXR0ZWQpO1xuICAgICAgICBjb25zdCB0eXBlID0gaXNOdW0gPyAnTnVtYmVyJyA6ICdTdHJpbmcnO1xuICAgICAgICByZXR1cm4gYDxDZWxsIHNzOlN0eWxlSUQ9XCIke3N0eWxlSWR9XCI+PERhdGEgc3M6VHlwZT1cIiR7dHlwZX1cIj4ke2VzY2FwZVhtbChmb3JtYXR0ZWQpfTwvRGF0YT48L0NlbGw+YDtcbiAgICAgIH0pXG4gICAgICAuam9pbignJyk7XG4gICAgeG1sUm93cy5wdXNoKGAgICAgICA8Um93IHNzOkhlaWdodD1cIjE3XCI+JHtjZWxsc308L1Jvdz5gKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbjw/bXNvLWFwcGxpY2F0aW9uIHByb2dpZD1cIkV4Y2VsLlNoZWV0XCI/PlxuPFdvcmtib29rIHhtbG5zPVwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c3ByZWFkc2hlZXRcIlxuIHhtbG5zOm89XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2VcIlxuIHhtbG5zOng9XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbFwiXG4geG1sbnM6c3M9XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpzcHJlYWRzaGVldFwiPlxuIDxTdHlsZXM+XG4gIDxTdHlsZSBzczpJRD1cIkRlZmF1bHRcIiBzczpOYW1lPVwiTm9ybWFsXCI+XG4gICA8QWxpZ25tZW50IHNzOlZlcnRpY2FsPVwiQ2VudGVyXCIvPlxuICAgPEZvbnQgc3M6Rm9udE5hbWU9XCJTZWdvZSBVSVwiIHNzOlNpemU9XCIxMFwiIHNzOkNvbG9yPVwiIzBGMTcyQVwiLz5cbiAgPC9TdHlsZT5cbiAgPFN0eWxlIHNzOklEPVwiVGl0bGVTdHlsZVwiPlxuICAgPEFsaWdubWVudCBzczpIb3Jpem9udGFsPVwiTGVmdFwiIHNzOlZlcnRpY2FsPVwiQ2VudGVyXCIvPlxuICAgPEZvbnQgc3M6Rm9udE5hbWU9XCJTZWdvZSBVSVwiIHNzOlNpemU9XCIxNFwiIHNzOkJvbGQ9XCIxXCIgc3M6Q29sb3I9XCIjMUUyOTNCXCIvPlxuICA8L1N0eWxlPlxuICA8U3R5bGUgc3M6SUQ9XCJTdWJUaXRsZVN0eWxlXCI+XG4gICA8QWxpZ25tZW50IHNzOkhvcml6b250YWw9XCJMZWZ0XCIgc3M6VmVydGljYWw9XCJDZW50ZXJcIi8+XG4gICA8Rm9udCBzczpGb250TmFtZT1cIlNlZ29lIFVJXCIgc3M6U2l6ZT1cIjlcIiBzczpJdGFsaWM9XCIxXCIgc3M6Q29sb3I9XCIjNjQ3NDhCXCIvPlxuICA8L1N0eWxlPlxuICA8U3R5bGUgc3M6SUQ9XCJGaWx0ZXJTdHlsZVwiPlxuICAgPEFsaWdubWVudCBzczpIb3Jpem9udGFsPVwiTGVmdFwiIHNzOlZlcnRpY2FsPVwiQ2VudGVyXCIvPlxuICAgPEZvbnQgc3M6Rm9udE5hbWU9XCJTZWdvZSBVSVwiIHNzOlNpemU9XCI5XCIgc3M6Qm9sZD1cIjFcIiBzczpDb2xvcj1cIiMyNTYzRUJcIi8+XG4gICA8SW50ZXJpb3Igc3M6Q29sb3I9XCIjRUZGNkZGXCIgc3M6UGF0dGVybj1cIlNvbGlkXCIvPlxuICA8L1N0eWxlPlxuICA8U3R5bGUgc3M6SUQ9XCJIZWFkZXJTdHlsZVwiPlxuICAgPEFsaWdubWVudCBzczpIb3Jpem9udGFsPVwiTGVmdFwiIHNzOlZlcnRpY2FsPVwiQ2VudGVyXCIvPlxuICAgPEJvcmRlcnM+XG4gICAgPEJvcmRlciBzczpQb3NpdGlvbj1cIkJvdHRvbVwiIHNzOkxpbmVTdHlsZT1cIkNvbnRpbnVvdXNcIiBzczpXZWlnaHQ9XCIxXCIgc3M6Q29sb3I9XCIjQ0JENUUxXCIvPlxuICAgPC9Cb3JkZXJzPlxuICAgPEZvbnQgc3M6Rm9udE5hbWU9XCJTZWdvZSBVSVwiIHNzOlNpemU9XCIxMFwiIHNzOkJvbGQ9XCIxXCIgc3M6Q29sb3I9XCIjRkZGRkZGXCIvPlxuICAgPEludGVyaW9yIHNzOkNvbG9yPVwiIzI1NjNFQlwiIHNzOlBhdHRlcm49XCJTb2xpZFwiLz5cbiAgPC9TdHlsZT5cbiAgPFN0eWxlIHNzOklEPVwiRGF0YVJvd0V2ZW5cIj5cbiAgIDxCb3JkZXJzPlxuICAgIDxCb3JkZXIgc3M6UG9zaXRpb249XCJCb3R0b21cIiBzczpMaW5lU3R5bGU9XCJDb250aW51b3VzXCIgc3M6V2VpZ2h0PVwiMVwiIHNzOkNvbG9yPVwiI0YxRjVGOVwiLz5cbiAgIDwvQm9yZGVycz5cbiAgIDxJbnRlcmlvciBzczpDb2xvcj1cIiNGRkZGRkZcIiBzczpQYXR0ZXJuPVwiU29saWRcIi8+XG4gIDwvU3R5bGU+XG4gIDxTdHlsZSBzczpJRD1cIkRhdGFSb3dPZGRcIj5cbiAgIDxCb3JkZXJzPlxuICAgIDxCb3JkZXIgc3M6UG9zaXRpb249XCJCb3R0b21cIiBzczpMaW5lU3R5bGU9XCJDb250aW51b3VzXCIgc3M6V2VpZ2h0PVwiMVwiIHNzOkNvbG9yPVwiI0YxRjVGOVwiLz5cbiAgIDwvQm9yZGVycz5cbiAgIDxJbnRlcmlvciBzczpDb2xvcj1cIiNGOEZBRkNcIiBzczpQYXR0ZXJuPVwiU29saWRcIi8+XG4gIDwvU3R5bGU+XG4gPC9TdHlsZXM+XG4gPFdvcmtzaGVldCBzczpOYW1lPVwiJHtlc2NhcGVYbWwoc2hlZXROYW1lKX1cIj5cbiAgPFRhYmxlPlxuJHtjb2x1bW5zLm1hcCgoKSA9PiAnICAgPENvbHVtbiBzczpBdXRvRml0V2lkdGg9XCIxXCIgc3M6V2lkdGg9XCIxMjBcIi8+Jykuam9pbignXFxuJyl9XG4ke3htbFJvd3Muam9pbignXFxuJyl9XG4gIDwvVGFibGU+XG4gPC9Xb3Jrc2hlZXQ+XG48L1dvcmtib29rPmA7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIEhUTUwgZG9jdW1lbnQgc3RyaW5nIGZvcm1hdHRlZCBmb3IgcHJpbnRpbmcgYW5kIGNsZWFuIFBERiBjb252ZXJzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVIdG1sQ29udGVudChcbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgY29sdW1uczogRXhwb3J0Q29sdW1uW10sXG4gIHRpdGxlOiBzdHJpbmcgPSAnUmVwb3J0IEV4cG9ydCcsXG4gIGJyYW5kZWRIZWFkZXI/OiBCcmFuZGVkSGVhZGVyT3B0aW9uc1xuKTogc3RyaW5nIHtcbiAgY29uc3QgZXNjYXBlSHRtbCA9ICh2YWw6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICByZXR1cm4gU3RyaW5nKHZhbClcbiAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICB9O1xuXG4gIGNvbnN0IGhlYWRlckh0bWwgPSBicmFuZGVkSGVhZGVyXG4gICAgPyBgXG4gICAgPGhlYWRlciBjbGFzcz1cInJwdC1wcmludC1oZWFkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJycHQtcHJpbnQtbWV0YVwiPlxuICAgICAgICAke1xuICAgICAgICAgIGJyYW5kZWRIZWFkZXIuY29tcGFueU5hbWVcbiAgICAgICAgICAgID8gYDxoMSBjbGFzcz1cInJwdC1jb21wYW55LXRpdGxlXCI+JHtlc2NhcGVIdG1sKGJyYW5kZWRIZWFkZXIuY29tcGFueU5hbWUpfTwvaDE+YFxuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9XG4gICAgICAgIDxoMiBjbGFzcz1cInJwdC1yZXBvcnQtdGl0bGVcIj4ke2VzY2FwZUh0bWwoYnJhbmRlZEhlYWRlci5yZXBvcnRUaXRsZSB8fCB0aXRsZSl9PC9oMj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1tZXRhLXJvd1wiPlxuICAgICAgICAgICR7YnJhbmRlZEhlYWRlci5icmFuY2hOYW1lID8gYDxzcGFuPjxzdHJvbmc+QnJhbmNoOjwvc3Ryb25nPiAke2VzY2FwZUh0bWwoYnJhbmRlZEhlYWRlci5icmFuY2hOYW1lKX08L3NwYW4+YCA6ICcnfVxuICAgICAgICAgICR7XG4gICAgICAgICAgICBicmFuZGVkSGVhZGVyLmdlbmVyYXRlZEF0XG4gICAgICAgICAgICAgID8gYDxzcGFuPjxzdHJvbmc+RGF0ZTo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKFxuICAgICAgICAgICAgICAgICAgYnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRBdCBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgICAgICAgPyBicmFuZGVkSGVhZGVyLmdlbmVyYXRlZEF0LnRvTG9jYWxlU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgOiBicmFuZGVkSGVhZGVyLmdlbmVyYXRlZEF0XG4gICAgICAgICAgICAgICAgKX08L3NwYW4+YFxuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgfVxuICAgICAgICAgICR7YnJhbmRlZEhlYWRlci5nZW5lcmF0ZWRCeSA/IGA8c3Bhbj48c3Ryb25nPlVzZXI6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbChicmFuZGVkSGVhZGVyLmdlbmVyYXRlZEJ5KX08L3NwYW4+YCA6ICcnfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgJHtcbiAgICAgICAgYnJhbmRlZEhlYWRlci5hY3RpdmVGaWx0ZXJTdW1tYXJ5XG4gICAgICAgICAgPyBgPGRpdiBjbGFzcz1cInJwdC1maWx0ZXItYm94XCI+PHN0cm9uZz5BY3RpdmUgRmlsdGVyczo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKFxuICAgICAgICAgICAgICBmb3JtYXRGaWx0ZXJTdW1tYXJ5KGJyYW5kZWRIZWFkZXIuYWN0aXZlRmlsdGVyU3VtbWFyeSlcbiAgICAgICAgICAgICl9PC9kaXY+YFxuICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICA8L2hlYWRlcj5cbiAgYFxuICAgIDogYDxoMiBjbGFzcz1cInJwdC1yZXBvcnQtdGl0bGVcIj4ke2VzY2FwZUh0bWwodGl0bGUpfTwvaDI+YDtcblxuICBjb25zdCByb3dzSHRtbCA9IHJvd3NcbiAgICAubWFwKFxuICAgICAgKHIsIGlkeCkgPT4gYFxuICAgIDx0ciBjbGFzcz1cIiR7aWR4ICUgMiA9PT0gMCA/ICdldmVuJyA6ICdvZGQnfVwiPlxuICAgICAgJHtjb2x1bW5zXG4gICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IHJbY29sLmZpZWxkXTtcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBjb2wuZm9ybWF0dGVyID8gY29sLmZvcm1hdHRlcih2YWwsIHIpIDogdmFsO1xuICAgICAgICAgIHJldHVybiBgPHRkPiR7ZXNjYXBlSHRtbChmb3JtYXR0ZWQpfTwvdGQ+YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oJycpfVxuICAgIDwvdHI+YFxuICAgIClcbiAgICAuam9pbignJyk7XG5cbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sIGxhbmc9XCJlblwiPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJ1dGYtOFwiPlxuICA8dGl0bGU+JHtlc2NhcGVIdG1sKHRpdGxlKX08L3RpdGxlPlxuICA8c3R5bGU+XG4gICAgYm9keSB7XG4gICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgIG1hcmdpbjogMjRweDtcbiAgICAgIGNvbG9yOiAjMGYxNzJhO1xuICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICB9XG4gICAgLnJwdC1wcmludC1oZWFkZXIge1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMyNTYzZWI7XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMTJweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgfVxuICAgIC5ycHQtY29tcGFueS10aXRsZSB7XG4gICAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6ICMxZTI5M2I7XG4gICAgICBtYXJnaW46IDAgMCA0cHggMDtcbiAgICB9XG4gICAgLnJwdC1yZXBvcnQtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAxLjFyZW07XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6ICMyNTYzZWI7XG4gICAgICBtYXJnaW46IDAgMCA2cHggMDtcbiAgICB9XG4gICAgLnJwdC1tZXRhLXJvdyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZ2FwOiAxNnB4O1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6ICM2NDc0OGI7XG4gICAgfVxuICAgIC5ycHQtZmlsdGVyLWJveCB7XG4gICAgICBtYXJnaW4tdG9wOiA4cHg7XG4gICAgICBwYWRkaW5nOiA2cHggMTBweDtcbiAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjYmZkYmZlO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgY29sb3I6ICMxZTQwYWY7XG4gICAgfVxuICAgIHRhYmxlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgIH1cbiAgICB0aCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjMjU2M2ViO1xuICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHBhZGRpbmc6IDhweCAxMHB4O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgIzFkNGVkODtcbiAgICB9XG4gICAgdGQge1xuICAgICAgcGFkZGluZzogNnB4IDEwcHg7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCAjZTJlOGYwO1xuICAgIH1cbiAgICB0ci5ldmVuIHtcbiAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgfVxuICAgIHRyLm9kZCB7XG4gICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgIH1cbiAgICBAbWVkaWEgcHJpbnQge1xuICAgICAgYm9keSB7IG1hcmdpbjogMDsgfVxuICAgICAgdGggeyAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7IHByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7IH1cbiAgICAgIC5ycHQtZmlsdGVyLWJveCB7IC13ZWJraXQtcHJpbnQtY29sb3ItYWRqdXN0OiBleGFjdDsgcHJpbnQtY29sb3ItYWRqdXN0OiBleGFjdDsgfVxuICAgIH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICAke2hlYWRlckh0bWx9XG4gIDx0YWJsZT5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgICR7Y29sdW1ucy5tYXAoKGMpID0+IGA8dGg+JHtlc2NhcGVIdG1sKGMuaGVhZGVyKX08L3RoPmApLmpvaW4oJycpfVxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgICR7cm93c0h0bWx9XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0RXhwb3J0U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogRW5yaWNoZXMgYnJhbmRlZCBoZWFkZXIgb3B0aW9ucyB3aXRoIGZhbGxiYWNrIHNlc3Npb24gY29udGV4dCBkYXRhIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUJyYW5kZWRIZWFkZXIoaGVhZGVyPzogQnJhbmRlZEhlYWRlck9wdGlvbnMpOiBCcmFuZGVkSGVhZGVyT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2U/LnNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgaWYgKCFoZWFkZXIgJiYgT2JqZWN0LmtleXMoc2Vzc2lvbikubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb21wYW55TmFtZTpcbiAgICAgICAgaGVhZGVyPy5jb21wYW55TmFtZSB8fFxuICAgICAgICAoc2Vzc2lvblsnY29tcGFueU5hbWUnXSBhcyBzdHJpbmcpIHx8XG4gICAgICAgIChzZXNzaW9uWyd0ZW5hbnROYW1lJ10gYXMgc3RyaW5nKSB8fFxuICAgICAgICAoc2Vzc2lvblsnY29tcGFueSddIGFzIHN0cmluZyksXG4gICAgICBicmFuY2hOYW1lOlxuICAgICAgICBoZWFkZXI/LmJyYW5jaE5hbWUgfHxcbiAgICAgICAgKHNlc3Npb25bJ2JyYW5jaE5hbWUnXSBhcyBzdHJpbmcpIHx8XG4gICAgICAgIChzZXNzaW9uWydicmFuY2hDb2RlJ10gYXMgc3RyaW5nKSxcbiAgICAgIHJlcG9ydFRpdGxlOiBoZWFkZXI/LnJlcG9ydFRpdGxlLFxuICAgICAgZ2VuZXJhdGVkQXQ6IGhlYWRlcj8uZ2VuZXJhdGVkQXQgfHwgbmV3IERhdGUoKSxcbiAgICAgIGdlbmVyYXRlZEJ5OlxuICAgICAgICBoZWFkZXI/LmdlbmVyYXRlZEJ5IHx8XG4gICAgICAgIChzZXNzaW9uWyd1c2VyTmFtZSddIGFzIHN0cmluZykgfHxcbiAgICAgICAgKHNlc3Npb25bJ3VzZXJJZCddIGFzIHN0cmluZyksXG4gICAgICBhY3RpdmVGaWx0ZXJTdW1tYXJ5OiBoZWFkZXI/LmFjdGl2ZUZpbHRlclN1bW1hcnksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW5kIHRyaWdnZXJzIGJyb3dzZXIgZG93bmxvYWQgb2YgYSBDU1YgZmlsZS5cbiAgICovXG4gIGV4cG9ydENzdihyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCBvcHRpb25zOiBDc3ZFeHBvcnRPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICBpZiAoIXJvd3MgfHwgcm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUud2FybignW2J3YXlzLXJlcG9ydF0gTm8gcm93cyB0byBleHBvcnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBvcHRpb25zLmRlbGltaXRlciA/PyAnLCc7XG4gICAgY29uc3QgaW5jbHVkZUhlYWRlciA9IG9wdGlvbnMuaW5jbHVkZUhlYWRlciAhPT0gZmFsc2U7XG4gICAgY29uc3QgYWRkQm9tID0gb3B0aW9ucy5hZGRCb20gIT09IGZhbHNlO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gb3B0aW9ucy5maWxlTmFtZSB8fCBgcmVwb3J0LWV4cG9ydC0ke0RhdGUubm93KCl9LmNzdmA7XG4gICAgY29uc3QgYnJhbmRlZEhlYWRlciA9IHRoaXMucmVzb2x2ZUJyYW5kZWRIZWFkZXIob3B0aW9ucy5icmFuZGVkSGVhZGVyKTtcblxuICAgIC8vIElmIGNvbHVtbnMgbm90IHByb3ZpZGVkLCBpbmZlciBmcm9tIGZpcnN0IHJvdyBrZXlzXG4gICAgY29uc3QgY29sdW1uczogRXhwb3J0Q29sdW1uW10gPVxuICAgICAgb3B0aW9ucy5jb2x1bW5zICYmIG9wdGlvbnMuY29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgID8gb3B0aW9ucy5jb2x1bW5zXG4gICAgICAgIDogT2JqZWN0LmtleXMocm93c1swXSkubWFwKChrZXkpID0+ICh7XG4gICAgICAgICAgICBmaWVsZDoga2V5LFxuICAgICAgICAgICAgaGVhZGVyOiBrZXksXG4gICAgICAgICAgfSkpO1xuXG4gICAgY29uc3QgY3N2Q29udGVudCA9IGdlbmVyYXRlQ3N2Q29udGVudChcbiAgICAgIHJvd3MsXG4gICAgICBjb2x1bW5zLFxuICAgICAgZGVsaW1pdGVyLFxuICAgICAgaW5jbHVkZUhlYWRlcixcbiAgICAgIGFkZEJvbSxcbiAgICAgIGJyYW5kZWRIZWFkZXJcbiAgICApO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7JyB9KTtcbiAgICB0aGlzLmRvd25sb2FkQmxvYihibG9iLCBmaWxlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuZCB0cmlnZ2VycyBicm93c2VyIGRvd25sb2FkIG9mIGFuIEV4Y2VsIHNwcmVhZHNoZWV0ICgueGxzIFNwcmVhZHNoZWV0TUwpLlxuICAgKi9cbiAgZXhwb3J0RXhjZWwocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgb3B0aW9uczogRXhjZWxFeHBvcnRPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgICBpZiAoIXJvd3MgfHwgcm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUud2FybignW2J3YXlzLXJlcG9ydF0gTm8gcm93cyB0byBleHBvcnQgdG8gRXhjZWwnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYXdOYW1lID0gb3B0aW9ucy5maWxlTmFtZSB8fCBgcmVwb3J0LWV4cG9ydC0ke0RhdGUubm93KCl9YDtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHJhd05hbWUuZW5kc1dpdGgoJy54bHMnKSB8fCByYXdOYW1lLmVuZHNXaXRoKCcueGxzeCcpXG4gICAgICA/IHJhd05hbWVcbiAgICAgIDogYCR7cmF3TmFtZX0ueGxzYDtcbiAgICBjb25zdCBzaGVldE5hbWUgPSBvcHRpb25zLnNoZWV0TmFtZSB8fCAnUmVwb3J0IERhdGEnO1xuICAgIGNvbnN0IGJyYW5kZWRIZWFkZXIgPSB0aGlzLnJlc29sdmVCcmFuZGVkSGVhZGVyKG9wdGlvbnMuYnJhbmRlZEhlYWRlcik7XG5cbiAgICBjb25zdCBjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSA9XG4gICAgICBvcHRpb25zLmNvbHVtbnMgJiYgb3B0aW9ucy5jb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgPyBvcHRpb25zLmNvbHVtbnNcbiAgICAgICAgOiBPYmplY3Qua2V5cyhyb3dzWzBdKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGZpZWxkOiBrZXksXG4gICAgICAgICAgICBoZWFkZXI6IGtleSxcbiAgICAgICAgICB9KSk7XG5cbiAgICBjb25zdCB4bWxDb250ZW50ID0gZ2VuZXJhdGVFeGNlbFhtbChyb3dzLCBjb2x1bW5zLCBzaGVldE5hbWUsIGJyYW5kZWRIZWFkZXIpO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbeG1sQ29udGVudF0sIHtcbiAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWw7Y2hhcnNldD11dGYtODsnLFxuICAgIH0pO1xuICAgIHRoaXMuZG93bmxvYWRCbG9iKGJsb2IsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW5kIHRyaWdnZXJzIGJyb3dzZXIgZG93bmxvYWQgb2YgYSBzdHlsZWQsIHByaW50YWJsZSBIVE1MIHJlcG9ydCBmaWxlLlxuICAgKi9cbiAgZXhwb3J0SHRtbChyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCBvcHRpb25zOiBIdG1sRXhwb3J0T3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgaWYgKCFyb3dzIHx8IHJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tid2F5cy1yZXBvcnRdIE5vIHJvd3MgdG8gZXhwb3J0IHRvIEhUTUwnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlTmFtZSA9IG9wdGlvbnMuZmlsZU5hbWUgfHwgYHJlcG9ydC1leHBvcnQtJHtEYXRlLm5vdygpfS5odG1sYDtcbiAgICBjb25zdCB0aXRsZSA9IG9wdGlvbnMudGl0bGUgfHwgJ1JlcG9ydCBFeHBvcnQnO1xuICAgIGNvbnN0IGJyYW5kZWRIZWFkZXIgPSB0aGlzLnJlc29sdmVCcmFuZGVkSGVhZGVyKG9wdGlvbnMuYnJhbmRlZEhlYWRlcik7XG5cbiAgICBjb25zdCBjb2x1bW5zOiBFeHBvcnRDb2x1bW5bXSA9XG4gICAgICBvcHRpb25zLmNvbHVtbnMgJiYgb3B0aW9ucy5jb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgPyBvcHRpb25zLmNvbHVtbnNcbiAgICAgICAgOiBPYmplY3Qua2V5cyhyb3dzWzBdKS5tYXAoKGtleSkgPT4gKHtcbiAgICAgICAgICAgIGZpZWxkOiBrZXksXG4gICAgICAgICAgICBoZWFkZXI6IGtleSxcbiAgICAgICAgICB9KSk7XG5cbiAgICBjb25zdCBodG1sQ29udGVudCA9IGdlbmVyYXRlSHRtbENvbnRlbnQocm93cywgY29sdW1ucywgdGl0bGUsIGJyYW5kZWRIZWFkZXIpO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbaHRtbENvbnRlbnRdLCB7IHR5cGU6ICd0ZXh0L2h0bWw7Y2hhcnNldD11dGYtODsnIH0pO1xuICAgIHRoaXMuZG93bmxvYWRCbG9iKGJsb2IsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIHByaW50YWJsZSB3aW5kb3cgd2l0aCBicmFuZGVkIHN0eWxpbmcgYW5kIG9wdGlvbmFsbHkgY2FsbHMgd2luZG93LnByaW50KCkuXG4gICAqL1xuICBwcmludFJlcG9ydChyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCBvcHRpb25zOiBIdG1sRXhwb3J0T3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgaWYgKCFyb3dzIHx8IHJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tid2F5cy1yZXBvcnRdIE5vIHJvd3MgdG8gcHJpbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aXRsZSA9IG9wdGlvbnMudGl0bGUgfHwgJ1JlcG9ydCBQcmludCBQcmV2aWV3JztcbiAgICBjb25zdCBicmFuZGVkSGVhZGVyID0gdGhpcy5yZXNvbHZlQnJhbmRlZEhlYWRlcihvcHRpb25zLmJyYW5kZWRIZWFkZXIpO1xuICAgIGNvbnN0IGNvbHVtbnM6IEV4cG9ydENvbHVtbltdID1cbiAgICAgIG9wdGlvbnMuY29sdW1ucyAmJiBvcHRpb25zLmNvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICA/IG9wdGlvbnMuY29sdW1uc1xuICAgICAgICA6IE9iamVjdC5rZXlzKHJvd3NbMF0pLm1hcCgoa2V5KSA9PiAoe1xuICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgIGhlYWRlcjoga2V5LFxuICAgICAgICAgIH0pKTtcblxuICAgIGNvbnN0IGh0bWwgPSBnZW5lcmF0ZUh0bWxDb250ZW50KHJvd3MsIGNvbHVtbnMsIHRpdGxlLCBicmFuZGVkSGVhZGVyKTtcbiAgICBjb25zdCB3aW4gPSB3aW5kb3cub3BlbignJywgJ19ibGFuaycsICd3aWR0aD05MDAsaGVpZ2h0PTcwMCcpO1xuICAgIGlmICh3aW4pIHtcbiAgICAgIHdpbi5kb2N1bWVudC5vcGVuKCk7XG4gICAgICB3aW4uZG9jdW1lbnQud3JpdGUoaHRtbCk7XG4gICAgICB3aW4uZG9jdW1lbnQuY2xvc2UoKTtcbiAgICAgIGlmIChvcHRpb25zLmF1dG9QcmludCAhPT0gZmFsc2UpIHtcbiAgICAgICAgd2luLmZvY3VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gd2luLnByaW50KCksIDI1MCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbmQgdHJpZ2dlcnMgYnJvd3NlciBkb3dubG9hZCBvZiBhIEpTT04gZmlsZS5cbiAgICovXG4gIGV4cG9ydEpzb24oZGF0YTogdW5rbm93biwgb3B0aW9uczogSnNvbkV4cG9ydE9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICAgIGNvbnN0IGZpbGVOYW1lID0gb3B0aW9ucy5maWxlTmFtZSB8fCBgcmVwb3J0LWV4cG9ydC0ke0RhdGUubm93KCl9Lmpzb25gO1xuICAgIGNvbnN0IHByZXR0eSA9IG9wdGlvbnMucHJldHR5ICE9PSBmYWxzZTtcbiAgICBjb25zdCBqc29uU3RyaW5nID0gcHJldHR5ID8gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikgOiBKU09OLnN0cmluZ2lmeShkYXRhKTtcblxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbanNvblN0cmluZ10sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODsnIH0pO1xuICAgIHRoaXMuZG93bmxvYWRCbG9iKGJsb2IsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYWZlIGZpbGUgZG93bmxvYWQgdHJpZ2dlciB2aWEgdGVtcG9yYXJ5IGFuY2hvciB0YWcuXG4gICAqL1xuICBwcml2YXRlIGRvd25sb2FkQmxvYihibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRvY3VtZW50IHx8ICF0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGNvbnN0IGxpbmsgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lO1xuICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgIHRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICBsaW5rLmNsaWNrKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICB9LCAxMDApO1xuICB9XG59XG4iXX0=