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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/README.md +4 -4
  2. package/dist/components/event-list-view.d.ts +12 -0
  3. package/dist/components/event-list-view.d.ts.map +1 -1
  4. package/dist/components/event-list-view.js +41 -20
  5. package/dist/components/sidebar/attribute-panel.d.ts +6 -2
  6. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  7. package/dist/components/sidebar/attribute-panel.js +10 -8
  8. package/dist/components/sidebar/copyable-data-block.d.ts.map +1 -1
  9. package/dist/components/sidebar/copyable-data-block.js +2 -2
  10. package/dist/components/sidebar/entity-detail-panel.d.ts +6 -2
  11. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  12. package/dist/components/sidebar/entity-detail-panel.js +13 -5
  13. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  14. package/dist/components/sidebar/events-list.js +12 -5
  15. package/dist/components/sidebar/resolve-hook-modal.js +1 -1
  16. package/dist/components/sidebar/sidebar-data-context.d.ts +2 -0
  17. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -1
  18. package/dist/components/sidebar/sidebar-data-context.js +1 -1
  19. package/dist/components/stream-viewer.js +2 -2
  20. package/dist/components/trace-viewer/components/detail-panel-width.d.ts +4 -4
  21. package/dist/components/trace-viewer/components/detail-panel-width.d.ts.map +1 -1
  22. package/dist/components/trace-viewer/components/detail-panel-width.js +5 -5
  23. package/dist/components/trace-viewer/components/detail-panel.d.ts +1 -1
  24. package/dist/components/trace-viewer/components/detail-panel.d.ts.map +1 -1
  25. package/dist/components/trace-viewer/components/detail-panel.js +3 -3
  26. package/dist/components/trace-viewer/components/draggable-border.d.ts +1 -1
  27. package/dist/components/trace-viewer/components/draggable-border.js +2 -2
  28. package/dist/components/trace-viewer/components/minimap.js +4 -4
  29. package/dist/components/trace-viewer/components/span-markers.d.ts +8 -9
  30. package/dist/components/trace-viewer/components/span-markers.d.ts.map +1 -1
  31. package/dist/components/trace-viewer/components/span-markers.js +13 -10
  32. package/dist/components/trace-viewer/components/timeline.d.ts +1 -1
  33. package/dist/components/trace-viewer/components/timeline.js +4 -4
  34. package/dist/components/trace-viewer/components/use-row-window.d.ts +1 -1
  35. package/dist/components/trace-viewer/components/use-row-window.js +2 -2
  36. package/dist/components/trace-viewer/trace-viewer.js +3 -3
  37. package/dist/components/trace-viewer/utils.d.ts +3 -1
  38. package/dist/components/trace-viewer/utils.d.ts.map +1 -1
  39. package/dist/components/trace-viewer/utils.js +6 -5
  40. package/dist/components/ui/data-inspector.d.ts +7 -1
  41. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  42. package/dist/components/ui/data-inspector.js +10 -5
  43. package/dist/components/ui/decrypt-button.d.ts +5 -1
  44. package/dist/components/ui/decrypt-button.d.ts.map +1 -1
  45. package/dist/components/ui/decrypt-button.js +4 -4
  46. package/dist/components/ui/duplicate-event-tooltip.d.ts +15 -5
  47. package/dist/components/ui/duplicate-event-tooltip.d.ts.map +1 -1
  48. package/dist/components/ui/duplicate-event-tooltip.js +18 -9
  49. package/dist/components/ui/error-stack-block.js +4 -4
  50. package/dist/components/ui/timestamp-tooltip.d.ts +5 -3
  51. package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
  52. package/dist/components/ui/timestamp-tooltip.js +9 -9
  53. package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
  54. package/dist/components/workflow-traces/event-colors.js +11 -1
  55. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  56. package/dist/components/workflow-traces/trace-span-construction.js +5 -4
  57. package/dist/index.d.ts +1 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +2 -1
  60. package/dist/lib/duplicate-events.d.ts +1 -1
  61. package/dist/lib/duplicate-events.js +2 -2
  62. package/dist/lib/hydration.d.ts.map +1 -1
  63. package/dist/lib/hydration.js +8 -13
  64. package/dist/lib/sealed-events.d.ts +28 -0
  65. package/dist/lib/sealed-events.d.ts.map +1 -0
  66. package/dist/lib/sealed-events.js +30 -0
  67. package/dist/lib/trace-builder.d.ts.map +1 -1
  68. package/dist/lib/trace-builder.js +8 -5
  69. package/dist/lib/utils.d.ts +1 -1
  70. package/dist/lib/utils.js +2 -2
  71. package/dist/lib/zstd-browser-decoder.js +2 -2
  72. package/package.json +5 -5
  73. package/src/components/event-list-view.tsx +57 -22
  74. package/src/components/sidebar/attribute-panel.tsx +15 -7
  75. package/src/components/sidebar/copyable-data-block.tsx +8 -1
  76. package/src/components/sidebar/entity-detail-panel.tsx +18 -2
  77. package/src/components/sidebar/events-list.tsx +16 -6
  78. package/src/components/sidebar/resolve-hook-modal.tsx +2 -2
  79. package/src/components/sidebar/sidebar-data-context.tsx +2 -0
  80. package/src/components/stream-viewer.tsx +1 -1
  81. package/src/components/trace-viewer/components/detail-panel-width.ts +4 -4
  82. package/src/components/trace-viewer/components/detail-panel.tsx +3 -1
  83. package/src/components/trace-viewer/components/draggable-border.tsx +1 -1
  84. package/src/components/trace-viewer/components/minimap.tsx +3 -3
  85. package/src/components/trace-viewer/components/span-markers.tsx +18 -13
  86. package/src/components/trace-viewer/components/timeline.tsx +4 -4
  87. package/src/components/trace-viewer/components/use-row-window.ts +1 -1
  88. package/src/components/trace-viewer/trace-viewer.tsx +2 -2
  89. package/src/components/trace-viewer/utils.test.ts +5 -3
  90. package/src/components/trace-viewer/utils.ts +12 -8
  91. package/src/components/ui/data-inspector.tsx +19 -3
  92. package/src/components/ui/decrypt-button.tsx +9 -2
  93. package/src/components/ui/duplicate-event-tooltip.tsx +32 -10
  94. package/src/components/ui/error-stack-block.tsx +3 -3
  95. package/src/components/ui/timestamp-tooltip.tsx +16 -6
  96. package/src/components/workflow-traces/event-colors.ts +11 -0
  97. package/src/components/workflow-traces/trace-span-construction.test.ts +27 -1
  98. package/src/components/workflow-traces/trace-span-construction.ts +5 -3
  99. package/src/index.ts +4 -0
  100. package/src/lib/duplicate-events.ts +1 -1
  101. package/src/lib/hydration.ts +7 -12
  102. package/src/lib/sealed-events.ts +32 -0
  103. package/src/lib/trace-builder.test.ts +29 -1
  104. package/src/lib/trace-builder.ts +10 -5
  105. package/src/lib/utils.ts +1 -1
  106. package/src/lib/zstd-browser-decoder.ts +1 -1
@@ -130,7 +130,7 @@ function TraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore, }) {
130
130
  animateTo({ start: root.startTime, end: root.startTime + root.duration });
131
131
  }, [animateTo, root.startTime, root.duration]);
132
132
  const clampToRoot = useCallback((next) => clampViewportToRoot(next, root.startTime, root.endTime, MIN_VIEWPORT_MS), [root.startTime, root.endTime]);
133
- // Pan (keeping the current zoom) so `timeMs` is centered in view used by the
133
+ // Pan (keeping the current zoom) so `timeMs` is centered in view; used by the
134
134
  // off-screen marker indicators to scroll their marker into view.
135
135
  const handleRevealTime = useCallback((timeMs) => {
136
136
  const { start, end } = viewportRef.current;
@@ -184,7 +184,7 @@ function TraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore, }) {
184
184
  ]);
185
185
  // Bring a row into view when keyboard/button navigation lands on a span that
186
186
  // sits outside the shared scroll container's visible area. The list is
187
- // windowed, so an off-screen row has no DOM node to `scrollIntoView` —
187
+ // windowed, so an off-screen row has no DOM node to `scrollIntoView`;
188
188
  // `scrollRowIntoView` computes the target offset from the span's index.
189
189
  const scrollSpanIntoView = useCallback((spanId) => {
190
190
  const index = trace.spans.findIndex((s) => s.spanId === spanId);
@@ -333,4 +333,4 @@ function TraceViewerContent({ trace, onLoadMore, hasMore, isLoadingMore, }) {
333
333
  }
334
334
  }, placeholder: "Search spans...", "aria-label": "Search spans", className: "flex-1 min-w-0 bg-transparent text-label-14 text-gray-1000 placeholder:text-gray-800 outline-none" }), searchQuery && (_jsx("button", { type: "button", "aria-label": "Clear search", onClick: () => setSearchQuery(''), className: "-mr-2 hidden h-full max-w-full shrink-0 cursor-pointer items-center rounded-r-md border-0 bg-transparent px-2.5 font-inherit text-label-16 text-gray-900 no-underline transition-colors duration-150 ease-in hover:text-gray-1000 focus-visible:-outline-offset-1 focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--ds-focus-color)] min-[961px]:flex", children: _jsx(Kbd, { variant: "outline", size: "search", children: "Esc" }) }))] }), endHeader: _jsx(TimelineHeader, { markers: timeMarkers, hoverInfo: hoverInfo }), children: [_jsxs("div", { className: "block overflow-visible", children: [_jsx(EventList, { spans: trace.spans, activeSpanId: activeSpanId, searchResult: searchResult, onSelectSpan: handleSelectSpan }), _jsx("div", { ref: loadMoreSentinelRef, className: "flex justify-center", children: isLoadingMore ? (_jsxs("div", { className: "flex items-center justify-center gap-2 py-3 text-label-14 text-gray-800", children: [_jsx(Spinner, { size: 14 }), _jsx("span", { children: "Loading spans\u2026" })] })) : null })] }), _jsx("div", { ref: timelineRef, id: "trace-timeline", className: "@container block min-h-0 overflow-visible relative", onDoubleClick: resetZoom, onMouseMove: handleTimelineMouseMove, onMouseLeave: handleTimelineMouseLeave, children: _jsx(Timeline, { spans: trace.spans, viewStart: viewport.start, viewEnd: viewport.end, markers: timeMarkers, selectedId: activeSpanId, searchResult: searchResult, onSelect: handleSelectSpan, onRevealTime: handleRevealTime, hover: hover, altHeld: altHeld }) }), _jsxs(_Fragment, { children: [_jsx(TraceShortcutHelper, { hasMultipleSpans: trace.spans.length > 1, reducedMotion: reducedMotion }), _jsxs("div", { className: "pointer-events-auto flex items-center border border-gray-alpha-400 rounded-md bg-background-100 shadow-sm overflow-hidden divide-x divide-gray-alpha-400", children: [_jsx(IconButton, { variant: "muted", size: "small", onClick: zoomOut, disabled: isAtMinZoom, "aria-label": "Zoom out", children: _jsx(ZoomOut, { className: "w-4 h-4" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: resetZoom, "aria-label": "Reset zoom", children: _jsx(RotateCcw, { className: "w-3.5 h-3.5" }) }), _jsx(IconButton, { variant: "muted", size: "small", onClick: zoomIn, disabled: isAtMaxZoom, "aria-label": "Zoom in", children: _jsx(ZoomIn, { className: "w-4 h-4" }) })] })] })] })] }), _jsx(TraceDetailPanel, { containerRef: paneRootRef, onNavigateToSpan: navigateToSpan, onClose: handleClearActiveSpan })] }));
335
335
  }
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL3RyYWNlLXZpZXdlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUVMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULE9BQU8sRUFDUCxNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sU0FBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsY0FBYyxHQUVmLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUVsQixrQkFBa0IsRUFDbEIsb0JBQW9CLEdBQ3JCLE1BQU0sU0FBUyxDQUFDO0FBU2pCLE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQztBQUU5QixNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQztBQUU3QixTQUFTLG1CQUFtQixDQUFDLE9BQXNCO0lBQ2pELE1BQU0sQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxRQUFRLENBQWdCLE9BQU8sQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FLWixJQUFJLENBQUMsQ0FBQztJQUNoQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsVUFBVSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7SUFDOUIsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUV6QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQzlCLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVQLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FDM0IsQ0FBQyxNQUFxQixFQUFFLEVBQUU7UUFDeEIsTUFBTSxFQUFFLENBQUM7UUFFVCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1lBQzVCLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUNoQyxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBRXBFLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtZQUNoQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEUsZ0JBQWdCLENBQUM7Z0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO2dCQUM5RCxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7YUFDdkQsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQztnQkFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDOztnQkFDN0MsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQyxDQUFDO1FBRUYsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDLEVBQ0QsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQ3hCLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQzdCLENBQUMsTUFBZ0UsRUFBRSxFQUFFO1FBQ25FLE1BQU0sRUFBRSxDQUFDO1FBQ1QsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNqQyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUN4QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixVQUFVLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUM1QixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQyxFQUNELENBQUMsTUFBTSxDQUFDLENBQ1QsQ0FBQztJQUVGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRWxDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQzlDLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsaUJBQWlCO0FBQ2pCLDhFQUE4RTtBQUU5RSxNQUFNLFVBQVUsV0FBVyxDQUFDLEVBQzFCLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxFQUNQLGFBQWEsR0FDSTtJQUNqQixPQUFPLENBQ0wsS0FBQyxlQUFlLElBQUMsYUFBYSxFQUFFLEdBQUcsWUFDakMsS0FBQyxrQkFBa0IsSUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssWUFDcEMsS0FBQyxrQkFBa0IsSUFDakIsS0FBSyxFQUFFLEtBQUssRUFDWixVQUFVLEVBQUUsVUFBVSxFQUN0QixPQUFPLEVBQUUsT0FBTyxFQUNoQixhQUFhLEVBQUUsYUFBYSxHQUM1QixHQUNpQixHQUNMLENBQ25CLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxFQUMxQixLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUCxhQUFhLEdBQ0k7SUFDakIsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7SUFFekUsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztJQUV6QyxNQUFNLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRCxNQUFNLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTFELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFFakQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUMxQixHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxtQkFBbUIsQ0FBQyxFQUNuRCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FDbkMsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUUxRSxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDeEQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNoQyxLQUFLLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDdEIsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNqQixNQUFNLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLFFBQVEsRUFBRTtRQUN4RCxPQUFPLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUM7UUFDdkMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDckMsT0FBTyxFQUFFLGtCQUFrQjtLQUM1QixDQUFDLENBQUM7SUFFSCxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxtQkFBbUIsQ0FBQztRQUMvRCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVM7UUFDckIsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVE7S0FDcEMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFnQjtRQUN4QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVM7UUFDckIsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVE7S0FDcEMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFOUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbkIsTUFBTSxlQUFlLEdBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSTtnQkFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFFM0MsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzFDLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsV0FBVyxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3pELENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBRWpELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUVuRCx5RUFBeUU7SUFDekUsNkVBQTZFO0lBQzdFLHNEQUFzRDtJQUN0RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsV0FBVyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7SUFFL0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUN6QixHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3ZFLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMvQyxDQUFDO0lBRUYsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtRQUNqQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUUvQyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQzdCLENBQUMsSUFBbUIsRUFBaUIsRUFBRSxDQUNyQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxFQUMxRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUMvQixDQUFDO0lBRUYsK0VBQStFO0lBQy9FLGlFQUFpRTtJQUNqRSxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FDbEMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNqQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUM3QixTQUFTLENBQ1AsV0FBVyxDQUFDO1lBQ1YsS0FBSyxFQUFFLE1BQU0sR0FBRyxRQUFRLEdBQUcsQ0FBQztZQUM1QixHQUFHLEVBQUUsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDO1NBQzNCLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQyxFQUNELENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUN6QixDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBRXhCLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FDeEIsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNqQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDM0MsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLFNBQVMsQ0FDUCxXQUFXLENBQUM7WUFDVixLQUFLLEVBQUUsTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDO1lBQy9CLEdBQUcsRUFBRSxNQUFNLEdBQUcsV0FBVyxHQUFHLENBQUM7U0FDOUIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDLEVBQ0QsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQ3pCLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNoRSxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDckUsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDbEQsTUFBTSxXQUFXLEdBQUcsWUFBWSxJQUFJLGVBQWUsQ0FBQztJQUVwRCxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FDckMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNqQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEIsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sWUFBWSxHQUFHLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFFekMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDeEQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksUUFBUSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDbkMsSUFBSSxNQUFNLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUUvQixJQUFJLE1BQU0sR0FBRyxRQUFRLEdBQUcsZUFBZSxFQUFFLENBQUM7WUFDeEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLFFBQVEsR0FBRyxNQUFNLEdBQUcsZUFBZSxHQUFHLENBQUMsQ0FBQztZQUN4QyxNQUFNLEdBQUcsTUFBTSxHQUFHLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDeEMsQ0FBQztRQUVELFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQyxFQUNEO1FBQ0UsU0FBUztRQUNULEtBQUssQ0FBQyxLQUFLO1FBQ1gsSUFBSSxDQUFDLFNBQVM7UUFDZCxJQUFJLENBQUMsT0FBTztRQUNaLElBQUksQ0FBQyxRQUFRO1FBQ2IsV0FBVztLQUNaLENBQ0YsQ0FBQztJQUVGLDZFQUE2RTtJQUM3RSx1RUFBdUU7SUFDdkUsdUVBQXVFO0lBQ3ZFLHdFQUF3RTtJQUN4RSxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FDcEMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNqQixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNoRSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7WUFBRSxPQUFPO1FBRXpCLE1BQU0sSUFBSSxHQUNSLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQWMsYUFBYSxDQUFDO1lBQ3JFLElBQUksQ0FBQztRQUNQLGlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1lBQzVDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUTtTQUM1QyxDQUFDLENBQUM7SUFDTCxDQUFDLEVBQ0QsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUM3QixDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUF1QyxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDekMsSUFBSSxZQUFZLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xDLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsWUFBWSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNQLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUV4RCxNQUFNLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7UUFDN0MsaUJBQWlCLEVBQUUsQ0FBQztRQUNwQixlQUFlLEVBQUUsQ0FBQztJQUNwQixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBRXpDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUNsQyxDQUFDLE1BQWMsRUFBRSxFQUFFO1FBQ2pCLGlCQUFpQixFQUFFLENBQUM7UUFDcEIsSUFBSSxNQUFNLEtBQUssWUFBWSxFQUFFLENBQUM7WUFDNUIsZUFBZSxFQUFFLENBQUM7WUFDbEIsT0FBTztRQUNULENBQUM7UUFDRCxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEIsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsQ0FBQyxFQUNEO1FBQ0UsaUJBQWlCO1FBQ2pCLFlBQVk7UUFDWixlQUFlO1FBQ2YsYUFBYTtRQUNiLG1CQUFtQjtLQUNwQixDQUNGLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQ2hDLENBQUMsTUFBYyxFQUFFLEVBQUU7UUFDakIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLGlCQUFpQixFQUFFLENBQUM7UUFDcEIsWUFBWSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3JDLFlBQVksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQzVCLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsRUFDRCxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUM1RSxDQUFDO0lBRUYsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFOUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBZ0IsRUFBUSxFQUFFO1lBQzNDLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdkIscUJBQXFCLEVBQUUsQ0FBQztZQUMxQixDQUFDO2lCQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDM0IsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQWdCLEVBQVEsRUFBRTtZQUN6QyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSztnQkFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsR0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTdDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0lBRTVCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBaUIsSUFBSSxDQUFDLENBQUM7SUFDakQsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLENBQXVCLElBQUksQ0FBQyxDQUFDO0lBRS9ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUU7UUFDN0IsSUFBSSxLQUFLLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQy9CLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUM7UUFDL0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQzVFLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUUxRCxNQUFNLHVCQUF1QixHQUFHLFdBQVcsQ0FDekMsQ0FBQyxDQUFtQyxFQUFFLEVBQUU7UUFDdEMsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFDMUQsSUFBSSxZQUFZLElBQUksQ0FBQztZQUFFLE9BQU87UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDdkIsQ0FBQyxFQUNELElBQUksQ0FBQyxHQUFHLENBQ04sQ0FBQyxFQUNELENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsWUFBWSxDQUM3RCxDQUNGLENBQUM7UUFDRixRQUFRLENBQUM7WUFDUCxRQUFRO1lBQ1IsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUM7U0FDN0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO0lBRUYsTUFBTSx3QkFBd0IsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1FBQ2hELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQztZQUFFLE9BQU87UUFFdEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFhLEVBQVEsRUFBRTtZQUN0QyxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDN0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFMUQsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLFNBQVM7Z0JBQUUsT0FBTztZQUN6QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFbkIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDMUQsSUFBSSxZQUFZLElBQUksQ0FBQztnQkFBRSxPQUFPO1lBRTlCLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQzdCLENBQUMsRUFDRCxJQUFJLENBQUMsR0FBRyxDQUNOLENBQUMsRUFDRCxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLFlBQVksQ0FDN0QsQ0FDRixDQUFDO2dCQUNGLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUU1QyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDbkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUMzQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLGNBQWMsR0FBRyxZQUFZLENBQUM7b0JBQzlELDhEQUE4RDtvQkFDOUQsdURBQXVEO29CQUN2RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUMxQixlQUFlLEVBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksR0FBRyxXQUFXLENBQUMsQ0FDcEQsQ0FBQztvQkFDRixPQUFPLFdBQVcsQ0FBQzt3QkFDakIsS0FBSyxFQUFFLFVBQVUsR0FBRyxjQUFjLEdBQUcsV0FBVzt3QkFDaEQsR0FBRyxFQUFFLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxXQUFXO3FCQUNyRCxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxFQUFFLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNuQixNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNoRSxPQUFPLFdBQVcsQ0FBQzt3QkFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUzt3QkFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsU0FBUztxQkFDMUIsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUQsT0FBTyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFFOUMsT0FBTyxDQUNMLGVBQ0UsR0FBRyxFQUFFLFdBQVcsZUFDTixXQUFXLEVBQ3JCLFNBQVMsRUFBQyx3Q0FBd0MsYUFFbEQsZUFDRSxFQUFFLEVBQUMsY0FBYyxFQUNqQixTQUFTLEVBQUMsK0dBQStHLGFBRXpILEtBQUMsT0FBTyxJQUNOLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUNsQixJQUFJLEVBQUUsSUFBSSxFQUNWLFFBQVEsRUFBRSxRQUFRLEVBQ2xCLGFBQWEsRUFBRSxlQUFlLEVBQzlCLGdCQUFnQixFQUFFLFdBQVcsRUFDN0IsV0FBVyxFQUFFLFNBQVMsR0FDdEIsRUFDRixNQUFDLFNBQVMsSUFDUixrQkFBa0IsRUFBRSxrQkFBa0IsRUFDdEMsV0FBVyxFQUNULGVBQUssU0FBUyxFQUFDLG9HQUFvRyxhQUNqSCxLQUFDLE1BQU0sSUFBQyxTQUFTLEVBQUMsb0NBQW9DLEdBQUcsRUFDekQsZ0JBQ0UsRUFBRSxFQUFDLHFCQUFxQixFQUN4QixJQUFJLEVBQUMscUJBQXFCLEVBQzFCLElBQUksRUFBQyxNQUFNLEVBQ1gsS0FBSyxFQUFFLFdBQVcsRUFDbEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDL0MsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0NBQ2YsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxXQUFXLEVBQUUsQ0FBQzs0Q0FDdEMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDOzRDQUNuQixDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7NENBQ3BCLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3Q0FDckIsQ0FBQztvQ0FDSCxDQUFDLEVBQ0QsV0FBVyxFQUFDLGlCQUFpQixnQkFDbEIsY0FBYyxFQUN6QixTQUFTLEVBQUMsbUdBQW1HLEdBQzdHLEVBQ0QsV0FBVyxJQUFJLENBQ2QsaUJBQ0UsSUFBSSxFQUFDLFFBQVEsZ0JBQ0YsY0FBYyxFQUN6QixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxFQUNqQyxTQUFTLEVBQUMsZ1hBQWdYLFlBRTFYLEtBQUMsR0FBRyxJQUFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsSUFBSSxFQUFDLFFBQVEsb0JBRTlCLEdBQ0MsQ0FDVixJQUNHLEVBRVIsU0FBUyxFQUNQLEtBQUMsY0FBYyxJQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBSSxhQUdoRSxlQUFLLFNBQVMsRUFBQyx3QkFBd0IsYUFDckMsS0FBQyxTQUFTLElBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQ2xCLFlBQVksRUFBRSxZQUFZLEVBQzFCLFlBQVksRUFBRSxZQUFZLEVBQzFCLFlBQVksRUFBRSxnQkFBZ0IsR0FDOUIsRUFDRixjQUFLLEdBQUcsRUFBRSxtQkFBbUIsRUFBRSxTQUFTLEVBQUMscUJBQXFCLFlBQzNELGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FDZixlQUFLLFNBQVMsRUFBQyx5RUFBeUUsYUFDdEYsS0FBQyxPQUFPLElBQUMsSUFBSSxFQUFFLEVBQUUsR0FBSSxFQUNyQixpREFBMkIsSUFDdkIsQ0FDUCxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQ0osSUFDRixFQUVOLGNBQ0UsR0FBRyxFQUFFLFdBQVcsRUFDaEIsRUFBRSxFQUFDLGdCQUFnQixFQUNuQixTQUFTLEVBQUMsb0RBQW9ELEVBQzlELGFBQWEsRUFBRSxTQUFTLEVBQ3hCLFdBQVcsRUFBRSx1QkFBdUIsRUFDcEMsWUFBWSxFQUFFLHdCQUF3QixZQUV0QyxLQUFDLFFBQVEsSUFDUCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFDbEIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQ3pCLE9BQU8sRUFBRSxRQUFRLENBQUMsR0FBRyxFQUNyQixPQUFPLEVBQUUsV0FBVyxFQUNwQixVQUFVLEVBQUUsWUFBWSxFQUN4QixZQUFZLEVBQUUsWUFBWSxFQUMxQixRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLFlBQVksRUFBRSxnQkFBZ0IsRUFDOUIsS0FBSyxFQUFFLEtBQUssRUFDWixPQUFPLEVBQUUsT0FBTyxHQUNoQixHQUNFLEVBQ04sOEJBQ0UsS0FBQyxtQkFBbUIsSUFDbEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4QyxhQUFhLEVBQUUsYUFBYSxHQUM1QixFQUNGLGVBQUssU0FBUyxFQUFDLDBKQUEwSixhQUN2SyxLQUFDLFVBQVUsSUFDVCxPQUFPLEVBQUMsT0FBTyxFQUNmLElBQUksRUFBQyxPQUFPLEVBQ1osT0FBTyxFQUFFLE9BQU8sRUFDaEIsUUFBUSxFQUFFLFdBQVcsZ0JBQ1YsVUFBVSxZQUVyQixLQUFDLE9BQU8sSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEdBQ3BCLEVBQ2IsS0FBQyxVQUFVLElBQ1QsT0FBTyxFQUFDLE9BQU8sRUFDZixJQUFJLEVBQUMsT0FBTyxFQUNaLE9BQU8sRUFBRSxTQUFTLGdCQUNQLFlBQVksWUFFdkIsS0FBQyxTQUFTLElBQUMsU0FBUyxFQUFDLGFBQWEsR0FBRyxHQUMxQixFQUNiLEtBQUMsVUFBVSxJQUNULE9BQU8sRUFBQyxPQUFPLEVBQ2YsSUFBSSxFQUFDLE9BQU8sRUFDWixPQUFPLEVBQUUsTUFBTSxFQUNmLFFBQVEsRUFBRSxXQUFXLGdCQUNWLFNBQVMsWUFFcEIsS0FBQyxNQUFNLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxHQUNuQixJQUNULElBQ0wsSUFDTyxJQUNSLEVBRU4sS0FBQyxnQkFBZ0IsSUFDZixZQUFZLEVBQUUsV0FBVyxFQUN6QixnQkFBZ0IsRUFBRSxjQUFjLEVBQ2hDLE9BQU8sRUFBRSxxQkFBcUIsR0FDOUIsSUFDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBSb3RhdGVDY3csIFNlYXJjaCwgWm9vbUluLCBab29tT3V0IH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7XG4gIHR5cGUgUmVhY3ROb2RlLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRGVmZXJyZWRWYWx1ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMb2FkTW9yZU9uU2Nyb2xsIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLWxvYWQtbW9yZS1vbi1zY3JvbGwnO1xuaW1wb3J0IHsgdXNlUmVkdWNlZE1vdGlvbiB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZS1yZWR1Y2VkLW1vdGlvbic7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vdWkvaWNvbi1idXR0b24nO1xuaW1wb3J0IHsgS2JkIH0gZnJvbSAnLi4vdWkva2JkJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuLi91aS9zcGlubmVyJztcbmltcG9ydCB7IFRvb2x0aXBQcm92aWRlciB9IGZyb20gJy4uL3VpL3Rvb2x0aXAnO1xuaW1wb3J0IHsgVHJhY2VEZXRhaWxQYW5lbCB9IGZyb20gJy4vY29tcG9uZW50cy9kZXRhaWwtcGFuZWwnO1xuaW1wb3J0IEV2ZW50TGlzdCBmcm9tICcuL2NvbXBvbmVudHMvZXZlbnQtbGlzdCc7XG5pbXBvcnQgeyBNaW5pbWFwIH0gZnJvbSAnLi9jb21wb25lbnRzL21pbmltYXAnO1xuaW1wb3J0IHsgU3BsaXRQYW5lIH0gZnJvbSAnLi9jb21wb25lbnRzL3NwbGl0LXBhbmUnO1xuaW1wb3J0IHtcbiAgVElNRUxJTkVfUEFERElOR19QWCxcbiAgVGltZWxpbmUsXG4gIFRpbWVsaW5lSGVhZGVyLFxuICB0eXBlIFRpbWVsaW5lSG92ZXIsXG59IGZyb20gJy4vY29tcG9uZW50cy90aW1lbGluZSc7XG5pbXBvcnQgeyBUcmFjZVNob3J0Y3V0SGVscGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL3RyYWNlLXNob3J0Y3V0LWhlbHBlcic7XG5pbXBvcnQgeyBST1dfSEVJR0hUX1BYLCBzY3JvbGxSb3dJbnRvVmlldyB9IGZyb20gJy4vY29tcG9uZW50cy91c2Utcm93LXdpbmRvdyc7XG5pbXBvcnQgeyBBY3RpdmVTcGFuUHJvdmlkZXIsIHVzZUFjdGl2ZVNwYW4gfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgc2VhcmNoU3BhbnMgfSBmcm9tICcuL3NlYXJjaCc7XG5pbXBvcnQgdHlwZSB7IFRyYWNlV2l0aE1ldGEgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uUHJlY2lzZSwgZ2V0SGlnaFJlc0luTXMgfSBmcm9tICcuL3V0aWwvdGltaW5nJztcbmltcG9ydCB7XG4gIGNsYW1wVmlld3BvcnRUb1Jvb3QsXG4gIGNvbXB1dGVSb290Qm91bmRzLFxuICBjb21wdXRlVGltZU1hcmtlcnMsXG4gIHR5cGUgVmlld3BvcnRSYW5nZSxcbiAgd2hlZWxEZWx0YVRvUGl4ZWxzLFxuICB3aGVlbFpvb21TY2FsZUZhY3Rvcixcbn0gZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBUcmFjZVZpZXdlclByb3BzIHtcbiAgdHJhY2U6IFRyYWNlV2l0aE1ldGE7XG4gIG9uTG9hZE1vcmU/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgaGFzTW9yZT86IGJvb2xlYW47XG4gIGlzTG9hZGluZ01vcmU/OiBib29sZWFuO1xufVxuXG5jb25zdCBNSU5fVklFV1BPUlRfTVMgPSAwLjAwMTtcblxuY29uc3QgWk9PTV9ERUJPVU5DRV9NUyA9IDE1MDtcblxuZnVuY3Rpb24gdXNlQW5pbWF0ZWRWaWV3cG9ydChpbml0aWFsOiBWaWV3cG9ydFJhbmdlKSB7XG4gIGNvbnN0IFt2aWV3cG9ydCwgc2V0Vmlld3BvcnRTdGF0ZV0gPSB1c2VTdGF0ZTxWaWV3cG9ydFJhbmdlPihpbml0aWFsKTtcbiAgY29uc3QgYW5pbVJlZiA9IHVzZVJlZjx7XG4gICAgcmFmOiBudW1iZXI7XG4gICAgZnJvbTogVmlld3BvcnRSYW5nZTtcbiAgICB0bzogVmlld3BvcnRSYW5nZTtcbiAgICBzdGFydDogbnVtYmVyO1xuICB9IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGN1cnJlbnRSZWYgPSB1c2VSZWYoaW5pdGlhbCk7XG4gIGN1cnJlbnRSZWYuY3VycmVudCA9IHZpZXdwb3J0O1xuICBjb25zdCByZWR1Y2VkTW90aW9uID0gdXNlUmVkdWNlZE1vdGlvbigpO1xuXG4gIGNvbnN0IGNhbmNlbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYW5pbVJlZi5jdXJyZW50KSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltUmVmLmN1cnJlbnQucmFmKTtcbiAgICAgIGFuaW1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3QgYW5pbWF0ZVRvID0gdXNlQ2FsbGJhY2soXG4gICAgKHRhcmdldDogVmlld3BvcnRSYW5nZSkgPT4ge1xuICAgICAgY2FuY2VsKCk7XG5cbiAgICAgIGlmIChyZWR1Y2VkTW90aW9uKSB7XG4gICAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IHRhcmdldDtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSh0YXJnZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyb20gPSBjdXJyZW50UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBhbmltID0geyByYWY6IDAsIGZyb20sIHRvOiB0YXJnZXQsIHN0YXJ0OiBwZXJmb3JtYW5jZS5ub3coKSB9O1xuXG4gICAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oKHBlcmZvcm1hbmNlLm5vdygpIC0gYW5pbS5zdGFydCkgLyAyNDAsIDEpO1xuICAgICAgICBjb25zdCBlID0gdCA8IDAuNSA/IDggKiB0ICogdCAqIHQgKiB0IDogMSAtICgtMiAqIHQgKyAyKSAqKiA0IC8gMjtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSh7XG4gICAgICAgICAgc3RhcnQ6IGFuaW0uZnJvbS5zdGFydCArIChhbmltLnRvLnN0YXJ0IC0gYW5pbS5mcm9tLnN0YXJ0KSAqIGUsXG4gICAgICAgICAgZW5kOiBhbmltLmZyb20uZW5kICsgKGFuaW0udG8uZW5kIC0gYW5pbS5mcm9tLmVuZCkgKiBlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHQgPCAxKSBhbmltLnJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgICAgZWxzZSBhbmltUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgYW5pbVJlZi5jdXJyZW50ID0gYW5pbTtcbiAgICAgIGFuaW0ucmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH0sXG4gICAgW2NhbmNlbCwgcmVkdWNlZE1vdGlvbl1cbiAgKTtcblxuICBjb25zdCBzZXRWaWV3cG9ydCA9IHVzZUNhbGxiYWNrKFxuICAgICh1cGRhdGU6IFZpZXdwb3J0UmFuZ2UgfCAoKHByZXY6IFZpZXdwb3J0UmFuZ2UpID0+IFZpZXdwb3J0UmFuZ2UpKSA9PiB7XG4gICAgICBjYW5jZWwoKTtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHNldFZpZXdwb3J0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gdXBkYXRlKHByZXYpO1xuICAgICAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IG5leHQ7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gdXBkYXRlO1xuICAgICAgICBzZXRWaWV3cG9ydFN0YXRlKHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbY2FuY2VsXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWwsIFtjYW5jZWxdKTtcblxuICByZXR1cm4geyB2aWV3cG9ydCwgc2V0Vmlld3BvcnQsIGFuaW1hdGVUbyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJvb3QgY29tcG9uZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIFRyYWNlVmlld2VyKHtcbiAgdHJhY2UsXG4gIG9uTG9hZE1vcmUsXG4gIGhhc01vcmUsXG4gIGlzTG9hZGluZ01vcmUsXG59OiBUcmFjZVZpZXdlclByb3BzKTogUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcFByb3ZpZGVyIGRlbGF5RHVyYXRpb249ezMwMH0+XG4gICAgICA8QWN0aXZlU3BhblByb3ZpZGVyIHNwYW5zPXt0cmFjZS5zcGFuc30+XG4gICAgICAgIDxUcmFjZVZpZXdlckNvbnRlbnRcbiAgICAgICAgICB0cmFjZT17dHJhY2V9XG4gICAgICAgICAgb25Mb2FkTW9yZT17b25Mb2FkTW9yZX1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgIC8+XG4gICAgICA8L0FjdGl2ZVNwYW5Qcm92aWRlcj5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVHJhY2VWaWV3ZXJDb250ZW50KHtcbiAgdHJhY2UsXG4gIG9uTG9hZE1vcmUsXG4gIGhhc01vcmUsXG4gIGlzTG9hZGluZ01vcmUsXG59OiBUcmFjZVZpZXdlclByb3BzKTogUmVhY3ROb2RlIHtcbiAgY29uc3QgeyBhY3RpdmVTcGFuSWQsIHNldEFjdGl2ZVNwYW4sIGNsZWFyQWN0aXZlU3BhbiB9ID0gdXNlQWN0aXZlU3BhbigpO1xuXG4gIGNvbnN0IHJlZHVjZWRNb3Rpb24gPSB1c2VSZWR1Y2VkTW90aW9uKCk7XG5cbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IGRlZmVycmVkU2VhcmNoUXVlcnkgPSB1c2VEZWZlcnJlZFZhbHVlKHNlYXJjaFF1ZXJ5KTtcblxuICBjb25zdCBwYW5lUm9vdFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWFyY2hTcGFucyh0cmFjZS5zcGFucywgZGVmZXJyZWRTZWFyY2hRdWVyeSksXG4gICAgW3RyYWNlLnNwYW5zLCBkZWZlcnJlZFNlYXJjaFF1ZXJ5XVxuICApO1xuXG4gIGNvbnN0IHJvb3QgPSB1c2VNZW1vKCgpID0+IGNvbXB1dGVSb290Qm91bmRzKHRyYWNlLnNwYW5zKSwgW3RyYWNlLnNwYW5zXSk7XG5cbiAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgbG9hZE1vcmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdm9pZCBvbkxvYWRNb3JlPy4oKTtcbiAgfSwgW29uTG9hZE1vcmVdKTtcbiAgY29uc3QgbG9hZE1vcmVTZW50aW5lbFJlZiA9IHVzZUxvYWRNb3JlT25TY3JvbGwobG9hZE1vcmUsIHtcbiAgICBoYXNNb3JlOiBCb29sZWFuKG9uTG9hZE1vcmUgJiYgaGFzTW9yZSksXG4gICAgaXNMb2FkaW5nTW9yZTogQm9vbGVhbihpc0xvYWRpbmdNb3JlKSxcbiAgICByb290UmVmOiBzY3JvbGxDb250YWluZXJSZWYsXG4gIH0pO1xuXG4gIGNvbnN0IHsgdmlld3BvcnQsIHNldFZpZXdwb3J0LCBhbmltYXRlVG8gfSA9IHVzZUFuaW1hdGVkVmlld3BvcnQoe1xuICAgIHN0YXJ0OiByb290LnN0YXJ0VGltZSxcbiAgICBlbmQ6IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbixcbiAgfSk7XG5cbiAgY29uc3QgcHJldlJvb3RSZWYgPSB1c2VSZWY8Vmlld3BvcnRSYW5nZT4oe1xuICAgIHN0YXJ0OiByb290LnN0YXJ0VGltZSxcbiAgICBlbmQ6IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbixcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwcmV2Um9vdCA9IHByZXZSb290UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgbmV3U3RhcnQgPSByb290LnN0YXJ0VGltZTtcbiAgICBjb25zdCBuZXdFbmQgPSByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb247XG5cbiAgICBzZXRWaWV3cG9ydCgocHJldikgPT4ge1xuICAgICAgY29uc3Qgd2FzQXRGdWxsRXh0ZW50ID1cbiAgICAgICAgTWF0aC5hYnMocHJldi5zdGFydCAtIHByZXZSb290LnN0YXJ0KSA8IDAuMDEgJiZcbiAgICAgICAgTWF0aC5hYnMocHJldi5lbmQgLSBwcmV2Um9vdC5lbmQpIDwgMC4wMTtcblxuICAgICAgaWYgKHdhc0F0RnVsbEV4dGVudCkge1xuICAgICAgICByZXR1cm4geyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9KTtcblxuICAgIHByZXZSb290UmVmLmN1cnJlbnQgPSB7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfTtcbiAgfSwgW3Jvb3Quc3RhcnRUaW1lLCByb290LmR1cmF0aW9uLCBzZXRWaWV3cG9ydF0pO1xuXG4gIGNvbnN0IHZpZXdEdXJhdGlvbiA9IHZpZXdwb3J0LmVuZCAtIHZpZXdwb3J0LnN0YXJ0O1xuXG4gIC8vIEtlZXAgYSByZWYgdG8gdGhlIGxpdmUgdmlld3BvcnQgc28gem9vbSBjYWxsYmFja3MgY2FuIHJlYWQgdGhlIGN1cnJlbnRcbiAgLy8gcmFuZ2Ugd2l0aG91dCBiZWluZyByZWNyZWF0ZWQgb24gZXZlcnkgcGFuICh3aGljaCB3b3VsZCBidXN0IFRpbWVsaW5lQmFyJ3NcbiAgLy8gbWVtbyBhbmQgcmUtcmVuZGVyIGV2ZXJ5IHJvdyBlYWNoIGFuaW1hdGlvbiBmcmFtZSkuXG4gIGNvbnN0IHZpZXdwb3J0UmVmID0gdXNlUmVmKHZpZXdwb3J0KTtcbiAgdmlld3BvcnRSZWYuY3VycmVudCA9IHZpZXdwb3J0O1xuXG4gIGNvbnN0IHRpbWVNYXJrZXJzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBjb21wdXRlVGltZU1hcmtlcnModmlld0R1cmF0aW9uLCB2aWV3cG9ydC5zdGFydCAtIHJvb3Quc3RhcnRUaW1lKSxcbiAgICBbdmlld0R1cmF0aW9uLCB2aWV3cG9ydC5zdGFydCwgcm9vdC5zdGFydFRpbWVdXG4gICk7XG5cbiAgY29uc3QgcmVzZXRab29tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiByb290LnN0YXJ0VGltZSwgZW5kOiByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb24gfSk7XG4gIH0sIFthbmltYXRlVG8sIHJvb3Quc3RhcnRUaW1lLCByb290LmR1cmF0aW9uXSk7XG5cbiAgY29uc3QgY2xhbXBUb1Jvb3QgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogVmlld3BvcnRSYW5nZSk6IFZpZXdwb3J0UmFuZ2UgPT5cbiAgICAgIGNsYW1wVmlld3BvcnRUb1Jvb3QobmV4dCwgcm9vdC5zdGFydFRpbWUsIHJvb3QuZW5kVGltZSwgTUlOX1ZJRVdQT1JUX01TKSxcbiAgICBbcm9vdC5zdGFydFRpbWUsIHJvb3QuZW5kVGltZV1cbiAgKTtcblxuICAvLyBQYW4gKGtlZXBpbmcgdGhlIGN1cnJlbnQgem9vbSkgc28gYHRpbWVNc2AgaXMgY2VudGVyZWQgaW4gdmlldyDigJQgdXNlZCBieSB0aGVcbiAgLy8gb2ZmLXNjcmVlbiBtYXJrZXIgaW5kaWNhdG9ycyB0byBzY3JvbGwgdGhlaXIgbWFya2VyIGludG8gdmlldy5cbiAgY29uc3QgaGFuZGxlUmV2ZWFsVGltZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0aW1lTXM6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2aWV3cG9ydFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgIGFuaW1hdGVUbyhcbiAgICAgICAgY2xhbXBUb1Jvb3Qoe1xuICAgICAgICAgIHN0YXJ0OiB0aW1lTXMgLSBkdXJhdGlvbiAvIDIsXG4gICAgICAgICAgZW5kOiB0aW1lTXMgKyBkdXJhdGlvbiAvIDIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FuaW1hdGVUbywgY2xhbXBUb1Jvb3RdXG4gICk7XG5cbiAgY29uc3QgWk9PTV9GQUNUT1IgPSAwLjU7XG5cbiAgY29uc3Qgem9vbUJ5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGZhY3RvcjogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHZpZXdwb3J0UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBjZW50ZXIgPSAoc3RhcnQgKyBlbmQpIC8gMjtcbiAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gTWF0aC5tYXgoTUlOX1ZJRVdQT1JUX01TLCAoZW5kIC0gc3RhcnQpICogZmFjdG9yKTtcbiAgICAgIGFuaW1hdGVUbyhcbiAgICAgICAgY2xhbXBUb1Jvb3Qoe1xuICAgICAgICAgIHN0YXJ0OiBjZW50ZXIgLSBuZXdEdXJhdGlvbiAvIDIsXG4gICAgICAgICAgZW5kOiBjZW50ZXIgKyBuZXdEdXJhdGlvbiAvIDIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FuaW1hdGVUbywgY2xhbXBUb1Jvb3RdXG4gICk7XG5cbiAgY29uc3Qgem9vbUluID0gdXNlQ2FsbGJhY2soKCkgPT4gem9vbUJ5KFpPT01fRkFDVE9SKSwgW3pvb21CeV0pO1xuICBjb25zdCB6b29tT3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4gem9vbUJ5KDEgLyBaT09NX0ZBQ1RPUiksIFt6b29tQnldKTtcbiAgY29uc3QgaXNBdE1pblpvb20gPSB2aWV3RHVyYXRpb24gPj0gcm9vdC5kdXJhdGlvbjtcbiAgY29uc3QgaXNBdE1heFpvb20gPSB2aWV3RHVyYXRpb24gPD0gTUlOX1ZJRVdQT1JUX01TO1xuXG4gIGNvbnN0IGZvY3VzVmlld3BvcnRPblNwYW4gPSB1c2VDYWxsYmFjayhcbiAgICAoc3BhbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZS5zcGFucy5maW5kKChzKSA9PiBzLnNwYW5JZCA9PT0gc3BhbklkKTtcbiAgICAgIGlmICghc3BhbikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBzcGFuU3RhcnQgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLnN0YXJ0VGltZSk7XG4gICAgICBjb25zdCBzcGFuRW5kID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKTtcbiAgICAgIGNvbnN0IHNwYW5EdXJhdGlvbiA9IHNwYW5FbmQgLSBzcGFuU3RhcnQ7XG5cbiAgICAgIGlmIChzcGFuRHVyYXRpb24gPiByb290LmR1cmF0aW9uICogMC44KSB7XG4gICAgICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiByb290LnN0YXJ0VGltZSwgZW5kOiByb290LmVuZFRpbWUgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFkZGluZyA9IE1hdGgubWF4KHNwYW5EdXJhdGlvbiAqIDAuMiwgTUlOX1ZJRVdQT1JUX01TIC8gMik7XG4gICAgICBsZXQgbmV3U3RhcnQgPSBzcGFuU3RhcnQgLSBwYWRkaW5nO1xuICAgICAgbGV0IG5ld0VuZCA9IHNwYW5FbmQgKyBwYWRkaW5nO1xuXG4gICAgICBpZiAobmV3RW5kIC0gbmV3U3RhcnQgPCBNSU5fVklFV1BPUlRfTVMpIHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gKHNwYW5TdGFydCArIHNwYW5FbmQpIC8gMjtcbiAgICAgICAgbmV3U3RhcnQgPSBjZW50ZXIgLSBNSU5fVklFV1BPUlRfTVMgLyAyO1xuICAgICAgICBuZXdFbmQgPSBjZW50ZXIgKyBNSU5fVklFV1BPUlRfTVMgLyAyO1xuICAgICAgfVxuXG4gICAgICBhbmltYXRlVG8oY2xhbXBUb1Jvb3QoeyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH0pKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGFuaW1hdGVUbyxcbiAgICAgIHRyYWNlLnNwYW5zLFxuICAgICAgcm9vdC5zdGFydFRpbWUsXG4gICAgICByb290LmVuZFRpbWUsXG4gICAgICByb290LmR1cmF0aW9uLFxuICAgICAgY2xhbXBUb1Jvb3QsXG4gICAgXVxuICApO1xuXG4gIC8vIEJyaW5nIGEgcm93IGludG8gdmlldyB3aGVuIGtleWJvYXJkL2J1dHRvbiBuYXZpZ2F0aW9uIGxhbmRzIG9uIGEgc3BhbiB0aGF0XG4gIC8vIHNpdHMgb3V0c2lkZSB0aGUgc2hhcmVkIHNjcm9sbCBjb250YWluZXIncyB2aXNpYmxlIGFyZWEuIFRoZSBsaXN0IGlzXG4gIC8vIHdpbmRvd2VkLCBzbyBhbiBvZmYtc2NyZWVuIHJvdyBoYXMgbm8gRE9NIG5vZGUgdG8gYHNjcm9sbEludG9WaWV3YCDigJRcbiAgLy8gYHNjcm9sbFJvd0ludG9WaWV3YCBjb21wdXRlcyB0aGUgdGFyZ2V0IG9mZnNldCBmcm9tIHRoZSBzcGFuJ3MgaW5kZXguXG4gIGNvbnN0IHNjcm9sbFNwYW5JbnRvVmlldyA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0cmFjZS5zcGFucy5maW5kSW5kZXgoKHMpID0+IHMuc3BhbklkID09PSBzcGFuSWQpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBsaXN0ID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcjZXZlbnQtbGlzdCcpID8/XG4gICAgICAgIG51bGw7XG4gICAgICBzY3JvbGxSb3dJbnRvVmlldyhsaXN0LCBpbmRleCwgUk9XX0hFSUdIVF9QWCwge1xuICAgICAgICBiZWhhdmlvcjogcmVkdWNlZE1vdGlvbiA/ICdhdXRvJyA6ICdzbW9vdGgnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbdHJhY2Uuc3BhbnMsIHJlZHVjZWRNb3Rpb25dXG4gICk7XG5cbiAgY29uc3Qgem9vbVRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNhbmNlbFBlbmRpbmdab29tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh6b29tVGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHpvb21UaW1lclJlZi5jdXJyZW50KTtcbiAgICAgIHpvb21UaW1lclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IGNhbmNlbFBlbmRpbmdab29tLCBbY2FuY2VsUGVuZGluZ1pvb21dKTtcblxuICBjb25zdCBoYW5kbGVDbGVhckFjdGl2ZVNwYW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsUGVuZGluZ1pvb20oKTtcbiAgICBjbGVhckFjdGl2ZVNwYW4oKTtcbiAgfSwgW2NhbmNlbFBlbmRpbmdab29tLCBjbGVhckFjdGl2ZVNwYW5dKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RTcGFuID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgICAgaWYgKHNwYW5JZCA9PT0gYWN0aXZlU3BhbklkKSB7XG4gICAgICAgIGNsZWFyQWN0aXZlU3BhbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRBY3RpdmVTcGFuKHNwYW5JZCk7XG4gICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuKHNwYW5JZCk7XG4gICAgfSxcbiAgICBbXG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSxcbiAgICAgIGFjdGl2ZVNwYW5JZCxcbiAgICAgIGNsZWFyQWN0aXZlU3BhbixcbiAgICAgIHNldEFjdGl2ZVNwYW4sXG4gICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBuYXZpZ2F0ZVRvU3BhbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0QWN0aXZlU3BhbihzcGFuSWQpO1xuICAgICAgc2Nyb2xsU3BhbkludG9WaWV3KHNwYW5JZCk7XG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuKHNwYW5JZCk7XG4gICAgICB9LCBaT09NX0RFQk9VTkNFX01TKTtcbiAgICB9LFxuICAgIFtzZXRBY3RpdmVTcGFuLCBzY3JvbGxTcGFuSW50b1ZpZXcsIGNhbmNlbFBlbmRpbmdab29tLCBmb2N1c1ZpZXdwb3J0T25TcGFuXVxuICApO1xuXG4gIGNvbnN0IFthbHRIZWxkLCBzZXRBbHRIZWxkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGhhbmRsZUNsZWFyQWN0aXZlU3BhbigpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0FsdCcpIHtcbiAgICAgICAgc2V0QWx0SGVsZCh0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uS2V5VXAgPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnQWx0Jykgc2V0QWx0SGVsZChmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkJsdXIgPSAoKTogdm9pZCA9PiBzZXRBbHRIZWxkKGZhbHNlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBvbktleVVwKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uQmx1cik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXApO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbkJsdXIpO1xuICAgIH07XG4gIH0sIFtoYW5kbGVDbGVhckFjdGl2ZVNwYW5dKTtcblxuICBjb25zdCB0aW1lbGluZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtob3Zlciwgc2V0SG92ZXJdID0gdXNlU3RhdGU8VGltZWxpbmVIb3ZlciB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhvdmVySW5mbyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChob3ZlciA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBhYnNUaW1lID0gdmlld3BvcnQuc3RhcnQgKyBob3Zlci5mcmFjdGlvbiAqIHZpZXdEdXJhdGlvbjtcbiAgICBjb25zdCBvZmZzZXQgPSBhYnNUaW1lIC0gcm9vdC5zdGFydFRpbWU7XG4gICAgcmV0dXJuIHsgZnJhY3Rpb246IGhvdmVyLmZyYWN0aW9uLCBsYWJlbDogZm9ybWF0RHVyYXRpb25QcmVjaXNlKG9mZnNldCkgfTtcbiAgfSwgW2hvdmVyLCB2aWV3cG9ydC5zdGFydCwgdmlld0R1cmF0aW9uLCByb290LnN0YXJ0VGltZV0pO1xuXG4gIGNvbnN0IGhhbmRsZVRpbWVsaW5lTW91c2VNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBlbCA9IHRpbWVsaW5lUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSByZWN0LndpZHRoIC0gVElNRUxJTkVfUEFERElOR19QWCAqIDI7XG4gICAgICBpZiAoY29udGVudFdpZHRoIDw9IDApIHJldHVybjtcbiAgICAgIGNvbnN0IGZyYWN0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIE1hdGgubWluKFxuICAgICAgICAgIDEsXG4gICAgICAgICAgKGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIFRJTUVMSU5FX1BBRERJTkdfUFgpIC8gY29udGVudFdpZHRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBzZXRIb3Zlcih7XG4gICAgICAgIGZyYWN0aW9uLFxuICAgICAgICByb3dJbmRleDogTWF0aC5mbG9vcigoZS5jbGllbnRZIC0gcmVjdC50b3ApIC8gUk9XX0hFSUdIVF9QWCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGltZWxpbmVNb3VzZUxlYXZlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEhvdmVyKG51bGwpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbCA9IHRpbWVsaW5lUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCB8fCByb290LmR1cmF0aW9uIDw9IDApIHJldHVybjtcblxuICAgIGNvbnN0IG9uV2hlZWwgPSAoZTogV2hlZWxFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNab29tR2VzdHVyZSA9IGUuY3RybEtleSB8fCBlLm1ldGFLZXk7XG4gICAgICBjb25zdCBoYXNEZWx0YVggPSBNYXRoLmFicyhlLmRlbHRhWCkgPiBNYXRoLmFicyhlLmRlbHRhWSk7XG5cbiAgICAgIGlmICghaXNab29tR2VzdHVyZSAmJiAhaGFzRGVsdGFYKSByZXR1cm47XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHJlY3Qud2lkdGggLSBUSU1FTElORV9QQURESU5HX1BYICogMjtcbiAgICAgIGlmIChjb250ZW50V2lkdGggPD0gMCkgcmV0dXJuO1xuXG4gICAgICBpZiAoaXNab29tR2VzdHVyZSkge1xuICAgICAgICBjb25zdCBjdXJzb3JGcmFjdGlvbiA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgKGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIFRJTUVMSU5FX1BBRERJTkdfUFgpIC8gY29udGVudFdpZHRoXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzY2FsZUZhY3RvciA9IHdoZWVsWm9vbVNjYWxlRmFjdG9yKGUpO1xuXG4gICAgICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJldkR1cmF0aW9uID0gcHJldi5lbmQgLSBwcmV2LnN0YXJ0O1xuICAgICAgICAgIGNvbnN0IGN1cnNvclRpbWUgPSBwcmV2LnN0YXJ0ICsgY3Vyc29yRnJhY3Rpb24gKiBwcmV2RHVyYXRpb247XG4gICAgICAgICAgLy8gQ2xhbXAgdGhlIGR1cmF0aW9uIGJlZm9yZSBhbmNob3Jpbmcgc28gdGhlIGN1cnNvciBrZWVwcyBpdHNcbiAgICAgICAgICAvLyBmcmFjdGlvbiBldmVuIHdoZW4gdGhlIHpvb20gaGl0cyB0aGUgbWluL21heCBib3VuZHMuXG4gICAgICAgICAgY29uc3QgbmV3RHVyYXRpb24gPSBNYXRoLm1heChcbiAgICAgICAgICAgIE1JTl9WSUVXUE9SVF9NUyxcbiAgICAgICAgICAgIE1hdGgubWluKHJvb3QuZHVyYXRpb24sIHByZXZEdXJhdGlvbiAqIHNjYWxlRmFjdG9yKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGNsYW1wVG9Sb290KHtcbiAgICAgICAgICAgIHN0YXJ0OiBjdXJzb3JUaW1lIC0gY3Vyc29yRnJhY3Rpb24gKiBuZXdEdXJhdGlvbixcbiAgICAgICAgICAgIGVuZDogY3Vyc29yVGltZSArICgxIC0gY3Vyc29yRnJhY3Rpb24pICogbmV3RHVyYXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZHggPSB3aGVlbERlbHRhVG9QaXhlbHMoZS5kZWx0YVgsIGUuZGVsdGFNb2RlKTtcbiAgICAgICAgc2V0Vmlld3BvcnQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCBwYW5BbW91bnQgPSAoZHggLyBjb250ZW50V2lkdGgpICogKHByZXYuZW5kIC0gcHJldi5zdGFydCk7XG4gICAgICAgICAgcmV0dXJuIGNsYW1wVG9Sb290KHtcbiAgICAgICAgICAgIHN0YXJ0OiBwcmV2LnN0YXJ0ICsgcGFuQW1vdW50LFxuICAgICAgICAgICAgZW5kOiBwcmV2LmVuZCArIHBhbkFtb3VudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICByZXR1cm4gKCkgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsKTtcbiAgfSwgW3Jvb3QuZHVyYXRpb24sIHNldFZpZXdwb3J0LCBjbGFtcFRvUm9vdF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtwYW5lUm9vdFJlZn1cbiAgICAgIGRhdGEtcGFuZT1cInBhbmUtcm9vdFwiXG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IHctZnVsbCBoLWZ1bGwgbWF4LWgtZnVsbFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBpZD1cInRyYWNlLXBhcmVudFwiXG4gICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIgZmxleC0xIG1pbi13LTAgZ3JpZCBncmlkLXJvd3MtW2F1dG9fMWZyXSBoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmUgYmctYmFja2dyb3VuZC0xMDBcIlxuICAgICAgPlxuICAgICAgICA8TWluaW1hcFxuICAgICAgICAgIHNwYW5zPXt0cmFjZS5zcGFuc31cbiAgICAgICAgICByb290PXtyb290fVxuICAgICAgICAgIHZpZXdwb3J0PXt2aWV3cG9ydH1cbiAgICAgICAgICBtaW5WaWV3cG9ydE1zPXtNSU5fVklFV1BPUlRfTVN9XG4gICAgICAgICAgb25WaWV3cG9ydENoYW5nZT17c2V0Vmlld3BvcnR9XG4gICAgICAgICAgb25BbmltYXRlVG89e2FuaW1hdGVUb31cbiAgICAgICAgLz5cbiAgICAgICAgPFNwbGl0UGFuZVxuICAgICAgICAgIHNjcm9sbENvbnRhaW5lclJlZj17c2Nyb2xsQ29udGFpbmVyUmVmfVxuICAgICAgICAgIHN0YXJ0SGVhZGVyPXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctYmFja2dyb3VuZC0xMDAgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGgtMTAgbWluLWgtMTAgZmxleCBpdGVtcy1jZW50ZXIgcGwtNCBwci0yIGdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgPFNlYXJjaCBjbGFzc05hbWU9XCJ3LTMuNSBoLTMuNSBzaHJpbmstMCB0ZXh0LWdyYXktODAwXCIgLz5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJ0cmFjZS12aWV3ZXItc2VhcmNoXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwidHJhY2Utdmlld2VyLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaFF1ZXJ5KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnICYmIHNlYXJjaFF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VhcmNoUXVlcnkoJycpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3BhbnMuLi5cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2ggc3BhbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wIGJnLXRyYW5zcGFyZW50IHRleHQtbGFiZWwtMTQgdGV4dC1ncmF5LTEwMDAgcGxhY2Vob2xkZXI6dGV4dC1ncmF5LTgwMCBvdXRsaW5lLW5vbmVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7c2VhcmNoUXVlcnkgJiYgKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWFyY2hRdWVyeSgnJyl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCItbXItMiBoaWRkZW4gaC1mdWxsIG1heC13LWZ1bGwgc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtci1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yLjUgZm9udC1pbmhlcml0IHRleHQtbGFiZWwtMTYgdGV4dC1ncmF5LTkwMCBuby11bmRlcmxpbmUgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTUwIGVhc2UtaW4gaG92ZXI6dGV4dC1ncmF5LTEwMDAgZm9jdXMtdmlzaWJsZTotb3V0bGluZS1vZmZzZXQtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLVt2YXIoLS1kcy1mb2N1cy1jb2xvcildIG1pbi1bOTYxcHhdOmZsZXhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxLYmQgdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIEVzY1xuICAgICAgICAgICAgICAgICAgPC9LYmQ+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgZW5kSGVhZGVyPXtcbiAgICAgICAgICAgIDxUaW1lbGluZUhlYWRlciBtYXJrZXJzPXt0aW1lTWFya2Vyc30gaG92ZXJJbmZvPXtob3ZlckluZm99IC8+XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJibG9jayBvdmVyZmxvdy12aXNpYmxlXCI+XG4gICAgICAgICAgICA8RXZlbnRMaXN0XG4gICAgICAgICAgICAgIHNwYW5zPXt0cmFjZS5zcGFuc31cbiAgICAgICAgICAgICAgYWN0aXZlU3BhbklkPXthY3RpdmVTcGFuSWR9XG4gICAgICAgICAgICAgIHNlYXJjaFJlc3VsdD17c2VhcmNoUmVzdWx0fVxuICAgICAgICAgICAgICBvblNlbGVjdFNwYW49e2hhbmRsZVNlbGVjdFNwYW59XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiByZWY9e2xvYWRNb3JlU2VudGluZWxSZWZ9IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAge2lzTG9hZGluZ01vcmUgPyAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBweS0zIHRleHQtbGFiZWwtMTQgdGV4dC1ncmF5LTgwMFwiPlxuICAgICAgICAgICAgICAgICAgPFNwaW5uZXIgc2l6ZT17MTR9IC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5Mb2FkaW5nIHNwYW5z4oCmPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vU3RhdGljRWxlbWVudEludGVyYWN0aW9uczogdGltZWxpbmUgaG92ZXIgYW5kIHdoZWVsIGdlc3R1cmVzIGFyZSBwb2ludGVyLW9ubHkgYW5ub3RhdGlvbnMgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgcmVmPXt0aW1lbGluZVJlZn1cbiAgICAgICAgICAgIGlkPVwidHJhY2UtdGltZWxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiQGNvbnRhaW5lciBibG9jayBtaW4taC0wIG92ZXJmbG93LXZpc2libGUgcmVsYXRpdmVcIlxuICAgICAgICAgICAgb25Eb3VibGVDbGljaz17cmVzZXRab29tfVxuICAgICAgICAgICAgb25Nb3VzZU1vdmU9e2hhbmRsZVRpbWVsaW5lTW91c2VNb3ZlfVxuICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXtoYW5kbGVUaW1lbGluZU1vdXNlTGVhdmV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRpbWVsaW5lXG4gICAgICAgICAgICAgIHNwYW5zPXt0cmFjZS5zcGFuc31cbiAgICAgICAgICAgICAgdmlld1N0YXJ0PXt2aWV3cG9ydC5zdGFydH1cbiAgICAgICAgICAgICAgdmlld0VuZD17dmlld3BvcnQuZW5kfVxuICAgICAgICAgICAgICBtYXJrZXJzPXt0aW1lTWFya2Vyc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRJZD17YWN0aXZlU3BhbklkfVxuICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQ9e3NlYXJjaFJlc3VsdH1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdFNwYW59XG4gICAgICAgICAgICAgIG9uUmV2ZWFsVGltZT17aGFuZGxlUmV2ZWFsVGltZX1cbiAgICAgICAgICAgICAgaG92ZXI9e2hvdmVyfVxuICAgICAgICAgICAgICBhbHRIZWxkPXthbHRIZWxkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFRyYWNlU2hvcnRjdXRIZWxwZXJcbiAgICAgICAgICAgICAgaGFzTXVsdGlwbGVTcGFucz17dHJhY2Uuc3BhbnMubGVuZ3RoID4gMX1cbiAgICAgICAgICAgICAgcmVkdWNlZE1vdGlvbj17cmVkdWNlZE1vdGlvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLWF1dG8gZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCByb3VuZGVkLW1kIGJnLWJhY2tncm91bmQtMTAwIHNoYWRvdy1zbSBvdmVyZmxvdy1oaWRkZW4gZGl2aWRlLXggZGl2aWRlLWdyYXktYWxwaGEtNDAwXCI+XG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm11dGVkXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3pvb21PdXR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzQXRNaW5ab29tfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJab29tIG91dFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Wm9vbU91dCBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJtdXRlZFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtyZXNldFpvb219XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlc2V0IHpvb21cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFJvdGF0ZUNjdyBjbGFzc05hbWU9XCJ3LTMuNSBoLTMuNVwiIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwibXV0ZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17em9vbUlufVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0F0TWF4Wm9vbX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiWm9vbSBpblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Wm9vbUluIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgPC9TcGxpdFBhbmU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRyYWNlRGV0YWlsUGFuZWxcbiAgICAgICAgY29udGFpbmVyUmVmPXtwYW5lUm9vdFJlZn1cbiAgICAgICAgb25OYXZpZ2F0ZVRvU3Bhbj17bmF2aWdhdGVUb1NwYW59XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsZWFyQWN0aXZlU3Bhbn1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2Utdmlld2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJhY2Utdmlld2VyL3RyYWNlLXZpZXdlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUViLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbEUsT0FBTyxFQUVMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULE9BQU8sRUFDUCxNQUFNLEVBQ04sUUFBUSxHQUNULE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sU0FBUyxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsY0FBYyxHQUVmLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZC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RSxnQkFBZ0IsRUFDOUIsS0FBSyxFQUFFLEtBQUssRUFDWixPQUFPLEVBQUUsT0FBTyxHQUNoQixHQUNFLEVBQ04sOEJBQ0UsS0FBQyxtQkFBbUIsSUFDbEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4QyxhQUFhLEVBQUUsYUFBYSxHQUM1QixFQUNGLGVBQUssU0FBUyxFQUFDLDBKQUEwSixhQUN2SyxLQUFDLFVBQVUsSUFDVCxPQUFPLEVBQUMsT0FBTyxFQUNmLElBQUksRUFBQyxPQUFPLEVBQ1osT0FBTyxFQUFFLE9BQU8sRUFDaEIsUUFBUSxFQUFFLFdBQVcsZ0JBQ1YsVUFBVSxZQUVyQixLQUFDLE9BQU8sSUFBQyxTQUFTLEVBQUMsU0FBUyxHQUFHLEdBQ3BCLEVBQ2IsS0FBQyxVQUFVLElBQ1QsT0FBTyxFQUFDLE9BQU8sRUFDZixJQUFJLEVBQUMsT0FBTyxFQUNaLE9BQU8sRUFBRSxTQUFTLGdCQUNQLFlBQVksWUFFdkIsS0FBQyxTQUFTLElBQUMsU0FBUyxFQUFDLGFBQWEsR0FBRyxHQUMxQixFQUNiLEtBQUMsVUFBVSxJQUNULE9BQU8sRUFBQyxPQUFPLEVBQ2YsSUFBSSxFQUFDLE9BQU8sRUFDWixPQUFPLEVBQUUsTUFBTSxFQUNmLFFBQVEsRUFBRSxXQUFXLGdCQUNWLFNBQVMsWUFFcEIsS0FBQyxNQUFNLElBQUMsU0FBUyxFQUFDLFNBQVMsR0FBRyxHQUNuQixJQUNULElBQ0wsSUFDTyxJQUNSLEVBRU4sS0FBQyxnQkFBZ0IsSUFDZixZQUFZLEVBQUUsV0FBVyxFQUN6QixnQkFBZ0IsRUFBRSxjQUFjLEVBQ2hDLE9BQU8sRUFBRSxxQkFBcUIsR0FDOUIsSUFDRSxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBSb3RhdGVDY3csIFNlYXJjaCwgWm9vbUluLCBab29tT3V0IH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCB7XG4gIHR5cGUgUmVhY3ROb2RlLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlRGVmZXJyZWRWYWx1ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VMb2FkTW9yZU9uU2Nyb2xsIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLWxvYWQtbW9yZS1vbi1zY3JvbGwnO1xuaW1wb3J0IHsgdXNlUmVkdWNlZE1vdGlvbiB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZS1yZWR1Y2VkLW1vdGlvbic7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vdWkvaWNvbi1idXR0b24nO1xuaW1wb3J0IHsgS2JkIH0gZnJvbSAnLi4vdWkva2JkJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuLi91aS9zcGlubmVyJztcbmltcG9ydCB7IFRvb2x0aXBQcm92aWRlciB9IGZyb20gJy4uL3VpL3Rvb2x0aXAnO1xuaW1wb3J0IHsgVHJhY2VEZXRhaWxQYW5lbCB9IGZyb20gJy4vY29tcG9uZW50cy9kZXRhaWwtcGFuZWwnO1xuaW1wb3J0IEV2ZW50TGlzdCBmcm9tICcuL2NvbXBvbmVudHMvZXZlbnQtbGlzdCc7XG5pbXBvcnQgeyBNaW5pbWFwIH0gZnJvbSAnLi9jb21wb25lbnRzL21pbmltYXAnO1xuaW1wb3J0IHsgU3BsaXRQYW5lIH0gZnJvbSAnLi9jb21wb25lbnRzL3NwbGl0LXBhbmUnO1xuaW1wb3J0IHtcbiAgVElNRUxJTkVfUEFERElOR19QWCxcbiAgVGltZWxpbmUsXG4gIFRpbWVsaW5lSGVhZGVyLFxuICB0eXBlIFRpbWVsaW5lSG92ZXIsXG59IGZyb20gJy4vY29tcG9uZW50cy90aW1lbGluZSc7XG5pbXBvcnQgeyBUcmFjZVNob3J0Y3V0SGVscGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL3RyYWNlLXNob3J0Y3V0LWhlbHBlcic7XG5pbXBvcnQgeyBST1dfSEVJR0hUX1BYLCBzY3JvbGxSb3dJbnRvVmlldyB9IGZyb20gJy4vY29tcG9uZW50cy91c2Utcm93LXdpbmRvdyc7XG5pbXBvcnQgeyBBY3RpdmVTcGFuUHJvdmlkZXIsIHVzZUFjdGl2ZVNwYW4gfSBmcm9tICcuL2NvbnRleHQnO1xuaW1wb3J0IHsgc2VhcmNoU3BhbnMgfSBmcm9tICcuL3NlYXJjaCc7XG5pbXBvcnQgdHlwZSB7IFRyYWNlV2l0aE1ldGEgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uUHJlY2lzZSwgZ2V0SGlnaFJlc0luTXMgfSBmcm9tICcuL3V0aWwvdGltaW5nJztcbmltcG9ydCB7XG4gIGNsYW1wVmlld3BvcnRUb1Jvb3QsXG4gIGNvbXB1dGVSb290Qm91bmRzLFxuICBjb21wdXRlVGltZU1hcmtlcnMsXG4gIHR5cGUgVmlld3BvcnRSYW5nZSxcbiAgd2hlZWxEZWx0YVRvUGl4ZWxzLFxuICB3aGVlbFpvb21TY2FsZUZhY3Rvcixcbn0gZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBUcmFjZVZpZXdlclByb3BzIHtcbiAgdHJhY2U6IFRyYWNlV2l0aE1ldGE7XG4gIG9uTG9hZE1vcmU/OiAoKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgaGFzTW9yZT86IGJvb2xlYW47XG4gIGlzTG9hZGluZ01vcmU/OiBib29sZWFuO1xufVxuXG5jb25zdCBNSU5fVklFV1BPUlRfTVMgPSAwLjAwMTtcblxuY29uc3QgWk9PTV9ERUJPVU5DRV9NUyA9IDE1MDtcblxuZnVuY3Rpb24gdXNlQW5pbWF0ZWRWaWV3cG9ydChpbml0aWFsOiBWaWV3cG9ydFJhbmdlKSB7XG4gIGNvbnN0IFt2aWV3cG9ydCwgc2V0Vmlld3BvcnRTdGF0ZV0gPSB1c2VTdGF0ZTxWaWV3cG9ydFJhbmdlPihpbml0aWFsKTtcbiAgY29uc3QgYW5pbVJlZiA9IHVzZVJlZjx7XG4gICAgcmFmOiBudW1iZXI7XG4gICAgZnJvbTogVmlld3BvcnRSYW5nZTtcbiAgICB0bzogVmlld3BvcnRSYW5nZTtcbiAgICBzdGFydDogbnVtYmVyO1xuICB9IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGN1cnJlbnRSZWYgPSB1c2VSZWYoaW5pdGlhbCk7XG4gIGN1cnJlbnRSZWYuY3VycmVudCA9IHZpZXdwb3J0O1xuICBjb25zdCByZWR1Y2VkTW90aW9uID0gdXNlUmVkdWNlZE1vdGlvbigpO1xuXG4gIGNvbnN0IGNhbmNlbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYW5pbVJlZi5jdXJyZW50KSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltUmVmLmN1cnJlbnQucmFmKTtcbiAgICAgIGFuaW1SZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3QgYW5pbWF0ZVRvID0gdXNlQ2FsbGJhY2soXG4gICAgKHRhcmdldDogVmlld3BvcnRSYW5nZSkgPT4ge1xuICAgICAgY2FuY2VsKCk7XG5cbiAgICAgIGlmIChyZWR1Y2VkTW90aW9uKSB7XG4gICAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IHRhcmdldDtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSh0YXJnZXQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZyb20gPSBjdXJyZW50UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBhbmltID0geyByYWY6IDAsIGZyb20sIHRvOiB0YXJnZXQsIHN0YXJ0OiBwZXJmb3JtYW5jZS5ub3coKSB9O1xuXG4gICAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0ID0gTWF0aC5taW4oKHBlcmZvcm1hbmNlLm5vdygpIC0gYW5pbS5zdGFydCkgLyAyNDAsIDEpO1xuICAgICAgICBjb25zdCBlID0gdCA8IDAuNSA/IDggKiB0ICogdCAqIHQgKiB0IDogMSAtICgtMiAqIHQgKyAyKSAqKiA0IC8gMjtcbiAgICAgICAgc2V0Vmlld3BvcnRTdGF0ZSh7XG4gICAgICAgICAgc3RhcnQ6IGFuaW0uZnJvbS5zdGFydCArIChhbmltLnRvLnN0YXJ0IC0gYW5pbS5mcm9tLnN0YXJ0KSAqIGUsXG4gICAgICAgICAgZW5kOiBhbmltLmZyb20uZW5kICsgKGFuaW0udG8uZW5kIC0gYW5pbS5mcm9tLmVuZCkgKiBlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHQgPCAxKSBhbmltLnJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgICAgZWxzZSBhbmltUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgYW5pbVJlZi5jdXJyZW50ID0gYW5pbTtcbiAgICAgIGFuaW0ucmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH0sXG4gICAgW2NhbmNlbCwgcmVkdWNlZE1vdGlvbl1cbiAgKTtcblxuICBjb25zdCBzZXRWaWV3cG9ydCA9IHVzZUNhbGxiYWNrKFxuICAgICh1cGRhdGU6IFZpZXdwb3J0UmFuZ2UgfCAoKHByZXY6IFZpZXdwb3J0UmFuZ2UpID0+IFZpZXdwb3J0UmFuZ2UpKSA9PiB7XG4gICAgICBjYW5jZWwoKTtcbiAgICAgIGlmICh0eXBlb2YgdXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHNldFZpZXdwb3J0U3RhdGUoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gdXBkYXRlKHByZXYpO1xuICAgICAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IG5leHQ7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gdXBkYXRlO1xuICAgICAgICBzZXRWaWV3cG9ydFN0YXRlKHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbY2FuY2VsXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWwsIFtjYW5jZWxdKTtcblxuICByZXR1cm4geyB2aWV3cG9ydCwgc2V0Vmlld3BvcnQsIGFuaW1hdGVUbyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJvb3QgY29tcG9uZW50XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGZ1bmN0aW9uIFRyYWNlVmlld2VyKHtcbiAgdHJhY2UsXG4gIG9uTG9hZE1vcmUsXG4gIGhhc01vcmUsXG4gIGlzTG9hZGluZ01vcmUsXG59OiBUcmFjZVZpZXdlclByb3BzKTogUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8VG9vbHRpcFByb3ZpZGVyIGRlbGF5RHVyYXRpb249ezMwMH0+XG4gICAgICA8QWN0aXZlU3BhblByb3ZpZGVyIHNwYW5zPXt0cmFjZS5zcGFuc30+XG4gICAgICAgIDxUcmFjZVZpZXdlckNvbnRlbnRcbiAgICAgICAgICB0cmFjZT17dHJhY2V9XG4gICAgICAgICAgb25Mb2FkTW9yZT17b25Mb2FkTW9yZX1cbiAgICAgICAgICBoYXNNb3JlPXtoYXNNb3JlfVxuICAgICAgICAgIGlzTG9hZGluZ01vcmU9e2lzTG9hZGluZ01vcmV9XG4gICAgICAgIC8+XG4gICAgICA8L0FjdGl2ZVNwYW5Qcm92aWRlcj5cbiAgICA8L1Rvb2x0aXBQcm92aWRlcj5cbiAgKTtcbn1cblxuZnVuY3Rpb24gVHJhY2VWaWV3ZXJDb250ZW50KHtcbiAgdHJhY2UsXG4gIG9uTG9hZE1vcmUsXG4gIGhhc01vcmUsXG4gIGlzTG9hZGluZ01vcmUsXG59OiBUcmFjZVZpZXdlclByb3BzKTogUmVhY3ROb2RlIHtcbiAgY29uc3QgeyBhY3RpdmVTcGFuSWQsIHNldEFjdGl2ZVNwYW4sIGNsZWFyQWN0aXZlU3BhbiB9ID0gdXNlQWN0aXZlU3BhbigpO1xuXG4gIGNvbnN0IHJlZHVjZWRNb3Rpb24gPSB1c2VSZWR1Y2VkTW90aW9uKCk7XG5cbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IGRlZmVycmVkU2VhcmNoUXVlcnkgPSB1c2VEZWZlcnJlZFZhbHVlKHNlYXJjaFF1ZXJ5KTtcblxuICBjb25zdCBwYW5lUm9vdFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWFyY2hTcGFucyh0cmFjZS5zcGFucywgZGVmZXJyZWRTZWFyY2hRdWVyeSksXG4gICAgW3RyYWNlLnNwYW5zLCBkZWZlcnJlZFNlYXJjaFF1ZXJ5XVxuICApO1xuXG4gIGNvbnN0IHJvb3QgPSB1c2VNZW1vKCgpID0+IGNvbXB1dGVSb290Qm91bmRzKHRyYWNlLnNwYW5zKSwgW3RyYWNlLnNwYW5zXSk7XG5cbiAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgbG9hZE1vcmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdm9pZCBvbkxvYWRNb3JlPy4oKTtcbiAgfSwgW29uTG9hZE1vcmVdKTtcbiAgY29uc3QgbG9hZE1vcmVTZW50aW5lbFJlZiA9IHVzZUxvYWRNb3JlT25TY3JvbGwobG9hZE1vcmUsIHtcbiAgICBoYXNNb3JlOiBCb29sZWFuKG9uTG9hZE1vcmUgJiYgaGFzTW9yZSksXG4gICAgaXNMb2FkaW5nTW9yZTogQm9vbGVhbihpc0xvYWRpbmdNb3JlKSxcbiAgICByb290UmVmOiBzY3JvbGxDb250YWluZXJSZWYsXG4gIH0pO1xuXG4gIGNvbnN0IHsgdmlld3BvcnQsIHNldFZpZXdwb3J0LCBhbmltYXRlVG8gfSA9IHVzZUFuaW1hdGVkVmlld3BvcnQoe1xuICAgIHN0YXJ0OiByb290LnN0YXJ0VGltZSxcbiAgICBlbmQ6IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbixcbiAgfSk7XG5cbiAgY29uc3QgcHJldlJvb3RSZWYgPSB1c2VSZWY8Vmlld3BvcnRSYW5nZT4oe1xuICAgIHN0YXJ0OiByb290LnN0YXJ0VGltZSxcbiAgICBlbmQ6IHJvb3Quc3RhcnRUaW1lICsgcm9vdC5kdXJhdGlvbixcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwcmV2Um9vdCA9IHByZXZSb290UmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgbmV3U3RhcnQgPSByb290LnN0YXJ0VGltZTtcbiAgICBjb25zdCBuZXdFbmQgPSByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb247XG5cbiAgICBzZXRWaWV3cG9ydCgocHJldikgPT4ge1xuICAgICAgY29uc3Qgd2FzQXRGdWxsRXh0ZW50ID1cbiAgICAgICAgTWF0aC5hYnMocHJldi5zdGFydCAtIHByZXZSb290LnN0YXJ0KSA8IDAuMDEgJiZcbiAgICAgICAgTWF0aC5hYnMocHJldi5lbmQgLSBwcmV2Um9vdC5lbmQpIDwgMC4wMTtcblxuICAgICAgaWYgKHdhc0F0RnVsbEV4dGVudCkge1xuICAgICAgICByZXR1cm4geyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9KTtcblxuICAgIHByZXZSb290UmVmLmN1cnJlbnQgPSB7IHN0YXJ0OiBuZXdTdGFydCwgZW5kOiBuZXdFbmQgfTtcbiAgfSwgW3Jvb3Quc3RhcnRUaW1lLCByb290LmR1cmF0aW9uLCBzZXRWaWV3cG9ydF0pO1xuXG4gIGNvbnN0IHZpZXdEdXJhdGlvbiA9IHZpZXdwb3J0LmVuZCAtIHZpZXdwb3J0LnN0YXJ0O1xuXG4gIC8vIEtlZXAgYSByZWYgdG8gdGhlIGxpdmUgdmlld3BvcnQgc28gem9vbSBjYWxsYmFja3MgY2FuIHJlYWQgdGhlIGN1cnJlbnRcbiAgLy8gcmFuZ2Ugd2l0aG91dCBiZWluZyByZWNyZWF0ZWQgb24gZXZlcnkgcGFuICh3aGljaCB3b3VsZCBidXN0IFRpbWVsaW5lQmFyJ3NcbiAgLy8gbWVtbyBhbmQgcmUtcmVuZGVyIGV2ZXJ5IHJvdyBlYWNoIGFuaW1hdGlvbiBmcmFtZSkuXG4gIGNvbnN0IHZpZXdwb3J0UmVmID0gdXNlUmVmKHZpZXdwb3J0KTtcbiAgdmlld3BvcnRSZWYuY3VycmVudCA9IHZpZXdwb3J0O1xuXG4gIGNvbnN0IHRpbWVNYXJrZXJzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBjb21wdXRlVGltZU1hcmtlcnModmlld0R1cmF0aW9uLCB2aWV3cG9ydC5zdGFydCAtIHJvb3Quc3RhcnRUaW1lKSxcbiAgICBbdmlld0R1cmF0aW9uLCB2aWV3cG9ydC5zdGFydCwgcm9vdC5zdGFydFRpbWVdXG4gICk7XG5cbiAgY29uc3QgcmVzZXRab29tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiByb290LnN0YXJ0VGltZSwgZW5kOiByb290LnN0YXJ0VGltZSArIHJvb3QuZHVyYXRpb24gfSk7XG4gIH0sIFthbmltYXRlVG8sIHJvb3Quc3RhcnRUaW1lLCByb290LmR1cmF0aW9uXSk7XG5cbiAgY29uc3QgY2xhbXBUb1Jvb3QgPSB1c2VDYWxsYmFjayhcbiAgICAobmV4dDogVmlld3BvcnRSYW5nZSk6IFZpZXdwb3J0UmFuZ2UgPT5cbiAgICAgIGNsYW1wVmlld3BvcnRUb1Jvb3QobmV4dCwgcm9vdC5zdGFydFRpbWUsIHJvb3QuZW5kVGltZSwgTUlOX1ZJRVdQT1JUX01TKSxcbiAgICBbcm9vdC5zdGFydFRpbWUsIHJvb3QuZW5kVGltZV1cbiAgKTtcblxuICAvLyBQYW4gKGtlZXBpbmcgdGhlIGN1cnJlbnQgem9vbSkgc28gYHRpbWVNc2AgaXMgY2VudGVyZWQgaW4gdmlldzsgdXNlZCBieSB0aGVcbiAgLy8gb2ZmLXNjcmVlbiBtYXJrZXIgaW5kaWNhdG9ycyB0byBzY3JvbGwgdGhlaXIgbWFya2VyIGludG8gdmlldy5cbiAgY29uc3QgaGFuZGxlUmV2ZWFsVGltZSA9IHVzZUNhbGxiYWNrKFxuICAgICh0aW1lTXM6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB2aWV3cG9ydFJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBlbmQgLSBzdGFydDtcbiAgICAgIGFuaW1hdGVUbyhcbiAgICAgICAgY2xhbXBUb1Jvb3Qoe1xuICAgICAgICAgIHN0YXJ0OiB0aW1lTXMgLSBkdXJhdGlvbiAvIDIsXG4gICAgICAgICAgZW5kOiB0aW1lTXMgKyBkdXJhdGlvbiAvIDIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FuaW1hdGVUbywgY2xhbXBUb1Jvb3RdXG4gICk7XG5cbiAgY29uc3QgWk9PTV9GQUNUT1IgPSAwLjU7XG5cbiAgY29uc3Qgem9vbUJ5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGZhY3RvcjogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHZpZXdwb3J0UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBjZW50ZXIgPSAoc3RhcnQgKyBlbmQpIC8gMjtcbiAgICAgIGNvbnN0IG5ld0R1cmF0aW9uID0gTWF0aC5tYXgoTUlOX1ZJRVdQT1JUX01TLCAoZW5kIC0gc3RhcnQpICogZmFjdG9yKTtcbiAgICAgIGFuaW1hdGVUbyhcbiAgICAgICAgY2xhbXBUb1Jvb3Qoe1xuICAgICAgICAgIHN0YXJ0OiBjZW50ZXIgLSBuZXdEdXJhdGlvbiAvIDIsXG4gICAgICAgICAgZW5kOiBjZW50ZXIgKyBuZXdEdXJhdGlvbiAvIDIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0sXG4gICAgW2FuaW1hdGVUbywgY2xhbXBUb1Jvb3RdXG4gICk7XG5cbiAgY29uc3Qgem9vbUluID0gdXNlQ2FsbGJhY2soKCkgPT4gem9vbUJ5KFpPT01fRkFDVE9SKSwgW3pvb21CeV0pO1xuICBjb25zdCB6b29tT3V0ID0gdXNlQ2FsbGJhY2soKCkgPT4gem9vbUJ5KDEgLyBaT09NX0ZBQ1RPUiksIFt6b29tQnldKTtcbiAgY29uc3QgaXNBdE1pblpvb20gPSB2aWV3RHVyYXRpb24gPj0gcm9vdC5kdXJhdGlvbjtcbiAgY29uc3QgaXNBdE1heFpvb20gPSB2aWV3RHVyYXRpb24gPD0gTUlOX1ZJRVdQT1JUX01TO1xuXG4gIGNvbnN0IGZvY3VzVmlld3BvcnRPblNwYW4gPSB1c2VDYWxsYmFjayhcbiAgICAoc3BhbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHNwYW4gPSB0cmFjZS5zcGFucy5maW5kKChzKSA9PiBzLnNwYW5JZCA9PT0gc3BhbklkKTtcbiAgICAgIGlmICghc3BhbikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBzcGFuU3RhcnQgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLnN0YXJ0VGltZSk7XG4gICAgICBjb25zdCBzcGFuRW5kID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKTtcbiAgICAgIGNvbnN0IHNwYW5EdXJhdGlvbiA9IHNwYW5FbmQgLSBzcGFuU3RhcnQ7XG5cbiAgICAgIGlmIChzcGFuRHVyYXRpb24gPiByb290LmR1cmF0aW9uICogMC44KSB7XG4gICAgICAgIGFuaW1hdGVUbyh7IHN0YXJ0OiByb290LnN0YXJ0VGltZSwgZW5kOiByb290LmVuZFRpbWUgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFkZGluZyA9IE1hdGgubWF4KHNwYW5EdXJhdGlvbiAqIDAuMiwgTUlOX1ZJRVdQT1JUX01TIC8gMik7XG4gICAgICBsZXQgbmV3U3RhcnQgPSBzcGFuU3RhcnQgLSBwYWRkaW5nO1xuICAgICAgbGV0IG5ld0VuZCA9IHNwYW5FbmQgKyBwYWRkaW5nO1xuXG4gICAgICBpZiAobmV3RW5kIC0gbmV3U3RhcnQgPCBNSU5fVklFV1BPUlRfTVMpIHtcbiAgICAgICAgY29uc3QgY2VudGVyID0gKHNwYW5TdGFydCArIHNwYW5FbmQpIC8gMjtcbiAgICAgICAgbmV3U3RhcnQgPSBjZW50ZXIgLSBNSU5fVklFV1BPUlRfTVMgLyAyO1xuICAgICAgICBuZXdFbmQgPSBjZW50ZXIgKyBNSU5fVklFV1BPUlRfTVMgLyAyO1xuICAgICAgfVxuXG4gICAgICBhbmltYXRlVG8oY2xhbXBUb1Jvb3QoeyBzdGFydDogbmV3U3RhcnQsIGVuZDogbmV3RW5kIH0pKTtcbiAgICB9LFxuICAgIFtcbiAgICAgIGFuaW1hdGVUbyxcbiAgICAgIHRyYWNlLnNwYW5zLFxuICAgICAgcm9vdC5zdGFydFRpbWUsXG4gICAgICByb290LmVuZFRpbWUsXG4gICAgICByb290LmR1cmF0aW9uLFxuICAgICAgY2xhbXBUb1Jvb3QsXG4gICAgXVxuICApO1xuXG4gIC8vIEJyaW5nIGEgcm93IGludG8gdmlldyB3aGVuIGtleWJvYXJkL2J1dHRvbiBuYXZpZ2F0aW9uIGxhbmRzIG9uIGEgc3BhbiB0aGF0XG4gIC8vIHNpdHMgb3V0c2lkZSB0aGUgc2hhcmVkIHNjcm9sbCBjb250YWluZXIncyB2aXNpYmxlIGFyZWEuIFRoZSBsaXN0IGlzXG4gIC8vIHdpbmRvd2VkLCBzbyBhbiBvZmYtc2NyZWVuIHJvdyBoYXMgbm8gRE9NIG5vZGUgdG8gYHNjcm9sbEludG9WaWV3YDtcbiAgLy8gYHNjcm9sbFJvd0ludG9WaWV3YCBjb21wdXRlcyB0aGUgdGFyZ2V0IG9mZnNldCBmcm9tIHRoZSBzcGFuJ3MgaW5kZXguXG4gIGNvbnN0IHNjcm9sbFNwYW5JbnRvVmlldyA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0cmFjZS5zcGFucy5maW5kSW5kZXgoKHMpID0+IHMuc3BhbklkID09PSBzcGFuSWQpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBsaXN0ID1cbiAgICAgICAgc2Nyb2xsQ29udGFpbmVyUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcjZXZlbnQtbGlzdCcpID8/XG4gICAgICAgIG51bGw7XG4gICAgICBzY3JvbGxSb3dJbnRvVmlldyhsaXN0LCBpbmRleCwgUk9XX0hFSUdIVF9QWCwge1xuICAgICAgICBiZWhhdmlvcjogcmVkdWNlZE1vdGlvbiA/ICdhdXRvJyA6ICdzbW9vdGgnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgICBbdHJhY2Uuc3BhbnMsIHJlZHVjZWRNb3Rpb25dXG4gICk7XG5cbiAgY29uc3Qgem9vbVRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IGNhbmNlbFBlbmRpbmdab29tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh6b29tVGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHpvb21UaW1lclJlZi5jdXJyZW50KTtcbiAgICAgIHpvb21UaW1lclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH0sIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IGNhbmNlbFBlbmRpbmdab29tLCBbY2FuY2VsUGVuZGluZ1pvb21dKTtcblxuICBjb25zdCBoYW5kbGVDbGVhckFjdGl2ZVNwYW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsUGVuZGluZ1pvb20oKTtcbiAgICBjbGVhckFjdGl2ZVNwYW4oKTtcbiAgfSwgW2NhbmNlbFBlbmRpbmdab29tLCBjbGVhckFjdGl2ZVNwYW5dKTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RTcGFuID0gdXNlQ2FsbGJhY2soXG4gICAgKHNwYW5JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgICAgaWYgKHNwYW5JZCA9PT0gYWN0aXZlU3BhbklkKSB7XG4gICAgICAgIGNsZWFyQWN0aXZlU3BhbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRBY3RpdmVTcGFuKHNwYW5JZCk7XG4gICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuKHNwYW5JZCk7XG4gICAgfSxcbiAgICBbXG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSxcbiAgICAgIGFjdGl2ZVNwYW5JZCxcbiAgICAgIGNsZWFyQWN0aXZlU3BhbixcbiAgICAgIHNldEFjdGl2ZVNwYW4sXG4gICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuLFxuICAgIF1cbiAgKTtcblxuICBjb25zdCBuYXZpZ2F0ZVRvU3BhbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzcGFuSWQ6IHN0cmluZykgPT4ge1xuICAgICAgc2V0QWN0aXZlU3BhbihzcGFuSWQpO1xuICAgICAgc2Nyb2xsU3BhbkludG9WaWV3KHNwYW5JZCk7XG4gICAgICBjYW5jZWxQZW5kaW5nWm9vbSgpO1xuICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgem9vbVRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBmb2N1c1ZpZXdwb3J0T25TcGFuKHNwYW5JZCk7XG4gICAgICB9LCBaT09NX0RFQk9VTkNFX01TKTtcbiAgICB9LFxuICAgIFtzZXRBY3RpdmVTcGFuLCBzY3JvbGxTcGFuSW50b1ZpZXcsIGNhbmNlbFBlbmRpbmdab29tLCBmb2N1c1ZpZXdwb3J0T25TcGFuXVxuICApO1xuXG4gIGNvbnN0IFthbHRIZWxkLCBzZXRBbHRIZWxkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGhhbmRsZUNsZWFyQWN0aXZlU3BhbigpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ0FsdCcpIHtcbiAgICAgICAgc2V0QWx0SGVsZCh0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uS2V5VXAgPSAoZTogS2V5Ym9hcmRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSAnQWx0Jykgc2V0QWx0SGVsZChmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkJsdXIgPSAoKTogdm9pZCA9PiBzZXRBbHRIZWxkKGZhbHNlKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBvbktleVVwKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uQmx1cik7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsIG9uS2V5VXApO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCBvbkJsdXIpO1xuICAgIH07XG4gIH0sIFtoYW5kbGVDbGVhckFjdGl2ZVNwYW5dKTtcblxuICBjb25zdCB0aW1lbGluZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtob3Zlciwgc2V0SG92ZXJdID0gdXNlU3RhdGU8VGltZWxpbmVIb3ZlciB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhvdmVySW5mbyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChob3ZlciA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBhYnNUaW1lID0gdmlld3BvcnQuc3RhcnQgKyBob3Zlci5mcmFjdGlvbiAqIHZpZXdEdXJhdGlvbjtcbiAgICBjb25zdCBvZmZzZXQgPSBhYnNUaW1lIC0gcm9vdC5zdGFydFRpbWU7XG4gICAgcmV0dXJuIHsgZnJhY3Rpb246IGhvdmVyLmZyYWN0aW9uLCBsYWJlbDogZm9ybWF0RHVyYXRpb25QcmVjaXNlKG9mZnNldCkgfTtcbiAgfSwgW2hvdmVyLCB2aWV3cG9ydC5zdGFydCwgdmlld0R1cmF0aW9uLCByb290LnN0YXJ0VGltZV0pO1xuXG4gIGNvbnN0IGhhbmRsZVRpbWVsaW5lTW91c2VNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBlbCA9IHRpbWVsaW5lUmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSByZWN0LndpZHRoIC0gVElNRUxJTkVfUEFERElOR19QWCAqIDI7XG4gICAgICBpZiAoY29udGVudFdpZHRoIDw9IDApIHJldHVybjtcbiAgICAgIGNvbnN0IGZyYWN0aW9uID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIE1hdGgubWluKFxuICAgICAgICAgIDEsXG4gICAgICAgICAgKGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIFRJTUVMSU5FX1BBRERJTkdfUFgpIC8gY29udGVudFdpZHRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBzZXRIb3Zlcih7XG4gICAgICAgIGZyYWN0aW9uLFxuICAgICAgICByb3dJbmRleDogTWF0aC5mbG9vcigoZS5jbGllbnRZIC0gcmVjdC50b3ApIC8gUk9XX0hFSUdIVF9QWCksXG4gICAgICB9KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGltZWxpbmVNb3VzZUxlYXZlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEhvdmVyKG51bGwpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbCA9IHRpbWVsaW5lUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbCB8fCByb290LmR1cmF0aW9uIDw9IDApIHJldHVybjtcblxuICAgIGNvbnN0IG9uV2hlZWwgPSAoZTogV2hlZWxFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNab29tR2VzdHVyZSA9IGUuY3RybEtleSB8fCBlLm1ldGFLZXk7XG4gICAgICBjb25zdCBoYXNEZWx0YVggPSBNYXRoLmFicyhlLmRlbHRhWCkgPiBNYXRoLmFicyhlLmRlbHRhWSk7XG5cbiAgICAgIGlmICghaXNab29tR2VzdHVyZSAmJiAhaGFzRGVsdGFYKSByZXR1cm47XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHJlY3Qud2lkdGggLSBUSU1FTElORV9QQURESU5HX1BYICogMjtcbiAgICAgIGlmIChjb250ZW50V2lkdGggPD0gMCkgcmV0dXJuO1xuXG4gICAgICBpZiAoaXNab29tR2VzdHVyZSkge1xuICAgICAgICBjb25zdCBjdXJzb3JGcmFjdGlvbiA9IE1hdGgubWF4KFxuICAgICAgICAgIDAsXG4gICAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgKGUuY2xpZW50WCAtIHJlY3QubGVmdCAtIFRJTUVMSU5FX1BBRERJTkdfUFgpIC8gY29udGVudFdpZHRoXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzY2FsZUZhY3RvciA9IHdoZWVsWm9vbVNjYWxlRmFjdG9yKGUpO1xuXG4gICAgICAgIHNldFZpZXdwb3J0KChwcmV2KSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJldkR1cmF0aW9uID0gcHJldi5lbmQgLSBwcmV2LnN0YXJ0O1xuICAgICAgICAgIGNvbnN0IGN1cnNvclRpbWUgPSBwcmV2LnN0YXJ0ICsgY3Vyc29yRnJhY3Rpb24gKiBwcmV2RHVyYXRpb247XG4gICAgICAgICAgLy8gQ2xhbXAgdGhlIGR1cmF0aW9uIGJlZm9yZSBhbmNob3Jpbmcgc28gdGhlIGN1cnNvciBrZWVwcyBpdHNcbiAgICAgICAgICAvLyBmcmFjdGlvbiBldmVuIHdoZW4gdGhlIHpvb20gaGl0cyB0aGUgbWluL21heCBib3VuZHMuXG4gICAgICAgICAgY29uc3QgbmV3RHVyYXRpb24gPSBNYXRoLm1heChcbiAgICAgICAgICAgIE1JTl9WSUVXUE9SVF9NUyxcbiAgICAgICAgICAgIE1hdGgubWluKHJvb3QuZHVyYXRpb24sIHByZXZEdXJhdGlvbiAqIHNjYWxlRmFjdG9yKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGNsYW1wVG9Sb290KHtcbiAgICAgICAgICAgIHN0YXJ0OiBjdXJzb3JUaW1lIC0gY3Vyc29yRnJhY3Rpb24gKiBuZXdEdXJhdGlvbixcbiAgICAgICAgICAgIGVuZDogY3Vyc29yVGltZSArICgxIC0gY3Vyc29yRnJhY3Rpb24pICogbmV3RHVyYXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZHggPSB3aGVlbERlbHRhVG9QaXhlbHMoZS5kZWx0YVgsIGUuZGVsdGFNb2RlKTtcbiAgICAgICAgc2V0Vmlld3BvcnQoKHByZXYpID0+IHtcbiAgICAgICAgICBjb25zdCBwYW5BbW91bnQgPSAoZHggLyBjb250ZW50V2lkdGgpICogKHByZXYuZW5kIC0gcHJldi5zdGFydCk7XG4gICAgICAgICAgcmV0dXJuIGNsYW1wVG9Sb290KHtcbiAgICAgICAgICAgIHN0YXJ0OiBwcmV2LnN0YXJ0ICsgcGFuQW1vdW50LFxuICAgICAgICAgICAgZW5kOiBwcmV2LmVuZCArIHBhbkFtb3VudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgb25XaGVlbCwgeyBwYXNzaXZlOiBmYWxzZSB9KTtcbiAgICByZXR1cm4gKCkgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBvbldoZWVsKTtcbiAgfSwgW3Jvb3QuZHVyYXRpb24sIHNldFZpZXdwb3J0LCBjbGFtcFRvUm9vdF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtwYW5lUm9vdFJlZn1cbiAgICAgIGRhdGEtcGFuZT1cInBhbmUtcm9vdFwiXG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IHctZnVsbCBoLWZ1bGwgbWF4LWgtZnVsbFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBpZD1cInRyYWNlLXBhcmVudFwiXG4gICAgICAgIGNsYXNzTmFtZT1cIkBjb250YWluZXIgZmxleC0xIG1pbi13LTAgZ3JpZCBncmlkLXJvd3MtW2F1dG9fMWZyXSBoLWZ1bGwgbWluLWgtMCBvdmVyZmxvdy1oaWRkZW4gcmVsYXRpdmUgYmctYmFja2dyb3VuZC0xMDBcIlxuICAgICAgPlxuICAgICAgICA8TWluaW1hcFxuICAgICAgICAgIHNwYW5zPXt0cmFjZS5zcGFuc31cbiAgICAgICAgICByb290PXtyb290fVxuICAgICAgICAgIHZpZXdwb3J0PXt2aWV3cG9ydH1cbiAgICAgICAgICBtaW5WaWV3cG9ydE1zPXtNSU5fVklFV1BPUlRfTVN9XG4gICAgICAgICAgb25WaWV3cG9ydENoYW5nZT17c2V0Vmlld3BvcnR9XG4gICAgICAgICAgb25BbmltYXRlVG89e2FuaW1hdGVUb31cbiAgICAgICAgLz5cbiAgICAgICAgPFNwbGl0UGFuZVxuICAgICAgICAgIHNjcm9sbENvbnRhaW5lclJlZj17c2Nyb2xsQ29udGFpbmVyUmVmfVxuICAgICAgICAgIHN0YXJ0SGVhZGVyPXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctYmFja2dyb3VuZC0xMDAgYm9yZGVyLWIgYm9yZGVyLWdyYXktYWxwaGEtNDAwIGgtMTAgbWluLWgtMTAgZmxleCBpdGVtcy1jZW50ZXIgcGwtNCBwci0yIGdhcC0xLjVcIj5cbiAgICAgICAgICAgICAgPFNlYXJjaCBjbGFzc05hbWU9XCJ3LTMuNSBoLTMuNSBzaHJpbmstMCB0ZXh0LWdyYXktODAwXCIgLz5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJ0cmFjZS12aWV3ZXItc2VhcmNoXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwidHJhY2Utdmlld2VyLXNlYXJjaFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hRdWVyeX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldFNlYXJjaFF1ZXJ5KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnICYmIHNlYXJjaFF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VhcmNoUXVlcnkoJycpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3BhbnMuLi5cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWFyY2ggc3BhbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBtaW4tdy0wIGJnLXRyYW5zcGFyZW50IHRleHQtbGFiZWwtMTQgdGV4dC1ncmF5LTEwMDAgcGxhY2Vob2xkZXI6dGV4dC1ncmF5LTgwMCBvdXRsaW5lLW5vbmVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7c2VhcmNoUXVlcnkgJiYgKFxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyIHNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTZWFyY2hRdWVyeSgnJyl9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCItbXItMiBoaWRkZW4gaC1mdWxsIG1heC13LWZ1bGwgc2hyaW5rLTAgY3Vyc29yLXBvaW50ZXIgaXRlbXMtY2VudGVyIHJvdW5kZWQtci1tZCBib3JkZXItMCBiZy10cmFuc3BhcmVudCBweC0yLjUgZm9udC1pbmhlcml0IHRleHQtbGFiZWwtMTYgdGV4dC1ncmF5LTkwMCBuby11bmRlcmxpbmUgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTUwIGVhc2UtaW4gaG92ZXI6dGV4dC1ncmF5LTEwMDAgZm9jdXMtdmlzaWJsZTotb3V0bGluZS1vZmZzZXQtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLVt2YXIoLS1kcy1mb2N1cy1jb2xvcildIG1pbi1bOTYxcHhdOmZsZXhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxLYmQgdmFyaWFudD1cIm91dGxpbmVcIiBzaXplPVwic2VhcmNoXCI+XG4gICAgICAgICAgICAgICAgICAgIEVzY1xuICAgICAgICAgICAgICAgICAgPC9LYmQ+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgICAgZW5kSGVhZGVyPXtcbiAgICAgICAgICAgIDxUaW1lbGluZUhlYWRlciBtYXJrZXJzPXt0aW1lTWFya2Vyc30gaG92ZXJJbmZvPXtob3ZlckluZm99IC8+XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJibG9jayBvdmVyZmxvdy12aXNpYmxlXCI+XG4gICAgICAgICAgICA8RXZlbnRMaXN0XG4gICAgICAgICAgICAgIHNwYW5zPXt0cmFjZS5zcGFuc31cbiAgICAgICAgICAgICAgYWN0aXZlU3BhbklkPXthY3RpdmVTcGFuSWR9XG4gICAgICAgICAgICAgIHNlYXJjaFJlc3VsdD17c2VhcmNoUmVzdWx0fVxuICAgICAgICAgICAgICBvblNlbGVjdFNwYW49e2hhbmRsZVNlbGVjdFNwYW59XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiByZWY9e2xvYWRNb3JlU2VudGluZWxSZWZ9IGNsYXNzTmFtZT1cImZsZXgganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAge2lzTG9hZGluZ01vcmUgPyAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBnYXAtMiBweS0zIHRleHQtbGFiZWwtMTQgdGV4dC1ncmF5LTgwMFwiPlxuICAgICAgICAgICAgICAgICAgPFNwaW5uZXIgc2l6ZT17MTR9IC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5Mb2FkaW5nIHNwYW5z4oCmPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHsvKiBiaW9tZS1pZ25vcmUgbGludC9hMTF5L25vU3RhdGljRWxlbWVudEludGVyYWN0aW9uczogdGltZWxpbmUgaG92ZXIgYW5kIHdoZWVsIGdlc3R1cmVzIGFyZSBwb2ludGVyLW9ubHkgYW5ub3RhdGlvbnMgKi99XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgcmVmPXt0aW1lbGluZVJlZn1cbiAgICAgICAgICAgIGlkPVwidHJhY2UtdGltZWxpbmVcIlxuICAgICAgICAgICAgY2xhc3NOYW1lPVwiQGNvbnRhaW5lciBibG9jayBtaW4taC0wIG92ZXJmbG93LXZpc2libGUgcmVsYXRpdmVcIlxuICAgICAgICAgICAgb25Eb3VibGVDbGljaz17cmVzZXRab29tfVxuICAgICAgICAgICAgb25Nb3VzZU1vdmU9e2hhbmRsZVRpbWVsaW5lTW91c2VNb3ZlfVxuICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXtoYW5kbGVUaW1lbGluZU1vdXNlTGVhdmV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRpbWVsaW5lXG4gICAgICAgICAgICAgIHNwYW5zPXt0cmFjZS5zcGFuc31cbiAgICAgICAgICAgICAgdmlld1N0YXJ0PXt2aWV3cG9ydC5zdGFydH1cbiAgICAgICAgICAgICAgdmlld0VuZD17dmlld3BvcnQuZW5kfVxuICAgICAgICAgICAgICBtYXJrZXJzPXt0aW1lTWFya2Vyc31cbiAgICAgICAgICAgICAgc2VsZWN0ZWRJZD17YWN0aXZlU3BhbklkfVxuICAgICAgICAgICAgICBzZWFyY2hSZXN1bHQ9e3NlYXJjaFJlc3VsdH1cbiAgICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdFNwYW59XG4gICAgICAgICAgICAgIG9uUmV2ZWFsVGltZT17aGFuZGxlUmV2ZWFsVGltZX1cbiAgICAgICAgICAgICAgaG92ZXI9e2hvdmVyfVxuICAgICAgICAgICAgICBhbHRIZWxkPXthbHRIZWxkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFRyYWNlU2hvcnRjdXRIZWxwZXJcbiAgICAgICAgICAgICAgaGFzTXVsdGlwbGVTcGFucz17dHJhY2Uuc3BhbnMubGVuZ3RoID4gMX1cbiAgICAgICAgICAgICAgcmVkdWNlZE1vdGlvbj17cmVkdWNlZE1vdGlvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLWF1dG8gZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyIGJvcmRlci1ncmF5LWFscGhhLTQwMCByb3VuZGVkLW1kIGJnLWJhY2tncm91bmQtMTAwIHNoYWRvdy1zbSBvdmVyZmxvdy1oaWRkZW4gZGl2aWRlLXggZGl2aWRlLWdyYXktYWxwaGEtNDAwXCI+XG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm11dGVkXCJcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3pvb21PdXR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzQXRNaW5ab29tfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJab29tIG91dFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Wm9vbU91dCBjbGFzc05hbWU9XCJ3LTQgaC00XCIgLz5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJtdXRlZFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtyZXNldFpvb219XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlJlc2V0IHpvb21cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFJvdGF0ZUNjdyBjbGFzc05hbWU9XCJ3LTMuNSBoLTMuNVwiIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwibXV0ZWRcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17em9vbUlufVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0F0TWF4Wm9vbX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiWm9vbSBpblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Wm9vbUluIGNsYXNzTmFtZT1cInctNCBoLTRcIiAvPlxuICAgICAgICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgPC9TcGxpdFBhbmU+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFRyYWNlRGV0YWlsUGFuZWxcbiAgICAgICAgY29udGFpbmVyUmVmPXtwYW5lUm9vdFJlZn1cbiAgICAgICAgb25OYXZpZ2F0ZVRvU3Bhbj17bmF2aWdhdGVUb1NwYW59XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsZWFyQWN0aXZlU3Bhbn1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4iXX0=
@@ -89,13 +89,15 @@ export interface Segment {
89
89
  * Returns an empty array for generic (non-workflow) spans.
90
90
  */
91
91
  export declare function computeSpanSegments(span: Span): Segment[];
92
+ export type SpanMarkerKind = 'hook_received' | 'attr_set';
92
93
  export interface SpanMarker {
93
94
  timeMs: number;
95
+ kind: SpanMarkerKind;
94
96
  }
95
97
  export declare function computeSpanMarkers(span: Span): SpanMarker[];
96
98
  export interface OffscreenSide {
97
99
  count: number;
98
- /** Nearest off-screen marker the one a reveal jumps to. */
100
+ /** Nearest off-screen marker: the one a reveal jumps to. */
99
101
  nearestMs: number;
100
102
  }
101
103
  export interface OffscreenMarkers {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/trace-viewer/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/trace-viewer/utils.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ export function clampViewportToRoot(next, rootStart, rootEnd, minDurationMs) {
37
37
  return { start, end: start + duration };
38
38
  }
39
39
  // ---------------------------------------------------------------------------
40
- // Wheel gestures shared between the timeline and the minimap
40
+ // Wheel gestures: shared between the timeline and the minimap
41
41
  // ---------------------------------------------------------------------------
42
42
  /** Convert a wheel delta to pixel units (line-mode deltas arrive in lines). */
43
43
  export function wheelDeltaToPixels(delta, deltaMode) {
@@ -141,8 +141,8 @@ export function computeSpanDelta(anchor, hovered, viewStart, viewEnd) {
141
141
  const originMs = earlierEnd <= laterStart ? earlierEnd : earlierStart;
142
142
  const deltaMs = laterStart - originMs;
143
143
  // Entirely outside the viewport. Compared in time-space (not clamped
144
- // fractions) so a zero-delta point sitting exactly on a viewport edge
145
- // e.g. the root span selected at default zoom still renders.
144
+ // fractions) so a zero-delta point sitting exactly on a viewport edge
145
+ // (e.g. the root span selected at default zoom) still renders.
146
146
  if (laterStart < viewStart || originMs > viewEnd) {
147
147
  return null;
148
148
  }
@@ -169,7 +169,7 @@ export const RESOURCE_CLASS_NAMES = {
169
169
  className: 'border-green-500 bg-green-200',
170
170
  errorClassName: 'border-red-500 bg-red-200',
171
171
  },
172
- // Passive spans (hooks) stay gray matches event-list icons and the minimap.
172
+ // Passive spans (hooks) stay gray; matches event-list icons and the minimap.
173
173
  hook: {
174
174
  className: 'border-gray-500 bg-gray-200',
175
175
  errorClassName: 'border-red-500 bg-red-200',
@@ -392,6 +392,7 @@ const MARKER_EVENT_NAMES = ['hook_received', 'attr_set'];
392
392
  export function computeSpanMarkers(span) {
393
393
  return sortedEventMarks(span.events, MARKER_EVENT_NAMES).map((mark) => ({
394
394
  timeMs: mark.time,
395
+ kind: mark.type,
395
396
  }));
396
397
  }
397
398
  /** Partition markers outside `[visibleStartMs, visibleEndMs]` by side. */
@@ -417,4 +418,4 @@ export function computeOffscreenMarkers(markers, visibleStartMs, visibleEndMs) {
417
418
  right: rightCount > 0 ? { count: rightCount, nearestMs: nearestRight } : null,
418
419
  };
419
420
  }
420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBWXZCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFhO0lBQzdDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUN4QyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFFdEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsUUFBUTtZQUFFLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsTUFBTTtZQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFR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IFNwYW4sIFNwYW5FdmVudCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgZm9ybWF0RHVyYXRpb24sXG4gIGZvcm1hdER1cmF0aW9uUHJlY2lzZSxcbiAgZ2V0SGlnaFJlc0luTXMsXG59IGZyb20gJy4vdXRpbC90aW1pbmcnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJvb3QgYm91bmRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBSb290Qm91bmRzIHtcbiAgc3RhcnRUaW1lOiBudW1iZXI7XG4gIGVuZFRpbWU6IG51bWJlcjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVSb290Qm91bmRzKHNwYW5zOiBTcGFuW10pOiBSb290Qm91bmRzIHtcbiAgbGV0IG1pblN0YXJ0ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBsZXQgbWF4RW5kID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuXG4gIGZvciAoY29uc3Qgc3BhbiBvZiBzcGFucykge1xuICAgIGNvbnN0IHMgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLnN0YXJ0VGltZSk7XG4gICAgY29uc3QgZSA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uZW5kVGltZSk7XG4gICAgaWYgKHMgPCBtaW5TdGFydCkgbWluU3RhcnQgPSBzO1xuICAgIGlmIChlID4gbWF4RW5kKSBtYXhFbmQgPSBlO1xuICB9XG5cbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobWluU3RhcnQpIHx8ICFOdW1iZXIuaXNGaW5pdGUobWF4RW5kKSkge1xuICAgIHJldHVybiB7IHN0YXJ0VGltZTogMCwgZW5kVGltZTogMSwgZHVyYXRpb246IDEgfTtcbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5tYXgobWF4RW5kIC0gbWluU3RhcnQsIDEpO1xuICByZXR1cm4geyBzdGFydFRpbWU6IG1pblN0YXJ0LCBlbmRUaW1lOiBtYXhFbmQsIGR1cmF0aW9uIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTcGFuRHVyYXRpb25NcyhzcGFuOiBTcGFuKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWF4KFxuICAgIDAsXG4gICAgZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKSAtIGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTcGFuRXJyb3JlZChzcGFuOiBTcGFuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHdvcmtmbG93U3RhdHVzID0gKHNwYW4uYXR0cmlidXRlcy5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgID8uc3RhdHVzIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHNwYW4uc3RhdHVzLmNvZGUgPT09IDIgfHwgd29ya2Zsb3dTdGF0dXMgPT09ICdmYWlsZWQnO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFZpZXdwb3J0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBWaWV3cG9ydFJhbmdlIHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2xhbXAgYSBjYW5kaWRhdGUgdmlld3BvcnQgdG8gdGhlIHJvb3QgZXh0ZW50LiBUaGUgcmVxdWVzdGVkIGR1cmF0aW9uIGlzXG4gKiBwcmVzZXJ2ZWQgd2hlcmUgcG9zc2libGUgKGNsYW1wZWQgdG8gW21pbkR1cmF0aW9uTXMsIHJvb3QgZHVyYXRpb25dKSwgdGhlblxuICogdGhlIHdpbmRvdyBpcyBzaGlmdGVkIGJhY2sgaW5zaWRlIHRoZSByb290IGJvdW5kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wVmlld3BvcnRUb1Jvb3QoXG4gIG5leHQ6IFZpZXdwb3J0UmFuZ2UsXG4gIHJvb3RTdGFydDogbnVtYmVyLFxuICByb290RW5kOiBudW1iZXIsXG4gIG1pbkR1cmF0aW9uTXM6IG51bWJlclxuKTogVmlld3BvcnRSYW5nZSB7XG4gIGNvbnN0IHJvb3REdXJhdGlvbiA9IE1hdGgubWF4KHJvb3RFbmQgLSByb290U3RhcnQsIG1pbkR1cmF0aW9uTXMpO1xuICBjb25zdCBkdXJhdGlvbiA9IE1hdGgubWluKFxuICAgIHJvb3REdXJhdGlvbixcbiAgICBNYXRoLm1heChtaW5EdXJhdGlvbk1zLCBuZXh0LmVuZCAtIG5leHQuc3RhcnQpXG4gICk7XG4gIGNvbnN0IG1heFN0YXJ0ID0gcm9vdEVuZCAtIGR1cmF0aW9uO1xuICBjb25zdCBzdGFydCA9IE1hdGgubWluKE1hdGgubWF4KG5leHQuc3RhcnQsIHJvb3RTdGFydCksIG1heFN0YXJ0KTtcbiAgcmV0dXJuIHsgc3RhcnQsIGVuZDogc3RhcnQgKyBkdXJhdGlvbiB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdoZWVsIGdlc3R1cmVzIOKAlCBzaGFyZWQgYmV0d2VlbiB0aGUgdGltZWxpbmUgYW5kIHRoZSBtaW5pbWFwXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIENvbnZlcnQgYSB3aGVlbCBkZWx0YSB0byBwaXhlbCB1bml0cyAobGluZS1tb2RlIGRlbHRhcyBhcnJpdmUgaW4gbGluZXMpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoZWVsRGVsdGFUb1BpeGVscyhkZWx0YTogbnVtYmVyLCBkZWx0YU1vZGU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBkZWx0YU1vZGUgPT09IDEgPyBkZWx0YSAqIDE2IDogZGVsdGE7XG59XG5cbi8qKlxuICogRXhwb25lbnRpYWwgem9vbSBmYWN0b3IgZm9yIGEgd2hlZWwgZ2VzdHVyZS4gQ29hcnNlIG1vdXNlLXdoZWVsIHN0ZXBzIGFyZVxuICogZGFtcGVkIGhhcmRlciB0aGFuIHRyYWNrcGFkIHBpbmNoZXMgc28gYm90aCBmZWVsIHNpbWlsYXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aGVlbFpvb21TY2FsZUZhY3RvcihldmVudDoge1xuICBkZWx0YVk6IG51bWJlcjtcbiAgZGVsdGFNb2RlOiBudW1iZXI7XG59KTogbnVtYmVyIHtcbiAgY29uc3QgZHkgPSB3aGVlbERlbHRhVG9QaXhlbHMoZXZlbnQuZGVsdGFZLCBldmVudC5kZWx0YU1vZGUpO1xuICBjb25zdCBpc01vdXNlV2hlZWwgPSBldmVudC5kZWx0YU1vZGUgPT09IDEgfHwgTWF0aC5hYnMoZXZlbnQuZGVsdGFZKSA+PSA1MDtcbiAgcmV0dXJuIDIgKiogKGR5IC8gKGlzTW91c2VXaGVlbCA/IDIwMCA6IDYwKSk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGltZSBtYXJrZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBUaW1lTWFya2VyIHtcbiAgcG9zaXRpb246IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IG51bWJlcjtcbn1cblxuY29uc3QgTklDRV9JTlRFUlZBTFMgPSBbXG4gIDEsIDIsIDUsIDEwLCAyMCwgNTAsIDEwMCwgMjAwLCA1MDAsIDFfMDAwLCAyXzAwMCwgNV8wMDAsIDEwXzAwMCwgMjBfMDAwLFxuICA1MF8wMDAsIDEwMF8wMDAsIDIwMF8wMDAsIDUwMF8wMDAsIDFfMDAwXzAwMCwgMl8wMDBfMDAwLCA1XzAwMF8wMDAsXG4gIDEwXzAwMF8wMDAsIDIwXzAwMF8wMDAsIDUwXzAwMF8wMDAsIDEwMF8wMDBfMDAwLCAyMDBfMDAwXzAwMCwgNTAwXzAwMF8wMDAsXG4gIDFfMDAwXzAwMF8wMDAsIDJfMDAwXzAwMF8wMDAsIDVfMDAwXzAwMF8wMDAsXG5dO1xuXG5jb25zdCBNQVhfTUFSS0VSUyA9IDg7XG5cbmNvbnN0IE1TX0lOX1NFQ09ORCA9IDEwMDA7XG5cbmZ1bmN0aW9uIHBpY2tJbnRlcnZhbCh2aWV3RHVyYXRpb246IG51bWJlciwgbWF4VGlja3M6IG51bWJlcik6IG51bWJlciB7XG4gIGZvciAoY29uc3QgaW50ZXJ2YWwgb2YgTklDRV9JTlRFUlZBTFMpIHtcbiAgICBpZiAodmlld0R1cmF0aW9uIC8gaW50ZXJ2YWwgPD0gbWF4VGlja3MpIHJldHVybiBpbnRlcnZhbDtcbiAgfVxuICByZXR1cm4gTklDRV9JTlRFUlZBTFNbTklDRV9JTlRFUlZBTFMubGVuZ3RoIC0gMV07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVGltZU1hcmtlcnMoXG4gIHZpZXdEdXJhdGlvbjogbnVtYmVyLFxuICBvZmZzZXQ6IG51bWJlclxuKTogVGltZU1hcmtlcltdIHtcbiAgaWYgKHZpZXdEdXJhdGlvbiA8PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgbWF4VGlja3MgPSA2O1xuICBjb25zdCBpbnRlcnZhbCA9IHBpY2tJbnRlcnZhbCh2aWV3RHVyYXRpb24sIG1heFRpY2tzKTtcblxuICAvLyBTdWItc2Vjb25kIHN0ZXBzIG5lZWQgZnJhY3Rpb25hbCBsYWJlbHMsIG9yIHRpY2tzIHBhc3QgMXMgY29sbGlkZSBhc1xuICAvLyBkdXBsaWNhdGUgd2hvbGUgc2Vjb25kcyAoXCLigKYxcywgMnMsIDJzLCAzc1wiKS4gU2NhbGUgZGVjaW1hbHMgdG8gdGhlIHN0ZXAuXG4gIGNvbnN0IGZyYWN0aW9uRGlnaXRzID1cbiAgICBpbnRlcnZhbCA+PSBNU19JTl9TRUNPTkRcbiAgICAgID8gMFxuICAgICAgOiBNYXRoLmNlaWwoLU1hdGgubG9nMTAoaW50ZXJ2YWwgLyBNU19JTl9TRUNPTkQpKTtcblxuICBjb25zdCBmaXJzdFRpY2sgPSBNYXRoLmNlaWwob2Zmc2V0IC8gaW50ZXJ2YWwpICogaW50ZXJ2YWw7XG4gIGNvbnN0IG1hcmtlcnM6IFRpbWVNYXJrZXJbXSA9IFtdO1xuXG4gIGZvciAobGV0IHQgPSBmaXJzdFRpY2s7IHQgPD0gb2Zmc2V0ICsgdmlld0R1cmF0aW9uOyB0ICs9IGludGVydmFsKSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSAodCAtIG9mZnNldCkgLyB2aWV3RHVyYXRpb247XG4gICAgaWYgKHBvc2l0aW9uIDwgLTAuMDEgfHwgcG9zaXRpb24gPiAxLjAxKSBjb250aW51ZTtcbiAgICBtYXJrZXJzLnB1c2goe1xuICAgICAgcG9zaXRpb246IE1hdGgubWluKE1hdGgubWF4KHBvc2l0aW9uLCAwKSwgMSksXG4gICAgICBsYWJlbDpcbiAgICAgICAgZnJhY3Rpb25EaWdpdHMgPT09IDBcbiAgICAgICAgICA/IGZvcm1hdER1cmF0aW9uKE1hdGguYWJzKHQpLCB0cnVlKVxuICAgICAgICAgIDogZm9ybWF0RHVyYXRpb25QcmVjaXNlKE1hdGguYWJzKHQpLCBmcmFjdGlvbkRpZ2l0cyksXG4gICAgICB2YWx1ZTogdCxcbiAgICB9KTtcbiAgICBpZiAobWFya2Vycy5sZW5ndGggPj0gTUFYX01BUktFUlMpIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIG1hcmtlcnM7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3BhbiBnYXBzIOKAlCB0aW1lIGRlbHRhcyBiZXR3ZWVuIGNvbnNlY3V0aXZlIHNwYW5zIChBbHQta2V5IG92ZXJsYXkpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTcGFuR2FwIHtcbiAgZ2FwTXM6IG51bWJlcjtcbiAgbGVmdEZyYWM6IG51bWJlcjtcbiAgcmlnaHRGcmFjOiBudW1iZXI7XG4gIHJvd0luZGV4OiBudW1iZXI7XG59XG5cbi8qKiBQcm9qZWN0IGFuIGFic29sdXRlIHRpbWUgb250byB0aGUgdmlld3BvcnQgYXMgYSBjbGFtcGVkIFswLCAxXSBmcmFjdGlvbi4gKi9cbmZ1bmN0aW9uIHRvVmlld3BvcnRGcmFjKG1zOiBudW1iZXIsIHZpZXdTdGFydDogbnVtYmVyLCByYW5nZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KChtcyAtIHZpZXdTdGFydCkgLyByYW5nZSwgMCksIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNwYW5HYXBzKFxuICBzcGFuczogU3BhbltdLFxuICB2aWV3U3RhcnQ6IG51bWJlcixcbiAgdmlld0VuZDogbnVtYmVyXG4pOiBTcGFuR2FwW10ge1xuICBjb25zdCByYW5nZSA9IHZpZXdFbmQgLSB2aWV3U3RhcnQ7XG4gIGlmIChyYW5nZSA8PSAwKSByZXR1cm4gW107XG5cbiAgY29uc3QgZ2FwczogU3BhbkdhcFtdID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3BhbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgZW5kVGltZSA9IGdldEhpZ2hSZXNJbk1zKHNwYW5zW2ldLmVuZFRpbWUpO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IGdldEhpZ2hSZXNJbk1zKHNwYW5zW2kgKyAxXS5zdGFydFRpbWUpO1xuICAgIGNvbnN0IGdhcE1zID0gc3RhcnRUaW1lIC0gZW5kVGltZTtcbiAgICBpZiAoZ2FwTXMgPD0gMCkgY29udGludWU7XG5cbiAgICBjb25zdCBsZWZ0RnJhYyA9IHRvVmlld3BvcnRGcmFjKGVuZFRpbWUsIHZpZXdTdGFydCwgcmFuZ2UpO1xuICAgIGNvbnN0IHJpZ2h0RnJhYyA9IHRvVmlld3BvcnRGcmFjKHN0YXJ0VGltZSwgdmlld1N0YXJ0LCByYW5nZSk7XG4gICAgaWYgKHJpZ2h0RnJhYyAtIGxlZnRGcmFjIDwgMC4wMDEpIGNvbnRpbnVlO1xuXG4gICAgZ2Fwcy5wdXNoKHsgZ2FwTXMsIGxlZnRGcmFjLCByaWdodEZyYWMsIHJvd0luZGV4OiBpIH0pO1xuICB9XG4gIHJldHVybiBnYXBzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5EZWx0YSB7XG4gIC8qKiBUcnVlIG1lYXN1cmVkIHRpbWUgYmV0d2VlbiB0aGUgdHdvIHNwYW5zLCB1bmFmZmVjdGVkIGJ5IGNsYW1waW5nLiAqL1xuICBkZWx0YU1zOiBudW1iZXI7XG4gIC8qKiBWaWV3cG9ydC1jbGFtcGVkIGZyYWN0aW9uIG9mIHRoZSBhbmNob3Igc3BhbidzIG1lYXN1cmVkIGVkZ2UuICovXG4gIGFuY2hvckZyYWM6IG51bWJlcjtcbiAgLyoqIFZpZXdwb3J0LWNsYW1wZWQgZnJhY3Rpb24gb2YgdGhlIGhvdmVyZWQgc3BhbidzIG1lYXN1cmVkIGVkZ2UuICovXG4gIGhvdmVyZWRGcmFjOiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGljaCBlZGdlIG9mIHRoZSBhbmNob3Igc3BhbiB0aGUgbWVhc3VyZW1lbnQgcnVucyBmcm9tOiBpdHMgZW5kIHdoZW4gdGhlXG4gICAqIHNwYW5zIGFyZSBkaXNqb2ludCBhbmQgdGhlIGFuY2hvciBjb21lcyBmaXJzdCwgb3RoZXJ3aXNlIGl0cyBzdGFydC5cbiAgICovXG4gIGFuY2hvckVkZ2U6ICdzdGFydCcgfCAnZW5kJztcbiAgLyoqXG4gICAqIFNldCB3aGVuIHRoZSBob3ZlcmVkIHNwYW4gbGllcyBlbnRpcmVseSBvdXRzaWRlIHRoZSB2aWV3cG9ydCBvbiBvbmUgc2lkZSxcbiAgICogaS5lLiBpdHMgcm93IHJlbmRlcnMgYW4gb2ZmLXNjcmVlbiBhcnJvdyB0aGUgbGluZSBzaG91bGQgc3RvcCBzaG9ydCBvZi5cbiAgICovXG4gIGhvdmVyZWRPZmZzY3JlZW46ICdsZWZ0JyB8ICdyaWdodCcgfCBudWxsO1xufVxuXG4vKipcbiAqIE1lYXN1cmUgdGhlIHRlbXBvcmFsIGRlbHRhIGJldHdlZW4gYW4gYW5jaG9yIChzZWxlY3RlZCkgc3BhbiBhbmQgYSBob3ZlcmVkXG4gKiBzcGFuIGZvciB0aGUgQWx0K2hvdmVyIG1lYXN1cmVtZW50IG92ZXJsYXkuIE9yZGVyaW5nIHRoZSB0d28gc3BhbnMgYnkgc3RhcnRcbiAqIHRpbWUgKEUgPSBlYXJsaWVyLXN0YXJ0aW5nLCBMID0gbGF0ZXItc3RhcnRpbmcpLCB0aGUgbWVhc3VyZW1lbnQgcnVucyB0b1xuICogTCdzIHN0YXJ0IGZyb20gRSdzIGVuZCB3aGVuIHRoZSBzcGFucyBhcmUgZGlzam9pbnQgKFwiaG93IGxvbmcgYWZ0ZXIgRSBlbmRlZFxuICogZGlkIEwgc3RhcnRcIiksIG9yIGZyb20gRSdzIHN0YXJ0IHdoZW4gdGhleSBvdmVybGFwIChcImhvdyBsb25nIGFmdGVyIEVcbiAqIHN0YXJ0ZWQgZGlkIEwgc3RhcnRcIikuIEZyYWN0aW9ucyBhcmUgY2xhbXBlZCB0byB0aGUgdmlld3BvcnQgbGlrZVxuICogYGNvbXB1dGVTcGFuR2Fwc2A7IGBkZWx0YU1zYCBpcyBhbHdheXMgdGhlIHRydWUgZHVyYXRpb24uIFJldHVybnMgbnVsbCB3aGVuXG4gKiB0aGUgbWVhc3VyZW1lbnQgbGllcyBlbnRpcmVseSBvdXRzaWRlIHRoZSB2aWV3cG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTcGFuRGVsdGEoXG4gIGFuY2hvcjogU3BhbixcbiAgaG92ZXJlZDogU3BhbixcbiAgdmlld1N0YXJ0OiBudW1iZXIsXG4gIHZpZXdFbmQ6IG51bWJlclxuKTogU3BhbkRlbHRhIHwgbnVsbCB7XG4gIGNvbnN0IHJhbmdlID0gdmlld0VuZCAtIHZpZXdTdGFydDtcbiAgaWYgKHJhbmdlIDw9IDApIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGFuY2hvclN0YXJ0ID0gZ2V0SGlnaFJlc0luTXMoYW5jaG9yLnN0YXJ0VGltZSk7XG4gIGNvbnN0IGhvdmVyZWRTdGFydCA9IGdldEhpZ2hSZXNJbk1zKGhvdmVyZWQuc3RhcnRUaW1lKTtcbiAgY29uc3QgYW5jaG9ySXNFYXJsaWVyID0gYW5jaG9yU3RhcnQgPD0gaG92ZXJlZFN0YXJ0O1xuICBjb25zdCBlYXJsaWVyU3RhcnQgPSBhbmNob3JJc0VhcmxpZXIgPyBhbmNob3JTdGFydCA6IGhvdmVyZWRTdGFydDtcbiAgY29uc3QgZWFybGllckVuZCA9IGdldEhpZ2hSZXNJbk1zKFxuICAgIGFuY2hvcklzRWFybGllciA/IGFuY2hvci5lbmRUaW1lIDogaG92ZXJlZC5lbmRUaW1lXG4gICk7XG4gIGNvbnN0IGxhdGVyU3RhcnQgPSBhbmNob3JJc0VhcmxpZXIgPyBob3ZlcmVkU3RhcnQgOiBhbmNob3JTdGFydDtcblxuICBjb25zdCBvcmlnaW5NcyA9IGVhcmxpZXJFbmQgPD0gbGF0ZXJTdGFydCA/IGVhcmxpZXJFbmQgOiBlYXJsaWVyU3RhcnQ7XG4gIGNvbnN0IGRlbHRhTXMgPSBsYXRlclN0YXJ0IC0gb3JpZ2luTXM7XG5cbiAgLy8gRW50aXJlbHkgb3V0c2lkZSB0aGUgdmlld3BvcnQuIENvbXBhcmVkIGluIHRpbWUtc3BhY2UgKG5vdCBjbGFtcGVkXG4gIC8vIGZyYWN0aW9ucykgc28gYSB6ZXJvLWRlbHRhIHBvaW50IHNpdHRpbmcgZXhhY3RseSBvbiBhIHZpZXdwb3J0IGVkZ2Ug4oCUXG4gIC8vIGUuZy4gdGhlIHJvb3Qgc3BhbiBzZWxlY3RlZCBhdCBkZWZhdWx0IHpvb20g4oCUIHN0aWxsIHJlbmRlcnMuXG4gIGlmIChsYXRlclN0YXJ0IDwgdmlld1N0YXJ0IHx8IG9yaWdpbk1zID4gdmlld0VuZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3JpZ2luRnJhYyA9IHRvVmlld3BvcnRGcmFjKG9yaWdpbk1zLCB2aWV3U3RhcnQsIHJhbmdlKTtcbiAgY29uc3QgbGF0ZXJGcmFjID0gdG9WaWV3cG9ydEZyYWMobGF0ZXJTdGFydCwgdmlld1N0YXJ0LCByYW5nZSk7XG5cbiAgY29uc3QgaG92ZXJlZEVuZCA9IGdldEhpZ2hSZXNJbk1zKGhvdmVyZWQuZW5kVGltZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWx0YU1zLFxuICAgIGFuY2hvckZyYWM6IGFuY2hvcklzRWFybGllciA/IG9yaWdpbkZyYWMgOiBsYXRlckZyYWMsXG4gICAgaG92ZXJlZEZyYWM6IGFuY2hvcklzRWFybGllciA/IGxhdGVyRnJhYyA6IG9yaWdpbkZyYWMsXG4gICAgYW5jaG9yRWRnZTogYW5jaG9ySXNFYXJsaWVyICYmIGVhcmxpZXJFbmQgPD0gbGF0ZXJTdGFydCA/ICdlbmQnIDogJ3N0YXJ0JyxcbiAgICBob3ZlcmVkT2Zmc2NyZWVuOlxuICAgICAgaG92ZXJlZFN0YXJ0ID4gdmlld0VuZCA/ICdyaWdodCcgOiBob3ZlcmVkRW5kIDwgdmlld1N0YXJ0ID8gJ2xlZnQnIDogbnVsbCxcbiAgfTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXNvdXJjZSBjb2xvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgUkVTT1VSQ0VfQ0xBU1NfTkFNRVM6IFJlY29yZDxcbiAgc3RyaW5nLFxuICB7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgZXJyb3JDbGFzc05hbWU/OiBzdHJpbmc7XG4gIH1cbj4gPSB7XG4gIHJ1bjoge1xuICAgIGNsYXNzTmFtZTogJ2JvcmRlci1ibHVlLTUwMCBiZy1ibHVlLTIwMCcsXG4gICAgZXJyb3JDbGFzc05hbWU6ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtMjAwJyxcbiAgfSxcbiAgc3RlcDoge1xuICAgIGNsYXNzTmFtZTogJ2JvcmRlci1ncmVlbi01MDAgYmctZ3JlZW4tMjAwJyxcbiAgICBlcnJvckNsYXNzTmFtZTogJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC0yMDAnLFxuICB9LFxuICAvLyBQYXNzaXZlIHNwYW5zIChob29rcykgc3RheSBncmF5IOKAlCBtYXRjaGVzIGV2ZW50LWxpc3QgaWNvbnMgYW5kIHRoZSBtaW5pbWFwLlxuICBob29rOiB7XG4gICAgY2xhc3NOYW1lOiAnYm9yZGVyLWdyYXktNTAwIGJnLWdyYXktMjAwJyxcbiAgICBlcnJvckNsYXNzTmFtZTogJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC0yMDAnLFxuICB9LFxuICBzbGVlcDoge1xuICAgIGNsYXNzTmFtZTogJ2JvcmRlci1wdXJwbGUtNTAwIGJnLXB1cnBsZS0yMDAnLFxuICAgIGVycm9yQ2xhc3NOYW1lOiAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTIwMCcsXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBjbGFzc05hbWU6ICdib3JkZXItZ3JheS01MDAgYmctZ3JheS0yMDAnLFxuICAgIGVycm9yQ2xhc3NOYW1lOiAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTIwMCcsXG4gIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2VDbGFzc05hbWVzKHJlc291cmNlOiBzdHJpbmcpOiB7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBlcnJvckNsYXNzTmFtZT86IHN0cmluZztcbn0ge1xuICByZXR1cm4gUkVTT1VSQ0VfQ0xBU1NfTkFNRVNbcmVzb3VyY2VdID8/IFJFU09VUkNFX0NMQVNTX05BTUVTLmRlZmF1bHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3BhbiBzZWdtZW50cyDigJQgc3BsaXQgYSB0aW1lbGluZSBiYXIgaW50byBjb2xvcmVkIHNlY3Rpb25zIGJ5IGV2ZW50IHN0YXRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgU2VnbWVudFN0YXR1cyA9XG4gIHwgJ3F1ZXVlZCdcbiAgfCAncGVuZGluZydcbiAgfCAncnVubmluZydcbiAgfCAnY29tcGxldGVkJ1xuICB8ICdmYWlsZWQnXG4gIHwgJ3JldHJ5aW5nJ1xuICB8ICdzdWNjZWVkZWQnXG4gIHwgJ3dhaXRpbmcnXG4gIHwgJ3NsZWVwaW5nJ1xuICB8ICdyZWNlaXZlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VnbWVudCB7XG4gIHN0YXJ0RnJhY3Rpb246IG51bWJlcjtcbiAgZW5kRnJhY3Rpb246IG51bWJlcjtcbiAgc3RhdHVzOiBTZWdtZW50U3RhdHVzO1xufVxuXG5mdW5jdGlvbiBjbGFtcEZyYWN0aW9uKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gdGltZVRvRnJhY3Rpb24oXG4gIHRpbWU6IG51bWJlcixcbiAgc3BhblN0YXJ0OiBudW1iZXIsXG4gIHNwYW5EdXJhdGlvbjogbnVtYmVyXG4pOiBudW1iZXIge1xuICBpZiAoc3BhbkR1cmF0aW9uIDw9IDApIHJldHVybiAwO1xuICByZXR1cm4gY2xhbXBGcmFjdGlvbigodGltZSAtIHNwYW5TdGFydCkgLyBzcGFuRHVyYXRpb24pO1xufVxuXG5pbnRlcmZhY2UgRXZlbnRNYXJrIHtcbiAgdGltZTogbnVtYmVyO1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHNvcnRlZEV2ZW50TWFya3MoXG4gIGV2ZW50czogU3BhbkV2ZW50W10sXG4gIHJlbGV2YW50TmFtZXM6IHN0cmluZ1tdXG4pOiBFdmVudE1hcmtbXSB7XG4gIHJldHVybiBldmVudHNcbiAgICAuZmlsdGVyKChlKSA9PiByZWxldmFudE5hbWVzLmluY2x1ZGVzKGUubmFtZSkpXG4gICAgLm1hcCgoZSkgPT4gKHsgdGltZTogZ2V0SGlnaFJlc0luTXMoZS50aW1lc3RhbXApLCB0eXBlOiBlLm5hbWUgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGEudGltZSAtIGIudGltZSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdGVwU2VnbWVudHNGcm9tU3BhbihcbiAgc3RhcnRNczogbnVtYmVyLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICBldmVudHM6IFNwYW5FdmVudFtdXG4pOiBTZWdtZW50W10ge1xuICBjb25zdCBzZWdtZW50czogU2VnbWVudFtdID0gW107XG4gIGlmIChkdXJhdGlvbiA8PSAwKSByZXR1cm4gc2VnbWVudHM7XG5cbiAgY29uc3QgbWFya3MgPSBzb3J0ZWRFdmVudE1hcmtzKGV2ZW50cywgW1xuICAgICdzdGVwX3N0YXJ0ZWQnLFxuICAgICdzdGVwX3JldHJ5aW5nJyxcbiAgICAnc3RlcF9mYWlsZWQnLFxuICAgICdzdGVwX2NvbXBsZXRlZCcsXG4gIF0pO1xuXG4gIGlmIChtYXJrcy5sZW5ndGggPT09IDApIHtcbiAgICBzZWdtZW50cy5wdXNoKHsgc3RhcnRGcmFjdGlvbjogMCwgZW5kRnJhY3Rpb246IDEsIHN0YXR1czogJ3F1ZXVlZCcgfSk7XG4gICAgcmV0dXJuIHNlZ21lbnRzO1xuICB9XG5cbiAgY29uc3QgZmlyc3RGcmFjdGlvbiA9IHRpbWVUb0ZyYWN0aW9uKG1hcmtzWzBdLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKTtcbiAgaWYgKGZpcnN0RnJhY3Rpb24gPiAwLjAwMSkge1xuICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgc3RhcnRGcmFjdGlvbjogMCxcbiAgICAgIGVuZEZyYWN0aW9uOiBmaXJzdEZyYWN0aW9uLFxuICAgICAgc3RhdHVzOiAncXVldWVkJyxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFya3MubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBtYXJrID0gbWFya3NbaV07XG4gICAgY29uc3QgbWFya0ZyYWMgPSB0aW1lVG9GcmFjdGlvbihtYXJrLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKTtcbiAgICBjb25zdCBuZXh0TWFyayA9IG1hcmtzW2kgKyAxXTtcbiAgICBjb25zdCBuZXh0RnJhYyA9IG5leHRNYXJrXG4gICAgICA/IHRpbWVUb0ZyYWN0aW9uKG5leHRNYXJrLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKVxuICAgICAgOiAxO1xuXG4gICAgaWYgKG1hcmsudHlwZSA9PT0gJ3N0ZXBfc3RhcnRlZCcpIHtcbiAgICAgIGlmIChpID09PSBtYXJrcy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICAgIHN0YXJ0RnJhY3Rpb246IG1hcmtGcmFjLFxuICAgICAgICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgICAgICAgIHN0YXR1czogJ3N1Y2NlZWRlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV4dFR5cGUgPSBuZXh0TWFyay50eXBlO1xuICAgICAgICBjb25zdCBhdHRlbXB0U3RhdHVzOiBTZWdtZW50U3RhdHVzID1cbiAgICAgICAgICBuZXh0VHlwZSA9PT0gJ3N0ZXBfcmV0cnlpbmcnIHx8IG5leHRUeXBlID09PSAnc3RlcF9mYWlsZWQnXG4gICAgICAgICAgICA/ICdmYWlsZWQnXG4gICAgICAgICAgICA6IG5leHRUeXBlID09PSAnc3RlcF9jb21wbGV0ZWQnXG4gICAgICAgICAgICAgID8gJ3N1Y2NlZWRlZCdcbiAgICAgICAgICAgICAgOiAncmV0cnlpbmcnO1xuICAgICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgICBzdGFydEZyYWN0aW9uOiBtYXJrRnJhYyxcbiAgICAgICAgICBlbmRGcmFjdGlvbjogbmV4dEZyYWMsXG4gICAgICAgICAgc3RhdHVzOiBhdHRlbXB0U3RhdHVzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG1hcmsudHlwZSA9PT0gJ3N0ZXBfcmV0cnlpbmcnKSB7XG4gICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgc3RhcnRGcmFjdGlvbjogbWFya0ZyYWMsXG4gICAgICAgIGVuZEZyYWN0aW9uOiBuZXh0RnJhYyxcbiAgICAgICAgc3RhdHVzOiAncmV0cnlpbmcnLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXJrLnR5cGUgPT09ICdzdGVwX2ZhaWxlZCcpIHtcbiAgICAgIGlmIChtYXJrRnJhYyA8IDAuOTk5KSB7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICAgIHN0YXJ0RnJhY3Rpb246IG1hcmtGcmFjLFxuICAgICAgICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgICAgICAgIHN0YXR1czogJ2ZhaWxlZCcsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUhvb2tTZWdtZW50c0Zyb21TcGFuKFxuICBzdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGV2ZW50czogU3BhbkV2ZW50W11cbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBTZWdtZW50W10gPSBbXTtcbiAgaWYgKGR1cmF0aW9uIDw9IDApIHJldHVybiBzZWdtZW50cztcblxuICBjb25zdCBkaXNwb3NlZCA9IHNvcnRlZEV2ZW50TWFya3MoZXZlbnRzLCBbJ2hvb2tfZGlzcG9zZWQnXSlbMF07XG4gIGNvbnN0IGRpc3Bvc2VkRnJhYyA9IGRpc3Bvc2VkXG4gICAgPyB0aW1lVG9GcmFjdGlvbihkaXNwb3NlZC50aW1lLCBzdGFydE1zLCBkdXJhdGlvbilcbiAgICA6IG51bGw7XG5cbiAgY29uc3Qgd2FpdGluZ0VuZCA9IGRpc3Bvc2VkRnJhYyA/PyAxO1xuICBpZiAod2FpdGluZ0VuZCA+IDAuMDAxKSB7XG4gICAgc2VnbWVudHMucHVzaCh7XG4gICAgICBzdGFydEZyYWN0aW9uOiAwLFxuICAgICAgZW5kRnJhY3Rpb246IHdhaXRpbmdFbmQsXG4gICAgICBzdGF0dXM6ICd3YWl0aW5nJyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChkaXNwb3NlZEZyYWMgIT09IG51bGwgJiYgZGlzcG9zZWRGcmFjIDwgMC45OTkpIHtcbiAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgIHN0YXJ0RnJhY3Rpb246IGRpc3Bvc2VkRnJhYyxcbiAgICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgICAgc3RhdHVzOiAnc3VjY2VlZGVkJyxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVNsZWVwU2VnbWVudHNGcm9tU3BhbihcbiAgX3N0YXJ0TXM6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgX2V2ZW50czogU3BhbkV2ZW50W11cbik6IFNlZ21lbnRbXSB7XG4gIGlmIChkdXJhdGlvbiA8PSAwKSByZXR1cm4gW107XG4gIHJldHVybiBbeyBzdGFydEZyYWN0aW9uOiAwLCBlbmRGcmFjdGlvbjogMSwgc3RhdHVzOiAnc2xlZXBpbmcnIH1dO1xufVxuXG5mdW5jdGlvbiBydW5TZWdtZW50U3RhdHVzKHJ1blN0YXR1czogc3RyaW5nIHwgdW5kZWZpbmVkKTogU2VnbWVudFN0YXR1cyB7XG4gIGlmIChydW5TdGF0dXMgPT09ICdmYWlsZWQnKSByZXR1cm4gJ2ZhaWxlZCc7XG4gIGlmIChydW5TdGF0dXMgPT09ICdwZW5kaW5nJykgcmV0dXJuICdwZW5kaW5nJztcbiAgaWYgKHJ1blN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4gJ3J1bm5pbmcnO1xuICByZXR1cm4gJ2NvbXBsZXRlZCc7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSdW5TZWdtZW50c0Zyb21TcGFuKFxuICBzdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGFjdGl2ZVN0YXJ0TXM6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgZXZlbnRzOiBTcGFuRXZlbnRbXSxcbiAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBTZWdtZW50W10gPSBbXTtcbiAgaWYgKGR1cmF0aW9uIDw9IDApIHJldHVybiBzZWdtZW50cztcblxuICBjb25zdCBzb3J0ZWQgPSBbLi4uZXZlbnRzXVxuICAgIC5tYXAoKGUpID0+ICh7IG5hbWU6IGUubmFtZSwgdGltZTogZ2V0SGlnaFJlc0luTXMoZS50aW1lc3RhbXApIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLnRpbWUgLSBiLnRpbWUpO1xuXG4gIGNvbnN0IHJ1bkRhdGEgPSBhdHRyaWJ1dGVzPy5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBjb25zdCBydW5TdGF0dXMgPSBydW5EYXRhPy5zdGF0dXMgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGhhc1J1bkNyZWF0ZWQgPSBzb3J0ZWQuc29tZSgoZSkgPT4gZS5uYW1lID09PSAncnVuX2NyZWF0ZWQnKTtcblxuICBpZiAoIWhhc1J1bkNyZWF0ZWQpIHtcbiAgICByZXR1cm4gY29tcHV0ZVYxUnVuU2VnbWVudHMoc3RhcnRNcywgZHVyYXRpb24sIGFjdGl2ZVN0YXJ0TXMsIHJ1blN0YXR1cyk7XG4gIH1cblxuICBjb25zdCBmYWlsZWRFdmVudCA9IHNvcnRlZC5maW5kKChlKSA9PiBlLm5hbWUgPT09ICdydW5fZmFpbGVkJyk7XG5cbiAgbGV0IGN1cnNvciA9IDA7XG4gIGlmIChhY3RpdmVTdGFydE1zICE9PSB1bmRlZmluZWQgJiYgYWN0aXZlU3RhcnRNcyA+IHN0YXJ0TXMpIHtcbiAgICBjb25zdCBxdWV1ZWRGcmFjID0gdGltZVRvRnJhY3Rpb24oYWN0aXZlU3RhcnRNcywgc3RhcnRNcywgZHVyYXRpb24pO1xuICAgIGlmIChxdWV1ZWRGcmFjID4gMC4wMDEpIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICBzdGFydEZyYWN0aW9uOiAwLFxuICAgICAgICBlbmRGcmFjdGlvbjogcXVldWVkRnJhYyxcbiAgICAgICAgc3RhdHVzOiAncXVldWVkJyxcbiAgICAgIH0pO1xuICAgICAgY3Vyc29yID0gcXVldWVkRnJhYztcbiAgICB9XG4gIH1cblxuICBzZWdtZW50cy5wdXNoKHtcbiAgICBzdGFydEZyYWN0aW9uOiBjdXJzb3IsXG4gICAgZW5kRnJhY3Rpb246IDEsXG4gICAgc3RhdHVzOiBmYWlsZWRFdmVudCA/ICdmYWlsZWQnIDogcnVuU2VnbWVudFN0YXR1cyhydW5TdGF0dXMpLFxuICB9KTtcblxuICByZXR1cm4gc2VnbWVudHM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVWMVJ1blNlZ21lbnRzKFxuICBzdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGFjdGl2ZVN0YXJ0TXM6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgcnVuU3RhdHVzOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBTZWdtZW50W10gPSBbXTtcblxuICBsZXQgY3Vyc29yID0gMDtcbiAgaWYgKGFjdGl2ZVN0YXJ0TXMgIT09IHVuZGVmaW5lZCAmJiBhY3RpdmVTdGFydE1zID4gc3RhcnRNcykge1xuICAgIGNvbnN0IHF1ZXVlZEZyYWMgPSB0aW1lVG9GcmFjdGlvbihhY3RpdmVTdGFydE1zLCBzdGFydE1zLCBkdXJhdGlvbik7XG4gICAgaWYgKHF1ZXVlZEZyYWMgPiAwLjAwMSkge1xuICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgIHN0YXJ0RnJhY3Rpb246IDAsXG4gICAgICAgIGVuZEZyYWN0aW9uOiBxdWV1ZWRGcmFjLFxuICAgICAgICBzdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgfSk7XG4gICAgICBjdXJzb3IgPSBxdWV1ZWRGcmFjO1xuICAgIH1cbiAgfVxuXG4gIHNlZ21lbnRzLnB1c2goe1xuICAgIHN0YXJ0RnJhY3Rpb246IGN1cnNvcixcbiAgICBlbmRGcmFjdGlvbjogMSxcbiAgICBzdGF0dXM6IHJ1blNlZ21lbnRTdGF0dXMocnVuU3RhdHVzKSxcbiAgfSk7XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG4vKipcbiAqIENvbXB1dGUgZXZlbnQtYmFzZWQgc2VnbWVudHMgZm9yIGEgc3Bhbi4gRGlzcGF0Y2hlcyBvbiBgc3Bhbi5yZXNvdXJjZWBcbiAqIHRvIHRoZSBhcHByb3ByaWF0ZSByZXNvdXJjZS10eXBlLXNwZWNpZmljIHNlZ21lbnQgYnVpbGRlci5cbiAqIFJldHVybnMgYW4gZW1wdHkgYXJyYXkgZm9yIGdlbmVyaWMgKG5vbi13b3JrZmxvdykgc3BhbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3BhblNlZ21lbnRzKHNwYW46IFNwYW4pOiBTZWdtZW50W10ge1xuICBjb25zdCBzdGFydE1zID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpO1xuICBjb25zdCBkdXJhdGlvbiA9IGdldFNwYW5EdXJhdGlvbk1zKHNwYW4pO1xuICBjb25zdCBhY3RpdmVTdGFydE1zID0gc3Bhbi5hY3RpdmVTdGFydFRpbWVcbiAgICA/IGdldEhpZ2hSZXNJbk1zKHNwYW4uYWN0aXZlU3RhcnRUaW1lKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIHN3aXRjaCAoc3Bhbi5yZXNvdXJjZSkge1xuICAgIGNhc2UgJ3N0ZXAnOlxuICAgICAgcmV0dXJuIGNvbXB1dGVTdGVwU2VnbWVudHNGcm9tU3BhbihzdGFydE1zLCBkdXJhdGlvbiwgc3Bhbi5ldmVudHMpO1xuICAgIGNhc2UgJ2hvb2snOlxuICAgICAgcmV0dXJuIGNvbXB1dGVIb29rU2VnbWVudHNGcm9tU3BhbihzdGFydE1zLCBkdXJhdGlvbiwgc3Bhbi5ldmVudHMpO1xuICAgIGNhc2UgJ3NsZWVwJzpcbiAgICAgIHJldHVybiBjb21wdXRlU2xlZXBTZWdtZW50c0Zyb21TcGFuKHN0YXJ0TXMsIGR1cmF0aW9uLCBzcGFuLmV2ZW50cyk7XG4gICAgY2FzZSAncnVuJzpcbiAgICAgIHJldHVybiBjb21wdXRlUnVuU2VnbWVudHNGcm9tU3BhbihcbiAgICAgICAgc3RhcnRNcyxcbiAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIGFjdGl2ZVN0YXJ0TXMsXG4gICAgICAgIHNwYW4uZXZlbnRzLFxuICAgICAgICBzcGFuLmF0dHJpYnV0ZXNcbiAgICAgICk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNwYW4gbWFya2VycyDigJQgcG9pbnQtaW4tdGltZSBldmVudHMgcmVuZGVyZWQgYXMgdGlja3Mgb24gdG9wIG9mIGEgYmFyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBTcGFuTWFya2VyIHtcbiAgdGltZU1zOiBudW1iZXI7XG59XG5cbi8vIGBob29rX3JlY2VpdmVkYCA9IGEgcmVzdW1wdGlvbjsgYGF0dHJfc2V0YCA9IGF0dHJpYnV0ZXMgd3JpdHRlbiBtaWQtc3Bhbi5cbmNvbnN0IE1BUktFUl9FVkVOVF9OQU1FUyA9IFsnaG9va19yZWNlaXZlZCcsICdhdHRyX3NldCddO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNwYW5NYXJrZXJzKHNwYW46IFNwYW4pOiBTcGFuTWFya2VyW10ge1xuICByZXR1cm4gc29ydGVkRXZlbnRNYXJrcyhzcGFuLmV2ZW50cywgTUFSS0VSX0VWRU5UX05BTUVTKS5tYXAoKG1hcmspID0+ICh7XG4gICAgdGltZU1zOiBtYXJrLnRpbWUsXG4gIH0pKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPZmZzY3JlZW5TaWRlIHtcbiAgY291bnQ6IG51bWJlcjtcbiAgLyoqIE5lYXJlc3Qgb2ZmLXNjcmVlbiBtYXJrZXIg4oCUIHRoZSBvbmUgYSByZXZlYWwganVtcHMgdG8uICovXG4gIG5lYXJlc3RNczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9mZnNjcmVlbk1hcmtlcnMge1xuICBsZWZ0OiBPZmZzY3JlZW5TaWRlIHwgbnVsbDtcbiAgcmlnaHQ6IE9mZnNjcmVlblNpZGUgfCBudWxsO1xufVxuXG4vKiogUGFydGl0aW9uIG1hcmtlcnMgb3V0c2lkZSBgW3Zpc2libGVTdGFydE1zLCB2aXNpYmxlRW5kTXNdYCBieSBzaWRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzY3JlZW5NYXJrZXJzKFxuICBtYXJrZXJzOiBTcGFuTWFya2VyW10sXG4gIHZpc2libGVTdGFydE1zOiBudW1iZXIsXG4gIHZpc2libGVFbmRNczogbnVtYmVyXG4pOiBPZmZzY3JlZW5NYXJrZXJzIHtcbiAgbGV0IGxlZnRDb3VudCA9IDA7XG4gIGxldCByaWdodENvdW50ID0gMDtcbiAgbGV0IG5lYXJlc3RMZWZ0ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICBsZXQgbmVhcmVzdFJpZ2h0ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBmb3IgKGNvbnN0IHsgdGltZU1zIH0gb2YgbWFya2Vycykge1xuICAgIGlmICh0aW1lTXMgPCB2aXNpYmxlU3RhcnRNcykge1xuICAgICAgbGVmdENvdW50Kys7XG4gICAgICBpZiAodGltZU1zID4gbmVhcmVzdExlZnQpIG5lYXJlc3RMZWZ0ID0gdGltZU1zO1xuICAgIH0gZWxzZSBpZiAodGltZU1zID4gdmlzaWJsZUVuZE1zKSB7XG4gICAgICByaWdodENvdW50Kys7XG4gICAgICBpZiAodGltZU1zIDwgbmVhcmVzdFJpZ2h0KSBuZWFyZXN0UmlnaHQgPSB0aW1lTXM7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgbGVmdDogbGVmdENvdW50ID4gMCA/IHsgY291bnQ6IGxlZnRDb3VudCwgbmVhcmVzdE1zOiBuZWFyZXN0TGVmdCB9IDogbnVsbCxcbiAgICByaWdodDpcbiAgICAgIHJpZ2h0Q291bnQgPiAwID8geyBjb3VudDogcmlnaHRDb3VudCwgbmVhcmVzdE1zOiBuZWFyZXN0UmlnaHQgfSA6IG51bGwsXG4gIH07XG59XG4iXX0=
421
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy90cmFjZS12aWV3ZXIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBWXZCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFhO0lBQzdDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUN4QyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFFdEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixNQUFNLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsUUFBUTtZQUFFLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsTUFBTTtZQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFR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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3BhbiwgU3BhbkV2ZW50IH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBmb3JtYXREdXJhdGlvbixcbiAgZm9ybWF0RHVyYXRpb25QcmVjaXNlLFxuICBnZXRIaWdoUmVzSW5Ncyxcbn0gZnJvbSAnLi91dGlsL3RpbWluZyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUm9vdCBib3VuZHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RCb3VuZHMge1xuICBzdGFydFRpbWU6IG51bWJlcjtcbiAgZW5kVGltZTogbnVtYmVyO1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVJvb3RCb3VuZHMoc3BhbnM6IFNwYW5bXSk6IFJvb3RCb3VuZHMge1xuICBsZXQgbWluU3RhcnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIGxldCBtYXhFbmQgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5cbiAgZm9yIChjb25zdCBzcGFuIG9mIHNwYW5zKSB7XG4gICAgY29uc3QgcyA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uc3RhcnRUaW1lKTtcbiAgICBjb25zdCBlID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKTtcbiAgICBpZiAocyA8IG1pblN0YXJ0KSBtaW5TdGFydCA9IHM7XG4gICAgaWYgKGUgPiBtYXhFbmQpIG1heEVuZCA9IGU7XG4gIH1cblxuICBpZiAoIU51bWJlci5pc0Zpbml0ZShtaW5TdGFydCkgfHwgIU51bWJlci5pc0Zpbml0ZShtYXhFbmQpKSB7XG4gICAgcmV0dXJuIHsgc3RhcnRUaW1lOiAwLCBlbmRUaW1lOiAxLCBkdXJhdGlvbjogMSB9O1xuICB9XG5cbiAgY29uc3QgZHVyYXRpb24gPSBNYXRoLm1heChtYXhFbmQgLSBtaW5TdGFydCwgMSk7XG4gIHJldHVybiB7IHN0YXJ0VGltZTogbWluU3RhcnQsIGVuZFRpbWU6IG1heEVuZCwgZHVyYXRpb24gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNwYW5EdXJhdGlvbk1zKHNwYW46IFNwYW4pOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5tYXgoXG4gICAgMCxcbiAgICBnZXRIaWdoUmVzSW5NcyhzcGFuLmVuZFRpbWUpIC0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NwYW5FcnJvcmVkKHNwYW46IFNwYW4pOiBib29sZWFuIHtcbiAgY29uc3Qgd29ya2Zsb3dTdGF0dXMgPSAoc3Bhbi5hdHRyaWJ1dGVzLmRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgPy5zdGF0dXMgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZXR1cm4gc3Bhbi5zdGF0dXMuY29kZSA9PT0gMiB8fCB3b3JrZmxvd1N0YXR1cyA9PT0gJ2ZhaWxlZCc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVmlld3BvcnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFZpZXdwb3J0UmFuZ2Uge1xuICBzdGFydDogbnVtYmVyO1xuICBlbmQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDbGFtcCBhIGNhbmRpZGF0ZSB2aWV3cG9ydCB0byB0aGUgcm9vdCBleHRlbnQuIFRoZSByZXF1ZXN0ZWQgZHVyYXRpb24gaXNcbiAqIHByZXNlcnZlZCB3aGVyZSBwb3NzaWJsZSAoY2xhbXBlZCB0byBbbWluRHVyYXRpb25Ncywgcm9vdCBkdXJhdGlvbl0pLCB0aGVuXG4gKiB0aGUgd2luZG93IGlzIHNoaWZ0ZWQgYmFjayBpbnNpZGUgdGhlIHJvb3QgYm91bmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXBWaWV3cG9ydFRvUm9vdChcbiAgbmV4dDogVmlld3BvcnRSYW5nZSxcbiAgcm9vdFN0YXJ0OiBudW1iZXIsXG4gIHJvb3RFbmQ6IG51bWJlcixcbiAgbWluRHVyYXRpb25NczogbnVtYmVyXG4pOiBWaWV3cG9ydFJhbmdlIHtcbiAgY29uc3Qgcm9vdER1cmF0aW9uID0gTWF0aC5tYXgocm9vdEVuZCAtIHJvb3RTdGFydCwgbWluRHVyYXRpb25Ncyk7XG4gIGNvbnN0IGR1cmF0aW9uID0gTWF0aC5taW4oXG4gICAgcm9vdER1cmF0aW9uLFxuICAgIE1hdGgubWF4KG1pbkR1cmF0aW9uTXMsIG5leHQuZW5kIC0gbmV4dC5zdGFydClcbiAgKTtcbiAgY29uc3QgbWF4U3RhcnQgPSByb290RW5kIC0gZHVyYXRpb247XG4gIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oTWF0aC5tYXgobmV4dC5zdGFydCwgcm9vdFN0YXJ0KSwgbWF4U3RhcnQpO1xuICByZXR1cm4geyBzdGFydCwgZW5kOiBzdGFydCArIGR1cmF0aW9uIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV2hlZWwgZ2VzdHVyZXM6IHNoYXJlZCBiZXR3ZWVuIHRoZSB0aW1lbGluZSBhbmQgdGhlIG1pbmltYXBcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQ29udmVydCBhIHdoZWVsIGRlbHRhIHRvIHBpeGVsIHVuaXRzIChsaW5lLW1vZGUgZGVsdGFzIGFycml2ZSBpbiBsaW5lcykuICovXG5leHBvcnQgZnVuY3Rpb24gd2hlZWxEZWx0YVRvUGl4ZWxzKGRlbHRhOiBudW1iZXIsIGRlbHRhTW9kZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIGRlbHRhTW9kZSA9PT0gMSA/IGRlbHRhICogMTYgOiBkZWx0YTtcbn1cblxuLyoqXG4gKiBFeHBvbmVudGlhbCB6b29tIGZhY3RvciBmb3IgYSB3aGVlbCBnZXN0dXJlLiBDb2Fyc2UgbW91c2Utd2hlZWwgc3RlcHMgYXJlXG4gKiBkYW1wZWQgaGFyZGVyIHRoYW4gdHJhY2twYWQgcGluY2hlcyBzbyBib3RoIGZlZWwgc2ltaWxhci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoZWVsWm9vbVNjYWxlRmFjdG9yKGV2ZW50OiB7XG4gIGRlbHRhWTogbnVtYmVyO1xuICBkZWx0YU1vZGU6IG51bWJlcjtcbn0pOiBudW1iZXIge1xuICBjb25zdCBkeSA9IHdoZWVsRGVsdGFUb1BpeGVscyhldmVudC5kZWx0YVksIGV2ZW50LmRlbHRhTW9kZSk7XG4gIGNvbnN0IGlzTW91c2VXaGVlbCA9IGV2ZW50LmRlbHRhTW9kZSA9PT0gMSB8fCBNYXRoLmFicyhldmVudC5kZWx0YVkpID49IDUwO1xuICByZXR1cm4gMiAqKiAoZHkgLyAoaXNNb3VzZVdoZWVsID8gMjAwIDogNjApKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUaW1lIG1hcmtlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVNYXJrZXIge1xuICBwb3NpdGlvbjogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyO1xufVxuXG5jb25zdCBOSUNFX0lOVEVSVkFMUyA9IFtcbiAgMSwgMiwgNSwgMTAsIDIwLCA1MCwgMTAwLCAyMDAsIDUwMCwgMV8wMDAsIDJfMDAwLCA1XzAwMCwgMTBfMDAwLCAyMF8wMDAsXG4gIDUwXzAwMCwgMTAwXzAwMCwgMjAwXzAwMCwgNTAwXzAwMCwgMV8wMDBfMDAwLCAyXzAwMF8wMDAsIDVfMDAwXzAwMCxcbiAgMTBfMDAwXzAwMCwgMjBfMDAwXzAwMCwgNTBfMDAwXzAwMCwgMTAwXzAwMF8wMDAsIDIwMF8wMDBfMDAwLCA1MDBfMDAwXzAwMCxcbiAgMV8wMDBfMDAwXzAwMCwgMl8wMDBfMDAwXzAwMCwgNV8wMDBfMDAwXzAwMCxcbl07XG5cbmNvbnN0IE1BWF9NQVJLRVJTID0gODtcblxuY29uc3QgTVNfSU5fU0VDT05EID0gMTAwMDtcblxuZnVuY3Rpb24gcGlja0ludGVydmFsKHZpZXdEdXJhdGlvbjogbnVtYmVyLCBtYXhUaWNrczogbnVtYmVyKTogbnVtYmVyIHtcbiAgZm9yIChjb25zdCBpbnRlcnZhbCBvZiBOSUNFX0lOVEVSVkFMUykge1xuICAgIGlmICh2aWV3RHVyYXRpb24gLyBpbnRlcnZhbCA8PSBtYXhUaWNrcykgcmV0dXJuIGludGVydmFsO1xuICB9XG4gIHJldHVybiBOSUNFX0lOVEVSVkFMU1tOSUNFX0lOVEVSVkFMUy5sZW5ndGggLSAxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVUaW1lTWFya2VycyhcbiAgdmlld0R1cmF0aW9uOiBudW1iZXIsXG4gIG9mZnNldDogbnVtYmVyXG4pOiBUaW1lTWFya2VyW10ge1xuICBpZiAodmlld0R1cmF0aW9uIDw9IDApIHJldHVybiBbXTtcblxuICBjb25zdCBtYXhUaWNrcyA9IDY7XG4gIGNvbnN0IGludGVydmFsID0gcGlja0ludGVydmFsKHZpZXdEdXJhdGlvbiwgbWF4VGlja3MpO1xuXG4gIC8vIFN1Yi1zZWNvbmQgc3RlcHMgbmVlZCBmcmFjdGlvbmFsIGxhYmVscywgb3IgdGlja3MgcGFzdCAxcyBjb2xsaWRlIGFzXG4gIC8vIGR1cGxpY2F0ZSB3aG9sZSBzZWNvbmRzIChcIuKApjFzLCAycywgMnMsIDNzXCIpLiBTY2FsZSBkZWNpbWFscyB0byB0aGUgc3RlcC5cbiAgY29uc3QgZnJhY3Rpb25EaWdpdHMgPVxuICAgIGludGVydmFsID49IE1TX0lOX1NFQ09ORFxuICAgICAgPyAwXG4gICAgICA6IE1hdGguY2VpbCgtTWF0aC5sb2cxMChpbnRlcnZhbCAvIE1TX0lOX1NFQ09ORCkpO1xuXG4gIGNvbnN0IGZpcnN0VGljayA9IE1hdGguY2VpbChvZmZzZXQgLyBpbnRlcnZhbCkgKiBpbnRlcnZhbDtcbiAgY29uc3QgbWFya2VyczogVGltZU1hcmtlcltdID0gW107XG5cbiAgZm9yIChsZXQgdCA9IGZpcnN0VGljazsgdCA8PSBvZmZzZXQgKyB2aWV3RHVyYXRpb247IHQgKz0gaW50ZXJ2YWwpIHtcbiAgICBjb25zdCBwb3NpdGlvbiA9ICh0IC0gb2Zmc2V0KSAvIHZpZXdEdXJhdGlvbjtcbiAgICBpZiAocG9zaXRpb24gPCAtMC4wMSB8fCBwb3NpdGlvbiA+IDEuMDEpIGNvbnRpbnVlO1xuICAgIG1hcmtlcnMucHVzaCh7XG4gICAgICBwb3NpdGlvbjogTWF0aC5taW4oTWF0aC5tYXgocG9zaXRpb24sIDApLCAxKSxcbiAgICAgIGxhYmVsOlxuICAgICAgICBmcmFjdGlvbkRpZ2l0cyA9PT0gMFxuICAgICAgICAgID8gZm9ybWF0RHVyYXRpb24oTWF0aC5hYnModCksIHRydWUpXG4gICAgICAgICAgOiBmb3JtYXREdXJhdGlvblByZWNpc2UoTWF0aC5hYnModCksIGZyYWN0aW9uRGlnaXRzKSxcbiAgICAgIHZhbHVlOiB0LFxuICAgIH0pO1xuICAgIGlmIChtYXJrZXJzLmxlbmd0aCA+PSBNQVhfTUFSS0VSUykgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gbWFya2Vycztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTcGFuIGdhcHM6IHRpbWUgZGVsdGFzIGJldHdlZW4gY29uc2VjdXRpdmUgc3BhbnMgKEFsdC1rZXkgb3ZlcmxheSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFNwYW5HYXAge1xuICBnYXBNczogbnVtYmVyO1xuICBsZWZ0RnJhYzogbnVtYmVyO1xuICByaWdodEZyYWM6IG51bWJlcjtcbiAgcm93SW5kZXg6IG51bWJlcjtcbn1cblxuLyoqIFByb2plY3QgYW4gYWJzb2x1dGUgdGltZSBvbnRvIHRoZSB2aWV3cG9ydCBhcyBhIGNsYW1wZWQgWzAsIDFdIGZyYWN0aW9uLiAqL1xuZnVuY3Rpb24gdG9WaWV3cG9ydEZyYWMobXM6IG51bWJlciwgdmlld1N0YXJ0OiBudW1iZXIsIHJhbmdlOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoKG1zIC0gdmlld1N0YXJ0KSAvIHJhbmdlLCAwKSwgMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3BhbkdhcHMoXG4gIHNwYW5zOiBTcGFuW10sXG4gIHZpZXdTdGFydDogbnVtYmVyLFxuICB2aWV3RW5kOiBudW1iZXJcbik6IFNwYW5HYXBbXSB7XG4gIGNvbnN0IHJhbmdlID0gdmlld0VuZCAtIHZpZXdTdGFydDtcbiAgaWYgKHJhbmdlIDw9IDApIHJldHVybiBbXTtcblxuICBjb25zdCBnYXBzOiBTcGFuR2FwW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGFucy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBlbmRUaW1lID0gZ2V0SGlnaFJlc0luTXMoc3BhbnNbaV0uZW5kVGltZSk7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gZ2V0SGlnaFJlc0luTXMoc3BhbnNbaSArIDFdLnN0YXJ0VGltZSk7XG4gICAgY29uc3QgZ2FwTXMgPSBzdGFydFRpbWUgLSBlbmRUaW1lO1xuICAgIGlmIChnYXBNcyA8PSAwKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGxlZnRGcmFjID0gdG9WaWV3cG9ydEZyYWMoZW5kVGltZSwgdmlld1N0YXJ0LCByYW5nZSk7XG4gICAgY29uc3QgcmlnaHRGcmFjID0gdG9WaWV3cG9ydEZyYWMoc3RhcnRUaW1lLCB2aWV3U3RhcnQsIHJhbmdlKTtcbiAgICBpZiAocmlnaHRGcmFjIC0gbGVmdEZyYWMgPCAwLjAwMSkgY29udGludWU7XG5cbiAgICBnYXBzLnB1c2goeyBnYXBNcywgbGVmdEZyYWMsIHJpZ2h0RnJhYywgcm93SW5kZXg6IGkgfSk7XG4gIH1cbiAgcmV0dXJuIGdhcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BhbkRlbHRhIHtcbiAgLyoqIFRydWUgbWVhc3VyZWQgdGltZSBiZXR3ZWVuIHRoZSB0d28gc3BhbnMsIHVuYWZmZWN0ZWQgYnkgY2xhbXBpbmcuICovXG4gIGRlbHRhTXM6IG51bWJlcjtcbiAgLyoqIFZpZXdwb3J0LWNsYW1wZWQgZnJhY3Rpb24gb2YgdGhlIGFuY2hvciBzcGFuJ3MgbWVhc3VyZWQgZWRnZS4gKi9cbiAgYW5jaG9yRnJhYzogbnVtYmVyO1xuICAvKiogVmlld3BvcnQtY2xhbXBlZCBmcmFjdGlvbiBvZiB0aGUgaG92ZXJlZCBzcGFuJ3MgbWVhc3VyZWQgZWRnZS4gKi9cbiAgaG92ZXJlZEZyYWM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoaWNoIGVkZ2Ugb2YgdGhlIGFuY2hvciBzcGFuIHRoZSBtZWFzdXJlbWVudCBydW5zIGZyb206IGl0cyBlbmQgd2hlbiB0aGVcbiAgICogc3BhbnMgYXJlIGRpc2pvaW50IGFuZCB0aGUgYW5jaG9yIGNvbWVzIGZpcnN0LCBvdGhlcndpc2UgaXRzIHN0YXJ0LlxuICAgKi9cbiAgYW5jaG9yRWRnZTogJ3N0YXJ0JyB8ICdlbmQnO1xuICAvKipcbiAgICogU2V0IHdoZW4gdGhlIGhvdmVyZWQgc3BhbiBsaWVzIGVudGlyZWx5IG91dHNpZGUgdGhlIHZpZXdwb3J0IG9uIG9uZSBzaWRlLFxuICAgKiBpLmUuIGl0cyByb3cgcmVuZGVycyBhbiBvZmYtc2NyZWVuIGFycm93IHRoZSBsaW5lIHNob3VsZCBzdG9wIHNob3J0IG9mLlxuICAgKi9cbiAgaG92ZXJlZE9mZnNjcmVlbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8IG51bGw7XG59XG5cbi8qKlxuICogTWVhc3VyZSB0aGUgdGVtcG9yYWwgZGVsdGEgYmV0d2VlbiBhbiBhbmNob3IgKHNlbGVjdGVkKSBzcGFuIGFuZCBhIGhvdmVyZWRcbiAqIHNwYW4gZm9yIHRoZSBBbHQraG92ZXIgbWVhc3VyZW1lbnQgb3ZlcmxheS4gT3JkZXJpbmcgdGhlIHR3byBzcGFucyBieSBzdGFydFxuICogdGltZSAoRSA9IGVhcmxpZXItc3RhcnRpbmcsIEwgPSBsYXRlci1zdGFydGluZyksIHRoZSBtZWFzdXJlbWVudCBydW5zIHRvXG4gKiBMJ3Mgc3RhcnQgZnJvbSBFJ3MgZW5kIHdoZW4gdGhlIHNwYW5zIGFyZSBkaXNqb2ludCAoXCJob3cgbG9uZyBhZnRlciBFIGVuZGVkXG4gKiBkaWQgTCBzdGFydFwiKSwgb3IgZnJvbSBFJ3Mgc3RhcnQgd2hlbiB0aGV5IG92ZXJsYXAgKFwiaG93IGxvbmcgYWZ0ZXIgRVxuICogc3RhcnRlZCBkaWQgTCBzdGFydFwiKS4gRnJhY3Rpb25zIGFyZSBjbGFtcGVkIHRvIHRoZSB2aWV3cG9ydCBsaWtlXG4gKiBgY29tcHV0ZVNwYW5HYXBzYDsgYGRlbHRhTXNgIGlzIGFsd2F5cyB0aGUgdHJ1ZSBkdXJhdGlvbi4gUmV0dXJucyBudWxsIHdoZW5cbiAqIHRoZSBtZWFzdXJlbWVudCBsaWVzIGVudGlyZWx5IG91dHNpZGUgdGhlIHZpZXdwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVNwYW5EZWx0YShcbiAgYW5jaG9yOiBTcGFuLFxuICBob3ZlcmVkOiBTcGFuLFxuICB2aWV3U3RhcnQ6IG51bWJlcixcbiAgdmlld0VuZDogbnVtYmVyXG4pOiBTcGFuRGVsdGEgfCBudWxsIHtcbiAgY29uc3QgcmFuZ2UgPSB2aWV3RW5kIC0gdmlld1N0YXJ0O1xuICBpZiAocmFuZ2UgPD0gMCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgYW5jaG9yU3RhcnQgPSBnZXRIaWdoUmVzSW5NcyhhbmNob3Iuc3RhcnRUaW1lKTtcbiAgY29uc3QgaG92ZXJlZFN0YXJ0ID0gZ2V0SGlnaFJlc0luTXMoaG92ZXJlZC5zdGFydFRpbWUpO1xuICBjb25zdCBhbmNob3JJc0VhcmxpZXIgPSBhbmNob3JTdGFydCA8PSBob3ZlcmVkU3RhcnQ7XG4gIGNvbnN0IGVhcmxpZXJTdGFydCA9IGFuY2hvcklzRWFybGllciA/IGFuY2hvclN0YXJ0IDogaG92ZXJlZFN0YXJ0O1xuICBjb25zdCBlYXJsaWVyRW5kID0gZ2V0SGlnaFJlc0luTXMoXG4gICAgYW5jaG9ySXNFYXJsaWVyID8gYW5jaG9yLmVuZFRpbWUgOiBob3ZlcmVkLmVuZFRpbWVcbiAgKTtcbiAgY29uc3QgbGF0ZXJTdGFydCA9IGFuY2hvcklzRWFybGllciA/IGhvdmVyZWRTdGFydCA6IGFuY2hvclN0YXJ0O1xuXG4gIGNvbnN0IG9yaWdpbk1zID0gZWFybGllckVuZCA8PSBsYXRlclN0YXJ0ID8gZWFybGllckVuZCA6IGVhcmxpZXJTdGFydDtcbiAgY29uc3QgZGVsdGFNcyA9IGxhdGVyU3RhcnQgLSBvcmlnaW5NcztcblxuICAvLyBFbnRpcmVseSBvdXRzaWRlIHRoZSB2aWV3cG9ydC4gQ29tcGFyZWQgaW4gdGltZS1zcGFjZSAobm90IGNsYW1wZWRcbiAgLy8gZnJhY3Rpb25zKSBzbyBhIHplcm8tZGVsdGEgcG9pbnQgc2l0dGluZyBleGFjdGx5IG9uIGEgdmlld3BvcnQgZWRnZVxuICAvLyAoZS5nLiB0aGUgcm9vdCBzcGFuIHNlbGVjdGVkIGF0IGRlZmF1bHQgem9vbSkgc3RpbGwgcmVuZGVycy5cbiAgaWYgKGxhdGVyU3RhcnQgPCB2aWV3U3RhcnQgfHwgb3JpZ2luTXMgPiB2aWV3RW5kKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcmlnaW5GcmFjID0gdG9WaWV3cG9ydEZyYWMob3JpZ2luTXMsIHZpZXdTdGFydCwgcmFuZ2UpO1xuICBjb25zdCBsYXRlckZyYWMgPSB0b1ZpZXdwb3J0RnJhYyhsYXRlclN0YXJ0LCB2aWV3U3RhcnQsIHJhbmdlKTtcblxuICBjb25zdCBob3ZlcmVkRW5kID0gZ2V0SGlnaFJlc0luTXMoaG92ZXJlZC5lbmRUaW1lKTtcblxuICByZXR1cm4ge1xuICAgIGRlbHRhTXMsXG4gICAgYW5jaG9yRnJhYzogYW5jaG9ySXNFYXJsaWVyID8gb3JpZ2luRnJhYyA6IGxhdGVyRnJhYyxcbiAgICBob3ZlcmVkRnJhYzogYW5jaG9ySXNFYXJsaWVyID8gbGF0ZXJGcmFjIDogb3JpZ2luRnJhYyxcbiAgICBhbmNob3JFZGdlOiBhbmNob3JJc0VhcmxpZXIgJiYgZWFybGllckVuZCA8PSBsYXRlclN0YXJ0ID8gJ2VuZCcgOiAnc3RhcnQnLFxuICAgIGhvdmVyZWRPZmZzY3JlZW46XG4gICAgICBob3ZlcmVkU3RhcnQgPiB2aWV3RW5kID8gJ3JpZ2h0JyA6IGhvdmVyZWRFbmQgPCB2aWV3U3RhcnQgPyAnbGVmdCcgOiBudWxsLFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlc291cmNlIGNvbG9yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBSRVNPVVJDRV9DTEFTU19OQU1FUzogUmVjb3JkPFxuICBzdHJpbmcsXG4gIHtcbiAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICBlcnJvckNsYXNzTmFtZT86IHN0cmluZztcbiAgfVxuPiA9IHtcbiAgcnVuOiB7XG4gICAgY2xhc3NOYW1lOiAnYm9yZGVyLWJsdWUtNTAwIGJnLWJsdWUtMjAwJyxcbiAgICBlcnJvckNsYXNzTmFtZTogJ2JvcmRlci1yZWQtNTAwIGJnLXJlZC0yMDAnLFxuICB9LFxuICBzdGVwOiB7XG4gICAgY2xhc3NOYW1lOiAnYm9yZGVyLWdyZWVuLTUwMCBiZy1ncmVlbi0yMDAnLFxuICAgIGVycm9yQ2xhc3NOYW1lOiAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTIwMCcsXG4gIH0sXG4gIC8vIFBhc3NpdmUgc3BhbnMgKGhvb2tzKSBzdGF5IGdyYXk7IG1hdGNoZXMgZXZlbnQtbGlzdCBpY29ucyBhbmQgdGhlIG1pbmltYXAuXG4gIGhvb2s6IHtcbiAgICBjbGFzc05hbWU6ICdib3JkZXItZ3JheS01MDAgYmctZ3JheS0yMDAnLFxuICAgIGVycm9yQ2xhc3NOYW1lOiAnYm9yZGVyLXJlZC01MDAgYmctcmVkLTIwMCcsXG4gIH0sXG4gIHNsZWVwOiB7XG4gICAgY2xhc3NOYW1lOiAnYm9yZGVyLXB1cnBsZS01MDAgYmctcHVycGxlLTIwMCcsXG4gICAgZXJyb3JDbGFzc05hbWU6ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtMjAwJyxcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIGNsYXNzTmFtZTogJ2JvcmRlci1ncmF5LTUwMCBiZy1ncmF5LTIwMCcsXG4gICAgZXJyb3JDbGFzc05hbWU6ICdib3JkZXItcmVkLTUwMCBiZy1yZWQtMjAwJyxcbiAgfSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZXNvdXJjZUNsYXNzTmFtZXMocmVzb3VyY2U6IHN0cmluZyk6IHtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gIGVycm9yQ2xhc3NOYW1lPzogc3RyaW5nO1xufSB7XG4gIHJldHVybiBSRVNPVVJDRV9DTEFTU19OQU1FU1tyZXNvdXJjZV0gPz8gUkVTT1VSQ0VfQ0xBU1NfTkFNRVMuZGVmYXVsdDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTcGFuIHNlZ21lbnRzOiBzcGxpdCBhIHRpbWVsaW5lIGJhciBpbnRvIGNvbG9yZWQgc2VjdGlvbnMgYnkgZXZlbnQgc3RhdGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTZWdtZW50U3RhdHVzID1cbiAgfCAncXVldWVkJ1xuICB8ICdwZW5kaW5nJ1xuICB8ICdydW5uaW5nJ1xuICB8ICdjb21wbGV0ZWQnXG4gIHwgJ2ZhaWxlZCdcbiAgfCAncmV0cnlpbmcnXG4gIHwgJ3N1Y2NlZWRlZCdcbiAgfCAnd2FpdGluZydcbiAgfCAnc2xlZXBpbmcnXG4gIHwgJ3JlY2VpdmVkJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWdtZW50IHtcbiAgc3RhcnRGcmFjdGlvbjogbnVtYmVyO1xuICBlbmRGcmFjdGlvbjogbnVtYmVyO1xuICBzdGF0dXM6IFNlZ21lbnRTdGF0dXM7XG59XG5cbmZ1bmN0aW9uIGNsYW1wRnJhY3Rpb24odmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB2YWx1ZSkpO1xufVxuXG5mdW5jdGlvbiB0aW1lVG9GcmFjdGlvbihcbiAgdGltZTogbnVtYmVyLFxuICBzcGFuU3RhcnQ6IG51bWJlcixcbiAgc3BhbkR1cmF0aW9uOiBudW1iZXJcbik6IG51bWJlciB7XG4gIGlmIChzcGFuRHVyYXRpb24gPD0gMCkgcmV0dXJuIDA7XG4gIHJldHVybiBjbGFtcEZyYWN0aW9uKCh0aW1lIC0gc3BhblN0YXJ0KSAvIHNwYW5EdXJhdGlvbik7XG59XG5cbmludGVyZmFjZSBFdmVudE1hcmsge1xuICB0aW1lOiBudW1iZXI7XG4gIHR5cGU6IHN0cmluZztcbn1cblxuZnVuY3Rpb24gc29ydGVkRXZlbnRNYXJrcyhcbiAgZXZlbnRzOiBTcGFuRXZlbnRbXSxcbiAgcmVsZXZhbnROYW1lczogc3RyaW5nW11cbik6IEV2ZW50TWFya1tdIHtcbiAgcmV0dXJuIGV2ZW50c1xuICAgIC5maWx0ZXIoKGUpID0+IHJlbGV2YW50TmFtZXMuaW5jbHVkZXMoZS5uYW1lKSlcbiAgICAubWFwKChlKSA9PiAoeyB0aW1lOiBnZXRIaWdoUmVzSW5NcyhlLnRpbWVzdGFtcCksIHR5cGU6IGUubmFtZSB9KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYS50aW1lIC0gYi50aW1lKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0ZXBTZWdtZW50c0Zyb21TcGFuKFxuICBzdGFydE1zOiBudW1iZXIsXG4gIGR1cmF0aW9uOiBudW1iZXIsXG4gIGV2ZW50czogU3BhbkV2ZW50W11cbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHNlZ21lbnRzOiBTZWdtZW50W10gPSBbXTtcbiAgaWYgKGR1cmF0aW9uIDw9IDApIHJldHVybiBzZWdtZW50cztcblxuICBjb25zdCBtYXJrcyA9IHNvcnRlZEV2ZW50TWFya3MoZXZlbnRzLCBbXG4gICAgJ3N0ZXBfc3RhcnRlZCcsXG4gICAgJ3N0ZXBfcmV0cnlpbmcnLFxuICAgICdzdGVwX2ZhaWxlZCcsXG4gICAgJ3N0ZXBfY29tcGxldGVkJyxcbiAgXSk7XG5cbiAgaWYgKG1hcmtzLmxlbmd0aCA9PT0gMCkge1xuICAgIHNlZ21lbnRzLnB1c2goeyBzdGFydEZyYWN0aW9uOiAwLCBlbmRGcmFjdGlvbjogMSwgc3RhdHVzOiAncXVldWVkJyB9KTtcbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH1cblxuICBjb25zdCBmaXJzdEZyYWN0aW9uID0gdGltZVRvRnJhY3Rpb24obWFya3NbMF0udGltZSwgc3RhcnRNcywgZHVyYXRpb24pO1xuICBpZiAoZmlyc3RGcmFjdGlvbiA+IDAuMDAxKSB7XG4gICAgc2VnbWVudHMucHVzaCh7XG4gICAgICBzdGFydEZyYWN0aW9uOiAwLFxuICAgICAgZW5kRnJhY3Rpb246IGZpcnN0RnJhY3Rpb24sXG4gICAgICBzdGF0dXM6ICdxdWV1ZWQnLFxuICAgIH0pO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IG1hcmsgPSBtYXJrc1tpXTtcbiAgICBjb25zdCBtYXJrRnJhYyA9IHRpbWVUb0ZyYWN0aW9uKG1hcmsudGltZSwgc3RhcnRNcywgZHVyYXRpb24pO1xuICAgIGNvbnN0IG5leHRNYXJrID0gbWFya3NbaSArIDFdO1xuICAgIGNvbnN0IG5leHRGcmFjID0gbmV4dE1hcmtcbiAgICAgID8gdGltZVRvRnJhY3Rpb24obmV4dE1hcmsudGltZSwgc3RhcnRNcywgZHVyYXRpb24pXG4gICAgICA6IDE7XG5cbiAgICBpZiAobWFyay50eXBlID09PSAnc3RlcF9zdGFydGVkJykge1xuICAgICAgaWYgKGkgPT09IG1hcmtzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgICAgc3RhcnRGcmFjdGlvbjogbWFya0ZyYWMsXG4gICAgICAgICAgZW5kRnJhY3Rpb246IDEsXG4gICAgICAgICAgc3RhdHVzOiAnc3VjY2VlZGVkJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXh0VHlwZSA9IG5leHRNYXJrLnR5cGU7XG4gICAgICAgIGNvbnN0IGF0dGVtcHRTdGF0dXM6IFNlZ21lbnRTdGF0dXMgPVxuICAgICAgICAgIG5leHRUeXBlID09PSAnc3RlcF9yZXRyeWluZycgfHwgbmV4dFR5cGUgPT09ICdzdGVwX2ZhaWxlZCdcbiAgICAgICAgICAgID8gJ2ZhaWxlZCdcbiAgICAgICAgICAgIDogbmV4dFR5cGUgPT09ICdzdGVwX2NvbXBsZXRlZCdcbiAgICAgICAgICAgICAgPyAnc3VjY2VlZGVkJ1xuICAgICAgICAgICAgICA6ICdyZXRyeWluZyc7XG4gICAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICAgIHN0YXJ0RnJhY3Rpb246IG1hcmtGcmFjLFxuICAgICAgICAgIGVuZEZyYWN0aW9uOiBuZXh0RnJhYyxcbiAgICAgICAgICBzdGF0dXM6IGF0dGVtcHRTdGF0dXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFyay50eXBlID09PSAnc3RlcF9yZXRyeWluZycpIHtcbiAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICBzdGFydEZyYWN0aW9uOiBtYXJrRnJhYyxcbiAgICAgICAgZW5kRnJhY3Rpb246IG5leHRGcmFjLFxuICAgICAgICBzdGF0dXM6ICdyZXRyeWluZycsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKG1hcmsudHlwZSA9PT0gJ3N0ZXBfZmFpbGVkJykge1xuICAgICAgaWYgKG1hcmtGcmFjIDwgMC45OTkpIHtcbiAgICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgICAgc3RhcnRGcmFjdGlvbjogbWFya0ZyYWMsXG4gICAgICAgICAgZW5kRnJhY3Rpb246IDEsXG4gICAgICAgICAgc3RhdHVzOiAnZmFpbGVkJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlSG9va1NlZ21lbnRzRnJvbVNwYW4oXG4gIHN0YXJ0TXM6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgZXZlbnRzOiBTcGFuRXZlbnRbXVxuKTogU2VnbWVudFtdIHtcbiAgY29uc3Qgc2VnbWVudHM6IFNlZ21lbnRbXSA9IFtdO1xuICBpZiAoZHVyYXRpb24gPD0gMCkgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGNvbnN0IGRpc3Bvc2VkID0gc29ydGVkRXZlbnRNYXJrcyhldmVudHMsIFsnaG9va19kaXNwb3NlZCddKVswXTtcbiAgY29uc3QgZGlzcG9zZWRGcmFjID0gZGlzcG9zZWRcbiAgICA/IHRpbWVUb0ZyYWN0aW9uKGRpc3Bvc2VkLnRpbWUsIHN0YXJ0TXMsIGR1cmF0aW9uKVxuICAgIDogbnVsbDtcblxuICBjb25zdCB3YWl0aW5nRW5kID0gZGlzcG9zZWRGcmFjID8/IDE7XG4gIGlmICh3YWl0aW5nRW5kID4gMC4wMDEpIHtcbiAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgIHN0YXJ0RnJhY3Rpb246IDAsXG4gICAgICBlbmRGcmFjdGlvbjogd2FpdGluZ0VuZCxcbiAgICAgIHN0YXR1czogJ3dhaXRpbmcnLFxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGRpc3Bvc2VkRnJhYyAhPT0gbnVsbCAmJiBkaXNwb3NlZEZyYWMgPCAwLjk5OSkge1xuICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgc3RhcnRGcmFjdGlvbjogZGlzcG9zZWRGcmFjLFxuICAgICAgZW5kRnJhY3Rpb246IDEsXG4gICAgICBzdGF0dXM6ICdzdWNjZWVkZWQnLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU2xlZXBTZWdtZW50c0Zyb21TcGFuKFxuICBfc3RhcnRNczogbnVtYmVyLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICBfZXZlbnRzOiBTcGFuRXZlbnRbXVxuKTogU2VnbWVudFtdIHtcbiAgaWYgKGR1cmF0aW9uIDw9IDApIHJldHVybiBbXTtcbiAgcmV0dXJuIFt7IHN0YXJ0RnJhY3Rpb246IDAsIGVuZEZyYWN0aW9uOiAxLCBzdGF0dXM6ICdzbGVlcGluZycgfV07XG59XG5cbmZ1bmN0aW9uIHJ1blNlZ21lbnRTdGF0dXMocnVuU3RhdHVzOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBTZWdtZW50U3RhdHVzIHtcbiAgaWYgKHJ1blN0YXR1cyA9PT0gJ2ZhaWxlZCcpIHJldHVybiAnZmFpbGVkJztcbiAgaWYgKHJ1blN0YXR1cyA9PT0gJ3BlbmRpbmcnKSByZXR1cm4gJ3BlbmRpbmcnO1xuICBpZiAocnVuU3RhdHVzID09PSAncnVubmluZycpIHJldHVybiAncnVubmluZyc7XG4gIHJldHVybiAnY29tcGxldGVkJztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVJ1blNlZ21lbnRzRnJvbVNwYW4oXG4gIHN0YXJ0TXM6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgYWN0aXZlU3RhcnRNczogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBldmVudHM6IFNwYW5FdmVudFtdLFxuICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogU2VnbWVudFtdIHtcbiAgY29uc3Qgc2VnbWVudHM6IFNlZ21lbnRbXSA9IFtdO1xuICBpZiAoZHVyYXRpb24gPD0gMCkgcmV0dXJuIHNlZ21lbnRzO1xuXG4gIGNvbnN0IHNvcnRlZCA9IFsuLi5ldmVudHNdXG4gICAgLm1hcCgoZSkgPT4gKHsgbmFtZTogZS5uYW1lLCB0aW1lOiBnZXRIaWdoUmVzSW5NcyhlLnRpbWVzdGFtcCkgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGEudGltZSAtIGIudGltZSk7XG5cbiAgY29uc3QgcnVuRGF0YSA9IGF0dHJpYnV0ZXM/LmRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHJ1blN0YXR1cyA9IHJ1bkRhdGE/LnN0YXR1cyBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3QgaGFzUnVuQ3JlYXRlZCA9IHNvcnRlZC5zb21lKChlKSA9PiBlLm5hbWUgPT09ICdydW5fY3JlYXRlZCcpO1xuXG4gIGlmICghaGFzUnVuQ3JlYXRlZCkge1xuICAgIHJldHVybiBjb21wdXRlVjFSdW5TZWdtZW50cyhzdGFydE1zLCBkdXJhdGlvbiwgYWN0aXZlU3RhcnRNcywgcnVuU3RhdHVzKTtcbiAgfVxuXG4gIGNvbnN0IGZhaWxlZEV2ZW50ID0gc29ydGVkLmZpbmQoKGUpID0+IGUubmFtZSA9PT0gJ3J1bl9mYWlsZWQnKTtcblxuICBsZXQgY3Vyc29yID0gMDtcbiAgaWYgKGFjdGl2ZVN0YXJ0TXMgIT09IHVuZGVmaW5lZCAmJiBhY3RpdmVTdGFydE1zID4gc3RhcnRNcykge1xuICAgIGNvbnN0IHF1ZXVlZEZyYWMgPSB0aW1lVG9GcmFjdGlvbihhY3RpdmVTdGFydE1zLCBzdGFydE1zLCBkdXJhdGlvbik7XG4gICAgaWYgKHF1ZXVlZEZyYWMgPiAwLjAwMSkge1xuICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgIHN0YXJ0RnJhY3Rpb246IDAsXG4gICAgICAgIGVuZEZyYWN0aW9uOiBxdWV1ZWRGcmFjLFxuICAgICAgICBzdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgfSk7XG4gICAgICBjdXJzb3IgPSBxdWV1ZWRGcmFjO1xuICAgIH1cbiAgfVxuXG4gIHNlZ21lbnRzLnB1c2goe1xuICAgIHN0YXJ0RnJhY3Rpb246IGN1cnNvcixcbiAgICBlbmRGcmFjdGlvbjogMSxcbiAgICBzdGF0dXM6IGZhaWxlZEV2ZW50ID8gJ2ZhaWxlZCcgOiBydW5TZWdtZW50U3RhdHVzKHJ1blN0YXR1cyksXG4gIH0pO1xuXG4gIHJldHVybiBzZWdtZW50cztcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVYxUnVuU2VnbWVudHMoXG4gIHN0YXJ0TXM6IG51bWJlcixcbiAgZHVyYXRpb246IG51bWJlcixcbiAgYWN0aXZlU3RhcnRNczogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBydW5TdGF0dXM6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogU2VnbWVudFtdIHtcbiAgY29uc3Qgc2VnbWVudHM6IFNlZ21lbnRbXSA9IFtdO1xuXG4gIGxldCBjdXJzb3IgPSAwO1xuICBpZiAoYWN0aXZlU3RhcnRNcyAhPT0gdW5kZWZpbmVkICYmIGFjdGl2ZVN0YXJ0TXMgPiBzdGFydE1zKSB7XG4gICAgY29uc3QgcXVldWVkRnJhYyA9IHRpbWVUb0ZyYWN0aW9uKGFjdGl2ZVN0YXJ0TXMsIHN0YXJ0TXMsIGR1cmF0aW9uKTtcbiAgICBpZiAocXVldWVkRnJhYyA+IDAuMDAxKSB7XG4gICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgc3RhcnRGcmFjdGlvbjogMCxcbiAgICAgICAgZW5kRnJhY3Rpb246IHF1ZXVlZEZyYWMsXG4gICAgICAgIHN0YXR1czogJ3F1ZXVlZCcsXG4gICAgICB9KTtcbiAgICAgIGN1cnNvciA9IHF1ZXVlZEZyYWM7XG4gICAgfVxuICB9XG5cbiAgc2VnbWVudHMucHVzaCh7XG4gICAgc3RhcnRGcmFjdGlvbjogY3Vyc29yLFxuICAgIGVuZEZyYWN0aW9uOiAxLFxuICAgIHN0YXR1czogcnVuU2VnbWVudFN0YXR1cyhydW5TdGF0dXMpLFxuICB9KTtcblxuICByZXR1cm4gc2VnbWVudHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZSBldmVudC1iYXNlZCBzZWdtZW50cyBmb3IgYSBzcGFuLiBEaXNwYXRjaGVzIG9uIGBzcGFuLnJlc291cmNlYFxuICogdG8gdGhlIGFwcHJvcHJpYXRlIHJlc291cmNlLXR5cGUtc3BlY2lmaWMgc2VnbWVudCBidWlsZGVyLlxuICogUmV0dXJucyBhbiBlbXB0eSBhcnJheSBmb3IgZ2VuZXJpYyAobm9uLXdvcmtmbG93KSBzcGFucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTcGFuU2VnbWVudHMoc3BhbjogU3Bhbik6IFNlZ21lbnRbXSB7XG4gIGNvbnN0IHN0YXJ0TXMgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLnN0YXJ0VGltZSk7XG4gIGNvbnN0IGR1cmF0aW9uID0gZ2V0U3BhbkR1cmF0aW9uTXMoc3Bhbik7XG4gIGNvbnN0IGFjdGl2ZVN0YXJ0TXMgPSBzcGFuLmFjdGl2ZVN0YXJ0VGltZVxuICAgID8gZ2V0SGlnaFJlc0luTXMoc3Bhbi5hY3RpdmVTdGFydFRpbWUpXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgc3dpdGNoIChzcGFuLnJlc291cmNlKSB7XG4gICAgY2FzZSAnc3RlcCc6XG4gICAgICByZXR1cm4gY29tcHV0ZVN0ZXBTZWdtZW50c0Zyb21TcGFuKHN0YXJ0TXMsIGR1cmF0aW9uLCBzcGFuLmV2ZW50cyk7XG4gICAgY2FzZSAnaG9vayc6XG4gICAgICByZXR1cm4gY29tcHV0ZUhvb2tTZWdtZW50c0Zyb21TcGFuKHN0YXJ0TXMsIGR1cmF0aW9uLCBzcGFuLmV2ZW50cyk7XG4gICAgY2FzZSAnc2xlZXAnOlxuICAgICAgcmV0dXJuIGNvbXB1dGVTbGVlcFNlZ21lbnRzRnJvbVNwYW4oc3RhcnRNcywgZHVyYXRpb24sIHNwYW4uZXZlbnRzKTtcbiAgICBjYXNlICdydW4nOlxuICAgICAgcmV0dXJuIGNvbXB1dGVSdW5TZWdtZW50c0Zyb21TcGFuKFxuICAgICAgICBzdGFydE1zLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgYWN0aXZlU3RhcnRNcyxcbiAgICAgICAgc3Bhbi5ldmVudHMsXG4gICAgICAgIHNwYW4uYXR0cmlidXRlc1xuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3BhbiBtYXJrZXJzOiBwb2ludC1pbi10aW1lIGV2ZW50cyByZW5kZXJlZCBhcyB0aWNrcyBvbiB0b3Agb2YgYSBiYXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTcGFuTWFya2VyS2luZCA9ICdob29rX3JlY2VpdmVkJyB8ICdhdHRyX3NldCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Bhbk1hcmtlciB7XG4gIHRpbWVNczogbnVtYmVyO1xuICBraW5kOiBTcGFuTWFya2VyS2luZDtcbn1cblxuLy8gYGhvb2tfcmVjZWl2ZWRgID0gYSByZXN1bXB0aW9uOyBgYXR0cl9zZXRgID0gYXR0cmlidXRlcyB3cml0dGVuIG1pZC1zcGFuLlxuY29uc3QgTUFSS0VSX0VWRU5UX05BTUVTID0gWydob29rX3JlY2VpdmVkJywgJ2F0dHJfc2V0J107XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlU3Bhbk1hcmtlcnMoc3BhbjogU3Bhbik6IFNwYW5NYXJrZXJbXSB7XG4gIHJldHVybiBzb3J0ZWRFdmVudE1hcmtzKHNwYW4uZXZlbnRzLCBNQVJLRVJfRVZFTlRfTkFNRVMpLm1hcCgobWFyaykgPT4gKHtcbiAgICB0aW1lTXM6IG1hcmsudGltZSxcbiAgICBraW5kOiBtYXJrLnR5cGUgYXMgU3Bhbk1hcmtlcktpbmQsXG4gIH0pKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPZmZzY3JlZW5TaWRlIHtcbiAgY291bnQ6IG51bWJlcjtcbiAgLyoqIE5lYXJlc3Qgb2ZmLXNjcmVlbiBtYXJrZXI6IHRoZSBvbmUgYSByZXZlYWwganVtcHMgdG8uICovXG4gIG5lYXJlc3RNczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9mZnNjcmVlbk1hcmtlcnMge1xuICBsZWZ0OiBPZmZzY3JlZW5TaWRlIHwgbnVsbDtcbiAgcmlnaHQ6IE9mZnNjcmVlblNpZGUgfCBudWxsO1xufVxuXG4vKiogUGFydGl0aW9uIG1hcmtlcnMgb3V0c2lkZSBgW3Zpc2libGVTdGFydE1zLCB2aXNpYmxlRW5kTXNdYCBieSBzaWRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzY3JlZW5NYXJrZXJzKFxuICBtYXJrZXJzOiBTcGFuTWFya2VyW10sXG4gIHZpc2libGVTdGFydE1zOiBudW1iZXIsXG4gIHZpc2libGVFbmRNczogbnVtYmVyXG4pOiBPZmZzY3JlZW5NYXJrZXJzIHtcbiAgbGV0IGxlZnRDb3VudCA9IDA7XG4gIGxldCByaWdodENvdW50ID0gMDtcbiAgbGV0IG5lYXJlc3RMZWZ0ID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xuICBsZXQgbmVhcmVzdFJpZ2h0ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBmb3IgKGNvbnN0IHsgdGltZU1zIH0gb2YgbWFya2Vycykge1xuICAgIGlmICh0aW1lTXMgPCB2aXNpYmxlU3RhcnRNcykge1xuICAgICAgbGVmdENvdW50Kys7XG4gICAgICBpZiAodGltZU1zID4gbmVhcmVzdExlZnQpIG5lYXJlc3RMZWZ0ID0gdGltZU1zO1xuICAgIH0gZWxzZSBpZiAodGltZU1zID4gdmlzaWJsZUVuZE1zKSB7XG4gICAgICByaWdodENvdW50Kys7XG4gICAgICBpZiAodGltZU1zIDwgbmVhcmVzdFJpZ2h0KSBuZWFyZXN0UmlnaHQgPSB0aW1lTXM7XG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgbGVmdDogbGVmdENvdW50ID4gMCA/IHsgY291bnQ6IGxlZnRDb3VudCwgbmVhcmVzdE1zOiBuZWFyZXN0TGVmdCB9IDogbnVsbCxcbiAgICByaWdodDpcbiAgICAgIHJpZ2h0Q291bnQgPiAwID8geyBjb3VudDogcmlnaHRDb3VudCwgbmVhcmVzdE1zOiBuZWFyZXN0UmlnaHQgfSA6IG51bGwsXG4gIH07XG59XG4iXX0=
@@ -18,6 +18,8 @@ export declare const StreamClickContext: import("react").Context<((streamId: str
18
18
  export type DecryptClickContextValue = {
19
19
  onDecrypt: () => void;
20
20
  isDecrypting: boolean;
21
+ isDecryptDisabled?: boolean;
22
+ decryptDisabledReason?: string;
21
23
  hasEncryptedData?: boolean;
22
24
  };
23
25
  export declare const DecryptClickContext: import("react").Context<DecryptClickContextValue | undefined>;
@@ -49,7 +51,11 @@ export interface DataInspectorProps {
49
51
  onDecrypt?: () => void;
50
52
  /** Whether decryption is currently in progress */
51
53
  isDecrypting?: boolean;
54
+ /** Whether decryption is unavailable */
55
+ isDecryptDisabled?: boolean;
56
+ /** Explains why decryption is unavailable */
57
+ decryptDisabledReason?: string;
52
58
  }
53
- export declare function DataInspector({ data, expandLevel, name, onStreamClick, onRunClick, onDecrypt, isDecrypting, }: DataInspectorProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
59
+ export declare function DataInspector({ data, expandLevel, name, onStreamClick, onRunClick, onDecrypt, isDecrypting, isDecryptDisabled, decryptDisabledReason, }: DataInspectorProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
54
60
  export {};
55
61
  //# sourceMappingURL=data-inspector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"data-inspector.d.ts","sourceRoot":"","sources":["../../../src/components/ui/data-inspector.tsx"],"names":[],"mappings":"AA6BA,OAAO,EACL,KAAK,wBAAwB,EAG9B,MAAM,0BAA0B,CAAC;AAalC,QAAA,MAAM,kBAAkB,+BAA+B,CAAC;AAYxD,UAAU,YAAY;IACpB,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AA0CD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAIpE;AAwBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,sCACjB,MAAM,KAAK,IAAI,cACjB,CAAC;AAEb;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,+DAEpB,CAAC;AAEb,eAAO,MAAM,eAAe,mCACjB,MAAM,KAAK,IAAI,cACd,CAAC;AAkpBb;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CA2BnD;AAMD,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,WAAe,EACf,IAAI,EACJ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAoB,GACrB,EAAE,kBAAkB,8FAsCpB"}
1
+ {"version":3,"file":"data-inspector.d.ts","sourceRoot":"","sources":["../../../src/components/ui/data-inspector.tsx"],"names":[],"mappings":"AA6BA,OAAO,EACL,KAAK,wBAAwB,EAG9B,MAAM,0BAA0B,CAAC;AAalC,QAAA,MAAM,kBAAkB,+BAA+B,CAAC;AAYxD,UAAU,YAAY;IACpB,MAAM,EAAE,OAAO,kBAAkB,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AA0CD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAIpE;AAwBD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,sCACjB,MAAM,KAAK,IAAI,cACjB,CAAC;AAEb;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,mBAAmB,+DAEpB,CAAC;AAEb,eAAO,MAAM,eAAe,mCACjB,MAAM,KAAK,IAAI,cACd,CAAC;AAmpBb;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CA2BnD;AAMD,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,WAAe,EACf,IAAI,EACJ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAoB,EACpB,iBAAyB,EACzB,qBAAqB,GACtB,EAAE,kBAAkB,8FA6CpB"}