@workflow/web-shared 5.0.0-beta.43 → 5.0.0-beta.44

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 (106) hide show
  1. package/README.md +4 -4
  2. package/dist/components/event-list-view.d.ts +12 -0
  3. package/dist/components/event-list-view.d.ts.map +1 -1
  4. package/dist/components/event-list-view.js +41 -20
  5. package/dist/components/sidebar/attribute-panel.d.ts +6 -2
  6. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  7. package/dist/components/sidebar/attribute-panel.js +10 -8
  8. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  9. package/dist/components/sidebar/copyable-data-block.js +2 -2
  10. package/dist/components/sidebar/entity-detail-panel.d.ts +6 -2
  11. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  12. package/dist/components/sidebar/entity-detail-panel.js +13 -5
  13. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  14. package/dist/components/sidebar/events-list.js +12 -5
  15. package/dist/components/sidebar/resolve-hook-modal.js +1 -1
  16. package/dist/components/sidebar/sidebar-data-context.d.ts +2 -0
  17. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
  18. package/dist/components/sidebar/sidebar-data-context.js +1 -1
  19. package/dist/components/stream-viewer.js +2 -2
  20. package/dist/components/trace-viewer/components/detail-panel-width.d.ts +4 -4
  21. package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -1
  22. package/dist/components/trace-viewer/components/detail-panel-width.js +5 -5
  23. package/dist/components/trace-viewer/components/detail-panel.d.ts +1 -1
  24. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -1
  25. package/dist/components/trace-viewer/components/detail-panel.js +3 -3
  26. package/dist/components/trace-viewer/components/draggable-border.d.ts +1 -1
  27. package/dist/components/trace-viewer/components/draggable-border.js +2 -2
  28. package/dist/components/trace-viewer/components/minimap.js +4 -4
  29. package/dist/components/trace-viewer/components/span-markers.d.ts +8 -9
  30. package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -1
  31. package/dist/components/trace-viewer/components/span-markers.js +13 -10
  32. package/dist/components/trace-viewer/components/timeline.d.ts +1 -1
  33. package/dist/components/trace-viewer/components/timeline.js +4 -4
  34. package/dist/components/trace-viewer/components/use-row-window.d.ts +1 -1
  35. package/dist/components/trace-viewer/components/use-row-window.js +2 -2
  36. package/dist/components/trace-viewer/trace-viewer.js +3 -3
  37. package/dist/components/trace-viewer/utils.d.ts +3 -1
  38. package/dist/components/trace-viewer/utils.d.ts.map +1 -1
  39. package/dist/components/trace-viewer/utils.js +6 -5
  40. package/dist/components/ui/data-inspector.d.ts +7 -1
  41. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  42. package/dist/components/ui/data-inspector.js +10 -5
  43. package/dist/components/ui/decrypt-button.d.ts +5 -1
  44. package/dist/components/ui/decrypt-button.d.ts.map +1 -1
  45. package/dist/components/ui/decrypt-button.js +4 -4
  46. package/dist/components/ui/duplicate-event-tooltip.d.ts +15 -5
  47. package/dist/components/ui/duplicate-event-tooltip.d.ts.map +1 -1
  48. package/dist/components/ui/duplicate-event-tooltip.js +18 -9
  49. package/dist/components/ui/error-stack-block.js +4 -4
  50. package/dist/components/ui/timestamp-tooltip.d.ts +5 -3
  51. package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
  52. package/dist/components/ui/timestamp-tooltip.js +9 -9
  53. package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
  54. package/dist/components/workflow-traces/event-colors.js +11 -1
  55. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  56. package/dist/components/workflow-traces/trace-span-construction.js +5 -4
  57. package/dist/index.d.ts +1 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +2 -1
  60. package/dist/lib/duplicate-events.d.ts +1 -1
  61. package/dist/lib/duplicate-events.js +2 -2
  62. package/dist/lib/hydration.d.ts.map +1 -1
  63. package/dist/lib/hydration.js +8 -13
  64. package/dist/lib/sealed-events.d.ts +28 -0
  65. package/dist/lib/sealed-events.d.ts.map +1 -0
  66. package/dist/lib/sealed-events.js +30 -0
  67. package/dist/lib/trace-builder.d.ts.map +1 -1
  68. package/dist/lib/trace-builder.js +8 -5
  69. package/dist/lib/utils.d.ts +1 -1
  70. package/dist/lib/utils.js +2 -2
  71. package/dist/lib/zstd-browser-decoder.js +2 -2
  72. package/package.json +5 -5
  73. package/src/components/event-list-view.tsx +57 -22
  74. package/src/components/sidebar/attribute-panel.tsx +15 -7
  75. package/src/components/sidebar/copyable-data-block.tsx +8 -1
  76. package/src/components/sidebar/entity-detail-panel.tsx +18 -2
  77. package/src/components/sidebar/events-list.tsx +16 -6
  78. package/src/components/sidebar/resolve-hook-modal.tsx +2 -2
  79. package/src/components/sidebar/sidebar-data-context.tsx +2 -0
  80. package/src/components/stream-viewer.tsx +1 -1
  81. package/src/components/trace-viewer/components/detail-panel-width.ts +4 -4
  82. package/src/components/trace-viewer/components/detail-panel.tsx +3 -1
  83. package/src/components/trace-viewer/components/draggable-border.tsx +1 -1
  84. package/src/components/trace-viewer/components/minimap.tsx +3 -3
  85. package/src/components/trace-viewer/components/span-markers.tsx +18 -13
  86. package/src/components/trace-viewer/components/timeline.tsx +4 -4
  87. package/src/components/trace-viewer/components/use-row-window.ts +1 -1
  88. package/src/components/trace-viewer/trace-viewer.tsx +2 -2
  89. package/src/components/trace-viewer/utils.test.ts +5 -3
  90. package/src/components/trace-viewer/utils.ts +12 -8
  91. package/src/components/ui/data-inspector.tsx +19 -3
  92. package/src/components/ui/decrypt-button.tsx +9 -2
  93. package/src/components/ui/duplicate-event-tooltip.tsx +32 -10
  94. package/src/components/ui/error-stack-block.tsx +3 -3
  95. package/src/components/ui/timestamp-tooltip.tsx +16 -6
  96. package/src/components/workflow-traces/event-colors.ts +11 -0
  97. package/src/components/workflow-traces/trace-span-construction.test.ts +27 -1
  98. package/src/components/workflow-traces/trace-span-construction.ts +5 -3
  99. package/src/index.ts +4 -0
  100. package/src/lib/duplicate-events.ts +1 -1
  101. package/src/lib/hydration.ts +7 -12
  102. package/src/lib/sealed-events.ts +32 -0
  103. package/src/lib/trace-builder.test.ts +29 -1
  104. package/src/lib/trace-builder.ts +10 -5
  105. package/src/lib/utils.ts +1 -1
  106. package/src/lib/zstd-browser-decoder.ts +1 -1
@@ -19,10 +19,10 @@ function isHook(data) {
19
19
  /**
20
20
  * Panel component for workflow traces that displays entity details.
21
21
  *
22
- * This component is rendered OUTSIDE the trace viewer context it
22
+ * This component is rendered OUTSIDE the trace viewer context: it
23
23
  * receives all data via props rather than reading from context.
24
24
  */
25
- export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, selectedSpan, showSeparateEventOccurrenceTimestamps = false, getModuleSourceUrl, }) {
25
+ export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDetail, onWakeUpSleep, onLoadEventData, onResolveHook, encryptionKey, onDecrypt, isDecrypting = false, isDecryptDisabled = false, decryptDisabledReason, selectedSpan, showSeparateEventOccurrenceTimestamps = false, getModuleSourceUrl, }) {
26
26
  const toast = useToast();
27
27
  const [stoppingSleep, setStoppingSleep] = useState(false);
28
28
  const [showResolveHookModal, setShowResolveHookModal] = useState(false);
@@ -199,7 +199,15 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDet
199
199
  }
200
200
  const hasPendingActions = (resource === 'sleep' && canWakeUp) ||
201
201
  (resource === 'hook' && canResolveHook);
202
- return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(DecryptClickContext.Provider, { value: onDecrypt ? { onDecrypt, isDecrypting, hasEncryptedData } : undefined, children: _jsxs("div", { className: "flex-1 overflow-y-auto px-4 pb-8", children: [hasPendingActions && (_jsxs("div", { className: "mb-4 rounded-lg border p-2", style: {
202
+ return (_jsxs("div", { className: "flex h-full flex-col", children: [_jsx(DecryptClickContext.Provider, { value: onDecrypt
203
+ ? {
204
+ onDecrypt,
205
+ isDecrypting,
206
+ isDecryptDisabled,
207
+ decryptDisabledReason,
208
+ hasEncryptedData,
209
+ }
210
+ : undefined, children: _jsxs("div", { className: "flex-1 overflow-y-auto px-4 pb-8", children: [hasPendingActions && (_jsxs("div", { className: "mb-4 rounded-lg border p-2", style: {
203
211
  borderColor: 'var(--ds-gray-300)',
204
212
  backgroundColor: 'var(--ds-gray-100)',
205
213
  }, children: [_jsx("p", { className: "mb-2 px-1 text-label-13 font-medium uppercase tracking-wide", style: { color: 'var(--ds-gray-700)' }, children: "Actions" }), _jsxs("div", { className: "flex flex-col gap-2", children: [resource === 'sleep' && canWakeUp && (_jsxs("button", { type: "button", onClick: handleWakeUp, disabled: stoppingSleep, className: clsx('flex items-center justify-center gap-2 rounded-md px-3 py-2 text-button-14', 'disabled:opacity-50 disabled:cursor-not-allowed transition-colors', stoppingSleep
@@ -212,6 +220,6 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, fetchSpanDet
212
220
  : 'cursor-pointer'), style: {
213
221
  background: 'var(--ds-gray-1000)',
214
222
  color: 'var(--ds-background-100)',
215
- }, children: [_jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] }))] })] })), _jsx(AttributePanel, { data: displayData, moduleSpecifier: moduleSpecifier, moduleSourceUrl: moduleSourceUrl, expiredAt: run.expiredAt, isLoading: loading, error: error ?? undefined, onStreamClick: onStreamClick, onRunClick: onRunClick, onDecrypt: onDecrypt, isDecrypting: isDecrypting, resource: resource }), rawEvents && (_jsx(EventsList, { events: rawEvents, onLoadEventData: onLoadEventData, onStreamClick: onStreamClick, onRunClick: onRunClick, encryptionKey: encryptionKey, showSeparateEventOccurrenceTimestamps: showSeparateEventOccurrenceTimestamps, duplicateEventIds: selectedSpan?.duplicateEventIds }))] }) }), _jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] }));
223
+ }, children: [_jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] }))] })] })), _jsx(AttributePanel, { data: displayData, moduleSpecifier: moduleSpecifier, moduleSourceUrl: moduleSourceUrl, expiredAt: run.expiredAt, isLoading: loading, error: error ?? undefined, onStreamClick: onStreamClick, onRunClick: onRunClick, onDecrypt: onDecrypt, isDecrypting: isDecrypting, isDecryptDisabled: isDecryptDisabled, decryptDisabledReason: decryptDisabledReason, resource: resource }), rawEvents && (_jsx(EventsList, { events: rawEvents, onLoadEventData: onLoadEventData, onStreamClick: onStreamClick, onRunClick: onRunClick, encryptionKey: encryptionKey, showSeparateEventOccurrenceTimestamps: showSeparateEventOccurrenceTimestamps, duplicateEventIds: selectedSpan?.duplicateEventIds }))] }) }), _jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] }));
216
224
  }
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRldGFpbC1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvZW50aXR5LWRldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBR0wsMkJBQTJCLEdBRTVCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxxQkFBcUIsR0FDdEIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQywyREFBMkQ7QUFDM0QsU0FBUyxNQUFNLENBQUMsSUFBYTtJQUMzQixPQUFPLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDdkUsQ0FBQztBQThCRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxF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LGVBQWUsRUFDaEMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQ3hCLFNBQVMsRUFBRSxPQUFPLEVBQ2xCLEtBQUssRUFBRSxLQUFLLElBQUksU0FBUyxFQUN6QixhQUFhLEVBQUUsYUFBYSxFQUM1QixVQUFVLEVBQUUsVUFBVSxFQUN0QixTQUFTLEVBQUUsU0FBUyxFQUNwQixZQUFZLEVBQUUsWUFBWSxFQUMxQixRQUFRLEVBQUUsUUFBUSxHQUNsQixFQUVELFNBQVMsSUFBSSxDQUNaLEtBQUMsVUFBVSxJQUNULE1BQU0sRUFBRSxTQUFTLEVBQ2pCLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLHFDQUFxQyxFQUNuQyxxQ0FBcUMsRUFFdkMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixHQUNsRCxDQUNILElBQ0csR0FDdUIsRUFHL0IsS0FBQyxnQkFBZ0IsSUFDZixNQUFNLEVBQUUsb0JBQW9CLEVBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFDN0MsUUFBUSxFQUFFLGlCQUFpQixFQUMzQixZQUFZLEVBQUUsYUFBYSxHQUMzQixJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHBhcnNlU3RlcE5hbWUsIHBhcnNlV29ya2Zsb3dOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHtcbiAgdHlwZSBFdmVudCxcbiAgdHlwZSBIb29rLFxuICBpc1Rlcm1pbmFsV29ya2Zsb3dSdW5TdGF0dXMsXG4gIHR5cGUgV29ya2Zsb3dSdW4sXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IFNlbmQsIFphcCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRvYXN0IH0gZnJvbSAnLi4vLi4vbGliL3RvYXN0JztcbmltcG9ydCB7IERlY3J5cHRDbGlja0NvbnRleHQgfSBmcm9tICcuLi91aS9kYXRhLWluc3BlY3Rvcic7XG5pbXBvcnQgeyBBdHRyaWJ1dGVQYW5lbCB9IGZyb20gJy4vYXR0cmlidXRlLXBhbmVsJztcbmltcG9ydCB7IEV2ZW50c0xpc3QgfSBmcm9tICcuL2V2ZW50cy1saXN0JztcbmltcG9ydCB7IFJlc29sdmVIb29rTW9kYWwgfSBmcm9tICcuL3Jlc29sdmUtaG9vay1tb2RhbCc7XG5pbXBvcnQgeyB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsIH0gZnJvbSAnLi9zaWRlYmFyLWRhdGEtY29udGV4dCc7XG5pbXBvcnQge1xuICB0eXBlIEZldGNoU3BhbkRldGFpbCxcbiAgdXNlU2VsZWN0ZWRTcGFuRGV0YWlsLFxufSBmcm9tICcuL3VzZS1zZWxlY3RlZC1zcGFuLWRldGFpbCc7XG5cbi8vIFR5cGUgZ3VhcmQgZm9yIHJ1bnRpbWUgdmFsaWRhdGlvbiBvZiBzcGFuIGF0dHJpYnV0ZSBkYXRhXG5mdW5jdGlvbiBpc0hvb2soZGF0YTogdW5rbm93bik6IGRhdGEgaXMgSG9vayB7XG4gIHJldHVybiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAnaG9va0lkJyBpbiBkYXRhO1xufVxuXG4vKipcbiAqIEluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzcGFuXG4gKi9cbmV4cG9ydCB0eXBlIFNwYW5TZWxlY3Rpb25JbmZvID0ge1xuICByZXNvdXJjZTogJ3J1bicgfCAnc3RlcCcgfCAnaG9vaycgfCAnc2xlZXAnO1xuICByZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHJ1bklkPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBJbmZvIGFib3V0IHRoZSBzZWxlY3RlZCBzcGFuIGZyb20gdGhlIHRyYWNlIHZpZXdlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZFNwYW5JbmZvIHtcbiAgLyoqIFRoZSByYXcgZGF0YSBmcm9tIHRoZSBzcGFuIGF0dHJpYnV0ZXMgKHN0ZXAvcnVuL2hvb2sgb2JqZWN0IGZyb20gdGhlIHRyYWNlKSAqL1xuICBkYXRhPzogdW5rbm93bjtcbiAgLyoqIFRoZSBzcGFuIHJlc291cmNlIHR5cGUgKGZyb20gc3BhbiBhdHRyaWJ1dGVzKSAqL1xuICByZXNvdXJjZT86IHN0cmluZztcbiAgLyoqIFRoZSBzcGFuIElEIChjb3JyZWxhdGlvbklkIGZvciBmaWx0ZXJpbmcgZXZlbnRzKSAqL1xuICBzcGFuSWQ/OiBzdHJpbmc7XG4gIC8qKiBSYXcgY29ycmVsYXRlZCBldmVudHMgZnJvbSB0aGUgc3RvcmUgKE5PVCBmcm9tIHRoZSB0cmFjZSB3b3JrZXIgcGlwZWxpbmUpICovXG4gIHJhd0V2ZW50cz86IEV2ZW50W107XG4gIC8qKlxuICAgKiBFdmVudHMgZXZlcnkgcmVwbGF5IHJlYWRzIHBhc3QgYXMgcmVwZWF0cywgY29tcHV0ZWQgZnJvbSB0aGUgd2hvbGUgbG9nLlxuICAgKiBgcmF3RXZlbnRzYCBpcyBvbmUgZW50aXR5J3Mgc2xpY2UsIHdoaWNoIGNhbm5vdCBhbnN3ZXIgdGhhdCBvbiBpdHMgb3duLlxuICAgKi9cbiAgZHVwbGljYXRlRXZlbnRJZHM/OiBSZWFkb25seVNldDxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFBhbmVsIGNvbXBvbmVudCBmb3Igd29ya2Zsb3cgdHJhY2VzIHRoYXQgZGlzcGxheXMgZW50aXR5IGRldGFpbHMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgT1VUU0lERSB0aGUgdHJhY2Ugdmlld2VyIGNvbnRleHQg4oCUIGl0XG4gKiByZWNlaXZlcyBhbGwgZGF0YSB2aWEgcHJvcHMgcmF0aGVyIHRoYW4gcmVhZGluZyBmcm9tIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHlEZXRhaWxQYW5lbCh7XG4gIHJ1bixcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgZmV0Y2hTcGFuRGV0YWlsLFxuICBvbldha2VVcFNsZWVwLFxuICBvbkxvYWRFdmVudERhdGEsXG4gIG9uUmVzb2x2ZUhvb2ssXG4gIGVuY3J5cHRpb25LZXksXG4gIG9uRGVjcnlwdCxcbiAgaXNEZWNyeXB0aW5nID0gZmFsc2UsXG4gIHNlbGVjdGVkU3BhbixcbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyA9IGZhbHNlLFxuICBnZXRNb2R1bGVTb3VyY2VVcmwsXG59OiB7XG4gIHJ1bjogV29ya2Zsb3dSdW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgLyoqIENhbGxiYWNrIHRvIHdha2UgdXAgYSBwZW5kaW5nIHNsZWVwIGNhbGwuICovXG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIC8qKiBDYWxsYmFjayB0byBsb2FkIGV2ZW50IGRhdGEgZm9yIGEgc3BlY2lmaWMgZXZlbnQgKGxhenkgbG9hZGluZykgKi9cbiAgb25Mb2FkRXZlbnREYXRhPzogKGV2ZW50OiBFdmVudCkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIC8qKiBDYWxsYmFjayB0byByZXNvbHZlIGEgaG9vayB3aXRoIGEgcGF5bG9hZC4gKi9cbiAgb25SZXNvbHZlSG9vaz86IChcbiAgICBob29rVG9rZW46IHN0cmluZyxcbiAgICBwYXlsb2FkOiB1bmtub3duLFxuICAgIGhvb2s/OiBIb29rXG4gICkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEVuY3J5cHRpb24ga2V5IChhdmFpbGFibGUgYWZ0ZXIgRGVjcnlwdCBpcyBjbGlja2VkKSwgdXNlZCB0byByZS1sb2FkIGV2ZW50IGRhdGEgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBDYWxsYmFjayB0byBpbml0aWF0ZSBkZWNyeXB0aW9uIG9mIGVuY3J5cHRlZCBydW4gZGF0YSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciB0aGUgZW5jcnlwdGlvbiBrZXkgaXMgY3VycmVudGx5IGJlaW5nIGZldGNoZWQgKi9cbiAgaXNEZWNyeXB0aW5nPzogYm9vbGVhbjtcbiAgLyoqIEluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzcGFuIGZyb20gdGhlIHRyYWNlIHZpZXdlciAqL1xuICBzZWxlY3RlZFNwYW46IFNlbGVjdGVkU3BhbkluZm8gfCBudWxsO1xuICAvKiogU2hvdyBvY2N1cnJlZEF0IHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBmb2xkaW5nIGl0IGludG8gdGhlIENyZWF0ZWQgdGltZXN0YW1wLiAqL1xuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPzogYm9vbGVhbjtcbiAgZ2V0TW9kdWxlU291cmNlVXJsPzogKGluZm86IHtcbiAgICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZztcbiAgICBkZXBsb3ltZW50SWQ6IHN0cmluZztcbiAgfSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufSk6IFJlYWN0LkpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3QoKTtcbiAgY29uc3QgW3N0b3BwaW5nU2xlZXAsIHNldFN0b3BwaW5nU2xlZXBdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd1Jlc29sdmVIb29rTW9kYWwsIHNldFNob3dSZXNvbHZlSG9va01vZGFsXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Jlc29sdmluZ0hvb2ssIHNldFJlc29sdmluZ0hvb2tdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAvLyBUcmFjayBob29rcyB0aGF0IHdlcmUgcmVzb2x2ZWQgaW4gdGhpcyBzZXNzaW9uIHNvIHRoZSBidXR0b24gaGlkZXNcbiAgLy8gaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbmV4dCBldmVudCBwb2xsLlxuICBjb25zdCBbcmVzb2x2ZWRIb29rSWRzLCBzZXRSZXNvbHZlZEhvb2tJZHNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KFxuICAgIG5ldyBTZXQoKVxuICApO1xuXG4gIGNvbnN0IHNpZGViYXIgPSB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsKCk7XG4gIGNvbnN0IGhhc0VuY3J5cHRlZERhdGEgPSBCb29sZWFuKHNpZGViYXI/Lmhhc0VuY3J5cHRlZERhdGEgJiYgIWVuY3J5cHRpb25LZXkpO1xuXG4gIGNvbnN0IGRhdGEgPSBzZWxlY3RlZFNwYW4/LmRhdGE7XG4gIGNvbnN0IHJhd0V2ZW50cyA9IHNlbGVjdGVkU3Bhbj8ucmF3RXZlbnRzO1xuICBjb25zdCByYXdFdmVudHNMZW5ndGggPSByYXdFdmVudHM/Lmxlbmd0aCA/PyAwO1xuXG4gIGNvbnN0IHtcbiAgICBzdGF0dXMsXG4gICAgcmVzb3VyY2UsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBkaXNwbGF5RGF0YSxcbiAgICBkZXRhaWw6IG1hdGNoZWRTcGFuRGV0YWlsRGF0YSxcbiAgICBlcnJvcixcbiAgfSA9IHVzZVNlbGVjdGVkU3BhbkRldGFpbChzZWxlY3RlZFNwYW4sIGZldGNoU3BhbkRldGFpbCk7XG4gIGNvbnN0IGxvYWRpbmcgPSBzdGF0dXMgPT09ICdsb2FkaW5nJztcblxuICAvLyBDaGVjayBpZiB0aGlzIHNsZWVwIGlzIHN0aWxsIHBlbmRpbmcgYW5kIGNhbiBiZSB3b2tlbiB1cFxuICBjb25zdCBjYW5XYWtlVXAgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB2b2lkIHJhd0V2ZW50c0xlbmd0aDtcbiAgICBpZiAocmVzb3VyY2UgIT09ICdzbGVlcCcgfHwgIXJhd0V2ZW50cykgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc1Rlcm1pbmFsV29ya2Zsb3dSdW5TdGF0dXMocnVuLnN0YXR1cykpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNXYWl0Q3JlYXRlZCA9IHJhd0V2ZW50cy5zb21lKFxuICAgICAgKGUpID0+IGUuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICk7XG4gICAgaWYgKCFoYXNXYWl0Q3JlYXRlZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGhhc1dhaXRDb21wbGV0ZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICAgICk7XG4gICAgcmV0dXJuICFoYXNXYWl0Q29tcGxldGVkO1xuICB9LCBbcmVzb3VyY2UsIHJhd0V2ZW50cywgcmF3RXZlbnRzTGVuZ3RoLCBydW4uc3RhdHVzXSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBob29rIGNhbiBiZSByZXNvbHZlZFxuICBjb25zdCBjYW5SZXNvbHZlSG9vayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHZvaWQgcmF3RXZlbnRzTGVuZ3RoO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gJ2hvb2snIHx8ICFyYXdFdmVudHMgfHwgIXJlc291cmNlSWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgcmVzb2x2ZWQgdGhpcyBob29rIGluIHRoaXMgc2Vzc2lvblxuICAgIGlmIChyZXNvbHZlZEhvb2tJZHMuaGFzKHJlc291cmNlSWQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoaXNUZXJtaW5hbFdvcmtmbG93UnVuU3RhdHVzKHJ1bi5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaGFzSG9va0Rpc3Bvc2VkID0gcmF3RXZlbnRzLnNvbWUoXG4gICAgICAoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJ1xuICAgICk7XG4gICAgaWYgKGhhc0hvb2tEaXNwb3NlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LCBbXG4gICAgcmVzb3VyY2UsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByYXdFdmVudHMsXG4gICAgcmF3RXZlbnRzTGVuZ3RoLFxuICAgIHJ1bi5zdGF0dXMsXG4gICAgcmVzb2x2ZWRIb29rSWRzLFxuICBdKTtcblxuICAvLyBHZXQgdGhlIGhvb2sgdG9rZW4gZm9yIHJlc29sdmluZyAocHJlZmVyIGZldGNoZWQgZGF0YSwgdGhlbiBob29rcyBhcnJheSBmYWxsYmFjaylcbiAgY29uc3QgaG9va1Rva2VuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlICE9PSAnaG9vaycgfHwgIXJlc291cmNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gMS4gVHJ5IHRoZSBleHRlcm5hbGx5LWZldGNoZWQgZGV0YWlsIGRhdGEgZmlyc3RcbiAgICBpZiAoaXNIb29rKG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgJiYgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuO1xuICAgIH1cbiAgICAvLyAyLiBUcnkgdGhlIHNwYW4ncyBpbmxpbmUgZGF0YSAocmVjb25zdHJ1Y3RlZCBmcm9tIGhvb2tfY3JlYXRlZCBldmVudClcbiAgICBpZiAoaXNIb29rKGRhdGEpICYmIChkYXRhIGFzIEhvb2spLnRva2VuKSB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgSG9vaykudG9rZW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZXNvdXJjZSwgcmVzb3VyY2VJZCwgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXJyb3IgJiYgc2VsZWN0ZWRTcGFuICYmIHJlc291cmNlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtyZXNvdXJjZX0gZGV0YWlsc2AsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtlcnJvciwgcmVzb3VyY2UsIHNlbGVjdGVkU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVdha2VVcCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc3RvcHBpbmdTbGVlcCB8fCAhcmVzb3VyY2VJZCkgcmV0dXJuO1xuICAgIGlmICghb25XYWtlVXBTbGVlcCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byB3YWtlIHVwIHNsZWVwJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ05vIHdha2UtdXAgaGFuZGxlciBwcm92aWRlZC4nLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldFN0b3BwaW5nU2xlZXAodHJ1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvbldha2VVcFNsZWVwKHJ1bi5ydW5JZCwgcmVzb3VyY2VJZCk7XG4gICAgICBpZiAocmVzdWx0LnN0b3BwZWRDb3VudCA+IDApIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnUnVuIHdva2VuIHVwJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1RoZSBzbGVlcCBjYWxsIGhhcyBiZWVuIGludGVycnVwdGVkIGFuZCB0aGUgcnVuIHdva2VuIHVwLicsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3QuaW5mbygnU2xlZXAgYWxyZWFkeSBjb21wbGV0ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHNsZWVwIGNhbGwgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW46JywgZXJyKTtcbiAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW4nLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3RvcHBpbmdTbGVlcChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc29sdmVIb29rID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChyZXNvbHZpbmdIb29rKSByZXR1cm47XG4gICAgICBpZiAoIW9uUmVzb2x2ZUhvb2spIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdObyByZXNvbHZlIGhhbmRsZXIgcHJvdmlkZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaG9va1Rva2VuKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBob29rJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ01pc3NpbmcgaG9vayB0b2tlbi4gVHJ5IHJlZnJlc2hpbmcgdGhlIHJ1biBkYXRhIGFuZCByZXRyeS4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXNvbHZpbmdIb29rKHRydWUpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBtYXRjaGVkU3BhbkRldGFpbERhdGEgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgaG9vayA9IGlzSG9vayhjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCBvblJlc29sdmVIb29rKGhvb2tUb2tlbiwgcGF5bG9hZCwgaG9vayk7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0hvb2sgcmVzb2x2ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcGF5bG9hZCBoYXMgYmVlbiBzZW50IGFuZCB0aGUgaG9vayByZXNvbHZlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpO1xuICAgICAgICAvLyBNYXJrIHRoaXMgaG9vayBhcyByZXNvbHZlZCBsb2NhbGx5IHNvIHRoZSBidXR0b24gaGlkZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzZXRSZXNvbHZlZEhvb2tJZHMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2s6JywgZXJyKTtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFJlc29sdmluZ0hvb2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uUmVzb2x2ZUhvb2ssIGhvb2tUb2tlbiwgcmVzb2x2aW5nSG9vaywgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXVxuICApO1xuXG4gIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlSZWNvcmQgPSBkaXNwbGF5RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBkaXNwbGF5U3RlcE5hbWUgPSBkaXNwbGF5UmVjb3JkLnN0ZXBOYW1lO1xuICAgIGNvbnN0IGRpc3BsYXlXb3JrZmxvd05hbWUgPSBkaXNwbGF5UmVjb3JkLndvcmtmbG93TmFtZTtcbiAgICBpZiAodHlwZW9mIGRpc3BsYXlTdGVwTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5U3RlcE5hbWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcGxheVdvcmtmbG93TmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5V29ya2Zsb3dOYW1lO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bi53b3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcnVuLndvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2Rpc3BsYXlEYXRhLCBydW4ud29ya2Zsb3dOYW1lXSk7XG5cbiAgY29uc3QgbW9kdWxlU291cmNlVXJsID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFnZXRNb2R1bGVTb3VyY2VVcmwgfHwgIW1vZHVsZVNwZWNpZmllcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXJzZWQgPVxuICAgICAgcGFyc2VTdGVwTmFtZShtb2R1bGVTcGVjaWZpZXIpID8/IHBhcnNlV29ya2Zsb3dOYW1lKG1vZHVsZVNwZWNpZmllcik7XG4gICAgaWYgKCFwYXJzZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGF0YURlcGxveW1lbnRJZCA9IGRpc3BsYXlEYXRhLmRlcGxveW1lbnRJZDtcbiAgICByZXR1cm4gZ2V0TW9kdWxlU291cmNlVXJsKHtcbiAgICAgIG1vZHVsZVNwZWNpZmllcjogcGFyc2VkLm1vZHVsZVNwZWNpZmllcixcbiAgICAgIGRlcGxveW1lbnRJZDpcbiAgICAgICAgdHlwZW9mIGRhdGFEZXBsb3ltZW50SWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBkYXRhRGVwbG95bWVudElkXG4gICAgICAgICAgOiBydW4uZGVwbG95bWVudElkLFxuICAgIH0pO1xuICB9LCBbZ2V0TW9kdWxlU291cmNlVXJsLCBtb2R1bGVTcGVjaWZpZXIsIGRpc3BsYXlEYXRhLCBydW4uZGVwbG95bWVudElkXSk7XG5cbiAgaWYgKCFzZWxlY3RlZFNwYW4gfHwgIXJlc291cmNlIHx8ICFyZXNvdXJjZUlkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBoYXNQZW5kaW5nQWN0aW9ucyA9XG4gICAgKHJlc291cmNlID09PSAnc2xlZXAnICYmIGNhbldha2VVcCkgfHxcbiAgICAocmVzb3VyY2UgPT09ICdob29rJyAmJiBjYW5SZXNvbHZlSG9vayk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sXCI+XG4gICAgICA8RGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgb25EZWNyeXB0ID8geyBvbkRlY3J5cHQsIGlzRGVjcnlwdGluZywgaGFzRW5jcnlwdGVkRGF0YSB9IDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3cteS1hdXRvIHB4LTQgcGItOFwiPlxuICAgICAgICAgIHtoYXNQZW5kaW5nQWN0aW9ucyAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm1iLTQgcm91bmRlZC1sZyBib3JkZXIgcC0yXCJcbiAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0yIHB4LTEgdGV4dC1sYWJlbC0xMyBmb250LW1lZGl1bSB1cHBlcmNhc2UgdHJhY2tpbmctd2lkZVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBBY3Rpb25zXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgey8qIFdha2UgdXAgYnV0dG9uIGZvciBwZW5kaW5nIHNsZWVwIGNhbGxzICovfVxuICAgICAgICAgICAgICAgIHtyZXNvdXJjZSA9PT0gJ3NsZWVwJyAmJiBjYW5XYWtlVXAgJiYgKFxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlV2FrZVVwfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c3RvcHBpbmdTbGVlcH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LWJ1dHRvbi0xNCcsXG4gICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICBzdG9wcGluZ1NsZWVwXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdvcGFjaXR5LTUwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1hbWJlci0yMDApJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWFtYmVyLTkwMCknLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8WmFwIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICB7c3RvcHBpbmdTbGVlcCA/ICdXYWtpbmcgdXAuLi4nIDogJ1dha2UgVXAgU2xlZXAnfVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgIHsvKiBSZXNvbHZlIGhvb2sgYnV0dG9uIGZvciBwZW5kaW5nIGhvb2tzICovfVxuICAgICAgICAgICAgICAgIHtyZXNvdXJjZSA9PT0gJ2hvb2snICYmIGNhblJlc29sdmVIb29rICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNob3dSZXNvbHZlSG9va01vZGFsKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17cmVzb2x2aW5nSG9va31cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgICAgICAgICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiByb3VuZGVkLW1kIHB4LTMgcHktMiB0ZXh0LWJ1dHRvbi0xNCcsXG4gICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZpbmdIb29rXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdvcGFjaXR5LTUwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1ncmF5LTEwMDApJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWJhY2tncm91bmQtMTAwKScsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTZW5kIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICBSZXNvbHZlIEhvb2tcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxBdHRyaWJ1dGVQYW5lbFxuICAgICAgICAgICAgZGF0YT17ZGlzcGxheURhdGF9XG4gICAgICAgICAgICBtb2R1bGVTcGVjaWZpZXI9e21vZHVsZVNwZWNpZmllcn1cbiAgICAgICAgICAgIG1vZHVsZVNvdXJjZVVybD17bW9kdWxlU291cmNlVXJsfVxuICAgICAgICAgICAgZXhwaXJlZEF0PXtydW4uZXhwaXJlZEF0fVxuICAgICAgICAgICAgaXNMb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgICAgZXJyb3I9e2Vycm9yID8/IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIG9uU3RyZWFtQ2xpY2s9e29uU3RyZWFtQ2xpY2t9XG4gICAgICAgICAgICBvblJ1bkNsaWNrPXtvblJ1bkNsaWNrfVxuICAgICAgICAgICAgb25EZWNyeXB0PXtvbkRlY3J5cHR9XG4gICAgICAgICAgICBpc0RlY3J5cHRpbmc9e2lzRGVjcnlwdGluZ31cbiAgICAgICAgICAgIHJlc291cmNlPXtyZXNvdXJjZX1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAge3Jhd0V2ZW50cyAmJiAoXG4gICAgICAgICAgICA8RXZlbnRzTGlzdFxuICAgICAgICAgICAgICBldmVudHM9e3Jhd0V2ZW50c31cbiAgICAgICAgICAgICAgb25Mb2FkRXZlbnREYXRhPXtvbkxvYWRFdmVudERhdGF9XG4gICAgICAgICAgICAgIG9uU3RyZWFtQ2xpY2s9e29uU3RyZWFtQ2xpY2t9XG4gICAgICAgICAgICAgIG9uUnVuQ2xpY2s9e29uUnVuQ2xpY2t9XG4gICAgICAgICAgICAgIGVuY3J5cHRpb25LZXk9e2VuY3J5cHRpb25LZXl9XG4gICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM9e1xuICAgICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkdXBsaWNhdGVFdmVudElkcz17c2VsZWN0ZWRTcGFuPy5kdXBsaWNhdGVFdmVudElkc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0RlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXI+XG5cbiAgICAgIHsvKiBSZXNvbHZlIEhvb2sgTW9kYWwgKi99XG4gICAgICA8UmVzb2x2ZUhvb2tNb2RhbFxuICAgICAgICBpc09wZW49e3Nob3dSZXNvbHZlSG9va01vZGFsfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UmVzb2x2ZUhvb2tNb2RhbChmYWxzZSl9XG4gICAgICAgIG9uU3VibWl0PXtoYW5kbGVSZXNvbHZlSG9va31cbiAgICAgICAgaXNTdWJtaXR0aW5nPXtyZXNvbHZpbmdIb29rfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRldGFpbC1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvZW50aXR5LWRldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBR0wsMkJBQTJCLEdBRTVCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFFTCxxQkFBcUIsR0FDdEIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQywyREFBMkQ7QUFDM0QsU0FBUyxNQUFNLENBQUMsSUFBYTtJQUMzQixPQUFPLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDdkUsQ0FBQztBQThCRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxF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QUVELEtBQUMsY0FBYyxJQUNiLElBQUksRUFBRSxXQUFXLEVBQ2pCLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUN4QixTQUFTLEVBQUUsT0FBTyxFQUNsQixLQUFLLEVBQUUsS0FBSyxJQUFJLFNBQVMsRUFDekIsYUFBYSxFQUFFLGFBQWEsRUFDNUIsVUFBVSxFQUFFLFVBQVUsRUFDdEIsU0FBUyxFQUFFLFNBQVMsRUFDcEIsWUFBWSxFQUFFLFlBQVksRUFDMUIsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQ3BDLHFCQUFxQixFQUFFLHFCQUFxQixFQUM1QyxRQUFRLEVBQUUsUUFBUSxHQUNsQixFQUVELFNBQVMsSUFBSSxDQUNaLEtBQUMsVUFBVSxJQUNULE1BQU0sRUFBRSxTQUFTLEVBQ2pCLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLGFBQWEsRUFBRSxhQUFhLEVBQzVCLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLGFBQWEsRUFBRSxhQUFhLEVBQzVCLHFDQUFxQyxFQUNuQyxxQ0FBcUMsRUFFdkMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixHQUNsRCxDQUNILElBQ0csR0FDdUIsRUFHL0IsS0FBQyxnQkFBZ0IsSUFDZixNQUFNLEVBQUUsb0JBQW9CLEVBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsRUFDN0MsUUFBUSxFQUFFLGlCQUFpQixFQUMzQixZQUFZLEVBQUUsYUFBYSxHQUMzQixJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHBhcnNlU3RlcE5hbWUsIHBhcnNlV29ya2Zsb3dOYW1lIH0gZnJvbSAnQHdvcmtmbG93L3V0aWxzL3BhcnNlLW5hbWUnO1xuaW1wb3J0IHtcbiAgdHlwZSBFdmVudCxcbiAgdHlwZSBIb29rLFxuICBpc1Rlcm1pbmFsV29ya2Zsb3dSdW5TdGF0dXMsXG4gIHR5cGUgV29ya2Zsb3dSdW4sXG59IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IFNlbmQsIFphcCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRvYXN0IH0gZnJvbSAnLi4vLi4vbGliL3RvYXN0JztcbmltcG9ydCB7IERlY3J5cHRDbGlja0NvbnRleHQgfSBmcm9tICcuLi91aS9kYXRhLWluc3BlY3Rvcic7XG5pbXBvcnQgeyBBdHRyaWJ1dGVQYW5lbCB9IGZyb20gJy4vYXR0cmlidXRlLXBhbmVsJztcbmltcG9ydCB7IEV2ZW50c0xpc3QgfSBmcm9tICcuL2V2ZW50cy1saXN0JztcbmltcG9ydCB7IFJlc29sdmVIb29rTW9kYWwgfSBmcm9tICcuL3Jlc29sdmUtaG9vay1tb2RhbCc7XG5pbXBvcnQgeyB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsIH0gZnJvbSAnLi9zaWRlYmFyLWRhdGEtY29udGV4dCc7XG5pbXBvcnQge1xuICB0eXBlIEZldGNoU3BhbkRldGFpbCxcbiAgdXNlU2VsZWN0ZWRTcGFuRGV0YWlsLFxufSBmcm9tICcuL3VzZS1zZWxlY3RlZC1zcGFuLWRldGFpbCc7XG5cbi8vIFR5cGUgZ3VhcmQgZm9yIHJ1bnRpbWUgdmFsaWRhdGlvbiBvZiBzcGFuIGF0dHJpYnV0ZSBkYXRhXG5mdW5jdGlvbiBpc0hvb2soZGF0YTogdW5rbm93bik6IGRhdGEgaXMgSG9vayB7XG4gIHJldHVybiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAnaG9va0lkJyBpbiBkYXRhO1xufVxuXG4vKipcbiAqIEluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzcGFuXG4gKi9cbmV4cG9ydCB0eXBlIFNwYW5TZWxlY3Rpb25JbmZvID0ge1xuICByZXNvdXJjZTogJ3J1bicgfCAnc3RlcCcgfCAnaG9vaycgfCAnc2xlZXAnO1xuICByZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHJ1bklkPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBJbmZvIGFib3V0IHRoZSBzZWxlY3RlZCBzcGFuIGZyb20gdGhlIHRyYWNlIHZpZXdlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RlZFNwYW5JbmZvIHtcbiAgLyoqIFRoZSByYXcgZGF0YSBmcm9tIHRoZSBzcGFuIGF0dHJpYnV0ZXMgKHN0ZXAvcnVuL2hvb2sgb2JqZWN0IGZyb20gdGhlIHRyYWNlKSAqL1xuICBkYXRhPzogdW5rbm93bjtcbiAgLyoqIFRoZSBzcGFuIHJlc291cmNlIHR5cGUgKGZyb20gc3BhbiBhdHRyaWJ1dGVzKSAqL1xuICByZXNvdXJjZT86IHN0cmluZztcbiAgLyoqIFRoZSBzcGFuIElEIChjb3JyZWxhdGlvbklkIGZvciBmaWx0ZXJpbmcgZXZlbnRzKSAqL1xuICBzcGFuSWQ/OiBzdHJpbmc7XG4gIC8qKiBSYXcgY29ycmVsYXRlZCBldmVudHMgZnJvbSB0aGUgc3RvcmUgKE5PVCBmcm9tIHRoZSB0cmFjZSB3b3JrZXIgcGlwZWxpbmUpICovXG4gIHJhd0V2ZW50cz86IEV2ZW50W107XG4gIC8qKlxuICAgKiBFdmVudHMgZXZlcnkgcmVwbGF5IHJlYWRzIHBhc3QgYXMgcmVwZWF0cywgY29tcHV0ZWQgZnJvbSB0aGUgd2hvbGUgbG9nLlxuICAgKiBgcmF3RXZlbnRzYCBpcyBvbmUgZW50aXR5J3Mgc2xpY2UsIHdoaWNoIGNhbm5vdCBhbnN3ZXIgdGhhdCBvbiBpdHMgb3duLlxuICAgKi9cbiAgZHVwbGljYXRlRXZlbnRJZHM/OiBSZWFkb25seVNldDxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFBhbmVsIGNvbXBvbmVudCBmb3Igd29ya2Zsb3cgdHJhY2VzIHRoYXQgZGlzcGxheXMgZW50aXR5IGRldGFpbHMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgT1VUU0lERSB0aGUgdHJhY2Ugdmlld2VyIGNvbnRleHQ6IGl0XG4gKiByZWNlaXZlcyBhbGwgZGF0YSB2aWEgcHJvcHMgcmF0aGVyIHRoYW4gcmVhZGluZyBmcm9tIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHlEZXRhaWxQYW5lbCh7XG4gIHJ1bixcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgZmV0Y2hTcGFuRGV0YWlsLFxuICBvbldha2VVcFNsZWVwLFxuICBvbkxvYWRFdmVudERhdGEsXG4gIG9uUmVzb2x2ZUhvb2ssXG4gIGVuY3J5cHRpb25LZXksXG4gIG9uRGVjcnlwdCxcbiAgaXNEZWNyeXB0aW5nID0gZmFsc2UsXG4gIGlzRGVjcnlwdERpc2FibGVkID0gZmFsc2UsXG4gIGRlY3J5cHREaXNhYmxlZFJlYXNvbixcbiAgc2VsZWN0ZWRTcGFuLFxuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzID0gZmFsc2UsXG4gIGdldE1vZHVsZVNvdXJjZVVybCxcbn06IHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBzdHJlYW0gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhIHJ1biByZWZlcmVuY2UgaXMgY2xpY2tlZCAqL1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGZldGNoU3BhbkRldGFpbDogRmV0Y2hTcGFuRGV0YWlsO1xuICAvKiogQ2FsbGJhY2sgdG8gd2FrZSB1cCBhIHBlbmRpbmcgc2xlZXAgY2FsbC4gKi9cbiAgb25XYWtlVXBTbGVlcD86IChcbiAgICBydW5JZDogc3RyaW5nLFxuICAgIGNvcnJlbGF0aW9uSWQ6IHN0cmluZ1xuICApID0+IFByb21pc2U8eyBzdG9wcGVkQ291bnQ6IG51bWJlciB9PjtcbiAgLyoqIENhbGxiYWNrIHRvIGxvYWQgZXZlbnQgZGF0YSBmb3IgYSBzcGVjaWZpYyBldmVudCAobGF6eSBsb2FkaW5nKSAqL1xuICBvbkxvYWRFdmVudERhdGE/OiAoZXZlbnQ6IEV2ZW50KSA9PiBQcm9taXNlPHVua25vd24gfCBudWxsPjtcbiAgLyoqIENhbGxiYWNrIHRvIHJlc29sdmUgYSBob29rIHdpdGggYSBwYXlsb2FkLiAqL1xuICBvblJlc29sdmVIb29rPzogKFxuICAgIGhvb2tUb2tlbjogc3RyaW5nLFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4gICAgaG9vaz86IEhvb2tcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICAvKiogRW5jcnlwdGlvbiBrZXkgKGF2YWlsYWJsZSBhZnRlciBEZWNyeXB0IGlzIGNsaWNrZWQpLCB1c2VkIHRvIHJlLWxvYWQgZXZlbnQgZGF0YSAqL1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbiAgLyoqIENhbGxiYWNrIHRvIGluaXRpYXRlIGRlY3J5cHRpb24gb2YgZW5jcnlwdGVkIHJ1biBkYXRhICovXG4gIG9uRGVjcnlwdD86ICgpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHRoZSBlbmNyeXB0aW9uIGtleSBpcyBjdXJyZW50bHkgYmVpbmcgZmV0Y2hlZCAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBkZWNyeXB0aW9uIGlzIHVuYXZhaWxhYmxlICovXG4gIGlzRGVjcnlwdERpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEV4cGxhaW5zIHdoeSBkZWNyeXB0aW9uIGlzIHVuYXZhaWxhYmxlICovXG4gIGRlY3J5cHREaXNhYmxlZFJlYXNvbj86IHN0cmluZztcbiAgLyoqIEluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzcGFuIGZyb20gdGhlIHRyYWNlIHZpZXdlciAqL1xuICBzZWxlY3RlZFNwYW46IFNlbGVjdGVkU3BhbkluZm8gfCBudWxsO1xuICAvKiogU2hvdyBvY2N1cnJlZEF0IHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBmb2xkaW5nIGl0IGludG8gdGhlIENyZWF0ZWQgdGltZXN0YW1wLiAqL1xuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPzogYm9vbGVhbjtcbiAgZ2V0TW9kdWxlU291cmNlVXJsPzogKGluZm86IHtcbiAgICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZztcbiAgICBkZXBsb3ltZW50SWQ6IHN0cmluZztcbiAgfSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufSk6IFJlYWN0LkpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3QoKTtcbiAgY29uc3QgW3N0b3BwaW5nU2xlZXAsIHNldFN0b3BwaW5nU2xlZXBdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd1Jlc29sdmVIb29rTW9kYWwsIHNldFNob3dSZXNvbHZlSG9va01vZGFsXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Jlc29sdmluZ0hvb2ssIHNldFJlc29sdmluZ0hvb2tdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAvLyBUcmFjayBob29rcyB0aGF0IHdlcmUgcmVzb2x2ZWQgaW4gdGhpcyBzZXNzaW9uIHNvIHRoZSBidXR0b24gaGlkZXNcbiAgLy8gaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbmV4dCBldmVudCBwb2xsLlxuICBjb25zdCBbcmVzb2x2ZWRIb29rSWRzLCBzZXRSZXNvbHZlZEhvb2tJZHNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KFxuICAgIG5ldyBTZXQoKVxuICApO1xuXG4gIGNvbnN0IHNpZGViYXIgPSB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsKCk7XG4gIGNvbnN0IGhhc0VuY3J5cHRlZERhdGEgPSBCb29sZWFuKHNpZGViYXI/Lmhhc0VuY3J5cHRlZERhdGEgJiYgIWVuY3J5cHRpb25LZXkpO1xuXG4gIGNvbnN0IGRhdGEgPSBzZWxlY3RlZFNwYW4/LmRhdGE7XG4gIGNvbnN0IHJhd0V2ZW50cyA9IHNlbGVjdGVkU3Bhbj8ucmF3RXZlbnRzO1xuICBjb25zdCByYXdFdmVudHNMZW5ndGggPSByYXdFdmVudHM/Lmxlbmd0aCA/PyAwO1xuXG4gIGNvbnN0IHtcbiAgICBzdGF0dXMsXG4gICAgcmVzb3VyY2UsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBkaXNwbGF5RGF0YSxcbiAgICBkZXRhaWw6IG1hdGNoZWRTcGFuRGV0YWlsRGF0YSxcbiAgICBlcnJvcixcbiAgfSA9IHVzZVNlbGVjdGVkU3BhbkRldGFpbChzZWxlY3RlZFNwYW4sIGZldGNoU3BhbkRldGFpbCk7XG4gIGNvbnN0IGxvYWRpbmcgPSBzdGF0dXMgPT09ICdsb2FkaW5nJztcblxuICAvLyBDaGVjayBpZiB0aGlzIHNsZWVwIGlzIHN0aWxsIHBlbmRpbmcgYW5kIGNhbiBiZSB3b2tlbiB1cFxuICBjb25zdCBjYW5XYWtlVXAgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB2b2lkIHJhd0V2ZW50c0xlbmd0aDtcbiAgICBpZiAocmVzb3VyY2UgIT09ICdzbGVlcCcgfHwgIXJhd0V2ZW50cykgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpc1Rlcm1pbmFsV29ya2Zsb3dSdW5TdGF0dXMocnVuLnN0YXR1cykpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNXYWl0Q3JlYXRlZCA9IHJhd0V2ZW50cy5zb21lKFxuICAgICAgKGUpID0+IGUuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICk7XG4gICAgaWYgKCFoYXNXYWl0Q3JlYXRlZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGhhc1dhaXRDb21wbGV0ZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICAgICk7XG4gICAgcmV0dXJuICFoYXNXYWl0Q29tcGxldGVkO1xuICB9LCBbcmVzb3VyY2UsIHJhd0V2ZW50cywgcmF3RXZlbnRzTGVuZ3RoLCBydW4uc3RhdHVzXSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBob29rIGNhbiBiZSByZXNvbHZlZFxuICBjb25zdCBjYW5SZXNvbHZlSG9vayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHZvaWQgcmF3RXZlbnRzTGVuZ3RoO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gJ2hvb2snIHx8ICFyYXdFdmVudHMgfHwgIXJlc291cmNlSWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgcmVzb2x2ZWQgdGhpcyBob29rIGluIHRoaXMgc2Vzc2lvblxuICAgIGlmIChyZXNvbHZlZEhvb2tJZHMuaGFzKHJlc291cmNlSWQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoaXNUZXJtaW5hbFdvcmtmbG93UnVuU3RhdHVzKHJ1bi5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaGFzSG9va0Rpc3Bvc2VkID0gcmF3RXZlbnRzLnNvbWUoXG4gICAgICAoZSkgPT4gZS5ldmVudFR5cGUgPT09ICdob29rX2Rpc3Bvc2VkJ1xuICAgICk7XG4gICAgaWYgKGhhc0hvb2tEaXNwb3NlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9LCBbXG4gICAgcmVzb3VyY2UsXG4gICAgcmVzb3VyY2VJZCxcbiAgICByYXdFdmVudHMsXG4gICAgcmF3RXZlbnRzTGVuZ3RoLFxuICAgIHJ1bi5zdGF0dXMsXG4gICAgcmVzb2x2ZWRIb29rSWRzLFxuICBdKTtcblxuICAvLyBHZXQgdGhlIGhvb2sgdG9rZW4gZm9yIHJlc29sdmluZyAocHJlZmVyIGZldGNoZWQgZGF0YSwgdGhlbiBob29rcyBhcnJheSBmYWxsYmFjaylcbiAgY29uc3QgaG9va1Rva2VuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlICE9PSAnaG9vaycgfHwgIXJlc291cmNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gMS4gVHJ5IHRoZSBleHRlcm5hbGx5LWZldGNoZWQgZGV0YWlsIGRhdGEgZmlyc3RcbiAgICBpZiAoaXNIb29rKG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgJiYgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuO1xuICAgIH1cbiAgICAvLyAyLiBUcnkgdGhlIHNwYW4ncyBpbmxpbmUgZGF0YSAocmVjb25zdHJ1Y3RlZCBmcm9tIGhvb2tfY3JlYXRlZCBldmVudClcbiAgICBpZiAoaXNIb29rKGRhdGEpICYmIChkYXRhIGFzIEhvb2spLnRva2VuKSB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgSG9vaykudG9rZW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZXNvdXJjZSwgcmVzb3VyY2VJZCwgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXJyb3IgJiYgc2VsZWN0ZWRTcGFuICYmIHJlc291cmNlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtyZXNvdXJjZX0gZGV0YWlsc2AsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtlcnJvciwgcmVzb3VyY2UsIHNlbGVjdGVkU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVdha2VVcCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc3RvcHBpbmdTbGVlcCB8fCAhcmVzb3VyY2VJZCkgcmV0dXJuO1xuICAgIGlmICghb25XYWtlVXBTbGVlcCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byB3YWtlIHVwIHNsZWVwJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ05vIHdha2UtdXAgaGFuZGxlciBwcm92aWRlZC4nLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldFN0b3BwaW5nU2xlZXAodHJ1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvbldha2VVcFNsZWVwKHJ1bi5ydW5JZCwgcmVzb3VyY2VJZCk7XG4gICAgICBpZiAocmVzdWx0LnN0b3BwZWRDb3VudCA+IDApIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnUnVuIHdva2VuIHVwJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1RoZSBzbGVlcCBjYWxsIGhhcyBiZWVuIGludGVycnVwdGVkIGFuZCB0aGUgcnVuIHdva2VuIHVwLicsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3QuaW5mbygnU2xlZXAgYWxyZWFkeSBjb21wbGV0ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHNsZWVwIGNhbGwgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW46JywgZXJyKTtcbiAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW4nLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3RvcHBpbmdTbGVlcChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc29sdmVIb29rID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChyZXNvbHZpbmdIb29rKSByZXR1cm47XG4gICAgICBpZiAoIW9uUmVzb2x2ZUhvb2spIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdObyByZXNvbHZlIGhhbmRsZXIgcHJvdmlkZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaG9va1Rva2VuKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBob29rJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ01pc3NpbmcgaG9vayB0b2tlbi4gVHJ5IHJlZnJlc2hpbmcgdGhlIHJ1biBkYXRhIGFuZCByZXRyeS4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXNvbHZpbmdIb29rKHRydWUpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBtYXRjaGVkU3BhbkRldGFpbERhdGEgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgaG9vayA9IGlzSG9vayhjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCBvblJlc29sdmVIb29rKGhvb2tUb2tlbiwgcGF5bG9hZCwgaG9vayk7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0hvb2sgcmVzb2x2ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcGF5bG9hZCBoYXMgYmVlbiBzZW50IGFuZCB0aGUgaG9vayByZXNvbHZlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpO1xuICAgICAgICAvLyBNYXJrIHRoaXMgaG9vayBhcyByZXNvbHZlZCBsb2NhbGx5IHNvIHRoZSBidXR0b24gaGlkZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzZXRSZXNvbHZlZEhvb2tJZHMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2s6JywgZXJyKTtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFJlc29sdmluZ0hvb2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uUmVzb2x2ZUhvb2ssIGhvb2tUb2tlbiwgcmVzb2x2aW5nSG9vaywgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXVxuICApO1xuXG4gIGNvbnN0IG1vZHVsZVNwZWNpZmllciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IGRpc3BsYXlSZWNvcmQgPSBkaXNwbGF5RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBkaXNwbGF5U3RlcE5hbWUgPSBkaXNwbGF5UmVjb3JkLnN0ZXBOYW1lO1xuICAgIGNvbnN0IGRpc3BsYXlXb3JrZmxvd05hbWUgPSBkaXNwbGF5UmVjb3JkLndvcmtmbG93TmFtZTtcbiAgICBpZiAodHlwZW9mIGRpc3BsYXlTdGVwTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5U3RlcE5hbWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcGxheVdvcmtmbG93TmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkaXNwbGF5V29ya2Zsb3dOYW1lO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJ1bi53b3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcnVuLndvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2Rpc3BsYXlEYXRhLCBydW4ud29ya2Zsb3dOYW1lXSk7XG5cbiAgY29uc3QgbW9kdWxlU291cmNlVXJsID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFnZXRNb2R1bGVTb3VyY2VVcmwgfHwgIW1vZHVsZVNwZWNpZmllcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXJzZWQgPVxuICAgICAgcGFyc2VTdGVwTmFtZShtb2R1bGVTcGVjaWZpZXIpID8/IHBhcnNlV29ya2Zsb3dOYW1lKG1vZHVsZVNwZWNpZmllcik7XG4gICAgaWYgKCFwYXJzZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGF0YURlcGxveW1lbnRJZCA9IGRpc3BsYXlEYXRhLmRlcGxveW1lbnRJZDtcbiAgICByZXR1cm4gZ2V0TW9kdWxlU291cmNlVXJsKHtcbiAgICAgIG1vZHVsZVNwZWNpZmllcjogcGFyc2VkLm1vZHVsZVNwZWNpZmllcixcbiAgICAgIGRlcGxveW1lbnRJZDpcbiAgICAgICAgdHlwZW9mIGRhdGFEZXBsb3ltZW50SWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBkYXRhRGVwbG95bWVudElkXG4gICAgICAgICAgOiBydW4uZGVwbG95bWVudElkLFxuICAgIH0pO1xuICB9LCBbZ2V0TW9kdWxlU291cmNlVXJsLCBtb2R1bGVTcGVjaWZpZXIsIGRpc3BsYXlEYXRhLCBydW4uZGVwbG95bWVudElkXSk7XG5cbiAgaWYgKCFzZWxlY3RlZFNwYW4gfHwgIXJlc291cmNlIHx8ICFyZXNvdXJjZUlkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBoYXNQZW5kaW5nQWN0aW9ucyA9XG4gICAgKHJlc291cmNlID09PSAnc2xlZXAnICYmIGNhbldha2VVcCkgfHxcbiAgICAocmVzb3VyY2UgPT09ICdob29rJyAmJiBjYW5SZXNvbHZlSG9vayk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC1mdWxsIGZsZXgtY29sXCI+XG4gICAgICA8RGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlclxuICAgICAgICB2YWx1ZT17XG4gICAgICAgICAgb25EZWNyeXB0XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBvbkRlY3J5cHQsXG4gICAgICAgICAgICAgICAgaXNEZWNyeXB0aW5nLFxuICAgICAgICAgICAgICAgIGlzRGVjcnlwdERpc2FibGVkLFxuICAgICAgICAgICAgICAgIGRlY3J5cHREaXNhYmxlZFJlYXNvbixcbiAgICAgICAgICAgICAgICBoYXNFbmNyeXB0ZWREYXRhLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBweC00IHBiLThcIj5cbiAgICAgICAgICB7aGFzUGVuZGluZ0FjdGlvbnMgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi00IHJvdW5kZWQtbGcgYm9yZGVyIHAtMlwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWItMiBweC0xIHRleHQtbGFiZWwtMTMgZm9udC1tZWRpdW0gdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQWN0aW9uc1xuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIHsvKiBXYWtlIHVwIGJ1dHRvbiBmb3IgcGVuZGluZyBzbGVlcCBjYWxscyAqL31cbiAgICAgICAgICAgICAgICB7cmVzb3VyY2UgPT09ICdzbGVlcCcgJiYgY2FuV2FrZVVwICYmIChcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVdha2VVcH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3N0b3BwaW5nU2xlZXB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1idXR0b24tMTQnLFxuICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmdTbGVlcFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZHMtYW1iZXItMjAwKScsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1hbWJlci05MDApJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFphcCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAge3N0b3BwaW5nU2xlZXAgPyAnV2FraW5nIHVwLi4uJyA6ICdXYWtlIFVwIFNsZWVwJ31cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7LyogUmVzb2x2ZSBob29rIGJ1dHRvbiBmb3IgcGVuZGluZyBob29rcyAqL31cbiAgICAgICAgICAgICAgICB7cmVzb3VyY2UgPT09ICdob29rJyAmJiBjYW5SZXNvbHZlSG9vayAmJiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UmVzb2x2ZUhvb2tNb2RhbCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Jlc29sdmluZ0hvb2t9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1idXR0b24tMTQnLFxuICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgcmVzb2x2aW5nSG9va1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZHMtZ3JheS0xMDAwKScsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U2VuZCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgUmVzb2x2ZSBIb29rXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8QXR0cmlidXRlUGFuZWxcbiAgICAgICAgICAgIGRhdGE9e2Rpc3BsYXlEYXRhfVxuICAgICAgICAgICAgbW9kdWxlU3BlY2lmaWVyPXttb2R1bGVTcGVjaWZpZXJ9XG4gICAgICAgICAgICBtb2R1bGVTb3VyY2VVcmw9e21vZHVsZVNvdXJjZVVybH1cbiAgICAgICAgICAgIGV4cGlyZWRBdD17cnVuLmV4cGlyZWRBdH1cbiAgICAgICAgICAgIGlzTG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICAgIGVycm9yPXtlcnJvciA/PyB1bmRlZmluZWR9XG4gICAgICAgICAgICBvblN0cmVhbUNsaWNrPXtvblN0cmVhbUNsaWNrfVxuICAgICAgICAgICAgb25SdW5DbGljaz17b25SdW5DbGlja31cbiAgICAgICAgICAgIG9uRGVjcnlwdD17b25EZWNyeXB0fVxuICAgICAgICAgICAgaXNEZWNyeXB0aW5nPXtpc0RlY3J5cHRpbmd9XG4gICAgICAgICAgICBpc0RlY3J5cHREaXNhYmxlZD17aXNEZWNyeXB0RGlzYWJsZWR9XG4gICAgICAgICAgICBkZWNyeXB0RGlzYWJsZWRSZWFzb249e2RlY3J5cHREaXNhYmxlZFJlYXNvbn1cbiAgICAgICAgICAgIHJlc291cmNlPXtyZXNvdXJjZX1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAge3Jhd0V2ZW50cyAmJiAoXG4gICAgICAgICAgICA8RXZlbnRzTGlzdFxuICAgICAgICAgICAgICBldmVudHM9e3Jhd0V2ZW50c31cbiAgICAgICAgICAgICAgb25Mb2FkRXZlbnREYXRhPXtvbkxvYWRFdmVudERhdGF9XG4gICAgICAgICAgICAgIG9uU3RyZWFtQ2xpY2s9e29uU3RyZWFtQ2xpY2t9XG4gICAgICAgICAgICAgIG9uUnVuQ2xpY2s9e29uUnVuQ2xpY2t9XG4gICAgICAgICAgICAgIGVuY3J5cHRpb25LZXk9e2VuY3J5cHRpb25LZXl9XG4gICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM9e1xuICAgICAgICAgICAgICAgIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkdXBsaWNhdGVFdmVudElkcz17c2VsZWN0ZWRTcGFuPy5kdXBsaWNhdGVFdmVudElkc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0RlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXI+XG5cbiAgICAgIHsvKiBSZXNvbHZlIEhvb2sgTW9kYWwgKi99XG4gICAgICA8UmVzb2x2ZUhvb2tNb2RhbFxuICAgICAgICBpc09wZW49e3Nob3dSZXNvbHZlSG9va01vZGFsfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UmVzb2x2ZUhvb2tNb2RhbChmYWxzZSl9XG4gICAgICAgIG9uU3VibWl0PXtoYW5kbGVSZXNvbHZlSG9va31cbiAgICAgICAgaXNTdWJtaXR0aW5nPXtyZXNvbHZpbmdIb29rfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"events-list.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/events-list.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAyB,MAAM,iBAAiB,CAAC;AAuSpE,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,SAAiB,EACjB,KAAK,EACL,eAAe,EACf,aAAa,EACb,UAAU,EACV,aAAa,EACb,qCAA6C,EAC7C,iBAAiB,GAClB,EAAE;IACD,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,6FAA6F;IAC7F,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACzC,2CAyDA"}
1
+ {"version":3,"file":"events-list.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/events-list.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,KAAK,EAAyB,MAAM,iBAAiB,CAAC;AAiTpE,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,SAAiB,EACjB,KAAK,EACL,eAAe,EACf,aAAa,EACb,UAAU,EACV,aAAa,EACb,qCAA6C,EAC7C,iBAAiB,GAClB,EAAE;IACD,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,6FAA6F;IAC7F,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACzC,2CAyDA"}
@@ -2,10 +2,12 @@
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { getEventDataRefFields } from '@workflow/world';
4
4
  import { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';
5
+ import { DUPLICATE_EVENT_MESSAGE } from '../../lib/duplicate-events';
5
6
  import { hasEncryptedFields, isExpiredMarker } from '../../lib/hydration';
7
+ import { isSealedNoopEvent, SEALED_EVENT_MESSAGE, } from '../../lib/sealed-events';
6
8
  import { Collapsible, CollapsibleContent, CollapsibleRoot, CollapsibleTrigger, } from '../ui/collapsible';
7
9
  import { RunClickContext, StreamClickContext } from '../ui/data-inspector';
8
- import { DuplicateEventTooltip } from '../ui/duplicate-event-tooltip';
10
+ import { EventNoticeTooltip } from '../ui/duplicate-event-tooltip';
9
11
  import { ErrorCard } from '../ui/error-card';
10
12
  import { ErrorStackBlock, isStructuredError } from '../ui/error-stack-block';
11
13
  import { Skeleton } from '../ui/skeleton';
@@ -77,6 +79,11 @@ function EventItem({ event, onLoadEventData, encryptionKey, showSeparateEventOcc
77
79
  setLoadedData(null);
78
80
  void loadEventData(true);
79
81
  }, [encryptionKey, loadEventData]);
82
+ const rowNotice = isDuplicate
83
+ ? DUPLICATE_EVENT_MESSAGE
84
+ : isSealedNoopEvent(event)
85
+ ? SEALED_EVENT_MESSAGE
86
+ : undefined;
80
87
  const createdAt = new Date(event.createdAt);
81
88
  const occurredAt = parseDateValue(event.occurredAt);
82
89
  const displayedCreatedAt = showSeparateEventOccurrenceTimestamps
@@ -93,7 +100,7 @@ function EventItem({ event, onLoadEventData, encryptionKey, showSeparateEventOcc
93
100
  if (open)
94
101
  handleExpand();
95
102
  }
96
- : undefined, children: [_jsx(CollapsibleTrigger, { className: "px-3 py-2", children: _jsxs("div", { className: "flex w-full items-center justify-between gap-3", children: [_jsx(DuplicateEventTooltip, { isDuplicate: isDuplicate, children: _jsx("span", { className: `text-label-12 font-mono ${isDuplicate ? 'text-gray-700' : 'text-gray-1000'}`, children: event.eventType }) }), _jsx("span", { className: "shrink-0 text-label-13 text-gray-900", children: displayedCreatedAtTime })] }) }), _jsxs(CollapsibleContent, { children: [_jsxs("div", { className: "flex flex-col bg-background-200 [&:has(+_*)]:border-b [&:has(+_*)]:border-gray-alpha-400", children: [showSeparateEventOccurrenceTimestamps && occurredAt && (_jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Occurred" }), _jsx(TimestampTooltip, { date: occurredAt, children: _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: formatEventTimestamp(occurredAt) }) })] })), _jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Event ID" }), _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.eventId })] }), event.correlationId && (_jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Correlation ID" }), _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.correlationId })] }))] }), isLoading && (_jsxs("div", { className: "p-3", children: [_jsx(Skeleton, { className: "h-4 w-[35%]" }), _jsx(Skeleton, { className: "mt-2 h-4 w-[90%]" }), _jsx(Skeleton, { className: "mt-2 h-4 w-[75%]" })] })), loadError && (_jsx(ErrorCard, { title: "Failed to load event data", details: loadError, className: "mt-2" })), displayPayload != null && (_jsx("div", { className: "[&>div]:border-none [&>div]:rounded-none", children: _jsx(EventDataBlock, { eventType: event.eventType, data: displayPayload }) }))] })] }));
103
+ : undefined, children: [_jsx(CollapsibleTrigger, { className: "px-3 py-2", children: _jsxs("div", { className: "flex w-full items-center justify-between gap-3", children: [_jsx(EventNoticeTooltip, { notice: rowNotice, children: _jsx("span", { className: `text-label-12 font-mono ${rowNotice ? 'text-gray-700' : 'text-gray-1000'}`, children: event.eventType }) }), _jsx("span", { className: "shrink-0 text-label-13 text-gray-900", children: displayedCreatedAtTime })] }) }), _jsxs(CollapsibleContent, { children: [_jsxs("div", { className: "flex flex-col bg-background-200 [&:has(+_*)]:border-b [&:has(+_*)]:border-gray-alpha-400", children: [showSeparateEventOccurrenceTimestamps && occurredAt && (_jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Occurred" }), _jsx(TimestampTooltip, { date: occurredAt, children: _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: formatEventTimestamp(occurredAt) }) })] })), _jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Event ID" }), _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.eventId })] }), event.correlationId && (_jsxs("div", { className: "flex items-center justify-between gap-2 py-2 px-3", children: [_jsx("span", { className: "text-label-12 text-gray-900", children: "Correlation ID" }), _jsx("span", { className: "max-w-[70%] truncate text-right text-label-12 font-mono", children: event.correlationId })] }))] }), isLoading && (_jsxs("div", { className: "p-3", children: [_jsx(Skeleton, { className: "h-4 w-[35%]" }), _jsx(Skeleton, { className: "mt-2 h-4 w-[90%]" }), _jsx(Skeleton, { className: "mt-2 h-4 w-[75%]" })] })), loadError && (_jsx(ErrorCard, { title: "Failed to load event data", details: loadError, className: "mt-2" })), displayPayload != null && (_jsx("div", { className: "[&>div]:border-none [&>div]:rounded-none", children: _jsx(EventDataBlock, { eventType: event.eventType, data: displayPayload }) }))] })] }));
97
104
  }
98
105
  /**
99
106
  * Check if an eventData object has only expired marker values in ref/payload
@@ -115,7 +122,7 @@ function hasOnlyExpiredFields(data, eventType) {
115
122
  * structured error, and CopyableDataBlock otherwise.
116
123
  */
117
124
  function EventDataBlock({ eventType, data, }) {
118
- // Expired data show a simple message instead of the raw stub.
125
+ // Expired data: show a message instead of the raw stub.
119
126
  // Check both the top-level eventData and nested sub-fields (result, input, etc.)
120
127
  // since the server stubs each ref field independently.
121
128
  if (isExpiredMarker(data) || hasOnlyExpiredFields(data, eventType)) {
@@ -128,7 +135,7 @@ function EventDataBlock({ eventType, data, }) {
128
135
  if (hasEncryptedFields({ eventType, eventData: data })) {
129
136
  return _jsx(EncryptedDataBlock, {});
130
137
  }
131
- // Attribute changes render the changed keys and the writer instead of
138
+ // Attribute changes: render the changed keys and the writer instead of
132
139
  // the raw JSON payload.
133
140
  if (eventType === 'attr_set') {
134
141
  return _jsx(AttrSetEventBlock, { data: data });
@@ -162,4 +169,4 @@ export function EventsList({ events, isLoading = false, error, onLoadEventData,
162
169
  }
163
170
  return (_jsx(RunClickContext.Provider, { value: onRunClick, children: _jsx(StreamClickContext.Provider, { value: onStreamClick, children: _jsxs(CollapsibleRoot, { defaultOpen: true, children: [_jsx(CollapsibleTrigger, { children: "Events" }), _jsx(CollapsibleContent, { className: "mb-0", children: isLoading ? (_jsx("div", { className: "flex flex-col -mx-4", children: [0, 1, 2].map((i) => (_jsxs("div", { className: "flex items-center justify-between gap-3 bg-background-200 px-4 py-2", children: [_jsx(Skeleton, { className: "h-4 w-32 rounded" }), _jsx(Skeleton, { className: "h-3 w-16 rounded" })] }, i))) })) : (_jsx("div", { className: "flex flex-col -mx-4", children: sortedEvents.map((event) => (_jsx(EventItem, { event: event, onLoadEventData: onLoadEventData, encryptionKey: encryptionKey, showSeparateEventOccurrenceTimestamps: showSeparateEventOccurrenceTimestamps, isDuplicate: duplicateEventIds?.has(event.eventId) }, event.eventId))) })) })] }) }) }));
164
171
  }
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL2V2ZW50cy1saXN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFjLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixrQkFBa0IsR0FDbkIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFOUUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFjLEVBQWUsRUFBRTtJQUNyRCxJQUFJLEtBQUssSUFBSSxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFL0IsTUFBTSxJ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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHR5cGUgRXZlbnQsIGdldEV2ZW50RGF0YVJlZkZpZWxkcyB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaGFzRW5jcnlwdGVkRmllbGRzLCBpc0V4cGlyZWRNYXJrZXIgfSBmcm9tICcuLi8uLi9saWIvaHlkcmF0aW9uJztcbmltcG9ydCB7XG4gIENvbGxhcHNpYmxlLFxuICBDb2xsYXBzaWJsZUNvbnRlbnQsXG4gIENvbGxhcHNpYmxlUm9vdCxcbiAgQ29sbGFwc2libGVUcmlnZ2VyLFxufSBmcm9tICcuLi91aS9jb2xsYXBzaWJsZSc7XG5pbXBvcnQgeyBSdW5DbGlja0NvbnRleHQsIFN0cmVhbUNsaWNrQ29udGV4dCB9IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IER1cGxpY2F0ZUV2ZW50VG9vbHRpcCB9IGZyb20gJy4uL3VpL2R1cGxpY2F0ZS1ldmVudC10b29sdGlwJztcbmltcG9ydCB7IEVycm9yQ2FyZCB9IGZyb20gJy4uL3VpL2Vycm9yLWNhcmQnO1xuaW1wb3J0IHsgRXJyb3JTdGFja0Jsb2NrLCBpc1N0cnVjdHVyZWRFcnJvciB9IGZyb20gJy4uL3VpL2Vycm9yLXN0YWNrLWJsb2NrJztcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi4vdWkvc2tlbGV0b24nO1xuaW1wb3J0IHsgVGltZXN0YW1wVG9vbHRpcCB9IGZyb20gJy4uL3VpL3RpbWVzdGFtcC10b29sdGlwJztcbmltcG9ydCB7IEF0dHJTZXRFdmVudEJsb2NrIH0gZnJvbSAnLi9hdHRyaWJ1dGVzLWJsb2NrJztcbmltcG9ydCB7IENvcHlhYmxlRGF0YUJsb2NrLCBFbmNyeXB0ZWREYXRhQmxvY2sgfSBmcm9tICcuL2NvcHlhYmxlLWRhdGEtYmxvY2snO1xuXG5jb25zdCBwYXJzZURhdGVWYWx1ZSA9ICh2YWx1ZTogdW5rbm93bik6IERhdGUgfCBudWxsID0+IHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGRhdGUgPSB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgPyB2YWx1ZSA6IG5ldyBEYXRlKFN0cmluZyh2YWx1ZSkpO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSA/IG51bGwgOiBkYXRlO1xufTtcblxuY29uc3QgZ2V0RWZmZWN0aXZlRXZlbnREYXRlID0gKFxuICBldmVudDogUGljazxFdmVudCwgJ2NyZWF0ZWRBdCcgfCAnb2NjdXJyZWRBdCc+XG4pOiBEYXRlID0+IHBhcnNlRGF0ZVZhbHVlKGV2ZW50Lm9jY3VycmVkQXQpID8/IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWRBdCk7XG5cbmNvbnN0IGZvcm1hdEV2ZW50VGltZXN0YW1wID0gKGRhdGU6IERhdGUpOiBzdHJpbmcgPT5cbiAgZGF0ZS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQsIHtcbiAgICBtb250aDogJ3Nob3J0JyxcbiAgICBkYXk6ICdudW1lcmljJyxcbiAgICBob3VyOiAnbnVtZXJpYycsXG4gICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgc2Vjb25kOiAnbnVtZXJpYycsXG4gICAgZnJhY3Rpb25hbFNlY29uZERpZ2l0czogMyxcbiAgICB0aW1lWm9uZU5hbWU6ICdzaG9ydCcsXG4gIH0pO1xuXG4vKipcbiAqIEEgc2luZ2xlIGV2ZW50IHJvdyB0aGF0IGNhbiBsYXp5LWxvYWQgaXRzIGV2ZW50RGF0YSB3aGVuIGV4cGFuZGVkLlxuICovXG5mdW5jdGlvbiBFdmVudEl0ZW0oe1xuICBldmVudCxcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBlbmNyeXB0aW9uS2V5LFxuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzID0gZmFsc2UsXG4gIGlzRHVwbGljYXRlID0gZmFsc2UsXG59OiB7XG4gIGV2ZW50OiBFdmVudDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKGV2ZW50OiBFdmVudCkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIC8qKiBXaGVuIHRoaXMgY2hhbmdlcyAoZS5nLiwgRGVjcnlwdCB3YXMgY2xpY2tlZCksIGludmFsaWRhdGUgY2FjaGVkIGRhdGEgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBTaG93IG9jY3VycmVkQXQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGZvbGRpbmcgaXQgaW50byB0aGUgQ3JlYXRlZCB0aW1lc3RhbXAuICovXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM/OiBib29sZWFuO1xuICAvKiogVGhlIGV2ZW50IHJlcGVhdHMgYSBjbGFzcyBhbHJlYWR5IGluIHRoZSBsb2csIHNvIHRoZSBydW50aW1lIGlnbm9yZWQgaXQuICovXG4gIGlzRHVwbGljYXRlPzogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgW2xvYWRlZERhdGEsIHNldExvYWRlZERhdGFdID0gdXNlU3RhdGU8dW5rbm93biB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHdhc0V4cGFuZGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgLyoqIE1pcnJvcnMgd2hldGhlciB3ZSBoYXZlIGEgZmV0Y2hlZCBwYXlsb2FkOyBhdm9pZHMgc3RhbGUgYGxvYWRlZERhdGFgIGluIGxvYWQgY2xvc3VyZS4gKi9cbiAgY29uc3QgbG9hZGVkRGF0YVJlZiA9IHVzZVJlZjx1bmtub3duIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGFscmVhZHkgaGFzIGV2ZW50RGF0YSBmcm9tIHRoZSBzdG9yZVxuICBjb25zdCBleGlzdGluZ0RhdGEgPVxuICAgICdldmVudERhdGEnIGluIGV2ZW50ICYmIGV2ZW50LmV2ZW50RGF0YSAhPSBudWxsID8gZXZlbnQuZXZlbnREYXRhIDogbnVsbDtcbiAgY29uc3QgbWVyZ2VkRGlzcGxheSA9IGxvYWRlZERhdGEgPz8gZXhpc3RpbmdEYXRhO1xuICBjb25zdCBjYW5IYXZlRGF0YSA9XG4gICAgZXhpc3RpbmdEYXRhICE9PSBudWxsIHx8IGdldEV2ZW50RGF0YVJlZkZpZWxkcyhldmVudC5ldmVudFR5cGUpLmxlbmd0aCA+IDA7XG5cbiAgY29uc3QgbG9hZEV2ZW50RGF0YSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChmb3JjZTogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKCFvbkxvYWRFdmVudERhdGEpIHJldHVybjtcbiAgICAgIGlmICghZm9yY2UgJiYgbG9hZGVkRGF0YVJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRMb2FkRXJyb3IobnVsbCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBvbkxvYWRFdmVudERhdGEoZXZlbnQpO1xuICAgICAgICBsb2FkZWREYXRhUmVmLmN1cnJlbnQgPSBkYXRhO1xuICAgICAgICBzZXRMb2FkZWREYXRhKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHNldExvYWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycikpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkxvYWRFdmVudERhdGEsIGV2ZW50XVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUV4cGFuZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XG4gICAgd2FzRXhwYW5kZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgdm9pZCBsb2FkRXZlbnREYXRhKGZhbHNlKTtcbiAgfSwgW2lzTG9hZGluZywgbG9hZEV2ZW50RGF0YV0pO1xuXG4gIC8vIFdoZW4gdGhlIGVuY3J5cHRpb24ga2V5IGNoYW5nZXMgYW5kIHRoaXMgZXZlbnQgd2FzIHByZXZpb3VzbHkgZXhwYW5kZWQsXG4gIC8vIHJlLWxvYWQgdGhlIGRhdGEgc28gaXQgZ2V0cyBkZWNyeXB0ZWRcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVuY3J5cHRpb25LZXkgfHwgIXdhc0V4cGFuZGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBsb2FkZWREYXRhUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIHNldExvYWRlZERhdGEobnVsbCk7XG4gICAgdm9pZCBsb2FkRXZlbnREYXRhKHRydWUpO1xuICB9LCBbZW5jcnlwdGlvbktleSwgbG9hZEV2ZW50RGF0YV0pO1xuXG4gIGNvbnN0IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWRBdCk7XG4gIGNvbnN0IG9jY3VycmVkQXQgPSBwYXJzZURhdGVWYWx1ZShldmVudC5vY2N1cnJlZEF0KTtcbiAgY29uc3QgZGlzcGxheWVkQ3JlYXRlZEF0ID0gc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wc1xuICAgID8gY3JlYXRlZEF0XG4gICAgOiBnZXRFZmZlY3RpdmVFdmVudERhdGUoZXZlbnQpO1xuICBjb25zdCBkaXNwbGF5ZWRDcmVhdGVkQXRUaW1lID0gZGlzcGxheWVkQ3JlYXRlZEF0LnRvTG9jYWxlVGltZVN0cmluZyhcbiAgICB1bmRlZmluZWQsXG4gICAge1xuICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICBzZWNvbmQ6ICdudW1lcmljJyxcbiAgICB9XG4gICk7XG5cbiAgY29uc3QgZGlzcGxheVBheWxvYWQgPSBpc0xvYWRpbmcgPyBsb2FkZWREYXRhIDogbWVyZ2VkRGlzcGxheTtcblxuICByZXR1cm4gKFxuICAgIDxDb2xsYXBzaWJsZVJvb3RcbiAgICAgIHZhcmlhbnQ9XCJjYXJkXCJcbiAgICAgIG9uT3BlbkNoYW5nZT17XG4gICAgICAgIGNhbkhhdmVEYXRhXG4gICAgICAgICAgPyAob3BlbikgPT4ge1xuICAgICAgICAgICAgICBpZiAob3BlbikgaGFuZGxlRXhwYW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICA+XG4gICAgICA8Q29sbGFwc2libGVUcmlnZ2VyIGNsYXNzTmFtZT1cInB4LTMgcHktMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTNcIj5cbiAgICAgICAgICA8RHVwbGljYXRlRXZlbnRUb29sdGlwIGlzRHVwbGljYXRlPXtpc0R1cGxpY2F0ZX0+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2B0ZXh0LWxhYmVsLTEyIGZvbnQtbW9ubyAke1xuICAgICAgICAgICAgICAgIGlzRHVwbGljYXRlID8gJ3RleHQtZ3JheS03MDAnIDogJ3RleHQtZ3JheS0xMDAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2V2ZW50LmV2ZW50VHlwZX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L0R1cGxpY2F0ZUV2ZW50VG9vbHRpcD5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzaHJpbmstMCB0ZXh0LWxhYmVsLTEzIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgIHtkaXNwbGF5ZWRDcmVhdGVkQXRUaW1lfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0NvbGxhcHNpYmxlVHJpZ2dlcj5cbiAgICAgIDxDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgIHsvKiBFdmVudCBhdHRyaWJ1dGVzICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgYmctYmFja2dyb3VuZC0yMDAgWyY6aGFzKCtfKildOmJvcmRlci1iIFsmOmhhcygrXyopXTpib3JkZXItZ3JheS1hbHBoYS00MDBcIj5cbiAgICAgICAgICB7c2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyAmJiBvY2N1cnJlZEF0ICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDBcIj5PY2N1cnJlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPFRpbWVzdGFtcFRvb2x0aXAgZGF0ZT17b2NjdXJyZWRBdH0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF4LXctWzcwJV0gdHJ1bmNhdGUgdGV4dC1yaWdodCB0ZXh0LWxhYmVsLTEyIGZvbnQtbW9ub1wiPlxuICAgICAgICAgICAgICAgICAge2Zvcm1hdEV2ZW50VGltZXN0YW1wKG9jY3VycmVkQXQpfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9UaW1lc3RhbXBUb29sdGlwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweS0yIHB4LTNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTIgdGV4dC1ncmF5LTkwMFwiPkV2ZW50IElEPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF4LXctWzcwJV0gdHJ1bmNhdGUgdGV4dC1yaWdodCB0ZXh0LWxhYmVsLTEyIGZvbnQtbW9ub1wiPlxuICAgICAgICAgICAgICB7ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7ZXZlbnQuY29ycmVsYXRpb25JZCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweS0yIHB4LTNcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sYWJlbC0xMiB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICAgICAgQ29ycmVsYXRpb24gSURcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXgtdy1bNzAlXSB0cnVuY2F0ZSB0ZXh0LXJpZ2h0IHRleHQtbGFiZWwtMTIgZm9udC1tb25vXCI+XG4gICAgICAgICAgICAgICAge2V2ZW50LmNvcnJlbGF0aW9uSWR9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBMb2FkaW5nIHN0YXRlICovfVxuICAgICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtM1wiPlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtNCB3LVszNSVdXCIgLz5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJtdC0yIGgtNCB3LVs5MCVdXCIgLz5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJtdC0yIGgtNCB3LVs3NSVdXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogRXJyb3Igc3RhdGUgKi99XG4gICAgICAgIHtsb2FkRXJyb3IgJiYgKFxuICAgICAgICAgIDxFcnJvckNhcmRcbiAgICAgICAgICAgIHRpdGxlPVwiRmFpbGVkIHRvIGxvYWQgZXZlbnQgZGF0YVwiXG4gICAgICAgICAgICBkZXRhaWxzPXtsb2FkRXJyb3J9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0yXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuXG4gICAgICAgIHsvKiBFdmVudCBkYXRhICovfVxuICAgICAgICB7ZGlzcGxheVBheWxvYWQgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJbJj5kaXZdOmJvcmRlci1ub25lIFsmPmRpdl06cm91bmRlZC1ub25lXCI+XG4gICAgICAgICAgICA8RXZlbnREYXRhQmxvY2sgZXZlbnRUeXBlPXtldmVudC5ldmVudFR5cGV9IGRhdGE9e2Rpc3BsYXlQYXlsb2FkfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9Db2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgPC9Db2xsYXBzaWJsZVJvb3Q+XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gZXZlbnREYXRhIG9iamVjdCBoYXMgb25seSBleHBpcmVkIG1hcmtlciB2YWx1ZXMgaW4gcmVmL3BheWxvYWRcbiAqIGZpZWxkcyBmb3IgdGhpcyBldmVudCB0eXBlIChzZWUge0BsaW5rIGdldEV2ZW50RGF0YVJlZkZpZWxkc30pLiBPdGhlciBrZXlzXG4gKiAoZS5nLiBgcmVzdW1lQXRgLCBgc3RlcE5hbWVgKSBhcmUgaWdub3JlZC5cbiAqL1xuZnVuY3Rpb24gaGFzT25seUV4cGlyZWRGaWVsZHMoZGF0YTogdW5rbm93biwgZXZlbnRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcmVjb3JkID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcmVmS2V5cyA9IGdldEV2ZW50RGF0YVJlZkZpZWxkcyhldmVudFR5cGUpO1xuICBjb25zdCBwcmVzZW50S2V5cyA9IHJlZktleXMuZmlsdGVyKChrKSA9PiBrIGluIHJlY29yZCk7XG4gIHJldHVybiAoXG4gICAgcHJlc2VudEtleXMubGVuZ3RoID4gMCAmJlxuICAgIHByZXNlbnRLZXlzLmV2ZXJ5KChrKSA9PiBpc0V4cGlyZWRNYXJrZXIocmVjb3JkW2tdKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGV2ZW50IGRhdGEsIHVzaW5nIEVycm9yU3RhY2tCbG9jayBmb3IgZXJyb3IgZXZlbnRzIHRoYXQgY29udGFpbiBhXG4gKiBzdHJ1Y3R1cmVkIGVycm9yLCBhbmQgQ29weWFibGVEYXRhQmxvY2sgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBFdmVudERhdGFCbG9jayh7XG4gIGV2ZW50VHlwZSxcbiAgZGF0YSxcbn06IHtcbiAgZXZlbnRUeXBlOiBzdHJpbmc7XG4gIGRhdGE6IHVua25vd247XG59KSB7XG4gIC8vIEV4cGlyZWQgZGF0YSDigJQgc2hvdyBhIHNpbXBsZSBtZXNzYWdlIGluc3RlYWQgb2YgdGhlIHJhdyBzdHViLlxuICAvLyBDaGVjayBib3RoIHRoZSB0b3AtbGV2ZWwgZXZlbnREYXRhIGFuZCBuZXN0ZWQgc3ViLWZpZWxkcyAocmVzdWx0LCBpbnB1dCwgZXRjLilcbiAgLy8gc2luY2UgdGhlIHNlcnZlciBzdHVicyBlYWNoIHJlZiBmaWVsZCBpbmRlcGVuZGVudGx5LlxuICBpZiAoaXNFeHBpcmVkTWFya2VyKGRhdGEpIHx8IGhhc09ubHlFeHBpcmVkRmllbGRzKGRhdGEsIGV2ZW50VHlwZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbWQgYm9yZGVyIHB4LTMgcHktMiB0ZXh0LWxhYmVsLTEyXCJcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktMzAwKScsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtbWVkaXVtXCI+RGF0YSBleHBpcmVkPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChoYXNFbmNyeXB0ZWRGaWVsZHMoeyBldmVudFR5cGUsIGV2ZW50RGF0YTogZGF0YSB9KSkge1xuICAgIHJldHVybiA8RW5jcnlwdGVkRGF0YUJsb2NrIC8+O1xuICB9XG5cbiAgLy8gQXR0cmlidXRlIGNoYW5nZXMg4oCUIHJlbmRlciB0aGUgY2hhbmdlZCBrZXlzIGFuZCB0aGUgd3JpdGVyIGluc3RlYWQgb2ZcbiAgLy8gdGhlIHJhdyBKU09OIHBheWxvYWQuXG4gIGlmIChldmVudFR5cGUgPT09ICdhdHRyX3NldCcpIHtcbiAgICByZXR1cm4gPEF0dHJTZXRFdmVudEJsb2NrIGRhdGE9e2RhdGF9IC8+O1xuICB9XG5cbiAgLy8gRXJyb3IgZXZlbnRzIGNhcnJ5IGEgU3RydWN0dXJlZEVycm9yIGluIGV2ZW50RGF0YS5lcnJvci4gQ2hlY2sgYm90aCB0aGVcbiAgLy8gbmVzdGVkIGZpZWxkIGFuZCB0aGUgdG9wLWxldmVsIHZhbHVlIGZvciBsZWdhY3kgcGF5bG9hZHMuXG4gIGlmIChcbiAgICBnZXRFdmVudERhdGFSZWZGaWVsZHMoZXZlbnRUeXBlKS5pbmNsdWRlcygnZXJyb3InKSAmJlxuICAgIGRhdGEgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0J1xuICApIHtcbiAgICBjb25zdCByZWNvcmQgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgLy8gQ2hlY2sgdGhlIG5lc3RlZCBgZXJyb3JgIGZpZWxkIGZpcnN0ICh0aGUgU3RydWN0dXJlZEVycm9yKVxuICAgIGlmIChpc1N0cnVjdHVyZWRFcnJvcihyZWNvcmQuZXJyb3IpKSB7XG4gICAgICByZXR1cm4gPEVycm9yU3RhY2tCbG9jayB2YWx1ZT17cmVjb3JkLmVycm9yfSAvPjtcbiAgICB9XG5cbiAgICAvLyBTb21lIGVycm9yIGZvcm1hdHMgcHV0IHRoZSBtZXNzYWdlL3N0YWNrIGF0IHRoZSB0b3AgbGV2ZWwgb2YgZXZlbnREYXRhLlxuICAgIGlmIChpc1N0cnVjdHVyZWRFcnJvcihyZWNvcmQpKSB7XG4gICAgICByZXR1cm4gPEVycm9yU3RhY2tCbG9jayB2YWx1ZT17cmVjb3JkfSAvPjtcbiAgICB9XG4gIH1cblxuICAvLyBGb3Igbm9uLWVycm9yIGV2ZW50cyBvciBlcnJvcnMgd2l0aG91dCBhIHN0YWNrLCBmYWxsIGJhY2sgdG8gdGhlXG4gIC8vIGdlbmVyaWMgSlNPTiB2aWV3ZXIuXG4gIHJldHVybiA8Q29weWFibGVEYXRhQmxvY2sgZGF0YT17ZGF0YX0gLz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudHNMaXN0KHtcbiAgZXZlbnRzLFxuICBpc0xvYWRpbmcgPSBmYWxzZSxcbiAgZXJyb3IsXG4gIG9uTG9hZEV2ZW50RGF0YSxcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgZW5jcnlwdGlvbktleSxcbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyA9IGZhbHNlLFxuICBkdXBsaWNhdGVFdmVudElkcyxcbn06IHtcbiAgZXZlbnRzOiBFdmVudFtdO1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICBlcnJvcj86IEVycm9yIHwgbnVsbDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKGV2ZW50OiBFdmVudCkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogV2hlbiBwcm92aWRlZCwgc2lnbmFscyB0aGF0IGRlY3J5cHRpb24gaXMgYWN0aXZlICh0cmlnZ2VycyByZS1sb2FkIG9mIGV4cGFuZGVkIGV2ZW50cykgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBTaG93IG9jY3VycmVkQXQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGZvbGRpbmcgaXQgaW50byB0aGUgQ3JlYXRlZCB0aW1lc3RhbXAuICovXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM/OiBib29sZWFuO1xuICAvKipcbiAgICogRXZlbnRzIGV2ZXJ5IHJlcGxheSByZWFkcyBwYXN0IGFzIHJlcGVhdHMsIGZyb20gdGhlIGNhbGxlciB0aGF0IGhvbGRzIHRoZVxuICAgKiB3aG9sZSBsb2cuIGBldmVudHNgIGhlcmUgaXMgb25lIGVudGl0eSdzIHNsaWNlIG9mIGl0LCB3aGljaCBjYW5ub3QgYW5zd2VyXG4gICAqIHRoZSBxdWVzdGlvbiBvbiBpdHMgb3duLlxuICAgKi9cbiAgZHVwbGljYXRlRXZlbnRJZHM/OiBSZWFkb25seVNldDxzdHJpbmc+O1xufSkge1xuICAvLyBTb3J0IGJ5IHRoZSB0aW1lc3RhbXAgc2hvd24gYXMgQ3JlYXRlZCBieSBkZWZhdWx0LlxuICBjb25zdCBzb3J0ZWRFdmVudHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBbLi4uZXZlbnRzXS5zb3J0KFxuICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICBnZXRFZmZlY3RpdmVFdmVudERhdGUoYSkuZ2V0VGltZSgpIC1cbiAgICAgICAgICBnZXRFZmZlY3RpdmVFdmVudERhdGUoYikuZ2V0VGltZSgpXG4gICAgICApLFxuICAgIFtldmVudHNdXG4gICk7XG5cbiAgY29uc3QgaGFzRXZlbnRzID0gc29ydGVkRXZlbnRzLmxlbmd0aCA+IDAgJiYgIWVycm9yO1xuXG4gIGlmICghaGFzRXZlbnRzICYmICFpc0xvYWRpbmcpIHtcbiAgICByZXR1cm4gPENvbGxhcHNpYmxlIGxhYmVsPVwiRXZlbnRzXCIgZGlzYWJsZWQgLz47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxSdW5DbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e29uUnVuQ2xpY2t9PlxuICAgICAgPFN0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25TdHJlYW1DbGlja30+XG4gICAgICAgIDxDb2xsYXBzaWJsZVJvb3QgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgPENvbGxhcHNpYmxlVHJpZ2dlcj5FdmVudHM8L0NvbGxhcHNpYmxlVHJpZ2dlcj5cbiAgICAgICAgICA8Q29sbGFwc2libGVDb250ZW50IGNsYXNzTmFtZT1cIm1iLTBcIj5cbiAgICAgICAgICAgIHtpc0xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCAtbXgtNFwiPlxuICAgICAgICAgICAgICAgIHtbMCwgMSwgMl0ubWFwKChpKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0zIGJnLWJhY2tncm91bmQtMjAwIHB4LTQgcHktMlwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTQgdy0zMiByb3VuZGVkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtMyB3LTE2IHJvdW5kZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIC1teC00XCI+XG4gICAgICAgICAgICAgICAge3NvcnRlZEV2ZW50cy5tYXAoKGV2ZW50KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8RXZlbnRJdGVtXG4gICAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ9e2V2ZW50fVxuICAgICAgICAgICAgICAgICAgICBvbkxvYWRFdmVudERhdGE9e29uTG9hZEV2ZW50RGF0YX1cbiAgICAgICAgICAgICAgICAgICAgZW5jcnlwdGlvbktleT17ZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz17XG4gICAgICAgICAgICAgICAgICAgICAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wc1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlzRHVwbGljYXRlPXtkdXBsaWNhdGVFdmVudElkcz8uaGFzKGV2ZW50LmV2ZW50SWQpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvQ29sbGFwc2libGVDb250ZW50PlxuICAgICAgICA8L0NvbGxhcHNpYmxlUm9vdD5cbiAgICAgIDwvU3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuIl19
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL2V2ZW50cy1saXN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFjLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsb0JBQW9CLEdBQ3JCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNMLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGtCQUFrQixHQUNuQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIs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QixLQUFDLFNBQVMsSUFFUixLQUFLLEVBQUUsS0FBSyxFQUNaLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLGFBQWEsRUFBRSxhQUFhLEVBQzVCLHFDQUFxQyxFQUNuQyxxQ0FBcUMsRUFFdkMsV0FBVyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBUDdDLEtBQUssQ0FBQyxPQUFPLENBUWxCLENBQ0gsQ0FBQyxHQUNFLENBQ1AsR0FDa0IsSUFDTCxHQUNVLEdBQ0wsQ0FDNUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHR5cGUgRXZlbnQsIGdldEV2ZW50RGF0YVJlZkZpZWxkcyB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlTGF5b3V0RWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRFVQTElDQVRFX0VWRU5UX01FU1NBR0UgfSBmcm9tICcuLi8uLi9saWIvZHVwbGljYXRlLWV2ZW50cyc7XG5pbXBvcnQgeyBoYXNFbmNyeXB0ZWRGaWVsZHMsIGlzRXhwaXJlZE1hcmtlciB9IGZyb20gJy4uLy4uL2xpYi9oeWRyYXRpb24nO1xuaW1wb3J0IHtcbiAgaXNTZWFsZWROb29wRXZlbnQsXG4gIFNFQUxFRF9FVkVOVF9NRVNTQUdFLFxufSBmcm9tICcuLi8uLi9saWIvc2VhbGVkLWV2ZW50cyc7XG5pbXBvcnQge1xuICBDb2xsYXBzaWJsZSxcbiAgQ29sbGFwc2libGVDb250ZW50LFxuICBDb2xsYXBzaWJsZVJvb3QsXG4gIENvbGxhcHNpYmxlVHJpZ2dlcixcbn0gZnJvbSAnLi4vdWkvY29sbGFwc2libGUnO1xuaW1wb3J0IHsgUnVuQ2xpY2tDb250ZXh0LCBTdHJlYW1DbGlja0NvbnRleHQgfSBmcm9tICcuLi91aS9kYXRhLWluc3BlY3Rvcic7XG5pbXBvcnQgeyBFdmVudE5vdGljZVRvb2x0aXAgfSBmcm9tICcuLi91aS9kdXBsaWNhdGUtZXZlbnQtdG9vbHRpcCc7XG5pbXBvcnQgeyBFcnJvckNhcmQgfSBmcm9tICcuLi91aS9lcnJvci1jYXJkJztcbmltcG9ydCB7IEVycm9yU3RhY2tCbG9jaywgaXNTdHJ1Y3R1cmVkRXJyb3IgfSBmcm9tICcuLi91aS9lcnJvci1zdGFjay1ibG9jayc7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJy4uL3VpL3NrZWxldG9uJztcbmltcG9ydCB7IFRpbWVzdGFtcFRvb2x0aXAgfSBmcm9tICcuLi91aS90aW1lc3RhbXAtdG9vbHRpcCc7XG5pbXBvcnQgeyBBdHRyU2V0RXZlbnRCbG9jayB9IGZyb20gJy4vYXR0cmlidXRlcy1ibG9jayc7XG5pbXBvcnQgeyBDb3B5YWJsZURhdGFCbG9jaywgRW5jcnlwdGVkRGF0YUJsb2NrIH0gZnJvbSAnLi9jb3B5YWJsZS1kYXRhLWJsb2NrJztcblxuY29uc3QgcGFyc2VEYXRlVmFsdWUgPSAodmFsdWU6IHVua25vd24pOiBEYXRlIHwgbnVsbCA9PiB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUgOiBuZXcgRGF0ZShTdHJpbmcodmFsdWUpKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkYXRlLmdldFRpbWUoKSkgPyBudWxsIDogZGF0ZTtcbn07XG5cbmNvbnN0IGdldEVmZmVjdGl2ZUV2ZW50RGF0ZSA9IChcbiAgZXZlbnQ6IFBpY2s8RXZlbnQsICdjcmVhdGVkQXQnIHwgJ29jY3VycmVkQXQnPlxuKTogRGF0ZSA9PiBwYXJzZURhdGVWYWx1ZShldmVudC5vY2N1cnJlZEF0KSA/PyBuZXcgRGF0ZShldmVudC5jcmVhdGVkQXQpO1xuXG5jb25zdCBmb3JtYXRFdmVudFRpbWVzdGFtcCA9IChkYXRlOiBEYXRlKTogc3RyaW5nID0+XG4gIGRhdGUudG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7XG4gICAgbW9udGg6ICdzaG9ydCcsXG4gICAgZGF5OiAnbnVtZXJpYycsXG4gICAgaG91cjogJ251bWVyaWMnLFxuICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgIHNlY29uZDogJ251bWVyaWMnLFxuICAgIGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDMsXG4gICAgdGltZVpvbmVOYW1lOiAnc2hvcnQnLFxuICB9KTtcblxuLyoqXG4gKiBBIHNpbmdsZSBldmVudCByb3cgdGhhdCBjYW4gbGF6eS1sb2FkIGl0cyBldmVudERhdGEgd2hlbiBleHBhbmRlZC5cbiAqL1xuZnVuY3Rpb24gRXZlbnRJdGVtKHtcbiAgZXZlbnQsXG4gIG9uTG9hZEV2ZW50RGF0YSxcbiAgZW5jcnlwdGlvbktleSxcbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyA9IGZhbHNlLFxuICBpc0R1cGxpY2F0ZSA9IGZhbHNlLFxufToge1xuICBldmVudDogRXZlbnQ7XG4gIG9uTG9hZEV2ZW50RGF0YT86IChldmVudDogRXZlbnQpID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICAvKiogV2hlbiB0aGlzIGNoYW5nZXMgKGUuZy4sIERlY3J5cHQgd2FzIGNsaWNrZWQpLCBpbnZhbGlkYXRlIGNhY2hlZCBkYXRhICovXG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xuICAvKiogU2hvdyBvY2N1cnJlZEF0IHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBmb2xkaW5nIGl0IGludG8gdGhlIENyZWF0ZWQgdGltZXN0YW1wLiAqL1xuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBldmVudCByZXBlYXRzIGEgY2xhc3MgYWxyZWFkeSBpbiB0aGUgbG9nLCBzbyB0aGUgcnVudGltZSBpZ25vcmVkIGl0LiAqL1xuICBpc0R1cGxpY2F0ZT86IGJvb2xlYW47XG59KSB7XG4gIGNvbnN0IFtsb2FkZWREYXRhLCBzZXRMb2FkZWREYXRhXSA9IHVzZVN0YXRlPHVua25vd24gfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2xvYWRFcnJvciwgc2V0TG9hZEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCB3YXNFeHBhbmRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gIC8qKiBNaXJyb3JzIHdoZXRoZXIgd2UgaGF2ZSBhIGZldGNoZWQgcGF5bG9hZDsgYXZvaWRzIHN0YWxlIGBsb2FkZWREYXRhYCBpbiBsb2FkIGNsb3N1cmUuICovXG4gIGNvbnN0IGxvYWRlZERhdGFSZWYgPSB1c2VSZWY8dW5rbm93biB8IG51bGw+KG51bGwpO1xuXG4gIC8vIENoZWNrIGlmIHRoZSBldmVudCBhbHJlYWR5IGhhcyBldmVudERhdGEgZnJvbSB0aGUgc3RvcmVcbiAgY29uc3QgZXhpc3RpbmdEYXRhID1cbiAgICAnZXZlbnREYXRhJyBpbiBldmVudCAmJiBldmVudC5ldmVudERhdGEgIT0gbnVsbCA/IGV2ZW50LmV2ZW50RGF0YSA6IG51bGw7XG4gIGNvbnN0IG1lcmdlZERpc3BsYXkgPSBsb2FkZWREYXRhID8/IGV4aXN0aW5nRGF0YTtcbiAgY29uc3QgY2FuSGF2ZURhdGEgPVxuICAgIGV4aXN0aW5nRGF0YSAhPT0gbnVsbCB8fCBnZXRFdmVudERhdGFSZWZGaWVsZHMoZXZlbnQuZXZlbnRUeXBlKS5sZW5ndGggPiAwO1xuXG4gIGNvbnN0IGxvYWRFdmVudERhdGEgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoZm9yY2U6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICghb25Mb2FkRXZlbnREYXRhKSByZXR1cm47XG4gICAgICBpZiAoIWZvcmNlICYmIGxvYWRlZERhdGFSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0TG9hZEVycm9yKG51bGwpO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgb25Mb2FkRXZlbnREYXRhKGV2ZW50KTtcbiAgICAgICAgbG9hZGVkRGF0YVJlZi5jdXJyZW50ID0gZGF0YTtcbiAgICAgICAgc2V0TG9hZGVkRGF0YShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzZXRMb2FkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25Mb2FkRXZlbnREYXRhLCBldmVudF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFeHBhbmQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuICAgIHdhc0V4cGFuZGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIHZvaWQgbG9hZEV2ZW50RGF0YShmYWxzZSk7XG4gIH0sIFtpc0xvYWRpbmcsIGxvYWRFdmVudERhdGFdKTtcblxuICAvLyBXaGVuIHRoZSBlbmNyeXB0aW9uIGtleSBjaGFuZ2VzIGFuZCB0aGlzIGV2ZW50IHdhcyBwcmV2aW91c2x5IGV4cGFuZGVkLFxuICAvLyByZS1sb2FkIHRoZSBkYXRhIHNvIGl0IGdldHMgZGVjcnlwdGVkXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFlbmNyeXB0aW9uS2V5IHx8ICF3YXNFeHBhbmRlZFJlZi5jdXJyZW50KSByZXR1cm47XG4gICAgbG9hZGVkRGF0YVJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICBzZXRMb2FkZWREYXRhKG51bGwpO1xuICAgIHZvaWQgbG9hZEV2ZW50RGF0YSh0cnVlKTtcbiAgfSwgW2VuY3J5cHRpb25LZXksIGxvYWRFdmVudERhdGFdKTtcblxuICBjb25zdCByb3dOb3RpY2UgPSBpc0R1cGxpY2F0ZVxuICAgID8gRFVQTElDQVRFX0VWRU5UX01FU1NBR0VcbiAgICA6IGlzU2VhbGVkTm9vcEV2ZW50KGV2ZW50KVxuICAgICAgPyBTRUFMRURfRVZFTlRfTUVTU0FHRVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGNyZWF0ZWRBdCA9IG5ldyBEYXRlKGV2ZW50LmNyZWF0ZWRBdCk7XG4gIGNvbnN0IG9jY3VycmVkQXQgPSBwYXJzZURhdGVWYWx1ZShldmVudC5vY2N1cnJlZEF0KTtcbiAgY29uc3QgZGlzcGxheWVkQ3JlYXRlZEF0ID0gc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wc1xuICAgID8gY3JlYXRlZEF0XG4gICAgOiBnZXRFZmZlY3RpdmVFdmVudERhdGUoZXZlbnQpO1xuICBjb25zdCBkaXNwbGF5ZWRDcmVhdGVkQXRUaW1lID0gZGlzcGxheWVkQ3JlYXRlZEF0LnRvTG9jYWxlVGltZVN0cmluZyhcbiAgICB1bmRlZmluZWQsXG4gICAge1xuICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgbWludXRlOiAnbnVtZXJpYycsXG4gICAgICBzZWNvbmQ6ICdudW1lcmljJyxcbiAgICB9XG4gICk7XG5cbiAgY29uc3QgZGlzcGxheVBheWxvYWQgPSBpc0xvYWRpbmcgPyBsb2FkZWREYXRhIDogbWVyZ2VkRGlzcGxheTtcblxuICByZXR1cm4gKFxuICAgIDxDb2xsYXBzaWJsZVJvb3RcbiAgICAgIHZhcmlhbnQ9XCJjYXJkXCJcbiAgICAgIG9uT3BlbkNoYW5nZT17XG4gICAgICAgIGNhbkhhdmVEYXRhXG4gICAgICAgICAgPyAob3BlbikgPT4ge1xuICAgICAgICAgICAgICBpZiAob3BlbikgaGFuZGxlRXhwYW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICA+XG4gICAgICA8Q29sbGFwc2libGVUcmlnZ2VyIGNsYXNzTmFtZT1cInB4LTMgcHktMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTNcIj5cbiAgICAgICAgICA8RXZlbnROb3RpY2VUb29sdGlwIG5vdGljZT17cm93Tm90aWNlfT5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YHRleHQtbGFiZWwtMTIgZm9udC1tb25vICR7XG4gICAgICAgICAgICAgICAgcm93Tm90aWNlID8gJ3RleHQtZ3JheS03MDAnIDogJ3RleHQtZ3JheS0xMDAwJ1xuICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2V2ZW50LmV2ZW50VHlwZX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L0V2ZW50Tm90aWNlVG9vbHRpcD5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzaHJpbmstMCB0ZXh0LWxhYmVsLTEzIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgIHtkaXNwbGF5ZWRDcmVhdGVkQXRUaW1lfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0NvbGxhcHNpYmxlVHJpZ2dlcj5cbiAgICAgIDxDb2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgIHsvKiBFdmVudCBhdHRyaWJ1dGVzICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgYmctYmFja2dyb3VuZC0yMDAgWyY6aGFzKCtfKildOmJvcmRlci1iIFsmOmhhcygrXyopXTpib3JkZXItZ3JheS1hbHBoYS00MDBcIj5cbiAgICAgICAgICB7c2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcyAmJiBvY2N1cnJlZEF0ICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIGdhcC0yIHB5LTIgcHgtM1wiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDBcIj5PY2N1cnJlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPFRpbWVzdGFtcFRvb2x0aXAgZGF0ZT17b2NjdXJyZWRBdH0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF4LXctWzcwJV0gdHJ1bmNhdGUgdGV4dC1yaWdodCB0ZXh0LWxhYmVsLTEyIGZvbnQtbW9ub1wiPlxuICAgICAgICAgICAgICAgICAge2Zvcm1hdEV2ZW50VGltZXN0YW1wKG9jY3VycmVkQXQpfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9UaW1lc3RhbXBUb29sdGlwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweS0yIHB4LTNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGFiZWwtMTIgdGV4dC1ncmF5LTkwMFwiPkV2ZW50IElEPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF4LXctWzcwJV0gdHJ1bmNhdGUgdGV4dC1yaWdodCB0ZXh0LWxhYmVsLTEyIGZvbnQtbW9ub1wiPlxuICAgICAgICAgICAgICB7ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7ZXZlbnQuY29ycmVsYXRpb25JZCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweS0yIHB4LTNcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sYWJlbC0xMiB0ZXh0LWdyYXktOTAwXCI+XG4gICAgICAgICAgICAgICAgQ29ycmVsYXRpb24gSURcbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXgtdy1bNzAlXSB0cnVuY2F0ZSB0ZXh0LXJpZ2h0IHRleHQtbGFiZWwtMTIgZm9udC1tb25vXCI+XG4gICAgICAgICAgICAgICAge2V2ZW50LmNvcnJlbGF0aW9uSWR9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBMb2FkaW5nIHN0YXRlICovfVxuICAgICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInAtM1wiPlxuICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtNCB3LVszNSVdXCIgLz5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJtdC0yIGgtNCB3LVs5MCVdXCIgLz5cbiAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJtdC0yIGgtNCB3LVs3NSVdXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7LyogRXJyb3Igc3RhdGUgKi99XG4gICAgICAgIHtsb2FkRXJyb3IgJiYgKFxuICAgICAgICAgIDxFcnJvckNhcmRcbiAgICAgICAgICAgIHRpdGxlPVwiRmFpbGVkIHRvIGxvYWQgZXZlbnQgZGF0YVwiXG4gICAgICAgICAgICBkZXRhaWxzPXtsb2FkRXJyb3J9XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJtdC0yXCJcbiAgICAgICAgICAvPlxuICAgICAgICApfVxuXG4gICAgICAgIHsvKiBFdmVudCBkYXRhICovfVxuICAgICAgICB7ZGlzcGxheVBheWxvYWQgIT0gbnVsbCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJbJj5kaXZdOmJvcmRlci1ub25lIFsmPmRpdl06cm91bmRlZC1ub25lXCI+XG4gICAgICAgICAgICA8RXZlbnREYXRhQmxvY2sgZXZlbnRUeXBlPXtldmVudC5ldmVudFR5cGV9IGRhdGE9e2Rpc3BsYXlQYXlsb2FkfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9Db2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgPC9Db2xsYXBzaWJsZVJvb3Q+XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYW4gZXZlbnREYXRhIG9iamVjdCBoYXMgb25seSBleHBpcmVkIG1hcmtlciB2YWx1ZXMgaW4gcmVmL3BheWxvYWRcbiAqIGZpZWxkcyBmb3IgdGhpcyBldmVudCB0eXBlIChzZWUge0BsaW5rIGdldEV2ZW50RGF0YVJlZkZpZWxkc30pLiBPdGhlciBrZXlzXG4gKiAoZS5nLiBgcmVzdW1lQXRgLCBgc3RlcE5hbWVgKSBhcmUgaWdub3JlZC5cbiAqL1xuZnVuY3Rpb24gaGFzT25seUV4cGlyZWRGaWVsZHMoZGF0YTogdW5rbm93biwgZXZlbnRUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcmVjb3JkID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcmVmS2V5cyA9IGdldEV2ZW50RGF0YVJlZkZpZWxkcyhldmVudFR5cGUpO1xuICBjb25zdCBwcmVzZW50S2V5cyA9IHJlZktleXMuZmlsdGVyKChrKSA9PiBrIGluIHJlY29yZCk7XG4gIHJldHVybiAoXG4gICAgcHJlc2VudEtleXMubGVuZ3RoID4gMCAmJlxuICAgIHByZXNlbnRLZXlzLmV2ZXJ5KChrKSA9PiBpc0V4cGlyZWRNYXJrZXIocmVjb3JkW2tdKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGV2ZW50IGRhdGEsIHVzaW5nIEVycm9yU3RhY2tCbG9jayBmb3IgZXJyb3IgZXZlbnRzIHRoYXQgY29udGFpbiBhXG4gKiBzdHJ1Y3R1cmVkIGVycm9yLCBhbmQgQ29weWFibGVEYXRhQmxvY2sgb3RoZXJ3aXNlLlxuICovXG5mdW5jdGlvbiBFdmVudERhdGFCbG9jayh7XG4gIGV2ZW50VHlwZSxcbiAgZGF0YSxcbn06IHtcbiAgZXZlbnRUeXBlOiBzdHJpbmc7XG4gIGRhdGE6IHVua25vd247XG59KSB7XG4gIC8vIEV4cGlyZWQgZGF0YTogc2hvdyBhIG1lc3NhZ2UgaW5zdGVhZCBvZiB0aGUgcmF3IHN0dWIuXG4gIC8vIENoZWNrIGJvdGggdGhlIHRvcC1sZXZlbCBldmVudERhdGEgYW5kIG5lc3RlZCBzdWItZmllbGRzIChyZXN1bHQsIGlucHV0LCBldGMuKVxuICAvLyBzaW5jZSB0aGUgc2VydmVyIHN0dWJzIGVhY2ggcmVmIGZpZWxkIGluZGVwZW5kZW50bHkuXG4gIGlmIChpc0V4cGlyZWRNYXJrZXIoZGF0YSkgfHwgaGFzT25seUV4cGlyZWRGaWVsZHMoZGF0YSwgZXZlbnRUeXBlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjUgcm91bmRlZC1tZCBib3JkZXIgcHgtMyBweS0yIHRleHQtbGFiZWwtMTJcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGJvcmRlckNvbG9yOiAndmFyKC0tZHMtZ3JheS0zMDApJyxcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTEwMCknLFxuICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS03MDApJyxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZm9udC1tZWRpdW1cIj5EYXRhIGV4cGlyZWQ8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgaWYgKGhhc0VuY3J5cHRlZEZpZWxkcyh7IGV2ZW50VHlwZSwgZXZlbnREYXRhOiBkYXRhIH0pKSB7XG4gICAgcmV0dXJuIDxFbmNyeXB0ZWREYXRhQmxvY2sgLz47XG4gIH1cblxuICAvLyBBdHRyaWJ1dGUgY2hhbmdlczogcmVuZGVyIHRoZSBjaGFuZ2VkIGtleXMgYW5kIHRoZSB3cml0ZXIgaW5zdGVhZCBvZlxuICAvLyB0aGUgcmF3IEpTT04gcGF5bG9hZC5cbiAgaWYgKGV2ZW50VHlwZSA9PT0gJ2F0dHJfc2V0Jykge1xuICAgIHJldHVybiA8QXR0clNldEV2ZW50QmxvY2sgZGF0YT17ZGF0YX0gLz47XG4gIH1cblxuICAvLyBFcnJvciBldmVudHMgY2FycnkgYSBTdHJ1Y3R1cmVkRXJyb3IgaW4gZXZlbnREYXRhLmVycm9yLiBDaGVjayBib3RoIHRoZVxuICAvLyBuZXN0ZWQgZmllbGQgYW5kIHRoZSB0b3AtbGV2ZWwgdmFsdWUgZm9yIGxlZ2FjeSBwYXlsb2Fkcy5cbiAgaWYgKFxuICAgIGdldEV2ZW50RGF0YVJlZkZpZWxkcyhldmVudFR5cGUpLmluY2x1ZGVzKCdlcnJvcicpICYmXG4gICAgZGF0YSAhPSBudWxsICYmXG4gICAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnXG4gICkge1xuICAgIGNvbnN0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAvLyBDaGVjayB0aGUgbmVzdGVkIGBlcnJvcmAgZmllbGQgZmlyc3QgKHRoZSBTdHJ1Y3R1cmVkRXJyb3IpXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZC5lcnJvcikpIHtcbiAgICAgIHJldHVybiA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtyZWNvcmQuZXJyb3J9IC8+O1xuICAgIH1cblxuICAgIC8vIFNvbWUgZXJyb3IgZm9ybWF0cyBwdXQgdGhlIG1lc3NhZ2Uvc3RhY2sgYXQgdGhlIHRvcCBsZXZlbCBvZiBldmVudERhdGEuXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZCkpIHtcbiAgICAgIHJldHVybiA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtyZWNvcmR9IC8+O1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBub24tZXJyb3IgZXZlbnRzIG9yIGVycm9ycyB3aXRob3V0IGEgc3RhY2ssIGZhbGwgYmFjayB0byB0aGVcbiAgLy8gZ2VuZXJpYyBKU09OIHZpZXdlci5cbiAgcmV0dXJuIDxDb3B5YWJsZURhdGFCbG9jayBkYXRhPXtkYXRhfSAvPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c0xpc3Qoe1xuICBldmVudHMsXG4gIGlzTG9hZGluZyA9IGZhbHNlLFxuICBlcnJvcixcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBvblN0cmVhbUNsaWNrLFxuICBvblJ1bkNsaWNrLFxuICBlbmNyeXB0aW9uS2V5LFxuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzID0gZmFsc2UsXG4gIGR1cGxpY2F0ZUV2ZW50SWRzLFxufToge1xuICBldmVudHM6IEV2ZW50W107XG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIGVycm9yPzogRXJyb3IgfCBudWxsO1xuICBvbkxvYWRFdmVudERhdGE/OiAoZXZlbnQ6IEV2ZW50KSA9PiBQcm9taXNlPHVua25vd24gfCBudWxsPjtcbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBXaGVuIHByb3ZpZGVkLCBzaWduYWxzIHRoYXQgZGVjcnlwdGlvbiBpcyBhY3RpdmUgKHRyaWdnZXJzIHJlLWxvYWQgb2YgZXhwYW5kZWQgZXZlbnRzKSAqL1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbiAgLyoqIFNob3cgb2NjdXJyZWRBdCBzZXBhcmF0ZWx5IGluc3RlYWQgb2YgZm9sZGluZyBpdCBpbnRvIHRoZSBDcmVhdGVkIHRpbWVzdGFtcC4gKi9cbiAgc2hvd1NlcGFyYXRlRXZlbnRPY2N1cnJlbmNlVGltZXN0YW1wcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFdmVudHMgZXZlcnkgcmVwbGF5IHJlYWRzIHBhc3QgYXMgcmVwZWF0cywgZnJvbSB0aGUgY2FsbGVyIHRoYXQgaG9sZHMgdGhlXG4gICAqIHdob2xlIGxvZy4gYGV2ZW50c2AgaGVyZSBpcyBvbmUgZW50aXR5J3Mgc2xpY2Ugb2YgaXQsIHdoaWNoIGNhbm5vdCBhbnN3ZXJcbiAgICogdGhlIHF1ZXN0aW9uIG9uIGl0cyBvd24uXG4gICAqL1xuICBkdXBsaWNhdGVFdmVudElkcz86IFJlYWRvbmx5U2V0PHN0cmluZz47XG59KSB7XG4gIC8vIFNvcnQgYnkgdGhlIHRpbWVzdGFtcCBzaG93biBhcyBDcmVhdGVkIGJ5IGRlZmF1bHQuXG4gIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIFsuLi5ldmVudHNdLnNvcnQoXG4gICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgIGdldEVmZmVjdGl2ZUV2ZW50RGF0ZShhKS5nZXRUaW1lKCkgLVxuICAgICAgICAgIGdldEVmZmVjdGl2ZUV2ZW50RGF0ZShiKS5nZXRUaW1lKClcbiAgICAgICksXG4gICAgW2V2ZW50c11cbiAgKTtcblxuICBjb25zdCBoYXNFdmVudHMgPSBzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCAmJiAhZXJyb3I7XG5cbiAgaWYgKCFoYXNFdmVudHMgJiYgIWlzTG9hZGluZykge1xuICAgIHJldHVybiA8Q29sbGFwc2libGUgbGFiZWw9XCJFdmVudHNcIiBkaXNhYmxlZCAvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJ1bkNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25SdW5DbGlja30+XG4gICAgICA8U3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblN0cmVhbUNsaWNrfT5cbiAgICAgICAgPENvbGxhcHNpYmxlUm9vdCBkZWZhdWx0T3Blbj5cbiAgICAgICAgICA8Q29sbGFwc2libGVUcmlnZ2VyPkV2ZW50czwvQ29sbGFwc2libGVUcmlnZ2VyPlxuICAgICAgICAgIDxDb2xsYXBzaWJsZUNvbnRlbnQgY2xhc3NOYW1lPVwibWItMFwiPlxuICAgICAgICAgICAge2lzTG9hZGluZyA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIC1teC00XCI+XG4gICAgICAgICAgICAgICAge1swLCAxLCAyXS5tYXAoKGkpID0+IChcbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAga2V5PXtpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTMgYmctYmFja2dyb3VuZC0yMDAgcHgtNCBweS0yXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNrZWxldG9uIGNsYXNzTmFtZT1cImgtNCB3LTMyIHJvdW5kZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC0zIHctMTYgcm91bmRlZFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgLW14LTRcIj5cbiAgICAgICAgICAgICAgICB7c29ydGVkRXZlbnRzLm1hcCgoZXZlbnQpID0+IChcbiAgICAgICAgICAgICAgICAgIDxFdmVudEl0ZW1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtldmVudC5ldmVudElkfVxuICAgICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIG9uTG9hZEV2ZW50RGF0YT17b25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtlbmNyeXB0aW9uS2V5fVxuICAgICAgICAgICAgICAgICAgICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPXtcbiAgICAgICAgICAgICAgICAgICAgICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaXNEdXBsaWNhdGU9e2R1cGxpY2F0ZUV2ZW50SWRzPy5oYXMoZXZlbnQuZXZlbnRJZCl9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZUNvbnRlbnQ+XG4gICAgICAgIDwvQ29sbGFwc2libGVSb290PlxuICAgICAgPC9TdHJlYW1DbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9SdW5DbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG4iXX0=
@@ -79,4 +79,4 @@ export function ResolveHookModal({ isOpen, onClose, onSubmit, isSubmitting = fal
79
79
  setParseError(null);
80
80
  }, onKeyDown: handleKeyDown, disabled: isSubmitting, placeholder: '{"key": "value"}', className: cn('box-border h-40 w-full resize-none rounded-lg border bg-background-100 px-3 py-2 font-mono text-[13px] text-gray-1000 leading-[1.5] outline-none disabled:cursor-not-allowed disabled:opacity-50', parseError ? 'border-red-700' : 'border-gray-alpha-400') }), parseError && (_jsx("p", { className: "mt-2 mb-0 text-[13px] text-red-900", children: parseError })), _jsxs("p", { className: "mt-2 mb-0 text-gray-800 text-xs", children: ["Press", ' ', _jsxs("kbd", { className: "rounded border border-gray-alpha-400 bg-gray-alpha-200 px-[5px] py-0.5 font-mono text-[11px]", children: [isMacPlatform ? '⌘' : 'Ctrl', "+Enter"] }), ' ', "to submit"] })] }), _jsxs("div", { className: "flex items-center justify-end gap-2 border-gray-alpha-400 border-t px-6 py-3", children: [_jsx("button", { type: "button", onClick: onClose, disabled: isSubmitting, className: "cursor-pointer rounded-lg border border-gray-alpha-400 bg-background-100 px-4 py-2 font-medium text-gray-1000 text-sm transition-colors hover:bg-gray-alpha-100 disabled:cursor-not-allowed disabled:opacity-50", children: "Cancel" }), _jsxs("button", { type: "button", onClick: () => void submitPayload(), disabled: isSubmitting, className: "flex cursor-pointer items-center gap-1.5 rounded-lg !border-none bg-gray-1000 px-4 py-2 font-medium text-background-100 text-sm transition-opacity hover:opacity-90 disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:opacity-50", children: [_jsx(Send, { className: "size-3.5" }), isSubmitting ? 'Sending...' : 'Send Payload'] })] })] })] })] }));
81
81
  }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1ob29rLW1vZGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2lkZWJhci9yZXNvbHZlLWhvb2stbW9kYWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFhbEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFDL0IsTUFBTSxFQUNOLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxHQUFHLEtBQUssR0FDRTtJQUN0QixNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDbEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztJQUV0RCwwQ0FBMEM7SUFDMUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWIsZ0NBQWdDO0lBQ2hDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakIsYUFBYSxDQUFDLElB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QzFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLGNBRXpCLEVBQUMsR0FBRyxpQkFFUixJQUNBLEVBR04sZUFBSyxTQUFTLEVBQUMsOEVBQThFLGFBQzNGLGlCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLE9BQU8sRUFDaEIsUUFBUSxFQUFFLFlBQVksRUFDdEIsU0FBUyxFQUFDLGlOQUFpTix1QkFHcE4sRUFDVCxrQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLGFBQWEsRUFBRSxFQUNuQyxRQUFRLEVBQUUsWUFBWSxFQUN0QixTQUFTLEVBQUMsK09BQStPLGFBRXpQLEtBQUMsSUFBSSxJQUFDLFNBQVMsRUFBQyxVQUFVLEdBQUcsRUFDNUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFDdEMsSUFDTCxJQUNELElBQ0gsSUFDRixDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBTZW5kLCBYIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi9jbic7XG5cbmludGVyZmFjZSBSZXNvbHZlSG9va01vZGFsUHJvcHMge1xuICAvKiogV2hldGhlciB0aGUgbW9kYWwgaXMgb3BlbiAqL1xuICBpc09wZW46IGJvb2xlYW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIHRoZSBtb2RhbCBzaG91bGQgYmUgY2xvc2VkICovXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCB3aXRoIHRoZSBwYXJzZWQgSlNPTiBwYXlsb2FkICovXG4gIG9uU3VibWl0OiAocGF5bG9hZDogdW5rbm93bikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFdoZXRoZXIgdGhlIHN1Ym1pc3Npb24gaXMgaW4gcHJvZ3Jlc3MgKi9cbiAgaXNTdWJtaXR0aW5nPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RhbCBjb21wb25lbnQgZm9yIHJlc29sdmluZyBhIGhvb2sgYnkgZW50ZXJpbmcgYSBKU09OIHBheWxvYWQuXG4gKlxuICogU3R5bGVkIHRvIG1hdGNoIHRoZSBHZWlzdCBkZXNpZ24tc3lzdGVtIGRpYWxvZyBjb21wb25lbnQgdXNlZCBpbiB0aGVcbiAqIFZlcmNlbCBkYXNoYm9hcmQgc28gaXQgbG9va3MgbmF0aXZlIHdoZW4gcmVuZGVyZWQgaW5zaWRlIGBmcm9udGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZXNvbHZlSG9va01vZGFsKHtcbiAgaXNPcGVuLFxuICBvbkNsb3NlLFxuICBvblN1Ym1pdCxcbiAgaXNTdWJtaXR0aW5nID0gZmFsc2UsXG59OiBSZXNvbHZlSG9va01vZGFsUHJvcHMpOiBSZWFjdC5KU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBbanNvbklucHV0LCBzZXRKc29uSW5wdXRdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbcGFyc2VFcnJvciwgc2V0UGFyc2VFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgdGV4dGFyZWFSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbCk7XG5cbiAgLy8gRm9jdXMgdGhlIHRleHRhcmVhIHdoZW4gdGhlIG1vZGFsIG9wZW5zXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiB0ZXh0YXJlYVJlZi5jdXJyZW50KSB7XG4gICAgICB0ZXh0YXJlYVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbaXNPcGVuXSk7XG5cbiAgLy8gUmVzZXQgc3RhdGUgd2hlbiBtb2RhbCBjbG9zZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgc2V0SnNvbklucHV0KCcnKTtcbiAgICAgIHNldFBhcnNlRXJyb3IobnVsbCk7XG4gICAgfVxuICB9LCBbaXNPcGVuXSk7XG5cbiAgLy8gSGFuZGxlIGVzY2FwZSBrZXkgdG8gY2xvc2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScgJiYgaXNPcGVuICYmICFpc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgb25DbG9zZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bik7XG4gIH0sIFtpc09wZW4sIGlzU3VibWl0dGluZywgb25DbG9zZV0pO1xuXG4gIGNvbnN0IHN1Ym1pdFBheWxvYWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0UGFyc2VFcnJvcihudWxsKTtcblxuICAgIC8vIFBhcnNlIHRoZSBKU09OIGlucHV0XG4gICAgbGV0IHBheWxvYWQ6IHVua25vd247XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFsbG93IGVtcHR5IHN0cmluZyBhcyBudWxsIHBheWxvYWRcbiAgICAgIGlmIChqc29uSW5wdXQudHJpbSgpID09PSAnJykge1xuICAgICAgICBwYXlsb2FkID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKGpzb25JbnB1dCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICBzZXRQYXJzZUVycm9yKCdJbnZhbGlkIEpTT04uIFBsZWFzZSBjaGVjayB5b3VyIGlucHV0LicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IG9uU3VibWl0KHBheWxvYWQpO1xuICB9LCBbanNvbklucHV0LCBvblN1Ym1pdF0pO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHZvaWQgc3VibWl0UGF5bG9hZCgpO1xuICAgIH0sXG4gICAgW3N1Ym1pdFBheWxvYWRdXG4gICk7XG5cbiAgY29uc3QgaXNNYWNQbGF0Zm9ybSA9XG4gICAgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAoXG4gICAgICAobmF2aWdhdG9yIGFzIE5hdmlnYXRvciAmIHsgdXNlckFnZW50RGF0YT86IHsgcGxhdGZvcm0/OiBzdHJpbmcgfSB9KVxuICAgICAgICAudXNlckFnZW50RGF0YT8ucGxhdGZvcm0gPz8gbmF2aWdhdG9yLnVzZXJBZ2VudFxuICAgIClcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAuaW5jbHVkZXMoJ21hYycpO1xuXG4gIC8vIEhhbmRsZSBDbWQvQ3RybCArIEVudGVyIHRvIHN1Ym1pdFxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LktleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmICgoZS5tZXRhS2V5IHx8IGUuY3RybEtleSkgJiYgZS5rZXkgPT09ICdFbnRlcicgJiYgIWlzU3VibWl0dGluZykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGhhbmRsZVN1Ym1pdChlIGFzIHVua25vd24gYXMgUmVhY3QuRm9ybUV2ZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVTdWJtaXQsIGlzU3VibWl0dGluZ11cbiAgKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIlxuICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICBhcmlhLWxhYmVsbGVkYnk9XCJyZXNvbHZlLWhvb2stbW9kYWwtdGl0bGVcIlxuICAgID5cbiAgICAgIHsvKiBCYWNrZHJvcCDigJQgbWF0Y2hlcyBHZWlzdCBkaWFsb2cgOjpiYWNrZHJvcCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy1ibGFjay83MFwiXG4gICAgICAgIG9uQ2xpY2s9e2lzU3VibWl0dGluZyA/IHVuZGVmaW5lZCA6IG9uQ2xvc2V9XG4gICAgICAvPlxuXG4gICAgICB7LyogTW9kYWwgY2FyZCDigJQgbWF0Y2hlcyBHZWlzdCBkaWFsb2cuZ2Vpc3QtZGlhbG9nICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB6LTEwIHctWzQ4MHB4XSBtYXgtdy1bY2FsYygxMDAlXy1fMzJweCldIG92ZXJmbG93LWhpZGRlbiAhYm9yZGVyLW5vbmUgYmctYmFja2dyb3VuZC0xMDAgdGV4dC1ncmF5LTEwMDAgbWF0ZXJpYWwtbWVudVwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IHB5LTRcIj5cbiAgICAgICAgICA8aDJcbiAgICAgICAgICAgIGlkPVwicmVzb2x2ZS1ob29rLW1vZGFsLXRpdGxlXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm0tMCBmb250LXNlbWlib2xkIHRleHQtYmFzZSB0ZXh0LWdyYXktMTAwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgUmVzb2x2ZSBIb29rXG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2V9XG4gICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIG1vZGFsXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgIWJvcmRlci1ub25lICFiZy10cmFuc3BhcmVudCBwLTEgdGV4dC1ncmF5LTkwMCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjohYmctZ3JheS1hbHBoYS0yMDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxYIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBCb2R5ICovfVxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB4LTYgcGItNFwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGh0bWxGb3I9XCJqc29uLXBheWxvYWRcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0xLjUgYmxvY2sgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTEwMDAgdGV4dC1zbVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEpTT04gUGF5bG9hZFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTAgbWItMyB0ZXh0LVsxM3B4XSB0ZXh0LWdyYXktOTAwIGxlYWRpbmctWzEuNV1cIj5cbiAgICAgICAgICAgICAgRW50ZXIgYSBKU09OIHZhbHVlIHRvIHNlbmQgdG8gdGhlIGhvb2suIExlYXZlIGVtcHR5IHRvIHNlbmR7JyAnfVxuICAgICAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9XCJyb3VuZGVkIGJnLWdyYXktYWxwaGEtMjAwIHB4LTEuNSBweS0wLjUgZm9udC1tb25vIHRleHQtZ3JheS0xMDAwIHRleHQteHNcIj5cbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgIHJlZj17dGV4dGFyZWFSZWZ9XG4gICAgICAgICAgICAgIGlkPVwianNvbi1wYXlsb2FkXCJcbiAgICAgICAgICAgICAgdmFsdWU9e2pzb25JbnB1dH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0SnNvbklucHV0KGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICBzZXRQYXJzZUVycm9yKG51bGwpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSd7XCJrZXlcIjogXCJ2YWx1ZVwifSdcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnYm94LWJvcmRlciBoLTQwIHctZnVsbCByZXNpemUtbm9uZSByb3VuZGVkLWxnIGJvcmRlciBiZy1iYWNrZ3JvdW5kLTEwMCBweC0zIHB5LTIgZm9udC1tb25vIHRleHQtWzEzcHhdIHRleHQtZ3JheS0xMDAwIGxlYWRpbmctWzEuNV0gb3V0bGluZS1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICAgICAgICAgICBwYXJzZUVycm9yID8gJ2JvcmRlci1yZWQtNzAwJyA6ICdib3JkZXItZ3JheS1hbHBoYS00MDAnXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3BhcnNlRXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIG1iLTAgdGV4dC1bMTNweF0gdGV4dC1yZWQtOTAwXCI+e3BhcnNlRXJyb3J9PC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgbWItMCB0ZXh0LWdyYXktODAwIHRleHQteHNcIj5cbiAgICAgICAgICAgICAgUHJlc3N7JyAnfVxuICAgICAgICAgICAgICA8a2JkIGNsYXNzTmFtZT1cInJvdW5kZWQgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCBiZy1ncmF5LWFscGhhLTIwMCBweC1bNXB4XSBweS0wLjUgZm9udC1tb25vIHRleHQtWzExcHhdXCI+XG4gICAgICAgICAgICAgICAge2lzTWFjUGxhdGZvcm0gPyAn4oyYJyA6ICdDdHJsJ31cbiAgICAgICAgICAgICAgICArRW50ZXJcbiAgICAgICAgICAgICAgPC9rYmQ+eycgJ31cbiAgICAgICAgICAgICAgdG8gc3VibWl0XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogRm9vdGVyICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJvcmRlci10IHB4LTYgcHktM1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY3Vyc29yLXBvaW50ZXIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWJhY2tncm91bmQtMTAwIHB4LTQgcHktMiBmb250LW1lZGl1bSB0ZXh0LWdyYXktMTAwMCB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWdyYXktYWxwaGEtMTAwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgc3VibWl0UGF5bG9hZCgpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbGcgIWJvcmRlci1ub25lIGJnLWdyYXktMTAwMCBweC00IHB5LTIgZm9udC1tZWRpdW0gdGV4dC1iYWNrZ3JvdW5kLTEwMCB0ZXh0LXNtIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTkwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmhvdmVyOm9wYWNpdHktNTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U2VuZCBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG4gICAgICAgICAgICAgIHtpc1N1Ym1pdHRpbmcgPyAnU2VuZGluZy4uLicgOiAnU2VuZCBQYXlsb2FkJ31cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1ob29rLW1vZGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2lkZWJhci9yZXNvbHZlLWhvb2stbW9kYWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFhbEM7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsRUFDL0IsTUFBTSxFQUNOLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxHQUFHLEtBQUssR0FDRTtJQUN0QixNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDbEUsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztJQUV0RCwwQ0FBMEM7SUFDMUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksTUFBTSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWIsZ0NBQWdDO0lBQ2hDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDakIsYUFBYSxDQUFDLElB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QzFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLGNBRXpCLEVBQUMsR0FBRyxpQkFFUixJQUNBLEVBR04sZUFBSyxTQUFTLEVBQUMsOEVBQThFLGFBQzNGLGlCQUNFLElBQUksRUFBQyxRQUFRLEVBQ2IsT0FBTyxFQUFFLE9BQU8sRUFDaEIsUUFBUSxFQUFFLFlBQVksRUFDdEIsU0FBUyxFQUFDLGlOQUFpTix1QkFHcE4sRUFDVCxrQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLGFBQWEsRUFBRSxFQUNuQyxRQUFRLEVBQUUsWUFBWSxFQUN0QixTQUFTLEVBQUMsK09BQStPLGFBRXpQLEtBQUMsSUFBSSxJQUFDLFNBQVMsRUFBQyxVQUFVLEdBQUcsRUFDNUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGNBQWMsSUFDdEMsSUFDTCxJQUNELElBQ0gsSUFDRixDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBTZW5kLCBYIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi9jbic7XG5cbmludGVyZmFjZSBSZXNvbHZlSG9va01vZGFsUHJvcHMge1xuICAvKiogV2hldGhlciB0aGUgbW9kYWwgaXMgb3BlbiAqL1xuICBpc09wZW46IGJvb2xlYW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIHRoZSBtb2RhbCBzaG91bGQgYmUgY2xvc2VkICovXG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCB3aXRoIHRoZSBwYXJzZWQgSlNPTiBwYXlsb2FkICovXG4gIG9uU3VibWl0OiAocGF5bG9hZDogdW5rbm93bikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFdoZXRoZXIgdGhlIHN1Ym1pc3Npb24gaXMgaW4gcHJvZ3Jlc3MgKi9cbiAgaXNTdWJtaXR0aW5nPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RhbCBjb21wb25lbnQgZm9yIHJlc29sdmluZyBhIGhvb2sgYnkgZW50ZXJpbmcgYSBKU09OIHBheWxvYWQuXG4gKlxuICogU3R5bGVkIHRvIG1hdGNoIHRoZSBHZWlzdCBkZXNpZ24tc3lzdGVtIGRpYWxvZyBjb21wb25lbnQgdXNlZCBpbiB0aGVcbiAqIFZlcmNlbCBkYXNoYm9hcmQgc28gaXQgbG9va3MgbmF0aXZlIHdoZW4gcmVuZGVyZWQgaW5zaWRlIGBmcm9udGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZXNvbHZlSG9va01vZGFsKHtcbiAgaXNPcGVuLFxuICBvbkNsb3NlLFxuICBvblN1Ym1pdCxcbiAgaXNTdWJtaXR0aW5nID0gZmFsc2UsXG59OiBSZXNvbHZlSG9va01vZGFsUHJvcHMpOiBSZWFjdC5KU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBbanNvbklucHV0LCBzZXRKc29uSW5wdXRdID0gdXNlU3RhdGUoJycpO1xuICBjb25zdCBbcGFyc2VFcnJvciwgc2V0UGFyc2VFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgY29uc3QgdGV4dGFyZWFSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbCk7XG5cbiAgLy8gRm9jdXMgdGhlIHRleHRhcmVhIHdoZW4gdGhlIG1vZGFsIG9wZW5zXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiB0ZXh0YXJlYVJlZi5jdXJyZW50KSB7XG4gICAgICB0ZXh0YXJlYVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbaXNPcGVuXSk7XG5cbiAgLy8gUmVzZXQgc3RhdGUgd2hlbiBtb2RhbCBjbG9zZXNcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgc2V0SnNvbklucHV0KCcnKTtcbiAgICAgIHNldFBhcnNlRXJyb3IobnVsbCk7XG4gICAgfVxuICB9LCBbaXNPcGVuXSk7XG5cbiAgLy8gSGFuZGxlIGVzY2FwZSBrZXkgdG8gY2xvc2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScgJiYgaXNPcGVuICYmICFpc1N1Ym1pdHRpbmcpIHtcbiAgICAgICAgb25DbG9zZSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bik7XG4gIH0sIFtpc09wZW4sIGlzU3VibWl0dGluZywgb25DbG9zZV0pO1xuXG4gIGNvbnN0IHN1Ym1pdFBheWxvYWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0UGFyc2VFcnJvcihudWxsKTtcblxuICAgIC8vIFBhcnNlIHRoZSBKU09OIGlucHV0XG4gICAgbGV0IHBheWxvYWQ6IHVua25vd247XG4gICAgdHJ5IHtcbiAgICAgIC8vIEFsbG93IGVtcHR5IHN0cmluZyBhcyBudWxsIHBheWxvYWRcbiAgICAgIGlmIChqc29uSW5wdXQudHJpbSgpID09PSAnJykge1xuICAgICAgICBwYXlsb2FkID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKGpzb25JbnB1dCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICBzZXRQYXJzZUVycm9yKCdJbnZhbGlkIEpTT04uIFBsZWFzZSBjaGVjayB5b3VyIGlucHV0LicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IG9uU3VibWl0KHBheWxvYWQpO1xuICB9LCBbanNvbklucHV0LCBvblN1Ym1pdF0pO1xuXG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHZvaWQgc3VibWl0UGF5bG9hZCgpO1xuICAgIH0sXG4gICAgW3N1Ym1pdFBheWxvYWRdXG4gICk7XG5cbiAgY29uc3QgaXNNYWNQbGF0Zm9ybSA9XG4gICAgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAoXG4gICAgICAobmF2aWdhdG9yIGFzIE5hdmlnYXRvciAmIHsgdXNlckFnZW50RGF0YT86IHsgcGxhdGZvcm0/OiBzdHJpbmcgfSB9KVxuICAgICAgICAudXNlckFnZW50RGF0YT8ucGxhdGZvcm0gPz8gbmF2aWdhdG9yLnVzZXJBZ2VudFxuICAgIClcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAuaW5jbHVkZXMoJ21hYycpO1xuXG4gIC8vIEhhbmRsZSBDbWQvQ3RybCArIEVudGVyIHRvIHN1Ym1pdFxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LktleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmICgoZS5tZXRhS2V5IHx8IGUuY3RybEtleSkgJiYgZS5rZXkgPT09ICdFbnRlcicgJiYgIWlzU3VibWl0dGluZykge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGhhbmRsZVN1Ym1pdChlIGFzIHVua25vd24gYXMgUmVhY3QuRm9ybUV2ZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVTdWJtaXQsIGlzU3VibWl0dGluZ11cbiAgKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJmaXhlZCBpbnNldC0wIHotNTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIlxuICAgICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gICAgICBhcmlhLWxhYmVsbGVkYnk9XCJyZXNvbHZlLWhvb2stbW9kYWwtdGl0bGVcIlxuICAgID5cbiAgICAgIHsvKiBCYWNrZHJvcDogbWF0Y2hlcyBHZWlzdCBkaWFsb2cgOjpiYWNrZHJvcCAqL31cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMCBiZy1ibGFjay83MFwiXG4gICAgICAgIG9uQ2xpY2s9e2lzU3VibWl0dGluZyA/IHVuZGVmaW5lZCA6IG9uQ2xvc2V9XG4gICAgICAvPlxuXG4gICAgICB7LyogTW9kYWwgY2FyZDogbWF0Y2hlcyBHZWlzdCBkaWFsb2cuZ2Vpc3QtZGlhbG9nICovfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSB6LTEwIHctWzQ4MHB4XSBtYXgtdy1bY2FsYygxMDAlXy1fMzJweCldIG92ZXJmbG93LWhpZGRlbiAhYm9yZGVyLW5vbmUgYmctYmFja2dyb3VuZC0xMDAgdGV4dC1ncmF5LTEwMDAgbWF0ZXJpYWwtbWVudVwiPlxuICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC02IHB5LTRcIj5cbiAgICAgICAgICA8aDJcbiAgICAgICAgICAgIGlkPVwicmVzb2x2ZS1ob29rLW1vZGFsLXRpdGxlXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm0tMCBmb250LXNlbWlib2xkIHRleHQtYmFzZSB0ZXh0LWdyYXktMTAwMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgUmVzb2x2ZSBIb29rXG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2V9XG4gICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlIG1vZGFsXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgIWJvcmRlci1ub25lICFiZy10cmFuc3BhcmVudCBwLTEgdGV4dC1ncmF5LTkwMCB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjohYmctZ3JheS1hbHBoYS0yMDAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxYIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBCb2R5ICovfVxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInB4LTYgcGItNFwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGh0bWxGb3I9XCJqc29uLXBheWxvYWRcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi0xLjUgYmxvY2sgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTEwMDAgdGV4dC1zbVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEpTT04gUGF5bG9hZFxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTAgbWItMyB0ZXh0LVsxM3B4XSB0ZXh0LWdyYXktOTAwIGxlYWRpbmctWzEuNV1cIj5cbiAgICAgICAgICAgICAgRW50ZXIgYSBKU09OIHZhbHVlIHRvIHNlbmQgdG8gdGhlIGhvb2suIExlYXZlIGVtcHR5IHRvIHNlbmR7JyAnfVxuICAgICAgICAgICAgICA8Y29kZSBjbGFzc05hbWU9XCJyb3VuZGVkIGJnLWdyYXktYWxwaGEtMjAwIHB4LTEuNSBweS0wLjUgZm9udC1tb25vIHRleHQtZ3JheS0xMDAwIHRleHQteHNcIj5cbiAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgIDwvY29kZT5cbiAgICAgICAgICAgICAgLlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgIHJlZj17dGV4dGFyZWFSZWZ9XG4gICAgICAgICAgICAgIGlkPVwianNvbi1wYXlsb2FkXCJcbiAgICAgICAgICAgICAgdmFsdWU9e2pzb25JbnB1dH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0SnNvbklucHV0KGUudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICBzZXRQYXJzZUVycm9yKG51bGwpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSd7XCJrZXlcIjogXCJ2YWx1ZVwifSdcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAnYm94LWJvcmRlciBoLTQwIHctZnVsbCByZXNpemUtbm9uZSByb3VuZGVkLWxnIGJvcmRlciBiZy1iYWNrZ3JvdW5kLTEwMCBweC0zIHB5LTIgZm9udC1tb25vIHRleHQtWzEzcHhdIHRleHQtZ3JheS0xMDAwIGxlYWRpbmctWzEuNV0gb3V0bGluZS1ub25lIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwJyxcbiAgICAgICAgICAgICAgICBwYXJzZUVycm9yID8gJ2JvcmRlci1yZWQtNzAwJyA6ICdib3JkZXItZ3JheS1hbHBoYS00MDAnXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3BhcnNlRXJyb3IgJiYgKFxuICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtdC0yIG1iLTAgdGV4dC1bMTNweF0gdGV4dC1yZWQtOTAwXCI+e3BhcnNlRXJyb3J9PC9wPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTIgbWItMCB0ZXh0LWdyYXktODAwIHRleHQteHNcIj5cbiAgICAgICAgICAgICAgUHJlc3N7JyAnfVxuICAgICAgICAgICAgICA8a2JkIGNsYXNzTmFtZT1cInJvdW5kZWQgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCBiZy1ncmF5LWFscGhhLTIwMCBweC1bNXB4XSBweS0wLjUgZm9udC1tb25vIHRleHQtWzExcHhdXCI+XG4gICAgICAgICAgICAgICAge2lzTWFjUGxhdGZvcm0gPyAn4oyYJyA6ICdDdHJsJ31cbiAgICAgICAgICAgICAgICArRW50ZXJcbiAgICAgICAgICAgICAgPC9rYmQ+eycgJ31cbiAgICAgICAgICAgICAgdG8gc3VibWl0XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogRm9vdGVyICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJvcmRlci10IHB4LTYgcHktM1wiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiY3Vyc29yLXBvaW50ZXIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGJnLWJhY2tncm91bmQtMTAwIHB4LTQgcHktMiBmb250LW1lZGl1bSB0ZXh0LWdyYXktMTAwMCB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWdyYXktYWxwaGEtMTAwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHZvaWQgc3VibWl0UGF5bG9hZCgpfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBnYXAtMS41IHJvdW5kZWQtbGcgIWJvcmRlci1ub25lIGJnLWdyYXktMTAwMCBweC00IHB5LTIgZm9udC1tZWRpdW0gdGV4dC1iYWNrZ3JvdW5kLTEwMCB0ZXh0LXNtIHRyYW5zaXRpb24tb3BhY2l0eSBob3ZlcjpvcGFjaXR5LTkwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCBkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmhvdmVyOm9wYWNpdHktNTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8U2VuZCBjbGFzc05hbWU9XCJzaXplLTMuNVwiIC8+XG4gICAgICAgICAgICAgIHtpc1N1Ym1pdHRpbmcgPyAnU2VuZGluZy4uLicgOiAnU2VuZCBQYXlsb2FkJ31cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
@@ -21,6 +21,8 @@ export interface SidebarDataContextValue {
21
21
  encryptionKey?: Uint8Array;
22
22
  onDecrypt?: () => void;
23
23
  isDecrypting?: boolean;
24
+ isDecryptDisabled?: boolean;
25
+ decryptDisabledReason?: string;
24
26
  hasEncryptedData?: boolean;
25
27
  /** Show occurredAt separately instead of folding it into the Created timestamp. */
26
28
  showSeparateEventOccurrenceTimestamps?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-data-context.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/sidebar-data-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,MAAM,GAAG,SAAS,CAAC;CAC1B;AAKD,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAMA;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD;AAED,wBAAgB,sBAAsB,IAAI,uBAAuB,GAAG,IAAI,CAEvE"}
1
+ {"version":3,"file":"sidebar-data-context.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/sidebar-data-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5D,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mFAAmF;IACnF,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE;QAC1B,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB,KAAK,MAAM,GAAG,SAAS,CAAC;CAC1B;AAKD,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAMA;AAED,wBAAgB,cAAc,IAAI,uBAAuB,CAMxD;AAED,wBAAgB,sBAAsB,IAAI,uBAAuB,GAAG,IAAI,CAEvE"}
@@ -16,4 +16,4 @@ export function useSidebarData() {
16
16
  export function useSidebarDataOptional() {
17
17
  return useContext(SidebarDataContext);
18
18
  }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1kYXRhLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsT0FBTyxFQUFFLGFBQWEsRUFBa0IsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBcUNsRSxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBaUMsSUFBSSxDQUFDLENBQUM7QUFDL0Usa0JBQWtCLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXRELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxFQUNsQyxLQUFLLEVBQ0wsUUFBUSxHQUlUO0lBQ0MsT0FBTyxDQUNMLEtBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxLQUFLLFlBQ3RDLFFBQVEsR0FDbUIsQ0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB0eXBlIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRmV0Y2hTcGFuRGV0YWlsIH0gZnJvbSAnLi91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgZXZlbnRzOiBFdmVudFtdO1xuICAvKipcbiAgICogRXZlbnRzIGV2ZXJ5IHJlcGxheSByZWFkcyBwYXN0IGFzIHJlcGVhdHMsIGNvbXB1dGVkIG9uY2UgZnJvbSB0aGUgd2hvbGVcbiAgICogb2YgYGV2ZW50c2AgYnkgd2hvZXZlciBrbm93cyB0aGUgbGlzdCBpcyBjb21wbGV0ZS4gQWJzZW50IHdoZW4gbm9ib2R5XG4gICAqIGNvdWxkIHZvdWNoIGZvciB0aGF0LCBpbiB3aGljaCBjYXNlIG5vdGhpbmcgaXMgbWFya2VkLlxuICAgKi9cbiAgZHVwbGljYXRlRXZlbnRJZHM/OiBSZWFkb25seVNldDxzdHJpbmc+O1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uTG9hZEV2ZW50RGF0YT86IChldmVudDogRXZlbnQpID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICBvblJlc29sdmVIb29rPzogKFxuICAgIGhvb2tUb2tlbjogc3RyaW5nLFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4gICAgaG9vaz86IEhvb2tcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbiAgb25EZWNyeXB0PzogKCkgPT4gdm9pZDtcbiAgaXNEZWNyeXB0aW5nPzogYm9vbGVhbjtcbiAgaGFzRW5jcnlwdGVkRGF0YT86IGJvb2xlYW47XG4gIC8qKiBTaG93IG9jY3VycmVkQXQgc2VwYXJhdGVseSBpbnN0ZWFkIG9mIGZvbGRpbmcgaXQgaW50byB0aGUgQ3JlYXRlZCB0aW1lc3RhbXAuICovXG4gIHNob3dTZXBhcmF0ZUV2ZW50T2NjdXJyZW5jZVRpbWVzdGFtcHM/OiBib29sZWFuO1xuICBnZXRNb2R1bGVTb3VyY2VVcmw/OiAoaW5mbzoge1xuICAgIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nO1xuICAgIGRlcGxveW1lbnRJZDogc3RyaW5nO1xuICB9KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFNpZGViYXJEYXRhQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2lkZWJhckRhdGFDb250ZXh0VmFsdWUgfCBudWxsPihudWxsKTtcblNpZGViYXJEYXRhQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdTaWRlYmFyRGF0YUNvbnRleHQnO1xuXG5leHBvcnQgZnVuY3Rpb24gU2lkZWJhckRhdGFQcm92aWRlcih7XG4gIHZhbHVlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgdmFsdWU6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkge1xuICByZXR1cm4gKFxuICAgIDxTaWRlYmFyRGF0YUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NpZGViYXJEYXRhQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNpZGViYXJEYXRhKCk6IFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChTaWRlYmFyRGF0YUNvbnRleHQpO1xuICBpZiAoIWN0eCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlU2lkZWJhckRhdGEgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFNpZGViYXJEYXRhUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY3R4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2lkZWJhckRhdGFPcHRpb25hbCgpOiBTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZSB8IG51bGwge1xuICByZXR1cm4gdXNlQ29udGV4dChTaWRlYmFyRGF0YUNvbnRleHQpO1xufVxuIl19
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci1kYXRhLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL3NpZGViYXItZGF0YS1jb250ZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBR2IsT0FBTyxFQUFFLGFBQWEsRUFBa0IsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBdUNsRSxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBaUMsSUFBSSxDQUFDLENBQUM7QUFDL0Usa0JBQWtCLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDO0FBRXRELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxFQUNsQyxLQUFLLEVBQ0wsUUFBUSxHQUlUO0lBQ0MsT0FBTyxDQUNMLEtBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxLQUFLLFlBQ3RDLFFBQVEsR0FDbUIsQ0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYztJQUM1QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUMzQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0I7SUFDcEMsT0FBTyxVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IEV2ZW50LCBIb29rLCBXb3JrZmxvd1J1biB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB0eXBlIFJlYWN0Tm9kZSwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgRmV0Y2hTcGFuRGV0YWlsIH0gZnJvbSAnLi91c2Utc2VsZWN0ZWQtc3Bhbi1kZXRhaWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHtcbiAgcnVuOiBXb3JrZmxvd1J1bjtcbiAgZXZlbnRzOiBFdmVudFtdO1xuICAvKipcbiAgICogRXZlbnRzIGV2ZXJ5IHJlcGxheSByZWFkcyBwYXN0IGFzIHJlcGVhdHMsIGNvbXB1dGVkIG9uY2UgZnJvbSB0aGUgd2hvbGVcbiAgICogb2YgYGV2ZW50c2AgYnkgd2hvZXZlciBrbm93cyB0aGUgbGlzdCBpcyBjb21wbGV0ZS4gQWJzZW50IHdoZW4gbm9ib2R5XG4gICAqIGNvdWxkIHZvdWNoIGZvciB0aGF0LCBpbiB3aGljaCBjYXNlIG5vdGhpbmcgaXMgbWFya2VkLlxuICAgKi9cbiAgZHVwbGljYXRlRXZlbnRJZHM/OiBSZWFkb25seVNldDxzdHJpbmc+O1xuICBmZXRjaFNwYW5EZXRhaWw6IEZldGNoU3BhbkRldGFpbDtcbiAgb25TdHJlYW1DbGljaz86IChzdHJlYW1JZDogc3RyaW5nKSA9PiB2b2lkO1xuICBvblJ1bkNsaWNrPzogKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uV2FrZVVwU2xlZXA/OiAoXG4gICAgcnVuSWQ6IHN0cmluZyxcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHsgc3RvcHBlZENvdW50OiBudW1iZXIgfT47XG4gIG9uTG9hZEV2ZW50RGF0YT86IChldmVudDogRXZlbnQpID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICBvblJlc29sdmVIb29rPzogKFxuICAgIGhvb2tUb2tlbjogc3RyaW5nLFxuICAgIHBheWxvYWQ6IHVua25vd24sXG4gICAgaG9vaz86IEhvb2tcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbiAgb25EZWNyeXB0PzogKCkgPT4gdm9pZDtcbiAgaXNEZWNyeXB0aW5nPzogYm9vbGVhbjtcbiAgaXNEZWNyeXB0RGlzYWJsZWQ/OiBib29sZWFuO1xuICBkZWNyeXB0RGlzYWJsZWRSZWFzb24/OiBzdHJpbmc7XG4gIGhhc0VuY3J5cHRlZERhdGE/OiBib29sZWFuO1xuICAvKiogU2hvdyBvY2N1cnJlZEF0IHNlcGFyYXRlbHkgaW5zdGVhZCBvZiBmb2xkaW5nIGl0IGludG8gdGhlIENyZWF0ZWQgdGltZXN0YW1wLiAqL1xuICBzaG93U2VwYXJhdGVFdmVudE9jY3VycmVuY2VUaW1lc3RhbXBzPzogYm9vbGVhbjtcbiAgZ2V0TW9kdWxlU291cmNlVXJsPzogKGluZm86IHtcbiAgICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZztcbiAgICBkZXBsb3ltZW50SWQ6IHN0cmluZztcbiAgfSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG5jb25zdCBTaWRlYmFyRGF0YUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNpZGViYXJEYXRhQ29udGV4dFZhbHVlIHwgbnVsbD4obnVsbCk7XG5TaWRlYmFyRGF0YUNvbnRleHQuZGlzcGxheU5hbWUgPSAnU2lkZWJhckRhdGFDb250ZXh0JztcblxuZXhwb3J0IGZ1bmN0aW9uIFNpZGViYXJEYXRhUHJvdmlkZXIoe1xuICB2YWx1ZSxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIHZhbHVlOiBTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZTtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U2lkZWJhckRhdGFDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9TaWRlYmFyRGF0YUNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VTaWRlYmFyRGF0YSgpOiBTaWRlYmFyRGF0YUNvbnRleHRWYWx1ZSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoU2lkZWJhckRhdGFDb250ZXh0KTtcbiAgaWYgKCFjdHgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNpZGViYXJEYXRhIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBTaWRlYmFyRGF0YVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGN0eDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVNpZGViYXJEYXRhT3B0aW9uYWwoKTogU2lkZWJhckRhdGFDb250ZXh0VmFsdWUgfCBudWxsIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoU2lkZWJhckRhdGFDb250ZXh0KTtcbn1cbiJdfQ==
@@ -7,7 +7,7 @@ import { StreamViewerSkeleton } from './stream-viewer-skeleton';
7
7
  import { CopyButton } from './trace-viewer/components/copy-button';
8
8
  import { DataInspector } from './ui/data-inspector';
9
9
  // ──────────────────────────────────────────────────────────────────────────
10
- // Chunk row memoized to prevent remounts during polling
10
+ // Chunk row: memoized to prevent remounts during polling
11
11
  // ──────────────────────────────────────────────────────────────────────────
12
12
  const ChunkRow = React.memo(function ChunkRow({ chunk }) {
13
13
  return (_jsxs("div", { className: "flex w-full items-start gap-1 border-b border-gray-alpha-400 px-3 py-2", children: [_jsx("div", { className: "min-w-0 flex-1", children: typeof chunk.value === 'string' ? (_jsx("span", { className: "whitespace-pre-wrap break-words text-label-12 font-mono text-gray-1000", children: chunk.value })) : (_jsx(DataInspector, { data: chunk.value, expandLevel: 1 })) }), _jsx(CopyButton, { copyText: serializeForClipboard(chunk.value), ariaLabel: "Copy chunk", className: "shrink-0 -mr-1 [&>div]:h-4 [&>div]:w-4 [&_svg]:h-4 [&_svg]:w-4" })] }));
@@ -37,4 +37,4 @@ export function StreamViewer({ streamId: _streamId, chunks, isLive, error, isLoa
37
37
  }
38
38
  return (_jsxs("div", { className: "flex h-full w-full flex-col overflow-hidden bg-background-100", children: [_jsx("div", { className: "flex h-10 min-h-10 items-center gap-1.5 border-b border-gray-alpha-400 px-3", children: isLive && (_jsxs(_Fragment, { children: [_jsx("span", { className: "inline-block h-2 w-2 rounded-full bg-green-600" }), _jsx("span", { className: "text-label-12 text-green-700", children: "Live" })] })) }), _jsx("div", { className: "flex-1 min-h-0", children: error ? (_jsxs("div", { className: "border-b border-red-400 bg-red-100 px-3 py-2 text-label-12 text-red-900", children: [_jsx("div", { children: "Error reading stream:" }), _jsx("div", { children: error })] })) : chunks.length === 0 ? (_jsx("div", { className: "flex h-10 items-center border-b border-gray-alpha-400 bg-background-200 px-3 text-label-12 text-gray-900", children: isLive ? 'Waiting for stream data...' : 'Stream is empty' })) : (_jsx(Virtuoso, { ref: virtuosoRef, totalCount: chunks.length, overscan: 10, endReached: () => onScrollEnd?.(), itemContent: (index) => (_jsx("div", { className: "w-full", children: _jsx(ChunkRow, { chunk: chunks[index] }) })), className: "min-h-0 flex-1" })) })] }));
39
39
  }
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLXZpZXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3N0cmVhbS12aWV3ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBd0JwRCw2RUFBNkU7QUFDN0UsMERBQTBEO0FBQzFELDZFQUE2RTtBQUU3RSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFvQjtJQUN2RSxPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMsd0VBQXdFLGFBQ3JGLGNBQUssU0FBUyxFQUFDLGdCQUFnQixZQUM1QixPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNqQyxlQUFNLFNBQVMsRUFBQyx3RUFBd0UsWUFDckYsS0FBSyxDQUFDLEtBQUssR0FDUCxDQUNSLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxhQUFhLElBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBSSxDQUNyRCxHQUNHLEVBQ04sS0FBQyxVQUFVLElBQ1QsUUFBUSxFQUFFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDNUMsU0FBUyxFQUFDLFlBQVksRUFDdEIsU0FBUyxFQUFDLGdFQUFnRSxHQUMxRSxJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUNqQiw2RUFBNkU7QUFFN0U7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsRUFDM0IsUUFBUSxFQUFFLFNBQVMsRUFDbkIsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsR0FDTztJQUNsQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkUsV0FBVyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7Z0JBQ2pDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXBCLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxLQUFDLG9CQUFvQixLQUFHLENBQUM7SUFDbEMsQ0FBQztJQUVELE9BQU8sQ0FDTCxlQUFLLFNBQVMsRUFBQywrREFBK0QsYUFFNUUsY0FBSyxTQUFTLEVBQUMsNkVBQTZFLFlBQ3pGLE1BQU0sSUFBSSxDQUNULDhCQUNFLGVBQU0sU0FBUyxFQUFDLGdEQUFnRCxHQUFHLEVBQ25FLGVBQU0sU0FBUyxFQUFDLDhCQUE4QixxQkFBWSxJQUN6RCxDQUNKLEdBQ0csRUFHTixjQUFLLFNBQVMsRUFBQyxnQkFBZ0IsWUFDNUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNQLGVBQUssU0FBUyxFQUFDLHlFQUF5RSxhQUN0RixrREFBZ0MsRUFDaEMsd0JBQU0sS0FBSyxHQUFPLElBQ2QsQ0FDUCxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDeEIsY0FBSyxTQUFTLEVBQUMsMEdBQTBHLFlBQ3RILE1BQU0sQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUN0RCxDQUNQLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxRQUFRLElBQ1AsR0FBRyxFQUFFLFdBQVcsRUFDaEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQ3pCLFFBQVEsRUFBRSxFQUFFLEVBQ1osVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQ2pDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDdEIsY0FBSyxTQUFTLEVBQUMsUUFBUSxZQUNyQixLQUFDLFFBQVEsSUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFJLEdBQzlCLENBQ1AsRUFDRCxTQUFTLEVBQUMsZ0JBQWdCLEdBQzFCLENBQ0gsR0FDRyxJQUNGLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZpcnR1b3NvLCB0eXBlIFZpcnR1b3NvSGFuZGxlIH0gZnJvbSAncmVhY3QtdmlydHVvc28nO1xuaW1wb3J0IHsgc2VyaWFsaXplRm9yQ2xpcGJvYXJkIH0gZnJvbSAnLi9zaWRlYmFyL2NvcHlhYmxlLWRhdGEtYmxvY2snO1xuaW1wb3J0IHsgU3RyZWFtVmlld2VyU2tlbGV0b24gfSBmcm9tICcuL3N0cmVhbS12aWV3ZXItc2tlbGV0b24nO1xuaW1wb3J0IHsgQ29weUJ1dHRvbiB9IGZyb20gJy4vdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvY29weS1idXR0b24nO1xuaW1wb3J0IHsgRGF0YUluc3BlY3RvciB9IGZyb20gJy4vdWkvZGF0YS1pbnNwZWN0b3InO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1DaHVuayB7XG4gIGlkOiBudW1iZXI7XG4gIHZhbHVlOiB1bmtub3duO1xufVxuXG50eXBlIENodW5rID0gU3RyZWFtQ2h1bms7XG5cbmludGVyZmFjZSBTdHJlYW1WaWV3ZXJQcm9wcyB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIGNodW5rczogQ2h1bmtbXTtcbiAgaXNMaXZlOiBib29sZWFuO1xuICBlcnJvcj86IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUcnVlIHdoaWxlIHRoZSBpbml0aWFsIHN0cmVhbSBjb25uZWN0aW9uIGlzIGJlaW5nIGVzdGFibGlzaGVkICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBzY3JvbGxzIG5lYXIgdGhlIHJlbmRlcmVkIGVuZC4gKi9cbiAgb25TY3JvbGxFbmQ/OiAoKSA9PiB2b2lkO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIENodW5rIHJvdyDigJQgbWVtb2l6ZWQgdG8gcHJldmVudCByZW1vdW50cyBkdXJpbmcgcG9sbGluZ1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IENodW5rUm93ID0gUmVhY3QubWVtbyhmdW5jdGlvbiBDaHVua1Jvdyh7IGNodW5rIH06IHsgY2h1bms6IENodW5rIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLXN0YXJ0IGdhcC0xIGJvcmRlci1iIGJvcmRlci1ncmF5LWFscGhhLTQwMCBweC0zIHB5LTJcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBmbGV4LTFcIj5cbiAgICAgICAge3R5cGVvZiBjaHVuay52YWx1ZSA9PT0gJ3N0cmluZycgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3JkcyB0ZXh0LWxhYmVsLTEyIGZvbnQtbW9ubyB0ZXh0LWdyYXktMTAwMFwiPlxuICAgICAgICAgICAge2NodW5rLnZhbHVlfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8RGF0YUluc3BlY3RvciBkYXRhPXtjaHVuay52YWx1ZX0gZXhwYW5kTGV2ZWw9ezF9IC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxDb3B5QnV0dG9uXG4gICAgICAgIGNvcHlUZXh0PXtzZXJpYWxpemVGb3JDbGlwYm9hcmQoY2h1bmsudmFsdWUpfVxuICAgICAgICBhcmlhTGFiZWw9XCJDb3B5IGNodW5rXCJcbiAgICAgICAgY2xhc3NOYW1lPVwic2hyaW5rLTAgLW1yLTEgWyY+ZGl2XTpoLTQgWyY+ZGl2XTp3LTQgWyZfc3ZnXTpoLTQgWyZfc3ZnXTp3LTRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIE1haW4gY29tcG9uZW50XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBTdHJlYW1WaWV3ZXIgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgcmVhbC10aW1lIHN0cmVhbSBkYXRhLlxuICogRWFjaCBjaHVuayBpcyByZW5kZXJlZCB3aXRoIERhdGFJbnNwZWN0b3IgZm9yIHByb3BlciBkaXNwbGF5XG4gKiBvZiBjb21wbGV4IHR5cGVzIChNYXAsIFNldCwgRGF0ZSwgY3VzdG9tIGNsYXNzZXMsIGV0Yy4pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gU3RyZWFtVmlld2VyKHtcbiAgc3RyZWFtSWQ6IF9zdHJlYW1JZCxcbiAgY2h1bmtzLFxuICBpc0xpdmUsXG4gIGVycm9yLFxuICBpc0xvYWRpbmcsXG4gIG9uU2Nyb2xsRW5kLFxufTogU3RyZWFtVmlld2VyUHJvcHMpIHtcbiAgY29uc3QgdmlydHVvc29SZWYgPSB1c2VSZWY8VmlydHVvc29IYW5kbGU+KG51bGwpO1xuICBjb25zdCBwcmV2Q2h1bmtDb3VudFJlZiA9IHVzZVJlZigwKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaHVua3MubGVuZ3RoID4gcHJldkNodW5rQ291bnRSZWYuY3VycmVudCAmJiBjaHVua3MubGVuZ3RoID4gMCkge1xuICAgICAgdmlydHVvc29SZWYuY3VycmVudD8uc2Nyb2xsVG9JbmRleCh7XG4gICAgICAgIGluZGV4OiBjaHVua3MubGVuZ3RoIC0gMSxcbiAgICAgICAgYWxpZ246ICdlbmQnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHByZXZDaHVua0NvdW50UmVmLmN1cnJlbnQgPSBjaHVua3MubGVuZ3RoO1xuICB9LCBbY2h1bmtzLmxlbmd0aF0pO1xuXG4gIGlmIChpc0xvYWRpbmcgJiYgY2h1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiA8U3RyZWFtVmlld2VyU2tlbGV0b24gLz47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgdy1mdWxsIGZsZXgtY29sIG92ZXJmbG93LWhpZGRlbiBiZy1iYWNrZ3JvdW5kLTEwMFwiPlxuICAgICAgey8qIFN0YXR1cyBoZWFkZXIgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMCBtaW4taC0xMCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBib3JkZXItYiBib3JkZXItZ3JheS1hbHBoYS00MDAgcHgtM1wiPlxuICAgICAgICB7aXNMaXZlICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWJsb2NrIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLWdyZWVuLTYwMFwiIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JlZW4tNzAwXCI+TGl2ZTwvc3Bhbj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQ29udGVudCAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLTBcIj5cbiAgICAgICAge2Vycm9yID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLXJlZC00MDAgYmctcmVkLTEwMCBweC0zIHB5LTIgdGV4dC1sYWJlbC0xMiB0ZXh0LXJlZC05MDBcIj5cbiAgICAgICAgICAgIDxkaXY+RXJyb3IgcmVhZGluZyBzdHJlYW06PC9kaXY+XG4gICAgICAgICAgICA8ZGl2PntlcnJvcn08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IGNodW5rcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTAgaXRlbXMtY2VudGVyIGJvcmRlci1iIGJvcmRlci1ncmF5LWFscGhhLTQwMCBiZy1iYWNrZ3JvdW5kLTIwMCBweC0zIHRleHQtbGFiZWwtMTIgdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICAgICAge2lzTGl2ZSA/ICdXYWl0aW5nIGZvciBzdHJlYW0gZGF0YS4uLicgOiAnU3RyZWFtIGlzIGVtcHR5J31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8VmlydHVvc29cbiAgICAgICAgICAgIHJlZj17dmlydHVvc29SZWZ9XG4gICAgICAgICAgICB0b3RhbENvdW50PXtjaHVua3MubGVuZ3RofVxuICAgICAgICAgICAgb3ZlcnNjYW49ezEwfVxuICAgICAgICAgICAgZW5kUmVhY2hlZD17KCkgPT4gb25TY3JvbGxFbmQ/LigpfVxuICAgICAgICAgICAgaXRlbUNvbnRlbnQ9eyhpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxDaHVua1JvdyBjaHVuaz17Y2h1bmtzW2luZGV4XX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibWluLWgtMCBmbGV4LTFcIlxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLXZpZXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3N0cmVhbS12aWV3ZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDakQsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBd0JwRCw2RUFBNkU7QUFDN0UseURBQXlEO0FBQ3pELDZFQUE2RTtBQUU3RSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsUUFBUSxDQUFDLEVBQUUsS0FBSyxFQUFvQjtJQUN2RSxPQUFPLENBQ0wsZUFBSyxTQUFTLEVBQUMsd0VBQXdFLGFBQ3JGLGNBQUssU0FBUyxFQUFDLGdCQUFnQixZQUM1QixPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUNqQyxlQUFNLFNBQVMsRUFBQyx3RUFBd0UsWUFDckYsS0FBSyxDQUFDLEtBQUssR0FDUCxDQUNSLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxhQUFhLElBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBSSxDQUNyRCxHQUNHLEVBQ04sS0FBQyxVQUFVLElBQ1QsUUFBUSxFQUFFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDNUMsU0FBUyxFQUFDLFlBQVksRUFDdEIsU0FBUyxFQUFDLGdFQUFnRSxHQUMxRSxJQUNFLENBQ1AsQ0FBQztBQUNKLENBQUMsQ0FBQyxDQUFDO0FBRUgsNkVBQTZFO0FBQzdFLGlCQUFpQjtBQUNqQiw2RUFBNkU7QUFFN0U7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsRUFDM0IsUUFBUSxFQUFFLFNBQVMsRUFDbkIsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsR0FDTztJQUNsQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXBDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkUsV0FBVyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUM7Z0JBQ2pDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQ3hCLEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGlCQUFpQixDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXBCLElBQUksU0FBUyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsT0FBTyxLQUFDLG9CQUFvQixLQUFHLENBQUM7SUFDbEMsQ0FBQztJQUVELE9BQU8sQ0FDTCxlQUFLLFNBQVMsRUFBQywrREFBK0QsYUFFNUUsY0FBSyxTQUFTLEVBQUMsNkVBQTZFLFlBQ3pGLE1BQU0sSUFBSSxDQUNULDhCQUNFLGVBQU0sU0FBUyxFQUFDLGdEQUFnRCxHQUFHLEVBQ25FLGVBQU0sU0FBUyxFQUFDLDhCQUE4QixxQkFBWSxJQUN6RCxDQUNKLEdBQ0csRUFHTixjQUFLLFNBQVMsRUFBQyxnQkFBZ0IsWUFDNUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUNQLGVBQUssU0FBUyxFQUFDLHlFQUF5RSxhQUN0RixrREFBZ0MsRUFDaEMsd0JBQU0sS0FBSyxHQUFPLElBQ2QsQ0FDUCxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDeEIsY0FBSyxTQUFTLEVBQUMsMEdBQTBHLFlBQ3RILE1BQU0sQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixHQUN0RCxDQUNQLENBQUMsQ0FBQyxDQUFDLENBQ0YsS0FBQyxRQUFRLElBQ1AsR0FBRyxFQUFFLFdBQVcsRUFDaEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQ3pCLFFBQVEsRUFBRSxFQUFFLEVBQ1osVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQ2pDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDdEIsY0FBSyxTQUFTLEVBQUMsUUFBUSxZQUNyQixLQUFDLFFBQVEsSUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFJLEdBQzlCLENBQ1AsRUFDRCxTQUFTLEVBQUMsZ0JBQWdCLEdBQzFCLENBQ0gsR0FDRyxJQUNGLENBQ1AsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFZpcnR1b3NvLCB0eXBlIFZpcnR1b3NvSGFuZGxlIH0gZnJvbSAncmVhY3QtdmlydHVvc28nO1xuaW1wb3J0IHsgc2VyaWFsaXplRm9yQ2xpcGJvYXJkIH0gZnJvbSAnLi9zaWRlYmFyL2NvcHlhYmxlLWRhdGEtYmxvY2snO1xuaW1wb3J0IHsgU3RyZWFtVmlld2VyU2tlbGV0b24gfSBmcm9tICcuL3N0cmVhbS12aWV3ZXItc2tlbGV0b24nO1xuaW1wb3J0IHsgQ29weUJ1dHRvbiB9IGZyb20gJy4vdHJhY2Utdmlld2VyL2NvbXBvbmVudHMvY29weS1idXR0b24nO1xuaW1wb3J0IHsgRGF0YUluc3BlY3RvciB9IGZyb20gJy4vdWkvZGF0YS1pbnNwZWN0b3InO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1DaHVuayB7XG4gIGlkOiBudW1iZXI7XG4gIHZhbHVlOiB1bmtub3duO1xufVxuXG50eXBlIENodW5rID0gU3RyZWFtQ2h1bms7XG5cbmludGVyZmFjZSBTdHJlYW1WaWV3ZXJQcm9wcyB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIGNodW5rczogQ2h1bmtbXTtcbiAgaXNMaXZlOiBib29sZWFuO1xuICBlcnJvcj86IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUcnVlIHdoaWxlIHRoZSBpbml0aWFsIHN0cmVhbSBjb25uZWN0aW9uIGlzIGJlaW5nIGVzdGFibGlzaGVkICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBzY3JvbGxzIG5lYXIgdGhlIHJlbmRlcmVkIGVuZC4gKi9cbiAgb25TY3JvbGxFbmQ/OiAoKSA9PiB2b2lkO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIENodW5rIHJvdzogbWVtb2l6ZWQgdG8gcHJldmVudCByZW1vdW50cyBkdXJpbmcgcG9sbGluZ1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmNvbnN0IENodW5rUm93ID0gUmVhY3QubWVtbyhmdW5jdGlvbiBDaHVua1Jvdyh7IGNodW5rIH06IHsgY2h1bms6IENodW5rIH0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggdy1mdWxsIGl0ZW1zLXN0YXJ0IGdhcC0xIGJvcmRlci1iIGJvcmRlci1ncmF5LWFscGhhLTQwMCBweC0zIHB5LTJcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMCBmbGV4LTFcIj5cbiAgICAgICAge3R5cGVvZiBjaHVuay52YWx1ZSA9PT0gJ3N0cmluZycgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3JkcyB0ZXh0LWxhYmVsLTEyIGZvbnQtbW9ubyB0ZXh0LWdyYXktMTAwMFwiPlxuICAgICAgICAgICAge2NodW5rLnZhbHVlfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8RGF0YUluc3BlY3RvciBkYXRhPXtjaHVuay52YWx1ZX0gZXhwYW5kTGV2ZWw9ezF9IC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxDb3B5QnV0dG9uXG4gICAgICAgIGNvcHlUZXh0PXtzZXJpYWxpemVGb3JDbGlwYm9hcmQoY2h1bmsudmFsdWUpfVxuICAgICAgICBhcmlhTGFiZWw9XCJDb3B5IGNodW5rXCJcbiAgICAgICAgY2xhc3NOYW1lPVwic2hyaW5rLTAgLW1yLTEgWyY+ZGl2XTpoLTQgWyY+ZGl2XTp3LTQgWyZfc3ZnXTpoLTQgWyZfc3ZnXTp3LTRcIlxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIE1haW4gY29tcG9uZW50XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBTdHJlYW1WaWV3ZXIgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgcmVhbC10aW1lIHN0cmVhbSBkYXRhLlxuICogRWFjaCBjaHVuayBpcyByZW5kZXJlZCB3aXRoIERhdGFJbnNwZWN0b3IgZm9yIHByb3BlciBkaXNwbGF5XG4gKiBvZiBjb21wbGV4IHR5cGVzIChNYXAsIFNldCwgRGF0ZSwgY3VzdG9tIGNsYXNzZXMsIGV0Yy4pLlxuICovXG5leHBvcnQgZnVuY3Rpb24gU3RyZWFtVmlld2VyKHtcbiAgc3RyZWFtSWQ6IF9zdHJlYW1JZCxcbiAgY2h1bmtzLFxuICBpc0xpdmUsXG4gIGVycm9yLFxuICBpc0xvYWRpbmcsXG4gIG9uU2Nyb2xsRW5kLFxufTogU3RyZWFtVmlld2VyUHJvcHMpIHtcbiAgY29uc3QgdmlydHVvc29SZWYgPSB1c2VSZWY8VmlydHVvc29IYW5kbGU+KG51bGwpO1xuICBjb25zdCBwcmV2Q2h1bmtDb3VudFJlZiA9IHVzZVJlZigwKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaHVua3MubGVuZ3RoID4gcHJldkNodW5rQ291bnRSZWYuY3VycmVudCAmJiBjaHVua3MubGVuZ3RoID4gMCkge1xuICAgICAgdmlydHVvc29SZWYuY3VycmVudD8uc2Nyb2xsVG9JbmRleCh7XG4gICAgICAgIGluZGV4OiBjaHVua3MubGVuZ3RoIC0gMSxcbiAgICAgICAgYWxpZ246ICdlbmQnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHByZXZDaHVua0NvdW50UmVmLmN1cnJlbnQgPSBjaHVua3MubGVuZ3RoO1xuICB9LCBbY2h1bmtzLmxlbmd0aF0pO1xuXG4gIGlmIChpc0xvYWRpbmcgJiYgY2h1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiA8U3RyZWFtVmlld2VyU2tlbGV0b24gLz47XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBoLWZ1bGwgdy1mdWxsIGZsZXgtY29sIG92ZXJmbG93LWhpZGRlbiBiZy1iYWNrZ3JvdW5kLTEwMFwiPlxuICAgICAgey8qIFN0YXR1cyBoZWFkZXIgKi99XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaC0xMCBtaW4taC0xMCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSBib3JkZXItYiBib3JkZXItZ3JheS1hbHBoYS00MDAgcHgtM1wiPlxuICAgICAgICB7aXNMaXZlICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW5saW5lLWJsb2NrIGgtMiB3LTIgcm91bmRlZC1mdWxsIGJnLWdyZWVuLTYwMFwiIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JlZW4tNzAwXCI+TGl2ZTwvc3Bhbj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQ29udGVudCAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG1pbi1oLTBcIj5cbiAgICAgICAge2Vycm9yID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYm9yZGVyLWIgYm9yZGVyLXJlZC00MDAgYmctcmVkLTEwMCBweC0zIHB5LTIgdGV4dC1sYWJlbC0xMiB0ZXh0LXJlZC05MDBcIj5cbiAgICAgICAgICAgIDxkaXY+RXJyb3IgcmVhZGluZyBzdHJlYW06PC9kaXY+XG4gICAgICAgICAgICA8ZGl2PntlcnJvcn08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IGNodW5rcy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtMTAgaXRlbXMtY2VudGVyIGJvcmRlci1iIGJvcmRlci1ncmF5LWFscGhhLTQwMCBiZy1iYWNrZ3JvdW5kLTIwMCBweC0zIHRleHQtbGFiZWwtMTIgdGV4dC1ncmF5LTkwMFwiPlxuICAgICAgICAgICAge2lzTGl2ZSA/ICdXYWl0aW5nIGZvciBzdHJlYW0gZGF0YS4uLicgOiAnU3RyZWFtIGlzIGVtcHR5J31cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8VmlydHVvc29cbiAgICAgICAgICAgIHJlZj17dmlydHVvc29SZWZ9XG4gICAgICAgICAgICB0b3RhbENvdW50PXtjaHVua3MubGVuZ3RofVxuICAgICAgICAgICAgb3ZlcnNjYW49ezEwfVxuICAgICAgICAgICAgZW5kUmVhY2hlZD17KCkgPT4gb25TY3JvbGxFbmQ/LigpfVxuICAgICAgICAgICAgaXRlbUNvbnRlbnQ9eyhpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxDaHVua1JvdyBjaHVuaz17Y2h1bmtzW2luZGV4XX0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgY2xhc3NOYW1lPVwibWluLWgtMCBmbGV4LTFcIlxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==