@ai-table/grid 0.0.40 → 0.0.41

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 (130) hide show
  1. package/components/cell-editors/select/select-editor.component.d.ts +3 -1
  2. package/components/cell-editors/select/select-editor.component.d.ts.map +1 -1
  3. package/components/context-menu/context-menu.component.d.ts +4 -1
  4. package/components/context-menu/context-menu.component.d.ts.map +1 -1
  5. package/components/drag/drag.component.d.ts +26 -0
  6. package/components/drag/drag.component.d.ts.map +1 -0
  7. package/components/drag/drag.component.scss +19 -0
  8. package/constants/file-icon.d.ts +32 -0
  9. package/constants/file-icon.d.ts.map +1 -0
  10. package/constants/grid.d.ts.map +1 -1
  11. package/constants/icon.d.ts +1 -0
  12. package/constants/icon.d.ts.map +1 -1
  13. package/constants/table.d.ts +4 -0
  14. package/constants/table.d.ts.map +1 -1
  15. package/core/constants/field.d.ts.map +1 -1
  16. package/core/types/ai-table.d.ts +3 -1
  17. package/core/types/ai-table.d.ts.map +1 -1
  18. package/core/types/core.d.ts +33 -2
  19. package/core/types/core.d.ts.map +1 -1
  20. package/core/utils/common.d.ts +3 -3
  21. package/core/utils/common.d.ts.map +1 -1
  22. package/core/utils/field.d.ts.map +1 -1
  23. package/core/utils/queries.d.ts +3 -1
  24. package/core/utils/queries.d.ts.map +1 -1
  25. package/esm2022/components/cell-editors/select/select-editor.component.mjs +22 -21
  26. package/esm2022/components/context-menu/context-menu.component.mjs +17 -5
  27. package/esm2022/components/drag/drag.component.mjs +150 -0
  28. package/esm2022/constants/file-icon.mjs +342 -0
  29. package/esm2022/constants/grid.mjs +2 -1
  30. package/esm2022/constants/icon.mjs +2 -1
  31. package/esm2022/constants/table.mjs +6 -2
  32. package/esm2022/core/constants/field.mjs +7 -1
  33. package/esm2022/core/types/ai-table.mjs +2 -2
  34. package/esm2022/core/types/core.mjs +9 -1
  35. package/esm2022/core/utils/common.mjs +3 -2
  36. package/esm2022/core/utils/field.mjs +8 -3
  37. package/esm2022/core/utils/queries.mjs +19 -13
  38. package/esm2022/grid-base.component.mjs +5 -3
  39. package/esm2022/grid.component.mjs +90 -4
  40. package/esm2022/renderer/components/field-icon.component.mjs +5 -2
  41. package/esm2022/renderer/creations/create-heads.mjs +5 -5
  42. package/esm2022/renderer/drawers/cell-drawer.mjs +74 -2
  43. package/esm2022/renderer/drawers/drawer.mjs +11 -2
  44. package/esm2022/services/event.service.mjs +12 -5
  45. package/esm2022/services/selection.service.mjs +22 -3
  46. package/esm2022/types/clipboard.mjs +2 -0
  47. package/esm2022/types/grid.mjs +1 -1
  48. package/esm2022/types/index.mjs +2 -1
  49. package/esm2022/types/row.mjs +1 -1
  50. package/esm2022/utils/clipboard/clipboard.mjs +77 -0
  51. package/esm2022/utils/clipboard/copy.mjs +92 -0
  52. package/esm2022/utils/clipboard/extract.mjs +19 -0
  53. package/esm2022/utils/clipboard/index.mjs +5 -0
  54. package/esm2022/utils/clipboard/paste.mjs +180 -0
  55. package/esm2022/utils/field/model/attachment.mjs +63 -0
  56. package/esm2022/utils/field/model/date.mjs +45 -2
  57. package/esm2022/utils/field/model/field.mjs +1 -1
  58. package/esm2022/utils/field/model/index.mjs +5 -3
  59. package/esm2022/utils/field/model/link.mjs +25 -1
  60. package/esm2022/utils/field/model/member.mjs +40 -1
  61. package/esm2022/utils/field/model/number.mjs +31 -1
  62. package/esm2022/utils/field/model/progress.mjs +34 -1
  63. package/esm2022/utils/field/model/rate.mjs +35 -1
  64. package/esm2022/utils/field/model/select.mjs +64 -1
  65. package/esm2022/utils/field/model/text.mjs +7 -1
  66. package/esm2022/utils/file.mjs +208 -0
  67. package/esm2022/utils/icon.mjs +48 -0
  68. package/esm2022/utils/index.mjs +2 -1
  69. package/esm2022/utils/match-keywords.mjs +3 -3
  70. package/fesm2022/ai-table-grid.mjs +2131 -433
  71. package/fesm2022/ai-table-grid.mjs.map +1 -1
  72. package/grid-base.component.d.ts +4 -2
  73. package/grid-base.component.d.ts.map +1 -1
  74. package/grid.component.d.ts +6 -1
  75. package/grid.component.d.ts.map +1 -1
  76. package/package.json +1 -1
  77. package/renderer/components/field-icon.component.d.ts.map +1 -1
  78. package/renderer/drawers/cell-drawer.d.ts +1 -0
  79. package/renderer/drawers/cell-drawer.d.ts.map +1 -1
  80. package/renderer/drawers/drawer.d.ts.map +1 -1
  81. package/services/event.service.d.ts.map +1 -1
  82. package/services/selection.service.d.ts +5 -1
  83. package/services/selection.service.d.ts.map +1 -1
  84. package/styles/styles.scss +2 -0
  85. package/types/clipboard.d.ts +5 -0
  86. package/types/clipboard.d.ts.map +1 -0
  87. package/types/grid.d.ts +22 -5
  88. package/types/grid.d.ts.map +1 -1
  89. package/types/index.d.ts +1 -0
  90. package/types/index.d.ts.map +1 -1
  91. package/types/row.d.ts +3 -1
  92. package/types/row.d.ts.map +1 -1
  93. package/utils/clipboard/clipboard.d.ts +8 -0
  94. package/utils/clipboard/clipboard.d.ts.map +1 -0
  95. package/utils/clipboard/copy.d.ts +5 -0
  96. package/utils/clipboard/copy.d.ts.map +1 -0
  97. package/utils/clipboard/extract.d.ts +3 -0
  98. package/utils/clipboard/extract.d.ts.map +1 -0
  99. package/utils/clipboard/index.d.ts +5 -0
  100. package/utils/clipboard/index.d.ts.map +1 -0
  101. package/utils/clipboard/paste.d.ts +10 -0
  102. package/utils/clipboard/paste.d.ts.map +1 -0
  103. package/utils/field/model/attachment.d.ts +17 -0
  104. package/utils/field/model/attachment.d.ts.map +1 -0
  105. package/utils/field/model/date.d.ts +9 -1
  106. package/utils/field/model/date.d.ts.map +1 -1
  107. package/utils/field/model/field.d.ts +4 -0
  108. package/utils/field/model/field.d.ts.map +1 -1
  109. package/utils/field/model/index.d.ts +1 -1
  110. package/utils/field/model/index.d.ts.map +1 -1
  111. package/utils/field/model/link.d.ts +9 -1
  112. package/utils/field/model/link.d.ts.map +1 -1
  113. package/utils/field/model/member.d.ts +8 -0
  114. package/utils/field/model/member.d.ts.map +1 -1
  115. package/utils/field/model/number.d.ts +9 -1
  116. package/utils/field/model/number.d.ts.map +1 -1
  117. package/utils/field/model/progress.d.ts +9 -1
  118. package/utils/field/model/progress.d.ts.map +1 -1
  119. package/utils/field/model/rate.d.ts +9 -1
  120. package/utils/field/model/rate.d.ts.map +1 -1
  121. package/utils/field/model/select.d.ts +16 -1
  122. package/utils/field/model/select.d.ts.map +1 -1
  123. package/utils/field/model/text.d.ts +2 -0
  124. package/utils/field/model/text.d.ts.map +1 -1
  125. package/utils/file.d.ts +11 -0
  126. package/utils/file.d.ts.map +1 -0
  127. package/utils/icon.d.ts +19 -0
  128. package/utils/icon.d.ts.map +1 -0
  129. package/utils/index.d.ts +1 -0
  130. package/utils/index.d.ts.map +1 -1
@@ -1,5 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
2
- import { ColumnCalendarFilledPath, ColumnLinkOutlinedPath, ColumnMemberFilledPath, ColumnMultipleFillPath, ColumnNumberFilledPath, ColumnProgressFilledPath, ColumnRatingFilledPath, ColumnSelectFilledPath, ColumnTextFilledPath } from '../../constants';
2
+ import { AttachmentPath, ColumnCalendarFilledPath, ColumnLinkOutlinedPath, ColumnMemberFilledPath, ColumnMultipleFillPath, ColumnNumberFilledPath, ColumnProgressFilledPath, ColumnRatingFilledPath, ColumnSelectFilledPath, ColumnTextFilledPath } from '../../constants';
3
3
  import { AITableFieldType } from '../../core';
4
4
  import { AITableIcon } from './icon.component';
5
5
  import * as i0 from "@angular/core";
@@ -38,6 +38,9 @@ export class AITableFieldIcon {
38
38
  case AITableFieldType.progress:
39
39
  data = ColumnProgressFilledPath;
40
40
  break;
41
+ case AITableFieldType.attachment:
42
+ data = AttachmentPath;
43
+ break;
41
44
  }
42
45
  return {
43
46
  x,
@@ -63,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
63
66
  changeDetection: ChangeDetectionStrategy.OnPush
64
67
  }]
65
68
  }] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2ZpZWxkLWljb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQ0gsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDdkIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsZ0JBQWdCLEVBQWtCLE1BQU0sWUFBWSxDQUFDO0FBRTlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFTL0MsTUFBTSxPQUFPLGdCQUFnQjtJQVA3QjtRQVFJLFdBQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUE4QixDQUFDO1FBRXRELGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7WUFDaEIsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pCLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtvQkFDdEIsSUFBSSxHQUFHLG9CQUFvQixDQUFDO29CQUM1QixNQUFNO2dCQUNWLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtvQkFDeEIsSUFBSSxHQUFJLEtBQUssQ0FBQyxRQUEyQixFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDO29CQUN6RyxNQUFNO2dCQUNWLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDO2dCQUMzQixLQUFLLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztnQkFDaEMsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO29CQUMzQixJQUFJLEdBQUcsd0JBQXdCLENBQUM7b0JBQ2hDLE1BQU07Z0JBQ1YsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNO29CQUN4QixJQUFJLEdBQUcsc0JBQXNCLENBQUM7b0JBQzlCLE1BQU07Z0JBQ1YsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO29CQUN0QixJQUFJLEdBQUcsc0JBQXNCLENBQUM7b0JBQzlCLE1BQU07Z0JBQ1YsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJO29CQUN0QixJQUFJLEdBQUcsc0JBQXNCLENBQUM7b0JBQzlCLE1BQU07Z0JBQ1YsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7Z0JBQzdCLEtBQUssZ0JBQWdCLENBQUMsU0FBUyxDQUFDO2dCQUNoQyxLQUFLLGdCQUFnQixDQUFDLFNBQVM7b0JBQzNCLElBQUksR0FBRyxzQkFBc0IsQ0FBQztvQkFDOUIsTUFBTTtnQkFDVixLQUFLLGdCQUFnQixDQUFDLFFBQVE7b0JBQzFCLElBQUksR0FBRyx3QkFBd0IsQ0FBQztvQkFDaEMsTUFBTTtZQUNkLENBQUM7WUFDRCxPQUFPO2dCQUNILENBQUM7Z0JBQ0QsQ0FBQztnQkFDRCxJQUFJLEVBQUUsS0FBSztnQkFDWCxnQkFBZ0IsRUFBRSxNQUFNO2dCQUN4QixTQUFTLEVBQUUsS0FBSztnQkFDaEIsSUFBSTtnQkFDSixJQUFJO2FBQ1AsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0tBQ047K0dBOUNZLGdCQUFnQjttR0FBaEIsZ0JBQWdCLHFOQUxmLDJEQUEyRCw0REFFM0QsV0FBVzs7NEZBR1osZ0JBQWdCO2tCQVA1QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRSwyREFBMkQ7b0JBQ3JFLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUM7b0JBQ3RCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW5DYWxlbmRhckZpbGxlZFBhdGgsXG4gICAgQ29sdW1uTGlua091dGxpbmVkUGF0aCxcbiAgICBDb2x1bW5NZW1iZXJGaWxsZWRQYXRoLFxuICAgIENvbHVtbk11bHRpcGxlRmlsbFBhdGgsXG4gICAgQ29sdW1uTnVtYmVyRmlsbGVkUGF0aCxcbiAgICBDb2x1bW5Qcm9ncmVzc0ZpbGxlZFBhdGgsXG4gICAgQ29sdW1uUmF0aW5nRmlsbGVkUGF0aCxcbiAgICBDb2x1bW5TZWxlY3RGaWxsZWRQYXRoLFxuICAgIENvbHVtblRleHRGaWxsZWRQYXRoXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRUeXBlLCBTZWxlY3RTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkVHlwZUljb25Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBBSVRhYmxlSWNvbiB9IGZyb20gJy4vaWNvbi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWZpZWxkLWljb24nLFxuICAgIHRlbXBsYXRlOiBgIDxhaS10YWJsZS1pY29uIFtjb25maWddPVwiaWNvbkNvbmZpZygpXCI+PC9haS10YWJsZS1pY29uPiBgLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0FJVGFibGVJY29uXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlRmllbGRJY29uIHtcbiAgICBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxBSVRhYmxlRmllbGRUeXBlSWNvbkNvbmZpZz4oKTtcblxuICAgIGljb25Db25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZpbGwgfSA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIGxldCBkYXRhID0gbnVsbDtcbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudGV4dDpcbiAgICAgICAgICAgICAgICBkYXRhID0gQ29sdW1uVGV4dEZpbGxlZFBhdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuc2VsZWN0OlxuICAgICAgICAgICAgICAgIGRhdGEgPSAoZmllbGQuc2V0dGluZ3MgYXMgU2VsZWN0U2V0dGluZ3MpPy5pc19tdWx0aXBsZSA/IENvbHVtbk11bHRpcGxlRmlsbFBhdGggOiBDb2x1bW5TZWxlY3RGaWxsZWRQYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmRhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRBdDpcbiAgICAgICAgICAgICAgICBkYXRhID0gQ29sdW1uQ2FsZW5kYXJGaWxsZWRQYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm51bWJlcjpcbiAgICAgICAgICAgICAgICBkYXRhID0gQ29sdW1uTnVtYmVyRmlsbGVkUGF0aDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5saW5rOlxuICAgICAgICAgICAgICAgIGRhdGEgPSBDb2x1bW5MaW5rT3V0bGluZWRQYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnJhdGU6XG4gICAgICAgICAgICAgICAgZGF0YSA9IENvbHVtblJhdGluZ0ZpbGxlZFBhdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubWVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRCeTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnk6XG4gICAgICAgICAgICAgICAgZGF0YSA9IENvbHVtbk1lbWJlckZpbGxlZFBhdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgZGF0YSA9IENvbHVtblByb2dyZXNzRmlsbGVkUGF0aDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeCxcbiAgICAgICAgICAgIHksXG4gICAgICAgICAgICBzaXplOiB3aWR0aCxcbiAgICAgICAgICAgIGJhY2tncm91bmRIZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgIGxpc3RlbmluZzogZmFsc2UsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZmlsbFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuIl19
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2ZpZWxkLWljb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQ0gsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3ZCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGdCQUFnQixFQUFrQixNQUFNLFlBQVksQ0FBQztBQUU5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBUy9DLE1BQU0sT0FBTyxnQkFBZ0I7SUFQN0I7UUFRSSxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBOEIsQ0FBQztRQUV0RCxlQUFVLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN2QixNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqQixLQUFLLGdCQUFnQixDQUFDLElBQUk7b0JBQ3RCLElBQUksR0FBRyxvQkFBb0IsQ0FBQztvQkFDNUIsTUFBTTtnQkFDVixLQUFLLGdCQUFnQixDQUFDLE1BQU07b0JBQ3hCLElBQUksR0FBSSxLQUFLLENBQUMsUUFBMkIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDekcsTUFBTTtnQkFDVixLQUFLLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDM0IsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hDLEtBQUssZ0JBQWdCLENBQUMsU0FBUztvQkFDM0IsSUFBSSxHQUFHLHdCQUF3QixDQUFDO29CQUNoQyxNQUFNO2dCQUNWLEtBQUssZ0JBQWdCLENBQUMsTUFBTTtvQkFDeEIsSUFBSSxHQUFHLHNCQUFzQixDQUFDO29CQUM5QixNQUFNO2dCQUNWLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtvQkFDdEIsSUFBSSxHQUFHLHNCQUFzQixDQUFDO29CQUM5QixNQUFNO2dCQUNWLEtBQUssZ0JBQWdCLENBQUMsSUFBSTtvQkFDdEIsSUFBSSxHQUFHLHNCQUFzQixDQUFDO29CQUM5QixNQUFNO2dCQUNWLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxDQUFDO2dCQUM3QixLQUFLLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztnQkFDaEMsS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTO29CQUMzQixJQUFJLEdBQUcsc0JBQXNCLENBQUM7b0JBQzlCLE1BQU07Z0JBQ1YsS0FBSyxnQkFBZ0IsQ0FBQyxRQUFRO29CQUMxQixJQUFJLEdBQUcsd0JBQXdCLENBQUM7b0JBQ2hDLE1BQU07Z0JBQ1YsS0FBSyxnQkFBZ0IsQ0FBQyxVQUFVO29CQUM1QixJQUFJLEdBQUcsY0FBYyxDQUFDO29CQUN0QixNQUFNO1lBQ2QsQ0FBQztZQUNELE9BQU87Z0JBQ0gsQ0FBQztnQkFDRCxDQUFDO2dCQUNELElBQUksRUFBRSxLQUFLO2dCQUNYLGdCQUFnQixFQUFFLE1BQU07Z0JBQ3hCLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixJQUFJO2dCQUNKLElBQUk7YUFDUCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7S0FDTjsrR0FqRFksZ0JBQWdCO21HQUFoQixnQkFBZ0IscU5BTGYsMkRBQTJELDREQUUzRCxXQUFXOzs0RkFHWixnQkFBZ0I7a0JBUDVCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFLDJEQUEyRDtvQkFDckUsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDdEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2xEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEF0dGFjaG1lbnRQYXRoLFxuICAgIENvbHVtbkNhbGVuZGFyRmlsbGVkUGF0aCxcbiAgICBDb2x1bW5MaW5rT3V0bGluZWRQYXRoLFxuICAgIENvbHVtbk1lbWJlckZpbGxlZFBhdGgsXG4gICAgQ29sdW1uTXVsdGlwbGVGaWxsUGF0aCxcbiAgICBDb2x1bW5OdW1iZXJGaWxsZWRQYXRoLFxuICAgIENvbHVtblByb2dyZXNzRmlsbGVkUGF0aCxcbiAgICBDb2x1bW5SYXRpbmdGaWxsZWRQYXRoLFxuICAgIENvbHVtblNlbGVjdEZpbGxlZFBhdGgsXG4gICAgQ29sdW1uVGV4dEZpbGxlZFBhdGhcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFJVGFibGVGaWVsZFR5cGUsIFNlbGVjdFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRUeXBlSWNvbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEFJVGFibGVJY29uIH0gZnJvbSAnLi9pY29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtZmllbGQtaWNvbicsXG4gICAgdGVtcGxhdGU6IGAgPGFpLXRhYmxlLWljb24gW2NvbmZpZ109XCJpY29uQ29uZmlnKClcIj48L2FpLXRhYmxlLWljb24+IGAsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQUlUYWJsZUljb25dLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVGaWVsZEljb24ge1xuICAgIGNvbmZpZyA9IGlucHV0LnJlcXVpcmVkPEFJVGFibGVGaWVsZFR5cGVJY29uQ29uZmlnPigpO1xuXG4gICAgaWNvbkNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZmlsbCB9ID0gdGhpcy5jb25maWcoKTtcbiAgICAgICAgbGV0IGRhdGEgPSBudWxsO1xuICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS50ZXh0OlxuICAgICAgICAgICAgICAgIGRhdGEgPSBDb2x1bW5UZXh0RmlsbGVkUGF0aDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5zZWxlY3Q6XG4gICAgICAgICAgICAgICAgZGF0YSA9IChmaWVsZC5zZXR0aW5ncyBhcyBTZWxlY3RTZXR0aW5ncyk/LmlzX211bHRpcGxlID8gQ29sdW1uTXVsdGlwbGVGaWxsUGF0aCA6IENvbHVtblNlbGVjdEZpbGxlZFBhdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0OlxuICAgICAgICAgICAgICAgIGRhdGEgPSBDb2x1bW5DYWxlbmRhckZpbGxlZFBhdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubnVtYmVyOlxuICAgICAgICAgICAgICAgIGRhdGEgPSBDb2x1bW5OdW1iZXJGaWxsZWRQYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmxpbms6XG4gICAgICAgICAgICAgICAgZGF0YSA9IENvbHVtbkxpbmtPdXRsaW5lZFBhdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucmF0ZTpcbiAgICAgICAgICAgICAgICBkYXRhID0gQ29sdW1uUmF0aW5nRmlsbGVkUGF0aDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5tZW1iZXI6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEJ5OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRCeTpcbiAgICAgICAgICAgICAgICBkYXRhID0gQ29sdW1uTWVtYmVyRmlsbGVkUGF0aDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5wcm9ncmVzczpcbiAgICAgICAgICAgICAgICBkYXRhID0gQ29sdW1uUHJvZ3Jlc3NGaWxsZWRQYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmF0dGFjaG1lbnQ6XG4gICAgICAgICAgICAgICAgZGF0YSA9IEF0dGFjaG1lbnRQYXRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgeSxcbiAgICAgICAgICAgIHNpemU6IHdpZHRoLFxuICAgICAgICAgICAgYmFja2dyb3VuZEhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgICAgbGlzdGVuaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBmaWxsXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iXX0=
@@ -4,10 +4,10 @@ export const createColumnHeads = (config) => {
4
4
  const colors = Colors;
5
5
  const { columnCount, rowInitSize: fieldHeadHeight } = coordinate;
6
6
  const { columnIndex: pointColumnIndex, targetName: pointTargetName } = pointPosition;
7
- const { fields } = aiTable;
7
+ const fields = aiTable.gridData().fields;
8
8
  const getFieldHeadStatus = (fieldId) => {
9
- const iconVisible = [AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_MORE].includes(pointTargetName) && fields()[pointColumnIndex]?._id === fieldId;
10
- const isHoverIcon = pointTargetName === AI_TABLE_FIELD_HEAD_MORE && fields()[pointColumnIndex]?._id === fieldId;
9
+ const iconVisible = [AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_MORE].includes(pointTargetName) && fields[pointColumnIndex]?._id === fieldId;
10
+ const isHoverIcon = pointTargetName === AI_TABLE_FIELD_HEAD_MORE && fields[pointColumnIndex]?._id === fieldId;
11
11
  const isSelected = aiTable.selection().selectedFields.has(fieldId);
12
12
  return {
13
13
  iconVisible,
@@ -26,7 +26,7 @@ export const createColumnHeads = (config) => {
26
26
  break;
27
27
  if (columnIndex < 0)
28
28
  continue;
29
- const field = fields()[columnIndex];
29
+ const field = fields[columnIndex];
30
30
  if (field == null)
31
31
  continue;
32
32
  const x = coordinate.getColumnOffset(columnIndex);
@@ -47,4 +47,4 @@ export const createColumnHeads = (config) => {
47
47
  }
48
48
  return fieldHeads;
49
49
  };
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWhlYWRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvY3JlYXRpb25zL2NyZWF0ZS1oZWFkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHeEYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFnQyxFQUFFLEVBQUU7SUFDbEUsTUFBTSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUN6RixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdEIsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEdBQUcsVUFBVSxDQUFDO0lBQ2pFLE1BQU0sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxHQUFHLGFBQWEsQ0FBQztJQUNyRixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTNCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtRQUMzQyxNQUFNLFdBQVcsR0FDYixDQUFDLG1CQUFtQixFQUFFLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxLQUFLLE9BQU8sQ0FBQztRQUM3SCxNQUFNLFdBQVcsR0FBRyxlQUFlLEtBQUssd0JBQXdCLElBQUksTUFBTSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxHQUFHLEtBQUssT0FBTyxDQUFDO1FBQ2hILE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25FLE9BQU87WUFDSCxXQUFXO1lBQ1gsVUFBVTtZQUNWLFdBQVc7U0FDZCxDQUFDO0lBQ04sQ0FBQyxDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQTZCLEVBQUUsQ0FBQztJQUNoRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO0lBQzdFLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztJQUN2QixJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDMUIsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBQ0QsS0FBSyxJQUFJLFdBQVcsR0FBRyxnQkFBZ0IsRUFBRSxXQUFXLElBQUksZUFBZSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDckYsSUFBSSxXQUFXLEdBQUcsV0FBVyxHQUFHLENBQUM7WUFBRSxNQUFNO1FBQ3pDLElBQUksV0FBVyxHQUFHLENBQUM7WUFBRSxTQUFTO1FBQzlCLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksS0FBSyxJQUFJLElBQUk7WUFBRSxTQUFTO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRCxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0UsTUFBTSxTQUFTLEdBQUc7WUFDZCxDQUFDO1lBQ0QsQ0FBQyxFQUFFLENBQUM7WUFDSixLQUFLLEVBQUUsV0FBVztZQUNsQixNQUFNLEVBQUUsZUFBZTtZQUN2QixLQUFLO1lBQ0wsTUFBTSxFQUFFLFdBQVcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDMUQsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQzdDLFVBQVU7WUFDVixXQUFXO1NBQ2QsQ0FBQztRQUVGLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFJX1RBQkxFX0ZJRUxEX0hFQUQsIEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSwgQ29sb3JzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFJVGFibGVDb2x1bW5IZWFkc0NvbmZpZywgQUlUYWJsZUZpZWxkSGVhZENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbHVtbkhlYWRzID0gKGNvbmZpZzogQUlUYWJsZUNvbHVtbkhlYWRzQ29uZmlnKSA9PiB7XG4gICAgY29uc3QgeyBjb29yZGluYXRlLCBjb2x1bW5TdGFydEluZGV4LCBjb2x1bW5TdG9wSW5kZXgsIHBvaW50UG9zaXRpb24sIGFpVGFibGUgfSA9IGNvbmZpZztcbiAgICBjb25zdCBjb2xvcnMgPSBDb2xvcnM7XG4gICAgY29uc3QgeyBjb2x1bW5Db3VudCwgcm93SW5pdFNpemU6IGZpZWxkSGVhZEhlaWdodCB9ID0gY29vcmRpbmF0ZTtcbiAgICBjb25zdCB7IGNvbHVtbkluZGV4OiBwb2ludENvbHVtbkluZGV4LCB0YXJnZXROYW1lOiBwb2ludFRhcmdldE5hbWUgfSA9IHBvaW50UG9zaXRpb247XG4gICAgY29uc3QgeyBmaWVsZHMgfSA9IGFpVGFibGU7XG5cbiAgICBjb25zdCBnZXRGaWVsZEhlYWRTdGF0dXMgPSAoZmllbGRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGljb25WaXNpYmxlID1cbiAgICAgICAgICAgIFtBSV9UQUJMRV9GSUVMRF9IRUFELCBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkVdLmluY2x1ZGVzKHBvaW50VGFyZ2V0TmFtZSkgJiYgZmllbGRzKClbcG9pbnRDb2x1bW5JbmRleF0/Ll9pZCA9PT0gZmllbGRJZDtcbiAgICAgICAgY29uc3QgaXNIb3Zlckljb24gPSBwb2ludFRhcmdldE5hbWUgPT09IEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSAmJiBmaWVsZHMoKVtwb2ludENvbHVtbkluZGV4XT8uX2lkID09PSBmaWVsZElkO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZEZpZWxkcy5oYXMoZmllbGRJZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpY29uVmlzaWJsZSxcbiAgICAgICAgICAgIGlzU2VsZWN0ZWQsXG4gICAgICAgICAgICBpc0hvdmVySWNvblxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBmaWVsZEhlYWRzOiBBSVRhYmxlRmllbGRIZWFkQ29uZmlnW10gPSBbXTtcbiAgICBjb25zdCBmaWVsZE1lbnVzID0gY29uZmlnLmFpVGFibGUuY29udGV4dD8uYWlGaWVsZENvbmZpZygpPy5maWVsZE1lbnVzIHx8IFtdO1xuICAgIGxldCBub01vcmVJY29uID0gZmFsc2U7XG4gICAgaWYgKGZpZWxkTWVudXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIG5vTW9yZUljb24gPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGxldCBjb2x1bW5JbmRleCA9IGNvbHVtblN0YXJ0SW5kZXg7IGNvbHVtbkluZGV4IDw9IGNvbHVtblN0b3BJbmRleDsgY29sdW1uSW5kZXgrKykge1xuICAgICAgICBpZiAoY29sdW1uSW5kZXggPiBjb2x1bW5Db3VudCAtIDEpIGJyZWFrO1xuICAgICAgICBpZiAoY29sdW1uSW5kZXggPCAwKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBmaWVsZHMoKVtjb2x1bW5JbmRleF07XG4gICAgICAgIGlmIChmaWVsZCA9PSBudWxsKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgeCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uT2Zmc2V0KGNvbHVtbkluZGV4KTtcbiAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBjb29yZGluYXRlLmdldENvbHVtbldpZHRoKGNvbHVtbkluZGV4KTtcbiAgICAgICAgY29uc3QgeyBpY29uVmlzaWJsZSwgaXNTZWxlY3RlZCwgaXNIb3Zlckljb24gfSA9IGdldEZpZWxkSGVhZFN0YXR1cyhmaWVsZC5faWQpO1xuICAgICAgICBjb25zdCBmaWVsZEhlYWQgPSB7XG4gICAgICAgICAgICB4LFxuICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgIHdpZHRoOiBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogZmllbGRIZWFkSGVpZ2h0LFxuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBzdHJva2U6IGNvbHVtbkluZGV4ID09PSAwID8gY29sb3JzLnRyYW5zcGFyZW50IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgaWNvblZpc2libGU6IG5vTW9yZUljb24gPyBmYWxzZSA6IGljb25WaXNpYmxlLFxuICAgICAgICAgICAgaXNTZWxlY3RlZCxcbiAgICAgICAgICAgIGlzSG92ZXJJY29uXG4gICAgICAgIH07XG5cbiAgICAgICAgZmllbGRIZWFkcy5wdXNoKGZpZWxkSGVhZCk7XG4gICAgfVxuICAgIHJldHVybiBmaWVsZEhlYWRzO1xufTtcbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWhlYWRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvY3JlYXRpb25zL2NyZWF0ZS1oZWFkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHeEYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxNQUFnQyxFQUFFLEVBQUU7SUFDbEUsTUFBTSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUN6RixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdEIsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEdBQUcsVUFBVSxDQUFDO0lBQ2pFLE1BQU0sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxHQUFHLGFBQWEsQ0FBQztJQUNyRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDO0lBRXpDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRTtRQUMzQyxNQUFNLFdBQVcsR0FDYixDQUFDLG1CQUFtQixFQUFFLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsS0FBSyxPQUFPLENBQUM7UUFDM0gsTUFBTSxXQUFXLEdBQUcsZUFBZSxLQUFLLHdCQUF3QixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsS0FBSyxPQUFPLENBQUM7UUFDOUcsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkUsT0FBTztZQUNILFdBQVc7WUFDWCxVQUFVO1lBQ1YsV0FBVztTQUNkLENBQUM7SUFDTixDQUFDLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBNkIsRUFBRSxDQUFDO0lBQ2hELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUM7SUFDN0UsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxLQUFLLElBQUksV0FBVyxHQUFHLGdCQUFnQixFQUFFLFdBQVcsSUFBSSxlQUFlLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUNyRixJQUFJLFdBQVcsR0FBRyxXQUFXLEdBQUcsQ0FBQztZQUFFLE1BQU07UUFDekMsSUFBSSxXQUFXLEdBQUcsQ0FBQztZQUFFLFNBQVM7UUFDOUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxJQUFJLElBQUk7WUFBRSxTQUFTO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRCxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0UsTUFBTSxTQUFTLEdBQUc7WUFDZCxDQUFDO1lBQ0QsQ0FBQyxFQUFFLENBQUM7WUFDSixLQUFLLEVBQUUsV0FBVztZQUNsQixNQUFNLEVBQUUsZUFBZTtZQUN2QixLQUFLO1lBQ0wsTUFBTSxFQUFFLFdBQVcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDMUQsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXO1lBQzdDLFVBQVU7WUFDVixXQUFXO1NBQ2QsQ0FBQztRQUVGLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFJX1RBQkxFX0ZJRUxEX0hFQUQsIEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSwgQ29sb3JzIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFJVGFibGVDb2x1bW5IZWFkc0NvbmZpZywgQUlUYWJsZUZpZWxkSGVhZENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbHVtbkhlYWRzID0gKGNvbmZpZzogQUlUYWJsZUNvbHVtbkhlYWRzQ29uZmlnKSA9PiB7XG4gICAgY29uc3QgeyBjb29yZGluYXRlLCBjb2x1bW5TdGFydEluZGV4LCBjb2x1bW5TdG9wSW5kZXgsIHBvaW50UG9zaXRpb24sIGFpVGFibGUgfSA9IGNvbmZpZztcbiAgICBjb25zdCBjb2xvcnMgPSBDb2xvcnM7XG4gICAgY29uc3QgeyBjb2x1bW5Db3VudCwgcm93SW5pdFNpemU6IGZpZWxkSGVhZEhlaWdodCB9ID0gY29vcmRpbmF0ZTtcbiAgICBjb25zdCB7IGNvbHVtbkluZGV4OiBwb2ludENvbHVtbkluZGV4LCB0YXJnZXROYW1lOiBwb2ludFRhcmdldE5hbWUgfSA9IHBvaW50UG9zaXRpb247XG4gICAgY29uc3QgZmllbGRzID0gYWlUYWJsZS5ncmlkRGF0YSgpLmZpZWxkcztcblxuICAgIGNvbnN0IGdldEZpZWxkSGVhZFN0YXR1cyA9IChmaWVsZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgaWNvblZpc2libGUgPVxuICAgICAgICAgICAgW0FJX1RBQkxFX0ZJRUxEX0hFQUQsIEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRV0uaW5jbHVkZXMocG9pbnRUYXJnZXROYW1lKSAmJiBmaWVsZHNbcG9pbnRDb2x1bW5JbmRleF0/Ll9pZCA9PT0gZmllbGRJZDtcbiAgICAgICAgY29uc3QgaXNIb3Zlckljb24gPSBwb2ludFRhcmdldE5hbWUgPT09IEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSAmJiBmaWVsZHNbcG9pbnRDb2x1bW5JbmRleF0/Ll9pZCA9PT0gZmllbGRJZDtcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRGaWVsZHMuaGFzKGZpZWxkSWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWNvblZpc2libGUsXG4gICAgICAgICAgICBpc1NlbGVjdGVkLFxuICAgICAgICAgICAgaXNIb3Zlckljb25cbiAgICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgZmllbGRIZWFkczogQUlUYWJsZUZpZWxkSGVhZENvbmZpZ1tdID0gW107XG4gICAgY29uc3QgZmllbGRNZW51cyA9IGNvbmZpZy5haVRhYmxlLmNvbnRleHQ/LmFpRmllbGRDb25maWcoKT8uZmllbGRNZW51cyB8fCBbXTtcbiAgICBsZXQgbm9Nb3JlSWNvbiA9IGZhbHNlO1xuICAgIGlmIChmaWVsZE1lbnVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBub01vcmVJY29uID0gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4OyBjb2x1bW5JbmRleCA8PSBjb2x1bW5TdG9wSW5kZXg7IGNvbHVtbkluZGV4KyspIHtcbiAgICAgICAgaWYgKGNvbHVtbkluZGV4ID4gY29sdW1uQ291bnQgLSAxKSBicmVhaztcbiAgICAgICAgaWYgKGNvbHVtbkluZGV4IDwgMCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2NvbHVtbkluZGV4XTtcbiAgICAgICAgaWYgKGZpZWxkID09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCB4ID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoY29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoY29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCB7IGljb25WaXNpYmxlLCBpc1NlbGVjdGVkLCBpc0hvdmVySWNvbiB9ID0gZ2V0RmllbGRIZWFkU3RhdHVzKGZpZWxkLl9pZCk7XG4gICAgICAgIGNvbnN0IGZpZWxkSGVhZCA9IHtcbiAgICAgICAgICAgIHgsXG4gICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgd2lkdGg6IGNvbHVtbldpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiBmaWVsZEhlYWRIZWlnaHQsXG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIHN0cm9rZTogY29sdW1uSW5kZXggPT09IDAgPyBjb2xvcnMudHJhbnNwYXJlbnQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBpY29uVmlzaWJsZTogbm9Nb3JlSWNvbiA/IGZhbHNlIDogaWNvblZpc2libGUsXG4gICAgICAgICAgICBpc1NlbGVjdGVkLFxuICAgICAgICAgICAgaXNIb3Zlckljb25cbiAgICAgICAgfTtcblxuICAgICAgICBmaWVsZEhlYWRzLnB1c2goZmllbGRIZWFkKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkSGVhZHM7XG59O1xuIl19
@@ -1,10 +1,11 @@
1
1
  import _, { isNil } from 'lodash';
2
- import { AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET, AI_TABLE_CELL_EMOJI_PADDING, AI_TABLE_CELL_EMOJI_SIZE, AI_TABLE_CELL_MAX_ROW_COUNT, AI_TABLE_CELL_MEMBER_ITEM_HEIGHT, AI_TABLE_CELL_MEMBER_ITEM_PADDING, AI_TABLE_CELL_MULTI_DOT_RADIUS, AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP, AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH, AI_TABLE_CELL_MULTI_PADDING_LEFT, AI_TABLE_CELL_MULTI_PADDING_TOP, AI_TABLE_CELL_PADDING, AI_TABLE_COMMON_FONT_SIZE, AI_TABLE_DOT_RADIUS, AI_TABLE_MEMBER_AVATAR_SIZE, AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT, AI_TABLE_MIN_TEXT_WIDTH, AI_TABLE_OFFSET, AI_TABLE_OPTION_ITEM_FONT_SIZE, AI_TABLE_OPTION_ITEM_HEIGHT, AI_TABLE_OPTION_ITEM_PADDING, AI_TABLE_OPTION_ITEM_RADIUS, AI_TABLE_PIECE_RADIUS, AI_TABLE_PIECE_WIDTH, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_TEXT_Width, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_TAG_FONT_SIZE, AI_TABLE_TAG_PADDING, AI_TABLE_TEXT_GAP, Colors, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_FONT_WEIGHT, DEFAULT_TEXT_ALIGN_LEFT, DEFAULT_TEXT_ALIGN_RIGHT, DEFAULT_TEXT_DECORATION, DEFAULT_TEXT_LINE_HEIGHT, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE, FONT_SIZE_SM, StarFill } from '../../constants';
2
+ import { AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET, AI_TABLE_CELL_EMOJI_PADDING, AI_TABLE_CELL_EMOJI_SIZE, AI_TABLE_CELL_MAX_ROW_COUNT, AI_TABLE_CELL_MEMBER_ITEM_HEIGHT, AI_TABLE_CELL_MEMBER_ITEM_PADDING, AI_TABLE_CELL_MULTI_DOT_RADIUS, AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP, AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH, AI_TABLE_CELL_MULTI_PADDING_LEFT, AI_TABLE_CELL_MULTI_PADDING_TOP, AI_TABLE_CELL_PADDING, AI_TABLE_COMMON_FONT_SIZE, AI_TABLE_DOT_RADIUS, AI_TABLE_FIELD_ITEM_MARGIN_RIGHT, AI_TABLE_FILE_ICON_ITEM_HEIGHT, AI_TABLE_FILE_ICON_SIZE, AI_TABLE_MEMBER_AVATAR_SIZE, AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT, AI_TABLE_MIN_TEXT_WIDTH, AI_TABLE_OFFSET, AI_TABLE_OPTION_ITEM_FONT_SIZE, AI_TABLE_OPTION_ITEM_HEIGHT, AI_TABLE_OPTION_ITEM_PADDING, AI_TABLE_OPTION_ITEM_RADIUS, AI_TABLE_PIECE_RADIUS, AI_TABLE_PIECE_WIDTH, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_TEXT_Width, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_TAG_FONT_SIZE, AI_TABLE_TAG_PADDING, AI_TABLE_TEXT_GAP, Colors, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_FONT_WEIGHT, DEFAULT_TEXT_ALIGN_LEFT, DEFAULT_TEXT_ALIGN_RIGHT, DEFAULT_TEXT_DECORATION, DEFAULT_TEXT_LINE_HEIGHT, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE, FONT_SIZE_SM, StarFill } from '../../constants';
3
3
  import { AITable, AITableFieldType, AITableSelectOptionStyle } from '../../core';
4
4
  import { AITableAvatarSize, AITableAvatarType } from '../../types';
5
5
  import { getAvatarBgColor, getAvatarShortName, getTextWidth } from '../../utils';
6
6
  import { Drawer } from './drawer';
7
7
  import { helpers } from 'ngx-tethys/util';
8
+ import { getFileThumbnailSvgString } from '../../utils/file';
8
9
  /**
9
10
  * 处理和渲染表格单元格的内容
10
11
  */
@@ -51,6 +52,8 @@ export class CellDrawer extends Drawer {
51
52
  case AITableFieldType.createdBy:
52
53
  case AITableFieldType.updatedBy:
53
54
  return this.renderCellMember(render, ctx);
55
+ case AITableFieldType.attachment:
56
+ return this.renderCellAttachment(render, ctx);
54
57
  default:
55
58
  return null;
56
59
  }
@@ -611,6 +614,75 @@ export class CellDrawer extends Drawer {
611
614
  }
612
615
  }
613
616
  }
617
+ renderCellAttachment(render, ctx) {
618
+ const { references, x, y, field, transformValue: _cellValue, rowHeight, columnWidth, isActive } = render;
619
+ const cellValue = _cellValue;
620
+ if (!cellValue?.length || !references) {
621
+ return;
622
+ }
623
+ const fileIconSize = AI_TABLE_FILE_ICON_SIZE;
624
+ const itemHeight = AI_TABLE_FILE_ICON_ITEM_HEIGHT;
625
+ const isOperating = isActive;
626
+ let currentX = AI_TABLE_CELL_PADDING;
627
+ let currentY = (AI_TABLE_ROW_BLANK_HEIGHT - fileIconSize) / 2;
628
+ const itemOtherWidth = fileIconSize + AI_TABLE_FIELD_ITEM_MARGIN_RIGHT;
629
+ const maxHeight = isActive ? 130 - AI_TABLE_CELL_MULTI_PADDING_TOP : rowHeight - AI_TABLE_CELL_MULTI_PADDING_TOP;
630
+ const maxTextWidth = isOperating
631
+ ? columnWidth - 2 * AI_TABLE_CELL_PADDING - itemOtherWidth - AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE - 12
632
+ : columnWidth - 2 * AI_TABLE_CELL_PADDING - itemOtherWidth;
633
+ const listCount = cellValue.length;
634
+ let isOverflow = false;
635
+ for (let index = 0; index < listCount; index++) {
636
+ const attachmentInfo = references.attachments[cellValue[index]];
637
+ if (!attachmentInfo)
638
+ continue;
639
+ const { title, addition } = attachmentInfo;
640
+ const itemWidth = AI_TABLE_FILE_ICON_SIZE + AI_TABLE_FIELD_ITEM_MARGIN_RIGHT;
641
+ currentX = AI_TABLE_CELL_PADDING + index * itemWidth;
642
+ let realMaxTextWidth = maxTextWidth < 0 ? 0 : maxTextWidth;
643
+ if (index === 0 && isOperating) {
644
+ const operatingMaxWidth = maxTextWidth - (AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE + 4);
645
+ // item No space to display, then perform a line feed
646
+ if (operatingMaxWidth <= 20) {
647
+ currentX = AI_TABLE_CELL_PADDING;
648
+ currentY += AI_TABLE_OPTION_ITEM_HEIGHT + AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP;
649
+ }
650
+ else {
651
+ realMaxTextWidth = operatingMaxWidth;
652
+ }
653
+ }
654
+ if (columnWidth != null) {
655
+ // 在非活动状态下,当超出列宽时,不会渲染后续内容
656
+ if (currentX >= columnWidth - 2 * AI_TABLE_CELL_PADDING) {
657
+ break;
658
+ }
659
+ // 如果不是非活动状态的最后一行,则换行渲染溢出内容
660
+ if (currentX > columnWidth - 2 * AI_TABLE_CELL_PADDING) {
661
+ currentX = AI_TABLE_CELL_PADDING;
662
+ }
663
+ if (currentX + itemWidth > columnWidth - AI_TABLE_CELL_PADDING) {
664
+ currentX = AI_TABLE_CELL_PADDING;
665
+ currentY += itemHeight;
666
+ }
667
+ if (currentY >= maxHeight) {
668
+ isOverflow = true;
669
+ }
670
+ }
671
+ const svgString = getFileThumbnailSvgString(addition?.ext);
672
+ const img = new Image();
673
+ img.src = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgString)}`;
674
+ if (ctx) {
675
+ this.image({
676
+ name: img.src,
677
+ x: x + currentX,
678
+ y: y + currentY,
679
+ url: img.src,
680
+ width: AI_TABLE_FILE_ICON_SIZE,
681
+ height: AI_TABLE_FILE_ICON_SIZE
682
+ });
683
+ }
684
+ }
685
+ }
614
686
  }
615
687
  export const cellDrawer = new CellDrawer();
616
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9kcmF3ZXJzL2NlbGwtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFDSCxrQ0FBa0MsRUFDbEMscUNBQXFDLEVBQ3JDLDRDQUE0QyxFQUM1QywyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQixnQ0FBZ0MsRUFDaEMsaUNBQWlDLEVBQ2pDLDhCQUE4QixFQUM5QixtQ0FBbUMsRUFDbkMsa0NBQWtDLEVBQ2xDLGdDQUFnQyxFQUNoQywrQkFBK0IsRUFDL0IscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixtQkFBbUIsRUFDbkIsMkJBQTJCLEVBQzNCLHdDQUF3QyxFQUN4Qyx1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLDhCQUE4QixFQUM5QiwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLGtDQUFrQyxFQUNsQyxZQUFZLEVBQ1osUUFBUSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQWtDLE1BQU0sWUFBWSxDQUFDO0FBQy9ILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIs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QUMsT0FBTzt3QkFDOUIsUUFBUSxFQUFFLHlCQUF5Qjt3QkFDbkMsYUFBYSxFQUFFLGtDQUFrQztxQkFDcEQsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDVCxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ1gsR0FBRyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ04sQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRO3dCQUNmLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTt3QkFDZixLQUFLLEVBQUUsaUJBQWlCLENBQUMsTUFBTTt3QkFDL0IsTUFBTSxFQUFFLGlCQUFpQixDQUFDLE1BQU07d0JBQ2hDLE1BQU0sRUFBRSxFQUFFO3dCQUNWLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUs7cUJBQzFCLENBQUMsQ0FBQztvQkFDSCxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQzt3QkFDTixDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsR0FBRyxZQUFZLEdBQUcsQ0FBQzt3QkFDbEMsQ0FBQyxFQUFFLENBQUMsR0FBRyx5QkFBeUIsR0FBRyxDQUFDO3dCQUNwQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO3dCQUM1QixRQUFRLEVBQUUsWUFBWTt3QkFDdEIsSUFBSSxFQUFFLElBQUksU0FBUyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUU7d0JBQ2pDLGFBQWEsRUFBRSxrQ0FBa0M7cUJBQ3BELENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfLCB7IGlzTmlsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gICAgQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUsXG4gICAgQUlfVEFCTEVfQ0VMTF9NQVhfUk9XX0NPVU5ULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1AsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01JTl9XSURUSCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QLFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfTUVNQkVSX0FWQVRBUl9TSVpFLFxuICAgIEFJX1RBQkxFX01FTUJFUl9JVEVNX0FWQVRBUl9NQVJHSU5fUklHSFQsXG4gICAgQUlfVEFCTEVfTUlOX1RFWFRfV0lEVEgsXG4gICAgQUlfVEFCTEVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fUEFERElORyxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgQUlfVEFCTEVfUElFQ0VfUkFESVVTLFxuICAgIEFJX1RBQkxFX1BJRUNFX1dJRFRILFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9IRUlHSFQsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19URVhUX1dpZHRoLFxuICAgIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQsXG4gICAgQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSxcbiAgICBBSV9UQUJMRV9UQUdfUEFERElORyxcbiAgICBBSV9UQUJMRV9URVhUX0dBUCxcbiAgICBDb2xvcnMsXG4gICAgREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgICBERUZBVUxUX0ZPTlRfU0laRSxcbiAgICBERUZBVUxUX0ZPTlRfV0VJR0hULFxuICAgIERFRkFVTFRfVEVYVF9BTElHTl9MRUZULFxuICAgIERFRkFVTFRfVEVYVF9BTElHTl9SSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfREVDT1JBVElPTixcbiAgICBERUZBVUxUX1RFWFRfTElORV9IRUlHSFQsXG4gICAgREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRSxcbiAgICBGT05UX1NJWkVfU00sXG4gICAgU3RhckZpbGxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFJVGFibGUsIEFJVGFibGVGaWVsZCwgQUlUYWJsZUZpZWxkVHlwZSwgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLCBNZW1iZXJTZXR0aW5ncywgUmF0ZUZpZWxkVmFsdWUgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVBdmF0YXJTaXplLCBBSVRhYmxlQXZhdGFyVHlwZSwgQUlUYWJsZVJlbmRlciwgQUlUYWJsZVNlbGVjdEZpZWxkIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0QXZhdGFyQmdDb2xvciwgZ2V0QXZhdGFyU2hvcnROYW1lLCBnZXRUZXh0V2lkdGggfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBEcmF3ZXIgfSBmcm9tICcuL2RyYXdlcic7XG5pbXBvcnQgeyBoZWxwZXJzIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcblxuLyoqXG4gKiDlpITnkIblkozmuLLmn5PooajmoLzljZXlhYPmoLznmoTlhoXlrrlcbiAqL1xuZXhwb3J0IGNsYXNzIENlbGxEcmF3ZXIgZXh0ZW5kcyBEcmF3ZXIge1xuICAgIC8vIOagt+W8j+WIneWni+WMllxuICAgIHB1YmxpYyBpbml0U3R5bGUoZmllbGQ6IEFJVGFibGVGaWVsZCwgc3R5bGVQcm9wczogeyBmb250V2VpZ2h0OiBhbnkgfSk6IHZvaWQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgeyB0eXBlOiBmaWVsZFR5cGUgfSA9IGZpZWxkO1xuICAgICAgICBjb25zdCB7IGZvbnRXZWlnaHQgPSBERUZBVUxUX0ZPTlRfV0VJR0hUIH0gPSBzdHlsZVByb3BzO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudGV4dDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5kYXRlOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRBdDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucmF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5wcm9ncmVzczpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5tZW1iZXI6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEJ5OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRCeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdHlsZSh7IGZvbnRTaXplOiBERUZBVUxUX0ZPTlRfU0laRSwgZm9udFdlaWdodCB9KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDljZXlhYPmoLzmuLLmn5NcbiAgICBwdWJsaWMgcmVuZGVyQ2VsbChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IGZpZWxkIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS50ZXh0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm51bWJlcjpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5saW5rOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxUZXh0KHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5zZWxlY3Q6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFNlbGVjdChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxEYXRlKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5yYXRlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxSYXRlKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5wcm9ncmVzczpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsUHJvZ3Jlc3MocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm1lbWJlcjpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQnk6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEJ5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxNZW1iZXIocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbFRleHQocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgZmllbGQsIGNvbHVtbldpZHRoLCBzdHlsZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZC50eXBlO1xuICAgICAgICBsZXQgcmVuZGVyVGV4dDogc3RyaW5nIHwgbnVsbCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5saW5rID8gdHJhbnNmb3JtVmFsdWU/LnRleHQgOiB0cmFuc2Zvcm1WYWx1ZTtcbiAgICAgICAgaWYgKHJlbmRlclRleHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzU2luZ2xlTGluZSA9ICFjb2x1bW5XaWR0aDtcbiAgICAgICAgY29uc3QgaXNUZXh0RmllbGQgPSBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUudGV4dDtcbiAgICAgICAgY29uc3QgaXNOdW1iZXJGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5udW1iZXI7XG5cbiAgICAgICAgaWYgKGlzVGV4dEZpZWxkICYmIGlzU2luZ2xlTGluZSkge1xuICAgICAgICAgICAgcmVuZGVyVGV4dCA9IHJlbmRlclRleHQucmVwbGFjZSgvXFxyfFxcbi9nLCAnICcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sb3IgPSBzdHlsZT8uY29sb3IgfHwgdGhpcy5jb2xvcnMuZ3JheTgwMDtcbiAgICAgICAgY29uc3QgdGV4dEFsaWduID0gc3R5bGU/LnRleHRBbGlnbiB8fCBERUZBVUxUX1RFWFRfQUxJR05fTEVGVDtcbiAgICAgICAgY29uc3QgZm9udFdlaWdodCA9IHN0eWxlPy5mb250V2VpZ2h0O1xuICAgICAgICBjb25zdCB0ZXh0TWF4V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHJlbmRlclggPSB0ZXh0QWxpZ24gPT09IERFRkFVTFRfVEVYVF9BTElHTl9SSUdIVCA/IHggKyBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORyA6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHJlbmRlclkgPSB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDI7XG4gICAgICAgIGNvbnN0IHRleHREZWNvcmF0aW9uID0gREVGQVVMVF9URVhUX0RFQ09SQVRJT047XG5cbiAgICAgICAgaWYgKGlzTnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIHJlbmRlclRleHQgPSBTdHJpbmcocmVuZGVyVGV4dCk7XG4gICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZW5kZXJUZXh0LFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiB0ZXh0TWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgbGV0IHB1cmVUZXh0ID0gdGV4dDtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICB4OiByZW5kZXJYLFxuICAgICAgICAgICAgICAgICAgICB5OiByZW5kZXJZLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBwdXJlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cmFwVGV4dCh7XG4gICAgICAgICAgICAgICAgeDogcmVuZGVyWCxcbiAgICAgICAgICAgICAgICB5OiByZW5kZXJZLFxuICAgICAgICAgICAgICAgIHRleHQ6IHJlbmRlclRleHQsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBtYXhSb3c6IEFJX1RBQkxFX0NFTExfTUFYX1JPV19DT1VOVCxcbiAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBERUZBVUxUX1RFWFRfTElORV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUubGluayA/IENvbG9ycy5wcmltYXJ5IDogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAgbmVlZERyYXc6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsU2VsZWN0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IHJlbmRlcjtcbiAgICAgICAgaWYgKChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzPy5pc19tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDZWxsTXVsdGlTZWxlY3QocmVuZGVyLCBjdHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJTaW5nbGVTZWxlY3RDZWxsKHJlbmRlciwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsaWRTZWxlY3RlZFZhbHVlKGZpZWxkOiBBSVRhYmxlRmllbGQsIHRyYW5zZm9ybVZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBmaWVsZE9wdGlvbnNNYXAgPSBoZWxwZXJzLmtleUJ5KChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnMgfHwgW10sICdfaWQnKTtcbiAgICAgICAgcmV0dXJuICh0cmFuc2Zvcm1WYWx1ZSB8fCBbXSkuZmlsdGVyKChvcHRpb25JZDogc3RyaW5nKSA9PiAhIWZpZWxkT3B0aW9uc01hcFtvcHRpb25JZF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbE11bHRpU2VsZWN0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgZmllbGQsIGNvbHVtbldpZHRoIH0gPSByZW5kZXI7XG4gICAgICAgIGxldCB0cmFuc2Zvcm1WYWx1ZSA9IHRoaXMuZ2V0VmFsaWRTZWxlY3RlZFZhbHVlKGZpZWxkLCByZW5kZXIudHJhbnNmb3JtVmFsdWUpO1xuICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnJlbnRYID0geCArIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgbWF4Q29udGFpbmVyV2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG9wdGlvblN0eWxlID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9uX3N0eWxlO1xuICAgICAgICBjb25zdCBmb250U3R5bGUgPSBgJHtERUZBVUxUX0ZPTlRfV0VJR0hUfSAke0FJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRX1weCAke0RFRkFVTFRfRk9OVF9GQU1JTFl9YDtcbiAgICAgICAgY29uc3QgaXNEb3RPclBpZWNlID0gb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3QgfHwgb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTtcblxuICAgICAgICBsZXQgdG90YWxXaWR0aCA9IDA7XG4gICAgICAgIGNvbnN0IGNlbGxJdGVtSW5mb01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbGV0IGRyYXdhYmxlSW5kZXggPSAwO1xuICAgICAgICB0cmFuc2Zvcm1WYWx1ZS5mb3JFYWNoKChvcHRpb25JZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25zPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5faWQgPT09IG9wdGlvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGdldFRleHRXaWR0aChjdHgsIGl0ZW0/LnRleHQgYXMgc3RyaW5nLCBmb250U3R5bGUpO1xuICAgICAgICAgICAgdG90YWxXaWR0aCArPSB0ZXh0V2lkdGggKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEb3RPclBpZWNlKSB7XG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG90YWxXaWR0aCA8IG1heENvbnRhaW5lcldpZHRoIHx8IHRvdGFsV2lkdGggPT09IG1heENvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VsbEl0ZW1JbmZvTWFwLnNldChvcHRpb25JZCwgeyB0ZXh0V2lkdGgsIGl0ZW0sIG9mZnNldDogdG90YWxXaWR0aCB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gQUlfVEFCTEVfTUlOX1RFWFRfV0lEVEggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyO1xuICAgICAgICBjb25zdCBtaW5XaWR0aCA9IGlzRG90T3JQaWVjZSA/IGJhc2VXaWR0aCArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCA6IGJhc2VXaWR0aDtcblxuICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWVbZHJhd2FibGVJbmRleCArIDFdKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9mZnNldDogY3VycmVudE9mZnNldCB9ID0gY2VsbEl0ZW1JbmZvTWFwLmdldCh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4XSk7XG4gICAgICAgICAgICBjb25zdCBjYW5EcmF3ZXJOZXh0ID0gbWF4Q29udGFpbmVyV2lkdGggLSBjdXJyZW50T2Zmc2V0ID4gbWluV2lkdGg7XG4gICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gY2FuRHJhd2VyTmV4dCA/IGRyYXdhYmxlSW5kZXggKyAxIDogZHJhd2FibGVJbmRleDtcbiAgICAgICAgICAgIC8vIOS4iumdoui/h+eoi+aYryAg5rKh5pyJICvmlbDlrZcgIOeahOaDheWGteS4i+acgOWkp+iDveaUvuWHoOS4qu+8m1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gKGRyYXdhYmxlSW5kZXggKyAxKTtcblxuICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyDor7TmmI7mnIkgK+aVsOWtl++8jOmHjeaWsOiuoeeul1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpcmNsZVdpZHRoID0gZ2V0VGV4dFdpZHRoKGN0eCwgYCt7bnVtYmVyfWAsIGZvbnRTdHlsZSkgKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IG1heENvbnRhaW5lcldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgLSBjaXJjbGVXaWR0aDtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzlvZPliY3lt7Lnu4/otoXlh7rkuobvvIznnIvmmK/lkKbog73lrrnkuIvlvZPliY3nmoTvvIzkuI3og73lsLHlh4/ljrsgIDHvvJtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbUhhc092ZXIgPSBjdXJyZW50T2Zmc2V0ID4gbWF4O1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUhhc092ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdE9mZnNldCA9IGRyYXdhYmxlSW5kZXggPT09IDAgPyAwIDogY2VsbEl0ZW1JbmZvTWFwLmdldCh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4IC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gbWF4IC0gbGFzdE9mZnNldCA+IG1pbldpZHRoID8gZHJhd2FibGVJbmRleCA6IGRyYXdhYmxlSW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOi/mOacieWJqeS9meepuumXtCwg55yL5piv5ZCm6IO95aSa5riy5p+T5LiA5LiqXG4gICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBtYXggLSBjdXJyZW50T2Zmc2V0ID4gbWluV2lkdGggPyBkcmF3YWJsZUluZGV4ICsgMSA6IGRyYXdhYmxlSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2lyY2xlVGV4dCA9IGArJHt0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAoZHJhd2FibGVJbmRleCArIDEpfWA7XG4gICAgICAgIGNvbnN0IGNpcmNsZVdpZHRoID1cbiAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIChkcmF3YWJsZUluZGV4ICsgMSkgPiAwID8gZ2V0VGV4dFdpZHRoKGN0eCwgY2lyY2xlVGV4dCwgZm9udFN0eWxlKSArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgOiAwO1xuICAgICAgICAvLyDliankvZnnqbrpl7RcbiAgICAgICAgbGV0IHJlbWFpblNwYWNlID0gbWF4Q29udGFpbmVyV2lkdGggLSBjaXJjbGVXaWR0aCAtIChjaXJjbGVXaWR0aCA+IDAgPyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCA6IDApO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbklkID0gdHJhbnNmb3JtVmFsdWVbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgYmdDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgICAgICAgICAgICAgZmlsbDogQ29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkl0ZW0gPSAob3B0aW9uU3R5bGU6IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSwgc2hhcGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VXaWR0aCA9IGlzRG90T3JQaWVjZVxuICAgICAgICAgICAgICAgICAgICA/IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCArIEFJX1RBQkxFX0NFTExfUEFERElORyAqIDJcbiAgICAgICAgICAgICAgICAgICAgOiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyO1xuICAgICAgICAgICAgICAgIGlmIChyZW1haW5TcGFjZSA8IG1pbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0V2lkdGgsIGl0ZW0gfSA9IGNlbGxJdGVtSW5mb01hcC5nZXQob3B0aW9uSWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlV2lkdGggPSBiYXNlV2lkdGggKyB0ZXh0V2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpblNwYWNlIC09IEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBiZ1dpZHRoID0gcmVtYWluU3BhY2UgPiBjb21wbGV0ZVdpZHRoID8gY29tcGxldGVXaWR0aCA6IHJlbWFpblNwYWNlO1xuICAgICAgICAgICAgICAgIGJnQ29uZmlnLndpZHRoID0gYmdXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaXNEb3RPclBpZWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdChiZ0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGFwZSA9PT0gJ3JlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMikgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBDb2xvcnMucHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09ICdhcmMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyKSAvIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gQ29sb3JzLnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJnV2lkdGggLSBiYXNlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGJnQ29uZmlnLnksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogYmdDb25maWcud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBiZ1dpZHRoIC0gYmFzZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogYmdDb25maWcuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IENvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdChiZ0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmdXaWR0aCAtIGJhc2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gYmdDb25maWcud2lkdGg7XG4gICAgICAgICAgICAgICAgcmVtYWluU3BhY2UgLT0gY3VycmVudFdpZHRoO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRYICs9IGN1cnJlbnRXaWR0aCArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc3dpdGNoIChvcHRpb25TdHlsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdDpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90LCAnYXJjJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlOlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZSwgJ3JlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnOlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGV4dCwgJycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaXJjbGVXaWR0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZykge1xuICAgICAgICAgICAgICAgIHRoaXMudGFnKHtcbiAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY2lyY2xlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaXJjbGVUZXh0LFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjaXJjbGVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IENvbG9ycy5ncmF5MTAwLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVU1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNpcmNsZVRleHQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclNpbmdsZVNlbGVjdENlbGwocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCBmaWVsZCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVZhbHVlID0gdGhpcy5nZXRWYWxpZFNlbGVjdGVkVmFsdWUoZmllbGQsIHJlbmRlci50cmFuc2Zvcm1WYWx1ZSk7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZVswXSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBzaW5nbGUgc2VsZWN0IGZpZWxkIHVuZXhwZWN0ZWQgdmFsdWU6ICR7dHJhbnNmb3JtVmFsdWVbMF19YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnM/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLl9pZCA9PT0gdHJhbnNmb3JtVmFsdWVbMF0pO1xuICAgICAgICBjb25zdCBpdGVtTmFtZSA9IGl0ZW0/LnRleHQgfHwgJyc7XG4gICAgICAgIGNvbnN0IGdldFRleHRFbGxpcHNpcyA9IChtYXhUZXh0V2lkdGg6IG51bWJlciwgZm9udFNpemU6IG51bWJlciA9IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkUpID0+IHtcbiAgICAgICAgICAgIG1heFRleHRXaWR0aCAtPSBpc09wZXJhdGluZyA/IEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFX09GRlNFVCA6IDA7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1OYW1lLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiBtYXhUZXh0V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uU3R5bGUgPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25fc3R5bGU7XG4gICAgICAgICAgICBsZXQgYmFja2dyb3VuZCA9IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IGNvbG9ycy5wcmltYXJ5O1xuICAgICAgICAgICAgY29uc3QgZG90TWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEggLSBBSV9UQUJMRV9URVhUX0dBUDtcbiAgICAgICAgICAgIGNvbnN0IGJvcmRlcldpZHRoID0gMTtcbiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uU3R5bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3Q6XG4gICAgICAgICAgICAgICAgICAgIC8vIOi/memHjOeahCBBSV9UQUJMRV9PRkZTRVQg5YGP56e75LiN56Gu5a6a5piv5Li65ZWl77yI5YyF5ousIHBpZWNlIOeahO+8ie+8jOWPquaYr+S4uuS6huS/neaMgeWSjOe8lui+kee7hOS7tuS4reeahOWvuem9kFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1BJRUNFX1dJRFRIKSAvIDIgKyBBSV9UQUJMRV9ET1RfUkFESVVTIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9QSUVDRV9XSURUSCArIEFJX1RBQkxFX1RFWFRfR0FQICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXMoZG90TWF4VGV4dFdpZHRoKS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2U6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEgpIC8gMiAtIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfUElFQ0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfUElFQ0VfV0lEVEggKyBBSV9UQUJMRV9URVhUX0dBUCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKGRvdE1heFRleHRXaWR0aCkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiAoQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfVEFHX1BBRERJTkcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRleHRXaWR0aCwgdGV4dCB9ID0gZ2V0VGV4dEVsbGlwc2lzKG1heFRleHRXaWR0aCwgQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgodGV4dFdpZHRoICsgMiAqIEFJX1RBQkxFX1RBR19QQURESU5HLCBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUlOX1dJRFRIKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfT1BUSU9OX0lURU1fUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0TWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKHRleHRNYXhUZXh0V2lkdGgpLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy5ncmF5ODAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbERhdGUocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgIGxldCBjZWxsVGV4dCA9IHRyYW5zZm9ybVZhbHVlO1xuXG4gICAgICAgIGlmIChjZWxsVGV4dCA9PSBudWxsIHx8ICFfLmlzU3RyaW5nKGNlbGxUZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dE1heFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCB7IHRleHQgfSA9IHRoaXMudGV4dEVsbGlwc2lzKHsgdGV4dDogY2VsbFRleHQsIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiB0ZXh0TWF4V2lkdGggfSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gc3R5bGU/LmNvbG9yIHx8IGNvbG9ycy5ncmF5ODAwO1xuICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogc3R5bGU/LmZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxSYXRlKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWU6IF9jZWxsVmFsdWUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgbWF4ID0gNTtcbiAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gX2NlbGxWYWx1ZSBhcyBSYXRlRmllbGRWYWx1ZTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IEFJX1RBQkxFX0NFTExfRU1PSklfU0laRTtcbiAgICAgICAgY29uc3QgaXNFbXB0eSA9IGlzTmlsKGNlbGxWYWx1ZSk7XG4gICAgICAgIHJldHVybiBbLi4uQXJyYXkobWF4KS5rZXlzKCldLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5kZXggKyAxO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IHZhbHVlIDw9IGNlbGxWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGljb25YID0gaW5kZXggKiBzaXplICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgaW5kZXggKiBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkc7XG4gICAgICAgICAgICBjb25zdCBpY29uWSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gc2l6ZSkgLyAyO1xuXG4gICAgICAgICAgICBpZiAoY3R4ICYmIChjaGVja2VkIHx8IGlzRW1wdHkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXRoKHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIGljb25YLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgaWNvblksXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDIyLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBTdGFyRmlsbCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogaXNFbXB0eSA/IHRoaXMuY29sb3JzLmdyYXkxMDAgOiB0aGlzLmNvbG9ycy53YXJpbmcsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlWDogMS4xNCxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiAxLjE0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbFByb2dyZXNzKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUsIGNvbHVtbldpZHRoLCBzdHlsZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgICAgICBsZXQgY2VsbFZhbHVlID0gdHJhbnNmb3JtVmFsdWU7XG4gICAgICAgIGlmIChpc05pbChjZWxsVmFsdWUpKSB7XG4gICAgICAgICAgICBjZWxsVmFsdWUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICghXy5pc051bWJlcihjZWxsVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBBSV9UQUJMRV9QUk9HUkVTU19URVhUX1dpZHRoO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hUO1xuICAgICAgICBjb25zdCB0ZXh0SGVpZ2h0ID0gQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCkgLyAyO1xuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gdGV4dEhlaWdodCkgLyAyO1xuXG4gICAgICAgIC8vIOe7mOWItuiDjOaZr1xuICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgeDogeCArIG9mZnNldFgsXG4gICAgICAgICAgICB5OiB5ICsgb2Zmc2V0WSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgICAgICAgICAgZmlsbDogY29sb3JzLmdyYXkyMDBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g6K6h566X5bm257uY5Yi26L+b5bqmXG4gICAgICAgIGNvbnN0IHByb2dyZXNzV2lkdGggPSAoY2VsbFZhbHVlIC8gMTAwKSAqIHdpZHRoO1xuICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgeDogeCArIG9mZnNldFgsXG4gICAgICAgICAgICB5OiB5ICsgb2Zmc2V0WSxcbiAgICAgICAgICAgIHdpZHRoOiBwcm9ncmVzc1dpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgICAgICAgICAgZmlsbDogY29sb3JzLnN1Y2Nlc3NcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgIHg6IHggKyBvZmZzZXRYICsgd2lkdGggKyBBSV9UQUJMRV9URVhUX0dBUCxcbiAgICAgICAgICAgIHk6IHkgKyB0ZXh0T2Zmc2V0WSxcbiAgICAgICAgICAgIHRleHQ6IGAke2NlbGxWYWx1ZX0lYCxcbiAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsTWVtYmVyKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgcmVmZXJlbmNlcywgeCwgeSwgZmllbGQsIHRyYW5zZm9ybVZhbHVlOiBfY2VsbFZhbHVlLCByb3dIZWlnaHQsIGNvbHVtbldpZHRoLCBpc0FjdGl2ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSBfY2VsbFZhbHVlO1xuXG4gICAgICAgIGlmICghY2VsbFZhbHVlPy5sZW5ndGggfHwgIXJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IGZpZWxkLnNldHRpbmdzIGFzIE1lbWJlclNldHRpbmdzO1xuICAgICAgICBjb25zdCBhdmF0YXJTaXplID0gQUlfVEFCTEVfTUVNQkVSX0FWQVRBUl9TSVpFO1xuICAgICAgICBjb25zdCBpdGVtSGVpZ2h0ID0gQUlfVEFCTEVfQ0VMTF9NRU1CRVJfSVRFTV9IRUlHSFQ7XG4gICAgICAgIGNvbnN0IGlzT3BlcmF0aW5nID0gaXNBY3RpdmU7XG4gICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBzZXR0aW5ncz8uaXNfbXVsdGlwbGU7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBsZXQgY3VycmVudFkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIGF2YXRhclNpemUpIC8gMjtcbiAgICAgICAgY29uc3QgaXRlbU90aGVyV2lkdGggPSBhdmF0YXJTaXplICsgQUlfVEFCTEVfTUVNQkVSX0lURU1fQVZBVEFSX01BUkdJTl9SSUdIVDtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gaXNBY3RpdmUgPyAxMzAgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QIDogcm93SGVpZ2h0IC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX1RPUDtcbiAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gaXNPcGVyYXRpbmdcbiAgICAgICAgICAgID8gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gaXRlbU90aGVyV2lkdGggLSBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFIC0gMTJcbiAgICAgICAgICAgIDogY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gaXRlbU90aGVyV2lkdGg7XG5cbiAgICAgICAgY29uc3QgbGlzdENvdW50ID0gY2VsbFZhbHVlLmxlbmd0aDtcbiAgICAgICAgbGV0IGlzT3ZlcmZsb3cgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGlzdENvdW50OyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VySW5mbyA9IHJlZmVyZW5jZXM/Lm1lbWJlcnNbY2VsbFZhbHVlW2luZGV4XV07XG4gICAgICAgICAgICBpZiAoIXVzZXJJbmZvKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgeyB1aWQsIGRpc3BsYXlfbmFtZSwgYXZhdGFyIH0gPSB1c2VySW5mbztcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCArIChpc011bHRpcGxlID8gQUlfVEFCTEVfQ0VMTF9NRU1CRVJfSVRFTV9QQURESU5HIDogMCk7XG5cbiAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgaW5kZXggKiBpdGVtV2lkdGg7XG5cbiAgICAgICAgICAgIGxldCByZWFsTWF4VGV4dFdpZHRoID0gbWF4VGV4dFdpZHRoIDwgMCA/IDAgOiBtYXhUZXh0V2lkdGg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgaXNPcGVyYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpbmdNYXhXaWR0aCA9IG1heFRleHRXaWR0aCAtIChBSV9UQUJMRV9DRUxMX0FERF9JVEVNX0JVVFRPTl9TSVpFICsgNCk7XG4gICAgICAgICAgICAgICAgLy8gaXRlbSBObyBzcGFjZSB0byBkaXNwbGF5LCB0aGVuIHBlcmZvcm0gYSBsaW5lIGZlZWRcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW5nTWF4V2lkdGggPD0gMjApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCArIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NQVJHSU5fVE9QO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxNYXhUZXh0V2lkdGggPSBvcGVyYXRpbmdNYXhXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpc01vcmUgPSBjdXJyZW50WCArIGl0ZW1XaWR0aCA+IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgIGlmIChjb2x1bW5XaWR0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8g5Zyo6Z2e5rS75Yqo54q25oCB5LiL77yM5b2T6LaF5Ye65YiX5a695pe277yM5LiN5Lya5riy5p+T5ZCO57ut5YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID49IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5LiN5piv6Z2e5rS75Yqo54q25oCB55qE5pyA5ZCO5LiA6KGM77yM5YiZ5o2i6KGM5riy5p+T5rqi5Ye65YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggKyBpdGVtV2lkdGggPiBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gaXRlbUhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRZID49IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBpc092ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF2YXRhcih7XG4gICAgICAgICAgICAgICAgICAgIHg6IHggKyBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIGN1cnJlbnRZLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGF2YXRhciEsXG4gICAgICAgICAgICAgICAgICAgIGlkOiB1aWQhLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0QXZhdGFyU2hvcnROYW1lKGRpc3BsYXlfbmFtZSksXG4gICAgICAgICAgICAgICAgICAgIGJnQ29sb3I6IGdldEF2YXRhckJnQ29sb3IoZGlzcGxheV9uYW1lISksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEFJVGFibGVBdmF0YXJUeXBlLm1lbWJlcixcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7lpJrpgInmqKHlvI/kuIvmmL7npLrlkI3np7BcbiAgICAgICAgICAgICAgICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFggPSB4ICsgY3VycmVudFggKyBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hUO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdGV4dFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZGlzcGxheV9uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhUZXh0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHRoaXMuY29sb3JzLmdyYXk4MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzTW9yZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IDI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogdGhpcy5jb2xvcnMuYmxhY2tcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFggKyBGT05UX1NJWkVfU00gLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiB0aGlzLmNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBGT05UX1NJWkVfU00sXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBgKyR7bGlzdENvdW50IC0gaW5kZXggLSAxfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNlbGxEcmF3ZXIgPSBuZXcgQ2VsbERyYXdlcigpO1xuIl19
688
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9kcmF3ZXJzL2NlbGwtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFDSCxrQ0FBa0MsRUFDbEMscUNBQXFDLEVBQ3JDLDRDQUE0QyxFQUM1QywyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQixnQ0FBZ0MsRUFDaEMsaUNBQWlDLEVBQ2pDLDhCQUE4QixFQUM5QixtQ0FBbUMsRUFDbkMsa0NBQWtDLEVBQ2xDLGdDQUFnQyxFQUNoQywrQkFBK0IsRUFDL0IscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6QixtQkFBbUIsRUFDbkIsZ0NBQWdDLEVBQ2hDLDhCQUE4QixFQUM5Qix1QkFBdUIsRUFDdkIsMkJBQTJCLEVBQzNCLHdDQUF3QyxFQUN4Qyx1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLDhCQUE4QixFQUM5QiwyQkFBMkIsRUFDM0IsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIsNEJBQTRCLEVBQzVCLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLGtDQUFrQyxFQUNsQyxZQUFZLEVBQ1osUUFBUSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQWtDLE1BQU0sWUFBWSxD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LENBQUM7Z0JBQ3JDLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLFdBQVcsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO29CQUM3RCxRQUFRLEdBQUcscUJBQXFCLENBQUM7b0JBQ2pDLFFBQVEsSUFBSSxVQUFVLENBQUM7Z0JBQzNCLENBQUM7Z0JBQ0QsSUFBSSxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ3hCLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLENBQUM7WUFDTCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcseUJBQXlCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsR0FBRyxDQUFDLEdBQUcsR0FBRyxvQ0FBb0Msa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM5RSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNOLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQ1AsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHO29CQUNiLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTtvQkFDZixDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVE7b0JBQ2YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO29CQUNaLEtBQUssRUFBRSx1QkFBdUI7b0JBQzlCLE1BQU0sRUFBRSx1QkFBdUI7aUJBQ2xDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXywgeyBpc05pbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICAgIEFJX1RBQkxFX0NFTExfQUREX0lURU1fQlVUVE9OX1NJWkUsXG4gICAgQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTExfTUFYX1JPV19DT1VOVCxcbiAgICBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTLFxuICAgIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NQVJHSU5fVE9QLFxuICAgIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NSU5fV0lEVEgsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX1RPUCxcbiAgICBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSxcbiAgICBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0lURU1fTUFSR0lOX1JJR0hULFxuICAgIEFJX1RBQkxFX0ZJTEVfSUNPTl9JVEVNX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9GSUxFX0lDT05fU0laRSxcbiAgICBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkUsXG4gICAgQUlfVEFCTEVfTUVNQkVSX0lURU1fQVZBVEFSX01BUkdJTl9SSUdIVCxcbiAgICBBSV9UQUJMRV9NSU5fVEVYVF9XSURUSCxcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9QQURESU5HLFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgQUlfVEFCTEVfUElFQ0VfV0lEVEgsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX1RFWFRfV2lkdGgsXG4gICAgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX1RBR19QQURESU5HLFxuICAgIEFJX1RBQkxFX1RFWFRfR0FQLFxuICAgIENvbG9ycyxcbiAgICBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgIERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIERFRkFVTFRfRk9OVF9XRUlHSFQsXG4gICAgREVGQVVMVF9URVhUX0FMSUdOX0xFRlQsXG4gICAgREVGQVVMVF9URVhUX0FMSUdOX1JJR0hULFxuICAgIERFRkFVTFRfVEVYVF9ERUNPUkFUSU9OLFxuICAgIERFRkFVTFRfVEVYVF9MSU5FX0hFSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFLFxuICAgIEZPTlRfU0laRV9TTSxcbiAgICBTdGFyRmlsbFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUlUYWJsZSwgQUlUYWJsZUZpZWxkLCBBSVRhYmxlRmllbGRUeXBlLCBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUsIE1lbWJlclNldHRpbmdzLCBSYXRlRmllbGRWYWx1ZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUF2YXRhclNpemUsIEFJVGFibGVBdmF0YXJUeXBlLCBBSVRhYmxlUmVuZGVyLCBBSVRhYmxlU2VsZWN0RmllbGQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRBdmF0YXJCZ0NvbG9yLCBnZXRBdmF0YXJTaG9ydE5hbWUsIGdldFRleHRXaWR0aCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IERyYXdlciB9IGZyb20gJy4vZHJhd2VyJztcbmltcG9ydCB7IGhlbHBlcnMgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgZ2V0RmlsZVRodW1ibmFpbFN2Z1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUnO1xuXG4vKipcbiAqIOWkhOeQhuWSjOa4suafk+ihqOagvOWNleWFg+agvOeahOWGheWuuVxuICovXG5leHBvcnQgY2xhc3MgQ2VsbERyYXdlciBleHRlbmRzIERyYXdlciB7XG4gICAgLy8g5qC35byP5Yid5aeL5YyWXG4gICAgcHVibGljIGluaXRTdHlsZShmaWVsZDogQUlUYWJsZUZpZWxkLCBzdHlsZVByb3BzOiB7IGZvbnRXZWlnaHQ6IGFueSB9KTogdm9pZCB8IG51bGwge1xuICAgICAgICBjb25zdCB7IHR5cGU6IGZpZWxkVHlwZSB9ID0gZmllbGQ7XG4gICAgICAgIGNvbnN0IHsgZm9udFdlaWdodCA9IERFRkFVTFRfRk9OVF9XRUlHSFQgfSA9IHN0eWxlUHJvcHM7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS50ZXh0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmRhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRBdDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5yYXRlOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnByb2dyZXNzOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm1lbWJlcjpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQnk6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEJ5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFN0eWxlKHsgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFLCBmb250V2VpZ2h0IH0pO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOWNleWFg+agvOa4suafk1xuICAgIHB1YmxpYyByZW5kZXJDZWxsKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnRleHQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubnVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmxpbms6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFRleHQocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnNlbGVjdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsU2VsZWN0KHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5kYXRlOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRBdDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQXQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbERhdGUocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnJhdGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFJhdGUocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnByb2dyZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxQcm9ncmVzcyhyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubWVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRCeTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbE1lbWJlcihyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuYXR0YWNobWVudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsQXR0YWNobWVudChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsVGV4dChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHRyYW5zZm9ybVZhbHVlLCBmaWVsZCwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgIGxldCByZW5kZXJUZXh0OiBzdHJpbmcgfCBudWxsID0gZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLmxpbmsgPyB0cmFuc2Zvcm1WYWx1ZT8udGV4dCA6IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICBpZiAocmVuZGVyVGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNTaW5nbGVMaW5lID0gIWNvbHVtbldpZHRoO1xuICAgICAgICBjb25zdCBpc1RleHRGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS50ZXh0O1xuICAgICAgICBjb25zdCBpc051bWJlckZpZWxkID0gZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLm51bWJlcjtcblxuICAgICAgICBpZiAoaXNUZXh0RmllbGQgJiYgaXNTaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICByZW5kZXJUZXh0ID0gcmVuZGVyVGV4dC5yZXBsYWNlKC9cXHJ8XFxuL2csICcgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xvciA9IHN0eWxlPy5jb2xvciB8fCB0aGlzLmNvbG9ycy5ncmF5ODAwO1xuICAgICAgICBjb25zdCB0ZXh0QWxpZ24gPSBzdHlsZT8udGV4dEFsaWduIHx8IERFRkFVTFRfVEVYVF9BTElHTl9MRUZUO1xuICAgICAgICBjb25zdCBmb250V2VpZ2h0ID0gc3R5bGU/LmZvbnRXZWlnaHQ7XG4gICAgICAgIGNvbnN0IHRleHRNYXhXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgcmVuZGVyWCA9IHRleHRBbGlnbiA9PT0gREVGQVVMVF9URVhUX0FMSUdOX1JJR0hUID8geCArIGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HIDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgcmVuZGVyWSA9IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMjtcbiAgICAgICAgY29uc3QgdGV4dERlY29yYXRpb24gPSBERUZBVUxUX1RFWFRfREVDT1JBVElPTjtcblxuICAgICAgICBpZiAoaXNOdW1iZXJGaWVsZCkge1xuICAgICAgICAgICAgcmVuZGVyVGV4dCA9IFN0cmluZyhyZW5kZXJUZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlbmRlclRleHQsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcHVyZVRleHQgPSB0ZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IHJlbmRlclgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHJlbmRlclksXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHB1cmVUZXh0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndyYXBUZXh0KHtcbiAgICAgICAgICAgICAgICB4OiByZW5kZXJYLFxuICAgICAgICAgICAgICAgIHk6IHJlbmRlclksXG4gICAgICAgICAgICAgICAgdGV4dDogcmVuZGVyVGV4dCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogdGV4dE1heFdpZHRoLFxuICAgICAgICAgICAgICAgIG1heFJvdzogQUlfVEFCTEVfQ0VMTF9NQVhfUk9XX0NPVU5ULFxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IERFRkFVTFRfVEVYVF9MSU5FX0hFSUdIVCxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRSxcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5saW5rID8gQ29sb3JzLnByaW1hcnkgOiBjb2xvcixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0LFxuICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uLFxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSxcbiAgICAgICAgICAgICAgICBuZWVkRHJhdzogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxTZWxlY3QocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCB9ID0gcmVuZGVyO1xuICAgICAgICBpZiAoKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3M/LmlzX211bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNlbGxNdWx0aVNlbGVjdChyZW5kZXIsIGN0eCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclNpbmdsZVNlbGVjdENlbGwocmVuZGVyLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWxpZFNlbGVjdGVkVmFsdWUoZmllbGQ6IEFJVGFibGVGaWVsZCwgdHJhbnNmb3JtVmFsdWU6IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkT3B0aW9uc01hcCA9IGhlbHBlcnMua2V5QnkoKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9ucyB8fCBbXSwgJ19pZCcpO1xuICAgICAgICByZXR1cm4gKHRyYW5zZm9ybVZhbHVlIHx8IFtdKS5maWx0ZXIoKG9wdGlvbklkOiBzdHJpbmcpID0+ICEhZmllbGRPcHRpb25zTWFwW29wdGlvbklkXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsTXVsdGlTZWxlY3QocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCBmaWVsZCwgY29sdW1uV2lkdGggfSA9IHJlbmRlcjtcbiAgICAgICAgbGV0IHRyYW5zZm9ybVZhbHVlID0gdGhpcy5nZXRWYWxpZFNlbGVjdGVkVmFsdWUoZmllbGQsIHJlbmRlci50cmFuc2Zvcm1WYWx1ZSk7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY3VycmVudFggPSB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBtYXhDb250YWluZXJXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3Qgb3B0aW9uU3R5bGUgPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25fc3R5bGU7XG4gICAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IGAke0RFRkFVTFRfRk9OVF9XRUlHSFR9ICR7QUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFfXB4ICR7REVGQVVMVF9GT05UX0ZBTUlMWX1gO1xuICAgICAgICBjb25zdCBpc0RvdE9yUGllY2UgPSBvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdCB8fCBvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlO1xuXG4gICAgICAgIGxldCB0b3RhbFdpZHRoID0gMDtcbiAgICAgICAgY29uc3QgY2VsbEl0ZW1JbmZvTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBsZXQgZHJhd2FibGVJbmRleCA9IDA7XG4gICAgICAgIHRyYW5zZm9ybVZhbHVlLmZvckVhY2goKG9wdGlvbklkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnM/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLl9pZCA9PT0gb3B0aW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gZ2V0VGV4dFdpZHRoKGN0eCwgaXRlbT8udGV4dCBhcyBzdHJpbmcsIGZvbnRTdHlsZSk7XG4gICAgICAgICAgICB0b3RhbFdpZHRoICs9IHRleHRXaWR0aCArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0RvdE9yUGllY2UpIHtcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICs9IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b3RhbFdpZHRoIDwgbWF4Q29udGFpbmVyV2lkdGggfHwgdG90YWxXaWR0aCA9PT0gbWF4Q29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjZWxsSXRlbUluZm9NYXAuc2V0KG9wdGlvbklkLCB7IHRleHRXaWR0aCwgaXRlbSwgb2Zmc2V0OiB0b3RhbFdpZHRoIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBiYXNlV2lkdGggPSBBSV9UQUJMRV9NSU5fVEVYVF9XSURUSCArIEFJX1RBQkxFX0NFTExfUEFERElORyAqIDI7XG4gICAgICAgIGNvbnN0IG1pbldpZHRoID0gaXNEb3RPclBpZWNlID8gYmFzZVdpZHRoICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMiArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUIDogYmFzZVdpZHRoO1xuXG4gICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4ICsgMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb2Zmc2V0OiBjdXJyZW50T2Zmc2V0IH0gPSBjZWxsSXRlbUluZm9NYXAuZ2V0KHRyYW5zZm9ybVZhbHVlW2RyYXdhYmxlSW5kZXhdKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbkRyYXdlck5leHQgPSBtYXhDb250YWluZXJXaWR0aCAtIGN1cnJlbnRPZmZzZXQgPiBtaW5XaWR0aDtcbiAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBjYW5EcmF3ZXJOZXh0ID8gZHJhd2FibGVJbmRleCArIDEgOiBkcmF3YWJsZUluZGV4O1xuICAgICAgICAgICAgLy8g5LiK6Z2i6L+H56iL5pivICDmsqHmnIkgK+aVsOWtlyAg55qE5oOF5Ya15LiL5pyA5aSn6IO95pS+5Yeg5Liq77ybXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAoZHJhd2FibGVJbmRleCArIDEpO1xuXG4gICAgICAgICAgICBpZiAobnVtYmVyID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIOivtOaYjuaciSAr5pWw5a2X77yM6YeN5paw6K6h566XXG4gICAgICAgICAgICAgICAgY29uc3QgY2lyY2xlV2lkdGggPSBnZXRUZXh0V2lkdGgoY3R4LCBgK3tudW1iZXJ9YCwgZm9udFN0eWxlKSArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4ID0gbWF4Q29udGFpbmVyV2lkdGggLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCAtIGNpcmNsZVdpZHRoO1xuICAgICAgICAgICAgICAgIC8vIOWmguaenOW9k+WJjeW3sue7j+i2heWHuuS6hu+8jOeci+aYr+WQpuiDveWuueS4i+W9k+WJjeeahO+8jOS4jeiDveWwseWHj+WOuyAgMe+8m1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtSGFzT3ZlciA9IGN1cnJlbnRPZmZzZXQgPiBtYXg7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtSGFzT3Zlcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0T2Zmc2V0ID0gZHJhd2FibGVJbmRleCA9PT0gMCA/IDAgOiBjZWxsSXRlbUluZm9NYXAuZ2V0KHRyYW5zZm9ybVZhbHVlW2RyYXdhYmxlSW5kZXggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBtYXggLSBsYXN0T2Zmc2V0ID4gbWluV2lkdGggPyBkcmF3YWJsZUluZGV4IDogZHJhd2FibGVJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g6L+Y5pyJ5Ymp5L2Z56m66Ze0LCDnnIvmmK/lkKbog73lpJrmuLLmn5PkuIDkuKpcbiAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IG1heCAtIGN1cnJlbnRPZmZzZXQgPiBtaW5XaWR0aCA/IGRyYXdhYmxlSW5kZXggKyAxIDogZHJhd2FibGVJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaXJjbGVUZXh0ID0gYCske3RyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIChkcmF3YWJsZUluZGV4ICsgMSl9YDtcbiAgICAgICAgY29uc3QgY2lyY2xlV2lkdGggPVxuICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gKGRyYXdhYmxlSW5kZXggKyAxKSA+IDAgPyBnZXRUZXh0V2lkdGgoY3R4LCBjaXJjbGVUZXh0LCBmb250U3R5bGUpICsgMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyA6IDA7XG4gICAgICAgIC8vIOWJqeS9meepuumXtFxuICAgICAgICBsZXQgcmVtYWluU3BhY2UgPSBtYXhDb250YWluZXJXaWR0aCAtIGNpcmNsZVdpZHRoIC0gKGNpcmNsZVdpZHRoID4gMCA/IEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUIDogMCk7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRyYW5zZm9ybVZhbHVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSWQgPSB0cmFuc2Zvcm1WYWx1ZVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBiZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQpIC8gMixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICBmaWxsOiBDb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICB3aWR0aDogMFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY29tbW9uSXRlbSA9IChvcHRpb25TdHlsZTogQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLCBzaGFwZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gaXNEb3RPclBpZWNlXG4gICAgICAgICAgICAgICAgICAgID8gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMiArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICogMlxuICAgICAgICAgICAgICAgICAgICA6IEFJX1RBQkxFX0NFTExfUEFERElORyAqIDI7XG4gICAgICAgICAgICAgICAgaWYgKHJlbWFpblNwYWNlIDwgbWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHRXaWR0aCwgaXRlbSB9ID0gY2VsbEl0ZW1JbmZvTWFwLmdldChvcHRpb25JZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGxldGVXaWR0aCA9IGJhc2VXaWR0aCArIHRleHRXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluU3BhY2UgLT0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGJnV2lkdGggPSByZW1haW5TcGFjZSA+IGNvbXBsZXRlV2lkdGggPyBjb21wbGV0ZVdpZHRoIDogcmVtYWluU3BhY2U7XG4gICAgICAgICAgICAgICAgYmdDb25maWcud2lkdGggPSBiZ1dpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChpc0RvdE9yUGllY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KGJnQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXBlID09PSAncmVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IENvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZSA9PT0gJ2FyYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIpIC8gMiArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBDb2xvcnMucHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmdXaWR0aCAtIGJhc2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogYmdDb25maWcueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBiZ0NvbmZpZy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJnV2lkdGggLSBiYXNlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBiZ0NvbmZpZy5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3JzLndoaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gQ29sb3JzLnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KGJnQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBiZ1dpZHRoIC0gYmFzZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50V2lkdGggPSBiZ0NvbmZpZy53aWR0aDtcbiAgICAgICAgICAgICAgICByZW1haW5TcGFjZSAtPSBjdXJyZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgY3VycmVudFggKz0gY3VycmVudFdpZHRoICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBzd2l0Y2ggKG9wdGlvblN0eWxlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90OlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3QsICdhcmMnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2U6XG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkl0ZW0oQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlLCAncmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWc6XG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkl0ZW0oQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZywgJycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50ZXh0LCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNpcmNsZVdpZHRoID4gMCkge1xuICAgICAgICAgICAgaWYgKG9wdGlvblN0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjaXJjbGVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNpcmNsZVRleHQsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IENvbG9ycy5ncmF5MTAwLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNpcmNsZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogQ29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudFggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1RBR19GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY2lyY2xlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyU2luZ2xlU2VsZWN0Q2VsbChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIGZpZWxkLCBjb2x1bW5XaWR0aCwgaXNBY3RpdmUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtVmFsdWUgPSB0aGlzLmdldFZhbGlkU2VsZWN0ZWRWYWx1ZShmaWVsZCwgcmVuZGVyLnRyYW5zZm9ybVZhbHVlKTtcbiAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlWzBdKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYHNpbmdsZSBzZWxlY3QgZmllbGQgdW5leHBlY3RlZCB2YWx1ZTogJHt0cmFuc2Zvcm1WYWx1ZVswXX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc09wZXJhdGluZyA9IGlzQWN0aXZlO1xuICAgICAgICBjb25zdCBpdGVtID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9ucz8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24uX2lkID09PSB0cmFuc2Zvcm1WYWx1ZVswXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1OYW1lID0gaXRlbT8udGV4dCB8fCAnJztcbiAgICAgICAgY29uc3QgZ2V0VGV4dEVsbGlwc2lzID0gKG1heFRleHRXaWR0aDogbnVtYmVyLCBmb250U2l6ZTogbnVtYmVyID0gQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSkgPT4ge1xuICAgICAgICAgICAgbWF4VGV4dFdpZHRoIC09IGlzT3BlcmF0aW5nID8gQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkVfT0ZGU0VUIDogMDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgdGV4dDogaXRlbU5hbWUsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIG1heFRleHRXaWR0aCxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogZm9udFNpemVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25TdHlsZSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbl9zdHlsZTtcbiAgICAgICAgICAgIGxldCBiYWNrZ3JvdW5kID0gaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gY29sb3JzLnByaW1hcnk7XG4gICAgICAgICAgICBjb25zdCBkb3RNYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBBSV9UQUJMRV9QSUVDRV9XSURUSCAtIEFJX1RBQkxFX1RFWFRfR0FQO1xuICAgICAgICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSAxO1xuICAgICAgICAgICAgc3dpdGNoIChvcHRpb25TdHlsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdDpcbiAgICAgICAgICAgICAgICAgICAgLy8g6L+Z6YeM55qEIEFJX1RBQkxFX09GRlNFVCDlgY/np7vkuI3noa7lrprmmK/kuLrllaXvvIjljIXmi6wgcGllY2Ug55qE77yJ77yM5Y+q5piv5Li65LqG5L+d5oyB5ZKM57yW6L6R57uE5Lu25Lit55qE5a+56b2QXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEgpIC8gMiArIEFJX1RBQkxFX0RPVF9SQURJVVMgLSBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX1BJRUNFX1dJRFRIICsgQUlfVEFCTEVfVEVYVF9HQVAgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGdldFRleHRFbGxpcHNpcyhkb3RNYXhUZXh0V2lkdGgpLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy5ncmF5ODAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9QSUVDRV9XSURUSCkgLyAyIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX1BJRUNFX1dJRFRILFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9QSUVDRV9XSURUSCArIEFJX1RBQkxFX1RFWFRfR0FQICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXMoZG90TWF4VGV4dFdpZHRoKS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIChBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9UQUdfUEFERElORyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dFdpZHRoLCB0ZXh0IH0gPSBnZXRUZXh0RWxsaXBzaXMobWF4VGV4dFdpZHRoLCBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCh0ZXh0V2lkdGggKyAyICogQUlfVEFCTEVfVEFHX1BBRERJTkcsIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NSU5fV0lEVEgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JzLndoaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRNYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXModGV4dE1heFRleHRXaWR0aCkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsRGF0ZShyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHRyYW5zZm9ybVZhbHVlLCBjb2x1bW5XaWR0aCwgc3R5bGUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICAgICAgbGV0IGNlbGxUZXh0ID0gdHJhbnNmb3JtVmFsdWU7XG5cbiAgICAgICAgaWYgKGNlbGxUZXh0ID09IG51bGwgfHwgIV8uaXNTdHJpbmcoY2VsbFRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0TWF4V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gdGhpcy50ZXh0RWxsaXBzaXMoeyB0ZXh0OiBjZWxsVGV4dCwgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIHRleHRNYXhXaWR0aCB9KTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBzdHlsZT8uY29sb3IgfHwgY29sb3JzLmdyYXk4MDA7XG4gICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBzdHlsZT8uZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbFJhdGUocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZTogX2NlbGxWYWx1ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBtYXggPSA1O1xuICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSBfY2VsbFZhbHVlIGFzIFJhdGVGaWVsZFZhbHVlO1xuICAgICAgICBjb25zdCBzaXplID0gQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFO1xuICAgICAgICBjb25zdCBpc0VtcHR5ID0gaXNOaWwoY2VsbFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFsuLi5BcnJheShtYXgpLmtleXMoKV0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkID0gdmFsdWUgPD0gY2VsbFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaWNvblggPSBpbmRleCAqIHNpemUgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORztcbiAgICAgICAgICAgIGNvbnN0IGljb25ZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBzaXplKSAvIDI7XG5cbiAgICAgICAgICAgIGlmIChjdHggJiYgKGNoZWNrZWQgfHwgaXNFbXB0eSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGgoe1xuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgaWNvblgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBpY29uWSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMjIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0YXJGaWxsLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBpc0VtcHR5ID8gdGhpcy5jb2xvcnMuZ3JheTEwMCA6IHRoaXMuY29sb3JzLndhcmluZyxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLjE0LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEuMTRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsUHJvZ3Jlc3MocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgIGxldCBjZWxsVmFsdWUgPSB0cmFuc2Zvcm1WYWx1ZTtcbiAgICAgICAgaWYgKGlzTmlsKGNlbGxWYWx1ZSkpIHtcbiAgICAgICAgICAgIGNlbGxWYWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfLmlzTnVtYmVyKGNlbGxWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIEFJX1RBQkxFX1BST0dSRVNTX1RFWFRfV2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9IRUlHSFQ7XG4gICAgICAgIGNvbnN0IHRleHRIZWlnaHQgPSBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFO1xuICAgICAgICBjb25zdCBvZmZzZXRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hUKSAvIDI7XG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSB0ZXh0SGVpZ2h0KSAvIDI7XG5cbiAgICAgICAgLy8g57uY5Yi26IOM5pmvXG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgIHk6IHkgKyBvZmZzZXRZLFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgICAgICAgICBmaWxsOiBjb2xvcnMuZ3JheTIwMFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyDorqHnrpflubbnu5jliLbov5vluqZcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3NXaWR0aCA9IChjZWxsVmFsdWUgLyAxMDApICogd2lkdGg7XG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgIHk6IHkgKyBvZmZzZXRZLFxuICAgICAgICAgICAgd2lkdGg6IHByb2dyZXNzV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgICAgICAgICBmaWxsOiBjb2xvcnMuc3VjY2Vzc1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgeDogeCArIG9mZnNldFggKyB3aWR0aCArIEFJX1RBQkxFX1RFWFRfR0FQLFxuICAgICAgICAgICAgeTogeSArIHRleHRPZmZzZXRZLFxuICAgICAgICAgICAgdGV4dDogYCR7Y2VsbFZhbHVlfSVgLFxuICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxNZW1iZXIocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VzLCB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWU6IF9jZWxsVmFsdWUsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IF9jZWxsVmFsdWU7XG5cbiAgICAgICAgaWYgKCFjZWxsVmFsdWU/Lmxlbmd0aCB8fCAhcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZmllbGQuc2V0dGluZ3MgYXMgTWVtYmVyU2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGF2YXRhclNpemUgPSBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkU7XG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX0hFSUdIVDtcbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHNldHRpbmdzPy5pc19tdWx0aXBsZTtcblxuICAgICAgICBsZXQgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gYXZhdGFyU2l6ZSkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGF2YXRhclNpemUgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hUO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpc0FjdGl2ZSA/IDEzMCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1AgOiByb3dIZWlnaHQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QO1xuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBpc09wZXJhdGluZ1xuICAgICAgICAgICAgPyBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSAxMlxuICAgICAgICAgICAgOiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aDtcblxuICAgICAgICBjb25zdCBsaXN0Q291bnQgPSBjZWxsVmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXNPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Q291bnQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJbmZvID0gcmVmZXJlbmNlcz8ubWVtYmVyc1tjZWxsVmFsdWVbaW5kZXhdXTtcbiAgICAgICAgICAgIGlmICghdXNlckluZm8pIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB7IHVpZCwgZGlzcGxheV9uYW1lLCBhdmF0YXIgfSA9IHVzZXJJbmZvO1xuICAgICAgICAgICAgY29uc3QgaXRlbVdpZHRoID0gQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0ICsgKGlzTXVsdGlwbGUgPyBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX1BBRERJTkcgOiAwKTtcblxuICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIGl0ZW1XaWR0aDtcblxuICAgICAgICAgICAgbGV0IHJlYWxNYXhUZXh0V2lkdGggPSBtYXhUZXh0V2lkdGggPCAwID8gMCA6IG1heFRleHRXaWR0aDtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBpc09wZXJhdGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGluZ01heFdpZHRoID0gbWF4VGV4dFdpZHRoIC0gKEFJX1RBQkxFX0NFTExfQUREX0lURU1fQlVUVE9OX1NJWkUgKyA0KTtcbiAgICAgICAgICAgICAgICAvLyBpdGVtIE5vIHNwYWNlIHRvIGRpc3BsYXksIHRoZW4gcGVyZm9ybSBhIGxpbmUgZmVlZFxuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpbmdNYXhXaWR0aCA8PSAyMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbE1heFRleHRXaWR0aCA9IG9wZXJhdGluZ01heFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlzTW9yZSA9IGN1cnJlbnRYICsgaXRlbVdpZHRoID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgaWYgKGNvbHVtbldpZHRoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7mtLvliqjnirbmgIHkuIvvvIzlvZPotoXlh7rliJflrr3ml7bvvIzkuI3kvJrmuLLmn5PlkI7nu63lhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPj0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzkuI3mmK/pnZ7mtLvliqjnirbmgIHnmoTmnIDlkI7kuIDooYzvvIzliJnmjaLooYzmuLLmn5PmuqLlh7rlhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50WCArIGl0ZW1XaWR0aCA+IGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBpdGVtSGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFkgPj0gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlzT3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXZhdGFyKHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgIHVybDogYXZhdGFyISxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCEsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRBdmF0YXJTaG9ydE5hbWUoZGlzcGxheV9uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgYmdDb2xvcjogZ2V0QXZhdGFyQmdDb2xvcihkaXNwbGF5X25hbWUhKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQUlUYWJsZUF2YXRhclR5cGUubWVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjRcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIOWcqOmdnuWkmumAieaooeW8j+S4i+aYvuekuuWQjeensFxuICAgICAgICAgICAgICAgIGlmICghaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0WCA9IHggKyBjdXJyZW50WCArIEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCArIEFJX1RBQkxFX01FTUJFUl9JVEVNX0FWQVRBUl9NQVJHSU5fUklHSFQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB0ZXh0WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkaXNwbGF5X25hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IG1heFRleHRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogdGhpcy5jb2xvcnMuZ3JheTgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNNb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDAuMztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyBjdXJyZW50WSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiB0aGlzLmNvbG9ycy5ibGFja1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBjdXJyZW50WCArIEZPTlRfU0laRV9TTSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHRoaXMuY29sb3JzLndoaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEZPTlRfU0laRV9TTSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGArJHtsaXN0Q291bnQgLSBpbmRleCAtIDF9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsQXR0YWNobWVudChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IHJlZmVyZW5jZXMsIHgsIHksIGZpZWxkLCB0cmFuc2Zvcm1WYWx1ZTogX2NlbGxWYWx1ZSwgcm93SGVpZ2h0LCBjb2x1bW5XaWR0aCwgaXNBY3RpdmUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gX2NlbGxWYWx1ZTtcbiAgICAgICAgaWYgKCFjZWxsVmFsdWU/Lmxlbmd0aCB8fCAhcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUljb25TaXplID0gQUlfVEFCTEVfRklMRV9JQ09OX1NJWkU7XG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSBBSV9UQUJMRV9GSUxFX0lDT05fSVRFTV9IRUlHSFQ7XG4gICAgICAgIGNvbnN0IGlzT3BlcmF0aW5nID0gaXNBY3RpdmU7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBsZXQgY3VycmVudFkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIGZpbGVJY29uU2l6ZSkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGZpbGVJY29uU2l6ZSArIEFJX1RBQkxFX0ZJRUxEX0lURU1fTUFSR0lOX1JJR0hUO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpc0FjdGl2ZSA/IDEzMCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1AgOiByb3dIZWlnaHQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QO1xuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBpc09wZXJhdGluZ1xuICAgICAgICAgICAgPyBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSAxMlxuICAgICAgICAgICAgOiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aDtcblxuICAgICAgICBjb25zdCBsaXN0Q291bnQgPSBjZWxsVmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXNPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Q291bnQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRJbmZvID0gcmVmZXJlbmNlcy5hdHRhY2htZW50c1tjZWxsVmFsdWVbaW5kZXhdXTtcbiAgICAgICAgICAgIGlmICghYXR0YWNobWVudEluZm8pIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgeyB0aXRsZSwgYWRkaXRpb24gfSA9IGF0dGFjaG1lbnRJbmZvO1xuICAgICAgICAgICAgY29uc3QgaXRlbVdpZHRoID0gQUlfVEFCTEVfRklMRV9JQ09OX1NJWkUgKyBBSV9UQUJMRV9GSUVMRF9JVEVNX01BUkdJTl9SSUdIVDtcbiAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgaW5kZXggKiBpdGVtV2lkdGg7XG4gICAgICAgICAgICBsZXQgcmVhbE1heFRleHRXaWR0aCA9IG1heFRleHRXaWR0aCA8IDAgPyAwIDogbWF4VGV4dFdpZHRoO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIGlzT3BlcmF0aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW5nTWF4V2lkdGggPSBtYXhUZXh0V2lkdGggLSAoQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSArIDQpO1xuICAgICAgICAgICAgICAgIC8vIGl0ZW0gTm8gc3BhY2UgdG8gZGlzcGxheSwgdGhlbiBwZXJmb3JtIGEgbGluZSBmZWVkXG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGluZ01heFdpZHRoIDw9IDIwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUFSR0lOX1RPUDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWFsTWF4VGV4dFdpZHRoID0gb3BlcmF0aW5nTWF4V2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbldpZHRoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7mtLvliqjnirbmgIHkuIvvvIzlvZPotoXlh7rliJflrr3ml7bvvIzkuI3kvJrmuLLmn5PlkI7nu63lhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPj0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzkuI3mmK/pnZ7mtLvliqjnirbmgIHnmoTmnIDlkI7kuIDooYzvvIzliJnmjaLooYzmuLLmn5PmuqLlh7rlhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50WCArIGl0ZW1XaWR0aCA+IGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBpdGVtSGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFkgPj0gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlzT3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN2Z1N0cmluZyA9IGdldEZpbGVUaHVtYm5haWxTdmdTdHJpbmcoYWRkaXRpb24/LmV4dCk7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIGltZy5zcmMgPSBgZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnU3RyaW5nKX1gO1xuICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpbWcuc3JjLFxuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBjdXJyZW50WSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBpbWcuc3JjLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlfVEFCTEVfRklMRV9JQ09OX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfRklMRV9JQ09OX1NJWkVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNlbGxEcmF3ZXIgPSBuZXcgQ2VsbERyYXdlcigpO1xuIl19