@workflow/web-shared 5.0.0-beta.41 → 5.0.0-beta.42

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 (86) hide show
  1. package/dist/components/event-list-view.d.ts +10 -2
  2. package/dist/components/event-list-view.d.ts.map +1 -1
  3. package/dist/components/event-list-view.js +52 -26
  4. package/dist/components/sidebar/attributes-block.d.ts.map +1 -1
  5. package/dist/components/sidebar/attributes-block.js +3 -6
  6. package/dist/components/sidebar/conversation-view.d.ts.map +1 -1
  7. package/dist/components/sidebar/conversation-view.js +19 -36
  8. package/dist/components/sidebar/entity-detail-panel.d.ts +5 -0
  9. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  10. package/dist/components/sidebar/entity-detail-panel.js +2 -2
  11. package/dist/components/sidebar/events-list.d.ts +7 -1
  12. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  13. package/dist/components/sidebar/events-list.js +6 -5
  14. package/dist/components/sidebar/resolve-hook-modal.d.ts.map +1 -1
  15. package/dist/components/sidebar/resolve-hook-modal.js +4 -145
  16. package/dist/components/sidebar/sidebar-data-context.d.ts +6 -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-skeleton.js +6 -6
  20. package/dist/components/stream-viewer.js +2 -2
  21. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -1
  22. package/dist/components/trace-viewer/components/detail-panel.js +2 -1
  23. package/dist/components/trace-viewer/components/timeline.d.ts.map +1 -1
  24. package/dist/components/trace-viewer/components/timeline.js +13 -22
  25. package/dist/components/trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -1
  26. package/dist/components/trace-viewer/components/trace-viewer-skeleton.js +58 -18
  27. package/dist/components/trace-viewer/icons.js +5 -5
  28. package/dist/components/trace-viewer/utils.d.ts +6 -10
  29. package/dist/components/trace-viewer/utils.d.ts.map +1 -1
  30. package/dist/components/trace-viewer/utils.js +14 -24
  31. package/dist/components/trace-viewer.d.ts.map +1 -1
  32. package/dist/components/trace-viewer.js +12 -4
  33. package/dist/components/ui/context-card.d.ts.map +1 -1
  34. package/dist/components/ui/context-card.js +9 -21
  35. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  36. package/dist/components/ui/data-inspector.js +8 -35
  37. package/dist/components/ui/duplicate-event-tooltip.d.ts +15 -0
  38. package/dist/components/ui/duplicate-event-tooltip.d.ts.map +1 -0
  39. package/dist/components/ui/duplicate-event-tooltip.js +19 -0
  40. package/dist/components/ui/menu-dropdown.d.ts.map +1 -1
  41. package/dist/components/ui/menu-dropdown.js +3 -19
  42. package/dist/components/ui/skeleton.js +2 -2
  43. package/dist/components/ui/spinner.d.ts.map +1 -1
  44. package/dist/components/ui/spinner.js +5 -11
  45. package/dist/index.d.ts +1 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +2 -1
  48. package/dist/lib/duplicate-events.d.ts +27 -0
  49. package/dist/lib/duplicate-events.d.ts.map +1 -0
  50. package/dist/lib/duplicate-events.js +166 -0
  51. package/dist/lib/event-materialization.d.ts +15 -2
  52. package/dist/lib/event-materialization.d.ts.map +1 -1
  53. package/dist/lib/event-materialization.js +19 -4
  54. package/dist/lib/trace-builder.d.ts +16 -1
  55. package/dist/lib/trace-builder.d.ts.map +1 -1
  56. package/dist/lib/trace-builder.js +23 -4
  57. package/package.json +4 -4
  58. package/src/components/event-list-view.tsx +70 -32
  59. package/src/components/sidebar/attributes-block.tsx +4 -11
  60. package/src/components/sidebar/conversation-view.tsx +25 -79
  61. package/src/components/sidebar/entity-detail-panel.tsx +6 -0
  62. package/src/components/sidebar/events-list.tsx +21 -3
  63. package/src/components/sidebar/resolve-hook-modal.tsx +23 -186
  64. package/src/components/sidebar/sidebar-data-context.tsx +6 -0
  65. package/src/components/stream-viewer-skeleton.tsx +5 -5
  66. package/src/components/stream-viewer.tsx +1 -1
  67. package/src/components/trace-viewer/components/detail-panel.tsx +1 -0
  68. package/src/components/trace-viewer/components/timeline.tsx +21 -39
  69. package/src/components/trace-viewer/components/trace-viewer-skeleton.tsx +63 -35
  70. package/src/components/trace-viewer/icons.tsx +4 -4
  71. package/src/components/trace-viewer/utils.test.ts +5 -7
  72. package/src/components/trace-viewer/utils.ts +17 -31
  73. package/src/components/trace-viewer.tsx +15 -3
  74. package/src/components/ui/context-card.tsx +16 -26
  75. package/src/components/ui/data-inspector.tsx +20 -65
  76. package/src/components/ui/duplicate-event-tooltip.tsx +44 -0
  77. package/src/components/ui/menu-dropdown.tsx +8 -22
  78. package/src/components/ui/skeleton.tsx +2 -2
  79. package/src/components/ui/spinner.tsx +4 -8
  80. package/src/index.ts +4 -0
  81. package/src/lib/duplicate-events.test.ts +339 -0
  82. package/src/lib/duplicate-events.ts +188 -0
  83. package/src/lib/event-materialization.test.ts +117 -0
  84. package/src/lib/event-materialization.ts +23 -3
  85. package/src/lib/trace-builder.test.ts +74 -0
  86. package/src/lib/trace-builder.ts +30 -3
@@ -13,6 +13,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
13
13
  */
14
14
  import { Lock } from 'lucide-react';
15
15
  import { createContext, useContext, useId, useMemo, useRef, useState, } from 'react';
16
+ import { cn } from '../../lib/cn';
16
17
  import { ENCRYPTED_DISPLAY_NAME } from '../../lib/hydration';
17
18
  import { formatArrayBufferViewForDisplay, } from '../../lib/stream-display';
18
19
  import { Button } from './button';
@@ -98,35 +99,18 @@ function EncryptedInlineLabel() {
98
99
  ctx.onDecrypt();
99
100
  }, children: [ctx.isDecrypting ? (_jsx(Spinner, { size: 10 })) : (_jsx(Lock, { className: "h-3 w-3" })), _jsx("span", { children: "Decrypt" })] }));
100
101
  }
101
- return (_jsxs("span", { style: { color: 'var(--ds-gray-600)', fontStyle: 'italic' }, children: [_jsx(Lock, { className: "h-3 w-3", style: {
102
- display: 'inline',
103
- verticalAlign: 'middle',
104
- marginRight: '3px',
105
- marginTop: '-1px',
106
- } }), "Encrypted"] }));
102
+ return (_jsxs("span", { className: "text-gray-600 italic", children: [_jsx(Lock, { className: "-mt-px mr-[3px] inline h-3 w-3 align-middle" }), "Encrypted"] }));
107
103
  }
108
104
  function StreamRefInline({ streamRef }) {
109
105
  const onStreamClick = useContext(StreamClickContext);
110
- const [hovered, setHovered] = useState(false);
111
- return (_jsxs("button", { type: "button", className: "inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-mono cursor-pointer underline decoration-transparent transition-colors", style: {
112
- backgroundColor: hovered ? 'var(--ds-blue-200)' : 'var(--ds-blue-100)',
113
- color: 'var(--ds-blue-900)',
114
- border: '1px solid var(--ds-blue-300)',
115
- }, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), onClick: (e) => {
106
+ return (_jsxs("button", { type: "button", className: "inline-flex cursor-pointer items-center gap-1 rounded border border-blue-300 bg-blue-100 px-1.5 py-0.5 font-mono text-[10px] text-blue-900 underline decoration-transparent transition-colors hover:bg-blue-200", onClick: (e) => {
116
107
  e.stopPropagation();
117
108
  onStreamClick?.(streamRef.streamId);
118
109
  }, title: `View stream: ${streamRef.streamId}`, children: [_jsx("span", { children: "\uD83D\uDCE1" }), _jsx("span", { children: streamRef.streamId })] }));
119
110
  }
120
111
  function RunRefInline({ runRef }) {
121
112
  const onRunClick = useContext(RunClickContext);
122
- const [hovered, setHovered] = useState(false);
123
- return (_jsx("button", { type: "button", className: "inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-mono cursor-pointer underline decoration-transparent transition-colors", style: {
124
- backgroundColor: hovered
125
- ? 'var(--ds-purple-200)'
126
- : 'var(--ds-purple-100)',
127
- color: 'var(--ds-purple-900)',
128
- border: '1px solid var(--ds-purple-300)',
129
- }, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), onClick: (e) => {
113
+ return (_jsx("button", { type: "button", className: "inline-flex cursor-pointer items-center gap-1 rounded border border-purple-300 bg-purple-100 px-1.5 py-0.5 font-mono text-[10px] text-purple-900 underline decoration-transparent transition-colors hover:bg-purple-200", onClick: (e) => {
130
114
  e.stopPropagation();
131
115
  onRunClick?.(runRef.runId);
132
116
  }, title: `View run: ${runRef.runId}`, children: _jsx("span", { children: runRef.runId }) }));
@@ -134,28 +118,17 @@ function RunRefInline({ runRef }) {
134
118
  function DecodedBytesChunk({ decodedText, source, }) {
135
119
  const [selectedView, setSelectedView] = useState('decoded');
136
120
  const parsed = parseChunkData(decodedText);
137
- return (_jsxs("div", { className: "min-w-0", children: [selectedView === 'decoded' ? (_jsx("div", { className: "min-w-0", children: typeof parsed === 'string' ? (_jsx("span", { className: "whitespace-pre-wrap break-words", style: { color: 'var(--ds-gray-1000)' }, children: deserializeChunkText(parsed) })) : (_jsx(DataInspector, { data: parsed, expandLevel: 1 })) })) : (_jsx(DecodedBytesInspector, { decodedText: decodedText, source: source })), _jsx("div", { className: "mt-2 flex", children: _jsxs("div", { className: "inline-flex overflow-hidden rounded border", style: { borderColor: 'var(--ds-gray-400)' }, title: `${source.type} decoded as ${source.encoding.toUpperCase()} text. Switch to Bytes to inspect the summarized raw value.`, children: [_jsx("button", { type: "button", className: "h-5 px-1.5 text-[10px] font-medium", style: {
138
- backgroundColor: selectedView === 'decoded'
139
- ? 'var(--ds-gray-200)'
140
- : 'var(--ds-gray-100)',
141
- color: 'var(--ds-gray-900)',
142
- }, onClick: () => setSelectedView('decoded'), "aria-pressed": selectedView === 'decoded', "aria-label": "Show decoded text", children: "Decoded" }), _jsx("button", { type: "button", className: "h-5 border-l px-1.5 text-[10px] font-medium", style: {
143
- borderColor: 'var(--ds-gray-400)',
144
- backgroundColor: selectedView === 'bytes'
145
- ? 'var(--ds-gray-200)'
146
- : 'var(--ds-gray-100)',
147
- color: 'var(--ds-gray-900)',
148
- }, onClick: () => setSelectedView('bytes'), "aria-pressed": selectedView === 'bytes', "aria-label": "Show raw bytes summary", children: "Bytes" })] }) })] }));
121
+ return (_jsxs("div", { className: "min-w-0", children: [selectedView === 'decoded' ? (_jsx("div", { className: "min-w-0", children: typeof parsed === 'string' ? (_jsx("span", { className: "whitespace-pre-wrap break-words text-gray-1000", children: deserializeChunkText(parsed) })) : (_jsx(DataInspector, { data: parsed, expandLevel: 1 })) })) : (_jsx(DecodedBytesInspector, { decodedText: decodedText, source: source })), _jsx("div", { className: "mt-2 flex", children: _jsxs("div", { className: "inline-flex overflow-hidden rounded border border-gray-400", title: `${source.type} decoded as ${source.encoding.toUpperCase()} text. Switch to Bytes to inspect the summarized raw value.`, children: [_jsx("button", { type: "button", className: cn('h-5 px-1.5 font-medium text-[10px] text-gray-900', selectedView === 'decoded' ? 'bg-gray-200' : 'bg-gray-100'), onClick: () => setSelectedView('decoded'), "aria-pressed": selectedView === 'decoded', "aria-label": "Show decoded text", children: "Decoded" }), _jsx("button", { type: "button", className: cn('h-5 border-gray-400 border-l px-1.5 font-medium text-[10px] text-gray-900', selectedView === 'bytes' ? 'bg-gray-200' : 'bg-gray-100'), onClick: () => setSelectedView('bytes'), "aria-pressed": selectedView === 'bytes', "aria-label": "Show raw bytes summary", children: "Bytes" })] }) })] }));
149
122
  }
150
123
  function DecodedBytesInspector({ decodedText, source, }) {
151
124
  const [expanded, setExpanded] = useState(false);
152
- return (_jsxs("div", { className: "font-mono", children: [_jsxs("button", { type: "button", className: "flex max-w-full items-start gap-1 text-left", style: { color: 'var(--ds-gray-1000)' }, onClick: () => setExpanded((value) => !value), title: `${source.type} decoded as ${source.encoding.toUpperCase()} text`, children: [_jsx("span", { className: "select-none", style: { color: 'var(--ds-gray-700)' }, children: expanded ? '▼' : '▶' }), _jsx("span", { className: "min-w-0 break-words", children: source.rawSummary })] }), expanded && (_jsxs("div", { className: "mt-1 pl-5", children: [_jsx("span", { style: { color: 'var(--ds-gray-700)' }, children: "decoded: " }), _jsx("span", { className: "whitespace-pre-wrap break-words", style: { color: 'var(--ds-green-900)' }, children: JSON.stringify(decodedText) })] }))] }));
125
+ return (_jsxs("div", { className: "font-mono", children: [_jsxs("button", { type: "button", className: "flex max-w-full items-start gap-1 text-left text-gray-1000", onClick: () => setExpanded((value) => !value), title: `${source.type} decoded as ${source.encoding.toUpperCase()} text`, children: [_jsx("span", { className: "select-none text-gray-700", children: expanded ? '▼' : '▶' }), _jsx("span", { className: "min-w-0 break-words", children: source.rawSummary })] }), expanded && (_jsxs("div", { className: "mt-1 pl-5", children: [_jsx("span", { className: "text-gray-700", children: "decoded: " }), _jsx("span", { className: "whitespace-pre-wrap break-words text-green-900", children: JSON.stringify(decodedText) })] }))] }));
153
126
  }
154
127
  function BytesDisplayValue({ display }) {
155
128
  if (display.decodedFrom) {
156
129
  return (_jsx(DecodedBytesChunk, { decodedText: display.text, source: display.decodedFrom }));
157
130
  }
158
- return (_jsx("span", { className: "whitespace-pre-wrap break-words", style: { color: 'var(--ds-gray-1000)' }, children: display.text }));
131
+ return (_jsx("span", { className: "whitespace-pre-wrap break-words text-gray-1000", children: display.text }));
159
132
  }
160
133
  /** Field names are rendered unquoted (empty string shows as `""`). */
161
134
  function formatField(field) {
@@ -521,4 +494,4 @@ function isDeepEqual(a, b, seen = new WeakMap()) {
521
494
  }
522
495
  return true;
523
496
  }
524
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbnNwZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kYXRhLWluc3BlY3Rvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxhQUFhLEVBS2IsVUFBVSxFQUNWLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFHTCwrQkFBK0IsR0FDaEMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLDhFQUE4RTtBQUM5RSw4Q0FBOEM7QUFDOUMsd0RBQXdEO0FBQ3hELDhFQUE4RTtBQUU5RSxNQUFNLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQztBQUNsRCxNQUFNLHVCQUF1QixHQUFHLGlDQUFpQyxDQUFDO0FBQ2xFLE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDO0FBQzVDLE1BQU0sa0JBQWtCLEdBQUcsNEJBQTRCLENBQUM7QUF5QnhELFNBQVMsb0JBQW9CLENBQUMsSUFBWTtJQUN4QyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELE9B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LENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuLyoqXG4gKiBSZXVzYWJsZSBkYXRhIGluc3BlY3RvciBmb3IgdGhlIG8xMXkgVUkuXG4gKlxuICogUmVuZGVycyBKU09OIGFzIGEgY29sbGFwc2libGUgdHJlZTogYnJhY2tldCBub3RhdGlvbiAoYHsg4oCmIH1gIC8gYFsg4oCmIF1gKSxcbiAqIGNvbG9yZWQga2V5cywgdHlwZWQgdmFsdWUgY29sb3JzLCBg4pa4YC9g4pa+YCBkaXNjbG9zdXJlIGljb25zLCBhbmQgYSBgLi4uYFxuICogY29sbGFwc2VkIGluZGljYXRvci5cbiAqXG4gKiBPbiB0b3Agb2YgcGxhaW4gSlNPTiBpdCBoYW5kbGVzIHRoZSB3b3JrZmxvdy1zcGVjaWZpYyB2YWx1ZSB0eXBlczogU3RyZWFtUmVmIC9cbiAqIFJ1blJlZiBiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBkZWNvZGVkIGJ5dGUgc3RyZWFtcywgRGF0ZXMsIGFuZCBuYW1lZFxuICogY2xhc3MgaW5zdGFuY2VzLlxuICovXG5cbmltcG9ydCB7IExvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdHlwZSBLZXlib2FyZEV2ZW50IGFzIFJlYWN0S2V5Ym9hcmRFdmVudCxcbiAgdHlwZSBNb3VzZUV2ZW50IGFzIFJlYWN0TW91c2VFdmVudCxcbiAgdHlwZSBSZWFjdE5vZGUsXG4gIHR5cGUgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VJZCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRU5DUllQVEVEX0RJU1BMQVlfTkFNRSB9IGZyb20gJy4uLy4uL2xpYi9oeWRyYXRpb24nO1xuaW1wb3J0IHtcbiAgdHlwZSBEZWNvZGVkU3RyZWFtQ2h1bmtTb3VyY2UsXG4gIHR5cGUgRm9ybWF0dGVkU3RyZWFtQ2h1bmtEaXNwbGF5LFxuICBmb3JtYXRBcnJheUJ1ZmZlclZpZXdGb3JEaXNwbGF5LFxufSBmcm9tICcuLi8uLi9saWIvc3RyZWFtLWRpc3BsYXknO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9idXR0b24nO1xuaW1wb3J0IHsgQ0xTLCBKU09OX1ZJRVdfU1RZTEVTIH0gZnJvbSAnLi9kYXRhLWluc3BlY3Rvci5zdHlsZXMnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vc3Bpbm5lcic7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtUmVmIC8gQ2xhc3NJbnN0YW5jZVJlZiB0eXBlIGRldGVjdGlvblxuLy8gKGlubGluZSB0byBhdm9pZCBjaXJjdWxhciBkZXBzIHdpdGggaHlkcmF0aW9uIG1vZHVsZSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBTVFJFQU1fUkVGX1RZUEUgPSAnX193b3JrZmxvd19zdHJlYW1fcmVmX18nO1xuY29uc3QgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUgPSAnX193b3JrZmxvd19jbGFzc19pbnN0YW5jZV9yZWZfXyc7XG5jb25zdCBSVU5fUkVGX1RZUEUgPSAnX193b3JrZmxvd19ydW5fcmVmX18nO1xuY29uc3QgQllURVNfRElTUExBWV9UWVBFID0gJ19fd29ya2Zsb3dfYnl0ZXNfZGlzcGxheV9fJztcblxuaW50ZXJmYWNlIFN0cmVhbVJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFNUUkVBTV9SRUZfVFlQRTtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJ1blJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFJVTl9SRUZfVFlQRTtcbiAgcnVuSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJ5dGVzRGlzcGxheSB7XG4gIF9fdHlwZTogdHlwZW9mIEJZVEVTX0RJU1BMQVlfVFlQRTtcbiAgdGV4dDogc3RyaW5nO1xuICBkZWNvZGVkRnJvbT86IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn1cblxuaW50ZXJmYWNlIENsYXNzSW5zdGFuY2VSZWYge1xuICBfX3R5cGU6IHR5cGVvZiBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRTtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGNsYXNzSWQ6IHN0cmluZztcbiAgZGF0YTogdW5rbm93bjtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVDaHVua1RleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgMik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2h1bmtEYXRhKHRleHQ6IHN0cmluZyk6IHVua25vd24ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmVhbVJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFN0cmVhbVJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIC8vIENoZWNrIGJvdGggZW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgX190eXBlIChvcGFxdWUgcmVmcyB1c2Ugbm9uLWVudW1lcmFibGUpXG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gU1RSRUFNX1JFRl9UWVBFO1xufVxuXG5mdW5jdGlvbiBpc1J1blJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1blJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gUlVOX1JFRl9UWVBFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCeXRlc0Rpc3BsYXkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBCeXRlc0Rpc3BsYXkge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwgJ19fdHlwZScpO1xuICByZXR1cm4gZGVzYz8udmFsdWUgPT09IEJZVEVTX0RJU1BMQVlfVFlQRTtcbn1cblxuZnVuY3Rpb24gaXNDbGFzc0luc3RhbmNlUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ2xhc3NJbnN0YW5jZVJlZiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgJ19fdHlwZScgaW4gdmFsdWUgJiZcbiAgICAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLl9fdHlwZSA9PT0gQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEVcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAodmFsdWUgYXMgeyBjb25zdHJ1Y3Rvcj86IHsgbmFtZT86IHN0cmluZyB9IH0pLmNvbnN0cnVjdG9yPy5uYW1lID09PVxuICAgICAgRU5DUllQVEVEX0RJU1BMQVlfTkFNRVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0cmVhbSBjbGljayBjb250ZXh0IChwYXNzZWQgdGhyb3VnaCBmcm9tIHRoZSBwYW5lbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRleHQgZm9yIHBhc3Npbmcgc3RyZWFtIGNsaWNrIGhhbmRsZXJzIGRvd24gdG8gRGF0YUluc3BlY3RvciBpbnN0YW5jZXMuXG4gKiBFeHBvcnRlZCBzbyB0aGF0IHBhcmVudCBjb21wb25lbnRzIChlLmcuLCBBdHRyaWJ1dGVQYW5lbCkgY2FuIHByb3ZpZGUgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBTdHJlYW1DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8qKlxuICogQ29udGV4dCBmb3IgcGFzc2luZyBhIGRlY3J5cHQgaGFuZGxlciBkb3duIHRvIERhdGFJbnNwZWN0b3IgaW5zdGFuY2VzLlxuICogV2hlbiBwcm92aWRlZCwgZW5jcnlwdGVkIG1hcmtlcnMgYmVjb21lIGNsaWNrYWJsZSBidXR0b25zIHRoYXQgdHJpZ2dlciBkZWNyeXB0aW9uLlxuICovXG5leHBvcnQgdHlwZSBEZWNyeXB0Q2xpY2tDb250ZXh0VmFsdWUgPSB7XG4gIG9uRGVjcnlwdDogKCkgPT4gdm9pZDtcbiAgaXNEZWNyeXB0aW5nOiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWNyeXB0Q2xpY2tDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgRGVjcnlwdENsaWNrQ29udGV4dFZhbHVlIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBSdW5DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV29ya2Zsb3ctc3BlY2lmaWMgdmFsdWUgcmVuZGVyZXJzIChiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBieXRlIHN0cmVhbXMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gRW5jcnlwdGVkSW5saW5lTGFiZWwoKSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG4gIGlmIChjdHgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICBjbGFzc05hbWU9XCJhbGlnbi1iYXNlbGluZSBnYXAteC0xXCJcbiAgICAgICAgZGlzYWJsZWQ9e2N0eC5pc0RlY3J5cHRpbmd9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjdHgub25EZWNyeXB0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtjdHguaXNEZWNyeXB0aW5nID8gKFxuICAgICAgICAgIDxTcGlubmVyIHNpemU9ezEwfSAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxMb2NrIGNsYXNzTmFtZT1cImgtMyB3LTNcIiAvPlxuICAgICAgICApfVxuICAgICAgICA8c3Bhbj5EZWNyeXB0PC9zcGFuPlxuICAgICAgPC9CdXR0b24+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS02MDApJywgZm9udFN0eWxlOiAnaXRhbGljJyB9fT5cbiAgICAgIDxMb2NrXG4gICAgICAgIGNsYXNzTmFtZT1cImgtMyB3LTNcIlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUnLFxuICAgICAgICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgICAgICAgIG1hcmdpblJpZ2h0OiAnM3B4JyxcbiAgICAgICAgICBtYXJnaW5Ub3A6ICctMXB4JyxcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgICBFbmNyeXB0ZWRcbiAgICA8L3NwYW4+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFN0cmVhbVJlZklubGluZSh7IHN0cmVhbVJlZiB9OiB7IHN0cmVhbVJlZjogU3RyZWFtUmVmIH0pIHtcbiAgY29uc3Qgb25TdHJlYW1DbGljayA9IHVzZUNvbnRleHQoU3RyZWFtQ2xpY2tDb250ZXh0KTtcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxMHB4XSBmb250LW1vbm8gY3Vyc29yLXBvaW50ZXIgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlcmVkID8gJ3ZhcigtLWRzLWJsdWUtMjAwKScgOiAndmFyKC0tZHMtYmx1ZS0xMDApJyxcbiAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ibHVlLTkwMCknLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgdmFyKC0tZHMtYmx1ZS0zMDApJyxcbiAgICAgIH19XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEhvdmVyZWQoZmFsc2UpfVxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25TdHJlYW1DbGljaz8uKHN0cmVhbVJlZi5zdHJlYW1JZCk7XG4gICAgICB9fVxuICAgICAgdGl0bGU9e2BWaWV3IHN0cmVhbTogJHtzdHJlYW1SZWYuc3RyZWFtSWR9YH1cbiAgICA+XG4gICAgICA8c3Bhbj7wn5OhPC9zcGFuPlxuICAgICAgPHNwYW4+e3N0cmVhbVJlZi5zdHJlYW1JZH08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFJ1blJlZklubGluZSh7IHJ1blJlZiB9OiB7IHJ1blJlZjogUnVuUmVmIH0pIHtcbiAgY29uc3Qgb25SdW5DbGljayA9IHVzZUNvbnRleHQoUnVuQ2xpY2tDb250ZXh0KTtcbiAgY29uc3QgW2hvdmVyZWQsIHNldEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHB4LTEuNSBweS0wLjUgcm91bmRlZCB0ZXh0LVsxMHB4XSBmb250LW1vbm8gY3Vyc29yLXBvaW50ZXIgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBob3ZlcmVkXG4gICAgICAgICAgPyAndmFyKC0tZHMtcHVycGxlLTIwMCknXG4gICAgICAgICAgOiAndmFyKC0tZHMtcHVycGxlLTEwMCknLFxuICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLXB1cnBsZS05MDApJyxcbiAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHZhcigtLWRzLXB1cnBsZS0zMDApJyxcbiAgICAgIH19XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEhvdmVyZWQodHJ1ZSl9XG4gICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEhvdmVyZWQoZmFsc2UpfVxuICAgICAgb25DbGljaz17KGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgb25SdW5DbGljaz8uKHJ1blJlZi5ydW5JZCk7XG4gICAgICB9fVxuICAgICAgdGl0bGU9e2BWaWV3IHJ1bjogJHtydW5SZWYucnVuSWR9YH1cbiAgICA+XG4gICAgICA8c3Bhbj57cnVuUmVmLnJ1bklkfTwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRGVjb2RlZEJ5dGVzQ2h1bmsoe1xuICBkZWNvZGVkVGV4dCxcbiAgc291cmNlLFxufToge1xuICBkZWNvZGVkVGV4dDogc3RyaW5nO1xuICBzb3VyY2U6IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkVmlldywgc2V0U2VsZWN0ZWRWaWV3XSA9IHVzZVN0YXRlPCdkZWNvZGVkJyB8ICdieXRlcyc+KFxuICAgICdkZWNvZGVkJ1xuICApO1xuICBjb25zdCBwYXJzZWQgPSBwYXJzZUNodW5rRGF0YShkZWNvZGVkVGV4dCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj5cbiAgICAgIHtzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJyA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtaW4tdy0wXCI+XG4gICAgICAgICAge3R5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnID8gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3Jkc1wiXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rlc2VyaWFsaXplQ2h1bmtUZXh0KHBhcnNlZCl9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxEYXRhSW5zcGVjdG9yIGRhdGE9e3BhcnNlZH0gZXhwYW5kTGV2ZWw9ezF9IC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8RGVjb2RlZEJ5dGVzSW5zcGVjdG9yIGRlY29kZWRUZXh0PXtkZWNvZGVkVGV4dH0gc291cmNlPXtzb3VyY2V9IC8+XG4gICAgICApfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC0yIGZsZXhcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1mbGV4IG92ZXJmbG93LWhpZGRlbiByb3VuZGVkIGJvcmRlclwiXG4gICAgICAgICAgc3R5bGU9e3sgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTQwMCknIH19XG4gICAgICAgICAgdGl0bGU9e2Ake3NvdXJjZS50eXBlfSBkZWNvZGVkIGFzICR7c291cmNlLmVuY29kaW5nLnRvVXBwZXJDYXNlKCl9IHRleHQuIFN3aXRjaCB0byBCeXRlcyB0byBpbnNwZWN0IHRoZSBzdW1tYXJpemVkIHJhdyB2YWx1ZS5gfVxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJoLTUgcHgtMS41IHRleHQtWzEwcHhdIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJ1xuICAgICAgICAgICAgICAgICAgPyAndmFyKC0tZHMtZ3JheS0yMDApJ1xuICAgICAgICAgICAgICAgICAgOiAndmFyKC0tZHMtZ3JheS0xMDApJyxcbiAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTkwMCknLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFNlbGVjdGVkVmlldygnZGVjb2RlZCcpfVxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPXtzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJ31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTaG93IGRlY29kZWQgdGV4dFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgRGVjb2RlZFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC01IGJvcmRlci1sIHB4LTEuNSB0ZXh0LVsxMHB4XSBmb250LW1lZGl1bVwiXG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogJ3ZhcigtLWRzLWdyYXktNDAwKScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjpcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZpZXcgPT09ICdieXRlcydcbiAgICAgICAgICAgICAgICAgID8gJ3ZhcigtLWRzLWdyYXktMjAwKSdcbiAgICAgICAgICAgICAgICAgIDogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWxlY3RlZFZpZXcoJ2J5dGVzJyl9XG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9e3NlbGVjdGVkVmlldyA9PT0gJ2J5dGVzJ31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTaG93IHJhdyBieXRlcyBzdW1tYXJ5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBCeXRlc1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBEZWNvZGVkQnl0ZXNJbnNwZWN0b3Ioe1xuICBkZWNvZGVkVGV4dCxcbiAgc291cmNlLFxufToge1xuICBkZWNvZGVkVGV4dDogc3RyaW5nO1xuICBzb3VyY2U6IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn0pIHtcbiAgY29uc3QgW2V4cGFuZGVkLCBzZXRFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZvbnQtbW9ub1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBtYXgtdy1mdWxsIGl0ZW1zLXN0YXJ0IGdhcC0xIHRleHQtbGVmdFwiXG4gICAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RXhwYW5kZWQoKHZhbHVlKSA9PiAhdmFsdWUpfVxuICAgICAgICB0aXRsZT17YCR7c291cmNlLnR5cGV9IGRlY29kZWQgYXMgJHtzb3VyY2UuZW5jb2RpbmcudG9VcHBlckNhc2UoKX0gdGV4dGB9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNlbGVjdC1ub25lXCIgc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19PlxuICAgICAgICAgIHtleHBhbmRlZCA/ICfilrwnIDogJ+KWtid9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWluLXctMCBicmVhay13b3Jkc1wiPntzb3VyY2UucmF3U3VtbWFyeX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIHtleHBhbmRlZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBwbC01XCI+XG4gICAgICAgICAgPHNwYW4gc3R5bGU9e3sgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknIH19PmRlY29kZWQ6IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3Jkc1wiXG4gICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyZWVuLTkwMCknIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge0pTT04uc3RyaW5naWZ5KGRlY29kZWRUZXh0KX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQnl0ZXNEaXNwbGF5VmFsdWUoeyBkaXNwbGF5IH06IHsgZGlzcGxheTogQnl0ZXNEaXNwbGF5IH0pIHtcbiAgaWYgKGRpc3BsYXkuZGVjb2RlZEZyb20pIHtcbiAgICByZXR1cm4gKFxuICAgICAgPERlY29kZWRCeXRlc0NodW5rXG4gICAgICAgIGRlY29kZWRUZXh0PXtkaXNwbGF5LnRleHR9XG4gICAgICAgIHNvdXJjZT17ZGlzcGxheS5kZWNvZGVkRnJvbX1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzXCJcbiAgICAgIHN0eWxlPXt7IGNvbG9yOiAndmFyKC0tZHMtZ3JheS0xMDAwKScgfX1cbiAgICA+XG4gICAgICB7ZGlzcGxheS50ZXh0fVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUcmVlIHJlbmRlcmVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBFbnRyeSA9IFtmaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkLCB2YWx1ZTogdW5rbm93bl07XG5cbmludGVyZmFjZSBOb2RlQ29udGV4dCB7XG4gIGxldmVsOiBudW1iZXI7XG4gIHNob3VsZEV4cGFuZDogKGxldmVsOiBudW1iZXIpID0+IGJvb2xlYW47XG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPjtcbn1cblxuLyoqIEZpZWxkIG5hbWVzIGFyZSByZW5kZXJlZCB1bnF1b3RlZCAoZW1wdHkgc3RyaW5nIHNob3dzIGFzIGBcIlwiYCkuICovXG5mdW5jdGlvbiBmb3JtYXRGaWVsZChmaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZpZWxkID09PSAnJyA/ICdcIlwiJyA6IGZpZWxkO1xufVxuXG4vKipcbiAqIERlc2NyaWJlIGFuIG9iamVjdC9hcnJheS9tYXAvc2V0IGFzIGFuIGV4cGFuZGFibGUgY29udGFpbmVyLiBSZXR1cm5zIG51bGwgZm9yXG4gKiB2YWx1ZXMgdGhhdCBzaG91bGQgcmVuZGVyIGFzIGEgcHJpbWl0aXZlLiBgcHJlZml4YCBjYXJyaWVzIGEgY2xhc3MgbmFtZSBzaG93blxuICogYmVmb3JlIHRoZSBvcGVuaW5nIGJyYWNrZXQgKE1hcC9TZXQgYW5kIG5hbWVkIGNsYXNzIGluc3RhbmNlcykuXG4gKi9cbmZ1bmN0aW9uIGRlc2NyaWJlQ29udGFpbmVyKFxuICB2YWx1ZTogdW5rbm93blxuKTogeyBlbnRyaWVzOiBFbnRyeVtdOyBvcGVuOiBzdHJpbmc7IGNsb3NlOiBzdHJpbmc7IHByZWZpeD86IHN0cmluZyB9IHwgbnVsbCB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiB2YWx1ZS5tYXAoKGl0ZW0pID0+IFt1bmRlZmluZWQsIGl0ZW1dIGFzIEVudHJ5KSxcbiAgICAgIG9wZW46ICdbJyxcbiAgICAgIGNsb3NlOiAnXScsXG4gICAgfTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh2YWx1ZS5lbnRyaWVzKCksIChba2V5LCB2YWxdKSA9PiBbXG4gICAgICAgIFN0cmluZyhrZXkpLFxuICAgICAgICB2YWwsXG4gICAgICBdKSBhcyBFbnRyeVtdLFxuICAgICAgb3BlbjogJ3snLFxuICAgICAgY2xvc2U6ICd9JyxcbiAgICAgIHByZWZpeDogJ01hcCcsXG4gICAgfTtcbiAgfVxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogQXJyYXkuZnJvbSh2YWx1ZS52YWx1ZXMoKSwgKGl0ZW0pID0+IFt1bmRlZmluZWQsIGl0ZW1dIGFzIEVudHJ5KSxcbiAgICAgIG9wZW46ICdbJyxcbiAgICAgIGNsb3NlOiAnXScsXG4gICAgICBwcmVmaXg6ICdTZXQnLFxuICAgIH07XG4gIH1cbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBuYW1lID0gKHZhbHVlIGFzIHsgY29uc3RydWN0b3I/OiB7IG5hbWU/OiBzdHJpbmcgfSB9KS5jb25zdHJ1Y3RvclxuICAgICAgPy5uYW1lO1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyaWVzOiBPYmplY3QuZW50cmllcyh2YWx1ZSkgYXMgRW50cnlbXSxcbiAgICAgIG9wZW46ICd7JyxcbiAgICAgIGNsb3NlOiAnfScsXG4gICAgICBwcmVmaXg6IG5hbWUgJiYgbmFtZSAhPT0gJ09iamVjdCcgPyBuYW1lIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlUHJpbWl0aXZlKHZhbHVlOiB1bmtub3duKTogeyB0ZXh0OiBzdHJpbmc7IGNsczogc3RyaW5nIH0ge1xuICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiB7IHRleHQ6ICdudWxsJywgY2xzOiBDTFMubnVsbCB9O1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHsgdGV4dDogJ3VuZGVmaW5lZCcsIGNsczogQ0xTLnVuZGVmaW5lZCB9O1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgIHJldHVybiB7IHRleHQ6IGBcIiR7U3RyaW5nKHZhbHVlKX1cImAsIGNsczogQ0xTLnN0cmluZyB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5ib29sZWFuIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdmFsdWUgaW5zdGFuY2VvZiBOdW1iZXIpIHtcbiAgICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5udW1iZXIgfTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiB7IHRleHQ6IGAke3ZhbHVlLnRvU3RyaW5nKCl9bmAsIGNsczogQ0xTLm51bWJlciB9O1xuICB9XG4gIHJldHVybiB7IHRleHQ6IFN0cmluZyh2YWx1ZSksIGNsczogQ0xTLnB1bmN0dWF0aW9uIH07XG59XG5cbmZ1bmN0aW9uIExhYmVsKHsgZmllbGQsIGNsaWNrYWJsZSB9OiB7IGZpZWxkPzogc3RyaW5nOyBjbGlja2FibGU/OiBib29sZWFuIH0pIHtcbiAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT17Y2xpY2thYmxlID8gQ0xTLmNsaWNrYWJsZUxhYmVsIDogQ0xTLmxhYmVsfT5cbiAgICAgIHtgJHtmb3JtYXRGaWVsZChmaWVsZCl9OmB9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5mdW5jdGlvbiBDb21tYSh7IGlzTGFzdCB9OiB7IGlzTGFzdDogYm9vbGVhbiB9KSB7XG4gIGlmIChpc0xhc3QpIHJldHVybiBudWxsO1xuICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259Piw8L3NwYW4+O1xufVxuXG4vKiogQSBub24tZXhwYW5kYWJsZSByb3c6IGBmaWVsZDogPHZhbHVlPmAuICovXG5mdW5jdGlvbiBMZWFmUm93KHtcbiAgZmllbGQsXG4gIGlzTGFzdCxcbiAgY2hpbGRyZW4sXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e0NMUy5jaGlsZH0gcm9sZT1cInRyZWVpdGVtXCIgdGFiSW5kZXg9ey0xfT5cbiAgICAgIDxMYWJlbCBmaWVsZD17ZmllbGR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIFByaW1pdGl2ZVZhbHVlKHsgZmllbGQsIHZhbHVlLCBpc0xhc3QgfTogTm9kZVByb3BzKSB7XG4gIGNvbnN0IHsgdGV4dCwgY2xzIH0gPSBkZXNjcmliZVByaW1pdGl2ZSh2YWx1ZSk7XG4gIHJldHVybiAoXG4gICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nsc30+e3RleHR9PC9zcGFuPlxuICAgIDwvTGVhZlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRW1wdHlDb250YWluZXIoe1xuICBmaWVsZCxcbiAgcHJlZml4LFxuICBvcGVuLFxuICBjbG9zZSxcbiAgaXNMYXN0LFxufToge1xuICBmaWVsZD86IHN0cmluZztcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIGlzTGFzdDogYm9vbGVhbjtcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Q0xTLmNoaWxkfSByb2xlPVwidHJlZWl0ZW1cIiB0YWJJbmRleD17LTF9PlxuICAgICAgPExhYmVsIGZpZWxkPXtmaWVsZH0gLz5cbiAgICAgIHtwcmVmaXggPyA8c3BhbiBjbGFzc05hbWU9e0NMUy5jbGFzc05hbWV9PntwcmVmaXh9PC9zcGFuPiA6IG51bGx9XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5wdW5jdHVhdGlvbn0+e29wZW59PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntjbG9zZX08L3NwYW4+XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmZ1bmN0aW9uIGZvY3VzRXhwYW5kZXIoXG4gIGJ1dHRvbjogSFRNTEVsZW1lbnQsXG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPlxuKSB7XG4gIGNvbnN0IHByZXZpb3VzID0gb3V0ZXJSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG4gICAgJ1tkYXRhLWpzb24tZXhwYW5kZXJdW3RhYmluZGV4PVwiMFwiXSdcbiAgKTtcbiAgaWYgKHByZXZpb3VzKSBwcmV2aW91cy50YWJJbmRleCA9IC0xO1xuICBidXR0b24udGFiSW5kZXggPSAwO1xuICBidXR0b24uZm9jdXMoKTtcbn1cblxuZnVuY3Rpb24gbW92ZUV4cGFuZGVyRm9jdXMoXG4gIG91dGVyUmVmOiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPixcbiAgZGlyZWN0aW9uOiAxIHwgLTFcbikge1xuICBjb25zdCByb290ID0gb3V0ZXJSZWYuY3VycmVudDtcbiAgaWYgKCFyb290KSByZXR1cm47XG4gIGNvbnN0IGJ1dHRvbnMgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdbZGF0YS1qc29uLWV4cGFuZGVyXScpO1xuICBsZXQgY3VycmVudCA9IC0xO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYnV0dG9uc1tpXS50YWJJbmRleCA9PT0gMCkge1xuICAgICAgY3VycmVudCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQgPCAwKSByZXR1cm47XG4gIGNvbnN0IG5leHQgPSAoY3VycmVudCArIGRpcmVjdGlvbiArIGJ1dHRvbnMubGVuZ3RoKSAlIGJ1dHRvbnMubGVuZ3RoO1xuICBidXR0b25zW2N1cnJlbnRdLnRhYkluZGV4ID0gLTE7XG4gIGJ1dHRvbnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICBidXR0b25zW25leHRdLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIEV4cGFuZGFibGVDb250YWluZXIoe1xuICBmaWVsZCxcbiAgZW50cmllcyxcbiAgb3BlbixcbiAgY2xvc2UsXG4gIHByZWZpeCxcbiAgY3R4LFxuICBpc0xhc3QsXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBlbnRyaWVzOiBFbnRyeVtdO1xuICBvcGVuOiBzdHJpbmc7XG4gIGNsb3NlOiBzdHJpbmc7XG4gIHByZWZpeD86IHN0cmluZztcbiAgY3R4OiBOb2RlQ29udGV4dDtcbiAgaXNMYXN0OiBib29sZWFuO1xufSkge1xuICBjb25zdCB7IGxldmVsLCBzaG91bGRFeHBhbmQsIG91dGVyUmVmIH0gPSBjdHg7XG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gdXNlU3RhdGUoKCkgPT4gc2hvdWxkRXhwYW5kKGxldmVsKSk7XG4gIGNvbnN0IHJvd1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGNvbnRlbnRzSWQgPSB1c2VJZCgpO1xuXG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICA8RW1wdHlDb250YWluZXJcbiAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICBwcmVmaXg9e3ByZWZpeH1cbiAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgY2xvc2U9e2Nsb3NlfVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHRvZ2dsZSA9ICgpID0+IHtcbiAgICBzZXRFeHBhbmRlZCgodmFsdWUpID0+ICF2YWx1ZSk7XG4gICAgaWYgKHJvd1JlZi5jdXJyZW50KSBmb2N1c0V4cGFuZGVyKHJvd1JlZi5jdXJyZW50LCBvdXRlclJlZik7XG4gIH07XG5cbiAgLy8gVG9nZ2xlIG9ubHkgZm9yIGNsaWNrcyB0aGF0IGxhbmQgb24gdGhpcyByb3cgaXRzZWxmOyBjbGlja3MgYnViYmxpbmcgdXAgb3V0XG4gIC8vIG9mIGEgbmVzdGVkIHRyZWVpdGVtIGFyZSBoYW5kbGVkIGJ5IHRoYXQgZGVzY2VuZGFudCdzIG93biByb3cuXG4gIGNvbnN0IG9uQ2xpY2sgPSAoZXZlbnQ6IFJlYWN0TW91c2VFdmVudCkgPT4ge1xuICAgIGlmIChcbiAgICAgIChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1tyb2xlPVwidHJlZWl0ZW1cIl0nKSAhPT1cbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdG9nZ2xlKCk7XG4gIH07XG5cbiAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBSZWFjdEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRFeHBhbmRlZCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVFeHBhbmRlckZvY3VzKG91dGVyUmVmLCAtMSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUV4cGFuZGVyRm9jdXMob3V0ZXJSZWYsIDEpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBsYXN0SW5kZXggPSBlbnRyaWVzLmxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIChcbiAgICAvLyBUaGUgdHJlZWl0ZW0gcm93IGlzIHRoZSBmb2N1c2FibGUsIGtleWJvYXJkLW9wZXJhYmxlIGNvbnRyb2wgKHJvdmluZ1xuICAgIC8vIHRhYmluZGV4ICsgYXJyb3cga2V5cyk7IHRoZSBkaXNjbG9zdXJlIG1hcmtlciBiZWxvdyBpcyBwdXJlbHkgZGVjb3JhdGl2ZS5cbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e0NMUy5jaGlsZH1cbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICBhcmlhLWV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgIGFyaWEtY29udHJvbHM9e2V4cGFuZGVkID8gY29udGVudHNJZCA6IHVuZGVmaW5lZH1cbiAgICAgIGRhdGEtanNvbi1leHBhbmRlclxuICAgICAgcmVmPXtyb3dSZWZ9XG4gICAgICB0YWJJbmRleD17bGV2ZWwgPT09IDAgPyAwIDogLTF9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtleHBhbmRlZCA/IENMUy5jb2xsYXBzZUljb24gOiBDTFMuZXhwYW5kSWNvbn1cbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIC8+XG4gICAgICB7ZmllbGQgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsaWNrYWJsZUxhYmVsfT57YCR7Zm9ybWF0RmllbGQoZmllbGQpfTpgfTwvc3Bhbj5cbiAgICAgICl9XG4gICAgICB7cHJlZml4ID8gPHNwYW4gY2xhc3NOYW1lPXtDTFMuY2xhc3NOYW1lfT57cHJlZml4fTwvc3Bhbj4gOiBudWxsfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntvcGVufTwvc3Bhbj5cbiAgICAgIHtleHBhbmRlZCA/IChcbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiBBUklBIHRyZWUgZ3JvdXAgaXMgdGhlIGNvcnJlY3Qgcm9sZSBoZXJlXG4gICAgICAgIDx1bCBpZD17Y29udGVudHNJZH0gY2xhc3NOYW1lPXtDTFMuY2hpbGRGaWVsZHN9IHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgIHtlbnRyaWVzLm1hcCgoW2NoaWxkRmllbGQsIGNoaWxkVmFsdWVdLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPERhdGFSZW5kZXJcbiAgICAgICAgICAgICAga2V5PXtjaGlsZEZpZWxkID8/IGluZGV4fVxuICAgICAgICAgICAgICBmaWVsZD17Y2hpbGRGaWVsZH1cbiAgICAgICAgICAgICAgdmFsdWU9e2NoaWxkVmFsdWV9XG4gICAgICAgICAgICAgIGlzTGFzdD17aW5kZXggPT09IGxhc3RJbmRleH1cbiAgICAgICAgICAgICAgY3R4PXt7IC4uLmN0eCwgbGV2ZWw6IGxldmVsICsgMSB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC91bD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNvbGxhcHNlZENvbnRlbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICApfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntjbG9zZX08L3NwYW4+XG4gICAgICA8Q29tbWEgaXNMYXN0PXtpc0xhc3R9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmludGVyZmFjZSBOb2RlUHJvcHMge1xuICBmaWVsZD86IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgY3R4OiBOb2RlQ29udGV4dDtcbn1cblxuZnVuY3Rpb24gRGF0YVJlbmRlcih7IGZpZWxkLCB2YWx1ZSwgaXNMYXN0LCBjdHggfTogTm9kZVByb3BzKSB7XG4gIGlmIChpc0J5dGVzRGlzcGxheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxCeXRlc0Rpc3BsYXlWYWx1ZSBkaXNwbGF5PXt2YWx1ZX0gLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxFbmNyeXB0ZWRJbmxpbmVMYWJlbCAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzU3RyZWFtUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPFN0cmVhbVJlZklubGluZSBzdHJlYW1SZWY9e3ZhbHVlfSAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKGlzUnVuUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPFJ1blJlZklubGluZSBydW5SZWY9e3ZhbHVlfSAvPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMuZGF0ZX0+e3ZhbHVlLnRvSVNPU3RyaW5nKCl9PC9zcGFuPlxuICAgICAgPC9MZWFmUm93PlxuICAgICk7XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5yZWdleHB9Pnt2YWx1ZS50b1N0cmluZygpfTwvc3Bhbj5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc0NsYXNzSW5zdGFuY2VSZWYodmFsdWUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxDbGFzc0luc3RhbmNlTm9kZVxuICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgIGluc3RhbmNlPXt2YWx1ZX1cbiAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gZGVzY3JpYmVDb250YWluZXIodmFsdWUpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHBhbmRhYmxlQ29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZW50cmllcz17Y29udGFpbmVyLmVudHJpZXN9XG4gICAgICAgIG9wZW49e2NvbnRhaW5lci5vcGVufVxuICAgICAgICBjbG9zZT17Y29udGFpbmVyLmNsb3NlfVxuICAgICAgICBwcmVmaXg9e2NvbnRhaW5lci5wcmVmaXh9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFByaW1pdGl2ZVZhbHVlIGZpZWxkPXtmaWVsZH0gdmFsdWU9e3ZhbHVlfSBpc0xhc3Q9e2lzTGFzdH0gY3R4PXtjdHh9IC8+XG4gICk7XG59XG5cbmZ1bmN0aW9uIENsYXNzSW5zdGFuY2VOb2RlKHtcbiAgZmllbGQsXG4gIGluc3RhbmNlLFxuICBpc0xhc3QsXG4gIGN0eCxcbn06IHtcbiAgZmllbGQ/OiBzdHJpbmc7XG4gIGluc3RhbmNlOiBDbGFzc0luc3RhbmNlUmVmO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGN0eDogTm9kZUNvbnRleHQ7XG59KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9IGRlc2NyaWJlQ29udGFpbmVyKGluc3RhbmNlLmRhdGEpO1xuICBpZiAoY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxFeHBhbmRhYmxlQ29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgZW50cmllcz17Y29udGFpbmVyLmVudHJpZXN9XG4gICAgICAgIG9wZW49e2NvbnRhaW5lci5vcGVufVxuICAgICAgICBjbG9zZT17Y29udGFpbmVyLmNsb3NlfVxuICAgICAgICBwcmVmaXg9e2luc3RhbmNlLmNsYXNzTmFtZX1cbiAgICAgICAgY3R4PXtjdHh9XG4gICAgICAgIGlzTGFzdD17aXNMYXN0fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIGNvbnN0IHsgdGV4dCwgY2xzIH0gPSBkZXNjcmliZVByaW1pdGl2ZShpbnN0YW5jZS5kYXRhKTtcbiAgcmV0dXJuIChcbiAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsYXNzTmFtZX0+e2luc3RhbmNlLmNsYXNzTmFtZX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2Nsc30+e3RleHR9PC9zcGFuPlxuICAgIDwvTGVhZlJvdz5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSnNvblRyZWUoe1xuICBkYXRhLFxuICBuYW1lLFxuICBleHBhbmRMZXZlbCxcbn06IHtcbiAgZGF0YTogdW5rbm93bjtcbiAgbmFtZT86IHN0cmluZztcbiAgZXhwYW5kTGV2ZWw6IG51bWJlcjtcbn0pIHtcbiAgY29uc3Qgb3V0ZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBzaG91bGRFeHBhbmQgPSB1c2VNZW1vKFxuICAgICgpID0+IChsZXZlbDogbnVtYmVyKSA9PiBsZXZlbCA8IGV4cGFuZExldmVsLFxuICAgIFtleHBhbmRMZXZlbF1cbiAgKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e291dGVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtDTFMuY29udGFpbmVyfVxuICAgICAgcm9sZT1cInRyZWVcIlxuICAgICAgYXJpYS1sYWJlbD1cIkpTT04gdmlld1wiXG4gICAgPlxuICAgICAgPERhdGFSZW5kZXJcbiAgICAgICAgZmllbGQ9e25hbWV9XG4gICAgICAgIHZhbHVlPXtkYXRhfVxuICAgICAgICBpc0xhc3RcbiAgICAgICAgY3R4PXt7IGxldmVsOiAwLCBzaG91bGRFeHBhbmQsIG91dGVyUmVmIH19XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlZiAvIHR5cGVkLWFycmF5IGNvbGxhcHNpbmcgKHByZXByb2Nlc3NpbmcgYmVmb3JlIHJlbmRlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENyZWF0ZSBhIG5vbi1leHBhbmRhYmxlIHdyYXBwZXIgdGhhdCBjYXJyaWVzIHJlZiBkYXRhIGFzIG5vbi1lbnVtZXJhYmxlXG4gKiBwcm9wZXJ0aWVzIHNvIHRoZSByZW5kZXJlciBjYW4gZGV0ZWN0IFN0cmVhbVJlZi9SdW5SZWYgd2l0aG91dCBleHBvc2luZ1xuICogdGhlaXIgaW50ZXJuYWxzIGFzIG9iamVjdCBmaWVsZHMuXG4gKi9cbmZ1bmN0aW9uIG1ha2VPcGFxdWVSZWYocmVmOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHVua25vd24ge1xuICBjb25zdCBvcGFxdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZWYpKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwga2V5LCB7IHZhbHVlLCBlbnVtZXJhYmxlOiBmYWxzZSB9KTtcbiAgfVxuICByZXR1cm4gb3BhcXVlO1xufVxuXG5mdW5jdGlvbiBtYWtlQnl0ZXNEaXNwbGF5KGRpc3BsYXk6IEZvcm1hdHRlZFN0cmVhbUNodW5rRGlzcGxheSk6IHVua25vd24ge1xuICBjb25zdCBvcGFxdWUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3BhcXVlLCAnX190eXBlJywge1xuICAgIHZhbHVlOiBCWVRFU19ESVNQTEFZX1RZUEUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gIH0pO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3BhcXVlLCAndGV4dCcsIHtcbiAgICB2YWx1ZTogZGlzcGxheS50ZXh0LFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwgJ2RlY29kZWRGcm9tJywge1xuICAgIHZhbHVlOiBkaXNwbGF5LmRlY29kZWRGcm9tLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgcmV0dXJuIG9wYXF1ZTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSB3YWxrIGRhdGEgYW5kIHJlcGxhY2UgUnVuUmVmL1N0cmVhbVJlZi90eXBlZCBhcnJheSBvYmplY3RzIHdpdGhcbiAqIG5vbi1leHBhbmRhYmxlIHZlcnNpb25zIHNvIHRoZSByZW5kZXJlciBkb2Vzbid0IHNob3cgdGhlaXIgaW50ZXJuYWxzLlxuICogT25seSByZWN1cnNlcyBpbnRvIHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyB0byBhdm9pZCBzdHJpcHBpbmcgY2xhc3NcbiAqIGluc3RhbmNlcyAoRGF0ZSwgRXJyb3IsIFVSTCwgSGVhZGVycywgZXRjLikgdGhhdCBoYXZlIHRoZWlyIG93biByZW5kZXJpbmcuXG4gKiBNYXAgYW5kIFNldCBjb250YWluZXJzIGFyZSBwcmVzZXJ2ZWQgd2hpbGUgdGhlaXIgY29udGVudHMgYXJlIHByZXBhcmVkIGZvclxuICogZGlzcGxheS5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGVzdGluZyB0aGUgdHlwZWQtYXJyYXkgZGV0ZWN0aW9uIHBhdGggdXNlZCBieSBoeWRyYXRlZFxuICogQUkgYWdlbnQgc3RyZWFtIGNodW5rcyAoZS5nLiBgeyBkZWx0YTogbmV3IFVpbnQ4QXJyYXkoLi4uKSB9YCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsYXBzZVJlZnMoZGF0YTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAoZGF0YSA9PT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHJldHVybiBkYXRhO1xuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpICYmICEoZGF0YSBpbnN0YW5jZW9mIERhdGFWaWV3KSkge1xuICAgIHJldHVybiBtYWtlQnl0ZXNEaXNwbGF5KGZvcm1hdEFycmF5QnVmZmVyVmlld0ZvckRpc3BsYXkoZGF0YSkpO1xuICB9XG4gIGlmIChpc1J1blJlZihkYXRhKSB8fCBpc1N0cmVhbVJlZihkYXRhKSlcbiAgICByZXR1cm4gbWFrZU9wYXF1ZVJlZihkYXRhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgcmV0dXJuIGRhdGEubWFwKGNvbGxhcHNlUmVmcyk7XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgcmV0dXJuIG5ldyBNYXAoXG4gICAgICBBcnJheS5mcm9tKGRhdGEuZW50cmllcygpLCAoW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgICAgIGNvbGxhcHNlUmVmcyhrZXkpLFxuICAgICAgICBjb2xsYXBzZVJlZnModmFsdWUpLFxuICAgICAgXSlcbiAgICApO1xuICB9XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoQXJyYXkuZnJvbShkYXRhLnZhbHVlcygpLCBjb2xsYXBzZVJlZnMpKTtcbiAgfVxuICAvLyBPbmx5IHJlY3Vyc2UgaW50byBwbGFpbiBvYmplY3RzIOKAlCBsZWF2ZSBjbGFzcyBpbnN0YW5jZXMgdW50b3VjaGVkXG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGRhdGEpO1xuICBpZiAocHJvdG8gIT09IE9iamVjdC5wcm90b3R5cGUgJiYgcHJvdG8gIT09IG51bGwpIHJldHVybiBkYXRhO1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgcmVzdWx0W2tleV0gPSBjb2xsYXBzZVJlZnModmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljIGNvbXBvbmVudFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUluc3BlY3RvclByb3BzIHtcbiAgLyoqIFRoZSBkYXRhIHRvIGluc3BlY3QgKi9cbiAgZGF0YTogdW5rbm93bjtcbiAgLyoqIExldmVscyBzdHJpY3RseSBiZWxvdyB0aGlzIG51bWJlciBhdXRvLWV4cGFuZCAoZGVmYXVsdDogMikgKi9cbiAgZXhwYW5kTGV2ZWw/OiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbCBuYW1lIGZvciB0aGUgcm9vdCBub2RlICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhbiBlbmNyeXB0ZWQgbWFya2VyIGlzIGNsaWNrZWQgKHRyaWdnZXJzIGRlY3J5cHRpb24pICovXG4gIG9uRGVjcnlwdD86ICgpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIGRlY3J5cHRpb24gaXMgY3VycmVudGx5IGluIHByb2dyZXNzICovXG4gIGlzRGVjcnlwdGluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEYXRhSW5zcGVjdG9yKHtcbiAgZGF0YSxcbiAgZXhwYW5kTGV2ZWwgPSAyLFxuICBuYW1lLFxuICBvblN0cmVhbUNsaWNrLFxuICBvblJ1bkNsaWNrLFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxufTogRGF0YUluc3BlY3RvclByb3BzKSB7XG4gIGNvbnN0IGNvbGxhcHNlZERhdGEgPSB1c2VNZW1vKCgpID0+IGNvbGxhcHNlUmVmcyhkYXRhKSwgW2RhdGFdKTtcbiAgY29uc3Qgc3RhYmxlRGF0YSA9IHVzZVN0YWJsZUluc3BlY3RvckRhdGEoY29sbGFwc2VkRGF0YSk7XG5cbiAgbGV0IGNvbnRlbnQ6IFJlYWN0Tm9kZSA9IChcbiAgICA8PlxuICAgICAgey8qIFJlYWN0IDE5IGhvaXN0cyAmIGRlZHVwZXMgdGhpcyA8c3R5bGU+IGJ5IGhyZWYsIHNvIGl0IGlzIGVtaXR0ZWQgb25jZVxuICAgICAgICAgIHJlZ2FyZGxlc3Mgb2YgaG93IG1hbnkgaW5zcGVjdG9ycyBhcmUgbW91bnRlZC4gKi99XG4gICAgICA8c3R5bGUgaHJlZj1cIndmLWpzb24tdmlld1wiIHByZWNlZGVuY2U9XCJkZWZhdWx0XCI+XG4gICAgICAgIHtKU09OX1ZJRVdfU1RZTEVTfVxuICAgICAgPC9zdHlsZT5cbiAgICAgIDxKc29uVHJlZSBkYXRhPXtzdGFibGVEYXRhfSBuYW1lPXtuYW1lfSBleHBhbmRMZXZlbD17ZXhwYW5kTGV2ZWx9IC8+XG4gICAgPC8+XG4gICk7XG5cbiAgaWYgKG9uU3RyZWFtQ2xpY2spIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPFN0cmVhbUNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25TdHJlYW1DbGlja30+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9TdHJlYW1DbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxuICBpZiAob25SdW5DbGljaykge1xuICAgIGNvbnRlbnQgPSAoXG4gICAgICA8UnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblJ1bkNsaWNrfT5cbiAgICAgICAge2NvbnRlbnR9XG4gICAgICA8L1J1bkNsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG4gIGlmIChvbkRlY3J5cHQpIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgb25EZWNyeXB0LCBpc0RlY3J5cHRpbmcgfX0+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9EZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZW5kZXIgc3RhYmlsaXphdGlvbiAoYXZvaWQgcmUtcmVuZGVycyB3aGVuIGRhdGEgaXMgZGVlcGx5IGVxdWFsKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHVzZVN0YWJsZUluc3BlY3RvckRhdGE8VD4obmV4dDogVCk6IFQge1xuICBjb25zdCBwcmV2aW91c1JlZiA9IHVzZVJlZjxUPihuZXh0KTtcbiAgaWYgKCFpc0RlZXBFcXVhbChwcmV2aW91c1JlZi5jdXJyZW50LCBuZXh0KSkge1xuICAgIHByZXZpb3VzUmVmLmN1cnJlbnQgPSBuZXh0O1xuICB9XG4gIHJldHVybiBwcmV2aW91c1JlZi5jdXJyZW50O1xufVxuXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVCeXRlc0Rpc3BsYXkoYTogQnl0ZXNEaXNwbGF5LCBiOiBCeXRlc0Rpc3BsYXkpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBhLnRleHQgPT09IGIudGV4dCAmJlxuICAgIGEuZGVjb2RlZEZyb20/LnR5cGUgPT09IGIuZGVjb2RlZEZyb20/LnR5cGUgJiZcbiAgICBhLmRlY29kZWRGcm9tPy5lbmNvZGluZyA9PT0gYi5kZWNvZGVkRnJvbT8uZW5jb2RpbmcgJiZcbiAgICBhLmRlY29kZWRGcm9tPy5yYXdTdW1tYXJ5ID09PSBiLmRlY29kZWRGcm9tPy5yYXdTdW1tYXJ5XG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzRGVlcEVxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24sIHNlZW4gPSBuZXcgV2Vha01hcCgpKTogYm9vbGVhbiB7XG4gIGlmIChPYmplY3QuaXMoYSwgYikpIHJldHVybiB0cnVlO1xuXG4gIGlmIChpc0J5dGVzRGlzcGxheShhKSB8fCBpc0J5dGVzRGlzcGxheShiKSkge1xuICAgIHJldHVybiBpc0J5dGVzRGlzcGxheShhKSAmJiBpc0J5dGVzRGlzcGxheShiKSAmJiBpc1NhbWVCeXRlc0Rpc3BsYXkoYSwgYik7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIERhdGUgJiYgYiBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xuICB9XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBSZWdFeHAgJiYgYiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBhLnNvdXJjZSA9PT0gYi5zb3VyY2UgJiYgYS5mbGFncyA9PT0gYi5mbGFncztcbiAgfVxuXG4gIGlmIChhIGluc3RhbmNlb2YgTWFwICYmIGIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBhLmVudHJpZXMoKSkge1xuICAgICAgaWYgKCFiLmhhcyhrZXkpIHx8ICFpc0RlZXBFcXVhbCh2YWx1ZSwgYi5nZXQoa2V5KSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIFNldCAmJiBiIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhLnZhbHVlcygpKSB7XG4gICAgICBpZiAoIWIuaGFzKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaXNPYmplY3RMaWtlKGEpIHx8ICFpc09iamVjdExpa2UoYikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoc2Vlbi5nZXQoYSkgPT09IGIpIHJldHVybiB0cnVlO1xuICBzZWVuLnNldChhLCBiKTtcblxuICBjb25zdCBhSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYSk7XG4gIGNvbnN0IGJJc0FycmF5ID0gQXJyYXkuaXNBcnJheShiKTtcbiAgaWYgKGFJc0FycmF5ICE9PSBiSXNBcnJheSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChhSXNBcnJheSAmJiBiSXNBcnJheSkge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICghaXNEZWVwRXF1YWwoYVtpXSwgYltpXSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICBjb25zdCBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuICBpZiAoYUtleXMubGVuZ3RoICE9PSBiS2V5cy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBhS2V5cykge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihiLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFpc0RlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgc2VlbikpIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl19
497
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbnNwZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kYXRhLWluc3BlY3Rvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxhQUFhLEVBS2IsVUFBVSxFQUNWLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsR0FDVCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUdMLCtCQUErQixHQUNoQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEMsOEVBQThFO0FBQzlFLDhDQUE4QztBQUM5Qyx3REFBd0Q7QUFDeEQsOEVBQThFO0FBRTlFLE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDO0FBQ2xELE1BQU0sdUJBQXVCLEdBQUcsaUNBQWlDLENBQUM7QUFDbEUsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUM7QUFDNUMsTUFBTSxrQkFBa0IsR0FBRyw0QkFBNEIsQ0FBQztBQXlCeEQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBQ3hDLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FB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QUFHLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNELElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO1FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNELENBQUM7SUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3ZELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQTJD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QztJQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUVoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuLyoqXG4gKiBSZXVzYWJsZSBkYXRhIGluc3BlY3RvciBmb3IgdGhlIG8xMXkgVUkuXG4gKlxuICogUmVuZGVycyBKU09OIGFzIGEgY29sbGFwc2libGUgdHJlZTogYnJhY2tldCBub3RhdGlvbiAoYHsg4oCmIH1gIC8gYFsg4oCmIF1gKSxcbiAqIGNvbG9yZWQga2V5cywgdHlwZWQgdmFsdWUgY29sb3JzLCBg4pa4YC9g4pa+YCBkaXNjbG9zdXJlIGljb25zLCBhbmQgYSBgLi4uYFxuICogY29sbGFwc2VkIGluZGljYXRvci5cbiAqXG4gKiBPbiB0b3Agb2YgcGxhaW4gSlNPTiBpdCBoYW5kbGVzIHRoZSB3b3JrZmxvdy1zcGVjaWZpYyB2YWx1ZSB0eXBlczogU3RyZWFtUmVmIC9cbiAqIFJ1blJlZiBiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBkZWNvZGVkIGJ5dGUgc3RyZWFtcywgRGF0ZXMsIGFuZCBuYW1lZFxuICogY2xhc3MgaW5zdGFuY2VzLlxuICovXG5cbmltcG9ydCB7IExvY2sgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdHlwZSBLZXlib2FyZEV2ZW50IGFzIFJlYWN0S2V5Ym9hcmRFdmVudCxcbiAgdHlwZSBNb3VzZUV2ZW50IGFzIFJlYWN0TW91c2VFdmVudCxcbiAgdHlwZSBSZWFjdE5vZGUsXG4gIHR5cGUgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VJZCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi9saWIvY24nO1xuaW1wb3J0IHsgRU5DUllQVEVEX0RJU1BMQVlfTkFNRSB9IGZyb20gJy4uLy4uL2xpYi9oeWRyYXRpb24nO1xuaW1wb3J0IHtcbiAgdHlwZSBEZWNvZGVkU3RyZWFtQ2h1bmtTb3VyY2UsXG4gIHR5cGUgRm9ybWF0dGVkU3RyZWFtQ2h1bmtEaXNwbGF5LFxuICBmb3JtYXRBcnJheUJ1ZmZlclZpZXdGb3JEaXNwbGF5LFxufSBmcm9tICcuLi8uLi9saWIvc3RyZWFtLWRpc3BsYXknO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9idXR0b24nO1xuaW1wb3J0IHsgQ0xTLCBKU09OX1ZJRVdfU1RZTEVTIH0gZnJvbSAnLi9kYXRhLWluc3BlY3Rvci5zdHlsZXMnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4vc3Bpbm5lcic7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtUmVmIC8gQ2xhc3NJbnN0YW5jZVJlZiB0eXBlIGRldGVjdGlvblxuLy8gKGlubGluZSB0byBhdm9pZCBjaXJjdWxhciBkZXBzIHdpdGggaHlkcmF0aW9uIG1vZHVsZSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBTVFJFQU1fUkVGX1RZUEUgPSAnX193b3JrZmxvd19zdHJlYW1fcmVmX18nO1xuY29uc3QgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUgPSAnX193b3JrZmxvd19jbGFzc19pbnN0YW5jZV9yZWZfXyc7XG5jb25zdCBSVU5fUkVGX1RZUEUgPSAnX193b3JrZmxvd19ydW5fcmVmX18nO1xuY29uc3QgQllURVNfRElTUExBWV9UWVBFID0gJ19fd29ya2Zsb3dfYnl0ZXNfZGlzcGxheV9fJztcblxuaW50ZXJmYWNlIFN0cmVhbVJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFNUUkVBTV9SRUZfVFlQRTtcbiAgc3RyZWFtSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJ1blJlZiB7XG4gIF9fdHlwZTogdHlwZW9mIFJVTl9SRUZfVFlQRTtcbiAgcnVuSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEJ5dGVzRGlzcGxheSB7XG4gIF9fdHlwZTogdHlwZW9mIEJZVEVTX0RJU1BMQVlfVFlQRTtcbiAgdGV4dDogc3RyaW5nO1xuICBkZWNvZGVkRnJvbT86IERlY29kZWRTdHJlYW1DaHVua1NvdXJjZTtcbn1cblxuaW50ZXJmYWNlIENsYXNzSW5zdGFuY2VSZWYge1xuICBfX3R5cGU6IHR5cGVvZiBDTEFTU19JTlNUQU5DRV9SRUZfVFlQRTtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGNsYXNzSWQ6IHN0cmluZztcbiAgZGF0YTogdW5rbm93bjtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVDaHVua1RleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHRleHQpO1xuICAgIGlmICh0eXBlb2YgcGFyc2VkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcnNlZCwgbnVsbCwgMik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ2h1bmtEYXRhKHRleHQ6IHN0cmluZyk6IHVua25vd24ge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmVhbVJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFN0cmVhbVJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIC8vIENoZWNrIGJvdGggZW51bWVyYWJsZSBhbmQgbm9uLWVudW1lcmFibGUgX190eXBlIChvcGFxdWUgcmVmcyB1c2Ugbm9uLWVudW1lcmFibGUpXG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gU1RSRUFNX1JFRl9UWVBFO1xufVxuXG5mdW5jdGlvbiBpc1J1blJlZih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJ1blJlZiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHZhbHVlLCAnX190eXBlJyk7XG4gIHJldHVybiBkZXNjPy52YWx1ZSA9PT0gUlVOX1JFRl9UWVBFO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCeXRlc0Rpc3BsYXkodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBCeXRlc0Rpc3BsYXkge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwgJ19fdHlwZScpO1xuICByZXR1cm4gZGVzYz8udmFsdWUgPT09IEJZVEVTX0RJU1BMQVlfVFlQRTtcbn1cblxuZnVuY3Rpb24gaXNDbGFzc0luc3RhbmNlUmVmKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ2xhc3NJbnN0YW5jZVJlZiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgJ19fdHlwZScgaW4gdmFsdWUgJiZcbiAgICAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLl9fdHlwZSA9PT0gQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEVcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAodmFsdWUgYXMgeyBjb25zdHJ1Y3Rvcj86IHsgbmFtZT86IHN0cmluZyB9IH0pLmNvbnN0cnVjdG9yPy5uYW1lID09PVxuICAgICAgRU5DUllQVEVEX0RJU1BMQVlfTkFNRVxuICApO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0cmVhbSBjbGljayBjb250ZXh0IChwYXNzZWQgdGhyb3VnaCBmcm9tIHRoZSBwYW5lbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRleHQgZm9yIHBhc3Npbmcgc3RyZWFtIGNsaWNrIGhhbmRsZXJzIGRvd24gdG8gRGF0YUluc3BlY3RvciBpbnN0YW5jZXMuXG4gKiBFeHBvcnRlZCBzbyB0aGF0IHBhcmVudCBjb21wb25lbnRzIChlLmcuLCBBdHRyaWJ1dGVQYW5lbCkgY2FuIHByb3ZpZGUgdGhlIGhhbmRsZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBTdHJlYW1DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8qKlxuICogQ29udGV4dCBmb3IgcGFzc2luZyBhIGRlY3J5cHQgaGFuZGxlciBkb3duIHRvIERhdGFJbnNwZWN0b3IgaW5zdGFuY2VzLlxuICogV2hlbiBwcm92aWRlZCwgZW5jcnlwdGVkIG1hcmtlcnMgYmVjb21lIGNsaWNrYWJsZSBidXR0b25zIHRoYXQgdHJpZ2dlciBkZWNyeXB0aW9uLlxuICovXG5leHBvcnQgdHlwZSBEZWNyeXB0Q2xpY2tDb250ZXh0VmFsdWUgPSB7XG4gIG9uRGVjcnlwdDogKCkgPT4gdm9pZDtcbiAgaXNEZWNyeXB0aW5nOiBib29sZWFuO1xuICBoYXNFbmNyeXB0ZWREYXRhPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWNyeXB0Q2xpY2tDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgRGVjcnlwdENsaWNrQ29udGV4dFZhbHVlIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBSdW5DbGlja0NvbnRleHQgPSBjcmVhdGVDb250ZXh0PFxuICAoKHJ1bklkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV29ya2Zsb3ctc3BlY2lmaWMgdmFsdWUgcmVuZGVyZXJzIChiYWRnZXMsIGVuY3J5cHRlZCBtYXJrZXJzLCBieXRlIHN0cmVhbXMpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gRW5jcnlwdGVkSW5saW5lTGFiZWwoKSB7XG4gIGNvbnN0IGN0eCA9IHVzZUNvbnRleHQoRGVjcnlwdENsaWNrQ29udGV4dCk7XG4gIGlmIChjdHgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICBjbGFzc05hbWU9XCJhbGlnbi1iYXNlbGluZSBnYXAteC0xXCJcbiAgICAgICAgZGlzYWJsZWQ9e2N0eC5pc0RlY3J5cHRpbmd9XG4gICAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBjdHgub25EZWNyeXB0KCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtjdHguaXNEZWNyeXB0aW5nID8gKFxuICAgICAgICAgIDxTcGlubmVyIHNpemU9ezEwfSAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxMb2NrIGNsYXNzTmFtZT1cImgtMyB3LTNcIiAvPlxuICAgICAgICApfVxuICAgICAgICA8c3Bhbj5EZWNyeXB0PC9zcGFuPlxuICAgICAgPC9CdXR0b24+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS02MDAgaXRhbGljXCI+XG4gICAgICA8TG9jayBjbGFzc05hbWU9XCItbXQtcHggbXItWzNweF0gaW5saW5lIGgtMyB3LTMgYWxpZ24tbWlkZGxlXCIgLz5cbiAgICAgIEVuY3J5cHRlZFxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gU3RyZWFtUmVmSW5saW5lKHsgc3RyZWFtUmVmIH06IHsgc3RyZWFtUmVmOiBTdHJlYW1SZWYgfSkge1xuICBjb25zdCBvblN0cmVhbUNsaWNrID0gdXNlQ29udGV4dChTdHJlYW1DbGlja0NvbnRleHQpO1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIGdhcC0xIHJvdW5kZWQgYm9yZGVyIGJvcmRlci1ibHVlLTMwMCBiZy1ibHVlLTEwMCBweC0xLjUgcHktMC41IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LWJsdWUtOTAwIHVuZGVybGluZSBkZWNvcmF0aW9uLXRyYW5zcGFyZW50IHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWJsdWUtMjAwXCJcbiAgICAgIG9uQ2xpY2s9eyhlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIG9uU3RyZWFtQ2xpY2s/LihzdHJlYW1SZWYuc3RyZWFtSWQpO1xuICAgICAgfX1cbiAgICAgIHRpdGxlPXtgVmlldyBzdHJlYW06ICR7c3RyZWFtUmVmLnN0cmVhbUlkfWB9XG4gICAgPlxuICAgICAgPHNwYW4+8J+ToTwvc3Bhbj5cbiAgICAgIDxzcGFuPntzdHJlYW1SZWYuc3RyZWFtSWR9PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5mdW5jdGlvbiBSdW5SZWZJbmxpbmUoeyBydW5SZWYgfTogeyBydW5SZWY6IFJ1blJlZiB9KSB7XG4gIGNvbnN0IG9uUnVuQ2xpY2sgPSB1c2VDb250ZXh0KFJ1bkNsaWNrQ29udGV4dCk7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZCBib3JkZXIgYm9yZGVyLXB1cnBsZS0zMDAgYmctcHVycGxlLTEwMCBweC0xLjUgcHktMC41IGZvbnQtbW9ubyB0ZXh0LVsxMHB4XSB0ZXh0LXB1cnBsZS05MDAgdW5kZXJsaW5lIGRlY29yYXRpb24tdHJhbnNwYXJlbnQgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctcHVycGxlLTIwMFwiXG4gICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBvblJ1bkNsaWNrPy4ocnVuUmVmLnJ1bklkKTtcbiAgICAgIH19XG4gICAgICB0aXRsZT17YFZpZXcgcnVuOiAke3J1blJlZi5ydW5JZH1gfVxuICAgID5cbiAgICAgIDxzcGFuPntydW5SZWYucnVuSWR9PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5mdW5jdGlvbiBEZWNvZGVkQnl0ZXNDaHVuayh7XG4gIGRlY29kZWRUZXh0LFxuICBzb3VyY2UsXG59OiB7XG4gIGRlY29kZWRUZXh0OiBzdHJpbmc7XG4gIHNvdXJjZTogRGVjb2RlZFN0cmVhbUNodW5rU291cmNlO1xufSkge1xuICBjb25zdCBbc2VsZWN0ZWRWaWV3LCBzZXRTZWxlY3RlZFZpZXddID0gdXNlU3RhdGU8J2RlY29kZWQnIHwgJ2J5dGVzJz4oXG4gICAgJ2RlY29kZWQnXG4gICk7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlQ2h1bmtEYXRhKGRlY29kZWRUZXh0KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibWluLXctMFwiPlxuICAgICAge3NlbGVjdGVkVmlldyA9PT0gJ2RlY29kZWQnID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTBcIj5cbiAgICAgICAgICB7dHlwZW9mIHBhcnNlZCA9PT0gJ3N0cmluZycgPyAoXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIHRleHQtZ3JheS0xMDAwXCI+XG4gICAgICAgICAgICAgIHtkZXNlcmlhbGl6ZUNodW5rVGV4dChwYXJzZWQpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8RGF0YUluc3BlY3RvciBkYXRhPXtwYXJzZWR9IGV4cGFuZExldmVsPXsxfSAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPERlY29kZWRCeXRlc0luc3BlY3RvciBkZWNvZGVkVGV4dD17ZGVjb2RlZFRleHR9IHNvdXJjZT17c291cmNlfSAvPlxuICAgICAgKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMiBmbGV4XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZCBib3JkZXIgYm9yZGVyLWdyYXktNDAwXCJcbiAgICAgICAgICB0aXRsZT17YCR7c291cmNlLnR5cGV9IGRlY29kZWQgYXMgJHtzb3VyY2UuZW5jb2RpbmcudG9VcHBlckNhc2UoKX0gdGV4dC4gU3dpdGNoIHRvIEJ5dGVzIHRvIGluc3BlY3QgdGhlIHN1bW1hcml6ZWQgcmF3IHZhbHVlLmB9XG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICdoLTUgcHgtMS41IGZvbnQtbWVkaXVtIHRleHQtWzEwcHhdIHRleHQtZ3JheS05MDAnLFxuICAgICAgICAgICAgICBzZWxlY3RlZFZpZXcgPT09ICdkZWNvZGVkJyA/ICdiZy1ncmF5LTIwMCcgOiAnYmctZ3JheS0xMDAnXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRWaWV3KCdkZWNvZGVkJyl9XG4gICAgICAgICAgICBhcmlhLXByZXNzZWQ9e3NlbGVjdGVkVmlldyA9PT0gJ2RlY29kZWQnfVxuICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNob3cgZGVjb2RlZCB0ZXh0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBEZWNvZGVkXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnaC01IGJvcmRlci1ncmF5LTQwMCBib3JkZXItbCBweC0xLjUgZm9udC1tZWRpdW0gdGV4dC1bMTBweF0gdGV4dC1ncmF5LTkwMCcsXG4gICAgICAgICAgICAgIHNlbGVjdGVkVmlldyA9PT0gJ2J5dGVzJyA/ICdiZy1ncmF5LTIwMCcgOiAnYmctZ3JheS0xMDAnXG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0U2VsZWN0ZWRWaWV3KCdieXRlcycpfVxuICAgICAgICAgICAgYXJpYS1wcmVzc2VkPXtzZWxlY3RlZFZpZXcgPT09ICdieXRlcyd9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2hvdyByYXcgYnl0ZXMgc3VtbWFyeVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQnl0ZXNcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRGVjb2RlZEJ5dGVzSW5zcGVjdG9yKHtcbiAgZGVjb2RlZFRleHQsXG4gIHNvdXJjZSxcbn06IHtcbiAgZGVjb2RlZFRleHQ6IHN0cmluZztcbiAgc291cmNlOiBEZWNvZGVkU3RyZWFtQ2h1bmtTb3VyY2U7XG59KSB7XG4gIGNvbnN0IFtleHBhbmRlZCwgc2V0RXhwYW5kZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmb250LW1vbm9cIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cImZsZXggbWF4LXctZnVsbCBpdGVtcy1zdGFydCBnYXAtMSB0ZXh0LWxlZnQgdGV4dC1ncmF5LTEwMDBcIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRFeHBhbmRlZCgodmFsdWUpID0+ICF2YWx1ZSl9XG4gICAgICAgIHRpdGxlPXtgJHtzb3VyY2UudHlwZX0gZGVjb2RlZCBhcyAke3NvdXJjZS5lbmNvZGluZy50b1VwcGVyQ2FzZSgpfSB0ZXh0YH1cbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic2VsZWN0LW5vbmUgdGV4dC1ncmF5LTcwMFwiPlxuICAgICAgICAgIHtleHBhbmRlZCA/ICfilrwnIDogJ+KWtid9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWluLXctMCBicmVhay13b3Jkc1wiPntzb3VyY2UucmF3U3VtbWFyeX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIHtleHBhbmRlZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMSBwbC01XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1ncmF5LTcwMFwiPmRlY29kZWQ6IDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIHRleHQtZ3JlZW4tOTAwXCI+XG4gICAgICAgICAgICB7SlNPTi5zdHJpbmdpZnkoZGVjb2RlZFRleHQpfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBCeXRlc0Rpc3BsYXlWYWx1ZSh7IGRpc3BsYXkgfTogeyBkaXNwbGF5OiBCeXRlc0Rpc3BsYXkgfSkge1xuICBpZiAoZGlzcGxheS5kZWNvZGVkRnJvbSkge1xuICAgIHJldHVybiAoXG4gICAgICA8RGVjb2RlZEJ5dGVzQ2h1bmtcbiAgICAgICAgZGVjb2RlZFRleHQ9e2Rpc3BsYXkudGV4dH1cbiAgICAgICAgc291cmNlPXtkaXNwbGF5LmRlY29kZWRGcm9tfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3JkcyB0ZXh0LWdyYXktMTAwMFwiPlxuICAgICAge2Rpc3BsYXkudGV4dH1cbiAgICA8L3NwYW4+XG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVHJlZSByZW5kZXJlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgRW50cnkgPSBbZmllbGQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgdmFsdWU6IHVua25vd25dO1xuXG5pbnRlcmZhY2UgTm9kZUNvbnRleHQge1xuICBsZXZlbDogbnVtYmVyO1xuICBzaG91bGRFeHBhbmQ6IChsZXZlbDogbnVtYmVyKSA9PiBib29sZWFuO1xuICBvdXRlclJlZjogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD47XG59XG5cbi8qKiBGaWVsZCBuYW1lcyBhcmUgcmVuZGVyZWQgdW5xdW90ZWQgKGVtcHR5IHN0cmluZyBzaG93cyBhcyBgXCJcImApLiAqL1xuZnVuY3Rpb24gZm9ybWF0RmllbGQoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBmaWVsZCA9PT0gJycgPyAnXCJcIicgOiBmaWVsZDtcbn1cblxuLyoqXG4gKiBEZXNjcmliZSBhbiBvYmplY3QvYXJyYXkvbWFwL3NldCBhcyBhbiBleHBhbmRhYmxlIGNvbnRhaW5lci4gUmV0dXJucyBudWxsIGZvclxuICogdmFsdWVzIHRoYXQgc2hvdWxkIHJlbmRlciBhcyBhIHByaW1pdGl2ZS4gYHByZWZpeGAgY2FycmllcyBhIGNsYXNzIG5hbWUgc2hvd25cbiAqIGJlZm9yZSB0aGUgb3BlbmluZyBicmFja2V0IChNYXAvU2V0IGFuZCBuYW1lZCBjbGFzcyBpbnN0YW5jZXMpLlxuICovXG5mdW5jdGlvbiBkZXNjcmliZUNvbnRhaW5lcihcbiAgdmFsdWU6IHVua25vd25cbik6IHsgZW50cmllczogRW50cnlbXTsgb3Blbjogc3RyaW5nOyBjbG9zZTogc3RyaW5nOyBwcmVmaXg/OiBzdHJpbmcgfSB8IG51bGwge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogdmFsdWUubWFwKChpdGVtKSA9PiBbdW5kZWZpbmVkLCBpdGVtXSBhcyBFbnRyeSksXG4gICAgICBvcGVuOiAnWycsXG4gICAgICBjbG9zZTogJ10nLFxuICAgIH07XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJpZXM6IEFycmF5LmZyb20odmFsdWUuZW50cmllcygpLCAoW2tleSwgdmFsXSkgPT4gW1xuICAgICAgICBTdHJpbmcoa2V5KSxcbiAgICAgICAgdmFsLFxuICAgICAgXSkgYXMgRW50cnlbXSxcbiAgICAgIG9wZW46ICd7JyxcbiAgICAgIGNsb3NlOiAnfScsXG4gICAgICBwcmVmaXg6ICdNYXAnLFxuICAgIH07XG4gIH1cbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJpZXM6IEFycmF5LmZyb20odmFsdWUudmFsdWVzKCksIChpdGVtKSA9PiBbdW5kZWZpbmVkLCBpdGVtXSBhcyBFbnRyeSksXG4gICAgICBvcGVuOiAnWycsXG4gICAgICBjbG9zZTogJ10nLFxuICAgICAgcHJlZml4OiAnU2V0JyxcbiAgICB9O1xuICB9XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgbmFtZSA9ICh2YWx1ZSBhcyB7IGNvbnN0cnVjdG9yPzogeyBuYW1lPzogc3RyaW5nIH0gfSkuY29uc3RydWN0b3JcbiAgICAgID8ubmFtZTtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cmllczogT2JqZWN0LmVudHJpZXModmFsdWUpIGFzIEVudHJ5W10sXG4gICAgICBvcGVuOiAneycsXG4gICAgICBjbG9zZTogJ30nLFxuICAgICAgcHJlZml4OiBuYW1lICYmIG5hbWUgIT09ICdPYmplY3QnID8gbmFtZSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVByaW1pdGl2ZSh2YWx1ZTogdW5rbm93bik6IHsgdGV4dDogc3RyaW5nOyBjbHM6IHN0cmluZyB9IHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4geyB0ZXh0OiAnbnVsbCcsIGNsczogQ0xTLm51bGwgfTtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB7IHRleHQ6ICd1bmRlZmluZWQnLCBjbHM6IENMUy51bmRlZmluZWQgfTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICByZXR1cm4geyB0ZXh0OiBgXCIke1N0cmluZyh2YWx1ZSl9XCJgLCBjbHM6IENMUy5zdHJpbmcgfTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgaW5zdGFuY2VvZiBCb29sZWFuKSB7XG4gICAgcmV0dXJuIHsgdGV4dDogU3RyaW5nKHZhbHVlKSwgY2xzOiBDTFMuYm9vbGVhbiB9O1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHZhbHVlIGluc3RhbmNlb2YgTnVtYmVyKSB7XG4gICAgcmV0dXJuIHsgdGV4dDogU3RyaW5nKHZhbHVlKSwgY2xzOiBDTFMubnVtYmVyIH07XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcbiAgICByZXR1cm4geyB0ZXh0OiBgJHt2YWx1ZS50b1N0cmluZygpfW5gLCBjbHM6IENMUy5udW1iZXIgfTtcbiAgfVxuICByZXR1cm4geyB0ZXh0OiBTdHJpbmcodmFsdWUpLCBjbHM6IENMUy5wdW5jdHVhdGlvbiB9O1xufVxuXG5mdW5jdGlvbiBMYWJlbCh7IGZpZWxkLCBjbGlja2FibGUgfTogeyBmaWVsZD86IHN0cmluZzsgY2xpY2thYmxlPzogYm9vbGVhbiB9KSB7XG4gIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIChcbiAgICA8c3BhbiBjbGFzc05hbWU9e2NsaWNrYWJsZSA/IENMUy5jbGlja2FibGVMYWJlbCA6IENMUy5sYWJlbH0+XG4gICAgICB7YCR7Zm9ybWF0RmllbGQoZmllbGQpfTpgfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQ29tbWEoeyBpc0xhc3QgfTogeyBpc0xhc3Q6IGJvb2xlYW4gfSkge1xuICBpZiAoaXNMYXN0KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17Q0xTLnB1bmN0dWF0aW9ufT4sPC9zcGFuPjtcbn1cblxuLyoqIEEgbm9uLWV4cGFuZGFibGUgcm93OiBgZmllbGQ6IDx2YWx1ZT5gLiAqL1xuZnVuY3Rpb24gTGVhZlJvdyh7XG4gIGZpZWxkLFxuICBpc0xhc3QsXG4gIGNoaWxkcmVuLFxufToge1xuICBmaWVsZD86IHN0cmluZztcbiAgaXNMYXN0OiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtDTFMuY2hpbGR9IHJvbGU9XCJ0cmVlaXRlbVwiIHRhYkluZGV4PXstMX0+XG4gICAgICA8TGFiZWwgZmllbGQ9e2ZpZWxkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgICAgPENvbW1hIGlzTGFzdD17aXNMYXN0fSAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBQcmltaXRpdmVWYWx1ZSh7IGZpZWxkLCB2YWx1ZSwgaXNMYXN0IH06IE5vZGVQcm9wcykge1xuICBjb25zdCB7IHRleHQsIGNscyB9ID0gZGVzY3JpYmVQcmltaXRpdmUodmFsdWUpO1xuICByZXR1cm4gKFxuICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbHN9Pnt0ZXh0fTwvc3Bhbj5cbiAgICA8L0xlYWZSb3c+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEVtcHR5Q29udGFpbmVyKHtcbiAgZmllbGQsXG4gIHByZWZpeCxcbiAgb3BlbixcbiAgY2xvc2UsXG4gIGlzTGFzdCxcbn06IHtcbiAgZmllbGQ/OiBzdHJpbmc7XG4gIHByZWZpeD86IHN0cmluZztcbiAgb3Blbjogc3RyaW5nO1xuICBjbG9zZTogc3RyaW5nO1xuICBpc0xhc3Q6IGJvb2xlYW47XG59KSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e0NMUy5jaGlsZH0gcm9sZT1cInRyZWVpdGVtXCIgdGFiSW5kZXg9ey0xfT5cbiAgICAgIDxMYWJlbCBmaWVsZD17ZmllbGR9IC8+XG4gICAgICB7cHJlZml4ID8gPHNwYW4gY2xhc3NOYW1lPXtDTFMuY2xhc3NOYW1lfT57cHJlZml4fTwvc3Bhbj4gOiBudWxsfVxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucHVuY3R1YXRpb259PntvcGVufTwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLnB1bmN0dWF0aW9ufT57Y2xvc2V9PC9zcGFuPlxuICAgICAgPENvbW1hIGlzTGFzdD17aXNMYXN0fSAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBmb2N1c0V4cGFuZGVyKFxuICBidXR0b246IEhUTUxFbGVtZW50LFxuICBvdXRlclJlZjogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD5cbikge1xuICBjb25zdCBwcmV2aW91cyA9IG91dGVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFxuICAgICdbZGF0YS1qc29uLWV4cGFuZGVyXVt0YWJpbmRleD1cIjBcIl0nXG4gICk7XG4gIGlmIChwcmV2aW91cykgcHJldmlvdXMudGFiSW5kZXggPSAtMTtcbiAgYnV0dG9uLnRhYkluZGV4ID0gMDtcbiAgYnV0dG9uLmZvY3VzKCk7XG59XG5cbmZ1bmN0aW9uIG1vdmVFeHBhbmRlckZvY3VzKFxuICBvdXRlclJlZjogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD4sXG4gIGRpcmVjdGlvbjogMSB8IC0xXG4pIHtcbiAgY29uc3Qgcm9vdCA9IG91dGVyUmVmLmN1cnJlbnQ7XG4gIGlmICghcm9vdCkgcmV0dXJuO1xuICBjb25zdCBidXR0b25zID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignW2RhdGEtanNvbi1leHBhbmRlcl0nKTtcbiAgbGV0IGN1cnJlbnQgPSAtMTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGJ1dHRvbnNbaV0udGFiSW5kZXggPT09IDApIHtcbiAgICAgIGN1cnJlbnQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjdXJyZW50IDwgMCkgcmV0dXJuO1xuICBjb25zdCBuZXh0ID0gKGN1cnJlbnQgKyBkaXJlY3Rpb24gKyBidXR0b25zLmxlbmd0aCkgJSBidXR0b25zLmxlbmd0aDtcbiAgYnV0dG9uc1tjdXJyZW50XS50YWJJbmRleCA9IC0xO1xuICBidXR0b25zW25leHRdLnRhYkluZGV4ID0gMDtcbiAgYnV0dG9uc1tuZXh0XS5mb2N1cygpO1xufVxuXG5mdW5jdGlvbiBFeHBhbmRhYmxlQ29udGFpbmVyKHtcbiAgZmllbGQsXG4gIGVudHJpZXMsXG4gIG9wZW4sXG4gIGNsb3NlLFxuICBwcmVmaXgsXG4gIGN0eCxcbiAgaXNMYXN0LFxufToge1xuICBmaWVsZD86IHN0cmluZztcbiAgZW50cmllczogRW50cnlbXTtcbiAgb3Blbjogc3RyaW5nO1xuICBjbG9zZTogc3RyaW5nO1xuICBwcmVmaXg/OiBzdHJpbmc7XG4gIGN0eDogTm9kZUNvbnRleHQ7XG4gIGlzTGFzdDogYm9vbGVhbjtcbn0pIHtcbiAgY29uc3QgeyBsZXZlbCwgc2hvdWxkRXhwYW5kLCBvdXRlclJlZiB9ID0gY3R4O1xuICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IHVzZVN0YXRlKCgpID0+IHNob3VsZEV4cGFuZChsZXZlbCkpO1xuICBjb25zdCByb3dSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBjb250ZW50c0lkID0gdXNlSWQoKTtcblxuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEVtcHR5Q29udGFpbmVyXG4gICAgICAgIGZpZWxkPXtmaWVsZH1cbiAgICAgICAgcHJlZml4PXtwcmVmaXh9XG4gICAgICAgIG9wZW49e29wZW59XG4gICAgICAgIGNsb3NlPXtjbG9zZX1cbiAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICBjb25zdCB0b2dnbGUgPSAoKSA9PiB7XG4gICAgc2V0RXhwYW5kZWQoKHZhbHVlKSA9PiAhdmFsdWUpO1xuICAgIGlmIChyb3dSZWYuY3VycmVudCkgZm9jdXNFeHBhbmRlcihyb3dSZWYuY3VycmVudCwgb3V0ZXJSZWYpO1xuICB9O1xuXG4gIC8vIFRvZ2dsZSBvbmx5IGZvciBjbGlja3MgdGhhdCBsYW5kIG9uIHRoaXMgcm93IGl0c2VsZjsgY2xpY2tzIGJ1YmJsaW5nIHVwIG91dFxuICAvLyBvZiBhIG5lc3RlZCB0cmVlaXRlbSBhcmUgaGFuZGxlZCBieSB0aGF0IGRlc2NlbmRhbnQncyBvd24gcm93LlxuICBjb25zdCBvbkNsaWNrID0gKGV2ZW50OiBSZWFjdE1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoXG4gICAgICAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCdbcm9sZT1cInRyZWVpdGVtXCJdJykgIT09XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0XG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRvZ2dsZSgpO1xuICB9O1xuXG4gIGNvbnN0IG9uS2V5RG93biA9IChldmVudDogUmVhY3RLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgc2V0RXhwYW5kZWQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgc2V0RXhwYW5kZWQoZmFsc2UpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBtb3ZlRXhwYW5kZXJGb2N1cyhvdXRlclJlZiwgLTEpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVFeHBhbmRlckZvY3VzKG91dGVyUmVmLCAxKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgbGFzdEluZGV4ID0gZW50cmllcy5sZW5ndGggLSAxO1xuXG4gIHJldHVybiAoXG4gICAgLy8gVGhlIHRyZWVpdGVtIHJvdyBpcyB0aGUgZm9jdXNhYmxlLCBrZXlib2FyZC1vcGVyYWJsZSBjb250cm9sIChyb3ZpbmdcbiAgICAvLyB0YWJpbmRleCArIGFycm93IGtleXMpOyB0aGUgZGlzY2xvc3VyZSBtYXJrZXIgYmVsb3cgaXMgcHVyZWx5IGRlY29yYXRpdmUuXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtDTFMuY2hpbGR9XG4gICAgICByb2xlPVwidHJlZWl0ZW1cIlxuICAgICAgYXJpYS1leHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICBhcmlhLWNvbnRyb2xzPXtleHBhbmRlZCA/IGNvbnRlbnRzSWQgOiB1bmRlZmluZWR9XG4gICAgICBkYXRhLWpzb24tZXhwYW5kZXJcbiAgICAgIHJlZj17cm93UmVmfVxuICAgICAgdGFiSW5kZXg9e2xldmVsID09PSAwID8gMCA6IC0xfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17ZXhwYW5kZWQgPyBDTFMuY29sbGFwc2VJY29uIDogQ0xTLmV4cGFuZEljb259XG4gICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAvPlxuICAgICAge2ZpZWxkICE9PSB1bmRlZmluZWQgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5jbGlja2FibGVMYWJlbH0+e2Ake2Zvcm1hdEZpZWxkKGZpZWxkKX06YH08L3NwYW4+XG4gICAgICApfVxuICAgICAge3ByZWZpeCA/IDxzcGFuIGNsYXNzTmFtZT17Q0xTLmNsYXNzTmFtZX0+e3ByZWZpeH08L3NwYW4+IDogbnVsbH1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLnB1bmN0dWF0aW9ufT57b3Blbn08L3NwYW4+XG4gICAgICB7ZXhwYW5kZWQgPyAoXG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvdXNlU2VtYW50aWNFbGVtZW50czogQVJJQSB0cmVlIGdyb3VwIGlzIHRoZSBjb3JyZWN0IHJvbGUgaGVyZVxuICAgICAgICA8dWwgaWQ9e2NvbnRlbnRzSWR9IGNsYXNzTmFtZT17Q0xTLmNoaWxkRmllbGRzfSByb2xlPVwiZ3JvdXBcIj5cbiAgICAgICAgICB7ZW50cmllcy5tYXAoKFtjaGlsZEZpZWxkLCBjaGlsZFZhbHVlXSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxEYXRhUmVuZGVyXG4gICAgICAgICAgICAgIGtleT17Y2hpbGRGaWVsZCA/PyBpbmRleH1cbiAgICAgICAgICAgICAgZmllbGQ9e2NoaWxkRmllbGR9XG4gICAgICAgICAgICAgIHZhbHVlPXtjaGlsZFZhbHVlfVxuICAgICAgICAgICAgICBpc0xhc3Q9e2luZGV4ID09PSBsYXN0SW5kZXh9XG4gICAgICAgICAgICAgIGN0eD17eyAuLi5jdHgsIGxldmVsOiBsZXZlbCArIDEgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvdWw+XG4gICAgICApIDogKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5jb2xsYXBzZWRDb250ZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgKX1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLnB1bmN0dWF0aW9ufT57Y2xvc2V9PC9zcGFuPlxuICAgICAgPENvbW1hIGlzTGFzdD17aXNMYXN0fSAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5pbnRlcmZhY2UgTm9kZVByb3BzIHtcbiAgZmllbGQ/OiBzdHJpbmc7XG4gIHZhbHVlOiB1bmtub3duO1xuICBpc0xhc3Q6IGJvb2xlYW47XG4gIGN0eDogTm9kZUNvbnRleHQ7XG59XG5cbmZ1bmN0aW9uIERhdGFSZW5kZXIoeyBmaWVsZCwgdmFsdWUsIGlzTGFzdCwgY3R4IH06IE5vZGVQcm9wcykge1xuICBpZiAoaXNCeXRlc0Rpc3BsYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgICA8Qnl0ZXNEaXNwbGF5VmFsdWUgZGlzcGxheT17dmFsdWV9IC8+XG4gICAgICA8L0xlYWZSb3c+XG4gICAgKTtcbiAgfVxuICBpZiAoaXNFbmNyeXB0ZWRNYXJrZXIodmFsdWUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxMZWFmUm93IGZpZWxkPXtmaWVsZH0gaXNMYXN0PXtpc0xhc3R9PlxuICAgICAgICA8RW5jcnlwdGVkSW5saW5lTGFiZWwgLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc1N0cmVhbVJlZih2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxTdHJlYW1SZWZJbmxpbmUgc3RyZWFtUmVmPXt2YWx1ZX0gLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmIChpc1J1blJlZih2YWx1ZSkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxSdW5SZWZJbmxpbmUgcnVuUmVmPXt2YWx1ZX0gLz5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Q0xTLmRhdGV9Pnt2YWx1ZS50b0lTT1N0cmluZygpfTwvc3Bhbj5cbiAgICAgIDwvTGVhZlJvdz5cbiAgICApO1xuICB9XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiAoXG4gICAgICA8TGVhZlJvdyBmaWVsZD17ZmllbGR9IGlzTGFzdD17aXNMYXN0fT5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtDTFMucmVnZXhwfT57dmFsdWUudG9TdHJpbmcoKX08L3NwYW4+XG4gICAgICA8L0xlYWZSb3c+XG4gICAgKTtcbiAgfVxuICBpZiAoaXNDbGFzc0luc3RhbmNlUmVmKHZhbHVlKSkge1xuICAgIHJldHVybiAoXG4gICAgICA8Q2xhc3NJbnN0YW5jZU5vZGVcbiAgICAgICAgZmllbGQ9e2ZpZWxkfVxuICAgICAgICBpbnN0YW5jZT17dmFsdWV9XG4gICAgICAgIGlzTGFzdD17aXNMYXN0fVxuICAgICAgICBjdHg9e2N0eH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRlc2NyaWJlQ29udGFpbmVyKHZhbHVlKTtcbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIHJldHVybiAoXG4gICAgICA8RXhwYW5kYWJsZUNvbnRhaW5lclxuICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgIGVudHJpZXM9e2NvbnRhaW5lci5lbnRyaWVzfVxuICAgICAgICBvcGVuPXtjb250YWluZXIub3Blbn1cbiAgICAgICAgY2xvc2U9e2NvbnRhaW5lci5jbG9zZX1cbiAgICAgICAgcHJlZml4PXtjb250YWluZXIucHJlZml4fVxuICAgICAgICBjdHg9e2N0eH1cbiAgICAgICAgaXNMYXN0PXtpc0xhc3R9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxQcmltaXRpdmVWYWx1ZSBmaWVsZD17ZmllbGR9IHZhbHVlPXt2YWx1ZX0gaXNMYXN0PXtpc0xhc3R9IGN0eD17Y3R4fSAvPlxuICApO1xufVxuXG5mdW5jdGlvbiBDbGFzc0luc3RhbmNlTm9kZSh7XG4gIGZpZWxkLFxuICBpbnN0YW5jZSxcbiAgaXNMYXN0LFxuICBjdHgsXG59OiB7XG4gIGZpZWxkPzogc3RyaW5nO1xuICBpbnN0YW5jZTogQ2xhc3NJbnN0YW5jZVJlZjtcbiAgaXNMYXN0OiBib29sZWFuO1xuICBjdHg6IE5vZGVDb250ZXh0O1xufSkge1xuICBjb25zdCBjb250YWluZXIgPSBkZXNjcmliZUNvbnRhaW5lcihpbnN0YW5jZS5kYXRhKTtcbiAgaWYgKGNvbnRhaW5lcikge1xuICAgIHJldHVybiAoXG4gICAgICA8RXhwYW5kYWJsZUNvbnRhaW5lclxuICAgICAgICBmaWVsZD17ZmllbGR9XG4gICAgICAgIGVudHJpZXM9e2NvbnRhaW5lci5lbnRyaWVzfVxuICAgICAgICBvcGVuPXtjb250YWluZXIub3Blbn1cbiAgICAgICAgY2xvc2U9e2NvbnRhaW5lci5jbG9zZX1cbiAgICAgICAgcHJlZml4PXtpbnN0YW5jZS5jbGFzc05hbWV9XG4gICAgICAgIGN0eD17Y3R4fVxuICAgICAgICBpc0xhc3Q9e2lzTGFzdH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuICBjb25zdCB7IHRleHQsIGNscyB9ID0gZGVzY3JpYmVQcmltaXRpdmUoaW5zdGFuY2UuZGF0YSk7XG4gIHJldHVybiAoXG4gICAgPExlYWZSb3cgZmllbGQ9e2ZpZWxkfSBpc0xhc3Q9e2lzTGFzdH0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e0NMUy5jbGFzc05hbWV9PntpbnN0YW5jZS5jbGFzc05hbWV9PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbHN9Pnt0ZXh0fTwvc3Bhbj5cbiAgICA8L0xlYWZSb3c+XG4gICk7XG59XG5cbmZ1bmN0aW9uIEpzb25UcmVlKHtcbiAgZGF0YSxcbiAgbmFtZSxcbiAgZXhwYW5kTGV2ZWwsXG59OiB7XG4gIGRhdGE6IHVua25vd247XG4gIG5hbWU/OiBzdHJpbmc7XG4gIGV4cGFuZExldmVsOiBudW1iZXI7XG59KSB7XG4gIGNvbnN0IG91dGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc2hvdWxkRXhwYW5kID0gdXNlTWVtbyhcbiAgICAoKSA9PiAobGV2ZWw6IG51bWJlcikgPT4gbGV2ZWwgPCBleHBhbmRMZXZlbCxcbiAgICBbZXhwYW5kTGV2ZWxdXG4gICk7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtvdXRlclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Q0xTLmNvbnRhaW5lcn1cbiAgICAgIHJvbGU9XCJ0cmVlXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJKU09OIHZpZXdcIlxuICAgID5cbiAgICAgIDxEYXRhUmVuZGVyXG4gICAgICAgIGZpZWxkPXtuYW1lfVxuICAgICAgICB2YWx1ZT17ZGF0YX1cbiAgICAgICAgaXNMYXN0XG4gICAgICAgIGN0eD17eyBsZXZlbDogMCwgc2hvdWxkRXhwYW5kLCBvdXRlclJlZiB9fVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWYgLyB0eXBlZC1hcnJheSBjb2xsYXBzaW5nIChwcmVwcm9jZXNzaW5nIGJlZm9yZSByZW5kZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDcmVhdGUgYSBub24tZXhwYW5kYWJsZSB3cmFwcGVyIHRoYXQgY2FycmllcyByZWYgZGF0YSBhcyBub24tZW51bWVyYWJsZVxuICogcHJvcGVydGllcyBzbyB0aGUgcmVuZGVyZXIgY2FuIGRldGVjdCBTdHJlYW1SZWYvUnVuUmVmIHdpdGhvdXQgZXhwb3NpbmdcbiAqIHRoZWlyIGludGVybmFscyBhcyBvYmplY3QgZmllbGRzLlxuICovXG5mdW5jdGlvbiBtYWtlT3BhcXVlUmVmKHJlZjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB1bmtub3duIHtcbiAgY29uc3Qgb3BhcXVlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVmKSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcGFxdWUsIGtleSwgeyB2YWx1ZSwgZW51bWVyYWJsZTogZmFsc2UgfSk7XG4gIH1cbiAgcmV0dXJuIG9wYXF1ZTtcbn1cblxuZnVuY3Rpb24gbWFrZUJ5dGVzRGlzcGxheShkaXNwbGF5OiBGb3JtYXR0ZWRTdHJlYW1DaHVua0Rpc3BsYXkpOiB1bmtub3duIHtcbiAgY29uc3Qgb3BhcXVlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwgJ19fdHlwZScsIHtcbiAgICB2YWx1ZTogQllURVNfRElTUExBWV9UWVBFLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICB9KTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wYXF1ZSwgJ3RleHQnLCB7XG4gICAgdmFsdWU6IGRpc3BsYXkudGV4dCxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcGFxdWUsICdkZWNvZGVkRnJvbScsIHtcbiAgICB2YWx1ZTogZGlzcGxheS5kZWNvZGVkRnJvbSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgfSk7XG4gIHJldHVybiBvcGFxdWU7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgd2FsayBkYXRhIGFuZCByZXBsYWNlIFJ1blJlZi9TdHJlYW1SZWYvdHlwZWQgYXJyYXkgb2JqZWN0cyB3aXRoXG4gKiBub24tZXhwYW5kYWJsZSB2ZXJzaW9ucyBzbyB0aGUgcmVuZGVyZXIgZG9lc24ndCBzaG93IHRoZWlyIGludGVybmFscy5cbiAqIE9ubHkgcmVjdXJzZXMgaW50byBwbGFpbiBvYmplY3RzIGFuZCBhcnJheXMgdG8gYXZvaWQgc3RyaXBwaW5nIGNsYXNzXG4gKiBpbnN0YW5jZXMgKERhdGUsIEVycm9yLCBVUkwsIEhlYWRlcnMsIGV0Yy4pIHRoYXQgaGF2ZSB0aGVpciBvd24gcmVuZGVyaW5nLlxuICogTWFwIGFuZCBTZXQgY29udGFpbmVycyBhcmUgcHJlc2VydmVkIHdoaWxlIHRoZWlyIGNvbnRlbnRzIGFyZSBwcmVwYXJlZCBmb3JcbiAqIGRpc3BsYXkuXG4gKlxuICogRXhwb3J0ZWQgZm9yIHRlc3RpbmcgdGhlIHR5cGVkLWFycmF5IGRldGVjdGlvbiBwYXRoIHVzZWQgYnkgaHlkcmF0ZWRcbiAqIEFJIGFnZW50IHN0cmVhbSBjaHVua3MgKGUuZy4gYHsgZGVsdGE6IG5ldyBVaW50OEFycmF5KC4uLikgfWApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGFwc2VSZWZzKGRhdGE6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKGRhdGEgPT09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSByZXR1cm4gZGF0YTtcbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSAmJiAhKGRhdGEgaW5zdGFuY2VvZiBEYXRhVmlldykpIHtcbiAgICByZXR1cm4gbWFrZUJ5dGVzRGlzcGxheShmb3JtYXRBcnJheUJ1ZmZlclZpZXdGb3JEaXNwbGF5KGRhdGEpKTtcbiAgfVxuICBpZiAoaXNSdW5SZWYoZGF0YSkgfHwgaXNTdHJlYW1SZWYoZGF0YSkpXG4gICAgcmV0dXJuIG1ha2VPcGFxdWVSZWYoZGF0YSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHJldHVybiBkYXRhLm1hcChjb2xsYXBzZVJlZnMpO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIE1hcCkge1xuICAgIHJldHVybiBuZXcgTWFwKFxuICAgICAgQXJyYXkuZnJvbShkYXRhLmVudHJpZXMoKSwgKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAgICBjb2xsYXBzZVJlZnMoa2V5KSxcbiAgICAgICAgY29sbGFwc2VSZWZzKHZhbHVlKSxcbiAgICAgIF0pXG4gICAgKTtcbiAgfVxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIFNldCkge1xuICAgIHJldHVybiBuZXcgU2V0KEFycmF5LmZyb20oZGF0YS52YWx1ZXMoKSwgY29sbGFwc2VSZWZzKSk7XG4gIH1cbiAgLy8gT25seSByZWN1cnNlIGludG8gcGxhaW4gb2JqZWN0cyDigJQgbGVhdmUgY2xhc3MgaW5zdGFuY2VzIHVudG91Y2hlZFxuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihkYXRhKTtcbiAgaWYgKHByb3RvICE9PSBPYmplY3QucHJvdG90eXBlICYmIHByb3RvICE9PSBudWxsKSByZXR1cm4gZGF0YTtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgIHJlc3VsdFtrZXldID0gY29sbGFwc2VSZWZzKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpYyBjb21wb25lbnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFJbnNwZWN0b3JQcm9wcyB7XG4gIC8qKiBUaGUgZGF0YSB0byBpbnNwZWN0ICovXG4gIGRhdGE6IHVua25vd247XG4gIC8qKiBMZXZlbHMgc3RyaWN0bHkgYmVsb3cgdGhpcyBudW1iZXIgYXV0by1leHBhbmQgKGRlZmF1bHQ6IDIpICovXG4gIGV4cGFuZExldmVsPzogbnVtYmVyO1xuICAvKiogT3B0aW9uYWwgbmFtZSBmb3IgdGhlIHJvb3Qgbm9kZSAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBhIHN0cmVhbSByZWZlcmVuY2UgaXMgY2xpY2tlZCAqL1xuICBvblN0cmVhbUNsaWNrPzogKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgcnVuIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uUnVuQ2xpY2s/OiAocnVuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYW4gZW5jcnlwdGVkIG1hcmtlciBpcyBjbGlja2VkICh0cmlnZ2VycyBkZWNyeXB0aW9uKSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciBkZWNyeXB0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcyAqL1xuICBpc0RlY3J5cHRpbmc/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRGF0YUluc3BlY3Rvcih7XG4gIGRhdGEsXG4gIGV4cGFuZExldmVsID0gMixcbiAgbmFtZSxcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgb25EZWNyeXB0LFxuICBpc0RlY3J5cHRpbmcgPSBmYWxzZSxcbn06IERhdGFJbnNwZWN0b3JQcm9wcykge1xuICBjb25zdCBjb2xsYXBzZWREYXRhID0gdXNlTWVtbygoKSA9PiBjb2xsYXBzZVJlZnMoZGF0YSksIFtkYXRhXSk7XG4gIGNvbnN0IHN0YWJsZURhdGEgPSB1c2VTdGFibGVJbnNwZWN0b3JEYXRhKGNvbGxhcHNlZERhdGEpO1xuXG4gIGxldCBjb250ZW50OiBSZWFjdE5vZGUgPSAoXG4gICAgPD5cbiAgICAgIHsvKiBSZWFjdCAxOSBob2lzdHMgJiBkZWR1cGVzIHRoaXMgPHN0eWxlPiBieSBocmVmLCBzbyBpdCBpcyBlbWl0dGVkIG9uY2VcbiAgICAgICAgICByZWdhcmRsZXNzIG9mIGhvdyBtYW55IGluc3BlY3RvcnMgYXJlIG1vdW50ZWQuICovfVxuICAgICAgPHN0eWxlIGhyZWY9XCJ3Zi1qc29uLXZpZXdcIiBwcmVjZWRlbmNlPVwiZGVmYXVsdFwiPlxuICAgICAgICB7SlNPTl9WSUVXX1NUWUxFU31cbiAgICAgIDwvc3R5bGU+XG4gICAgICA8SnNvblRyZWUgZGF0YT17c3RhYmxlRGF0YX0gbmFtZT17bmFtZX0gZXhwYW5kTGV2ZWw9e2V4cGFuZExldmVsfSAvPlxuICAgIDwvPlxuICApO1xuXG4gIGlmIChvblN0cmVhbUNsaWNrKSB7XG4gICAgY29udGVudCA9IChcbiAgICAgIDxTdHJlYW1DbGlja0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e29uU3RyZWFtQ2xpY2t9PlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvU3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgICk7XG4gIH1cbiAgaWYgKG9uUnVuQ2xpY2spIHtcbiAgICBjb250ZW50ID0gKFxuICAgICAgPFJ1bkNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25SdW5DbGlja30+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9SdW5DbGlja0NvbnRleHQuUHJvdmlkZXI+XG4gICAgKTtcbiAgfVxuICBpZiAob25EZWNyeXB0KSB7XG4gICAgY29udGVudCA9IChcbiAgICAgIDxEZWNyeXB0Q2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IG9uRGVjcnlwdCwgaXNEZWNyeXB0aW5nIH19PlxuICAgICAgICB7Y29udGVudH1cbiAgICAgIDwvRGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlcj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmVuZGVyIHN0YWJpbGl6YXRpb24gKGF2b2lkIHJlLXJlbmRlcnMgd2hlbiBkYXRhIGlzIGRlZXBseSBlcXVhbClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiB1c2VTdGFibGVJbnNwZWN0b3JEYXRhPFQ+KG5leHQ6IFQpOiBUIHtcbiAgY29uc3QgcHJldmlvdXNSZWYgPSB1c2VSZWY8VD4obmV4dCk7XG4gIGlmICghaXNEZWVwRXF1YWwocHJldmlvdXNSZWYuY3VycmVudCwgbmV4dCkpIHtcbiAgICBwcmV2aW91c1JlZi5jdXJyZW50ID0gbmV4dDtcbiAgfVxuICByZXR1cm4gcHJldmlvdXNSZWYuY3VycmVudDtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNTYW1lQnl0ZXNEaXNwbGF5KGE6IEJ5dGVzRGlzcGxheSwgYjogQnl0ZXNEaXNwbGF5KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgYS50ZXh0ID09PSBiLnRleHQgJiZcbiAgICBhLmRlY29kZWRGcm9tPy50eXBlID09PSBiLmRlY29kZWRGcm9tPy50eXBlICYmXG4gICAgYS5kZWNvZGVkRnJvbT8uZW5jb2RpbmcgPT09IGIuZGVjb2RlZEZyb20/LmVuY29kaW5nICYmXG4gICAgYS5kZWNvZGVkRnJvbT8ucmF3U3VtbWFyeSA9PT0gYi5kZWNvZGVkRnJvbT8ucmF3U3VtbWFyeVxuICApO1xufVxuXG5mdW5jdGlvbiBpc0RlZXBFcXVhbChhOiB1bmtub3duLCBiOiB1bmtub3duLCBzZWVuID0gbmV3IFdlYWtNYXAoKSk6IGJvb2xlYW4ge1xuICBpZiAoT2JqZWN0LmlzKGEsIGIpKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAoaXNCeXRlc0Rpc3BsYXkoYSkgfHwgaXNCeXRlc0Rpc3BsYXkoYikpIHtcbiAgICByZXR1cm4gaXNCeXRlc0Rpc3BsYXkoYSkgJiYgaXNCeXRlc0Rpc3BsYXkoYikgJiYgaXNTYW1lQnl0ZXNEaXNwbGF5KGEsIGIpO1xuICB9XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbiAgfVxuXG4gIGlmIChhIGluc3RhbmNlb2YgUmVnRXhwICYmIGIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gIH1cblxuICBpZiAoYSBpbnN0YW5jZW9mIE1hcCAmJiBiIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgYS5lbnRyaWVzKCkpIHtcbiAgICAgIGlmICghYi5oYXMoa2V5KSB8fCAhaXNEZWVwRXF1YWwodmFsdWUsIGIuZ2V0KGtleSksIHNlZW4pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGEgaW5zdGFuY2VvZiBTZXQgJiYgYiBpbnN0YW5jZW9mIFNldCkge1xuICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYS52YWx1ZXMoKSkge1xuICAgICAgaWYgKCFiLmhhcyh2YWx1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0TGlrZShhKSB8fCAhaXNPYmplY3RMaWtlKGIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHNlZW4uZ2V0KGEpID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgc2Vlbi5zZXQoYSwgYik7XG5cbiAgY29uc3QgYUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGEpO1xuICBjb25zdCBiSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYik7XG4gIGlmIChhSXNBcnJheSAhPT0gYklzQXJyYXkpIHJldHVybiBmYWxzZTtcblxuICBpZiAoYUlzQXJyYXkgJiYgYklzQXJyYXkpIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoIWlzRGVlcEVxdWFsKGFbaV0sIGJbaV0sIHNlZW4pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgYUtleXMgPSBPYmplY3Qua2V5cyhhKTtcbiAgY29uc3QgYktleXMgPSBPYmplY3Qua2V5cyhiKTtcbiAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgYUtleXMpIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24oYiwga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghaXNEZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIHNlZW4pKSByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * Explains why an event is shown greyed out: it repeats a class the log
4
+ * already records for the same entity, after that entity finished.
5
+ *
6
+ * Renders `children` untouched when `isDuplicate` is false, so a call site can
7
+ * wrap an event label unconditionally. Mounts its own {@link TooltipProvider}
8
+ * so it works in the sidebar and the events table alike; nesting one inside an
9
+ * existing provider is harmless.
10
+ */
11
+ export declare function DuplicateEventTooltip({ isDuplicate, children, }: {
12
+ isDuplicate?: boolean;
13
+ children: ReactNode;
14
+ }): ReactNode;
15
+ //# sourceMappingURL=duplicate-event-tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicate-event-tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/ui/duplicate-event-tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASvC;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,WAAmB,EACnB,QAAQ,GACT,EAAE;IACD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;CACrB,GAAG,SAAS,CAiBZ"}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { DUPLICATE_EVENT_MESSAGE } from '../../lib/duplicate-events';
4
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from './tooltip';
5
+ /**
6
+ * Explains why an event is shown greyed out: it repeats a class the log
7
+ * already records for the same entity, after that entity finished.
8
+ *
9
+ * Renders `children` untouched when `isDuplicate` is false, so a call site can
10
+ * wrap an event label unconditionally. Mounts its own {@link TooltipProvider}
11
+ * so it works in the sidebar and the events table alike; nesting one inside an
12
+ * existing provider is harmless.
13
+ */
14
+ export function DuplicateEventTooltip({ isDuplicate = false, children, }) {
15
+ if (!isDuplicate)
16
+ return children;
17
+ return (_jsx(TooltipProvider, { delayDuration: 300, children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: children }), _jsx(TooltipContent, { className: "max-w-[264px] leading-snug", collisionPadding: 8, side: "top", children: DUPLICATE_EVENT_MESSAGE })] }) }));
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVwbGljYXRlLWV2ZW50LXRvb2x0aXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9kdXBsaWNhdGUtZXZlbnQtdG9vbHRpcC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsY0FBYyxFQUNkLGVBQWUsRUFDZixjQUFjLEdBQ2YsTUFBTSxXQUFXLENBQUM7QUFFbkI7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsRUFDcEMsV0FBVyxHQUFHLEtBQUssRUFDbkIsUUFBUSxHQUlUO0lBQ0MsSUFBSSxDQUFDLFdBQVc7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUVsQyxPQUFPLENBQ0wsS0FBQyxlQUFlLElBQUMsYUFBYSxFQUFFLEdBQUcsWUFDakMsTUFBQyxPQUFPLGVBQ04sS0FBQyxjQUFjLElBQUMsT0FBTyxrQkFBRSxRQUFRLEdBQWtCLEVBQ25ELEtBQUMsY0FBYyxJQUNiLFNBQVMsRUFBQyw0QkFBNEIsRUFDdEMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUNuQixJQUFJLEVBQUMsS0FBSyxZQUVULHVCQUF1QixHQUNULElBQ1QsR0FDTSxDQUNuQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBEVVBMSUNBVEVfRVZFTlRfTUVTU0FHRSB9IGZyb20gJy4uLy4uL2xpYi9kdXBsaWNhdGUtZXZlbnRzJztcbmltcG9ydCB7XG4gIFRvb2x0aXAsXG4gIFRvb2x0aXBDb250ZW50LFxuICBUb29sdGlwUHJvdmlkZXIsXG4gIFRvb2x0aXBUcmlnZ2VyLFxufSBmcm9tICcuL3Rvb2x0aXAnO1xuXG4vKipcbiAqIEV4cGxhaW5zIHdoeSBhbiBldmVudCBpcyBzaG93biBncmV5ZWQgb3V0OiBpdCByZXBlYXRzIGEgY2xhc3MgdGhlIGxvZ1xuICogYWxyZWFkeSByZWNvcmRzIGZvciB0aGUgc2FtZSBlbnRpdHksIGFmdGVyIHRoYXQgZW50aXR5IGZpbmlzaGVkLlxuICpcbiAqIFJlbmRlcnMgYGNoaWxkcmVuYCB1bnRvdWNoZWQgd2hlbiBgaXNEdXBsaWNhdGVgIGlzIGZhbHNlLCBzbyBhIGNhbGwgc2l0ZSBjYW5cbiAqIHdyYXAgYW4gZXZlbnQgbGFiZWwgdW5jb25kaXRpb25hbGx5LiBNb3VudHMgaXRzIG93biB7QGxpbmsgVG9vbHRpcFByb3ZpZGVyfVxuICogc28gaXQgd29ya3MgaW4gdGhlIHNpZGViYXIgYW5kIHRoZSBldmVudHMgdGFibGUgYWxpa2U7IG5lc3Rpbmcgb25lIGluc2lkZSBhblxuICogZXhpc3RpbmcgcHJvdmlkZXIgaXMgaGFybWxlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEdXBsaWNhdGVFdmVudFRvb2x0aXAoe1xuICBpc0R1cGxpY2F0ZSA9IGZhbHNlLFxuICBjaGlsZHJlbixcbn06IHtcbiAgaXNEdXBsaWNhdGU/OiBib29sZWFuO1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGlmICghaXNEdXBsaWNhdGUpIHJldHVybiBjaGlsZHJlbjtcblxuICByZXR1cm4gKFxuICAgIDxUb29sdGlwUHJvdmlkZXIgZGVsYXlEdXJhdGlvbj17MzAwfT5cbiAgICAgIDxUb29sdGlwPlxuICAgICAgICA8VG9vbHRpcFRyaWdnZXIgYXNDaGlsZD57Y2hpbGRyZW59PC9Ub29sdGlwVHJpZ2dlcj5cbiAgICAgICAgPFRvb2x0aXBDb250ZW50XG4gICAgICAgICAgY2xhc3NOYW1lPVwibWF4LXctWzI2NHB4XSBsZWFkaW5nLXNudWdcIlxuICAgICAgICAgIGNvbGxpc2lvblBhZGRpbmc9ezh9XG4gICAgICAgICAgc2lkZT1cInRvcFwiXG4gICAgICAgID5cbiAgICAgICAgICB7RFVQTElDQVRFX0VWRU5UX01FU1NBR0V9XG4gICAgICAgIDwvVG9vbHRpcENvbnRlbnQ+XG4gICAgICA8L1Rvb2x0aXA+XG4gICAgPC9Ub29sdGlwUHJvdmlkZXI+XG4gICk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"menu-dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/ui/menu-dropdown.tsx"],"names":[],"mappings":"AAMA,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC3D,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACnD,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EACtD,OAAO,EACP,KAAK,EACL,QAAQ,GACT,EAAE,iBAAiB,CAAC,CAAC,CAAC,2CAqFtB"}
1
+ {"version":3,"file":"menu-dropdown.d.ts","sourceRoot":"","sources":["../../../src/components/ui/menu-dropdown.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC3D,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACnD,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EACtD,OAAO,EACP,KAAK,EACL,QAAQ,GACT,EAAE,iBAAiB,CAAC,CAAC,CAAC,2CAsEtB"}
@@ -1,6 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useEffect, useRef, useState } from 'react';
4
+ import { cn } from '../../lib/cn';
4
5
  const STYLES = `.wf-menu-btn{appearance:none;-webkit-appearance:none;border:none;display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 12px;border-radius:6px;font-size:14px;font-weight:500;line-height:20px;color:var(--ds-gray-1000);background:var(--ds-background-100);box-shadow:0 0 0 1px var(--ds-gray-400);cursor:pointer;white-space:nowrap;transition:background 150ms}.wf-menu-btn:hover{background:var(--ds-gray-alpha-200)}.wf-menu-item{appearance:none;-webkit-appearance:none;border:none;display:flex;align-items:center;width:100%;height:40px;padding:0 8px;border-radius:6px;font-size:14px;color:var(--ds-gray-1000);background:transparent;cursor:pointer;transition:background 150ms}.wf-menu-item:hover{background:var(--ds-gray-alpha-100)}`;
5
6
  /**
6
7
  * A dropdown menu that matches Geist's MenuButton (secondary) + Menu styling.
@@ -21,26 +22,9 @@ export function MenuDropdown({ options, value, onChange, }) {
21
22
  document.addEventListener('mousedown', handleClickOutside);
22
23
  return () => document.removeEventListener('mousedown', handleClickOutside);
23
24
  }, [open]);
24
- return (_jsxs("div", { ref: ref, style: { position: 'relative', flexShrink: 0 }, children: [_jsx("style", { dangerouslySetInnerHTML: { __html: STYLES } }), _jsxs("button", { type: "button", className: "wf-menu-btn", onClick: () => setOpen(!open), children: [_jsx("span", { children: label }), _jsx("svg", { width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", style: {
25
- marginLeft: 16,
26
- marginRight: -4,
27
- color: 'var(--ds-gray-900)',
28
- }, children: _jsx("path", { d: "M4.5 6L8 9.5L11.5 6", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })] }), open && (_jsx("div", { style: {
29
- position: 'absolute',
30
- right: 0,
31
- top: '100%',
32
- marginTop: 4,
33
- minWidth: 140,
34
- padding: 4,
35
- borderRadius: 12,
36
- background: 'var(--ds-background-100)',
37
- boxShadow: 'var(--ds-shadow-menu, var(--ds-shadow-medium))',
38
- zIndex: 2001,
39
- }, role: "menu", children: options.map((option) => (_jsx("button", { type: "button", role: "menuitem", className: "wf-menu-item", style: {
40
- fontWeight: option.value === value ? 500 : 400,
41
- }, onClick: () => {
25
+ return (_jsxs("div", { ref: ref, className: "relative shrink-0", children: [_jsx("style", { dangerouslySetInnerHTML: { __html: STYLES } }), _jsxs("button", { type: "button", className: "wf-menu-btn", onClick: () => setOpen(!open), children: [_jsx("span", { children: label }), _jsx("svg", { width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", className: "-mr-1 ml-4 text-gray-900", children: _jsx("path", { d: "M4.5 6L8 9.5L11.5 6", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })] }), open && (_jsx("div", { className: "absolute top-full right-0 z-[2001] mt-1 min-w-[140px] bg-background-100 p-1 material-menu", role: "menu", children: options.map((option) => (_jsx("button", { type: "button", role: "menuitem", className: cn('wf-menu-item', option.value === value ? 'font-medium' : 'font-normal'), onClick: () => {
42
26
  onChange(option.value);
43
27
  setOpen(false);
44
28
  }, children: option.label }, option.value))) }))] }));
45
29
  }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1kcm9wZG93bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3VpL21lbnUtZHJvcGRvd24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFcEQsTUFBTSxNQUFNLEdBQUcscXZCQUFxdkIsQ0FBQztBQWFyd0I7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBNEIsRUFDdEQsT0FBTyxFQUNQLEtBQUssRUFDTCxRQUFRLEdBQ2E7SUFDckIsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFpQixJQUFJLENBQUMsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FDVCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztJQUUzRSxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLFNBQVMsa0JBQWtCLENBQUMsQ0FBYTtZQUN2QyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBYyxDQUFDLEVBQUUsQ0FBQztnQkFDM0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDO1FBQ0QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNELE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFWCxPQUFPLENBQ0wsZUFBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxhQUMzRCxnQkFBTyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBSSxFQUV0RCxrQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLFNBQVMsRUFBQyxhQUFhLEVBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFFN0IseUJBQU8sS0FBSyxHQUFRLEVBQ3BCLGNBQ0UsS0FBSyxFQUFFLEVBQUUsRUFDVCxNQUFNLEVBQUUsRUFBRSxFQUNWLE9BQU8sRUFBQyxXQUFXLEVBQ25CLElBQUksRUFBQyxNQUFNLEVBQ1gsS0FBSyxFQUFFOzRCQUNMLFVBQVUsRUFBRSxFQUFFOzRCQUNkLFdBQVcsRUFBRSxDQUFDLENBQUM7NEJBQ2YsS0FBSyxFQUFFLG9CQUFvQjt5QkFDNUIsWUFFRCxlQUNFLENBQUMsRUFBQyxxQkFBcUIsRUFDdkIsTUFBTSxFQUFDLGNBQWMsRUFDckIsV0FBVyxFQUFDLEtBQUssRUFDakIsYUFBYSxFQUFDLE9BQU8sRUFDckIsY0FBYyxFQUFDLE9BQU8sR0FDdEIsR0FDRSxJQUNDLEVBRVIsSUFBSSxJQUFJLENBQ1AsY0FDRSxLQUFLLEVBQUU7b0JBQ0wsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLEtBQUssRUFBRSxDQUFDO29CQUNSLEdBQUcsRUFBRSxNQUFNO29CQUNYLFNBQVMsRUFBRSxDQUFDO29CQUNaLFFBQVEsRUFBRSxHQUFHO29CQUNiLE9BQU8sRUFBRSxDQUFDO29CQUNWLFlBQVksRUFBRSxFQUFFO29CQUNoQixVQUFVLEVBQUUsMEJBQTBCO29CQUN0QyxTQUFTLEVBQUUsZ0RBQWdEO29CQUMzRCxNQUFNLEVBQUUsSUFBSTtpQkFDYixFQUNELElBQUksRUFBQyxNQUFNLFlBRVYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FDdkIsaUJBRUUsSUFBSSxFQUFDLFFBQVEsRUFDYixJQUFJLEVBQUMsVUFBVSxFQUNmLFNBQVMsRUFBQyxjQUFjLEVBQ3hCLEtBQUssRUFBRTt3QkFDTCxVQUFVLEVBQUUsTUFBTSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztxQkFDL0MsRUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFO3dCQUNaLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakIsQ0FBQyxZQUVBLE1BQU0sQ0FBQyxLQUFLLElBWlIsTUFBTSxDQUFDLEtBQUssQ0FhVixDQUNWLENBQUMsR0FDRSxDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG5jb25zdCBTVFlMRVMgPSBgLndmLW1lbnUtYnRue2FwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3JkZXI6bm9uZTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo0MHB4O3BhZGRpbmc6MCAxMnB4O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOnZhcigtLWRzLWdyYXktMTAwMCk7YmFja2dyb3VuZDp2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCk7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0tZHMtZ3JheS00MDApO2N1cnNvcjpwb2ludGVyO3doaXRlLXNwYWNlOm5vd3JhcDt0cmFuc2l0aW9uOmJhY2tncm91bmQgMTUwbXN9LndmLW1lbnUtYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZHMtZ3JheS1hbHBoYS0yMDApfS53Zi1tZW51LWl0ZW17YXBwZWFyYW5jZTpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JvcmRlcjpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6NDBweDtwYWRkaW5nOjAgOHB4O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnZhcigtLWRzLWdyYXktMTAwMCk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQgMTUwbXN9LndmLW1lbnUtaXRlbTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWRzLWdyYXktYWxwaGEtMTAwKX1gO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVEcm9wZG93bk9wdGlvbjxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIHZhbHVlOiBUO1xuICBsYWJlbDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgTWVudURyb3Bkb3duUHJvcHM8VCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4ge1xuICBvcHRpb25zOiBNZW51RHJvcGRvd25PcHRpb248VD5bXTtcbiAgdmFsdWU6IFQ7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IFQpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBkcm9wZG93biBtZW51IHRoYXQgbWF0Y2hlcyBHZWlzdCdzIE1lbnVCdXR0b24gKHNlY29uZGFyeSkgKyBNZW51IHN0eWxpbmcuXG4gKiBVc2VzIENTUyBjbGFzc2VzIHdpdGggcHJvcGVyIDpob3ZlciBzcGVjaWZpY2l0eSAobm8gaW5saW5lIGJhY2tncm91bmQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gTWVudURyb3Bkb3duPFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KHtcbiAgb3B0aW9ucyxcbiAgdmFsdWUsXG4gIG9uQ2hhbmdlLFxufTogTWVudURyb3Bkb3duUHJvcHM8VD4pIHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBsYWJlbCA9XG4gICAgb3B0aW9ucy5maW5kKChvKSA9PiBvLnZhbHVlID09PSB2YWx1ZSk/LmxhYmVsID8/IG9wdGlvbnNbMF0/LmxhYmVsID8/ICcnO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSByZXR1cm47XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2tPdXRzaWRlKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgIGlmIChyZWYuY3VycmVudCAmJiAhcmVmLmN1cnJlbnQuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gIH0sIFtvcGVuXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cmVmfSBzdHlsZT17eyBwb3NpdGlvbjogJ3JlbGF0aXZlJywgZmxleFNocmluazogMCB9fT5cbiAgICAgIDxzdHlsZSBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IFNUWUxFUyB9fSAvPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9XCJ3Zi1tZW51LWJ0blwiXG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE9wZW4oIW9wZW4pfVxuICAgICAgPlxuICAgICAgICA8c3Bhbj57bGFiZWx9PC9zcGFuPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgd2lkdGg9ezE2fVxuICAgICAgICAgIGhlaWdodD17MTZ9XG4gICAgICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBtYXJnaW5MZWZ0OiAxNixcbiAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAtNCxcbiAgICAgICAgICAgIGNvbG9yOiAndmFyKC0tZHMtZ3JheS05MDApJyxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNNC41IDZMOCA5LjVMMTEuNSA2XCJcbiAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICBzdHJva2VXaWR0aD1cIjEuNVwiXG4gICAgICAgICAgICBzdHJva2VMaW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAge29wZW4gJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6ICcxMDAlJyxcbiAgICAgICAgICAgIG1hcmdpblRvcDogNCxcbiAgICAgICAgICAgIG1pbldpZHRoOiAxNDAsXG4gICAgICAgICAgICBwYWRkaW5nOiA0LFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxMixcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCknLFxuICAgICAgICAgICAgYm94U2hhZG93OiAndmFyKC0tZHMtc2hhZG93LW1lbnUsIHZhcigtLWRzLXNoYWRvdy1tZWRpdW0pKScsXG4gICAgICAgICAgICB6SW5kZXg6IDIwMDEsXG4gICAgICAgICAgfX1cbiAgICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e29wdGlvbi52YWx1ZX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIndmLW1lbnUtaXRlbVwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogb3B0aW9uLnZhbHVlID09PSB2YWx1ZSA/IDUwMCA6IDQwMCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1kcm9wZG93bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3VpL21lbnUtZHJvcGRvd24udHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDcEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVsQyxNQUFNLE1BQU0sR0FBRyxxdkJBQXF2QixDQUFDO0FBYXJ3Qjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUE0QixFQUN0RCxPQUFPLEVBQ1AsS0FBSyxFQUNMLFFBQVEsR0FDYTtJQUNyQixNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQWlCLElBQUksQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUNULE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQUUsS0FBSyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0lBRTNFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsU0FBUyxrQkFBa0IsQ0FBQyxDQUFhO1lBQ3ZDLElBQUksR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFjLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsQ0FBQztRQUNILENBQUM7UUFDRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDM0QsT0FBTyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDN0UsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVYLE9BQU8sQ0FDTCxlQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLG1CQUFtQixhQUMxQyxnQkFBTyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBSSxFQUV0RCxrQkFDRSxJQUFJLEVBQUMsUUFBUSxFQUNiLFNBQVMsRUFBQyxhQUFhLEVBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFFN0IseUJBQU8sS0FBSyxHQUFRLEVBQ3BCLGNBQ0UsS0FBSyxFQUFFLEVBQUUsRUFDVCxNQUFNLEVBQUUsRUFBRSxFQUNWLE9BQU8sRUFBQyxXQUFXLEVBQ25CLElBQUksRUFBQyxNQUFNLEVBQ1gsU0FBUyxFQUFDLDBCQUEwQixZQUVwQyxlQUNFLENBQUMsRUFBQyxxQkFBcUIsRUFDdkIsTUFBTSxFQUFDLGNBQWMsRUFDckIsV0FBVyxFQUFDLEtBQUssRUFDakIsYUFBYSxFQUFDLE9BQU8sRUFDckIsY0FBYyxFQUFDLE9BQU8sR0FDdEIsR0FDRSxJQUNDLEVBRVIsSUFBSSxJQUFJLENBQ1AsY0FDRSxTQUFTLEVBQUMsMkZBQTJGLEVBQ3JHLElBQUksRUFBQyxNQUFNLFlBRVYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FDdkIsaUJBRUUsSUFBSSxFQUFDLFFBQVEsRUFDYixJQUFJLEVBQUMsVUFBVSxFQUNmLFNBQVMsRUFBRSxFQUFFLENBQ1gsY0FBYyxFQUNkLE1BQU0sQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FDdkQsRUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFO3dCQUNaLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3ZCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakIsQ0FBQyxZQUVBLE1BQU0sQ0FBQyxLQUFLLElBWlIsTUFBTSxDQUFDLEtBQUssQ0FhVixDQUNWLENBQUMsR0FDRSxDQUNQLElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi9saWIvY24nO1xuXG5jb25zdCBTVFlMRVMgPSBgLndmLW1lbnUtYnRue2FwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3JkZXI6bm9uZTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo0MHB4O3BhZGRpbmc6MCAxMnB4O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOnZhcigtLWRzLWdyYXktMTAwMCk7YmFja2dyb3VuZDp2YXIoLS1kcy1iYWNrZ3JvdW5kLTEwMCk7Ym94LXNoYWRvdzowIDAgMCAxcHggdmFyKC0tZHMtZ3JheS00MDApO2N1cnNvcjpwb2ludGVyO3doaXRlLXNwYWNlOm5vd3JhcDt0cmFuc2l0aW9uOmJhY2tncm91bmQgMTUwbXN9LndmLW1lbnUtYnRuOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tZHMtZ3JheS1hbHBoYS0yMDApfS53Zi1tZW51LWl0ZW17YXBwZWFyYW5jZTpub25lOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JvcmRlcjpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6NDBweDtwYWRkaW5nOjAgOHB4O2JvcmRlci1yYWRpdXM6NnB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOnZhcigtLWRzLWdyYXktMTAwMCk7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjdXJzb3I6cG9pbnRlcjt0cmFuc2l0aW9uOmJhY2tncm91bmQgMTUwbXN9LndmLW1lbnUtaXRlbTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWRzLWdyYXktYWxwaGEtMTAwKX1gO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lbnVEcm9wZG93bk9wdGlvbjxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiB7XG4gIHZhbHVlOiBUO1xuICBsYWJlbDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgTWVudURyb3Bkb3duUHJvcHM8VCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4ge1xuICBvcHRpb25zOiBNZW51RHJvcGRvd25PcHRpb248VD5bXTtcbiAgdmFsdWU6IFQ7XG4gIG9uQ2hhbmdlOiAodmFsdWU6IFQpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBkcm9wZG93biBtZW51IHRoYXQgbWF0Y2hlcyBHZWlzdCdzIE1lbnVCdXR0b24gKHNlY29uZGFyeSkgKyBNZW51IHN0eWxpbmcuXG4gKiBVc2VzIENTUyBjbGFzc2VzIHdpdGggcHJvcGVyIDpob3ZlciBzcGVjaWZpY2l0eSAobm8gaW5saW5lIGJhY2tncm91bmQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gTWVudURyb3Bkb3duPFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KHtcbiAgb3B0aW9ucyxcbiAgdmFsdWUsXG4gIG9uQ2hhbmdlLFxufTogTWVudURyb3Bkb3duUHJvcHM8VD4pIHtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBsYWJlbCA9XG4gICAgb3B0aW9ucy5maW5kKChvKSA9PiBvLnZhbHVlID09PSB2YWx1ZSk/LmxhYmVsID8/IG9wdGlvbnNbMF0/LmxhYmVsID8/ICcnO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSByZXR1cm47XG4gICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2tPdXRzaWRlKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgIGlmIChyZWYuY3VycmVudCAmJiAhcmVmLmN1cnJlbnQuY29udGFpbnMoZS50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSk7XG4gIH0sIFtvcGVuXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cmVmfSBjbGFzc05hbWU9XCJyZWxhdGl2ZSBzaHJpbmstMFwiPlxuICAgICAgPHN0eWxlIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogU1RZTEVTIH19IC8+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT1cIndmLW1lbnUtYnRuXCJcbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0T3Blbighb3Blbil9XG4gICAgICA+XG4gICAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgICAgIDxzdmdcbiAgICAgICAgICB3aWR0aD17MTZ9XG4gICAgICAgICAgaGVpZ2h0PXsxNn1cbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgY2xhc3NOYW1lPVwiLW1yLTEgbWwtNCB0ZXh0LWdyYXktOTAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTQuNSA2TDggOS41TDExLjUgNlwiXG4gICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIHtvcGVuICYmIChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIHRvcC1mdWxsIHJpZ2h0LTAgei1bMjAwMV0gbXQtMSBtaW4tdy1bMTQwcHhdIGJnLWJhY2tncm91bmQtMTAwIHAtMSBtYXRlcmlhbC1tZW51XCJcbiAgICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e29wdGlvbi52YWx1ZX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgJ3dmLW1lbnUtaXRlbScsXG4gICAgICAgICAgICAgICAgb3B0aW9uLnZhbHVlID09PSB2YWx1ZSA/ICdmb250LW1lZGl1bScgOiAnZm9udC1ub3JtYWwnXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICBvbkNoYW5nZShvcHRpb24udmFsdWUpO1xuICAgICAgICAgICAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cn } from '../../lib/cn';
3
3
  function Skeleton({ className, style, ...props }) {
4
- return (_jsx("div", { ...props, className: cn('rounded-md', className), style: { backgroundColor: 'var(--ds-gray-200)', ...style } }));
4
+ return (_jsx("div", { ...props, className: cn('rounded-md bg-gray-200', className), style: style }));
5
5
  }
6
6
  export { Skeleton };
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9za2VsZXRvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEMsU0FBUyxRQUFRLENBQUMsRUFDaEIsU0FBUyxFQUNULEtBQUssRUFDTCxHQUFHLEtBQUssRUFDNkI7SUFDckMsT0FBTyxDQUNMLGlCQUNNLEtBQUssRUFDVCxTQUFTLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsRUFDdEMsS0FBSyxFQUFFLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQzFELENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi9jbic7XG5cbmZ1bmN0aW9uIFNrZWxldG9uKHtcbiAgY2xhc3NOYW1lLFxuICBzdHlsZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIGNsYXNzTmFtZT17Y24oJ3JvdW5kZWQtbWQnLCBjbGFzc05hbWUpfVxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tZHMtZ3JheS0yMDApJywgLi4uc3R5bGUgfX1cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgeyBTa2VsZXRvbiB9O1xuIl19
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9za2VsZXRvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbEMsU0FBUyxRQUFRLENBQUMsRUFDaEIsU0FBUyxFQUNULEtBQUssRUFDTCxHQUFHLEtBQUssRUFDNkI7SUFDckMsT0FBTyxDQUNMLGlCQUNNLEtBQUssRUFDVCxTQUFTLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixFQUFFLFNBQVMsQ0FBQyxFQUNsRCxLQUFLLEVBQUUsS0FBSyxHQUNaLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFFRCxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi9jbic7XG5cbmZ1bmN0aW9uIFNrZWxldG9uKHtcbiAgY2xhc3NOYW1lLFxuICBzdHlsZSxcbiAgLi4ucHJvcHNcbn06IFJlYWN0LkhUTUxBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5wcm9wc31cbiAgICAgIGNsYXNzTmFtZT17Y24oJ3JvdW5kZWQtbWQgYmctZ3JheS0yMDAnLCBjbGFzc05hbWUpfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCB7IFNrZWxldG9uIH07XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/components/ui/spinner.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAS,EACT,KAAK,GACN,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,2CA+DA"}
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/components/ui/spinner.tsx"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EACtB,IAAS,EACT,KAAK,GACN,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,2CA2DA"}