@workflow/web-shared 5.0.0-beta.15 → 5.0.0-beta.16

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 (51) hide show
  1. package/dist/components/event-list-view.d.ts +1 -1
  2. package/dist/components/event-list-view.d.ts.map +1 -1
  3. package/dist/components/event-list-view.js +20 -3
  4. package/dist/components/new-trace-viewer/components/timeline.d.ts +1 -1
  5. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
  6. package/dist/components/new-trace-viewer/components/timeline.js +40 -4
  7. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
  8. package/dist/components/new-trace-viewer/trace-viewer.js +8 -9
  9. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  10. package/dist/components/sidebar/attribute-panel.js +26 -32
  11. package/dist/components/sidebar/attributes-block.d.ts +28 -0
  12. package/dist/components/sidebar/attributes-block.d.ts.map +1 -0
  13. package/dist/components/sidebar/attributes-block.js +83 -0
  14. package/dist/components/sidebar/entity-detail-panel.js +2 -2
  15. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  16. package/dist/components/sidebar/events-list.js +8 -1
  17. package/dist/components/trace-viewer/components/node.d.ts.map +1 -1
  18. package/dist/components/trace-viewer/components/node.js +2 -1
  19. package/dist/components/ui/context-card.d.ts +47 -0
  20. package/dist/components/ui/context-card.d.ts.map +1 -0
  21. package/dist/components/ui/context-card.js +471 -0
  22. package/dist/components/ui/timestamp-tooltip.d.ts +34 -1
  23. package/dist/components/ui/timestamp-tooltip.d.ts.map +1 -1
  24. package/dist/components/ui/timestamp-tooltip.js +80 -132
  25. package/dist/components/workflow-trace-view.d.ts.map +1 -1
  26. package/dist/components/workflow-trace-view.js +8 -10
  27. package/dist/components/workflow-traces/event-colors.d.ts +1 -0
  28. package/dist/components/workflow-traces/event-colors.d.ts.map +1 -1
  29. package/dist/components/workflow-traces/event-colors.js +12 -1
  30. package/dist/components/workflow-traces/trace-span-construction.d.ts.map +1 -1
  31. package/dist/components/workflow-traces/trace-span-construction.js +2 -1
  32. package/dist/lib/trace-builder.d.ts +15 -0
  33. package/dist/lib/trace-builder.d.ts.map +1 -1
  34. package/dist/lib/trace-builder.js +27 -2
  35. package/dist/styles.css +9 -0
  36. package/package.json +5 -3
  37. package/src/components/event-list-view.tsx +25 -2
  38. package/src/components/new-trace-viewer/components/timeline.tsx +82 -2
  39. package/src/components/new-trace-viewer/trace-viewer.tsx +17 -14
  40. package/src/components/sidebar/attribute-panel.tsx +117 -119
  41. package/src/components/sidebar/attributes-block.tsx +182 -0
  42. package/src/components/sidebar/entity-detail-panel.tsx +1 -1
  43. package/src/components/sidebar/events-list.tsx +8 -0
  44. package/src/components/trace-viewer/components/node.tsx +3 -2
  45. package/src/components/ui/context-card.tsx +784 -0
  46. package/src/components/ui/timestamp-tooltip.tsx +132 -194
  47. package/src/components/workflow-trace-view.tsx +18 -10
  48. package/src/components/workflow-traces/event-colors.ts +12 -0
  49. package/src/components/workflow-traces/trace-span-construction.ts +1 -0
  50. package/src/lib/trace-builder.ts +32 -1
  51. package/src/styles.css +9 -0
@@ -250,6 +250,6 @@ export function EntityDetailPanel({ run, onStreamClick, onRunClick, spanDetailDa
250
250
  : 'cursor-pointer'), style: {
251
251
  background: 'var(--ds-gray-1000)',
252
252
  color: 'var(--ds-background-100)',
253
- }, children: [_jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] }))] })] })), _jsx(AttributePanel, { data: displayData, moduleSpecifier: moduleSpecifier, expiredAt: run.expiredAt, isLoading: loading, error: error ?? undefined, onStreamClick: onStreamClick, onRunClick: onRunClick, onDecrypt: onDecrypt, isDecrypting: isDecrypting, resource: resource }), resource !== 'run' && rawEvents && (_jsx(EventsList, { events: rawEvents, onLoadEventData: onLoadEventData, onStreamClick: onStreamClick, onRunClick: onRunClick, encryptionKey: encryptionKey }))] }) }), _jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] }));
253
+ }, children: [_jsx(Send, { className: "h-4 w-4" }), "Resolve Hook"] }))] })] })), _jsx(AttributePanel, { data: displayData, moduleSpecifier: moduleSpecifier, expiredAt: run.expiredAt, isLoading: loading, error: error ?? undefined, onStreamClick: onStreamClick, onRunClick: onRunClick, onDecrypt: onDecrypt, isDecrypting: isDecrypting, resource: resource }), rawEvents && (_jsx(EventsList, { events: rawEvents, onLoadEventData: onLoadEventData, onStreamClick: onStreamClick, onRunClick: onRunClick, encryptionKey: encryptionKey }))] }) }), _jsx(ResolveHookModal, { isOpen: showResolveHookModal, onClose: () => setShowResolveHookModal(false), onSubmit: handleResolveHook, isSubmitting: resolvingHook })] }));
254
254
  }
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRldGFpbC1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvZW50aXR5LWRldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUNMLGVBQWUsRUFDZiwwQkFBMEIsR0FDM0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3Qiw0REFBNEQ7QUFDNUQsU0FBUyxNQUFNLENBQUMsSUFBYTtJQUMzQixPQUFPLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDdkUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQWE7SUFDbEMsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLE1B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QWEsRUFBRSxhQUFhLEdBQzVCLENBQ0gsSUFDRyxHQUN1QixFQUcvQixLQUFDLGdCQUFnQixJQUNmLE1BQU0sRUFBRSxvQkFBb0IsRUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUM3QyxRQUFRLEVBQUUsaUJBQWlCLEVBQzNCLFlBQVksRUFBRSxhQUFhLEdBQzNCLElBQ0UsQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHR5cGUgeyBFdmVudCwgSG9vaywgU3RlcCwgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBTZW5kLCBaYXAgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRvYXN0IH0gZnJvbSAnLi4vLi4vbGliL3RvYXN0JztcbmltcG9ydCB7IERlY3J5cHRDbGlja0NvbnRleHQgfSBmcm9tICcuLi91aS9kYXRhLWluc3BlY3Rvcic7XG5pbXBvcnQgeyBBdHRyaWJ1dGVQYW5lbCB9IGZyb20gJy4vYXR0cmlidXRlLXBhbmVsJztcbmltcG9ydCB7IEV2ZW50c0xpc3QgfSBmcm9tICcuL2V2ZW50cy1saXN0JztcbmltcG9ydCB7IFJlc29sdmVIb29rTW9kYWwgfSBmcm9tICcuL3Jlc29sdmUtaG9vay1tb2RhbCc7XG5pbXBvcnQgeyB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsIH0gZnJvbSAnLi9zaWRlYmFyLWRhdGEtY29udGV4dCc7XG5pbXBvcnQge1xuICBtZXJnZVNwYW5EZXRhaWwsXG4gIHNwYW5EZXRhaWxNYXRjaGVzU2VsZWN0aW9uLFxufSBmcm9tICcuL3NwYW4tZGV0YWlsLW1lcmdlJztcblxuLy8gVHlwZSBndWFyZHMgZm9yIHJ1bnRpbWUgdmFsaWRhdGlvbiBvZiBzcGFuIGF0dHJpYnV0ZSBkYXRhXG5mdW5jdGlvbiBpc1N0ZXAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgU3RlcCB7XG4gIHJldHVybiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAnc3RlcElkJyBpbiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc1dvcmtmbG93UnVuKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFdvcmtmbG93UnVuIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdydW5JZCcgaW4gZGF0YTtcbn1cblxuZnVuY3Rpb24gaXNIb29rKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEhvb2sge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ2hvb2tJZCcgaW4gZGF0YTtcbn1cblxuLyoqXG4gKiBJbmZvIGFib3V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3BhblxuICovXG5leHBvcnQgdHlwZSBTcGFuU2VsZWN0aW9uSW5mbyA9IHtcbiAgcmVzb3VyY2U6ICdydW4nIHwgJ3N0ZXAnIHwgJ2hvb2snIHwgJ3NsZWVwJztcbiAgcmVzb3VyY2VJZDogc3RyaW5nO1xuICBydW5JZD86IHN0cmluZztcbn07XG5cbi8qKlxuICogSW5mbyBhYm91dCB0aGUgc2VsZWN0ZWQgc3BhbiBmcm9tIHRoZSB0cmFjZSB2aWV3ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0ZWRTcGFuSW5mbyB7XG4gIC8qKiBUaGUgcmF3IGRhdGEgZnJvbSB0aGUgc3BhbiBhdHRyaWJ1dGVzIChzdGVwL3J1bi9ob29rIG9iamVjdCBmcm9tIHRoZSB0cmFjZSkgKi9cbiAgZGF0YT86IHVua25vd247XG4gIC8qKiBUaGUgc3BhbiByZXNvdXJjZSB0eXBlIChmcm9tIHNwYW4gYXR0cmlidXRlcykgKi9cbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIC8qKiBUaGUgc3BhbiBJRCAoY29ycmVsYXRpb25JZCBmb3IgZmlsdGVyaW5nIGV2ZW50cykgKi9cbiAgc3BhbklkPzogc3RyaW5nO1xuICAvKiogUmF3IGNvcnJlbGF0ZWQgZXZlbnRzIGZyb20gdGhlIHN0b3JlIChOT1QgZnJvbSB0aGUgdHJhY2Ugd29ya2VyIHBpcGVsaW5lKSAqL1xuICByYXdFdmVudHM/OiBFdmVudFtdO1xufVxuXG4vKipcbiAqIFBhbmVsIGNvbXBvbmVudCBmb3Igd29ya2Zsb3cgdHJhY2VzIHRoYXQgZGlzcGxheXMgZW50aXR5IGRldGFpbHMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgT1VUU0lERSB0aGUgdHJhY2Ugdmlld2VyIGNvbnRleHQg4oCUIGl0XG4gKiByZWNlaXZlcyBhbGwgZGF0YSB2aWEgcHJvcHMgcmF0aGVyIHRoYW4gcmVhZGluZyBmcm9tIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHlEZXRhaWxQYW5lbCh7XG4gIHJ1bixcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgc3BhbkRldGFpbERhdGEsXG4gIHNwYW5EZXRhaWxFcnJvcixcbiAgc3BhbkRldGFpbExvYWRpbmcsXG4gIG9uU3BhblNlbGVjdCxcbiAgb25XYWtlVXBTbGVlcCxcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBvblJlc29sdmVIb29rLFxuICBlbmNyeXB0aW9uS2V5LFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxuICBzZWxlY3RlZFNwYW4sXG59OiB7XG4gIHJ1bjogV29ya2Zsb3dSdW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogUHJlLWZldGNoZWQgc3BhbiBkZXRhaWwgZGF0YSBmb3IgdGhlIHNlbGVjdGVkIHNwYW4uICovXG4gIHNwYW5EZXRhaWxEYXRhOiBXb3JrZmxvd1J1biB8IFN0ZXAgfCBIb29rIHwgRXZlbnQgfCBudWxsO1xuICAvKiogRXJyb3IgZnJvbSBleHRlcm5hbCBzcGFuIGRldGFpbCBmZXRjaC4gKi9cbiAgc3BhbkRldGFpbEVycm9yPzogRXJyb3IgfCBudWxsO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmcm9tIGV4dGVybmFsIHNwYW4gZGV0YWlsIGZldGNoLiAqL1xuICBzcGFuRGV0YWlsTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3BhbiBpcyBzZWxlY3RlZC4gVXNlIHRoaXMgdG8gZmV0Y2ggZGF0YSBleHRlcm5hbGx5IGFuZCBwYXNzIHZpYSBzcGFuRGV0YWlsRGF0YS4gKi9cbiAgb25TcGFuU2VsZWN0OiAoaW5mbzogU3BhblNlbGVjdGlvbkluZm8pID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB0byB3YWtlIHVwIGEgcGVuZGluZyBzbGVlcCBjYWxsLiAqL1xuICBvbldha2VVcFNsZWVwPzogKFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgY29ycmVsYXRpb25JZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx7IHN0b3BwZWRDb3VudDogbnVtYmVyIH0+O1xuICAvKiogQ2FsbGJhY2sgdG8gbG9hZCBldmVudCBkYXRhIGZvciBhIHNwZWNpZmljIGV2ZW50IChsYXp5IGxvYWRpbmcpICovXG4gIG9uTG9hZEV2ZW50RGF0YT86IChcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmcsXG4gICAgZXZlbnRJZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIC8qKiBDYWxsYmFjayB0byByZXNvbHZlIGEgaG9vayB3aXRoIGEgcGF5bG9hZC4gKi9cbiAgb25SZXNvbHZlSG9vaz86IChcbiAgICBob29rVG9rZW46IHN0cmluZyxcbiAgICBwYXlsb2FkOiB1bmtub3duLFxuICAgIGhvb2s/OiBIb29rXG4gICkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEVuY3J5cHRpb24ga2V5IChhdmFpbGFibGUgYWZ0ZXIgRGVjcnlwdCBpcyBjbGlja2VkKSwgdXNlZCB0byByZS1sb2FkIGV2ZW50IGRhdGEgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBDYWxsYmFjayB0byBpbml0aWF0ZSBkZWNyeXB0aW9uIG9mIGVuY3J5cHRlZCBydW4gZGF0YSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciB0aGUgZW5jcnlwdGlvbiBrZXkgaXMgY3VycmVudGx5IGJlaW5nIGZldGNoZWQgKi9cbiAgaXNEZWNyeXB0aW5nPzogYm9vbGVhbjtcbiAgLyoqIEluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzcGFuIGZyb20gdGhlIHRyYWNlIHZpZXdlciAqL1xuICBzZWxlY3RlZFNwYW46IFNlbGVjdGVkU3BhbkluZm8gfCBudWxsO1xufSk6IFJlYWN0LkpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3QoKTtcbiAgY29uc3QgW3N0b3BwaW5nU2xlZXAsIHNldFN0b3BwaW5nU2xlZXBdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd1Jlc29sdmVIb29rTW9kYWwsIHNldFNob3dSZXNvbHZlSG9va01vZGFsXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Jlc29sdmluZ0hvb2ssIHNldFJlc29sdmluZ0hvb2tdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAvLyBUcmFjayBob29rcyB0aGF0IHdlcmUgcmVzb2x2ZWQgaW4gdGhpcyBzZXNzaW9uIHNvIHRoZSBidXR0b24gaGlkZXNcbiAgLy8gaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbmV4dCBldmVudCBwb2xsLlxuICBjb25zdCBbcmVzb2x2ZWRIb29rSWRzLCBzZXRSZXNvbHZlZEhvb2tJZHNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KFxuICAgIG5ldyBTZXQoKVxuICApO1xuXG4gIGNvbnN0IHNpZGViYXIgPSB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsKCk7XG4gIGNvbnN0IGhhc0VuY3J5cHRlZERhdGEgPSBCb29sZWFuKHNpZGViYXI/Lmhhc0VuY3J5cHRlZERhdGEgJiYgIWVuY3J5cHRpb25LZXkpO1xuXG4gIGNvbnN0IGRhdGEgPSBzZWxlY3RlZFNwYW4/LmRhdGE7XG4gIGNvbnN0IHJhd0V2ZW50cyA9IHNlbGVjdGVkU3Bhbj8ucmF3RXZlbnRzO1xuICBjb25zdCByYXdFdmVudHNMZW5ndGggPSByYXdFdmVudHM/Lmxlbmd0aCA/PyAwO1xuXG4gIC8vIERldGVybWluZSByZXNvdXJjZSB0eXBlLCBJRCwgYW5kIHJ1bklkIGZyb20gdGhlIHNlbGVjdGVkIHNwYW5cbiAgY29uc3QgeyByZXNvdXJjZSwgcmVzb3VyY2VJZCwgcnVuSWQgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRTcGFuKSB7XG4gICAgICByZXR1cm4geyByZXNvdXJjZTogdW5kZWZpbmVkLCByZXNvdXJjZUlkOiB1bmRlZmluZWQsIHJ1bklkOiB1bmRlZmluZWQgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBzZWxlY3RlZFNwYW4ucmVzb3VyY2U7XG4gICAgaWYgKHJlcyA9PT0gJ3N0ZXAnICYmIGlzU3RlcChkYXRhKSkge1xuICAgICAgcmV0dXJuIHsgcmVzb3VyY2U6ICdzdGVwJywgcmVzb3VyY2VJZDogZGF0YS5zdGVwSWQsIHJ1bklkOiBkYXRhLnJ1bklkIH07XG4gICAgfVxuICAgIGlmIChyZXMgPT09ICdydW4nICYmIGlzV29ya2Zsb3dSdW4oZGF0YSkpIHtcbiAgICAgIHJldHVybiB7IHJlc291cmNlOiAncnVuJywgcmVzb3VyY2VJZDogZGF0YS5ydW5JZCwgcnVuSWQ6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICBpZiAocmVzID09PSAnaG9vaycgJiYgaXNIb29rKGRhdGEpKSB7XG4gICAgICByZXR1cm4geyByZXNvdXJjZTogJ2hvb2snLCByZXNvdXJjZUlkOiBkYXRhLmhvb2tJZCwgcnVuSWQ6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICBpZiAocmVzID09PSAnc2xlZXAnKSB7XG4gICAgICBjb25zdCB3YWl0RGF0YSA9IGRhdGEgYXMgeyBydW5JZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb3VyY2U6ICdzbGVlcCcsXG4gICAgICAgIHJlc291cmNlSWQ6IHNlbGVjdGVkU3Bhbi5zcGFuSWQsXG4gICAgICAgIHJ1bklkOiB3YWl0RGF0YT8ucnVuSWQsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyByZXNvdXJjZTogdW5kZWZpbmVkLCByZXNvdXJjZUlkOiB1bmRlZmluZWQsIHJ1bklkOiB1bmRlZmluZWQgfTtcbiAgfSwgW3NlbGVjdGVkU3BhbiwgZGF0YV0pO1xuXG4gIC8vIE5vdGlmeSBwYXJlbnQgd2hlbiBzcGFuIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAvLyBVc2UgYSByZWYgZm9yIHRoZSBjYWxsYmFjayBzbyB0aGUgZWZmZWN0IG9ubHkgZmlyZXMgd2hlbiB0aGUgYWN0dWFsXG4gIC8vIHNlbGVjdGlvbiB2YWx1ZXMgY2hhbmdlLCBub3Qgd2hlbiB0aGUgY2FsbGJhY2sgaWRlbnRpdHkgY2hhbmdlcyBkdWUgdG9cbiAgLy8gcGFyZW50IHJlLXJlbmRlcnMgZnJvbSBwb2xsaW5nLlxuICBjb25zdCBvblNwYW5TZWxlY3RSZWYgPSB1c2VSZWYob25TcGFuU2VsZWN0KTtcbiAgb25TcGFuU2VsZWN0UmVmLmN1cnJlbnQgPSBvblNwYW5TZWxlY3Q7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICByZXNvdXJjZSAmJlxuICAgICAgcmVzb3VyY2VJZCAmJlxuICAgICAgWydydW4nLCAnc3RlcCcsICdob29rJywgJ3NsZWVwJ10uaW5jbHVkZXMocmVzb3VyY2UpXG4gICAgKSB7XG4gICAgICBvblNwYW5TZWxlY3RSZWYuY3VycmVudCh7XG4gICAgICAgIHJlc291cmNlOiByZXNvdXJjZSBhcyAncnVuJyB8ICdzdGVwJyB8ICdob29rJyB8ICdzbGVlcCcsXG4gICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgIHJ1bklkLFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbcmVzb3VyY2UsIHJlc291cmNlSWQsIHJ1bklkXSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBzbGVlcCBpcyBzdGlsbCBwZW5kaW5nIGFuZCBjYW4gYmUgd29rZW4gdXBcbiAgY29uc3QgY2FuV2FrZVVwID0gdXNlTWVtbygoKSA9PiB7XG4gICAgdm9pZCByYXdFdmVudHNMZW5ndGg7XG4gICAgaWYgKHJlc291cmNlICE9PSAnc2xlZXAnIHx8ICFyYXdFdmVudHMpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB0ZXJtaW5hbFN0YXRlcyA9IFsnY29tcGxldGVkJywgJ2ZhaWxlZCcsICdjYW5jZWxsZWQnXTtcbiAgICBpZiAodGVybWluYWxTdGF0ZXMuaW5jbHVkZXMocnVuLnN0YXR1cykpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNXYWl0Q3JlYXRlZCA9IHJhd0V2ZW50cy5zb21lKFxuICAgICAgKGUpID0+IGUuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICk7XG4gICAgaWYgKCFoYXNXYWl0Q3JlYXRlZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGhhc1dhaXRDb21wbGV0ZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICAgICk7XG4gICAgcmV0dXJuICFoYXNXYWl0Q29tcGxldGVkO1xuICB9LCBbcmVzb3VyY2UsIHJhd0V2ZW50cywgcmF3RXZlbnRzTGVuZ3RoLCBydW4uc3RhdHVzXSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBob29rIGNhbiBiZSByZXNvbHZlZFxuICBjb25zdCBjYW5SZXNvbHZlSG9vayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHZvaWQgcmF3RXZlbnRzTGVuZ3RoO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gJ2hvb2snIHx8ICFyYXdFdmVudHMgfHwgIXJlc291cmNlSWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgcmVzb2x2ZWQgdGhpcyBob29rIGluIHRoaXMgc2Vzc2lvblxuICAgIGlmIChyZXNvbHZlZEhvb2tJZHMuaGFzKHJlc291cmNlSWQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCB0ZXJtaW5hbFN0YXRlcyA9IFsnY29tcGxldGVkJywgJ2ZhaWxlZCcsICdjYW5jZWxsZWQnXTtcbiAgICBpZiAodGVybWluYWxTdGF0ZXMuaW5jbHVkZXMocnVuLnN0YXR1cykpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNIb29rRGlzcG9zZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnXG4gICAgKTtcbiAgICBpZiAoaGFzSG9va0Rpc3Bvc2VkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sIFtcbiAgICByZXNvdXJjZSxcbiAgICByZXNvdXJjZUlkLFxuICAgIHJhd0V2ZW50cyxcbiAgICByYXdFdmVudHNMZW5ndGgsXG4gICAgcnVuLnN0YXR1cyxcbiAgICByZXNvbHZlZEhvb2tJZHMsXG4gIF0pO1xuXG4gIGNvbnN0IGVycm9yID0gc3BhbkRldGFpbEVycm9yID8/IHVuZGVmaW5lZDtcbiAgY29uc3QgbG9hZGluZyA9IHNwYW5EZXRhaWxMb2FkaW5nID8/IGZhbHNlO1xuXG4gIGNvbnN0IG1hdGNoZWRTcGFuRGV0YWlsRGF0YSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNwYW5EZXRhaWxNYXRjaGVzU2VsZWN0aW9uKHNwYW5EZXRhaWxEYXRhLCByZXNvdXJjZSwgcmVzb3VyY2VJZClcbiAgICAgICAgPyBzcGFuRGV0YWlsRGF0YVxuICAgICAgICA6IG51bGwsXG4gICAgW3NwYW5EZXRhaWxEYXRhLCByZXNvdXJjZSwgcmVzb3VyY2VJZF1cbiAgKTtcblxuICAvLyBHZXQgdGhlIGhvb2sgdG9rZW4gZm9yIHJlc29sdmluZyAocHJlZmVyIGZldGNoZWQgZGF0YSwgdGhlbiBob29rcyBhcnJheSBmYWxsYmFjaylcbiAgY29uc3QgaG9va1Rva2VuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlICE9PSAnaG9vaycgfHwgIXJlc291cmNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gMS4gVHJ5IHRoZSBleHRlcm5hbGx5LWZldGNoZWQgZGV0YWlsIGRhdGEgZmlyc3RcbiAgICBpZiAoaXNIb29rKG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgJiYgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuO1xuICAgIH1cbiAgICAvLyAyLiBUcnkgdGhlIHNwYW4ncyBpbmxpbmUgZGF0YSAocmVjb25zdHJ1Y3RlZCBmcm9tIGhvb2tfY3JlYXRlZCBldmVudClcbiAgICBpZiAoaXNIb29rKGRhdGEpICYmIChkYXRhIGFzIEhvb2spLnRva2VuKSB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgSG9vaykudG9rZW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZXNvdXJjZSwgcmVzb3VyY2VJZCwgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXJyb3IgJiYgc2VsZWN0ZWRTcGFuICYmIHJlc291cmNlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtyZXNvdXJjZX0gZGV0YWlsc2AsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtlcnJvciwgcmVzb3VyY2UsIHNlbGVjdGVkU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVdha2VVcCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc3RvcHBpbmdTbGVlcCB8fCAhcmVzb3VyY2VJZCkgcmV0dXJuO1xuICAgIGlmICghb25XYWtlVXBTbGVlcCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byB3YWtlIHVwIHNsZWVwJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ05vIHdha2UtdXAgaGFuZGxlciBwcm92aWRlZC4nLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldFN0b3BwaW5nU2xlZXAodHJ1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvbldha2VVcFNsZWVwKHJ1bi5ydW5JZCwgcmVzb3VyY2VJZCk7XG4gICAgICBpZiAocmVzdWx0LnN0b3BwZWRDb3VudCA+IDApIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnUnVuIHdva2VuIHVwJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1RoZSBzbGVlcCBjYWxsIGhhcyBiZWVuIGludGVycnVwdGVkIGFuZCB0aGUgcnVuIHdva2VuIHVwLicsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3QuaW5mbygnU2xlZXAgYWxyZWFkeSBjb21wbGV0ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHNsZWVwIGNhbGwgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW46JywgZXJyKTtcbiAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW4nLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3RvcHBpbmdTbGVlcChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc29sdmVIb29rID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChyZXNvbHZpbmdIb29rKSByZXR1cm47XG4gICAgICBpZiAoIW9uUmVzb2x2ZUhvb2spIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdObyByZXNvbHZlIGhhbmRsZXIgcHJvdmlkZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaG9va1Rva2VuKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBob29rJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ01pc3NpbmcgaG9vayB0b2tlbi4gVHJ5IHJlZnJlc2hpbmcgdGhlIHJ1biBkYXRhIGFuZCByZXRyeS4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXNvbHZpbmdIb29rKHRydWUpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBtYXRjaGVkU3BhbkRldGFpbERhdGEgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgaG9vayA9IGlzSG9vayhjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCBvblJlc29sdmVIb29rKGhvb2tUb2tlbiwgcGF5bG9hZCwgaG9vayk7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0hvb2sgcmVzb2x2ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcGF5bG9hZCBoYXMgYmVlbiBzZW50IGFuZCB0aGUgaG9vayByZXNvbHZlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpO1xuICAgICAgICAvLyBNYXJrIHRoaXMgaG9vayBhcyByZXNvbHZlZCBsb2NhbGx5IHNvIHRoZSBidXR0b24gaGlkZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzZXRSZXNvbHZlZEhvb2tJZHMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2s6JywgZXJyKTtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFJlc29sdmluZ0hvb2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uUmVzb2x2ZUhvb2ssIGhvb2tUb2tlbiwgcmVzb2x2aW5nSG9vaywgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXVxuICApO1xuXG4gIGNvbnN0IGRpc3BsYXlEYXRhID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgbWVyZ2VTcGFuRGV0YWlsKGRhdGEsIG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgYXNcbiAgICAgICAgfCBXb3JrZmxvd1J1blxuICAgICAgICB8IFN0ZXBcbiAgICAgICAgfCBIb29rXG4gICAgICAgIHwgRXZlbnQsXG4gICAgW2RhdGEsIG1hdGNoZWRTcGFuRGV0YWlsRGF0YV1cbiAgKTtcblxuICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBkaXNwbGF5UmVjb3JkID0gZGlzcGxheURhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgZGlzcGxheVN0ZXBOYW1lID0gZGlzcGxheVJlY29yZC5zdGVwTmFtZTtcbiAgICBjb25zdCBkaXNwbGF5V29ya2Zsb3dOYW1lID0gZGlzcGxheVJlY29yZC53b3JrZmxvd05hbWU7XG4gICAgaWYgKHR5cGVvZiBkaXNwbGF5U3RlcE5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGlzcGxheVN0ZXBOYW1lO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3BsYXlXb3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGlzcGxheVdvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBydW4ud29ya2Zsb3dOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJ1bi53b3JrZmxvd05hbWU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtkaXNwbGF5RGF0YSwgcnVuLndvcmtmbG93TmFtZV0pO1xuXG4gIGlmICghc2VsZWN0ZWRTcGFuIHx8ICFyZXNvdXJjZSB8fCAhcmVzb3VyY2VJZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaGFzUGVuZGluZ0FjdGlvbnMgPVxuICAgIChyZXNvdXJjZSA9PT0gJ3NsZWVwJyAmJiBjYW5XYWtlVXApIHx8XG4gICAgKHJlc291cmNlID09PSAnaG9vaycgJiYgY2FuUmVzb2x2ZUhvb2spO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbFwiPlxuICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e1xuICAgICAgICAgIG9uRGVjcnlwdCA/IHsgb25EZWNyeXB0LCBpc0RlY3J5cHRpbmcsIGhhc0VuY3J5cHRlZERhdGEgfSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBweC00IHBiLThcIj5cbiAgICAgICAgICB7aGFzUGVuZGluZ0FjdGlvbnMgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi00IHJvdW5kZWQtbGcgYm9yZGVyIHAtMlwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWItMiBweC0xIHRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIHVwcGVyY2FzZSB0cmFja2luZy13aWRlXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICB7LyogV2FrZSB1cCBidXR0b24gZm9yIHBlbmRpbmcgc2xlZXAgY2FsbHMgKi99XG4gICAgICAgICAgICAgICAge3Jlc291cmNlID09PSAnc2xlZXAnICYmIGNhbldha2VVcCAmJiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVXYWtlVXB9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzdG9wcGluZ1NsZWVwfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHJvdW5kZWQtbWQgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmdTbGVlcFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZHMtYW1iZXItMjAwKScsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1hbWJlci05MDApJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFphcCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAge3N0b3BwaW5nU2xlZXAgPyAnV2FraW5nIHVwLi4uJyA6ICdXYWtlIFVwIFNsZWVwJ31cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7LyogUmVzb2x2ZSBob29rIGJ1dHRvbiBmb3IgcGVuZGluZyBob29rcyAqL31cbiAgICAgICAgICAgICAgICB7cmVzb3VyY2UgPT09ICdob29rJyAmJiBjYW5SZXNvbHZlSG9vayAmJiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UmVzb2x2ZUhvb2tNb2RhbCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Jlc29sdmluZ0hvb2t9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZpbmdIb29rXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdvcGFjaXR5LTUwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1ncmF5LTEwMDApJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWJhY2tncm91bmQtMTAwKScsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTZW5kIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICBSZXNvbHZlIEhvb2tcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxBdHRyaWJ1dGVQYW5lbFxuICAgICAgICAgICAgZGF0YT17ZGlzcGxheURhdGF9XG4gICAgICAgICAgICBtb2R1bGVTcGVjaWZpZXI9e21vZHVsZVNwZWNpZmllcn1cbiAgICAgICAgICAgIGV4cGlyZWRBdD17cnVuLmV4cGlyZWRBdH1cbiAgICAgICAgICAgIGlzTG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICAgIGVycm9yPXtlcnJvciA/PyB1bmRlZmluZWR9XG4gICAgICAgICAgICBvblN0cmVhbUNsaWNrPXtvblN0cmVhbUNsaWNrfVxuICAgICAgICAgICAgb25SdW5DbGljaz17b25SdW5DbGlja31cbiAgICAgICAgICAgIG9uRGVjcnlwdD17b25EZWNyeXB0fVxuICAgICAgICAgICAgaXNEZWNyeXB0aW5nPXtpc0RlY3J5cHRpbmd9XG4gICAgICAgICAgICByZXNvdXJjZT17cmVzb3VyY2V9XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIHtyZXNvdXJjZSAhPT0gJ3J1bicgJiYgcmF3RXZlbnRzICYmIChcbiAgICAgICAgICAgIDxFdmVudHNMaXN0XG4gICAgICAgICAgICAgIGV2ZW50cz17cmF3RXZlbnRzfVxuICAgICAgICAgICAgICBvbkxvYWRFdmVudERhdGE9e29uTG9hZEV2ZW50RGF0YX1cbiAgICAgICAgICAgICAgb25TdHJlYW1DbGljaz17b25TdHJlYW1DbGlja31cbiAgICAgICAgICAgICAgb25SdW5DbGljaz17b25SdW5DbGlja31cbiAgICAgICAgICAgICAgZW5jcnlwdGlvbktleT17ZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0RlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXI+XG5cbiAgICAgIHsvKiBSZXNvbHZlIEhvb2sgTW9kYWwgKi99XG4gICAgICA8UmVzb2x2ZUhvb2tNb2RhbFxuICAgICAgICBpc09wZW49e3Nob3dSZXNvbHZlSG9va01vZGFsfVxuICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93UmVzb2x2ZUhvb2tNb2RhbChmYWxzZSl9XG4gICAgICAgIG9uU3VibWl0PXtoYW5kbGVSZXNvbHZlSG9va31cbiAgICAgICAgaXNTdWJtaXR0aW5nPXtyZXNvbHZpbmdIb29rfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiJdfQ==
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRldGFpbC1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGViYXIvZW50aXR5LWRldGFpbC1wYW5lbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDOztBQUdiLE9BQU8sSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUNMLGVBQWUsRUFDZiwwQkFBMEIsR0FDM0IsTUFBTSxxQkFBcUIsQ0FBQztBQUU3Qiw0REFBNEQ7QUFDNUQsU0FBUyxNQUFNLENBQUMsSUFBYTtJQUMzQixPQUFPLElBQUksS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDdkUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQWE7SUFDbEMsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLE1B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Q0gsSUFDRyxHQUN1QixFQUcvQixLQUFDLGdCQUFnQixJQUNmLE1BQU0sRUFBRSxvQkFBb0IsRUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxFQUM3QyxRQUFRLEVBQUUsaUJBQWlCLEVBQzNCLFlBQVksRUFBRSxhQUFhLEdBQzNCLElBQ0UsQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHR5cGUgeyBFdmVudCwgSG9vaywgU3RlcCwgV29ya2Zsb3dSdW4gfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBTZW5kLCBaYXAgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVRvYXN0IH0gZnJvbSAnLi4vLi4vbGliL3RvYXN0JztcbmltcG9ydCB7IERlY3J5cHRDbGlja0NvbnRleHQgfSBmcm9tICcuLi91aS9kYXRhLWluc3BlY3Rvcic7XG5pbXBvcnQgeyBBdHRyaWJ1dGVQYW5lbCB9IGZyb20gJy4vYXR0cmlidXRlLXBhbmVsJztcbmltcG9ydCB7IEV2ZW50c0xpc3QgfSBmcm9tICcuL2V2ZW50cy1saXN0JztcbmltcG9ydCB7IFJlc29sdmVIb29rTW9kYWwgfSBmcm9tICcuL3Jlc29sdmUtaG9vay1tb2RhbCc7XG5pbXBvcnQgeyB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsIH0gZnJvbSAnLi9zaWRlYmFyLWRhdGEtY29udGV4dCc7XG5pbXBvcnQge1xuICBtZXJnZVNwYW5EZXRhaWwsXG4gIHNwYW5EZXRhaWxNYXRjaGVzU2VsZWN0aW9uLFxufSBmcm9tICcuL3NwYW4tZGV0YWlsLW1lcmdlJztcblxuLy8gVHlwZSBndWFyZHMgZm9yIHJ1bnRpbWUgdmFsaWRhdGlvbiBvZiBzcGFuIGF0dHJpYnV0ZSBkYXRhXG5mdW5jdGlvbiBpc1N0ZXAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgU3RlcCB7XG4gIHJldHVybiBkYXRhICE9PSBudWxsICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAnc3RlcElkJyBpbiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc1dvcmtmbG93UnVuKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFdvcmtmbG93UnVuIHtcbiAgcmV0dXJuIGRhdGEgIT09IG51bGwgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdydW5JZCcgaW4gZGF0YTtcbn1cblxuZnVuY3Rpb24gaXNIb29rKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEhvb2sge1xuICByZXR1cm4gZGF0YSAhPT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ2hvb2tJZCcgaW4gZGF0YTtcbn1cblxuLyoqXG4gKiBJbmZvIGFib3V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3BhblxuICovXG5leHBvcnQgdHlwZSBTcGFuU2VsZWN0aW9uSW5mbyA9IHtcbiAgcmVzb3VyY2U6ICdydW4nIHwgJ3N0ZXAnIHwgJ2hvb2snIHwgJ3NsZWVwJztcbiAgcmVzb3VyY2VJZDogc3RyaW5nO1xuICBydW5JZD86IHN0cmluZztcbn07XG5cbi8qKlxuICogSW5mbyBhYm91dCB0aGUgc2VsZWN0ZWQgc3BhbiBmcm9tIHRoZSB0cmFjZSB2aWV3ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0ZWRTcGFuSW5mbyB7XG4gIC8qKiBUaGUgcmF3IGRhdGEgZnJvbSB0aGUgc3BhbiBhdHRyaWJ1dGVzIChzdGVwL3J1bi9ob29rIG9iamVjdCBmcm9tIHRoZSB0cmFjZSkgKi9cbiAgZGF0YT86IHVua25vd247XG4gIC8qKiBUaGUgc3BhbiByZXNvdXJjZSB0eXBlIChmcm9tIHNwYW4gYXR0cmlidXRlcykgKi9cbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIC8qKiBUaGUgc3BhbiBJRCAoY29ycmVsYXRpb25JZCBmb3IgZmlsdGVyaW5nIGV2ZW50cykgKi9cbiAgc3BhbklkPzogc3RyaW5nO1xuICAvKiogUmF3IGNvcnJlbGF0ZWQgZXZlbnRzIGZyb20gdGhlIHN0b3JlIChOT1QgZnJvbSB0aGUgdHJhY2Ugd29ya2VyIHBpcGVsaW5lKSAqL1xuICByYXdFdmVudHM/OiBFdmVudFtdO1xufVxuXG4vKipcbiAqIFBhbmVsIGNvbXBvbmVudCBmb3Igd29ya2Zsb3cgdHJhY2VzIHRoYXQgZGlzcGxheXMgZW50aXR5IGRldGFpbHMuXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgcmVuZGVyZWQgT1VUU0lERSB0aGUgdHJhY2Ugdmlld2VyIGNvbnRleHQg4oCUIGl0XG4gKiByZWNlaXZlcyBhbGwgZGF0YSB2aWEgcHJvcHMgcmF0aGVyIHRoYW4gcmVhZGluZyBmcm9tIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBFbnRpdHlEZXRhaWxQYW5lbCh7XG4gIHJ1bixcbiAgb25TdHJlYW1DbGljayxcbiAgb25SdW5DbGljayxcbiAgc3BhbkRldGFpbERhdGEsXG4gIHNwYW5EZXRhaWxFcnJvcixcbiAgc3BhbkRldGFpbExvYWRpbmcsXG4gIG9uU3BhblNlbGVjdCxcbiAgb25XYWtlVXBTbGVlcCxcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBvblJlc29sdmVIb29rLFxuICBlbmNyeXB0aW9uS2V5LFxuICBvbkRlY3J5cHQsXG4gIGlzRGVjcnlwdGluZyA9IGZhbHNlLFxuICBzZWxlY3RlZFNwYW4sXG59OiB7XG4gIHJ1bjogV29ya2Zsb3dSdW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3RyZWFtIHJlZmVyZW5jZSBpcyBjbGlja2VkICovXG4gIG9uU3RyZWFtQ2xpY2s/OiAoc3RyZWFtSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gYSBydW4gcmVmZXJlbmNlIGlzIGNsaWNrZWQgKi9cbiAgb25SdW5DbGljaz86IChydW5JZDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogUHJlLWZldGNoZWQgc3BhbiBkZXRhaWwgZGF0YSBmb3IgdGhlIHNlbGVjdGVkIHNwYW4uICovXG4gIHNwYW5EZXRhaWxEYXRhOiBXb3JrZmxvd1J1biB8IFN0ZXAgfCBIb29rIHwgRXZlbnQgfCBudWxsO1xuICAvKiogRXJyb3IgZnJvbSBleHRlcm5hbCBzcGFuIGRldGFpbCBmZXRjaC4gKi9cbiAgc3BhbkRldGFpbEVycm9yPzogRXJyb3IgfCBudWxsO1xuICAvKiogTG9hZGluZyBzdGF0ZSBmcm9tIGV4dGVybmFsIHNwYW4gZGV0YWlsIGZldGNoLiAqL1xuICBzcGFuRGV0YWlsTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIGEgc3BhbiBpcyBzZWxlY3RlZC4gVXNlIHRoaXMgdG8gZmV0Y2ggZGF0YSBleHRlcm5hbGx5IGFuZCBwYXNzIHZpYSBzcGFuRGV0YWlsRGF0YS4gKi9cbiAgb25TcGFuU2VsZWN0OiAoaW5mbzogU3BhblNlbGVjdGlvbkluZm8pID0+IHZvaWQ7XG4gIC8qKiBDYWxsYmFjayB0byB3YWtlIHVwIGEgcGVuZGluZyBzbGVlcCBjYWxsLiAqL1xuICBvbldha2VVcFNsZWVwPzogKFxuICAgIHJ1bklkOiBzdHJpbmcsXG4gICAgY29ycmVsYXRpb25JZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx7IHN0b3BwZWRDb3VudDogbnVtYmVyIH0+O1xuICAvKiogQ2FsbGJhY2sgdG8gbG9hZCBldmVudCBkYXRhIGZvciBhIHNwZWNpZmljIGV2ZW50IChsYXp5IGxvYWRpbmcpICovXG4gIG9uTG9hZEV2ZW50RGF0YT86IChcbiAgICBjb3JyZWxhdGlvbklkOiBzdHJpbmcsXG4gICAgZXZlbnRJZDogc3RyaW5nXG4gICkgPT4gUHJvbWlzZTx1bmtub3duIHwgbnVsbD47XG4gIC8qKiBDYWxsYmFjayB0byByZXNvbHZlIGEgaG9vayB3aXRoIGEgcGF5bG9hZC4gKi9cbiAgb25SZXNvbHZlSG9vaz86IChcbiAgICBob29rVG9rZW46IHN0cmluZyxcbiAgICBwYXlsb2FkOiB1bmtub3duLFxuICAgIGhvb2s/OiBIb29rXG4gICkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqIEVuY3J5cHRpb24ga2V5IChhdmFpbGFibGUgYWZ0ZXIgRGVjcnlwdCBpcyBjbGlja2VkKSwgdXNlZCB0byByZS1sb2FkIGV2ZW50IGRhdGEgKi9cbiAgZW5jcnlwdGlvbktleT86IFVpbnQ4QXJyYXk7XG4gIC8qKiBDYWxsYmFjayB0byBpbml0aWF0ZSBkZWNyeXB0aW9uIG9mIGVuY3J5cHRlZCBydW4gZGF0YSAqL1xuICBvbkRlY3J5cHQ/OiAoKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciB0aGUgZW5jcnlwdGlvbiBrZXkgaXMgY3VycmVudGx5IGJlaW5nIGZldGNoZWQgKi9cbiAgaXNEZWNyeXB0aW5nPzogYm9vbGVhbjtcbiAgLyoqIEluZm8gYWJvdXQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzcGFuIGZyb20gdGhlIHRyYWNlIHZpZXdlciAqL1xuICBzZWxlY3RlZFNwYW46IFNlbGVjdGVkU3BhbkluZm8gfCBudWxsO1xufSk6IFJlYWN0LkpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IHRvYXN0ID0gdXNlVG9hc3QoKTtcbiAgY29uc3QgW3N0b3BwaW5nU2xlZXAsIHNldFN0b3BwaW5nU2xlZXBdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd1Jlc29sdmVIb29rTW9kYWwsIHNldFNob3dSZXNvbHZlSG9va01vZGFsXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Jlc29sdmluZ0hvb2ssIHNldFJlc29sdmluZ0hvb2tdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAvLyBUcmFjayBob29rcyB0aGF0IHdlcmUgcmVzb2x2ZWQgaW4gdGhpcyBzZXNzaW9uIHNvIHRoZSBidXR0b24gaGlkZXNcbiAgLy8gaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgbmV4dCBldmVudCBwb2xsLlxuICBjb25zdCBbcmVzb2x2ZWRIb29rSWRzLCBzZXRSZXNvbHZlZEhvb2tJZHNdID0gdXNlU3RhdGU8U2V0PHN0cmluZz4+KFxuICAgIG5ldyBTZXQoKVxuICApO1xuXG4gIGNvbnN0IHNpZGViYXIgPSB1c2VTaWRlYmFyRGF0YU9wdGlvbmFsKCk7XG4gIGNvbnN0IGhhc0VuY3J5cHRlZERhdGEgPSBCb29sZWFuKHNpZGViYXI/Lmhhc0VuY3J5cHRlZERhdGEgJiYgIWVuY3J5cHRpb25LZXkpO1xuXG4gIGNvbnN0IGRhdGEgPSBzZWxlY3RlZFNwYW4/LmRhdGE7XG4gIGNvbnN0IHJhd0V2ZW50cyA9IHNlbGVjdGVkU3Bhbj8ucmF3RXZlbnRzO1xuICBjb25zdCByYXdFdmVudHNMZW5ndGggPSByYXdFdmVudHM/Lmxlbmd0aCA/PyAwO1xuXG4gIC8vIERldGVybWluZSByZXNvdXJjZSB0eXBlLCBJRCwgYW5kIHJ1bklkIGZyb20gdGhlIHNlbGVjdGVkIHNwYW5cbiAgY29uc3QgeyByZXNvdXJjZSwgcmVzb3VyY2VJZCwgcnVuSWQgfSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc2VsZWN0ZWRTcGFuKSB7XG4gICAgICByZXR1cm4geyByZXNvdXJjZTogdW5kZWZpbmVkLCByZXNvdXJjZUlkOiB1bmRlZmluZWQsIHJ1bklkOiB1bmRlZmluZWQgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBzZWxlY3RlZFNwYW4ucmVzb3VyY2U7XG4gICAgaWYgKHJlcyA9PT0gJ3N0ZXAnICYmIGlzU3RlcChkYXRhKSkge1xuICAgICAgcmV0dXJuIHsgcmVzb3VyY2U6ICdzdGVwJywgcmVzb3VyY2VJZDogZGF0YS5zdGVwSWQsIHJ1bklkOiBkYXRhLnJ1bklkIH07XG4gICAgfVxuICAgIGlmIChyZXMgPT09ICdydW4nICYmIGlzV29ya2Zsb3dSdW4oZGF0YSkpIHtcbiAgICAgIHJldHVybiB7IHJlc291cmNlOiAncnVuJywgcmVzb3VyY2VJZDogZGF0YS5ydW5JZCwgcnVuSWQ6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICBpZiAocmVzID09PSAnaG9vaycgJiYgaXNIb29rKGRhdGEpKSB7XG4gICAgICByZXR1cm4geyByZXNvdXJjZTogJ2hvb2snLCByZXNvdXJjZUlkOiBkYXRhLmhvb2tJZCwgcnVuSWQ6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICBpZiAocmVzID09PSAnc2xlZXAnKSB7XG4gICAgICBjb25zdCB3YWl0RGF0YSA9IGRhdGEgYXMgeyBydW5JZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb3VyY2U6ICdzbGVlcCcsXG4gICAgICAgIHJlc291cmNlSWQ6IHNlbGVjdGVkU3Bhbi5zcGFuSWQsXG4gICAgICAgIHJ1bklkOiB3YWl0RGF0YT8ucnVuSWQsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4geyByZXNvdXJjZTogdW5kZWZpbmVkLCByZXNvdXJjZUlkOiB1bmRlZmluZWQsIHJ1bklkOiB1bmRlZmluZWQgfTtcbiAgfSwgW3NlbGVjdGVkU3BhbiwgZGF0YV0pO1xuXG4gIC8vIE5vdGlmeSBwYXJlbnQgd2hlbiBzcGFuIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAvLyBVc2UgYSByZWYgZm9yIHRoZSBjYWxsYmFjayBzbyB0aGUgZWZmZWN0IG9ubHkgZmlyZXMgd2hlbiB0aGUgYWN0dWFsXG4gIC8vIHNlbGVjdGlvbiB2YWx1ZXMgY2hhbmdlLCBub3Qgd2hlbiB0aGUgY2FsbGJhY2sgaWRlbnRpdHkgY2hhbmdlcyBkdWUgdG9cbiAgLy8gcGFyZW50IHJlLXJlbmRlcnMgZnJvbSBwb2xsaW5nLlxuICBjb25zdCBvblNwYW5TZWxlY3RSZWYgPSB1c2VSZWYob25TcGFuU2VsZWN0KTtcbiAgb25TcGFuU2VsZWN0UmVmLmN1cnJlbnQgPSBvblNwYW5TZWxlY3Q7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICByZXNvdXJjZSAmJlxuICAgICAgcmVzb3VyY2VJZCAmJlxuICAgICAgWydydW4nLCAnc3RlcCcsICdob29rJywgJ3NsZWVwJ10uaW5jbHVkZXMocmVzb3VyY2UpXG4gICAgKSB7XG4gICAgICBvblNwYW5TZWxlY3RSZWYuY3VycmVudCh7XG4gICAgICAgIHJlc291cmNlOiByZXNvdXJjZSBhcyAncnVuJyB8ICdzdGVwJyB8ICdob29rJyB8ICdzbGVlcCcsXG4gICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgIHJ1bklkLFxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbcmVzb3VyY2UsIHJlc291cmNlSWQsIHJ1bklkXSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBzbGVlcCBpcyBzdGlsbCBwZW5kaW5nIGFuZCBjYW4gYmUgd29rZW4gdXBcbiAgY29uc3QgY2FuV2FrZVVwID0gdXNlTWVtbygoKSA9PiB7XG4gICAgdm9pZCByYXdFdmVudHNMZW5ndGg7XG4gICAgaWYgKHJlc291cmNlICE9PSAnc2xlZXAnIHx8ICFyYXdFdmVudHMpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB0ZXJtaW5hbFN0YXRlcyA9IFsnY29tcGxldGVkJywgJ2ZhaWxlZCcsICdjYW5jZWxsZWQnXTtcbiAgICBpZiAodGVybWluYWxTdGF0ZXMuaW5jbHVkZXMocnVuLnN0YXR1cykpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNXYWl0Q3JlYXRlZCA9IHJhd0V2ZW50cy5zb21lKFxuICAgICAgKGUpID0+IGUuZXZlbnRUeXBlID09PSAnd2FpdF9jcmVhdGVkJ1xuICAgICk7XG4gICAgaWYgKCFoYXNXYWl0Q3JlYXRlZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGhhc1dhaXRDb21wbGV0ZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ3dhaXRfY29tcGxldGVkJ1xuICAgICk7XG4gICAgcmV0dXJuICFoYXNXYWl0Q29tcGxldGVkO1xuICB9LCBbcmVzb3VyY2UsIHJhd0V2ZW50cywgcmF3RXZlbnRzTGVuZ3RoLCBydW4uc3RhdHVzXSk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhpcyBob29rIGNhbiBiZSByZXNvbHZlZFxuICBjb25zdCBjYW5SZXNvbHZlSG9vayA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHZvaWQgcmF3RXZlbnRzTGVuZ3RoO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gJ2hvb2snIHx8ICFyYXdFdmVudHMgfHwgIXJlc291cmNlSWQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgcmVzb2x2ZWQgdGhpcyBob29rIGluIHRoaXMgc2Vzc2lvblxuICAgIGlmIChyZXNvbHZlZEhvb2tJZHMuaGFzKHJlc291cmNlSWQpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCB0ZXJtaW5hbFN0YXRlcyA9IFsnY29tcGxldGVkJywgJ2ZhaWxlZCcsICdjYW5jZWxsZWQnXTtcbiAgICBpZiAodGVybWluYWxTdGF0ZXMuaW5jbHVkZXMocnVuLnN0YXR1cykpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBoYXNIb29rRGlzcG9zZWQgPSByYXdFdmVudHMuc29tZShcbiAgICAgIChlKSA9PiBlLmV2ZW50VHlwZSA9PT0gJ2hvb2tfZGlzcG9zZWQnXG4gICAgKTtcbiAgICBpZiAoaGFzSG9va0Rpc3Bvc2VkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0sIFtcbiAgICByZXNvdXJjZSxcbiAgICByZXNvdXJjZUlkLFxuICAgIHJhd0V2ZW50cyxcbiAgICByYXdFdmVudHNMZW5ndGgsXG4gICAgcnVuLnN0YXR1cyxcbiAgICByZXNvbHZlZEhvb2tJZHMsXG4gIF0pO1xuXG4gIGNvbnN0IGVycm9yID0gc3BhbkRldGFpbEVycm9yID8/IHVuZGVmaW5lZDtcbiAgY29uc3QgbG9hZGluZyA9IHNwYW5EZXRhaWxMb2FkaW5nID8/IGZhbHNlO1xuXG4gIGNvbnN0IG1hdGNoZWRTcGFuRGV0YWlsRGF0YSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHNwYW5EZXRhaWxNYXRjaGVzU2VsZWN0aW9uKHNwYW5EZXRhaWxEYXRhLCByZXNvdXJjZSwgcmVzb3VyY2VJZClcbiAgICAgICAgPyBzcGFuRGV0YWlsRGF0YVxuICAgICAgICA6IG51bGwsXG4gICAgW3NwYW5EZXRhaWxEYXRhLCByZXNvdXJjZSwgcmVzb3VyY2VJZF1cbiAgKTtcblxuICAvLyBHZXQgdGhlIGhvb2sgdG9rZW4gZm9yIHJlc29sdmluZyAocHJlZmVyIGZldGNoZWQgZGF0YSwgdGhlbiBob29rcyBhcnJheSBmYWxsYmFjaylcbiAgY29uc3QgaG9va1Rva2VuID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKHJlc291cmNlICE9PSAnaG9vaycgfHwgIXJlc291cmNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy8gMS4gVHJ5IHRoZSBleHRlcm5hbGx5LWZldGNoZWQgZGV0YWlsIGRhdGEgZmlyc3RcbiAgICBpZiAoaXNIb29rKG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgJiYgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLnRva2VuO1xuICAgIH1cbiAgICAvLyAyLiBUcnkgdGhlIHNwYW4ncyBpbmxpbmUgZGF0YSAocmVjb25zdHJ1Y3RlZCBmcm9tIGhvb2tfY3JlYXRlZCBldmVudClcbiAgICBpZiAoaXNIb29rKGRhdGEpICYmIChkYXRhIGFzIEhvb2spLnRva2VuKSB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgSG9vaykudG9rZW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtyZXNvdXJjZSwgcmVzb3VyY2VJZCwgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXJyb3IgJiYgc2VsZWN0ZWRTcGFuICYmIHJlc291cmNlKSB7XG4gICAgICB0b2FzdC5lcnJvcihgRmFpbGVkIHRvIGxvYWQgJHtyZXNvdXJjZX0gZGV0YWlsc2AsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtlcnJvciwgcmVzb3VyY2UsIHNlbGVjdGVkU3Bhbl0pO1xuXG4gIGNvbnN0IGhhbmRsZVdha2VVcCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoc3RvcHBpbmdTbGVlcCB8fCAhcmVzb3VyY2VJZCkgcmV0dXJuO1xuICAgIGlmICghb25XYWtlVXBTbGVlcCkge1xuICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byB3YWtlIHVwIHNsZWVwJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ05vIHdha2UtdXAgaGFuZGxlciBwcm92aWRlZC4nLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldFN0b3BwaW5nU2xlZXAodHJ1ZSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvbldha2VVcFNsZWVwKHJ1bi5ydW5JZCwgcmVzb3VyY2VJZCk7XG4gICAgICBpZiAocmVzdWx0LnN0b3BwZWRDb3VudCA+IDApIHtcbiAgICAgICAgdG9hc3Quc3VjY2VzcygnUnVuIHdva2VuIHVwJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ1RoZSBzbGVlcCBjYWxsIGhhcyBiZWVuIGludGVycnVwdGVkIGFuZCB0aGUgcnVuIHdva2VuIHVwLicsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9hc3QuaW5mbygnU2xlZXAgYWxyZWFkeSBjb21wbGV0ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHNsZWVwIGNhbGwgaGFzIGFscmVhZHkgZmluaXNoZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW46JywgZXJyKTtcbiAgICAgIHRvYXN0LmVycm9yKCdGYWlsZWQgdG8gd2FrZSB1cCBydW4nLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCcsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U3RvcHBpbmdTbGVlcChmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc29sdmVIb29rID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ6IHVua25vd24pID0+IHtcbiAgICAgIGlmIChyZXNvbHZpbmdIb29rKSByZXR1cm47XG4gICAgICBpZiAoIW9uUmVzb2x2ZUhvb2spIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ1VuYWJsZSB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdObyByZXNvbHZlIGhhbmRsZXIgcHJvdmlkZWQuJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaG9va1Rva2VuKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBob29rJywge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgJ01pc3NpbmcgaG9vayB0b2tlbi4gVHJ5IHJlZnJlc2hpbmcgdGhlIHJ1biBkYXRhIGFuZCByZXRyeS4nLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRSZXNvbHZpbmdIb29rKHRydWUpO1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSBtYXRjaGVkU3BhbkRldGFpbERhdGEgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgaG9vayA9IGlzSG9vayhjYW5kaWRhdGUpID8gY2FuZGlkYXRlIDogdW5kZWZpbmVkO1xuICAgICAgICBhd2FpdCBvblJlc29sdmVIb29rKGhvb2tUb2tlbiwgcGF5bG9hZCwgaG9vayk7XG4gICAgICAgIHRvYXN0LnN1Y2Nlc3MoJ0hvb2sgcmVzb2x2ZWQnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgcGF5bG9hZCBoYXMgYmVlbiBzZW50IGFuZCB0aGUgaG9vayByZXNvbHZlZC4nLFxuICAgICAgICB9KTtcbiAgICAgICAgc2V0U2hvd1Jlc29sdmVIb29rTW9kYWwoZmFsc2UpO1xuICAgICAgICAvLyBNYXJrIHRoaXMgaG9vayBhcyByZXNvbHZlZCBsb2NhbGx5IHNvIHRoZSBidXR0b24gaGlkZXMgaW1tZWRpYXRlbHlcbiAgICAgICAgaWYgKHJlc291cmNlSWQpIHtcbiAgICAgICAgICBzZXRSZXNvbHZlZEhvb2tJZHMoKHByZXYpID0+IG5ldyBTZXQocHJldikuYWRkKHJlc291cmNlSWQpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2s6JywgZXJyKTtcbiAgICAgICAgdG9hc3QuZXJyb3IoJ0ZhaWxlZCB0byByZXNvbHZlIGhvb2snLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFJlc29sdmluZ0hvb2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uUmVzb2x2ZUhvb2ssIGhvb2tUb2tlbiwgcmVzb2x2aW5nSG9vaywgbWF0Y2hlZFNwYW5EZXRhaWxEYXRhLCBkYXRhXVxuICApO1xuXG4gIGNvbnN0IGRpc3BsYXlEYXRhID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgbWVyZ2VTcGFuRGV0YWlsKGRhdGEsIG1hdGNoZWRTcGFuRGV0YWlsRGF0YSkgYXNcbiAgICAgICAgfCBXb3JrZmxvd1J1blxuICAgICAgICB8IFN0ZXBcbiAgICAgICAgfCBIb29rXG4gICAgICAgIHwgRXZlbnQsXG4gICAgW2RhdGEsIG1hdGNoZWRTcGFuRGV0YWlsRGF0YV1cbiAgKTtcblxuICBjb25zdCBtb2R1bGVTcGVjaWZpZXIgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBkaXNwbGF5UmVjb3JkID0gZGlzcGxheURhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3QgZGlzcGxheVN0ZXBOYW1lID0gZGlzcGxheVJlY29yZC5zdGVwTmFtZTtcbiAgICBjb25zdCBkaXNwbGF5V29ya2Zsb3dOYW1lID0gZGlzcGxheVJlY29yZC53b3JrZmxvd05hbWU7XG4gICAgaWYgKHR5cGVvZiBkaXNwbGF5U3RlcE5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGlzcGxheVN0ZXBOYW1lO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3BsYXlXb3JrZmxvd05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGlzcGxheVdvcmtmbG93TmFtZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBydW4ud29ya2Zsb3dOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJ1bi53b3JrZmxvd05hbWU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFtkaXNwbGF5RGF0YSwgcnVuLndvcmtmbG93TmFtZV0pO1xuXG4gIGlmICghc2VsZWN0ZWRTcGFuIHx8ICFyZXNvdXJjZSB8fCAhcmVzb3VyY2VJZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaGFzUGVuZGluZ0FjdGlvbnMgPVxuICAgIChyZXNvdXJjZSA9PT0gJ3NsZWVwJyAmJiBjYW5XYWtlVXApIHx8XG4gICAgKHJlc291cmNlID09PSAnaG9vaycgJiYgY2FuUmVzb2x2ZUhvb2spO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGgtZnVsbCBmbGV4LWNvbFwiPlxuICAgICAgPERlY3J5cHRDbGlja0NvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e1xuICAgICAgICAgIG9uRGVjcnlwdCA/IHsgb25EZWNyeXB0LCBpc0RlY3J5cHRpbmcsIGhhc0VuY3J5cHRlZERhdGEgfSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBweC00IHBiLThcIj5cbiAgICAgICAgICB7aGFzUGVuZGluZ0FjdGlvbnMgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtYi00IHJvdW5kZWQtbGcgYm9yZGVyIHAtMlwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWItMiBweC0xIHRleHQtWzEzcHhdIGZvbnQtbWVkaXVtIHVwcGVyY2FzZSB0cmFja2luZy13aWRlXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyBjb2xvcjogJ3ZhcigtLWRzLWdyYXktNzAwKScgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICB7LyogV2FrZSB1cCBidXR0b24gZm9yIHBlbmRpbmcgc2xlZXAgY2FsbHMgKi99XG4gICAgICAgICAgICAgICAge3Jlc291cmNlID09PSAnc2xlZXAnICYmIGNhbldha2VVcCAmJiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVXYWtlVXB9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzdG9wcGluZ1NsZWVwfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nsc3goXG4gICAgICAgICAgICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0yIHJvdW5kZWQtbWQgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlZDpvcGFjaXR5LTUwIGRpc2FibGVkOmN1cnNvci1ub3QtYWxsb3dlZCB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgc3RvcHBpbmdTbGVlcFxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnb3BhY2l0eS01MCBjdXJzb3Itbm90LWFsbG93ZWQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tZHMtYW1iZXItMjAwKScsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1hbWJlci05MDApJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFphcCBjbGFzc05hbWU9XCJoLTQgdy00XCIgLz5cbiAgICAgICAgICAgICAgICAgICAge3N0b3BwaW5nU2xlZXAgPyAnV2FraW5nIHVwLi4uJyA6ICdXYWtlIFVwIFNsZWVwJ31cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgICB7LyogUmVzb2x2ZSBob29rIGJ1dHRvbiBmb3IgcGVuZGluZyBob29rcyAqL31cbiAgICAgICAgICAgICAgICB7cmVzb3VyY2UgPT09ICdob29rJyAmJiBjYW5SZXNvbHZlSG9vayAmJiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UmVzb2x2ZUhvb2tNb2RhbCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Jlc29sdmluZ0hvb2t9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bScsXG4gICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHRyYW5zaXRpb24tY29sb3JzJyxcbiAgICAgICAgICAgICAgICAgICAgICByZXNvbHZpbmdIb29rXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdvcGFjaXR5LTUwIGN1cnNvci1ub3QtYWxsb3dlZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd2YXIoLS1kcy1ncmF5LTEwMDApJyxcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ZhcigtLWRzLWJhY2tncm91bmQtMTAwKScsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTZW5kIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICBSZXNvbHZlIEhvb2tcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxBdHRyaWJ1dGVQYW5lbFxuICAgICAgICAgICAgZGF0YT17ZGlzcGxheURhdGF9XG4gICAgICAgICAgICBtb2R1bGVTcGVjaWZpZXI9e21vZHVsZVNwZWNpZmllcn1cbiAgICAgICAgICAgIGV4cGlyZWRBdD17cnVuLmV4cGlyZWRBdH1cbiAgICAgICAgICAgIGlzTG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICAgIGVycm9yPXtlcnJvciA/PyB1bmRlZmluZWR9XG4gICAgICAgICAgICBvblN0cmVhbUNsaWNrPXtvblN0cmVhbUNsaWNrfVxuICAgICAgICAgICAgb25SdW5DbGljaz17b25SdW5DbGlja31cbiAgICAgICAgICAgIG9uRGVjcnlwdD17b25EZWNyeXB0fVxuICAgICAgICAgICAgaXNEZWNyeXB0aW5nPXtpc0RlY3J5cHRpbmd9XG4gICAgICAgICAgICByZXNvdXJjZT17cmVzb3VyY2V9XG4gICAgICAgICAgLz5cblxuICAgICAgICAgIHtyYXdFdmVudHMgJiYgKFxuICAgICAgICAgICAgPEV2ZW50c0xpc3RcbiAgICAgICAgICAgICAgZXZlbnRzPXtyYXdFdmVudHN9XG4gICAgICAgICAgICAgIG9uTG9hZEV2ZW50RGF0YT17b25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICBvblN0cmVhbUNsaWNrPXtvblN0cmVhbUNsaWNrfVxuICAgICAgICAgICAgICBvblJ1bkNsaWNrPXtvblJ1bkNsaWNrfVxuICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5PXtlbmNyeXB0aW9uS2V5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvRGVjcnlwdENsaWNrQ29udGV4dC5Qcm92aWRlcj5cblxuICAgICAgey8qIFJlc29sdmUgSG9vayBNb2RhbCAqL31cbiAgICAgIDxSZXNvbHZlSG9va01vZGFsXG4gICAgICAgIGlzT3Blbj17c2hvd1Jlc29sdmVIb29rTW9kYWx9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dSZXNvbHZlSG9va01vZGFsKGZhbHNlKX1cbiAgICAgICAgb25TdWJtaXQ9e2hhbmRsZVJlc29sdmVIb29rfVxuICAgICAgICBpc1N1Ym1pdHRpbmc9e3Jlc29sdmluZ0hvb2t9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"events-list.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/events-list.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AA4PpE,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,SAAiB,EACjB,KAAK,EACL,eAAe,EACf,aAAa,EACb,UAAU,EACV,aAAa,GACd,EAAE;IACD,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,6FAA6F;IAC7F,aAAa,CAAC,EAAE,UAAU,CAAC;CAC5B,2CAiDA"}
1
+ {"version":3,"file":"events-list.d.ts","sourceRoot":"","sources":["../../../src/components/sidebar/events-list.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAyB,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAoQpE,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,SAAiB,EACjB,KAAK,EACL,eAAe,EACf,aAAa,EACb,UAAU,EACV,aAAa,GACd,EAAE;IACD,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,6FAA6F;IAC7F,aAAa,CAAC,EAAE,UAAU,CAAC;CAC5B,2CAiDA"}
@@ -7,6 +7,7 @@ import { RunClickContext, StreamClickContext } from '../ui/data-inspector';
7
7
  import { ErrorCard } from '../ui/error-card';
8
8
  import { ErrorStackBlock, isStructuredError } from '../ui/error-stack-block';
9
9
  import { Skeleton } from '../ui/skeleton';
10
+ import { AttrSetEventBlock } from './attributes-block';
10
11
  import { CopyableDataBlock, EncryptedDataBlock } from './copyable-data-block';
11
12
  import { DetailCard } from './detail-card';
12
13
  /**
@@ -28,6 +29,7 @@ const DATA_EVENT_TYPES = new Set([
28
29
  'run_failed',
29
30
  'wait_created',
30
31
  'wait_completed',
32
+ 'attr_set',
31
33
  ]);
32
34
  /**
33
35
  * A single event row that can lazy-load its eventData when expanded.
@@ -125,6 +127,11 @@ function EventDataBlock({ eventType, data, }) {
125
127
  if (hasEncryptedFields({ eventType, eventData: data })) {
126
128
  return _jsx(EncryptedDataBlock, {});
127
129
  }
130
+ // Attribute changes — render the changed keys and the writer instead of
131
+ // the raw JSON payload.
132
+ if (eventType === 'attr_set') {
133
+ return _jsx(AttrSetEventBlock, { data: data });
134
+ }
128
135
  // For error events (step_failed, step_retrying), the eventData has the shape
129
136
  // { error: StructuredError, stack?: string, ... }. Check both the top-level
130
137
  // value and the nested `error` field for a stack trace.
@@ -154,4 +161,4 @@ export function EventsList({ events, isLoading = false, error, onLoadEventData,
154
161
  }
155
162
  return (_jsx(RunClickContext.Provider, { value: onRunClick, children: _jsx(StreamClickContext.Provider, { value: onStreamClick, children: _jsx(DetailCard, { summary: "Events", contentClassName: "mb-0", defaultOpen: true, children: isLoading ? (_jsx("div", { className: "flex flex-col -mx-4", children: [0, 1, 2].map((i) => (_jsxs("div", { className: "flex items-center justify-between gap-3 bg-background-200 px-4 py-2", children: [_jsx(Skeleton, { className: "h-4 w-32 rounded" }), _jsx(Skeleton, { className: "h-3 w-16 rounded" })] }, i))) })) : (_jsx("div", { className: "flex flex-col -mx-4", children: sortedEvents.map((event) => (_jsx(EventItem, { event: event, onLoadEventData: onLoadEventData, encryptionKey: encryptionKey }, event.eventId))) })) }) }) }));
156
163
  }
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL2V2ZW50cy1saXN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLHFCQUFxQixFQUFjLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRXBFOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMvQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixlQUFlO0lBQ2YsY0FBYztJQUNkLGVBQWU7SUFDZixhQUFhO0lBQ2IsZUFBZTtJQUNmLFlBQVk7SUFDWixjQUFjO0lBQ2QsZ0JBQWdCO0NBQ2pCLENBQUMsQ0FBQztBQUVIOztH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LFdBQVcsa0JBQzdELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDWCxjQUFLLFNBQVMsRUFBQyxxQkFBcUIsWUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDcEIsZUFFRSxTQUFTLEVBQUMscUVBQXFFLGFBRS9FLEtBQUMsUUFBUSxJQUFDLFNBQVMsRUFBQyxrQkFBa0IsR0FBRyxFQUN6QyxLQUFDLFFBQVEsSUFBQyxTQUFTLEVBQUMsa0JBQWtCLEdBQUcsS0FKcEMsQ0FBQyxDQUtGLENBQ1AsQ0FBQyxHQUNFLENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FDRixjQUFLLFNBQVMsRUFBQyxxQkFBcUIsWUFDakMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDM0IsS0FBQyxTQUFTLElBRVIsS0FBSyxFQUFFLEtBQUssRUFDWixlQUFlLEVBQUUsZUFBZSxFQUNoQyxhQUFhLEVBQUUsYUFBYSxJQUh2QixLQUFLLENBQUMsT0FBTyxDQUlsQixDQUNILENBQUMsR0FDRSxDQUNQLEdBQ1UsR0FDZSxHQUNMLENBQzVCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBFVkVOVF9EQVRBX1JFRl9GSUVMRFMsIHR5cGUgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGhhc0VuY3J5cHRlZEZpZWxkcywgaXNFeHBpcmVkTWFya2VyIH0gZnJvbSAnLi4vLi4vbGliL2h5ZHJhdGlvbic7XG5pbXBvcnQgeyBSdW5DbGlja0NvbnRleHQsIFN0cmVhbUNsaWNrQ29udGV4dCB9IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IEVycm9yQ2FyZCB9IGZyb20gJy4uL3VpL2Vycm9yLWNhcmQnO1xuaW1wb3J0IHsgRXJyb3JTdGFja0Jsb2NrLCBpc1N0cnVjdHVyZWRFcnJvciB9IGZyb20gJy4uL3VpL2Vycm9yLXN0YWNrLWJsb2NrJztcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi4vdWkvc2tlbGV0b24nO1xuaW1wb3J0IHsgQ29weWFibGVEYXRhQmxvY2ssIEVuY3J5cHRlZERhdGFCbG9jayB9IGZyb20gJy4vY29weWFibGUtZGF0YS1ibG9jayc7XG5pbXBvcnQgeyBEZXRhaWxDYXJkIH0gZnJvbSAnLi9kZXRhaWwtY2FyZCc7XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgd2hvc2UgZXZlbnREYXRhIGNvbnRhaW5zIGFuIGVycm9yIGZpZWxkIHdpdGggYSBTdHJ1Y3R1cmVkRXJyb3IuXG4gKi9cbmNvbnN0IEVSUk9SX0VWRU5UX1RZUEVTID0gbmV3IFNldChbJ3N0ZXBfZmFpbGVkJywgJ3N0ZXBfcmV0cnlpbmcnXSk7XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgdGhhdCBjYXJyeSB1c2VyLXNlcmlhbGl6ZWQgZGF0YSBpbiB0aGVpciBldmVudERhdGEgZmllbGQuXG4gKi9cbmNvbnN0IERBVEFfRVZFTlRfVFlQRVMgPSBuZXcgU2V0KFtcbiAgJ3N0ZXBfY3JlYXRlZCcsXG4gICdzdGVwX2NvbXBsZXRlZCcsXG4gICdzdGVwX2ZhaWxlZCcsXG4gICdzdGVwX3JldHJ5aW5nJyxcbiAgJ2hvb2tfY3JlYXRlZCcsXG4gICdob29rX3JlY2VpdmVkJyxcbiAgJ3J1bl9jcmVhdGVkJyxcbiAgJ3J1bl9jb21wbGV0ZWQnLFxuICAncnVuX2ZhaWxlZCcsXG4gICd3YWl0X2NyZWF0ZWQnLFxuICAnd2FpdF9jb21wbGV0ZWQnLFxuXSk7XG5cbi8qKlxuICogQSBzaW5nbGUgZXZlbnQgcm93IHRoYXQgY2FuIGxhenktbG9hZCBpdHMgZXZlbnREYXRhIHdoZW4gZXhwYW5kZWQuXG4gKi9cbmZ1bmN0aW9uIEV2ZW50SXRlbSh7XG4gIGV2ZW50LFxuICBvbkxvYWRFdmVudERhdGEsXG4gIGVuY3J5cHRpb25LZXksXG59OiB7XG4gIGV2ZW50OiBFdmVudDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKFxuICAgIGNvcnJlbGF0aW9uSWQ6IHN0cmluZyxcbiAgICBldmVudElkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHVua25vd24gfCBudWxsPjtcbiAgLyoqIFdoZW4gdGhpcyBjaGFuZ2VzIChlLmcuLCBEZWNyeXB0IHdhcyBjbGlja2VkKSwgaW52YWxpZGF0ZSBjYWNoZWQgZGF0YSAqL1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbn0pIHtcbiAgY29uc3QgW2xvYWRlZERhdGEsIHNldExvYWRlZERhdGFdID0gdXNlU3RhdGU8dW5rbm93biB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHdhc0V4cGFuZGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgLyoqIE1pcnJvcnMgd2hldGhlciB3ZSBoYXZlIGEgZmV0Y2hlZCBwYXlsb2FkOyBhdm9pZHMgc3RhbGUgYGxvYWRlZERhdGFgIGluIGxvYWQgY2xvc3VyZS4gKi9cbiAgY29uc3QgbG9hZGVkRGF0YVJlZiA9IHVzZVJlZjx1bmtub3duIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGFscmVhZHkgaGFzIGV2ZW50RGF0YSBmcm9tIHRoZSBzdG9yZVxuICBjb25zdCBleGlzdGluZ0RhdGEgPVxuICAgICdldmVudERhdGEnIGluIGV2ZW50ICYmIGV2ZW50LmV2ZW50RGF0YSAhPSBudWxsID8gZXZlbnQuZXZlbnREYXRhIDogbnVsbDtcbiAgY29uc3QgbWVyZ2VkRGlzcGxheSA9IGxvYWRlZERhdGEgPz8gZXhpc3RpbmdEYXRhO1xuICBjb25zdCBjYW5IYXZlRGF0YSA9IERBVEFfRVZFTlRfVFlQRVMuaGFzKGV2ZW50LmV2ZW50VHlwZSk7XG5cbiAgY29uc3QgbG9hZEV2ZW50RGF0YSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChvcHRpb25zPzogeyBmb3JjZT86IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgaWYgKCFvbkxvYWRFdmVudERhdGEgfHwgIWV2ZW50LmNvcnJlbGF0aW9uSWQgfHwgIWV2ZW50LmV2ZW50SWQpIHJldHVybjtcbiAgICAgIGlmICghb3B0aW9ucz8uZm9yY2UgJiYgbG9hZGVkRGF0YVJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRMb2FkRXJyb3IobnVsbCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBvbkxvYWRFdmVudERhdGEoZXZlbnQuY29ycmVsYXRpb25JZCwgZXZlbnQuZXZlbnRJZCk7XG4gICAgICAgIGxvYWRlZERhdGFSZWYuY3VycmVudCA9IGRhdGE7XG4gICAgICAgIHNldExvYWRlZERhdGEoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2V0TG9hZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uTG9hZEV2ZW50RGF0YSwgZXZlbnQuY29ycmVsYXRpb25JZCwgZXZlbnQuZXZlbnRJZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFeHBhbmQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuICAgIHdhc0V4cGFuZGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIGF3YWl0IGxvYWRFdmVudERhdGEoKTtcbiAgfSwgW2lzTG9hZGluZywgbG9hZEV2ZW50RGF0YV0pO1xuXG4gIC8vIFdoZW4gdGhlIGVuY3J5cHRpb24ga2V5IGNoYW5nZXMgYW5kIHRoaXMgZXZlbnQgd2FzIHByZXZpb3VzbHkgZXhwYW5kZWQsXG4gIC8vIHJlLWxvYWQgdGhlIGRhdGEgc28gaXQgZ2V0cyBkZWNyeXB0ZWRcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVuY3J5cHRpb25LZXkgfHwgIXdhc0V4cGFuZGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBsb2FkZWREYXRhUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIHNldExvYWRlZERhdGEobnVsbCk7XG4gICAgdm9pZCBsb2FkRXZlbnREYXRhKHsgZm9yY2U6IHRydWUgfSk7XG4gIH0sIFtlbmNyeXB0aW9uS2V5LCBsb2FkRXZlbnREYXRhXSk7XG5cbiAgY29uc3QgY3JlYXRlZEF0ID0gbmV3IERhdGUoZXZlbnQuY3JlYXRlZEF0KTtcbiAgY29uc3QgY3JlYXRlZEF0VGltZSA9IGNyZWF0ZWRBdC50b0xvY2FsZVRpbWVTdHJpbmcodW5kZWZpbmVkLCB7XG4gICAgaG91cjogJ251bWVyaWMnLFxuICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgIHNlY29uZDogJ251bWVyaWMnLFxuICB9KTtcblxuICBjb25zdCBkaXNwbGF5UGF5bG9hZCA9IGlzTG9hZGluZyA/IGxvYWRlZERhdGEgOiBtZXJnZWREaXNwbGF5O1xuXG4gIHJldHVybiAoXG4gICAgPERldGFpbENhcmRcbiAgICAgIHZhcmlhbnQ9XCJjYXJkXCJcbiAgICAgIHN1bW1hcnlDbGFzc05hbWU9XCJweC0zIHB5LTJcIlxuICAgICAgc3VtbWFyeT17XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtM1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS0xMDAwIHRleHQtbGFiZWwtMTIgZm9udC1tb25vXCI+XG4gICAgICAgICAgICB7ZXZlbnQuZXZlbnRUeXBlfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzaHJpbmstMCB0ZXh0LWxhYmVsLTEzIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgIHtjcmVhdGVkQXRUaW1lfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBvblRvZ2dsZT17XG4gICAgICAgIGNhbkhhdmVEYXRhXG4gICAgICAgICAgPyAob3BlbikgPT4ge1xuICAgICAgICAgICAgICBpZiAob3BlbikgaGFuZGxlRXhwYW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICA+XG4gICAgICB7LyogRXZlbnQgYXR0cmlidXRlcyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBiZy1iYWNrZ3JvdW5kLTIwMCBbJjpoYXMoK18qKV06Ym9yZGVyLWIgWyY6aGFzKCtfKildOmJvcmRlci1ncmF5LWFscGhhLTQwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweS0yIHB4LTNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDBcIj5FdmVudCBJRDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXgtdy1bNzAlXSB0cnVuY2F0ZSB0ZXh0LXJpZ2h0IHRleHQtbGFiZWwtMTIgZm9udC1tb25vXCI+XG4gICAgICAgICAgICB7ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7ZXZlbnQuY29ycmVsYXRpb25JZCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHktMiBweC0zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDBcIj5Db3JyZWxhdGlvbiBJRDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1heC13LVs3MCVdIHRydW5jYXRlIHRleHQtcmlnaHQgdGV4dC1sYWJlbC0xMiBmb250LW1vbm9cIj5cbiAgICAgICAgICAgICAge2V2ZW50LmNvcnJlbGF0aW9uSWR9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIExvYWRpbmcgc3RhdGUgKi99XG4gICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTNcIj5cbiAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC00IHctWzM1JV1cIiAvPlxuICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJtdC0yIGgtNCB3LVs5MCVdXCIgLz5cbiAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwibXQtMiBoLTQgdy1bNzUlXVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIEVycm9yIHN0YXRlICovfVxuICAgICAge2xvYWRFcnJvciAmJiAoXG4gICAgICAgIDxFcnJvckNhcmRcbiAgICAgICAgICB0aXRsZT1cIkZhaWxlZCB0byBsb2FkIGV2ZW50IGRhdGFcIlxuICAgICAgICAgIGRldGFpbHM9e2xvYWRFcnJvcn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJtdC0yXCJcbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBFdmVudCBkYXRhICovfVxuICAgICAge2Rpc3BsYXlQYXlsb2FkICE9IG51bGwgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlsmPmRpdl06Ym9yZGVyLW5vbmUgWyY+ZGl2XTpyb3VuZGVkLW5vbmVcIj5cbiAgICAgICAgICA8RXZlbnREYXRhQmxvY2sgZXZlbnRUeXBlPXtldmVudC5ldmVudFR5cGV9IGRhdGE9e2Rpc3BsYXlQYXlsb2FkfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9EZXRhaWxDYXJkPlxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGV2ZW50RGF0YSBvYmplY3QgaGFzIG9ubHkgZXhwaXJlZCBtYXJrZXIgdmFsdWVzIGluIHJlZi9wYXlsb2FkXG4gKiBmaWVsZHMgZm9yIHRoaXMgZXZlbnQgdHlwZSAoc2VlIHtAbGluayBFVkVOVF9EQVRBX1JFRl9GSUVMRFN9KS4gT3RoZXIga2V5c1xuICogKGUuZy4gYHJlc3VtZUF0YCwgYHN0ZXBOYW1lYCkgYXJlIGlnbm9yZWQuXG4gKi9cbmZ1bmN0aW9uIGhhc09ubHlFeHBpcmVkRmllbGRzKGRhdGE6IHVua25vd24sIGV2ZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlZktleXMgPSBFVkVOVF9EQVRBX1JFRl9GSUVMRFNbZXZlbnRUeXBlXSA/PyBbXTtcbiAgY29uc3QgcHJlc2VudEtleXMgPSByZWZLZXlzLmZpbHRlcigoaykgPT4gayBpbiByZWNvcmQpO1xuICByZXR1cm4gKFxuICAgIHByZXNlbnRLZXlzLmxlbmd0aCA+IDAgJiZcbiAgICBwcmVzZW50S2V5cy5ldmVyeSgoaykgPT4gaXNFeHBpcmVkTWFya2VyKHJlY29yZFtrXSkpXG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVycyBldmVudCBkYXRhLCB1c2luZyBFcnJvclN0YWNrQmxvY2sgZm9yIGVycm9yIGV2ZW50cyB0aGF0IGNvbnRhaW4gYVxuICogc3RydWN0dXJlZCBlcnJvciwgYW5kIENvcHlhYmxlRGF0YUJsb2NrIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gRXZlbnREYXRhQmxvY2soe1xuICBldmVudFR5cGUsXG4gIGRhdGEsXG59OiB7XG4gIGV2ZW50VHlwZTogc3RyaW5nO1xuICBkYXRhOiB1bmtub3duO1xufSkge1xuICAvLyBFeHBpcmVkIGRhdGEg4oCUIHNob3cgYSBzaW1wbGUgbWVzc2FnZSBpbnN0ZWFkIG9mIHRoZSByYXcgc3R1Yi5cbiAgLy8gQ2hlY2sgYm90aCB0aGUgdG9wLWxldmVsIGV2ZW50RGF0YSBhbmQgbmVzdGVkIHN1Yi1maWVsZHMgKHJlc3VsdCwgaW5wdXQsIGV0Yy4pXG4gIC8vIHNpbmNlIHRoZSBzZXJ2ZXIgc3R1YnMgZWFjaCByZWYgZmllbGQgaW5kZXBlbmRlbnRseS5cbiAgaWYgKGlzRXhwaXJlZE1hcmtlcihkYXRhKSB8fCBoYXNPbmx5RXhwaXJlZEZpZWxkcyhkYXRhLCBldmVudFR5cGUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLW1kIGJvcmRlciBweC0zIHB5LTIgdGV4dC14c1wiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPkRhdGEgZXhwaXJlZDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoaGFzRW5jcnlwdGVkRmllbGRzKHsgZXZlbnRUeXBlLCBldmVudERhdGE6IGRhdGEgfSkpIHtcbiAgICByZXR1cm4gPEVuY3J5cHRlZERhdGFCbG9jayAvPjtcbiAgfVxuXG4gIC8vIEZvciBlcnJvciBldmVudHMgKHN0ZXBfZmFpbGVkLCBzdGVwX3JldHJ5aW5nKSwgdGhlIGV2ZW50RGF0YSBoYXMgdGhlIHNoYXBlXG4gIC8vIHsgZXJyb3I6IFN0cnVjdHVyZWRFcnJvciwgc3RhY2s/OiBzdHJpbmcsIC4uLiB9LiBDaGVjayBib3RoIHRoZSB0b3AtbGV2ZWxcbiAgLy8gdmFsdWUgYW5kIHRoZSBuZXN0ZWQgYGVycm9yYCBmaWVsZCBmb3IgYSBzdGFjayB0cmFjZS5cbiAgaWYgKFxuICAgIEVSUk9SX0VWRU5UX1RZUEVTLmhhcyhldmVudFR5cGUpICYmXG4gICAgZGF0YSAhPSBudWxsICYmXG4gICAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnXG4gICkge1xuICAgIGNvbnN0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAvLyBDaGVjayB0aGUgbmVzdGVkIGBlcnJvcmAgZmllbGQgZmlyc3QgKHRoZSBTdHJ1Y3R1cmVkRXJyb3IpXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZC5lcnJvcikpIHtcbiAgICAgIHJldHVybiA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtyZWNvcmQuZXJyb3J9IC8+O1xuICAgIH1cblxuICAgIC8vIFNvbWUgZXJyb3IgZm9ybWF0cyBwdXQgdGhlIG1lc3NhZ2Uvc3RhY2sgYXQgdGhlIHRvcCBsZXZlbCBvZiBldmVudERhdGEuXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZCkpIHtcbiAgICAgIHJldHVybiA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtyZWNvcmR9IC8+O1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBub24tZXJyb3IgZXZlbnRzIG9yIGVycm9ycyB3aXRob3V0IGEgc3RhY2ssIGZhbGwgYmFjayB0byB0aGVcbiAgLy8gZ2VuZXJpYyBKU09OIHZpZXdlci5cbiAgcmV0dXJuIDxDb3B5YWJsZURhdGFCbG9jayBkYXRhPXtkYXRhfSAvPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c0xpc3Qoe1xuICBldmVudHMsXG4gIGlzTG9hZGluZyA9IGZhbHNlLFxuICBlcnJvcixcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBvblN0cmVhbUNsaWNrLFxuICBvblJ1bkNsaWNrLFxuICBlbmNyeXB0aW9uS2V5LFxufToge1xuICBldmVudHM6IEV2ZW50W107XG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIGVycm9yPzogRXJyb3IgfCBudWxsO1xuICBvbkxvYWRFdmVudERhdGE/OiAoXG4gICAgY29ycmVsYXRpb25JZDogc3RyaW5nLFxuICAgIGV2ZW50SWQ6IHN0cmluZ1xuICApID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICBvblN0cmVhbUNsaWNrPzogKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uUnVuQ2xpY2s/OiAocnVuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHNpZ25hbHMgdGhhdCBkZWNyeXB0aW9uIGlzIGFjdGl2ZSAodHJpZ2dlcnMgcmUtbG9hZCBvZiBleHBhbmRlZCBldmVudHMpICovXG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xufSkge1xuICAvLyBTb3J0IGJ5IGNyZWF0ZWRBdFxuICBjb25zdCBzb3J0ZWRFdmVudHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBbLi4uZXZlbnRzXS5zb3J0KFxuICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICBuZXcgRGF0ZShhLmNyZWF0ZWRBdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5jcmVhdGVkQXQpLmdldFRpbWUoKVxuICAgICAgKSxcbiAgICBbZXZlbnRzXVxuICApO1xuXG4gIGNvbnN0IGhhc0V2ZW50cyA9IHNvcnRlZEV2ZW50cy5sZW5ndGggPiAwICYmICFlcnJvcjtcblxuICBpZiAoIWhhc0V2ZW50cyAmJiAhaXNMb2FkaW5nKSB7XG4gICAgcmV0dXJuIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJFdmVudHNcIiBkaXNhYmxlZCAvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJ1bkNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25SdW5DbGlja30+XG4gICAgICA8U3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblN0cmVhbUNsaWNrfT5cbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkV2ZW50c1wiIGNvbnRlbnRDbGFzc05hbWU9XCJtYi0wXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAge2lzTG9hZGluZyA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCAtbXgtNFwiPlxuICAgICAgICAgICAgICB7WzAsIDEsIDJdLm1hcCgoaSkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMyBiZy1iYWNrZ3JvdW5kLTIwMCBweC00IHB5LTJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTQgdy0zMiByb3VuZGVkXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTMgdy0xNiByb3VuZGVkXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIC1teC00XCI+XG4gICAgICAgICAgICAgIHtzb3J0ZWRFdmVudHMubWFwKChldmVudCkgPT4gKFxuICAgICAgICAgICAgICAgIDxFdmVudEl0ZW1cbiAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICAgICAgICAgIGV2ZW50PXtldmVudH1cbiAgICAgICAgICAgICAgICAgIG9uTG9hZEV2ZW50RGF0YT17b25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICAgICAgZW5jcnlwdGlvbktleT17ZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgIDwvU3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuIl19
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLWxpc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9zaWRlYmFyL2V2ZW50cy1saXN0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZLENBQUM7O0FBRWIsT0FBTyxFQUFFLHFCQUFxQixFQUFjLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDOztHQUVHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRXBFOztHQUVHO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMvQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixlQUFlO0lBQ2YsY0FBYztJQUNkLGVBQWU7SUFDZixhQUFhO0lBQ2IsZUFBZTtJQUNmLFlBQVk7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QUFDO0lBQ2xELENBQUM7SUFFRCxPQUFPLENBQ0wsS0FBQyxlQUFlLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxVQUFVLFlBQ3pDLEtBQUMsa0JBQWtCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxhQUFhLFlBQy9DLEtBQUMsVUFBVSxJQUFDLE9BQU8sRUFBQyxRQUFRLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxFQUFDLFdBQVcsa0JBQzdELFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDWCxjQUFLLFNBQVMsRUFBQyxxQkFBcUIsWUFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDcEIsZUFFRSxTQUFTLEVBQUMscUVBQXFFLGFBRS9FLEtBQUMsUUFBUSxJQUFDLFNBQVMsRUFBQyxrQkFBa0IsR0FBRyxFQUN6QyxLQUFDLFFBQVEsSUFBQyxTQUFTLEVBQUMsa0JBQWtCLEdBQUcsS0FKcEMsQ0FBQyxDQUtGLENBQ1AsQ0FBQyxHQUNFLENBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FDRixjQUFLLFNBQVMsRUFBQyxxQkFBcUIsWUFDakMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FDM0IsS0FBQyxTQUFTLElBRVIsS0FBSyxFQUFFLEtBQUssRUFDWixlQUFlLEVBQUUsZUFBZSxFQUNoQyxhQUFhLEVBQUUsYUFBYSxJQUh2QixLQUFLLENBQUMsT0FBTyxDQUlsQixDQUNILENBQUMsR0FDRSxDQUNQLEdBQ1UsR0FDZSxHQUNMLENBQzVCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBFVkVOVF9EQVRBX1JFRl9GSUVMRFMsIHR5cGUgRXZlbnQgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGhhc0VuY3J5cHRlZEZpZWxkcywgaXNFeHBpcmVkTWFya2VyIH0gZnJvbSAnLi4vLi4vbGliL2h5ZHJhdGlvbic7XG5pbXBvcnQgeyBSdW5DbGlja0NvbnRleHQsIFN0cmVhbUNsaWNrQ29udGV4dCB9IGZyb20gJy4uL3VpL2RhdGEtaW5zcGVjdG9yJztcbmltcG9ydCB7IEVycm9yQ2FyZCB9IGZyb20gJy4uL3VpL2Vycm9yLWNhcmQnO1xuaW1wb3J0IHsgRXJyb3JTdGFja0Jsb2NrLCBpc1N0cnVjdHVyZWRFcnJvciB9IGZyb20gJy4uL3VpL2Vycm9yLXN0YWNrLWJsb2NrJztcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAnLi4vdWkvc2tlbGV0b24nO1xuaW1wb3J0IHsgQXR0clNldEV2ZW50QmxvY2sgfSBmcm9tICcuL2F0dHJpYnV0ZXMtYmxvY2snO1xuaW1wb3J0IHsgQ29weWFibGVEYXRhQmxvY2ssIEVuY3J5cHRlZERhdGFCbG9jayB9IGZyb20gJy4vY29weWFibGUtZGF0YS1ibG9jayc7XG5pbXBvcnQgeyBEZXRhaWxDYXJkIH0gZnJvbSAnLi9kZXRhaWwtY2FyZCc7XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgd2hvc2UgZXZlbnREYXRhIGNvbnRhaW5zIGFuIGVycm9yIGZpZWxkIHdpdGggYSBTdHJ1Y3R1cmVkRXJyb3IuXG4gKi9cbmNvbnN0IEVSUk9SX0VWRU5UX1RZUEVTID0gbmV3IFNldChbJ3N0ZXBfZmFpbGVkJywgJ3N0ZXBfcmV0cnlpbmcnXSk7XG5cbi8qKlxuICogRXZlbnQgdHlwZXMgdGhhdCBjYXJyeSB1c2VyLXNlcmlhbGl6ZWQgZGF0YSBpbiB0aGVpciBldmVudERhdGEgZmllbGQuXG4gKi9cbmNvbnN0IERBVEFfRVZFTlRfVFlQRVMgPSBuZXcgU2V0KFtcbiAgJ3N0ZXBfY3JlYXRlZCcsXG4gICdzdGVwX2NvbXBsZXRlZCcsXG4gICdzdGVwX2ZhaWxlZCcsXG4gICdzdGVwX3JldHJ5aW5nJyxcbiAgJ2hvb2tfY3JlYXRlZCcsXG4gICdob29rX3JlY2VpdmVkJyxcbiAgJ3J1bl9jcmVhdGVkJyxcbiAgJ3J1bl9jb21wbGV0ZWQnLFxuICAncnVuX2ZhaWxlZCcsXG4gICd3YWl0X2NyZWF0ZWQnLFxuICAnd2FpdF9jb21wbGV0ZWQnLFxuICAnYXR0cl9zZXQnLFxuXSk7XG5cbi8qKlxuICogQSBzaW5nbGUgZXZlbnQgcm93IHRoYXQgY2FuIGxhenktbG9hZCBpdHMgZXZlbnREYXRhIHdoZW4gZXhwYW5kZWQuXG4gKi9cbmZ1bmN0aW9uIEV2ZW50SXRlbSh7XG4gIGV2ZW50LFxuICBvbkxvYWRFdmVudERhdGEsXG4gIGVuY3J5cHRpb25LZXksXG59OiB7XG4gIGV2ZW50OiBFdmVudDtcbiAgb25Mb2FkRXZlbnREYXRhPzogKFxuICAgIGNvcnJlbGF0aW9uSWQ6IHN0cmluZyxcbiAgICBldmVudElkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHVua25vd24gfCBudWxsPjtcbiAgLyoqIFdoZW4gdGhpcyBjaGFuZ2VzIChlLmcuLCBEZWNyeXB0IHdhcyBjbGlja2VkKSwgaW52YWxpZGF0ZSBjYWNoZWQgZGF0YSAqL1xuICBlbmNyeXB0aW9uS2V5PzogVWludDhBcnJheTtcbn0pIHtcbiAgY29uc3QgW2xvYWRlZERhdGEsIHNldExvYWRlZERhdGFdID0gdXNlU3RhdGU8dW5rbm93biB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbG9hZEVycm9yLCBzZXRMb2FkRXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHdhc0V4cGFuZGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgLyoqIE1pcnJvcnMgd2hldGhlciB3ZSBoYXZlIGEgZmV0Y2hlZCBwYXlsb2FkOyBhdm9pZHMgc3RhbGUgYGxvYWRlZERhdGFgIGluIGxvYWQgY2xvc3VyZS4gKi9cbiAgY29uc3QgbG9hZGVkRGF0YVJlZiA9IHVzZVJlZjx1bmtub3duIHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGV2ZW50IGFscmVhZHkgaGFzIGV2ZW50RGF0YSBmcm9tIHRoZSBzdG9yZVxuICBjb25zdCBleGlzdGluZ0RhdGEgPVxuICAgICdldmVudERhdGEnIGluIGV2ZW50ICYmIGV2ZW50LmV2ZW50RGF0YSAhPSBudWxsID8gZXZlbnQuZXZlbnREYXRhIDogbnVsbDtcbiAgY29uc3QgbWVyZ2VkRGlzcGxheSA9IGxvYWRlZERhdGEgPz8gZXhpc3RpbmdEYXRhO1xuICBjb25zdCBjYW5IYXZlRGF0YSA9IERBVEFfRVZFTlRfVFlQRVMuaGFzKGV2ZW50LmV2ZW50VHlwZSk7XG5cbiAgY29uc3QgbG9hZEV2ZW50RGF0YSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChvcHRpb25zPzogeyBmb3JjZT86IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgaWYgKCFvbkxvYWRFdmVudERhdGEgfHwgIWV2ZW50LmNvcnJlbGF0aW9uSWQgfHwgIWV2ZW50LmV2ZW50SWQpIHJldHVybjtcbiAgICAgIGlmICghb3B0aW9ucz8uZm9yY2UgJiYgbG9hZGVkRGF0YVJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRMb2FkRXJyb3IobnVsbCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBvbkxvYWRFdmVudERhdGEoZXZlbnQuY29ycmVsYXRpb25JZCwgZXZlbnQuZXZlbnRJZCk7XG4gICAgICAgIGxvYWRlZERhdGFSZWYuY3VycmVudCA9IGRhdGE7XG4gICAgICAgIHNldExvYWRlZERhdGEoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2V0TG9hZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uTG9hZEV2ZW50RGF0YSwgZXZlbnQuY29ycmVsYXRpb25JZCwgZXZlbnQuZXZlbnRJZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVFeHBhbmQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuICAgIHdhc0V4cGFuZGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIGF3YWl0IGxvYWRFdmVudERhdGEoKTtcbiAgfSwgW2lzTG9hZGluZywgbG9hZEV2ZW50RGF0YV0pO1xuXG4gIC8vIFdoZW4gdGhlIGVuY3J5cHRpb24ga2V5IGNoYW5nZXMgYW5kIHRoaXMgZXZlbnQgd2FzIHByZXZpb3VzbHkgZXhwYW5kZWQsXG4gIC8vIHJlLWxvYWQgdGhlIGRhdGEgc28gaXQgZ2V0cyBkZWNyeXB0ZWRcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVuY3J5cHRpb25LZXkgfHwgIXdhc0V4cGFuZGVkUmVmLmN1cnJlbnQpIHJldHVybjtcbiAgICBsb2FkZWREYXRhUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIHNldExvYWRlZERhdGEobnVsbCk7XG4gICAgdm9pZCBsb2FkRXZlbnREYXRhKHsgZm9yY2U6IHRydWUgfSk7XG4gIH0sIFtlbmNyeXB0aW9uS2V5LCBsb2FkRXZlbnREYXRhXSk7XG5cbiAgY29uc3QgY3JlYXRlZEF0ID0gbmV3IERhdGUoZXZlbnQuY3JlYXRlZEF0KTtcbiAgY29uc3QgY3JlYXRlZEF0VGltZSA9IGNyZWF0ZWRBdC50b0xvY2FsZVRpbWVTdHJpbmcodW5kZWZpbmVkLCB7XG4gICAgaG91cjogJ251bWVyaWMnLFxuICAgIG1pbnV0ZTogJ251bWVyaWMnLFxuICAgIHNlY29uZDogJ251bWVyaWMnLFxuICB9KTtcblxuICBjb25zdCBkaXNwbGF5UGF5bG9hZCA9IGlzTG9hZGluZyA/IGxvYWRlZERhdGEgOiBtZXJnZWREaXNwbGF5O1xuXG4gIHJldHVybiAoXG4gICAgPERldGFpbENhcmRcbiAgICAgIHZhcmlhbnQ9XCJjYXJkXCJcbiAgICAgIHN1bW1hcnlDbGFzc05hbWU9XCJweC0zIHB5LTJcIlxuICAgICAgc3VtbWFyeT17XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtM1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtZ3JheS0xMDAwIHRleHQtbGFiZWwtMTIgZm9udC1tb25vXCI+XG4gICAgICAgICAgICB7ZXZlbnQuZXZlbnRUeXBlfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzaHJpbmstMCB0ZXh0LWxhYmVsLTEzIHRleHQtZ3JheS05MDBcIj5cbiAgICAgICAgICAgIHtjcmVhdGVkQXRUaW1lfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBvblRvZ2dsZT17XG4gICAgICAgIGNhbkhhdmVEYXRhXG4gICAgICAgICAgPyAob3BlbikgPT4ge1xuICAgICAgICAgICAgICBpZiAob3BlbikgaGFuZGxlRXhwYW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICA+XG4gICAgICB7LyogRXZlbnQgYXR0cmlidXRlcyAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCBiZy1iYWNrZ3JvdW5kLTIwMCBbJjpoYXMoK18qKV06Ym9yZGVyLWIgWyY6aGFzKCtfKildOmJvcmRlci1ncmF5LWFscGhhLTQwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMiBweS0yIHB4LTNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDBcIj5FdmVudCBJRDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXgtdy1bNzAlXSB0cnVuY2F0ZSB0ZXh0LXJpZ2h0IHRleHQtbGFiZWwtMTIgZm9udC1tb25vXCI+XG4gICAgICAgICAgICB7ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7ZXZlbnQuY29ycmVsYXRpb25JZCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTIgcHktMiBweC0zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxhYmVsLTEyIHRleHQtZ3JheS05MDBcIj5Db3JyZWxhdGlvbiBJRDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1heC13LVs3MCVdIHRydW5jYXRlIHRleHQtcmlnaHQgdGV4dC1sYWJlbC0xMiBmb250LW1vbm9cIj5cbiAgICAgICAgICAgICAge2V2ZW50LmNvcnJlbGF0aW9uSWR9XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIExvYWRpbmcgc3RhdGUgKi99XG4gICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwLTNcIj5cbiAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwiaC00IHctWzM1JV1cIiAvPlxuICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJtdC0yIGgtNCB3LVs5MCVdXCIgLz5cbiAgICAgICAgICA8U2tlbGV0b24gY2xhc3NOYW1lPVwibXQtMiBoLTQgdy1bNzUlXVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAgey8qIEVycm9yIHN0YXRlICovfVxuICAgICAge2xvYWRFcnJvciAmJiAoXG4gICAgICAgIDxFcnJvckNhcmRcbiAgICAgICAgICB0aXRsZT1cIkZhaWxlZCB0byBsb2FkIGV2ZW50IGRhdGFcIlxuICAgICAgICAgIGRldGFpbHM9e2xvYWRFcnJvcn1cbiAgICAgICAgICBjbGFzc05hbWU9XCJtdC0yXCJcbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIHsvKiBFdmVudCBkYXRhICovfVxuICAgICAge2Rpc3BsYXlQYXlsb2FkICE9IG51bGwgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIlsmPmRpdl06Ym9yZGVyLW5vbmUgWyY+ZGl2XTpyb3VuZGVkLW5vbmVcIj5cbiAgICAgICAgICA8RXZlbnREYXRhQmxvY2sgZXZlbnRUeXBlPXtldmVudC5ldmVudFR5cGV9IGRhdGE9e2Rpc3BsYXlQYXlsb2FkfSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9EZXRhaWxDYXJkPlxuICApO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGV2ZW50RGF0YSBvYmplY3QgaGFzIG9ubHkgZXhwaXJlZCBtYXJrZXIgdmFsdWVzIGluIHJlZi9wYXlsb2FkXG4gKiBmaWVsZHMgZm9yIHRoaXMgZXZlbnQgdHlwZSAoc2VlIHtAbGluayBFVkVOVF9EQVRBX1JFRl9GSUVMRFN9KS4gT3RoZXIga2V5c1xuICogKGUuZy4gYHJlc3VtZUF0YCwgYHN0ZXBOYW1lYCkgYXJlIGlnbm9yZWQuXG4gKi9cbmZ1bmN0aW9uIGhhc09ubHlFeHBpcmVkRmllbGRzKGRhdGE6IHVua25vd24sIGV2ZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlZktleXMgPSBFVkVOVF9EQVRBX1JFRl9GSUVMRFNbZXZlbnRUeXBlXSA/PyBbXTtcbiAgY29uc3QgcHJlc2VudEtleXMgPSByZWZLZXlzLmZpbHRlcigoaykgPT4gayBpbiByZWNvcmQpO1xuICByZXR1cm4gKFxuICAgIHByZXNlbnRLZXlzLmxlbmd0aCA+IDAgJiZcbiAgICBwcmVzZW50S2V5cy5ldmVyeSgoaykgPT4gaXNFeHBpcmVkTWFya2VyKHJlY29yZFtrXSkpXG4gICk7XG59XG5cbi8qKlxuICogUmVuZGVycyBldmVudCBkYXRhLCB1c2luZyBFcnJvclN0YWNrQmxvY2sgZm9yIGVycm9yIGV2ZW50cyB0aGF0IGNvbnRhaW4gYVxuICogc3RydWN0dXJlZCBlcnJvciwgYW5kIENvcHlhYmxlRGF0YUJsb2NrIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gRXZlbnREYXRhQmxvY2soe1xuICBldmVudFR5cGUsXG4gIGRhdGEsXG59OiB7XG4gIGV2ZW50VHlwZTogc3RyaW5nO1xuICBkYXRhOiB1bmtub3duO1xufSkge1xuICAvLyBFeHBpcmVkIGRhdGEg4oCUIHNob3cgYSBzaW1wbGUgbWVzc2FnZSBpbnN0ZWFkIG9mIHRoZSByYXcgc3R1Yi5cbiAgLy8gQ2hlY2sgYm90aCB0aGUgdG9wLWxldmVsIGV2ZW50RGF0YSBhbmQgbmVzdGVkIHN1Yi1maWVsZHMgKHJlc3VsdCwgaW5wdXQsIGV0Yy4pXG4gIC8vIHNpbmNlIHRoZSBzZXJ2ZXIgc3R1YnMgZWFjaCByZWYgZmllbGQgaW5kZXBlbmRlbnRseS5cbiAgaWYgKGlzRXhwaXJlZE1hcmtlcihkYXRhKSB8fCBoYXNPbmx5RXhwaXJlZEZpZWxkcyhkYXRhLCBldmVudFR5cGUpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNSByb3VuZGVkLW1kIGJvcmRlciBweC0zIHB5LTIgdGV4dC14c1wiXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICd2YXIoLS1kcy1ncmF5LTMwMCknLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3ZhcigtLWRzLWdyYXktMTAwKScsXG4gICAgICAgICAgY29sb3I6ICd2YXIoLS1kcy1ncmF5LTcwMCknLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmb250LW1lZGl1bVwiPkRhdGEgZXhwaXJlZDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICBpZiAoaGFzRW5jcnlwdGVkRmllbGRzKHsgZXZlbnRUeXBlLCBldmVudERhdGE6IGRhdGEgfSkpIHtcbiAgICByZXR1cm4gPEVuY3J5cHRlZERhdGFCbG9jayAvPjtcbiAgfVxuXG4gIC8vIEF0dHJpYnV0ZSBjaGFuZ2VzIOKAlCByZW5kZXIgdGhlIGNoYW5nZWQga2V5cyBhbmQgdGhlIHdyaXRlciBpbnN0ZWFkIG9mXG4gIC8vIHRoZSByYXcgSlNPTiBwYXlsb2FkLlxuICBpZiAoZXZlbnRUeXBlID09PSAnYXR0cl9zZXQnKSB7XG4gICAgcmV0dXJuIDxBdHRyU2V0RXZlbnRCbG9jayBkYXRhPXtkYXRhfSAvPjtcbiAgfVxuXG4gIC8vIEZvciBlcnJvciBldmVudHMgKHN0ZXBfZmFpbGVkLCBzdGVwX3JldHJ5aW5nKSwgdGhlIGV2ZW50RGF0YSBoYXMgdGhlIHNoYXBlXG4gIC8vIHsgZXJyb3I6IFN0cnVjdHVyZWRFcnJvciwgc3RhY2s/OiBzdHJpbmcsIC4uLiB9LiBDaGVjayBib3RoIHRoZSB0b3AtbGV2ZWxcbiAgLy8gdmFsdWUgYW5kIHRoZSBuZXN0ZWQgYGVycm9yYCBmaWVsZCBmb3IgYSBzdGFjayB0cmFjZS5cbiAgaWYgKFxuICAgIEVSUk9SX0VWRU5UX1RZUEVTLmhhcyhldmVudFR5cGUpICYmXG4gICAgZGF0YSAhPSBudWxsICYmXG4gICAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnXG4gICkge1xuICAgIGNvbnN0IHJlY29yZCA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAvLyBDaGVjayB0aGUgbmVzdGVkIGBlcnJvcmAgZmllbGQgZmlyc3QgKHRoZSBTdHJ1Y3R1cmVkRXJyb3IpXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZC5lcnJvcikpIHtcbiAgICAgIHJldHVybiA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtyZWNvcmQuZXJyb3J9IC8+O1xuICAgIH1cblxuICAgIC8vIFNvbWUgZXJyb3IgZm9ybWF0cyBwdXQgdGhlIG1lc3NhZ2Uvc3RhY2sgYXQgdGhlIHRvcCBsZXZlbCBvZiBldmVudERhdGEuXG4gICAgaWYgKGlzU3RydWN0dXJlZEVycm9yKHJlY29yZCkpIHtcbiAgICAgIHJldHVybiA8RXJyb3JTdGFja0Jsb2NrIHZhbHVlPXtyZWNvcmR9IC8+O1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBub24tZXJyb3IgZXZlbnRzIG9yIGVycm9ycyB3aXRob3V0IGEgc3RhY2ssIGZhbGwgYmFjayB0byB0aGVcbiAgLy8gZ2VuZXJpYyBKU09OIHZpZXdlci5cbiAgcmV0dXJuIDxDb3B5YWJsZURhdGFCbG9jayBkYXRhPXtkYXRhfSAvPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50c0xpc3Qoe1xuICBldmVudHMsXG4gIGlzTG9hZGluZyA9IGZhbHNlLFxuICBlcnJvcixcbiAgb25Mb2FkRXZlbnREYXRhLFxuICBvblN0cmVhbUNsaWNrLFxuICBvblJ1bkNsaWNrLFxuICBlbmNyeXB0aW9uS2V5LFxufToge1xuICBldmVudHM6IEV2ZW50W107XG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIGVycm9yPzogRXJyb3IgfCBudWxsO1xuICBvbkxvYWRFdmVudERhdGE/OiAoXG4gICAgY29ycmVsYXRpb25JZDogc3RyaW5nLFxuICAgIGV2ZW50SWQ6IHN0cmluZ1xuICApID0+IFByb21pc2U8dW5rbm93biB8IG51bGw+O1xuICBvblN0cmVhbUNsaWNrPzogKHN0cmVhbUlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uUnVuQ2xpY2s/OiAocnVuSWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIFdoZW4gcHJvdmlkZWQsIHNpZ25hbHMgdGhhdCBkZWNyeXB0aW9uIGlzIGFjdGl2ZSAodHJpZ2dlcnMgcmUtbG9hZCBvZiBleHBhbmRlZCBldmVudHMpICovXG4gIGVuY3J5cHRpb25LZXk/OiBVaW50OEFycmF5O1xufSkge1xuICAvLyBTb3J0IGJ5IGNyZWF0ZWRBdFxuICBjb25zdCBzb3J0ZWRFdmVudHMgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICBbLi4uZXZlbnRzXS5zb3J0KFxuICAgICAgICAoYSwgYikgPT5cbiAgICAgICAgICBuZXcgRGF0ZShhLmNyZWF0ZWRBdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5jcmVhdGVkQXQpLmdldFRpbWUoKVxuICAgICAgKSxcbiAgICBbZXZlbnRzXVxuICApO1xuXG4gIGNvbnN0IGhhc0V2ZW50cyA9IHNvcnRlZEV2ZW50cy5sZW5ndGggPiAwICYmICFlcnJvcjtcblxuICBpZiAoIWhhc0V2ZW50cyAmJiAhaXNMb2FkaW5nKSB7XG4gICAgcmV0dXJuIDxEZXRhaWxDYXJkIHN1bW1hcnk9XCJFdmVudHNcIiBkaXNhYmxlZCAvPjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJ1bkNsaWNrQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17b25SdW5DbGlja30+XG4gICAgICA8U3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtvblN0cmVhbUNsaWNrfT5cbiAgICAgICAgPERldGFpbENhcmQgc3VtbWFyeT1cIkV2ZW50c1wiIGNvbnRlbnRDbGFzc05hbWU9XCJtYi0wXCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAge2lzTG9hZGluZyA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LWNvbCAtbXgtNFwiPlxuICAgICAgICAgICAgICB7WzAsIDEsIDJdLm1hcCgoaSkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17aX1cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtMyBiZy1iYWNrZ3JvdW5kLTIwMCBweC00IHB5LTJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTQgdy0zMiByb3VuZGVkXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxTa2VsZXRvbiBjbGFzc05hbWU9XCJoLTMgdy0xNiByb3VuZGVkXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIC1teC00XCI+XG4gICAgICAgICAgICAgIHtzb3J0ZWRFdmVudHMubWFwKChldmVudCkgPT4gKFxuICAgICAgICAgICAgICAgIDxFdmVudEl0ZW1cbiAgICAgICAgICAgICAgICAgIGtleT17ZXZlbnQuZXZlbnRJZH1cbiAgICAgICAgICAgICAgICAgIGV2ZW50PXtldmVudH1cbiAgICAgICAgICAgICAgICAgIG9uTG9hZEV2ZW50RGF0YT17b25Mb2FkRXZlbnREYXRhfVxuICAgICAgICAgICAgICAgICAgZW5jcnlwdGlvbktleT17ZW5jcnlwdGlvbktleX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvRGV0YWlsQ2FyZD5cbiAgICAgIDwvU3RyZWFtQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvUnVuQ2xpY2tDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/node.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,gBAAgB,EAAa,MAAM,OAAO,CAAC;AAGxE,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAYlB,eAAO,MAAM,qBAAqB,GAAI,MAAM,QAAQ,KAAG,MAGtD,CAAC;AAoDF,eAAO,MAAM,SAAS;UAUd,QAAQ;WACP,MAAM;WACN,WAAW,EAAE;aACX,OAAO;uBACG,gBAAgB,CAAC,cAAc,GAAG,SAAS,CAAC;IAC/D,kGAAkG;eACvF,YAAY;WAChB,SAAS;8BACU,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM;mCACrB,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM;EAelE,CAAC;AAuCH,eAAO,MAAM,aAAa;UASlB,WAAW;UACX,QAAQ;WACP,MAAM;kBACC,OAAO;uBACF,gBAAgB,CAAC,cAAc,GAAG,SAAS,CAAC;IAC/D,6EAA6E;eAClE,YAAY;8BACG,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM;mCACrB,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM;EA6KlE,CAAC;AAsBH,eAAO,MAAM,kBAAkB;WAQtB,gBAAgB;UACjB,WAAW;UACX,QAAQ;WACP,MAAM;mCACkB,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM;iBACrD,OAAO;EA6HpB,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/components/trace-viewer/components/node.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,gBAAgB,EAAa,MAAM,OAAO,CAAC;AAGxE,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,WAAW,EACX,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAYlB,eAAO,MAAM,qBAAqB,GAAI,MAAM,QAAQ,KAAG,MAGtD,CAAC;AAoDF,eAAO,MAAM,SAAS;UAUd,QAAQ;WACP,MAAM;WACN,WAAW,EAAE;aACX,OAAO;uBACG,gBAAgB,CAAC,cAAc,GAAG,SAAS,CAAC;IAC/D,kGAAkG;eACvF,YAAY;WAChB,SAAS;8BACU,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM;mCACrB,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM;EAelE,CAAC;AAuCH,eAAO,MAAM,aAAa;UASlB,WAAW;UACX,QAAQ;WACP,MAAM;kBACC,OAAO;uBACF,gBAAgB,CAAC,cAAc,GAAG,SAAS,CAAC;IAC/D,6EAA6E;eAClE,YAAY;8BACG,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM;mCACrB,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM;EA6KlE,CAAC;AAuBH,eAAO,MAAM,kBAAkB;WAQtB,gBAAgB;UACjB,WAAW;UACX,QAAQ;WACP,MAAM;mCACkB,CAAC,KAAK,EAAE,gBAAgB,KAAK,MAAM;iBACrD,OAAO;EA6HpB,CAAC"}
@@ -218,6 +218,7 @@ const BOUNDARY_LABELS = {
218
218
  run_completed: 'Completed',
219
219
  run_failed: 'Run failed',
220
220
  step_completed: 'Completed',
221
+ attr_set: 'Attributes set',
221
222
  };
222
223
  export const SpanEventComponent = memo(function SpanEventComponent({ event, node, root, scale, customSpanEventClassNameFunc, asBoundary = false, }) {
223
224
  const ref = useRef(null);
@@ -282,4 +283,4 @@ export const SpanEventComponent = memo(function SpanEventComponent({ event, node
282
283
  top,
283
284
  }, children: [_jsx("div", { className: clsx(styles.hoverInfo, isLeftAligned ? styles.alignStart : styles.alignEnd), children: asBoundary ? (_jsxs(_Fragment, { children: [_jsx("span", { className: styles.eventName, children: displayLabel }), _jsx("span", { className: styles.eventTimestamp, children: timestamp }), phaseDuration ? (_jsxs(_Fragment, { children: [_jsx("span", { className: styles.eventName, children: phaseLabel }), _jsx("span", { className: styles.eventTimestamp, children: phaseDuration })] })) : null] })) : (_jsxs(_Fragment, { children: [_jsx("span", { className: styles.eventName, children: name }), _jsx("span", { className: styles.eventTimestamp, children: timestamp })] })) }), asBoundary ? (_jsx("div", { className: styles.boundaryLine })) : (_jsx("div", { className: styles.eventDiamond }))] }));
284
285
  });
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyYWNlLXZpZXdlci9jb21wb25lbnRzL25vZGUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUQsT0FBTyxNQUFNLE1BQU0sNEJBQTRCLENBQUM7QUFVaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFHTCxlQUFlLEVBQ2YsYUFBYSxHQUNkLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFjLEVBQVUsRUFBRTtJQUM5RCxJQUFJLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVGLFNBQVMsb0JBQW9CLENBQzNCLFlBQTBCLEVBQzFCLElBQWlCO0lBRWpCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQUUsT0FB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c291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBjbHN4IH0gZnJvbSAnY2xzeCc7XG5pbXBvcnQgdHlwZSB7IENTU1Byb3BlcnRpZXMsIE11dGFibGVSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG1lbW8sIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi4vdHJhY2Utdmlld2VyLm1vZHVsZS5jc3MnO1xuaW1wb3J0IHR5cGUge1xuICBNZW1vQ2FjaGUsXG4gIE1lbW9DYWNoZUtleSxcbiAgUm9vdE5vZGUsXG4gIFNjcm9sbFNuYXBzaG90LFxuICBTcGFuTm9kZSxcbiAgVmlzaWJsZVNwYW4sXG4gIFZpc2libGVTcGFuRXZlbnQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE1BUktFUl9IRUlHSFQsIFJPV19IRUlHSFQsIFJPV19QQURESU5HIH0gZnJvbSAnLi4vdXRpbC9jb25zdGFudHMnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24sIGdldEhpZ2hSZXNJbk1zIH0gZnJvbSAnLi4vdXRpbC90aW1pbmcnO1xuaW1wb3J0IHsgU3BhbkNvbnRlbnQgfSBmcm9tICcuL3NwYW4tY29udGVudCc7XG5pbXBvcnQgeyBjb21wdXRlU2VnbWVudHMgfSBmcm9tICcuL3NwYW4tc2VnbWVudHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBSZXNvdXJjZVR5cGUsXG4gIHR5cGUgU3BhbkxheW91dCxcbiAgZ2V0UmVzb3VyY2VUeXBlLFxuICBnZXRTcGFuTGF5b3V0LFxufSBmcm9tICcuL3NwYW4tc3RyYXRlZ2llcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTcGFuQ29sb3JDbGFzc05hbWUgPSAobm9kZTogU3Bhbk5vZGUpOiBzdHJpbmcgPT4ge1xuICBpZiAobm9kZS5pc1ZlcmNlbCkgcmV0dXJuIFN0cmluZyhzdHlsZXMuY29sb3JWZXJjZWwpO1xuICByZXR1cm4gU3RyaW5nKHN0eWxlc1tgY29sb3Ike25vZGUucmVzb3VyY2VJbmRleCAlIDV9YCBhcyAnY29sb3IwJ10pO1xufTtcblxuZnVuY3Rpb24gZ2V0VGVybWluYWxUaW1lc3RhbXAoXG4gIHJlc291cmNlVHlwZTogUmVzb3VyY2VUeXBlLFxuICBub2RlOiBWaXNpYmxlU3BhblxuKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZXZlbnRzID0gbm9kZS5ldmVudHM7XG4gIGlmICghZXZlbnRzPy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgc3dpdGNoIChyZXNvdXJjZVR5cGUpIHtcbiAgICBjYXNlICdob29rJzpcbiAgICAgIGZvciAobGV0IGkgPSBldmVudHMubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICBpZiAoZXZlbnRzW2ldLmV2ZW50Lm5hbWUgPT09ICdob29rX2Rpc3Bvc2VkJykge1xuICAgICAgICAgIHJldHVybiBldmVudHNbaV0udGltZXN0YW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNhc2UgJ3NsZWVwJzpcbiAgICAgIGZvciAobGV0IGkgPSBldmVudHMubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICBpZiAoZXZlbnRzW2ldLmV2ZW50Lm5hbWUgPT09ICd3YWl0X2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnRzW2ldLnRpbWVzdGFtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjYXNlICdydW4nOlxuICAgICAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBldmVudHNbaV0uZXZlbnQubmFtZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG5hbWUgPT09ICdydW5fY29tcGxldGVkJyB8fFxuICAgICAgICAgIG5hbWUgPT09ICdydW5fZmFpbGVkJyB8fFxuICAgICAgICAgIG5hbWUgPT09ICdydW5fY2FuY2VsbGVkJ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnRzW2ldLnRpbWVzdGFtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjYXNlICdzdGVwJzpcbiAgICAgIGZvciAobGV0IGkgPSBldmVudHMubGVuZ3RoOyBpLS07ICkge1xuICAgICAgICBjb25zdCBuYW1lID0gZXZlbnRzW2ldLmV2ZW50Lm5hbWU7XG4gICAgICAgIGlmIChuYW1lID09PSAnc3RlcF9jb21wbGV0ZWQnIHx8IG5hbWUgPT09ICdzdGVwX2ZhaWxlZCcpIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnRzW2ldLnRpbWVzdGFtcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSA9PT0gJ3N0ZXBfc3RhcnRlZCcgfHwgbmFtZSA9PT0gJ3N0ZXBfcmV0cnlpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgU3Bhbk5vZGVzID0gbWVtbyhmdW5jdGlvbiBTcGFuTm9kZXMoe1xuICByb290LFxuICBzY2FsZSxcbiAgc3BhbnMsXG4gIGlzTGl2ZSA9IGZhbHNlLFxuICBzY3JvbGxTbmFwc2hvdFJlZixcbiAgY2FjaGUsXG4gIGN1c3RvbVNwYW5DbGFzc05hbWVGdW5jLFxuICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jLFxufToge1xuICByb290OiBSb290Tm9kZTtcbiAgc2NhbGU6IG51bWJlcjtcbiAgc3BhbnM6IFZpc2libGVTcGFuW107XG4gIGlzTGl2ZT86IGJvb2xlYW47XG4gIHNjcm9sbFNuYXBzaG90UmVmOiBNdXRhYmxlUmVmT2JqZWN0PFNjcm9sbFNuYXBzaG90IHwgdW5kZWZpbmVkPjtcbiAgLyoqIE5vdCB1c2VkIGluIHRoZSBib2R5IOKAlCBleGlzdHMgc29sZWx5IHRvIGJ1c3QgUmVhY3QubWVtbyB3aGVuIHRoZSBnbG9iYWwgbWVtbyBjYWNoZSBjaGFuZ2VzLiAqL1xuICBjYWNoZUtleT86IE1lbW9DYWNoZUtleTtcbiAgY2FjaGU6IE1lbW9DYWNoZTtcbiAgY3VzdG9tU3BhbkNsYXNzTmFtZUZ1bmM/OiAoc3BhbjogU3Bhbk5vZGUpID0+IHN0cmluZztcbiAgY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYz86IChldmVudDogVmlzaWJsZVNwYW5FdmVudCkgPT4gc3RyaW5nO1xufSkge1xuICByZXR1cm4gc3BhbnMubWFwKCh4KSA9PiAoXG4gICAgPFNwYW5Db21wb25lbnRcbiAgICAgIGNhY2hlS2V5PXtjYWNoZS5nZXQoeC5zcGFuLnNwYW5JZCl9XG4gICAgICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jPXtjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jfVxuICAgICAgY3VzdG9tU3BhbkNsYXNzTmFtZUZ1bmM9e2N1c3RvbVNwYW5DbGFzc05hbWVGdW5jfVxuICAgICAga2V5PXt4LnNwYW4uc3BhbklkfVxuICAgICAgbm9kZT17eH1cbiAgICAgIHJvb3Q9e3Jvb3R9XG4gICAgICBzY2FsZT17c2NhbGV9XG4gICAgICB0cmFjZUlzTGl2ZT17aXNMaXZlfVxuICAgICAgc2Nyb2xsU25hcHNob3RSZWY9e3Njcm9sbFNuYXBzaG90UmVmfVxuICAgIC8+XG4gICkpO1xufSk7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQ29tcHV0ZSBpbmxpbmUgc3R5bGVzIGZyb20gYSBTcGFuTGF5b3V0XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZnVuY3Rpb24gZ2V0U3BhblN0eWxlKFxuICBsYXlvdXQ6IFNwYW5MYXlvdXQsXG4gIG5vZGU6IFZpc2libGVTcGFuLFxuICByb290OiBSb290Tm9kZSxcbiAgc2NhbGU6IG51bWJlclxuKTogQ1NTUHJvcGVydGllcyB7XG4gIC8vIFVzZSBpc0V4cGFuZGVkIChob3ZlcmVkIG9yIHNlbGVjdGVkKSBmb3Igd2lkdGggZXhwYW5zaW9uIHNvIHRoYXRcbiAgLy8gc2VsZWN0ZWQgc21hbGwgc3BhbnMgc3RheSBleHBhbmRlZCBhbmQgc2hvdyB0aGVpciBuYW1lLlxuICBjb25zdCBleHBhbmRlZCA9IGxheW91dC5pc0V4cGFuZGVkO1xuICByZXR1cm4ge1xuICAgIC8vIFVzZSBhY3R1YWxXaWR0aCBmb3IgQ1NTIHZhcmlhYmxlIHNvIGhvdmVyIGV4cGFuc2lvbiBpcyBhY2N1cmF0ZVxuICAgICctLXNwYW4td2lkdGgnOiBgJHtNYXRoLm1heChsYXlvdXQuYWN0dWFsV2lkdGgsIDEpfXB4YCxcbiAgICBtaW5XaWR0aDogZXhwYW5kZWQgPyBsYXlvdXQud2lkdGggOiB1bmRlZmluZWQsXG4gICAgd2lkdGg6IGV4cGFuZGVkID8gdW5kZWZpbmVkIDogbGF5b3V0LndpZHRoLFxuICAgIGhlaWdodDogbGF5b3V0LmhlaWdodCxcbiAgICBtYXhXaWR0aDpcbiAgICAgIGV4cGFuZGVkICYmICFsYXlvdXQuaXNOZWFyUmlnaHRTaWRlXG4gICAgICAgID8gKHJvb3QuZW5kVGltZSAtIG5vZGUuc3RhcnRUaW1lKSAqIHNjYWxlXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIGNvbnRhaW5JbnRyaW5zaWNXaWR0aDogZXhwYW5kZWQgPyB1bmRlZmluZWQgOiBsYXlvdXQud2lkdGgsXG4gICAgY29udGFpbkludHJpbnNpY0hlaWdodDogbGF5b3V0LmhlaWdodCxcbiAgICBsZWZ0OiBsYXlvdXQuaXNOZWFyUmlnaHRTaWRlID8gdW5kZWZpbmVkIDogbGF5b3V0LmxlZnQsXG4gICAgcmlnaHQ6IGxheW91dC5pc05lYXJSaWdodFNpZGVcbiAgICAgID8gKHJvb3QuZW5kVGltZSAtIG5vZGUuZW5kVGltZSkgKiBzY2FsZVxuICAgICAgOiB1bmRlZmluZWQsXG4gICAgdG9wOiBsYXlvdXQudG9wLFxuICB9IGFzIENTU1Byb3BlcnRpZXM7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3BhbkNvbXBvbmVudFxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBjb25zdCBTcGFuQ29tcG9uZW50ID0gbWVtbyhmdW5jdGlvbiBTcGFuQ29tcG9uZW50KHtcbiAgbm9kZSxcbiAgcm9vdCxcbiAgc2NhbGUsXG4gIHRyYWNlSXNMaXZlID0gZmFsc2UsXG4gIHNjcm9sbFNuYXBzaG90UmVmLFxuICBjdXN0b21TcGFuQ2xhc3NOYW1lRnVuYyxcbiAgY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYyxcbn06IHtcbiAgbm9kZTogVmlzaWJsZVNwYW47XG4gIHJvb3Q6IFJvb3ROb2RlO1xuICBzY2FsZTogbnVtYmVyO1xuICB0cmFjZUlzTGl2ZT86IGJvb2xlYW47XG4gIHNjcm9sbFNuYXBzaG90UmVmOiBNdXRhYmxlUmVmT2JqZWN0PFNjcm9sbFNuYXBzaG90IHwgdW5kZWZpbmVkPjtcbiAgLyoqIE5vdCB1c2VkIGluIHRoZSBib2R5IOKAlCBleGlzdHMgc29sZWx5IHRvIGJ1c3QgUmVhY3QubWVtbyBmb3IgdGhpcyBzcGFuLiAqL1xuICBjYWNoZUtleT86IE1lbW9DYWNoZUtleTtcbiAgY3VzdG9tU3BhbkNsYXNzTmFtZUZ1bmM/OiAoc3BhbjogU3Bhbk5vZGUpID0+IHN0cmluZztcbiAgY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYz86IChldmVudDogVmlzaWJsZVNwYW5FdmVudCkgPT4gc3RyaW5nO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MQnV0dG9uRWxlbWVudD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBub2RlLnJlZiA9IHJlZjtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgbm9kZS5yZWYgPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgfSwgW25vZGVdKTtcblxuICBjb25zdCB7IHNwYW4gfSA9IG5vZGU7XG4gIGNvbnN0IHJlc291cmNlVHlwZSA9IGdldFJlc291cmNlVHlwZShub2RlKTtcbiAgY29uc3QgW2xpdmVOb3csIHNldExpdmVOb3ddID0gdXNlU3RhdGUoMCk7XG5cbiAgLy8gR2V0IGN1c3RvbSBjbGFzcyBuYW1lIGZyb20gY2FsbGJhY2sgaWYgcHJvdmlkZWRcbiAgY29uc3QgY3VzdG9tQ2xhc3NOYW1lID0gY3VzdG9tU3BhbkNsYXNzTmFtZUZ1bmNcbiAgICA/IGN1c3RvbVNwYW5DbGFzc05hbWVGdW5jKG5vZGUpXG4gICAgOiAnJztcblxuICAvLyBXb3JrZmxvdyBzcGFuIHR5cGVzIHVzZSBjb2xvcmVkIHNlZ21lbnRzICsgYm91bmRhcnkgbGluZSBtYXJrZXJzXG4gIC8vIEdlbmVyaWMgT1RFTCBzcGFucyB1c2UgZGlhbW9uZCBldmVudCBtYXJrZXJzXG4gIGNvbnN0IGlzV29ya2Zsb3dTcGFuID0gcmVzb3VyY2VUeXBlICE9PSAnZGVmYXVsdCc7XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgc3BhbiBpcyBzdGlsbCBhY3RpdmUgKGxpdmUpLiBXZSByZXF1aXJlIHRoZSBwYXJlbnQgcnVuXG4gIC8vIHRvIGJlIGV4cGxpY2l0bHkgbGl2ZSB0byBhdm9pZCBjb21wbGV0ZWQvY2FuY2VsbGVkIHRyYWNlcyBjb250aW51aW5nIHRvXG4gIC8vIGdyb3cgZHVlIHRvIHRpbWluZyBoZXVyaXN0aWNzLlxuICBjb25zdCBkYXRhID0gc3Bhbi5hdHRyaWJ1dGVzPy5kYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBjb25zdCB0ZXJtaW5hbFRpbWVzdGFtcCA9IGdldFRlcm1pbmFsVGltZXN0YW1wKHJlc291cmNlVHlwZSwgbm9kZSk7XG4gIGNvbnN0IGhhc1Rlcm1pbmFsRXZlbnQgPSB0ZXJtaW5hbFRpbWVzdGFtcCAhPSBudWxsO1xuICBjb25zdCBpc0NvbXBsZXRlZEJ5RGF0YSA9XG4gICAgcmVzb3VyY2VUeXBlID09PSAnaG9vaydcbiAgICAgID8gQm9vbGVhbihkYXRhPy5kaXNwb3NlZEF0KVxuICAgICAgOiBCb29sZWFuKGRhdGE/LmNvbXBsZXRlZEF0KTtcbiAgY29uc3QgaXNDb21wbGV0ZWQgPSBpc0NvbXBsZXRlZEJ5RGF0YSB8fCBoYXNUZXJtaW5hbEV2ZW50O1xuICBjb25zdCBpc0xpdmUgPSB0cmFjZUlzTGl2ZSAmJiBpc1dvcmtmbG93U3BhbiAmJiAhaXNDb21wbGV0ZWQ7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzTGl2ZSkgcmV0dXJuO1xuICAgIHNldExpdmVOb3coRGF0ZS5ub3coKSk7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBzZXRMaXZlTm93KERhdGUubm93KCkpO1xuICAgIH0sIDI1MCk7XG4gICAgcmV0dXJuICgpID0+IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9LCBbaXNMaXZlXSk7XG5cbiAgY29uc3QgY2Fub25pY2FsU3RhcnRUaW1lID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5zdGFydFRpbWUpO1xuICBjb25zdCBjYW5vbmljYWxFbmRUaW1lID0gZ2V0SGlnaFJlc0luTXMoc3Bhbi5lbmRUaW1lKTtcbiAgY29uc3QgY2Fub25pY2FsRHVyYXRpb24gPSBnZXRIaWdoUmVzSW5NcyhzcGFuLmR1cmF0aW9uKTtcbiAgY29uc3QgY2Fub25pY2FsQWN0aXZlU3RhcnRUaW1lID0gc3Bhbi5hY3RpdmVTdGFydFRpbWVcbiAgICA/IGdldEhpZ2hSZXNJbk1zKHNwYW4uYWN0aXZlU3RhcnRUaW1lKVxuICAgIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGR1cmF0aW9uTXMgPVxuICAgIHRlcm1pbmFsVGltZXN0YW1wICE9IG51bGxcbiAgICAgID8gTWF0aC5tYXgoMCwgdGVybWluYWxUaW1lc3RhbXAgLSBjYW5vbmljYWxTdGFydFRpbWUpXG4gICAgICA6IGlzTGl2ZVxuICAgICAgICA/IE1hdGgubWF4KDAsIChsaXZlTm93IHx8IERhdGUubm93KCkpIC0gY2Fub25pY2FsU3RhcnRUaW1lKVxuICAgICAgICA6IGNhbm9uaWNhbER1cmF0aW9uO1xuICBjb25zdCBkdXJhdGlvbiA9IG5vZGUuaXNJbnN0cnVtZW50YXRpb25IaW50XG4gICAgPyAnR2V0IFN0YXJ0ZWQnXG4gICAgOiBmb3JtYXREdXJhdGlvbihkdXJhdGlvbk1zKTtcbiAgY29uc3QgYmFzZU5vZGUgPSB7XG4gICAgLi4ubm9kZSxcbiAgICBzdGFydFRpbWU6IGNhbm9uaWNhbFN0YXJ0VGltZSxcbiAgICBlbmRUaW1lOiBjYW5vbmljYWxFbmRUaW1lLFxuICAgIGR1cmF0aW9uOiBjYW5vbmljYWxEdXJhdGlvbixcbiAgICBhY3RpdmVTdGFydFRpbWU6IGNhbm9uaWNhbEFjdGl2ZVN0YXJ0VGltZSxcbiAgfSBhcyBWaXNpYmxlU3BhbjtcbiAgY29uc3Qgc2VnbWVudE5vZGUgPSBpc0xpdmVcbiAgICA/ICh7XG4gICAgICAgIC4uLmJhc2VOb2RlLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25NcyxcbiAgICAgICAgZW5kVGltZTogY2Fub25pY2FsU3RhcnRUaW1lICsgZHVyYXRpb25NcyxcbiAgICAgIH0gYXMgVmlzaWJsZVNwYW4pXG4gICAgOiBiYXNlTm9kZTtcbiAgY29uc3QgaGFzU2VnbWVudHMgPVxuICAgIGlzV29ya2Zsb3dTcGFuICYmXG4gICAgY29tcHV0ZVNlZ21lbnRzKHJlc291cmNlVHlwZSwgc2VnbWVudE5vZGUpLnNlZ21lbnRzLmxlbmd0aCA+IDA7XG4gIGNvbnN0IGxheW91dCA9IGdldFNwYW5MYXlvdXQoXG4gICAgcmVzb3VyY2VUeXBlLFxuICAgIHNlZ21lbnROb2RlLFxuICAgIHJvb3QsXG4gICAgc2NhbGUsXG4gICAgc2Nyb2xsU25hcHNob3RSZWZcbiAgKTtcblxuICAvLyBGb3IgbGl2ZSBzcGFucyB0aGUgZGF0YS1sZXZlbCBgbm9kZS5kdXJhdGlvbmAgY2FuIGJlIHN0YWxlIChmcm9tIHRoZSBsYXN0XG4gIC8vIGZldGNoKSB3aGlsZSB0aGUgdmlzdWFsIHdpZHRoIGlzIGdyb3dpbmcgdmlhIHJBRi4gUmVjb21wdXRlIGZyb20gcmVhbFxuICAvLyBlbGFwc2VkIHRpbWUgc28gdGhhdDpcbiAgLy8gIC0gaGVpZ2h0L2lzU21hbGwgY2xhc3NpZmljYXRpb24gc3RheXMgY29ycmVjdCAobm90IHNocnVua2VuIHRvIDQwJSlcbiAgLy8gIC0gUmVhY3QtcmVuZGVyZWQgd2lkdGggbWF0Y2hlcyB0aGUgckFGLWRyaXZlbiB3aWR0aCwgcHJldmVudGluZyBhIGJyaWVmXG4gIC8vICAgIHNocmlua+KGkmV4cGFuZCBmbGFzaCBvbiByZS1yZW5kZXIgdGhhdCBicmVha3MgY3Vyc29yIGhpdC10ZXN0aW5nXG4gIGlmIChpc0xpdmUpIHtcbiAgICBjb25zdCBlbGFwc2VkID0gZHVyYXRpb25NcztcbiAgICBjb25zdCBsaXZlQWN0dWFsV2lkdGggPSBlbGFwc2VkICogc2NhbGU7XG4gICAgY29uc3QgbGl2ZVdpZHRoID0gTWF0aC5tYXgobGl2ZUFjdHVhbFdpZHRoLCA0KTtcbiAgICBsYXlvdXQuYWN0dWFsV2lkdGggPSBsaXZlQWN0dWFsV2lkdGg7XG4gICAgbGF5b3V0LndpZHRoID0gbGl2ZVdpZHRoO1xuICAgIGxheW91dC5pc1NtYWxsID0gbGl2ZUFjdHVhbFdpZHRoIDwgNjQ7XG4gICAgbGF5b3V0LmlzSHVnZSA9IGxpdmVBY3R1YWxXaWR0aCA+PSA1MDA7XG4gICAgaWYgKCFsYXlvdXQuaXNTbWFsbCkge1xuICAgICAgbGF5b3V0LmhlaWdodCA9IFJPV19IRUlHSFQ7XG4gICAgICBsYXlvdXQudG9wID0gTUFSS0VSX0hFSUdIVCArIChST1dfSEVJR0hUICsgUk9XX1BBRERJTkcpICogc2VnbWVudE5vZGUucm93O1xuICAgIH1cbiAgfVxuXG4gIC8vIFNtb290aGx5IGdyb3cgYWN0aXZlIHNwYW4gd2lkdGggYXQgNjBmcHMgdXNpbmcgd2FsbCBjbG9jayB0aW1lXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0xpdmUgfHwgIXJlZi5jdXJyZW50KSByZXR1cm47XG5cbiAgICBsZXQgcmFmSWQgPSAwO1xuICAgIGNvbnN0IHRpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCAkZWwgPSByZWYuY3VycmVudDtcbiAgICAgIGlmICghJGVsKSByZXR1cm47XG4gICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIGNhbm9uaWNhbFN0YXJ0VGltZTtcbiAgICAgIGNvbnN0IHcgPSBNYXRoLm1heChlbGFwc2VkICogc2NhbGUsIDIpO1xuICAgICAgJGVsLnN0eWxlLndpZHRoID0gYCR7d31weGA7XG4gICAgICAkZWwuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3Bhbi13aWR0aCcsIGAke3d9cHhgKTtcbiAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH07XG4gICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgcmV0dXJuICgpID0+IGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKTtcbiAgfSwgW2lzTGl2ZSwgY2Fub25pY2FsU3RhcnRUaW1lLCBzY2FsZV0pO1xuXG4gIGNvbnN0IHJlbmRlck5vZGUgPSBzZWdtZW50Tm9kZTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGFyaWEtbGFiZWw9e2Ake3NwYW4ubmFtZX0gLSAke2R1cmF0aW9ufWB9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xzeChcbiAgICAgICAgICBzdHlsZXMuc3Bhbk5vZGUsXG4gICAgICAgICAgbGF5b3V0LmlzSHVnZSAmJiBzdHlsZXMuaHVnZSxcbiAgICAgICAgICBsYXlvdXQuaXNTbWFsbCAmJiBzdHlsZXMuc21hbGwsXG4gICAgICAgICAgbGF5b3V0LmlzRXhwYW5kZWQgJiYgc3R5bGVzLnhIb3ZlcixcbiAgICAgICAgICBub2RlLmlzSGlnaGxpZ2h0ZWRcbiAgICAgICAgICAgID8gc3R5bGVzLmNvbG9ySGlnaGxpZ2h0XG4gICAgICAgICAgICA6IGdldFNwYW5Db2xvckNsYXNzTmFtZShub2RlKSxcbiAgICAgICAgICBub2RlLmlzSGlnaGxpZ2h0ZWQgPT09IGZhbHNlICYmIHN0eWxlcy51bmxpdCxcbiAgICAgICAgICBjdXN0b21DbGFzc05hbWUsXG4gICAgICAgICAgaGFzU2VnbWVudHMgJiYgc3R5bGVzLmhhc1NlZ21lbnRzXG4gICAgICAgICl9XG4gICAgICAgIGRhdGEtc3Bhbi1pZD17c3Bhbi5zcGFuSWR9XG4gICAgICAgIGRhdGEtc3RhcnQtdGltZT17c2VnbWVudE5vZGUuc3RhcnRUaW1lIC0gcm9vdC5zdGFydFRpbWV9XG4gICAgICAgIGRhdGEtcmlnaHQtc2lkZT17bGF5b3V0LmlzTmVhclJpZ2h0U2lkZX1cbiAgICAgICAgZGF0YS1zZWxlY3RlZD17bm9kZS5pc1NlbGVjdGVkID8gJycgOiB1bmRlZmluZWR9XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBzdHlsZT17Z2V0U3BhblN0eWxlKGxheW91dCwgc2VnbWVudE5vZGUsIHJvb3QsIHNjYWxlKX1cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA+XG4gICAgICAgIDxTcGFuQ29udGVudFxuICAgICAgICAgIGR1cmF0aW9uTXM9e2R1cmF0aW9uTXN9XG4gICAgICAgICAgcmVzb3VyY2VUeXBlPXtyZXNvdXJjZVR5cGV9XG4gICAgICAgICAgbm9kZT17cmVuZGVyTm9kZX1cbiAgICAgICAgICBsYXlvdXQ9e2xheW91dH1cbiAgICAgICAgLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAge3NlZ21lbnROb2RlLmV2ZW50cyAmJiAhbGF5b3V0LmlzU21hbGxcbiAgICAgICAgPyBzZWdtZW50Tm9kZS5ldmVudHMubWFwKCh4KSA9PiAoXG4gICAgICAgICAgICA8U3BhbkV2ZW50Q29tcG9uZW50XG4gICAgICAgICAgICAgIGN1c3RvbVNwYW5FdmVudENsYXNzTmFtZUZ1bmM9e2N1c3RvbVNwYW5FdmVudENsYXNzTmFtZUZ1bmN9XG4gICAgICAgICAgICAgIGV2ZW50PXt4fVxuICAgICAgICAgICAgICBrZXk9e3gua2V5fVxuICAgICAgICAgICAgICBub2RlPXtzZWdtZW50Tm9kZX1cbiAgICAgICAgICAgICAgcm9vdD17cm9vdH1cbiAgICAgICAgICAgICAgc2NhbGU9e3NjYWxlfVxuICAgICAgICAgICAgICBhc0JvdW5kYXJ5PXtpc1dvcmtmbG93U3Bhbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSlcbiAgICAgICAgOiBudWxsfVxuICAgIDwvPlxuICApO1xufSk7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3BhbkV2ZW50Q29tcG9uZW50XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEh1bWFuLXJlYWRhYmxlIGxhYmVscyBmb3Igd29ya2Zsb3cgZXZlbnQgdHlwZXMgKi9cbmNvbnN0IEJPVU5EQVJZX0xBQkVMUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgc3RlcF9zdGFydGVkOiAnU3RhcnRlZCcsXG4gIHN0ZXBfcmV0cnlpbmc6ICdSZXRyeWluZycsXG4gIHN0ZXBfZmFpbGVkOiAnRmFpbGVkJyxcbiAgaG9va19jcmVhdGVkOiAnQ3JlYXRlZCcsXG4gIGhvb2tfcmVjZWl2ZWQ6ICdSZWNlaXZlZCcsXG4gIGhvb2tfZGlzcG9zZWQ6ICdSZXNvbHZlZCcsXG4gIHdhaXRfY3JlYXRlZDogJ1NsZWVwIHN0YXJ0ZWQnLFxuICB3YWl0X2NvbXBsZXRlZDogJ1NsZWVwIGNvbXBsZXRlZCcsXG4gIHJ1bl9zdGFydGVkOiAnU3RhcnRlZCcsXG4gIHJ1bl9jb21wbGV0ZWQ6ICdDb21wbGV0ZWQnLFxuICBydW5fZmFpbGVkOiAnUnVuIGZhaWxlZCcsXG4gIHN0ZXBfY29tcGxldGVkOiAnQ29tcGxldGVkJyxcbn07XG5cbmV4cG9ydCBjb25zdCBTcGFuRXZlbnRDb21wb25lbnQgPSBtZW1vKGZ1bmN0aW9uIFNwYW5FdmVudENvbXBvbmVudCh7XG4gIGV2ZW50LFxuICBub2RlLFxuICByb290LFxuICBzY2FsZSxcbiAgY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYyxcbiAgYXNCb3VuZGFyeSA9IGZhbHNlLFxufToge1xuICBldmVudDogVmlzaWJsZVNwYW5FdmVudDtcbiAgbm9kZTogVmlzaWJsZVNwYW47XG4gIHJvb3Q6IFJvb3ROb2RlO1xuICBzY2FsZTogbnVtYmVyO1xuICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jPzogKGV2ZW50OiBWaXNpYmxlU3BhbkV2ZW50KSA9PiBzdHJpbmc7XG4gIGFzQm91bmRhcnk/OiBib29sZWFuO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBldmVudC5yZWYgPSByZWY7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGV2ZW50LnJlZiA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbZXZlbnRdKTtcblxuICBjb25zdCB7XG4gICAgZXZlbnQ6IHsgbmFtZSB9LFxuICB9ID0gZXZlbnQ7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGZvcm1hdER1cmF0aW9uKGV2ZW50LnRpbWVzdGFtcCAtIHJvb3Quc3RhcnRUaW1lKTtcbiAgY29uc3QgZGlzcGxheUxhYmVsID0gYXNCb3VuZGFyeSA/IChCT1VOREFSWV9MQUJFTFNbbmFtZV0gPz8gbmFtZSkgOiBuYW1lO1xuXG4gIC8vIEZvciBib3VuZGFyeSBldmVudHMsIGNvbXB1dGUgdGhlIGR1cmF0aW9uIG9mIHRoZSBwaGFzZS5cbiAgLy8gXCJGb3J3YXJkXCIgZXZlbnRzIChzdGFydGVkLCByZXRyeWluZykgbWVhc3VyZSB1bnRpbCB0aGUgbmV4dCBldmVudC5cbiAgLy8gXCJUZXJtaW5hbFwiIGV2ZW50cyAoY29tcGxldGVkKSBtZWFzdXJlIGZyb20gdGhlIHByZXZpb3VzIHN0YXJ0ZWQgZXZlbnQuXG4gIGNvbnN0IGlzRm9yd2FyZEV2ZW50ID1cbiAgICBhc0JvdW5kYXJ5ICYmXG4gICAgKG5hbWUgPT09ICdzdGVwX3N0YXJ0ZWQnIHx8XG4gICAgICBuYW1lID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgICBuYW1lID09PSAnc3RlcF9yZXRyeWluZycpO1xuICBjb25zdCBpc1Rlcm1pbmFsRXZlbnQgPVxuICAgIGFzQm91bmRhcnkgJiYgKG5hbWUgPT09ICdzdGVwX2NvbXBsZXRlZCcgfHwgbmFtZSA9PT0gJ3J1bl9jb21wbGV0ZWQnKTtcblxuICBsZXQgcGhhc2VEdXJhdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGxldCBwaGFzZUxhYmVsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaWYgKChpc0ZvcndhcmRFdmVudCB8fCBpc1Rlcm1pbmFsRXZlbnQpICYmIG5vZGUuZXZlbnRzKSB7XG4gICAgY29uc3Qgc29ydGVkTm9kZUV2ZW50cyA9IFsuLi5ub2RlLmV2ZW50c10uc29ydChcbiAgICAgIChhLCBiKSA9PiBhLnRpbWVzdGFtcCAtIGIudGltZXN0YW1wXG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gc29ydGVkTm9kZUV2ZW50cy5maW5kSW5kZXgoKGUpID0+IGUua2V5ID09PSBldmVudC5rZXkpO1xuXG4gICAgaWYgKGlzVGVybWluYWxFdmVudCkge1xuICAgICAgLy8gTG9vayBiYWNrd2FyZCB0byBmaW5kIHRoZSBsYXN0IHN0ZXBfc3RhcnRlZFxuICAgICAgbGV0IHByZXZTdGFydFRpbWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgZm9yIChsZXQgaSA9IGN1cnJlbnRJZHggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoc29ydGVkTm9kZUV2ZW50c1tpXS5ldmVudC5uYW1lID09PSAnc3RlcF9zdGFydGVkJykge1xuICAgICAgICAgIHByZXZTdGFydFRpbWUgPSBzb3J0ZWROb2RlRXZlbnRzW2ldLnRpbWVzdGFtcDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByZXZTdGFydFRpbWUgIT09IG51bGwpIHtcbiAgICAgICAgcGhhc2VEdXJhdGlvbiA9IGZvcm1hdER1cmF0aW9uKGV2ZW50LnRpbWVzdGFtcCAtIHByZXZTdGFydFRpbWUpO1xuICAgICAgICBwaGFzZUxhYmVsID0gJ0V4ZWN1dGVkJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTG9vayBmb3J3YXJkIHRvIHRoZSBuZXh0IGV2ZW50XG4gICAgICBjb25zdCBuZXh0RXZlbnQgPSBzb3J0ZWROb2RlRXZlbnRzW2N1cnJlbnRJZHggKyAxXTtcbiAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXh0RXZlbnQgPyBuZXh0RXZlbnQudGltZXN0YW1wIDogbm9kZS5lbmRUaW1lO1xuICAgICAgcGhhc2VEdXJhdGlvbiA9IGZvcm1hdER1cmF0aW9uKGVuZFRpbWUgLSBldmVudC50aW1lc3RhbXApO1xuICAgICAgcGhhc2VMYWJlbCA9IG5hbWUgPT09ICdzdGVwX3JldHJ5aW5nJyA/ICdXYWl0ZWQnIDogJ0V4ZWN1dGVkJztcbiAgICB9XG4gIH1cblxuICBjb25zdCBsZWZ0ID0gKGV2ZW50LnRpbWVzdGFtcCAtIHJvb3Quc3RhcnRUaW1lKSAqIHNjYWxlO1xuICBjb25zdCB0b3AgPSBNQVJLRVJfSEVJR0hUICsgKFJPV19IRUlHSFQgKyBST1dfUEFERElORykgKiBub2RlLnJvdztcbiAgY29uc3QgaXNMZWZ0QWxpZ25lZCA9XG4gICAgbm9kZS5kdXJhdGlvbiA8PSAwIHx8XG4gICAgKGV2ZW50LnRpbWVzdGFtcCAtIG5vZGUuc3RhcnRUaW1lKSAvIG5vZGUuZHVyYXRpb24gPCAwLjU7XG5cbiAgLy8gR2V0IGN1c3RvbSBjbGFzcyBuYW1lIGZyb20gY2FsbGJhY2sgaWYgcHJvdmlkZWRcbiAgY29uc3QgY3VzdG9tQ2xhc3NOYW1lID0gY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuY1xuICAgID8gY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYyhldmVudClcbiAgICA6ICcnO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgdGl0bGU9e1xuICAgICAgICBwaGFzZUR1cmF0aW9uXG4gICAgICAgICAgPyBgJHtkaXNwbGF5TGFiZWx9ICR7dGltZXN0YW1wfVxcbiR7cGhhc2VMYWJlbH0gJHtwaGFzZUR1cmF0aW9ufWBcbiAgICAgICAgICA6IGAke2Rpc3BsYXlMYWJlbH0gJHt0aW1lc3RhbXB9YFxuICAgICAgfVxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICBzdHlsZXMuc3Bhbk5vZGVFdmVudCxcbiAgICAgICAgY3VzdG9tQ2xhc3NOYW1lLFxuICAgICAgICBhc0JvdW5kYXJ5ICYmIHN0eWxlcy5ib3VuZGFyeU1hcmtlcixcbiAgICAgICAgbm9kZS5pc0hpZ2hsaWdodGVkXG4gICAgICAgICAgPyBzdHlsZXMuY29sb3JIaWdobGlnaHRcbiAgICAgICAgICA6IGdldFNwYW5Db2xvckNsYXNzTmFtZShub2RlKSxcbiAgICAgICAgbm9kZS5pc0hpZ2hsaWdodGVkID09PSBmYWxzZSAmJiBzdHlsZXMudW5saXRcbiAgICAgICl9XG4gICAgICBkYXRhLWhvdmVyZWQ9e2V2ZW50LmlzSG92ZXJlZH1cbiAgICAgIHJlZj17cmVmfVxuICAgICAgc3R5bGU9e1xuICAgICAgICB7XG4gICAgICAgICAgbGVmdCxcbiAgICAgICAgICB0b3AsXG4gICAgICAgIH0gYXMgQ1NTUHJvcGVydGllc1xuICAgICAgfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgIHN0eWxlcy5ob3ZlckluZm8sXG4gICAgICAgICAgaXNMZWZ0QWxpZ25lZCA/IHN0eWxlcy5hbGlnblN0YXJ0IDogc3R5bGVzLmFsaWduRW5kXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHthc0JvdW5kYXJ5ID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5ldmVudE5hbWV9PntkaXNwbGF5TGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnRUaW1lc3RhbXB9Pnt0aW1lc3RhbXB9PC9zcGFuPlxuICAgICAgICAgICAge3BoYXNlRHVyYXRpb24gPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnROYW1lfT57cGhhc2VMYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnRUaW1lc3RhbXB9PntwaGFzZUR1cmF0aW9ufTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnROYW1lfT57bmFtZX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5ldmVudFRpbWVzdGFtcH0+e3RpbWVzdGFtcH08L3NwYW4+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHthc0JvdW5kYXJ5ID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvdW5kYXJ5TGluZX0gLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnREaWFtb25kfSAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuIl19
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RyYWNlLXZpZXdlci9jb21wb25lbnRzL25vZGUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUQsT0FBTyxNQUFNLE1BQU0sNEJBQTRCLENBQUM7QUFVaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxHQUdkLE1BQU0sbUJBQW1CLENBQUM7QUFFM0IsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFjLEVBQVUsRUFBRTtJQUM5RCxJQUFJLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLENBQUMsQ0FBQztBQUVGLFNBQVMsb0JBQW9CLENBQzNCLFlBQTBCLEVBQzFCLElBQWlCO0lBRWpCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDM0IsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNO1FBQUUsT0FB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O0FBQ0osQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IGNsc3ggfSBmcm9tICdjbHN4JztcbmltcG9ydCB0eXBlIHsgQ1NTUHJvcGVydGllcywgTXV0YWJsZVJlZk9iamVjdCwgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgbWVtbywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuLi90cmFjZS12aWV3ZXIubW9kdWxlLmNzcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE1lbW9DYWNoZSxcbiAgTWVtb0NhY2hlS2V5LFxuICBSb290Tm9kZSxcbiAgU2Nyb2xsU25hcHNob3QsXG4gIFNwYW5Ob2RlLFxuICBWaXNpYmxlU3BhbixcbiAgVmlzaWJsZVNwYW5FdmVudCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTUFSS0VSX0hFSUdIVCwgUk9XX0hFSUdIVCwgUk9XX1BBRERJTkcgfSBmcm9tICcuLi91dGlsL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZ2V0SGlnaFJlc0luTXMgfSBmcm9tICcuLi91dGlsL3RpbWluZyc7XG5pbXBvcnQgeyBTcGFuQ29udGVudCB9IGZyb20gJy4vc3Bhbi1jb250ZW50JztcbmltcG9ydCB7IGNvbXB1dGVTZWdtZW50cyB9IGZyb20gJy4vc3Bhbi1zZWdtZW50cyc7XG5pbXBvcnQge1xuICBnZXRSZXNvdXJjZVR5cGUsXG4gIGdldFNwYW5MYXlvdXQsXG4gIHR5cGUgUmVzb3VyY2VUeXBlLFxuICB0eXBlIFNwYW5MYXlvdXQsXG59IGZyb20gJy4vc3Bhbi1zdHJhdGVnaWVzJztcblxuZXhwb3J0IGNvbnN0IGdldFNwYW5Db2xvckNsYXNzTmFtZSA9IChub2RlOiBTcGFuTm9kZSk6IHN0cmluZyA9PiB7XG4gIGlmIChub2RlLmlzVmVyY2VsKSByZXR1cm4gU3RyaW5nKHN0eWxlcy5jb2xvclZlcmNlbCk7XG4gIHJldHVybiBTdHJpbmcoc3R5bGVzW2Bjb2xvciR7bm9kZS5yZXNvdXJjZUluZGV4ICUgNX1gIGFzICdjb2xvcjAnXSk7XG59O1xuXG5mdW5jdGlvbiBnZXRUZXJtaW5hbFRpbWVzdGFtcChcbiAgcmVzb3VyY2VUeXBlOiBSZXNvdXJjZVR5cGUsXG4gIG5vZGU6IFZpc2libGVTcGFuXG4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBldmVudHMgPSBub2RlLmV2ZW50cztcbiAgaWYgKCFldmVudHM/Lmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBzd2l0Y2ggKHJlc291cmNlVHlwZSkge1xuICAgIGNhc2UgJ2hvb2snOlxuICAgICAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgIGlmIChldmVudHNbaV0uZXZlbnQubmFtZSA9PT0gJ2hvb2tfZGlzcG9zZWQnKSB7XG4gICAgICAgICAgcmV0dXJuIGV2ZW50c1tpXS50aW1lc3RhbXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY2FzZSAnc2xlZXAnOlxuICAgICAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgIGlmIChldmVudHNbaV0uZXZlbnQubmFtZSA9PT0gJ3dhaXRfY29tcGxldGVkJykge1xuICAgICAgICAgIHJldHVybiBldmVudHNbaV0udGltZXN0YW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNhc2UgJ3J1bic6XG4gICAgICBmb3IgKGxldCBpID0gZXZlbnRzLmxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGV2ZW50c1tpXS5ldmVudC5uYW1lO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbmFtZSA9PT0gJ3J1bl9jb21wbGV0ZWQnIHx8XG4gICAgICAgICAgbmFtZSA9PT0gJ3J1bl9mYWlsZWQnIHx8XG4gICAgICAgICAgbmFtZSA9PT0gJ3J1bl9jYW5jZWxsZWQnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBldmVudHNbaV0udGltZXN0YW1wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNhc2UgJ3N0ZXAnOlxuICAgICAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGg7IGktLTsgKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBldmVudHNbaV0uZXZlbnQubmFtZTtcbiAgICAgICAgaWYgKG5hbWUgPT09ICdzdGVwX2NvbXBsZXRlZCcgfHwgbmFtZSA9PT0gJ3N0ZXBfZmFpbGVkJykge1xuICAgICAgICAgIHJldHVybiBldmVudHNbaV0udGltZXN0YW1wO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYW1lID09PSAnc3RlcF9zdGFydGVkJyB8fCBuYW1lID09PSAnc3RlcF9yZXRyeWluZycpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBTcGFuTm9kZXMgPSBtZW1vKGZ1bmN0aW9uIFNwYW5Ob2Rlcyh7XG4gIHJvb3QsXG4gIHNjYWxlLFxuICBzcGFucyxcbiAgaXNMaXZlID0gZmFsc2UsXG4gIHNjcm9sbFNuYXBzaG90UmVmLFxuICBjYWNoZSxcbiAgY3VzdG9tU3BhbkNsYXNzTmFtZUZ1bmMsXG4gIGN1c3RvbVNwYW5FdmVudENsYXNzTmFtZUZ1bmMsXG59OiB7XG4gIHJvb3Q6IFJvb3ROb2RlO1xuICBzY2FsZTogbnVtYmVyO1xuICBzcGFuczogVmlzaWJsZVNwYW5bXTtcbiAgaXNMaXZlPzogYm9vbGVhbjtcbiAgc2Nyb2xsU25hcHNob3RSZWY6IE11dGFibGVSZWZPYmplY3Q8U2Nyb2xsU25hcHNob3QgfCB1bmRlZmluZWQ+O1xuICAvKiogTm90IHVzZWQgaW4gdGhlIGJvZHkg4oCUIGV4aXN0cyBzb2xlbHkgdG8gYnVzdCBSZWFjdC5tZW1vIHdoZW4gdGhlIGdsb2JhbCBtZW1vIGNhY2hlIGNoYW5nZXMuICovXG4gIGNhY2hlS2V5PzogTWVtb0NhY2hlS2V5O1xuICBjYWNoZTogTWVtb0NhY2hlO1xuICBjdXN0b21TcGFuQ2xhc3NOYW1lRnVuYz86IChzcGFuOiBTcGFuTm9kZSkgPT4gc3RyaW5nO1xuICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jPzogKGV2ZW50OiBWaXNpYmxlU3BhbkV2ZW50KSA9PiBzdHJpbmc7XG59KSB7XG4gIHJldHVybiBzcGFucy5tYXAoKHgpID0+IChcbiAgICA8U3BhbkNvbXBvbmVudFxuICAgICAgY2FjaGVLZXk9e2NhY2hlLmdldCh4LnNwYW4uc3BhbklkKX1cbiAgICAgIGN1c3RvbVNwYW5FdmVudENsYXNzTmFtZUZ1bmM9e2N1c3RvbVNwYW5FdmVudENsYXNzTmFtZUZ1bmN9XG4gICAgICBjdXN0b21TcGFuQ2xhc3NOYW1lRnVuYz17Y3VzdG9tU3BhbkNsYXNzTmFtZUZ1bmN9XG4gICAgICBrZXk9e3guc3Bhbi5zcGFuSWR9XG4gICAgICBub2RlPXt4fVxuICAgICAgcm9vdD17cm9vdH1cbiAgICAgIHNjYWxlPXtzY2FsZX1cbiAgICAgIHRyYWNlSXNMaXZlPXtpc0xpdmV9XG4gICAgICBzY3JvbGxTbmFwc2hvdFJlZj17c2Nyb2xsU25hcHNob3RSZWZ9XG4gICAgLz5cbiAgKSk7XG59KTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBDb21wdXRlIGlubGluZSBzdHlsZXMgZnJvbSBhIFNwYW5MYXlvdXRcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiBnZXRTcGFuU3R5bGUoXG4gIGxheW91dDogU3BhbkxheW91dCxcbiAgbm9kZTogVmlzaWJsZVNwYW4sXG4gIHJvb3Q6IFJvb3ROb2RlLFxuICBzY2FsZTogbnVtYmVyXG4pOiBDU1NQcm9wZXJ0aWVzIHtcbiAgLy8gVXNlIGlzRXhwYW5kZWQgKGhvdmVyZWQgb3Igc2VsZWN0ZWQpIGZvciB3aWR0aCBleHBhbnNpb24gc28gdGhhdFxuICAvLyBzZWxlY3RlZCBzbWFsbCBzcGFucyBzdGF5IGV4cGFuZGVkIGFuZCBzaG93IHRoZWlyIG5hbWUuXG4gIGNvbnN0IGV4cGFuZGVkID0gbGF5b3V0LmlzRXhwYW5kZWQ7XG4gIHJldHVybiB7XG4gICAgLy8gVXNlIGFjdHVhbFdpZHRoIGZvciBDU1MgdmFyaWFibGUgc28gaG92ZXIgZXhwYW5zaW9uIGlzIGFjY3VyYXRlXG4gICAgJy0tc3Bhbi13aWR0aCc6IGAke01hdGgubWF4KGxheW91dC5hY3R1YWxXaWR0aCwgMSl9cHhgLFxuICAgIG1pbldpZHRoOiBleHBhbmRlZCA/IGxheW91dC53aWR0aCA6IHVuZGVmaW5lZCxcbiAgICB3aWR0aDogZXhwYW5kZWQgPyB1bmRlZmluZWQgOiBsYXlvdXQud2lkdGgsXG4gICAgaGVpZ2h0OiBsYXlvdXQuaGVpZ2h0LFxuICAgIG1heFdpZHRoOlxuICAgICAgZXhwYW5kZWQgJiYgIWxheW91dC5pc05lYXJSaWdodFNpZGVcbiAgICAgICAgPyAocm9vdC5lbmRUaW1lIC0gbm9kZS5zdGFydFRpbWUpICogc2NhbGVcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgY29udGFpbkludHJpbnNpY1dpZHRoOiBleHBhbmRlZCA/IHVuZGVmaW5lZCA6IGxheW91dC53aWR0aCxcbiAgICBjb250YWluSW50cmluc2ljSGVpZ2h0OiBsYXlvdXQuaGVpZ2h0LFxuICAgIGxlZnQ6IGxheW91dC5pc05lYXJSaWdodFNpZGUgPyB1bmRlZmluZWQgOiBsYXlvdXQubGVmdCxcbiAgICByaWdodDogbGF5b3V0LmlzTmVhclJpZ2h0U2lkZVxuICAgICAgPyAocm9vdC5lbmRUaW1lIC0gbm9kZS5lbmRUaW1lKSAqIHNjYWxlXG4gICAgICA6IHVuZGVmaW5lZCxcbiAgICB0b3A6IGxheW91dC50b3AsXG4gIH0gYXMgQ1NTUHJvcGVydGllcztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTcGFuQ29tcG9uZW50XG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFNwYW5Db21wb25lbnQgPSBtZW1vKGZ1bmN0aW9uIFNwYW5Db21wb25lbnQoe1xuICBub2RlLFxuICByb290LFxuICBzY2FsZSxcbiAgdHJhY2VJc0xpdmUgPSBmYWxzZSxcbiAgc2Nyb2xsU25hcHNob3RSZWYsXG4gIGN1c3RvbVNwYW5DbGFzc05hbWVGdW5jLFxuICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jLFxufToge1xuICBub2RlOiBWaXNpYmxlU3BhbjtcbiAgcm9vdDogUm9vdE5vZGU7XG4gIHNjYWxlOiBudW1iZXI7XG4gIHRyYWNlSXNMaXZlPzogYm9vbGVhbjtcbiAgc2Nyb2xsU25hcHNob3RSZWY6IE11dGFibGVSZWZPYmplY3Q8U2Nyb2xsU25hcHNob3QgfCB1bmRlZmluZWQ+O1xuICAvKiogTm90IHVzZWQgaW4gdGhlIGJvZHkg4oCUIGV4aXN0cyBzb2xlbHkgdG8gYnVzdCBSZWFjdC5tZW1vIGZvciB0aGlzIHNwYW4uICovXG4gIGNhY2hlS2V5PzogTWVtb0NhY2hlS2V5O1xuICBjdXN0b21TcGFuQ2xhc3NOYW1lRnVuYz86IChzcGFuOiBTcGFuTm9kZSkgPT4gc3RyaW5nO1xuICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jPzogKGV2ZW50OiBWaXNpYmxlU3BhbkV2ZW50KSA9PiBzdHJpbmc7XG59KTogUmVhY3ROb2RlIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPEhUTUxCdXR0b25FbGVtZW50PihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG5vZGUucmVmID0gcmVmO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBub2RlLnJlZiA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbbm9kZV0pO1xuXG4gIGNvbnN0IHsgc3BhbiB9ID0gbm9kZTtcbiAgY29uc3QgcmVzb3VyY2VUeXBlID0gZ2V0UmVzb3VyY2VUeXBlKG5vZGUpO1xuICBjb25zdCBbbGl2ZU5vdywgc2V0TGl2ZU5vd10gPSB1c2VTdGF0ZSgwKTtcblxuICAvLyBHZXQgY3VzdG9tIGNsYXNzIG5hbWUgZnJvbSBjYWxsYmFjayBpZiBwcm92aWRlZFxuICBjb25zdCBjdXN0b21DbGFzc05hbWUgPSBjdXN0b21TcGFuQ2xhc3NOYW1lRnVuY1xuICAgID8gY3VzdG9tU3BhbkNsYXNzTmFtZUZ1bmMobm9kZSlcbiAgICA6ICcnO1xuXG4gIC8vIFdvcmtmbG93IHNwYW4gdHlwZXMgdXNlIGNvbG9yZWQgc2VnbWVudHMgKyBib3VuZGFyeSBsaW5lIG1hcmtlcnNcbiAgLy8gR2VuZXJpYyBPVEVMIHNwYW5zIHVzZSBkaWFtb25kIGV2ZW50IG1hcmtlcnNcbiAgY29uc3QgaXNXb3JrZmxvd1NwYW4gPSByZXNvdXJjZVR5cGUgIT09ICdkZWZhdWx0JztcblxuICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBzcGFuIGlzIHN0aWxsIGFjdGl2ZSAobGl2ZSkuIFdlIHJlcXVpcmUgdGhlIHBhcmVudCBydW5cbiAgLy8gdG8gYmUgZXhwbGljaXRseSBsaXZlIHRvIGF2b2lkIGNvbXBsZXRlZC9jYW5jZWxsZWQgdHJhY2VzIGNvbnRpbnVpbmcgdG9cbiAgLy8gZ3JvdyBkdWUgdG8gdGltaW5nIGhldXJpc3RpY3MuXG4gIGNvbnN0IGRhdGEgPSBzcGFuLmF0dHJpYnV0ZXM/LmRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGNvbnN0IHRlcm1pbmFsVGltZXN0YW1wID0gZ2V0VGVybWluYWxUaW1lc3RhbXAocmVzb3VyY2VUeXBlLCBub2RlKTtcbiAgY29uc3QgaGFzVGVybWluYWxFdmVudCA9IHRlcm1pbmFsVGltZXN0YW1wICE9IG51bGw7XG4gIGNvbnN0IGlzQ29tcGxldGVkQnlEYXRhID1cbiAgICByZXNvdXJjZVR5cGUgPT09ICdob29rJ1xuICAgICAgPyBCb29sZWFuKGRhdGE/LmRpc3Bvc2VkQXQpXG4gICAgICA6IEJvb2xlYW4oZGF0YT8uY29tcGxldGVkQXQpO1xuICBjb25zdCBpc0NvbXBsZXRlZCA9IGlzQ29tcGxldGVkQnlEYXRhIHx8IGhhc1Rlcm1pbmFsRXZlbnQ7XG4gIGNvbnN0IGlzTGl2ZSA9IHRyYWNlSXNMaXZlICYmIGlzV29ya2Zsb3dTcGFuICYmICFpc0NvbXBsZXRlZDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNMaXZlKSByZXR1cm47XG4gICAgc2V0TGl2ZU5vdyhEYXRlLm5vdygpKTtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHNldExpdmVOb3coRGF0ZS5ub3coKSk7XG4gICAgfSwgMjUwKTtcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7XG4gIH0sIFtpc0xpdmVdKTtcblxuICBjb25zdCBjYW5vbmljYWxTdGFydFRpbWUgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLnN0YXJ0VGltZSk7XG4gIGNvbnN0IGNhbm9uaWNhbEVuZFRpbWUgPSBnZXRIaWdoUmVzSW5NcyhzcGFuLmVuZFRpbWUpO1xuICBjb25zdCBjYW5vbmljYWxEdXJhdGlvbiA9IGdldEhpZ2hSZXNJbk1zKHNwYW4uZHVyYXRpb24pO1xuICBjb25zdCBjYW5vbmljYWxBY3RpdmVTdGFydFRpbWUgPSBzcGFuLmFjdGl2ZVN0YXJ0VGltZVxuICAgID8gZ2V0SGlnaFJlc0luTXMoc3Bhbi5hY3RpdmVTdGFydFRpbWUpXG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZHVyYXRpb25NcyA9XG4gICAgdGVybWluYWxUaW1lc3RhbXAgIT0gbnVsbFxuICAgICAgPyBNYXRoLm1heCgwLCB0ZXJtaW5hbFRpbWVzdGFtcCAtIGNhbm9uaWNhbFN0YXJ0VGltZSlcbiAgICAgIDogaXNMaXZlXG4gICAgICAgID8gTWF0aC5tYXgoMCwgKGxpdmVOb3cgfHwgRGF0ZS5ub3coKSkgLSBjYW5vbmljYWxTdGFydFRpbWUpXG4gICAgICAgIDogY2Fub25pY2FsRHVyYXRpb247XG4gIGNvbnN0IGR1cmF0aW9uID0gbm9kZS5pc0luc3RydW1lbnRhdGlvbkhpbnRcbiAgICA/ICdHZXQgU3RhcnRlZCdcbiAgICA6IGZvcm1hdER1cmF0aW9uKGR1cmF0aW9uTXMpO1xuICBjb25zdCBiYXNlTm9kZSA9IHtcbiAgICAuLi5ub2RlLFxuICAgIHN0YXJ0VGltZTogY2Fub25pY2FsU3RhcnRUaW1lLFxuICAgIGVuZFRpbWU6IGNhbm9uaWNhbEVuZFRpbWUsXG4gICAgZHVyYXRpb246IGNhbm9uaWNhbER1cmF0aW9uLFxuICAgIGFjdGl2ZVN0YXJ0VGltZTogY2Fub25pY2FsQWN0aXZlU3RhcnRUaW1lLFxuICB9IGFzIFZpc2libGVTcGFuO1xuICBjb25zdCBzZWdtZW50Tm9kZSA9IGlzTGl2ZVxuICAgID8gKHtcbiAgICAgICAgLi4uYmFzZU5vZGUsXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbk1zLFxuICAgICAgICBlbmRUaW1lOiBjYW5vbmljYWxTdGFydFRpbWUgKyBkdXJhdGlvbk1zLFxuICAgICAgfSBhcyBWaXNpYmxlU3BhbilcbiAgICA6IGJhc2VOb2RlO1xuICBjb25zdCBoYXNTZWdtZW50cyA9XG4gICAgaXNXb3JrZmxvd1NwYW4gJiZcbiAgICBjb21wdXRlU2VnbWVudHMocmVzb3VyY2VUeXBlLCBzZWdtZW50Tm9kZSkuc2VnbWVudHMubGVuZ3RoID4gMDtcbiAgY29uc3QgbGF5b3V0ID0gZ2V0U3BhbkxheW91dChcbiAgICByZXNvdXJjZVR5cGUsXG4gICAgc2VnbWVudE5vZGUsXG4gICAgcm9vdCxcbiAgICBzY2FsZSxcbiAgICBzY3JvbGxTbmFwc2hvdFJlZlxuICApO1xuXG4gIC8vIEZvciBsaXZlIHNwYW5zIHRoZSBkYXRhLWxldmVsIGBub2RlLmR1cmF0aW9uYCBjYW4gYmUgc3RhbGUgKGZyb20gdGhlIGxhc3RcbiAgLy8gZmV0Y2gpIHdoaWxlIHRoZSB2aXN1YWwgd2lkdGggaXMgZ3Jvd2luZyB2aWEgckFGLiBSZWNvbXB1dGUgZnJvbSByZWFsXG4gIC8vIGVsYXBzZWQgdGltZSBzbyB0aGF0OlxuICAvLyAgLSBoZWlnaHQvaXNTbWFsbCBjbGFzc2lmaWNhdGlvbiBzdGF5cyBjb3JyZWN0IChub3Qgc2hydW5rZW4gdG8gNDAlKVxuICAvLyAgLSBSZWFjdC1yZW5kZXJlZCB3aWR0aCBtYXRjaGVzIHRoZSByQUYtZHJpdmVuIHdpZHRoLCBwcmV2ZW50aW5nIGEgYnJpZWZcbiAgLy8gICAgc2hyaW5r4oaSZXhwYW5kIGZsYXNoIG9uIHJlLXJlbmRlciB0aGF0IGJyZWFrcyBjdXJzb3IgaGl0LXRlc3RpbmdcbiAgaWYgKGlzTGl2ZSkge1xuICAgIGNvbnN0IGVsYXBzZWQgPSBkdXJhdGlvbk1zO1xuICAgIGNvbnN0IGxpdmVBY3R1YWxXaWR0aCA9IGVsYXBzZWQgKiBzY2FsZTtcbiAgICBjb25zdCBsaXZlV2lkdGggPSBNYXRoLm1heChsaXZlQWN0dWFsV2lkdGgsIDQpO1xuICAgIGxheW91dC5hY3R1YWxXaWR0aCA9IGxpdmVBY3R1YWxXaWR0aDtcbiAgICBsYXlvdXQud2lkdGggPSBsaXZlV2lkdGg7XG4gICAgbGF5b3V0LmlzU21hbGwgPSBsaXZlQWN0dWFsV2lkdGggPCA2NDtcbiAgICBsYXlvdXQuaXNIdWdlID0gbGl2ZUFjdHVhbFdpZHRoID49IDUwMDtcbiAgICBpZiAoIWxheW91dC5pc1NtYWxsKSB7XG4gICAgICBsYXlvdXQuaGVpZ2h0ID0gUk9XX0hFSUdIVDtcbiAgICAgIGxheW91dC50b3AgPSBNQVJLRVJfSEVJR0hUICsgKFJPV19IRUlHSFQgKyBST1dfUEFERElORykgKiBzZWdtZW50Tm9kZS5yb3c7XG4gICAgfVxuICB9XG5cbiAgLy8gU21vb3RobHkgZ3JvdyBhY3RpdmUgc3BhbiB3aWR0aCBhdCA2MGZwcyB1c2luZyB3YWxsIGNsb2NrIHRpbWVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzTGl2ZSB8fCAhcmVmLmN1cnJlbnQpIHJldHVybjtcblxuICAgIGxldCByYWZJZCA9IDA7XG4gICAgY29uc3QgdGljayA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0ICRlbCA9IHJlZi5jdXJyZW50O1xuICAgICAgaWYgKCEkZWwpIHJldHVybjtcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBEYXRlLm5vdygpIC0gY2Fub25pY2FsU3RhcnRUaW1lO1xuICAgICAgY29uc3QgdyA9IE1hdGgubWF4KGVsYXBzZWQgKiBzY2FsZSwgMik7XG4gICAgICAkZWwuc3R5bGUud2lkdGggPSBgJHt3fXB4YDtcbiAgICAgICRlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zcGFuLXdpZHRoJywgYCR7d31weGApO1xuICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfTtcbiAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICB9LCBbaXNMaXZlLCBjYW5vbmljYWxTdGFydFRpbWUsIHNjYWxlXSk7XG5cbiAgY29uc3QgcmVuZGVyTm9kZSA9IHNlZ21lbnROb2RlO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgYXJpYS1sYWJlbD17YCR7c3Bhbi5uYW1lfSAtICR7ZHVyYXRpb259YH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgIHN0eWxlcy5zcGFuTm9kZSxcbiAgICAgICAgICBsYXlvdXQuaXNIdWdlICYmIHN0eWxlcy5odWdlLFxuICAgICAgICAgIGxheW91dC5pc1NtYWxsICYmIHN0eWxlcy5zbWFsbCxcbiAgICAgICAgICBsYXlvdXQuaXNFeHBhbmRlZCAmJiBzdHlsZXMueEhvdmVyLFxuICAgICAgICAgIG5vZGUuaXNIaWdobGlnaHRlZFxuICAgICAgICAgICAgPyBzdHlsZXMuY29sb3JIaWdobGlnaHRcbiAgICAgICAgICAgIDogZ2V0U3BhbkNvbG9yQ2xhc3NOYW1lKG5vZGUpLFxuICAgICAgICAgIG5vZGUuaXNIaWdobGlnaHRlZCA9PT0gZmFsc2UgJiYgc3R5bGVzLnVubGl0LFxuICAgICAgICAgIGN1c3RvbUNsYXNzTmFtZSxcbiAgICAgICAgICBoYXNTZWdtZW50cyAmJiBzdHlsZXMuaGFzU2VnbWVudHNcbiAgICAgICAgKX1cbiAgICAgICAgZGF0YS1zcGFuLWlkPXtzcGFuLnNwYW5JZH1cbiAgICAgICAgZGF0YS1zdGFydC10aW1lPXtzZWdtZW50Tm9kZS5zdGFydFRpbWUgLSByb290LnN0YXJ0VGltZX1cbiAgICAgICAgZGF0YS1yaWdodC1zaWRlPXtsYXlvdXQuaXNOZWFyUmlnaHRTaWRlfVxuICAgICAgICBkYXRhLXNlbGVjdGVkPXtub2RlLmlzU2VsZWN0ZWQgPyAnJyA6IHVuZGVmaW5lZH1cbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIHN0eWxlPXtnZXRTcGFuU3R5bGUobGF5b3V0LCBzZWdtZW50Tm9kZSwgcm9vdCwgc2NhbGUpfVxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgID5cbiAgICAgICAgPFNwYW5Db250ZW50XG4gICAgICAgICAgZHVyYXRpb25Ncz17ZHVyYXRpb25Nc31cbiAgICAgICAgICByZXNvdXJjZVR5cGU9e3Jlc291cmNlVHlwZX1cbiAgICAgICAgICBub2RlPXtyZW5kZXJOb2RlfVxuICAgICAgICAgIGxheW91dD17bGF5b3V0fVxuICAgICAgICAvPlxuICAgICAgPC9idXR0b24+XG4gICAgICB7c2VnbWVudE5vZGUuZXZlbnRzICYmICFsYXlvdXQuaXNTbWFsbFxuICAgICAgICA/IHNlZ21lbnROb2RlLmV2ZW50cy5tYXAoKHgpID0+IChcbiAgICAgICAgICAgIDxTcGFuRXZlbnRDb21wb25lbnRcbiAgICAgICAgICAgICAgY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYz17Y3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuY31cbiAgICAgICAgICAgICAgZXZlbnQ9e3h9XG4gICAgICAgICAgICAgIGtleT17eC5rZXl9XG4gICAgICAgICAgICAgIG5vZGU9e3NlZ21lbnROb2RlfVxuICAgICAgICAgICAgICByb290PXtyb290fVxuICAgICAgICAgICAgICBzY2FsZT17c2NhbGV9XG4gICAgICAgICAgICAgIGFzQm91bmRhcnk9e2lzV29ya2Zsb3dTcGFufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKVxuICAgICAgICA6IG51bGx9XG4gICAgPC8+XG4gICk7XG59KTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTcGFuRXZlbnRDb21wb25lbnRcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogSHVtYW4tcmVhZGFibGUgbGFiZWxzIGZvciB3b3JrZmxvdyBldmVudCB0eXBlcyAqL1xuY29uc3QgQk9VTkRBUllfTEFCRUxTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBzdGVwX3N0YXJ0ZWQ6ICdTdGFydGVkJyxcbiAgc3RlcF9yZXRyeWluZzogJ1JldHJ5aW5nJyxcbiAgc3RlcF9mYWlsZWQ6ICdGYWlsZWQnLFxuICBob29rX2NyZWF0ZWQ6ICdDcmVhdGVkJyxcbiAgaG9va19yZWNlaXZlZDogJ1JlY2VpdmVkJyxcbiAgaG9va19kaXNwb3NlZDogJ1Jlc29sdmVkJyxcbiAgd2FpdF9jcmVhdGVkOiAnU2xlZXAgc3RhcnRlZCcsXG4gIHdhaXRfY29tcGxldGVkOiAnU2xlZXAgY29tcGxldGVkJyxcbiAgcnVuX3N0YXJ0ZWQ6ICdTdGFydGVkJyxcbiAgcnVuX2NvbXBsZXRlZDogJ0NvbXBsZXRlZCcsXG4gIHJ1bl9mYWlsZWQ6ICdSdW4gZmFpbGVkJyxcbiAgc3RlcF9jb21wbGV0ZWQ6ICdDb21wbGV0ZWQnLFxuICBhdHRyX3NldDogJ0F0dHJpYnV0ZXMgc2V0Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBTcGFuRXZlbnRDb21wb25lbnQgPSBtZW1vKGZ1bmN0aW9uIFNwYW5FdmVudENvbXBvbmVudCh7XG4gIGV2ZW50LFxuICBub2RlLFxuICByb290LFxuICBzY2FsZSxcbiAgY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYyxcbiAgYXNCb3VuZGFyeSA9IGZhbHNlLFxufToge1xuICBldmVudDogVmlzaWJsZVNwYW5FdmVudDtcbiAgbm9kZTogVmlzaWJsZVNwYW47XG4gIHJvb3Q6IFJvb3ROb2RlO1xuICBzY2FsZTogbnVtYmVyO1xuICBjdXN0b21TcGFuRXZlbnRDbGFzc05hbWVGdW5jPzogKGV2ZW50OiBWaXNpYmxlU3BhbkV2ZW50KSA9PiBzdHJpbmc7XG4gIGFzQm91bmRhcnk/OiBib29sZWFuO1xufSk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBldmVudC5yZWYgPSByZWY7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGV2ZW50LnJlZiA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICB9LCBbZXZlbnRdKTtcblxuICBjb25zdCB7XG4gICAgZXZlbnQ6IHsgbmFtZSB9LFxuICB9ID0gZXZlbnQ7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGZvcm1hdER1cmF0aW9uKGV2ZW50LnRpbWVzdGFtcCAtIHJvb3Quc3RhcnRUaW1lKTtcbiAgY29uc3QgZGlzcGxheUxhYmVsID0gYXNCb3VuZGFyeSA/IChCT1VOREFSWV9MQUJFTFNbbmFtZV0gPz8gbmFtZSkgOiBuYW1lO1xuXG4gIC8vIEZvciBib3VuZGFyeSBldmVudHMsIGNvbXB1dGUgdGhlIGR1cmF0aW9uIG9mIHRoZSBwaGFzZS5cbiAgLy8gXCJGb3J3YXJkXCIgZXZlbnRzIChzdGFydGVkLCByZXRyeWluZykgbWVhc3VyZSB1bnRpbCB0aGUgbmV4dCBldmVudC5cbiAgLy8gXCJUZXJtaW5hbFwiIGV2ZW50cyAoY29tcGxldGVkKSBtZWFzdXJlIGZyb20gdGhlIHByZXZpb3VzIHN0YXJ0ZWQgZXZlbnQuXG4gIGNvbnN0IGlzRm9yd2FyZEV2ZW50ID1cbiAgICBhc0JvdW5kYXJ5ICYmXG4gICAgKG5hbWUgPT09ICdzdGVwX3N0YXJ0ZWQnIHx8XG4gICAgICBuYW1lID09PSAncnVuX3N0YXJ0ZWQnIHx8XG4gICAgICBuYW1lID09PSAnc3RlcF9yZXRyeWluZycpO1xuICBjb25zdCBpc1Rlcm1pbmFsRXZlbnQgPVxuICAgIGFzQm91bmRhcnkgJiYgKG5hbWUgPT09ICdzdGVwX2NvbXBsZXRlZCcgfHwgbmFtZSA9PT0gJ3J1bl9jb21wbGV0ZWQnKTtcblxuICBsZXQgcGhhc2VEdXJhdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIGxldCBwaGFzZUxhYmVsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaWYgKChpc0ZvcndhcmRFdmVudCB8fCBpc1Rlcm1pbmFsRXZlbnQpICYmIG5vZGUuZXZlbnRzKSB7XG4gICAgY29uc3Qgc29ydGVkTm9kZUV2ZW50cyA9IFsuLi5ub2RlLmV2ZW50c10uc29ydChcbiAgICAgIChhLCBiKSA9PiBhLnRpbWVzdGFtcCAtIGIudGltZXN0YW1wXG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gc29ydGVkTm9kZUV2ZW50cy5maW5kSW5kZXgoKGUpID0+IGUua2V5ID09PSBldmVudC5rZXkpO1xuXG4gICAgaWYgKGlzVGVybWluYWxFdmVudCkge1xuICAgICAgLy8gTG9vayBiYWNrd2FyZCB0byBmaW5kIHRoZSBsYXN0IHN0ZXBfc3RhcnRlZFxuICAgICAgbGV0IHByZXZTdGFydFRpbWU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgICAgZm9yIChsZXQgaSA9IGN1cnJlbnRJZHggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAoc29ydGVkTm9kZUV2ZW50c1tpXS5ldmVudC5uYW1lID09PSAnc3RlcF9zdGFydGVkJykge1xuICAgICAgICAgIHByZXZTdGFydFRpbWUgPSBzb3J0ZWROb2RlRXZlbnRzW2ldLnRpbWVzdGFtcDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByZXZTdGFydFRpbWUgIT09IG51bGwpIHtcbiAgICAgICAgcGhhc2VEdXJhdGlvbiA9IGZvcm1hdER1cmF0aW9uKGV2ZW50LnRpbWVzdGFtcCAtIHByZXZTdGFydFRpbWUpO1xuICAgICAgICBwaGFzZUxhYmVsID0gJ0V4ZWN1dGVkJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTG9vayBmb3J3YXJkIHRvIHRoZSBuZXh0IGV2ZW50XG4gICAgICBjb25zdCBuZXh0RXZlbnQgPSBzb3J0ZWROb2RlRXZlbnRzW2N1cnJlbnRJZHggKyAxXTtcbiAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXh0RXZlbnQgPyBuZXh0RXZlbnQudGltZXN0YW1wIDogbm9kZS5lbmRUaW1lO1xuICAgICAgcGhhc2VEdXJhdGlvbiA9IGZvcm1hdER1cmF0aW9uKGVuZFRpbWUgLSBldmVudC50aW1lc3RhbXApO1xuICAgICAgcGhhc2VMYWJlbCA9IG5hbWUgPT09ICdzdGVwX3JldHJ5aW5nJyA/ICdXYWl0ZWQnIDogJ0V4ZWN1dGVkJztcbiAgICB9XG4gIH1cblxuICBjb25zdCBsZWZ0ID0gKGV2ZW50LnRpbWVzdGFtcCAtIHJvb3Quc3RhcnRUaW1lKSAqIHNjYWxlO1xuICBjb25zdCB0b3AgPSBNQVJLRVJfSEVJR0hUICsgKFJPV19IRUlHSFQgKyBST1dfUEFERElORykgKiBub2RlLnJvdztcbiAgY29uc3QgaXNMZWZ0QWxpZ25lZCA9XG4gICAgbm9kZS5kdXJhdGlvbiA8PSAwIHx8XG4gICAgKGV2ZW50LnRpbWVzdGFtcCAtIG5vZGUuc3RhcnRUaW1lKSAvIG5vZGUuZHVyYXRpb24gPCAwLjU7XG5cbiAgLy8gR2V0IGN1c3RvbSBjbGFzcyBuYW1lIGZyb20gY2FsbGJhY2sgaWYgcHJvdmlkZWRcbiAgY29uc3QgY3VzdG9tQ2xhc3NOYW1lID0gY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuY1xuICAgID8gY3VzdG9tU3BhbkV2ZW50Q2xhc3NOYW1lRnVuYyhldmVudClcbiAgICA6ICcnO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgdGl0bGU9e1xuICAgICAgICBwaGFzZUR1cmF0aW9uXG4gICAgICAgICAgPyBgJHtkaXNwbGF5TGFiZWx9ICR7dGltZXN0YW1wfVxcbiR7cGhhc2VMYWJlbH0gJHtwaGFzZUR1cmF0aW9ufWBcbiAgICAgICAgICA6IGAke2Rpc3BsYXlMYWJlbH0gJHt0aW1lc3RhbXB9YFxuICAgICAgfVxuICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICBzdHlsZXMuc3Bhbk5vZGVFdmVudCxcbiAgICAgICAgY3VzdG9tQ2xhc3NOYW1lLFxuICAgICAgICBhc0JvdW5kYXJ5ICYmIHN0eWxlcy5ib3VuZGFyeU1hcmtlcixcbiAgICAgICAgbm9kZS5pc0hpZ2hsaWdodGVkXG4gICAgICAgICAgPyBzdHlsZXMuY29sb3JIaWdobGlnaHRcbiAgICAgICAgICA6IGdldFNwYW5Db2xvckNsYXNzTmFtZShub2RlKSxcbiAgICAgICAgbm9kZS5pc0hpZ2hsaWdodGVkID09PSBmYWxzZSAmJiBzdHlsZXMudW5saXRcbiAgICAgICl9XG4gICAgICBkYXRhLWhvdmVyZWQ9e2V2ZW50LmlzSG92ZXJlZH1cbiAgICAgIHJlZj17cmVmfVxuICAgICAgc3R5bGU9e1xuICAgICAgICB7XG4gICAgICAgICAgbGVmdCxcbiAgICAgICAgICB0b3AsXG4gICAgICAgIH0gYXMgQ1NTUHJvcGVydGllc1xuICAgICAgfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbHN4KFxuICAgICAgICAgIHN0eWxlcy5ob3ZlckluZm8sXG4gICAgICAgICAgaXNMZWZ0QWxpZ25lZCA/IHN0eWxlcy5hbGlnblN0YXJ0IDogc3R5bGVzLmFsaWduRW5kXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIHthc0JvdW5kYXJ5ID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5ldmVudE5hbWV9PntkaXNwbGF5TGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnRUaW1lc3RhbXB9Pnt0aW1lc3RhbXB9PC9zcGFuPlxuICAgICAgICAgICAge3BoYXNlRHVyYXRpb24gPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnROYW1lfT57cGhhc2VMYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnRUaW1lc3RhbXB9PntwaGFzZUR1cmF0aW9ufTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnROYW1lfT57bmFtZX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5ldmVudFRpbWVzdGFtcH0+e3RpbWVzdGFtcH08L3NwYW4+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIHthc0JvdW5kYXJ5ID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmJvdW5kYXJ5TGluZX0gLz5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZXZlbnREaWFtb25kfSAvPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn0pO1xuIl19
@@ -0,0 +1,47 @@
1
+ import type { JSX, ReactNode, RefObject } from 'react';
2
+ /**
3
+ * Returns whether the current subtree is wrapped in a {@link ContextCardProvider}.
4
+ */
5
+ export declare function useHasContextCardProvider(): boolean;
6
+ /**
7
+ * Provides shared state and a portal container for {@link ContextCardTrigger}
8
+ * components. Must wrap any tree containing triggers; manages positioning,
9
+ * visibility transitions, and the animated arrow tip across all cards.
10
+ */
11
+ export declare function ContextCardProvider({ children, portalTarget, }: {
12
+ children: ReactNode;
13
+ /** Custom container for the portal. Accepts either an element or a ref. */
14
+ portalTarget?: HTMLElement | RefObject<HTMLElement | null> | null;
15
+ }): ReactNode;
16
+ export type Side = 'top' | 'bottom' | 'left' | 'right';
17
+ export type Align = 'start' | 'center' | 'end';
18
+ /** Props for the {@link ContextCardTrigger} component. */
19
+ export interface ContextCardTriggerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'content'> {
20
+ /** The content rendered inside the context card popup. */
21
+ content: ReactNode;
22
+ /** Which side of the trigger to display the card. Defaults to `"right"`. */
23
+ side?: Side;
24
+ /** Alignment of the card relative to the trigger. Defaults to `"center"`. */
25
+ align?: Align;
26
+ /** Distance in pixels between the trigger and the card. Defaults to `16`. */
27
+ sideOffset?: number;
28
+ /** Offset in pixels along the alignment axis. Defaults to `0`. */
29
+ alignOffset?: number;
30
+ /** Whether to disable pointer events on the card content. */
31
+ ignoreCardPointerEvents?: boolean;
32
+ /** Whether to remove default padding from the card content. */
33
+ noPadding?: boolean;
34
+ /** Whether the trigger uses the Slot pattern to merge props onto its child. */
35
+ asChild?: boolean;
36
+ /** Can be used to hide the card when needed. */
37
+ hide?: boolean;
38
+ /** Time in milliseconds before the card is dismissed after mouse leaves. */
39
+ inactiveTimeoutMs?: number;
40
+ }
41
+ /**
42
+ * Displays a floating context card on hover with viewport-aware collision
43
+ * detection and animated position transitions between triggers in the same
44
+ * {@link ContextCardProvider}. Persists briefly after mouse leave.
45
+ */
46
+ export declare function ContextCardTrigger({ content, children, side, align, sideOffset, alignOffset, ignoreCardPointerEvents, noPadding, asChild, className, hide, inactiveTimeoutMs, }: ContextCardTriggerProps): JSX.Element;
47
+ //# sourceMappingURL=context-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/context-card.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAoB,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAuEzE;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAgBD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;CACnE,GAAG,SAAS,CA4PZ;AAED,MAAM,MAAM,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AACvD,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE/C,0DAA0D;AAC1D,MAAM,WAAW,uBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC7D,0DAA0D;IAC1D,OAAO,EAAE,SAAS,CAAC;IACnB,4EAA4E;IAC5E,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,6EAA6E;IAC7E,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,QAAQ,EACR,IAAc,EACd,KAAgB,EAChB,UAAe,EACf,WAAe,EACf,uBAA+B,EAC/B,SAAS,EACT,OAAO,EACP,SAAS,EACT,IAAI,EACJ,iBAAuC,GACxC,EAAE,uBAAuB,GAAG,GAAG,CAAC,OAAO,CAwXvC"}