@workflow/web-shared 5.0.0-beta.10 → 5.0.0-beta.12
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.
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -1
- package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/event-list.js +9 -4
- package/dist/components/new-trace-viewer/components/split-pane.d.ts +3 -2
- package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/split-pane.js +10 -4
- package/dist/components/new-trace-viewer/components/timeline.d.ts +1 -1
- package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/components/timeline.js +6 -8
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts +2 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/trace-viewer-skeleton.js +19 -0
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts +20 -0
- package/dist/components/new-trace-viewer/components/use-row-window.d.ts.map +1 -0
- package/dist/components/new-trace-viewer/components/use-row-window.js +69 -0
- package/dist/components/new-trace-viewer/context.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/context.js +2 -2
- package/dist/components/new-trace-viewer/trace-viewer.d.ts +4 -1
- package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -1
- package/dist/components/new-trace-viewer/trace-viewer.js +19 -6
- package/dist/components/trace-viewer-new.d.ts +5 -1
- package/dist/components/trace-viewer-new.d.ts.map +1 -1
- package/dist/components/trace-viewer-new.js +7 -8
- package/dist/components/ui/icon-button.d.ts +8 -2
- package/dist/components/ui/icon-button.d.ts.map +1 -1
- package/dist/components/ui/icon-button.js +4 -4
- package/dist/components/ui/kbd.d.ts +6 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/kbd.js +6 -0
- package/dist/components/ui/tooltip.d.ts +10 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +12 -0
- package/dist/hooks/use-intersection-observer.d.ts +17 -0
- package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/hooks/use-intersection-observer.js +29 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts +21 -0
- package/dist/hooks/use-load-more-on-scroll.d.ts.map +1 -0
- package/dist/hooks/use-load-more-on-scroll.js +28 -0
- package/dist/lib/hydration.d.ts.map +1 -1
- package/dist/lib/hydration.js +26 -2
- package/package.json +4 -4
- package/src/components/index.ts +1 -0
- package/src/components/new-trace-viewer/components/event-list.tsx +19 -11
- package/src/components/new-trace-viewer/components/split-pane.tsx +15 -2
- package/src/components/new-trace-viewer/components/timeline.tsx +27 -19
- package/src/components/new-trace-viewer/components/trace-viewer-skeleton.tsx +94 -0
- package/src/components/new-trace-viewer/components/use-row-window.ts +93 -0
- package/src/components/new-trace-viewer/context.tsx +1 -3
- package/src/components/new-trace-viewer/trace-viewer.tsx +90 -22
- package/src/components/trace-viewer-new.tsx +20 -12
- package/src/components/ui/icon-button.tsx +7 -11
- package/src/components/ui/kbd.tsx +21 -0
- package/src/components/ui/tooltip.tsx +47 -0
- package/src/hooks/use-intersection-observer.ts +57 -0
- package/src/hooks/use-load-more-on-scroll.ts +49 -0
- package/src/lib/hydration.ts +28 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type VariantProps } from 'class-variance-authority';
|
|
2
|
-
import
|
|
2
|
+
import * as React from 'react';
|
|
3
3
|
declare const iconButtonVariants: (props?: ({
|
|
4
4
|
variant?: "muted" | "tertiary" | null | undefined;
|
|
5
5
|
size?: "small" | "tiny" | null | undefined;
|
|
@@ -8,6 +8,12 @@ export type IconButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>
|
|
|
8
8
|
'aria-label': string;
|
|
9
9
|
type?: 'button' | 'submit' | 'reset';
|
|
10
10
|
};
|
|
11
|
-
export declare
|
|
11
|
+
export declare const IconButton: React.ForwardRefExoticComponent<Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "type"> & VariantProps<(props?: ({
|
|
12
|
+
variant?: "muted" | "tertiary" | null | undefined;
|
|
13
|
+
size?: "small" | "tiny" | null | undefined;
|
|
14
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string> & {
|
|
15
|
+
'aria-label': string;
|
|
16
|
+
type?: "button" | "submit" | "reset";
|
|
17
|
+
} & React.RefAttributes<HTMLButtonElement>>;
|
|
12
18
|
export { iconButtonVariants };
|
|
13
19
|
//# sourceMappingURL=icon-button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/icon-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,KAAK,
|
|
1
|
+
{"version":3,"file":"icon-button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/icon-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,QAAA,MAAM,kBAAkB;;;8EAyBvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,MAAM,CACP,GACC,YAAY,CAAC,OAAO,kBAAkB,CAAC,GAAG;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;CACtC,CAAC;AAEJ,eAAO,MAAM,UAAU;;;;kBAJL,MAAM;WACb,QAAQ,GAAG,QAAQ,GAAG,OAAO;2CAYvC,CAAC;AAGF,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cva } from 'class-variance-authority';
|
|
3
|
+
import * as React from 'react';
|
|
3
4
|
import { cn } from '../../lib/utils';
|
|
4
5
|
const iconButtonVariants = cva([
|
|
5
6
|
'm-0 inline-flex shrink-0 appearance-none items-center justify-center border-0 bg-transparent p-0 align-baseline font-inherit no-underline [background:none] [-webkit-appearance:none] [-webkit-tap-highlight-color:transparent]',
|
|
@@ -22,8 +23,7 @@ const iconButtonVariants = cva([
|
|
|
22
23
|
size: 'tiny',
|
|
23
24
|
},
|
|
24
25
|
});
|
|
25
|
-
export
|
|
26
|
-
|
|
27
|
-
}
|
|
26
|
+
export const IconButton = React.forwardRef(({ className, variant, size, type = 'button', ...props }, ref) => (_jsx("button", { ref: ref, type: type, className: cn(iconButtonVariants({ variant, size, className })), ...props })));
|
|
27
|
+
IconButton.displayName = 'IconButton';
|
|
28
28
|
export { iconButtonVariants };
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1idXR0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy91aS9pY29uLWJ1dHRvbi50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJDLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUM1QjtJQUNFLGlPQUFpTztJQUNqTyw0Q0FBNEM7SUFDNUMsd0VBQXdFO0lBQ3hFLDRIQUE0SDtDQUM3SCxFQUNEO0lBQ0UsUUFBUSxFQUFFO1FBQ1IsT0FBTyxFQUFFO1lBQ1AsUUFBUSxFQUNOLDBJQUEwSTtZQUM1SSxLQUFLLEVBQ0gsMElBQTBJO1NBQzdJO1FBQ0QsSUFBSSxFQUFFO1lBQ0osSUFBSSxFQUFFLCtDQUErQztZQUNyRCxLQUFLLEVBQUUsNENBQTRDO1NBQ3BEO0tBQ0Y7SUFDRCxlQUFlLEVBQUU7UUFDZixPQUFPLEVBQUUsVUFBVTtRQUNuQixJQUFJLEVBQUUsTUFBTTtLQUNiO0NBQ0YsQ0FDRixDQUFDO0FBV0YsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQ3hDLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUNoRSxpQkFDRSxHQUFHLEVBQUUsR0FBRyxFQUNSLElBQUksRUFBRSxJQUFJLEVBQ1YsU0FBUyxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxLQUMzRCxLQUFLLEdBQ1QsQ0FDSCxDQUNGLENBQUM7QUFDRixVQUFVLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztBQUV0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGN2YSwgdHlwZSBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi9saWIvdXRpbHMnO1xuXG5jb25zdCBpY29uQnV0dG9uVmFyaWFudHMgPSBjdmEoXG4gIFtcbiAgICAnbS0wIGlubGluZS1mbGV4IHNocmluay0wIGFwcGVhcmFuY2Utbm9uZSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgcC0wIGFsaWduLWJhc2VsaW5lIGZvbnQtaW5oZXJpdCBuby11bmRlcmxpbmUgW2JhY2tncm91bmQ6bm9uZV0gWy13ZWJraXQtYXBwZWFyYW5jZTpub25lXSBbLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50XScsXG4gICAgJ3RyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTE1MCBlYXNlLWluLW91dCcsXG4gICAgJ2VuYWJsZWQ6Y3Vyc29yLXBvaW50ZXIgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNDAnLFxuICAgICdmb2N1cy12aXNpYmxlOm91dGxpbmUgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLVt2YXIoLS1kcy1mb2N1cy1jb2xvcildIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMicsXG4gIF0sXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICB0ZXJ0aWFyeTpcbiAgICAgICAgICAndGV4dC1ncmF5LTkwMCBlbmFibGVkOmhvdmVyOmJnLWdyYXktYWxwaGEtMjAwIGVuYWJsZWQ6aG92ZXI6dGV4dC1ncmF5LTEwMDAgZW5hYmxlZDphY3RpdmU6YmctZ3JheS1hbHBoYS0yMDAgZm9jdXMtdmlzaWJsZTp0ZXh0LWdyYXktMTAwMCcsXG4gICAgICAgIG11dGVkOlxuICAgICAgICAgICd0ZXh0LWdyYXktOTAwIGVuYWJsZWQ6aG92ZXI6YmctZ3JheS1hbHBoYS0yMDAgZW5hYmxlZDpob3Zlcjp0ZXh0LWdyYXktMTAwMCBlbmFibGVkOmFjdGl2ZTpiZy1ncmF5LWFscGhhLTIwMCBmb2N1cy12aXNpYmxlOnRleHQtZ3JheS0xMDAwJyxcbiAgICAgIH0sXG4gICAgICBzaXplOiB7XG4gICAgICAgIHRpbnk6ICdoLTYgdy02IHJvdW5kZWQtWzRweF0gWyZfc3ZnXTpoLTQgWyZfc3ZnXTp3LTQnLFxuICAgICAgICBzbWFsbDogJ2gtOCB3LTggcm91bmRlZC1tZCBbJl9zdmddOmgtNCBbJl9zdmddOnctNCcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgZGVmYXVsdFZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiAndGVydGlhcnknLFxuICAgICAgc2l6ZTogJ3RpbnknLFxuICAgIH0sXG4gIH1cbik7XG5cbmV4cG9ydCB0eXBlIEljb25CdXR0b25Qcm9wcyA9IE9taXQ8XG4gIFJlYWN0LkJ1dHRvbkhUTUxBdHRyaWJ1dGVzPEhUTUxCdXR0b25FbGVtZW50PixcbiAgJ3R5cGUnXG4+ICZcbiAgVmFyaWFudFByb3BzPHR5cGVvZiBpY29uQnV0dG9uVmFyaWFudHM+ICYge1xuICAgICdhcmlhLWxhYmVsJzogc3RyaW5nO1xuICAgIHR5cGU/OiAnYnV0dG9uJyB8ICdzdWJtaXQnIHwgJ3Jlc2V0JztcbiAgfTtcblxuZXhwb3J0IGNvbnN0IEljb25CdXR0b24gPSBSZWFjdC5mb3J3YXJkUmVmPEhUTUxCdXR0b25FbGVtZW50LCBJY29uQnV0dG9uUHJvcHM+KFxuICAoeyBjbGFzc05hbWUsIHZhcmlhbnQsIHNpemUsIHR5cGUgPSAnYnV0dG9uJywgLi4ucHJvcHMgfSwgcmVmKSA9PiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtyZWZ9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgY2xhc3NOYW1lPXtjbihpY29uQnV0dG9uVmFyaWFudHMoeyB2YXJpYW50LCBzaXplLCBjbGFzc05hbWUgfSkpfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbik7XG5JY29uQnV0dG9uLmRpc3BsYXlOYW1lID0gJ0ljb25CdXR0b24nO1xuXG5leHBvcnQgeyBpY29uQnV0dG9uVmFyaWFudHMgfTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../../src/components/ui/kbd.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,wBAAgB,GAAG,CAAC,EAClB,QAAQ,EACR,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,SAAS,CAWZ"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../../lib/utils';
|
|
3
|
+
export function Kbd({ children, className, }) {
|
|
4
|
+
return (_jsx("kbd", { className: cn('inline-flex h-5 min-w-5 items-center justify-center rounded bg-background-100/20 px-1 text-center font-sans text-xs leading-none', className), children: children }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdWkva2JkLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJDLE1BQU0sVUFBVSxHQUFHLENBQUMsRUFDbEIsUUFBUSxFQUNSLFNBQVMsR0FJVjtJQUNDLE9BQU8sQ0FDTCxjQUNFLFNBQVMsRUFBRSxFQUFFLENBQ1gsa0lBQWtJLEVBQ2xJLFNBQVMsQ0FDVixZQUVBLFFBQVEsR0FDTCxDQUNQLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZWFjdE5vZGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL2xpYi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBLYmQoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxufToge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59KTogUmVhY3ROb2RlIHtcbiAgcmV0dXJuIChcbiAgICA8a2JkXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAnaW5saW5lLWZsZXggaC01IG1pbi13LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQgYmctYmFja2dyb3VuZC0xMDAvMjAgcHgtMSB0ZXh0LWNlbnRlciBmb250LXNhbnMgdGV4dC14cyBsZWFkaW5nLW5vbmUnLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwva2JkPlxuICApO1xufVxuIl19
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
declare const TooltipProvider: React.FC<TooltipPrimitive.TooltipProviderProps>;
|
|
4
|
+
declare const Tooltip: React.FC<TooltipPrimitive.TooltipProps>;
|
|
5
|
+
declare const TooltipTrigger: React.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
6
|
+
declare const TooltipContent: React.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
|
|
7
|
+
showArrow?: boolean;
|
|
8
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
9
|
+
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
|
|
10
|
+
//# sourceMappingURL=tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/ui/tooltip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,QAAA,MAAM,eAAe,iDAA4B,CAAC;AAElD,QAAA,MAAM,OAAO,yCAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,gHAA2B,CAAC;AAEhD,QAAA,MAAM,cAAc;gBAGJ,OAAO;wCA4BtB,CAAC;AAGF,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { cn } from '../../lib/utils';
|
|
6
|
+
const TooltipProvider = TooltipPrimitive.Provider;
|
|
7
|
+
const Tooltip = TooltipPrimitive.Root;
|
|
8
|
+
const TooltipTrigger = TooltipPrimitive.Trigger;
|
|
9
|
+
const TooltipContent = React.forwardRef(({ className, sideOffset = 8, showArrow = true, children, ...props }, ref) => (_jsx(TooltipPrimitive.Portal, { children: _jsxs(TooltipPrimitive.Content, { ref: ref, sideOffset: sideOffset, className: cn('z-[99999] flex items-center gap-1 rounded-[10px] bg-gray-1000 px-2 py-1.5 !text-label-13 text-background-100 shadow-md select-none', className), ...props, children: [children, showArrow ? (_jsx(TooltipPrimitive.Arrow, { width: 11, height: 5, className: "fill-gray-1000" })) : null] }) })));
|
|
10
|
+
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
11
|
+
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3VpL3Rvb2x0aXAudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7QUFFYixPQUFPLEtBQUssZ0JBQWdCLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJDLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztBQUVsRCxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7QUFFdEMsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO0FBRWhELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBTXJDLENBQ0UsRUFBRSxTQUFTLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssRUFBRSxFQUNuRSxHQUFHLEVBQ0gsRUFBRSxDQUFDLENBQ0gsS0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLGNBQ3RCLE1BQUMsZ0JBQWdCLENBQUMsT0FBTyxJQUN2QixHQUFHLEVBQUUsR0FBRyxFQUNSLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFNBQVMsRUFBRSxFQUFFLENBQ1gsb0lBQW9JLEVBQ3BJLFNBQVMsQ0FDVixLQUNHLEtBQUssYUFFUixRQUFRLEVBQ1IsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUNYLEtBQUMsZ0JBQWdCLENBQUMsS0FBSyxJQUNyQixLQUFLLEVBQUUsRUFBRSxFQUNULE1BQU0sRUFBRSxDQUFDLEVBQ1QsU0FBUyxFQUFDLGdCQUFnQixHQUMxQixDQUNILENBQUMsQ0FBQyxDQUFDLElBQUksSUFDaUIsR0FDSCxDQUMzQixDQUNGLENBQUM7QUFDRixjQUFjLENBQUMsV0FBVyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFFbEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBUb29sdGlwUHJpbWl0aXZlIGZyb20gJ0ByYWRpeC11aS9yZWFjdC10b29sdGlwJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vbGliL3V0aWxzJztcblxuY29uc3QgVG9vbHRpcFByb3ZpZGVyID0gVG9vbHRpcFByaW1pdGl2ZS5Qcm92aWRlcjtcblxuY29uc3QgVG9vbHRpcCA9IFRvb2x0aXBQcmltaXRpdmUuUm9vdDtcblxuY29uc3QgVG9vbHRpcFRyaWdnZXIgPSBUb29sdGlwUHJpbWl0aXZlLlRyaWdnZXI7XG5cbmNvbnN0IFRvb2x0aXBDb250ZW50ID0gUmVhY3QuZm9yd2FyZFJlZjxcbiAgUmVhY3QuRWxlbWVudFJlZjx0eXBlb2YgVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50PixcbiAgUmVhY3QuQ29tcG9uZW50UHJvcHNXaXRob3V0UmVmPHR5cGVvZiBUb29sdGlwUHJpbWl0aXZlLkNvbnRlbnQ+ICYge1xuICAgIHNob3dBcnJvdz86IGJvb2xlYW47XG4gIH1cbj4oXG4gIChcbiAgICB7IGNsYXNzTmFtZSwgc2lkZU9mZnNldCA9IDgsIHNob3dBcnJvdyA9IHRydWUsIGNoaWxkcmVuLCAuLi5wcm9wcyB9LFxuICAgIHJlZlxuICApID0+IChcbiAgICA8VG9vbHRpcFByaW1pdGl2ZS5Qb3J0YWw+XG4gICAgICA8VG9vbHRpcFByaW1pdGl2ZS5Db250ZW50XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBzaWRlT2Zmc2V0PXtzaWRlT2Zmc2V0fVxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICd6LVs5OTk5OV0gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgcm91bmRlZC1bMTBweF0gYmctZ3JheS0xMDAwIHB4LTIgcHktMS41ICF0ZXh0LWxhYmVsLTEzIHRleHQtYmFja2dyb3VuZC0xMDAgc2hhZG93LW1kIHNlbGVjdC1ub25lJyxcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIHtzaG93QXJyb3cgPyAoXG4gICAgICAgICAgPFRvb2x0aXBQcmltaXRpdmUuQXJyb3dcbiAgICAgICAgICAgIHdpZHRoPXsxMX1cbiAgICAgICAgICAgIGhlaWdodD17NX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbGwtZ3JheS0xMDAwXCJcbiAgICAgICAgICAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvVG9vbHRpcFByaW1pdGl2ZS5Db250ZW50PlxuICAgIDwvVG9vbHRpcFByaW1pdGl2ZS5Qb3J0YWw+XG4gIClcbik7XG5Ub29sdGlwQ29udGVudC5kaXNwbGF5TmFtZSA9IFRvb2x0aXBQcmltaXRpdmUuQ29udGVudC5kaXNwbGF5TmFtZTtcblxuZXhwb3J0IHsgVG9vbHRpcCwgVG9vbHRpcFRyaWdnZXIsIFRvb2x0aXBDb250ZW50LCBUb29sdGlwUHJvdmlkZXIgfTtcbiJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
interface UseIntersectionObserverArgs extends Omit<IntersectionObserverInit, 'root'> {
|
|
3
|
+
/**
|
|
4
|
+
* Scroll container the target is observed within. Defaults to the viewport.
|
|
5
|
+
* Passed as a ref so it resolves after commit (when the node exists).
|
|
6
|
+
*/
|
|
7
|
+
rootRef?: RefObject<Element | null>;
|
|
8
|
+
freezeOnceVisible?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Returns the latest IntersectionObserverEntry for `elementRef`.
|
|
12
|
+
* Ported from vercel/front's `@vercel/hooks` `useIntersectionObserver`, with
|
|
13
|
+
* `root` threaded as a ref so we can observe inside a custom scroll container.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useIntersectionObserver(elementRef: RefObject<Element | null>, { threshold, rootRef, rootMargin, freezeOnceVisible, }?: UseIntersectionObserverArgs): IntersectionObserverEntry | undefined;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=use-intersection-observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-intersection-observer.d.ts","sourceRoot":"","sources":["../../src/hooks/use-intersection-observer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,2BACR,SAAQ,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC9C;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACpC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,EACrC,EACE,SAAa,EACb,OAAO,EACP,UAAiB,EACjB,iBAAyB,GAC1B,GAAE,2BAAgC,GAClC,yBAAyB,GAAG,SAAS,CA4BvC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Returns the latest IntersectionObserverEntry for `elementRef`.
|
|
5
|
+
* Ported from vercel/front's `@vercel/hooks` `useIntersectionObserver`, with
|
|
6
|
+
* `root` threaded as a ref so we can observe inside a custom scroll container.
|
|
7
|
+
*/
|
|
8
|
+
export function useIntersectionObserver(elementRef, { threshold = 0, rootRef, rootMargin = '0%', freezeOnceVisible = false, } = {}) {
|
|
9
|
+
const [entry, setEntry] = useState();
|
|
10
|
+
const frozen = entry?.isIntersecting && freezeOnceVisible;
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const node = elementRef?.current;
|
|
13
|
+
const hasIOSupport = !!window.IntersectionObserver;
|
|
14
|
+
if (!hasIOSupport || frozen || !node)
|
|
15
|
+
return;
|
|
16
|
+
const updateEntry = ([entry]) => {
|
|
17
|
+
setEntry(entry);
|
|
18
|
+
};
|
|
19
|
+
const observer = new IntersectionObserver(updateEntry, {
|
|
20
|
+
threshold,
|
|
21
|
+
root: rootRef?.current ?? null,
|
|
22
|
+
rootMargin,
|
|
23
|
+
});
|
|
24
|
+
observer.observe(node);
|
|
25
|
+
return () => observer.disconnect();
|
|
26
|
+
}, [elementRef, threshold, rootRef, rootMargin, frozen]);
|
|
27
|
+
return entry;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWludGVyc2VjdGlvbi1vYnNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2UtaW50ZXJzZWN0aW9uLW9ic2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQztBQUdiLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBWTVDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLFVBQXFDLEVBQ3JDLEVBQ0UsU0FBUyxHQUFHLENBQUMsRUFDYixPQUFPLEVBQ1AsVUFBVSxHQUFHLElBQUksRUFDakIsaUJBQWlCLEdBQUcsS0FBSyxNQUNNLEVBQUU7SUFFbkMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxRQUFRLEVBQTZCLENBQUM7SUFFaEUsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUFFLGNBQWMsSUFBSSxpQkFBaUIsQ0FBQztJQUUxRCxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsTUFBTSxJQUFJLEdBQUcsVUFBVSxFQUFFLE9BQU8sQ0FBQztRQUVqQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO1FBRW5ELElBQUksQ0FBQyxZQUFZLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFN0MsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBOEIsRUFBUSxFQUFFO1lBQ2pFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLG9CQUFvQixDQUFDLFdBQVcsRUFBRTtZQUNyRCxTQUFTO1lBQ1QsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSTtZQUM5QixVQUFVO1NBQ1gsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QixPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUV6RCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB0eXBlIHsgUmVmT2JqZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcblxuaW50ZXJmYWNlIFVzZUludGVyc2VjdGlvbk9ic2VydmVyQXJnc1xuICBleHRlbmRzIE9taXQ8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0LCAncm9vdCc+IHtcbiAgLyoqXG4gICAqIFNjcm9sbCBjb250YWluZXIgdGhlIHRhcmdldCBpcyBvYnNlcnZlZCB3aXRoaW4uIERlZmF1bHRzIHRvIHRoZSB2aWV3cG9ydC5cbiAgICogUGFzc2VkIGFzIGEgcmVmIHNvIGl0IHJlc29sdmVzIGFmdGVyIGNvbW1pdCAod2hlbiB0aGUgbm9kZSBleGlzdHMpLlxuICAgKi9cbiAgcm9vdFJlZj86IFJlZk9iamVjdDxFbGVtZW50IHwgbnVsbD47XG4gIGZyZWV6ZU9uY2VWaXNpYmxlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXRlc3QgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSBmb3IgYGVsZW1lbnRSZWZgLlxuICogUG9ydGVkIGZyb20gdmVyY2VsL2Zyb250J3MgYEB2ZXJjZWwvaG9va3NgIGB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlcmAsIHdpdGhcbiAqIGByb290YCB0aHJlYWRlZCBhcyBhIHJlZiBzbyB3ZSBjYW4gb2JzZXJ2ZSBpbnNpZGUgYSBjdXN0b20gc2Nyb2xsIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUludGVyc2VjdGlvbk9ic2VydmVyKFxuICBlbGVtZW50UmVmOiBSZWZPYmplY3Q8RWxlbWVudCB8IG51bGw+LFxuICB7XG4gICAgdGhyZXNob2xkID0gMCxcbiAgICByb290UmVmLFxuICAgIHJvb3RNYXJnaW4gPSAnMCUnLFxuICAgIGZyZWV6ZU9uY2VWaXNpYmxlID0gZmFsc2UsXG4gIH06IFVzZUludGVyc2VjdGlvbk9ic2VydmVyQXJncyA9IHt9XG4pOiBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgW2VudHJ5LCBzZXRFbnRyeV0gPSB1c2VTdGF0ZTxJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5PigpO1xuXG4gIGNvbnN0IGZyb3plbiA9IGVudHJ5Py5pc0ludGVyc2VjdGluZyAmJiBmcmVlemVPbmNlVmlzaWJsZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBlbGVtZW50UmVmPy5jdXJyZW50O1xuXG4gICAgY29uc3QgaGFzSU9TdXBwb3J0ID0gISF3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICBpZiAoIWhhc0lPU3VwcG9ydCB8fCBmcm96ZW4gfHwgIW5vZGUpIHJldHVybjtcblxuICAgIGNvbnN0IHVwZGF0ZUVudHJ5ID0gKFtlbnRyeV06IEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlbXSk6IHZvaWQgPT4ge1xuICAgICAgc2V0RW50cnkoZW50cnkpO1xuICAgIH07XG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih1cGRhdGVFbnRyeSwge1xuICAgICAgdGhyZXNob2xkLFxuICAgICAgcm9vdDogcm9vdFJlZj8uY3VycmVudCA/PyBudWxsLFxuICAgICAgcm9vdE1hcmdpbixcbiAgICB9KTtcblxuICAgIG9ic2VydmVyLm9ic2VydmUobm9kZSk7XG5cbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICB9LCBbZWxlbWVudFJlZiwgdGhyZXNob2xkLCByb290UmVmLCByb290TWFyZ2luLCBmcm96ZW5dKTtcblxuICByZXR1cm4gZW50cnk7XG59XG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
interface UseLoadMoreOnScrollOptions {
|
|
3
|
+
hasMore: boolean;
|
|
4
|
+
isLoadingMore: boolean;
|
|
5
|
+
/** Scroll container the sentinel lives in. Defaults to the viewport. */
|
|
6
|
+
rootRef?: RefObject<Element | null>;
|
|
7
|
+
rootMargin?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Triggers `loadMore` when a sentinel element scrolls into view.
|
|
11
|
+
* Returns a ref to attach to an invisible sentinel `<div>` placed after the
|
|
12
|
+
* list content. Ported from vercel/front's `@vercel/hooks`
|
|
13
|
+
* `useLoadMoreOnScroll`.
|
|
14
|
+
*
|
|
15
|
+
* Because it keys off `isIntersecting`/`isLoadingMore`, it self-continues:
|
|
16
|
+
* if the sentinel is still in view once a page finishes loading, the next
|
|
17
|
+
* page is requested automatically.
|
|
18
|
+
*/
|
|
19
|
+
export declare function useLoadMoreOnScroll(loadMore: () => void, { hasMore, isLoadingMore, rootRef, rootMargin, }: UseLoadMoreOnScrollOptions): RefObject<HTMLDivElement | null>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=use-load-more-on-scroll.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-load-more-on-scroll.d.ts","sourceRoot":"","sources":["../../src/hooks/use-load-more-on-scroll.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,UAAU,0BAA0B;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,wEAAwE;IACxE,OAAO,CAAC,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,IAAI,EACpB,EACE,OAAO,EACP,aAAa,EACb,OAAO,EACP,UAAoB,GACrB,EAAE,0BAA0B,oCAiB9B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import { useIntersectionObserver } from './use-intersection-observer';
|
|
4
|
+
/**
|
|
5
|
+
* Triggers `loadMore` when a sentinel element scrolls into view.
|
|
6
|
+
* Returns a ref to attach to an invisible sentinel `<div>` placed after the
|
|
7
|
+
* list content. Ported from vercel/front's `@vercel/hooks`
|
|
8
|
+
* `useLoadMoreOnScroll`.
|
|
9
|
+
*
|
|
10
|
+
* Because it keys off `isIntersecting`/`isLoadingMore`, it self-continues:
|
|
11
|
+
* if the sentinel is still in view once a page finishes loading, the next
|
|
12
|
+
* page is requested automatically.
|
|
13
|
+
*/
|
|
14
|
+
export function useLoadMoreOnScroll(loadMore, { hasMore, isLoadingMore, rootRef, rootMargin = '400px', }) {
|
|
15
|
+
const sentinelRef = useRef(null);
|
|
16
|
+
const entry = useIntersectionObserver(sentinelRef, { rootRef, rootMargin });
|
|
17
|
+
const loadMoreRef = useRef(loadMore);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
loadMoreRef.current = loadMore;
|
|
20
|
+
}, [loadMore]);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (entry?.isIntersecting && hasMore && !isLoadingMore) {
|
|
23
|
+
loadMoreRef.current();
|
|
24
|
+
}
|
|
25
|
+
}, [entry?.isIntersecting, hasMore, isLoadingMore]);
|
|
26
|
+
return sentinelRef;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWxvYWQtbW9yZS1vbi1zY3JvbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlLWxvYWQtbW9yZS1vbi1zY3JvbGwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWSxDQUFDO0FBR2IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFVdEU7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxRQUFvQixFQUNwQixFQUNFLE9BQU8sRUFDUCxhQUFhLEVBQ2IsT0FBTyxFQUNQLFVBQVUsR0FBRyxPQUFPLEdBQ087SUFFN0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFpQixJQUFJLENBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUU1RSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLFdBQVcsQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO0lBQ2pDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFZixTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxLQUFLLEVBQUUsY0FBYyxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZELFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUVwRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgdHlwZSB7IFJlZk9iamVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfSBmcm9tICcuL3VzZS1pbnRlcnNlY3Rpb24tb2JzZXJ2ZXInO1xuXG5pbnRlcmZhY2UgVXNlTG9hZE1vcmVPblNjcm9sbE9wdGlvbnMge1xuICBoYXNNb3JlOiBib29sZWFuO1xuICBpc0xvYWRpbmdNb3JlOiBib29sZWFuO1xuICAvKiogU2Nyb2xsIGNvbnRhaW5lciB0aGUgc2VudGluZWwgbGl2ZXMgaW4uIERlZmF1bHRzIHRvIHRoZSB2aWV3cG9ydC4gKi9cbiAgcm9vdFJlZj86IFJlZk9iamVjdDxFbGVtZW50IHwgbnVsbD47XG4gIHJvb3RNYXJnaW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHJpZ2dlcnMgYGxvYWRNb3JlYCB3aGVuIGEgc2VudGluZWwgZWxlbWVudCBzY3JvbGxzIGludG8gdmlldy5cbiAqIFJldHVybnMgYSByZWYgdG8gYXR0YWNoIHRvIGFuIGludmlzaWJsZSBzZW50aW5lbCBgPGRpdj5gIHBsYWNlZCBhZnRlciB0aGVcbiAqIGxpc3QgY29udGVudC4gUG9ydGVkIGZyb20gdmVyY2VsL2Zyb250J3MgYEB2ZXJjZWwvaG9va3NgXG4gKiBgdXNlTG9hZE1vcmVPblNjcm9sbGAuXG4gKlxuICogQmVjYXVzZSBpdCBrZXlzIG9mZiBgaXNJbnRlcnNlY3RpbmdgL2Bpc0xvYWRpbmdNb3JlYCwgaXQgc2VsZi1jb250aW51ZXM6XG4gKiBpZiB0aGUgc2VudGluZWwgaXMgc3RpbGwgaW4gdmlldyBvbmNlIGEgcGFnZSBmaW5pc2hlcyBsb2FkaW5nLCB0aGUgbmV4dFxuICogcGFnZSBpcyByZXF1ZXN0ZWQgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxvYWRNb3JlT25TY3JvbGwoXG4gIGxvYWRNb3JlOiAoKSA9PiB2b2lkLFxuICB7XG4gICAgaGFzTW9yZSxcbiAgICBpc0xvYWRpbmdNb3JlLFxuICAgIHJvb3RSZWYsXG4gICAgcm9vdE1hcmdpbiA9ICc0MDBweCcsXG4gIH06IFVzZUxvYWRNb3JlT25TY3JvbGxPcHRpb25zXG4pIHtcbiAgY29uc3Qgc2VudGluZWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBlbnRyeSA9IHVzZUludGVyc2VjdGlvbk9ic2VydmVyKHNlbnRpbmVsUmVmLCB7IHJvb3RSZWYsIHJvb3RNYXJnaW4gfSk7XG5cbiAgY29uc3QgbG9hZE1vcmVSZWYgPSB1c2VSZWYobG9hZE1vcmUpO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxvYWRNb3JlUmVmLmN1cnJlbnQgPSBsb2FkTW9yZTtcbiAgfSwgW2xvYWRNb3JlXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZW50cnk/LmlzSW50ZXJzZWN0aW5nICYmIGhhc01vcmUgJiYgIWlzTG9hZGluZ01vcmUpIHtcbiAgICAgIGxvYWRNb3JlUmVmLmN1cnJlbnQoKTtcbiAgICB9XG4gIH0sIFtlbnRyeT8uaXNJbnRlcnNlY3RpbmcsIGhhc01vcmUsIGlzTG9hZGluZ01vcmVdKTtcblxuICByZXR1cm4gc2VudGluZWxSZWY7XG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/lib/hydration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAOL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,MAAM,EACX,eAAe,EACf,KAAK,SAAS,EACd,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAgE7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../../src/lib/hydration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAOL,KAAK,QAAQ,EAEd,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,QAAQ,EACb,YAAY,EACZ,KAAK,MAAM,EACX,eAAe,EACf,KAAK,SAAS,EACd,uBAAuB,EACvB,UAAU,GACX,MAAM,qCAAqC,CAAC;AAgE7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,IAAI,QAAQ,CA+MzC;AAmBD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAMnD;AAMD,eAAO,MAAM,sBAAsB,cAAc,CAAC;AA0BlD,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMzD;AAMD,eAAO,MAAM,oBAAoB,iBAAiB,CAAC;AAiBnD,yDAAyD;AACzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMvD;AAsCD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAC9C,QAAQ,EAAE,CAAC,EACX,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,CAAC,CAAC,CAwDZ;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAkB7D"}
|
package/dist/lib/hydration.js
CHANGED
|
@@ -89,7 +89,8 @@ export function getWebRevivers() {
|
|
|
89
89
|
// Error family. The reducer side (see
|
|
90
90
|
// `packages/core/src/serialization/reducers/common.ts`) emits a tagged
|
|
91
91
|
// entry for each built-in Error subclass plus the workflow-specific
|
|
92
|
-
// `FatalError` / `RetryableError`
|
|
92
|
+
// `FatalError` / `RetryableError` / `HookConflictError` /
|
|
93
|
+
// `RuntimeDecryptionError` and `AggregateError`. Without
|
|
93
94
|
// matching revivers here, `devalue.unflatten` throws "Unknown type X"
|
|
94
95
|
// — which surfaces in the web o11y UI as "Failed to load resource
|
|
95
96
|
// details: Unknown type FatalError".
|
|
@@ -137,6 +138,18 @@ export function getWebRevivers() {
|
|
|
137
138
|
error.stack = value.stack;
|
|
138
139
|
return error;
|
|
139
140
|
},
|
|
141
|
+
HookConflictError: (value) => {
|
|
142
|
+
const opts = 'cause' in value ? { cause: value.cause } : undefined;
|
|
143
|
+
const error = new Error(value.message, opts);
|
|
144
|
+
error.name = 'HookConflictError';
|
|
145
|
+
error.token = value.token;
|
|
146
|
+
if (value.conflictingRunId !== undefined) {
|
|
147
|
+
error.conflictingRunId = value.conflictingRunId;
|
|
148
|
+
}
|
|
149
|
+
if (value.stack !== undefined)
|
|
150
|
+
error.stack = value.stack;
|
|
151
|
+
return error;
|
|
152
|
+
},
|
|
140
153
|
RetryableError: (value) => {
|
|
141
154
|
const opts = 'cause' in value ? { cause: value.cause } : undefined;
|
|
142
155
|
const error = new Error(value.message, opts);
|
|
@@ -154,6 +167,17 @@ export function getWebRevivers() {
|
|
|
154
167
|
}
|
|
155
168
|
return error;
|
|
156
169
|
},
|
|
170
|
+
RuntimeDecryptionError: (value) => {
|
|
171
|
+
const opts = 'cause' in value ? { cause: value.cause } : undefined;
|
|
172
|
+
const error = new Error(value.message, opts);
|
|
173
|
+
error.name = 'RuntimeDecryptionError';
|
|
174
|
+
if (value.context !== undefined) {
|
|
175
|
+
error.context = value.context;
|
|
176
|
+
}
|
|
177
|
+
if (value.stack !== undefined)
|
|
178
|
+
error.stack = value.stack;
|
|
179
|
+
return error;
|
|
180
|
+
},
|
|
157
181
|
DOMException: (value) => {
|
|
158
182
|
// Modern browsers and Node 18+ expose `DOMException` on globalThis.
|
|
159
183
|
// `AbortController.abort()` with no argument synthesizes one as the
|
|
@@ -431,4 +455,4 @@ export function hasEncryptedFields(resource) {
|
|
|
431
455
|
}
|
|
432
456
|
return false;
|
|
433
457
|
}
|
|
434
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9oeWRyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixpQkFBaUIsSUFBSSx3QkFBd0IsRUFDN0MsZUFBZSxFQUNmLGFBQWEsRUFDYixRQUFRLEVBQ1IscUJBQXFCLEVBRXJCLHVCQUF1QixHQUN4QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELG9EQUFvRDtBQUNwRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsUUFBUSxFQUNSLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUVaLGVBQWUsRUFFZix1QkFBdUIsRUFDdkIsVUFBVSxHQUNYLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsOEVBQThFO0FBQzlFLDZCQUE2QjtBQUM3Qiw4RUFBOEU7QUFFOUUsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjO0lBQ3pDLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENB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QVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1RCxNQUFNLENBQUMsR0FBRyxRQUFtQyxDQUFDO0lBRTlDLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2RCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBb0MsQ0FBQztRQUNsRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYi1zcGVjaWZpYyBoeWRyYXRpb24gZm9yIG8xMXkgZGlzcGxheS5cbiAqXG4gKiBCcm93c2VyLXNhZmUgcmV2aXZlcnMgdGhhdCB1c2UgYGF0b2IoKWAgZm9yIGJhc2U2NCBkZWNvZGluZyAobm8gTm9kZS5qc1xuICogYEJ1ZmZlcmAgZGVwZW5kZW5jeSkuIFByb2R1Y2VzIGBDbGFzc0luc3RhbmNlUmVmYCBvYmplY3RzIGFuZCBgU3RyZWFtUmVmYFxuICogb2JqZWN0cyBmb3IgVUkgcmVuZGVyaW5nLlxuICovXG5cbmltcG9ydCB7XG4gIGV4dHJhY3RDbGFzc05hbWUsXG4gIGh5ZHJhdGVSZXNvdXJjZUlPIGFzIGh5ZHJhdGVSZXNvdXJjZUlPR2VuZXJpYyxcbiAgaXNFbmNyeXB0ZWREYXRhLFxuICBpc0V4cGlyZWRTdHViLFxuICBpc1J1blJlZixcbiAgb2JzZXJ2YWJpbGl0eVJldml2ZXJzLFxuICB0eXBlIFJldml2ZXJzLFxuICBzZXJpYWxpemVkSW5zdGFuY2VUb1JlZixcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbi1mb3JtYXQnO1xuaW1wb3J0IHsgRVZFTlRfREFUQV9SRUZfRklFTERTIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxuLy8gUmUtZXhwb3J0IHR5cGVzIGFuZCB1dGlsaXRpZXMgdGhhdCBjb25zdW1lcnMgbmVlZFxuZXhwb3J0IHtcbiAgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUsXG4gIENsYXNzSW5zdGFuY2VSZWYsXG4gIEVOQ1JZUFRFRF9QTEFDRUhPTERFUixcbiAgZXh0cmFjdFN0cmVhbUlkcyxcbiAgaXNDbGFzc0luc3RhbmNlUmVmLFxuICBpc0VuY3J5cHRlZERhdGEsXG4gIGlzUnVuUmVmLFxuICBpc1N0cmVhbUlkLFxuICBpc1N0cmVhbVJlZixcbiAgdHlwZSBSZXZpdmVycyxcbiAgUlVOX1JFRl9UWVBFLFxuICB0eXBlIFJ1blJlZixcbiAgU1RSRUFNX1JFRl9UWVBFLFxuICB0eXBlIFN0cmVhbVJlZixcbiAgc2VyaWFsaXplZEluc3RhbmNlVG9SZWYsXG4gIHRydW5jYXRlSWQsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCcm93c2VyLXNhZmUgYmFzZTY0IGRlY29kZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGJhc2U2NFRvQXJyYXlCdWZmZXIoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gIGlmIChiYXNlNjQgPT09ICcnIHx8IGJhc2U2NCA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgfVxuICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKGJhc2U2NCk7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4gYnl0ZXMuYnVmZmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdlYiByZXZpdmVycyAoYnJvd3Nlci1zYWZlLCBubyBCdWZmZXIgZGVwZW5kZW5jeSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEJ1aWxkIGEgcmV2aXZlciBmb3Igb25lIG9mIHRoZSBidWlsdC1pbiBgRXJyb3JgIHN1YmNsYXNzZXMgKGUuZy5cbiAqIGBUeXBlRXJyb3JgLCBgUmFuZ2VFcnJvcmApLiBUaGUgY29uc3RydWN0b3IgZm9yIHRoZSBuYW1lZCBzdWJjbGFzcyBpc1xuICogcmVzb2x2ZWQgb2ZmIGBnbG9iYWxUaGlzYCBhdCBjYWxsIHRpbWUgc28gdGhlIHByb2R1Y2VkIGluc3RhbmNlIGhhcyB0aGVcbiAqIGNvcnJlY3QgcHJvdG90eXBlIGNoYWluIGluIHRoZSBjb25zdW1lciByZWFsbS4gRmFsbHMgYmFjayB0byBhIGdlbmVyaWNcbiAqIGBFcnJvcmAgKHdpdGggYG5hbWVgIHNldCkgaWYgdGhlIGdsb2JhbCBpc24ndCBhdmFpbGFibGUsIHdoaWNoIGtlZXBzIHRoZVxuICogbzExeSBVSSByZW5kZXJpbmcgZXZlbiBvbiBleG90aWMgYnJvd3NlcnMuXG4gKlxuICogYGNhdXNlYCBpcyBwYXNzZWQgdGhyb3VnaCBgRXJyb3JPcHRpb25zYCB0byB0aGUgY29uc3RydWN0b3Igd2hlbiBwcmVzZW50LFxuICogbWF0Y2hpbmcgYGdldENvbW1vblJldml2ZXJzYCBpbiBgQHdvcmtmbG93L2NvcmVgIHNvIHRoZSByZXN1bHRpbmcgYGNhdXNlYFxuICogcHJvcGVydHkgaGFzIHRoZSBzYW1lIHNlbWFudGljcyAobm9uLWVudW1lcmFibGUsIHNldCBieSB0aGUgZW5naW5lKSBhcyBhXG4gKiBmcmVzaGx5IHRocm93biBFcnJvciBpbiB0aGUgY29uc3VtZXIgcmVhbG0uIFRoZSBgJ2NhdXNlJyBpbiB2YWx1ZWAgY2hlY2tcbiAqIHByZXNlcnZlcyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBcIm5vIGNhdXNlXCIgYW5kIFwiY2F1c2UgaXMgdW5kZWZpbmVkXCIuXG4gKi9cbmZ1bmN0aW9uIG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcihcbiAgbmFtZTpcbiAgICB8ICdFdmFsRXJyb3InXG4gICAgfCAnUmFuZ2VFcnJvcidcbiAgICB8ICdSZWZlcmVuY2VFcnJvcidcbiAgICB8ICdTeW50YXhFcnJvcidcbiAgICB8ICdUeXBlRXJyb3InXG4gICAgfCAnVVJJRXJyb3InXG4pIHtcbiAgcmV0dXJuICh2YWx1ZTogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfSkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBDdG9yID0gKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbbmFtZV0gYXNcbiAgICAgIHwgRXJyb3JDb25zdHJ1Y3RvclxuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGVycm9yOiBFcnJvcjtcbiAgICBpZiAodHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yID0gbmV3IEN0b3IodmFsdWUubWVzc2FnZSwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHBhdGg6IG5vIGJ1aWx0LWluIHN1YmNsYXNzIGF2YWlsYWJsZSAoZXhvdGljIGVudikuIENvbnN0cnVjdFxuICAgICAgLy8gYSBwbGFpbiBFcnJvciB3aXRoIHRoZSByaWdodCBgbmFtZWAgYW5kIGNvcHkgYGNhdXNlYCBtYW51YWxseSBzaW5jZVxuICAgICAgLy8gdGhlIGJhc2UgRXJyb3IgY29uc3RydWN0b3IgaXMgd2hhdCB3ZSBhY3R1YWxseSBjYWxsZWQuXG4gICAgICBlcnJvciA9IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpLCB7IG5hbWUgfSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdlYi1zcGVjaWZpYyByZXZpdmVycyBmb3IgaHlkcmF0aW5nIHNlcmlhbGl6ZWQgZGF0YS5cbiAqXG4gKiBVc2VzIGBhdG9iKClgIGZvciBiYXNlNjQgZGVjb2RpbmcgKG5vIE5vZGUuanMgQnVmZmVyIGRlcGVuZGVuY3kpLlxuICogQWxsIHR5cGVzIGFyZSByZXZpdmVkIGFzIHJlYWwgaW5zdGFuY2VzIChEYXRlLCBNYXAsIFNldCwgVVJMLFxuICogVVJMU2VhcmNoUGFyYW1zLCBIZWFkZXJzLCBFcnJvciwgZXRjLikuXG4gKlxuICogTk9URTogdGhpcyBzZXQgbXVzdCBtaXJyb3IgdGhlIGtleXMgaW4gYFNlcmlhbGl6YWJsZVNwZWNpYWxgIChzZWVcbiAqIGBAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uL3R5cGVzYCkuIEFueSByZWR1Y2VyIGtleSBhZGRlZCBvbiB0aGVcbiAqIHNlcmlhbGl6YXRpb24gc2lkZSB0aGF0IGlzbid0IGNvdmVyZWQgaGVyZSB3aWxsIGNhdXNlIGBkZXZhbHVlLnVuZmxhdHRlbmBcbiAqIHRvIHRocm93IGBVbmtub3duIHR5cGUgWGAsIHdoaWNoIGBoeWRyYXRlUmVzb3VyY2VJT2Agc3dhbGxvd3MgYW5kXG4gKiBzdXJmYWNlcyBhcyBhIFwiRmFpbGVkIHRvIGxvYWQgcmVzb3VyY2UgZGV0YWlsc1wiIGJhbm5lciBpbiB0aGUgbzExeSBVSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYlJldml2ZXJzKCk6IFJldml2ZXJzIHtcbiAgZnVuY3Rpb24gcmV2aXZlQXJyYXlCdWZmZXIodmFsdWU6IHN0cmluZyk6IEFycmF5QnVmZmVyIHtcbiAgICByZXR1cm4gYmFzZTY0VG9BcnJheUJ1ZmZlcih2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8vIE8xMXktc3BlY2lmaWMgcmV2aXZlcnMgKHN0cmVhbXMsIHN0ZXAgZnVuY3Rpb25zIOKGkiBkaXNwbGF5IG9iamVjdHMpLlxuICAgIC8vIFNwcmVhZCBGSVJTVCBzbyB3ZWItc3BlY2lmaWMgb3ZlcnJpZGVzIGJlbG93IHRha2UgcHJlY2VkZW5jZS5cbiAgICAuLi5vYnNlcnZhYmlsaXR5UmV2aXZlcnMsXG5cbiAgICAvLyBCaW5hcnkgdHlwZXNcbiAgICBBcnJheUJ1ZmZlcjogcmV2aXZlQXJyYXlCdWZmZXIsXG4gICAgQmlnSW50OiAodmFsdWU6IHN0cmluZykgPT4gQmlnSW50KHZhbHVlKSxcbiAgICBCaWdJbnQ2NEFycmF5OiAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgIG5ldyBCaWdJbnQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgQmlnVWludDY0QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IEJpZ1VpbnQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgRGF0ZTogKHZhbHVlKSA9PiBuZXcgRGF0ZSh2YWx1ZSksXG5cbiAgICAvLyBFcnJvciBmYW1pbHkuIFRoZSByZWR1Y2VyIHNpZGUgKHNlZVxuICAgIC8vIGBwYWNrYWdlcy9jb3JlL3NyYy9zZXJpYWxpemF0aW9uL3JlZHVjZXJzL2NvbW1vbi50c2ApIGVtaXRzIGEgdGFnZ2VkXG4gICAgLy8gZW50cnkgZm9yIGVhY2ggYnVpbHQtaW4gRXJyb3Igc3ViY2xhc3MgcGx1cyB0aGUgd29ya2Zsb3ctc3BlY2lmaWNcbiAgICAvLyBgRmF0YWxFcnJvcmAgLyBgUmV0cnlhYmxlRXJyb3JgIGFuZCBgQWdncmVnYXRlRXJyb3JgLiBXaXRob3V0XG4gICAgLy8gbWF0Y2hpbmcgcmV2aXZlcnMgaGVyZSwgYGRldmFsdWUudW5mbGF0dGVuYCB0aHJvd3MgXCJVbmtub3duIHR5cGUgWFwiXG4gICAgLy8g4oCUIHdoaWNoIHN1cmZhY2VzIGluIHRoZSB3ZWIgbzExeSBVSSBhcyBcIkZhaWxlZCB0byBsb2FkIHJlc291cmNlXG4gICAgLy8gZGV0YWlsczogVW5rbm93biB0eXBlIEZhdGFsRXJyb3JcIi5cbiAgICBFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gJ2NhdXNlJyBpbiB2YWx1ZSA/IHsgY2F1c2U6IHZhbHVlLmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKTtcbiAgICAgIGVycm9yLm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBFdmFsRXJyb3I6IG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcignRXZhbEVycm9yJyksXG4gICAgUmFuZ2VFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdSYW5nZUVycm9yJyksXG4gICAgUmVmZXJlbmNlRXJyb3I6IG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcignUmVmZXJlbmNlRXJyb3InKSxcbiAgICBTeW50YXhFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdTeW50YXhFcnJvcicpLFxuICAgIFR5cGVFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdUeXBlRXJyb3InKSxcbiAgICBVUklFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdVUklFcnJvcicpLFxuICAgIEFnZ3JlZ2F0ZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IEN0b3IgPSAoXG4gICAgICAgIGdsb2JhbFRoaXMgYXMgeyBBZ2dyZWdhdGVFcnJvcj86IEFnZ3JlZ2F0ZUVycm9yQ29uc3RydWN0b3IgfVxuICAgICAgKS5BZ2dyZWdhdGVFcnJvcjtcbiAgICAgIGNvbnN0IGVycm9yID1cbiAgICAgICAgdHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IG5ldyBDdG9yKHZhbHVlLmVycm9ycywgdmFsdWUubWVzc2FnZSwgb3B0cylcbiAgICAgICAgICA6IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpLCB7XG4gICAgICAgICAgICAgIG5hbWU6ICdBZ2dyZWdhdGVFcnJvcicsXG4gICAgICAgICAgICAgIGVycm9yczogdmFsdWUuZXJyb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIC8vIGBGYXRhbEVycm9yYCBhbmQgYFJldHJ5YWJsZUVycm9yYCBhcmUgbm90IGJ1aWx0LWluIGJyb3dzZXIgZ2xvYmFscyxcbiAgICAvLyBzbyB3ZSBjYW4ndCByZXNvbHZlIGEgY29uc3RydWN0b3IgZnJvbSBnbG9iYWxUaGlzLiBUaGUgd2ViIG8xMXkgVUlcbiAgICAvLyBkb2Vzbid0IG5lZWQgYGluc3RhbmNlb2YgRmF0YWxFcnJvcmAgdG8gcGFzcyAobm8gdXNlciBjb2RlIHJ1bnNcbiAgICAvLyBoZXJlKSDigJQgaXQganVzdCBuZWVkcyBgbmFtZWAsIGBtZXNzYWdlYCwgYHN0YWNrYCwgYW5kIGFueSBleHRyYVxuICAgIC8vIGVudW1lcmFibGUgZmllbGRzIHRvIHJlbmRlci4gQ29uc3RydWN0IGEgcGxhaW4gYEVycm9yYCB3aXRoIGBuYW1lYFxuICAgIC8vIHNldDsgT2JqZWN0SW5zcGVjdG9yIHJlYWRzIGBjb25zdHJ1Y3Rvci5uYW1lYCBmb3IgdGhlIGRpc3BsYXllZFxuICAgIC8vIGNsYXNzIGxhYmVsLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGUgcmVhbCBjbGFzcywgc28gd2UgZW1pdCBhIHRhZ2dlZFxuICAgIC8vIEVycm9yIHdob3NlIGBuYW1lYCBmaWVsZCBjYXJyaWVzIHRoZSBjbGFzcyBpZGVudGl0eS4gVGhpcyBtYXRjaGVzXG4gICAgLy8gaG93IHRoZSBleGlzdGluZyBiYXNlIGBFcnJvcmAgcmV2aXZlciBwcmVzZW50cyB1bmtub3duIHN1YmNsYXNzZXMuXG4gICAgRmF0YWxFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gJ2NhdXNlJyBpbiB2YWx1ZSA/IHsgY2F1c2U6IHZhbHVlLmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnRmF0YWxFcnJvcic7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIFJldHJ5YWJsZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpIGFzIEVycm9yICYge1xuICAgICAgICByZXRyeUFmdGVyPzogRGF0ZTtcbiAgICAgIH07XG4gICAgICBlcnJvci5uYW1lID0gJ1JldHJ5YWJsZUVycm9yJztcbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgLy8gYHJldHJ5QWZ0ZXJgIGlzIHNlcmlhbGl6ZWQgYXMgYW4gZXBvY2ggbXMgbnVtYmVyIChzZWUgdGhlIHJ1bnRpbWVcbiAgICAgIC8vIFJldHJ5YWJsZUVycm9yIHJlZHVjZXIgZm9yIHRoZSByYXRpb25hbGUgYXJvdW5kIHJlYWxtLXNhZmV0eSkuXG4gICAgICAvLyBSZWh5ZHJhdGUgYXMgYSBEYXRlIHNvIG8xMXkgY29uc3VtZXJzIGNhbiByZW5kZXIgaXQgZGlyZWN0bHkuXG4gICAgICAvLyBHdWFyZCBhZ2FpbnN0IHBheWxvYWRzIGZyb20gb2xkZXIgcnVudGltZSB2ZXJzaW9ucyB0aGF0IHByZWRhdGVcbiAgICAgIC8vIHRoZSBmaWVsZCDigJQgd2l0aG91dCB0aGlzIGNoZWNrLCBgbmV3IERhdGUodW5kZWZpbmVkKWAgd291bGRcbiAgICAgIC8vIHByb2R1Y2UgYW4gSW52YWxpZCBEYXRlIHJhdGhlciB0aGFuIG9taXR0aW5nIHRoZSBwcm9wZXJ0eS5cbiAgICAgIGlmICh2YWx1ZS5yZXRyeUFmdGVyICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IucmV0cnlBZnRlciA9IG5ldyBEYXRlKHZhbHVlLnJldHJ5QWZ0ZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgRE9NRXhjZXB0aW9uOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIE1vZGVybiBicm93c2VycyBhbmQgTm9kZSAxOCsgZXhwb3NlIGBET01FeGNlcHRpb25gIG9uIGdsb2JhbFRoaXMuXG4gICAgICAvLyBgQWJvcnRDb250cm9sbGVyLmFib3J0KClgIHdpdGggbm8gYXJndW1lbnQgc3ludGhlc2l6ZXMgb25lIGFzIHRoZVxuICAgICAgLy8gc2lnbmFsJ3MgcmVhc29uLCBzbyB0aGlzIGlzIGEgY29tbW9uIHBheWxvYWQgZm9yIGFueSBhYm9ydGVkIHN0ZXAuXG4gICAgICBjb25zdCBHID0gZ2xvYmFsVGhpcyBhcyB7IERPTUV4Y2VwdGlvbj86IHR5cGVvZiBET01FeGNlcHRpb24gfTtcbiAgICAgIGlmICh0eXBlb2YgRy5ET01FeGNlcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgZSA9IG5ldyBHLkRPTUV4Y2VwdGlvbih2YWx1ZS5tZXNzYWdlLCB2YWx1ZS5uYW1lKTtcbiAgICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGUuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgICAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIChlIGFzIHsgY2F1c2U/OiB1bmtub3duIH0pLmNhdXNlID0gdmFsdWUuY2F1c2U7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IodmFsdWUubWVzc2FnZSk7XG4gICAgICBlcnJvci5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgaWYgKCdjYXVzZScgaW4gdmFsdWUpIHtcbiAgICAgICAgKGVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IHVua25vd24gfSkuY2F1c2UgPSB2YWx1ZS5jYXVzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIEZsb2F0MzJBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBGbG9hdDMyQXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBGbG9hdDY0QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgRmxvYXQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgSW50OEFycmF5OiAodmFsdWU6IHN0cmluZykgPT4gbmV3IEludDhBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIEludDE2QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgSW50MTZBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIEludDMyQXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgSW50MzJBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIE1hcDogKHZhbHVlKSA9PiBuZXcgTWFwKHZhbHVlKSxcbiAgICBSZWdFeHA6ICh2YWx1ZSkgPT4gbmV3IFJlZ0V4cCh2YWx1ZS5zb3VyY2UsIHZhbHVlLmZsYWdzKSxcbiAgICBTZXQ6ICh2YWx1ZSkgPT4gbmV3IFNldCh2YWx1ZSksXG4gICAgVWludDhBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBVaW50OEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgVWludDhDbGFtcGVkQXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgVWludDE2QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgVWludDE2QXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBVaW50MzJBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBVaW50MzJBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuXG4gICAgSGVhZGVyczogKHZhbHVlKSA9PiBuZXcgSGVhZGVycyh2YWx1ZSksXG4gICAgUmVxdWVzdDogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgICAgIGNvbnN0IGN0b3IgPSB7IFJlcXVlc3Q6IGZ1bmN0aW9uICgpIHt9IH0uUmVxdWVzdCE7XG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCB7XG4gICAgICAgIG1ldGhvZDogdmFsdWUubWV0aG9kLFxuICAgICAgICB1cmw6IHZhbHVlLnVybCxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModmFsdWUuaGVhZGVycyksXG4gICAgICAgIGJvZHk6IHZhbHVlLmJvZHksXG4gICAgICAgIGR1cGxleDogdmFsdWUuZHVwbGV4LFxuICAgICAgICAuLi4odmFsdWUucmVzcG9uc2VXcml0YWJsZVxuICAgICAgICAgID8geyByZXNwb25zZVdyaXRhYmxlOiB2YWx1ZS5yZXNwb25zZVdyaXRhYmxlIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIFJlc3BvbnNlOiAodmFsdWUpID0+IHtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICAgICAgY29uc3QgY3RvciA9IHsgUmVzcG9uc2U6IGZ1bmN0aW9uICgpIHt9IH0uUmVzcG9uc2UhO1xuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwge1xuICAgICAgICBzdGF0dXM6IHZhbHVlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogdmFsdWUuc3RhdHVzVGV4dCxcbiAgICAgICAgdXJsOiB2YWx1ZS51cmwsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHZhbHVlLmhlYWRlcnMpLFxuICAgICAgICBib2R5OiB2YWx1ZS5ib2R5LFxuICAgICAgICByZWRpcmVjdGVkOiB2YWx1ZS5yZWRpcmVjdGVkLFxuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgVVJMOiAodmFsdWUpID0+IG5ldyBVUkwodmFsdWUpLFxuICAgIFVSTFNlYXJjaFBhcmFtczogKHZhbHVlKSA9PiBuZXcgVVJMU2VhcmNoUGFyYW1zKHZhbHVlID09PSAnLicgPyAnJyA6IHZhbHVlKSxcblxuICAgIC8vIFdlYi1zcGVjaWZpYyBvdmVycmlkZXMgZm9yIGNsYXNzIGluc3RhbmNlcy5cbiAgICAvLyBDcmVhdGUgb2JqZWN0cyB3aXRoIGEgZHluYW1pY2FsbHktbmFtZWQgY29uc3RydWN0b3Igc28gdGhhdFxuICAgIC8vIHJlYWN0LWluc3BlY3RvciBzaG93cyB0aGUgY2xhc3MgbmFtZSAoaXQgcmVhZHMgY29uc3RydWN0b3IubmFtZSkuXG4gICAgQ2xhc3M6ICh2YWx1ZSkgPT4gYDxjbGFzczoke2V4dHJhY3RDbGFzc05hbWUodmFsdWUuY2xhc3NJZCl9PmAsXG4gICAgSW5zdGFuY2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gUnVuIGluc3RhbmNlcyBhcmUgcmVuZGVyZWQgYXMgY2xpY2thYmxlIFJ1blJlZiBiYWRnZXNcbiAgICAgIGNvbnN0IHJ1blJlZiA9IHNlcmlhbGl6ZWRJbnN0YW5jZVRvUmVmKHZhbHVlKTtcbiAgICAgIGlmIChpc1J1blJlZihydW5SZWYpKSB7XG4gICAgICAgIHJldHVybiBydW5SZWY7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBleHRyYWN0Q2xhc3NOYW1lKHZhbHVlLmNsYXNzSWQpO1xuICAgICAgY29uc3QgZGF0YSA9IHZhbHVlLmRhdGE7XG4gICAgICBjb25zdCBwcm9wcyA9XG4gICAgICAgIGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnID8geyAuLi5kYXRhIH0gOiB7IHZhbHVlOiBkYXRhIH07XG4gICAgICAvLyBDcmVhdGUgYSBjb25zdHJ1Y3RvciB3aXRoIHRoZSByaWdodCBuYW1lIHVzaW5nIGNvbXB1dGVkIHByb3BlcnR5XG4gICAgICAvLyBzbyByZWFjdC1pbnNwZWN0b3IncyBgb2JqZWN0LmNvbnN0cnVjdG9yLm5hbWVgIHNob3dzIHRoZSBjbGFzcyBuYW1lLlxuICAgICAgLy8gTXVzdCB1c2UgYGZ1bmN0aW9uYCAobm90IGFycm93KSBiZWNhdXNlIGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGUuXG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgICAgIGNvbnN0IGN0b3IgPSB7IFtjbGFzc05hbWVdOiBmdW5jdGlvbiAoKSB7fSB9W2NsYXNzTmFtZV0hO1xuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gICAgICBPYmplY3QuYXNzaWduKG9iaiwgcHJvcHMpO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByZS1idWlsdCB3ZWIgcmV2aXZlcnMgKGNhY2hlZCBmb3IgcGVyZm9ybWFuY2UpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IGNhY2hlZFJldml2ZXJzOiBSZXZpdmVycyB8IG51bGwgPSBudWxsO1xuXG5mdW5jdGlvbiBnZXRSZXZpdmVycygpOiBSZXZpdmVycyB7XG4gIGlmICghY2FjaGVkUmV2aXZlcnMpIHtcbiAgICBjYWNoZWRSZXZpdmVycyA9IGdldFdlYlJldml2ZXJzKCk7XG4gIH1cbiAgcmV0dXJuIGNhY2hlZFJldml2ZXJzO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFB1YmxpYyBBUElcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEh5ZHJhdGUgdGhlIHNlcmlhbGl6ZWQgZGF0YSBmaWVsZHMgb2YgYSByZXNvdXJjZSBmb3Igd2ViIGRpc3BsYXkuXG4gKlxuICogVXNlcyBicm93c2VyLXNhZmUgcmV2aXZlcnMgKGF0b2IgZm9yIGJhc2U2NCwgQ2xhc3NJbnN0YW5jZVJlZiBmb3JcbiAqIGN1c3RvbSBjbGFzc2VzLCBTdHJlYW1SZWYgZm9yIHN0cmVhbXMpLiBDYWxsIHRoaXMgb24gZGF0YSByZWNlaXZlZFxuICogZnJvbSB0aGUgc2VydmVyIGJlZm9yZSBwYXNzaW5nIGl0IHRvIFVJIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlUmVzb3VyY2VJTzxUPihyZXNvdXJjZTogVCk6IFQge1xuICBjb25zdCBoeWRyYXRlZCA9IGh5ZHJhdGVSZXNvdXJjZUlPR2VuZXJpYyhcbiAgICByZXNvdXJjZSBhcyBhbnksXG4gICAgZ2V0UmV2aXZlcnMoKVxuICApIGFzIFQ7XG4gIHJldHVybiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhNYXJrZXJzKGh5ZHJhdGVkKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFbmNyeXB0ZWQgZGF0YSBkaXNwbGF5IG1hcmtlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgRU5DUllQVEVEX0RJU1BMQVlfTkFNRSA9ICdFbmNyeXB0ZWQnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGRpc3BsYXktZnJpZW5kbHkgb2JqZWN0IGZvciBlbmNyeXB0ZWQgZGF0YS5cbiAqXG4gKiBVc2VzIHRoZSBzYW1lIG5hbWVkLWNvbnN0cnVjdG9yIHRyaWNrIGFzIHRoZSBJbnN0YW5jZSByZXZpdmVyIHNvIHRoYXRcbiAqIE9iamVjdEluc3BlY3RvciByZW5kZXJzIHRoZSBjb25zdHJ1Y3RvciBuYW1lIChcIvCflJIgRW5jcnlwdGVkXCIpIHdpdGggbm9cbiAqIGV4cGFuZGFibGUgY2hpbGRyZW4uIFRoZSBvcmlnaW5hbCBlbmNyeXB0ZWQgYnl0ZXMgYXJlIHN0b3JlZCBpbiBhXG4gKiBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBmb3IgbGF0ZXIgZGVjcnlwdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRW5jcnlwdGVkTWFya2VyKGRhdGE6IFVpbnQ4QXJyYXkpOiBvYmplY3Qge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgY29uc3QgY3RvciA9IHsgW0VOQ1JZUFRFRF9ESVNQTEFZX05BTUVdOiBmdW5jdGlvbiAoKSB7fSB9W1xuICAgIEVOQ1JZUFRFRF9ESVNQTEFZX05BTUVcbiAgXSE7XG4gIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xuICAvLyBTdG9yZSBvcmlnaW5hbCBieXRlcyBmb3IgZGVjcnlwdGlvbiwgYnV0IG5vbi1lbnVtZXJhYmxlIHNvXG4gIC8vIE9iamVjdEluc3BlY3RvciBkb2Vzbid0IHNob3cgdGhlbSBhcyBjaGlsZHJlblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAnX19lbmNyeXB0ZWREYXRhJywge1xuICAgIHZhbHVlOiBkYXRhLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gIH0pO1xuICByZXR1cm4gb2JqO1xufVxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBlbmNyeXB0ZWQgZGlzcGxheSBtYXJrZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHZhbHVlLmNvbnN0cnVjdG9yPy5uYW1lID09PSBFTkNSWVBURURfRElTUExBWV9OQU1FXG4gICk7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhwaXJlZCBkYXRhIGRpc3BsYXkgbWFya2Vyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBFWFBJUkVEX0RJU1BMQVlfTkFNRSA9ICdFeHBpcmVkIERhdGEnO1xuXG4vKipcbiAqIENyZWF0ZSBhIGRpc3BsYXktZnJpZW5kbHkgb2JqZWN0IGZvciBleHBpcmVkIGRhdGEuXG4gKlxuICogVXNlcyB0aGUgc2FtZSBuYW1lZC1jb25zdHJ1Y3RvciB0cmljayBhcyB0aGUgZW5jcnlwdGVkIG1hcmtlciBzbyB0aGF0XG4gKiBPYmplY3RJbnNwZWN0b3IgcmVuZGVycyB0aGUgY29uc3RydWN0b3IgbmFtZSAoXCJFeHBpcmVkIERhdGFcIikgd2l0aCBub1xuICogZXhwYW5kYWJsZSBjaGlsZHJlbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXhwaXJlZE1hcmtlcigpOiBvYmplY3Qge1xuICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L3VzZUFycm93RnVuY3Rpb246IGFycm93IGZ1bmN0aW9ucyBoYXZlIG5vIC5wcm90b3R5cGVcbiAgY29uc3QgY3RvciA9IHsgW0VYUElSRURfRElTUExBWV9OQU1FXTogZnVuY3Rpb24gKCkge30gfVtcbiAgICBFWFBJUkVEX0RJU1BMQVlfTkFNRVxuICBdITtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xufVxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBleHBpcmVkIGRhdGEgZGlzcGxheSBtYXJrZXIgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0V4cGlyZWRNYXJrZXIodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZS5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gRVhQSVJFRF9ESVNQTEFZX05BTUVcbiAgKTtcbn1cblxuLyoqIFJlcGxhY2UgYSBzaW5nbGUgZmllbGQgdmFsdWUgd2l0aCBhIGRpc3BsYXkgbWFya2VyIGlmIGl0J3MgZW5jcnlwdGVkIG9yIGV4cGlyZWQuICovXG5mdW5jdGlvbiB0b0Rpc3BsYXlNYXJrZXIodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKGlzRW5jcnlwdGVkRGF0YSh2YWx1ZSkpIHJldHVybiBjcmVhdGVFbmNyeXB0ZWRNYXJrZXIodmFsdWUgYXMgVWludDhBcnJheSk7XG4gIGlmIChpc0V4cGlyZWRTdHViKHZhbHVlKSkgcmV0dXJuIGNyZWF0ZUV4cGlyZWRNYXJrZXIoKTtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFBvc3QtcHJvY2VzcyBoeWRyYXRlZCByZXNvdXJjZSBkYXRhOiByZXBsYWNlIGVuY3J5cHRlZCBVaW50OEFycmF5IHZhbHVlc1xuICogYW5kIGV4cGlyZWQgc3R1YnMgd2l0aCBkaXNwbGF5LWZyaWVuZGx5IG1hcmtlciBvYmplY3RzIGluIGtub3duIGRhdGEgZmllbGRzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlRW5jcnlwdGVkQW5kRXhwaXJlZFdpdGhNYXJrZXJzPFQ+KHJlc291cmNlOiBUKTogVCB7XG4gIGlmICghcmVzb3VyY2UgfHwgdHlwZW9mIHJlc291cmNlICE9PSAnb2JqZWN0JykgcmV0dXJuIHJlc291cmNlO1xuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uciB9O1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIFsnaW5wdXQnLCAnb3V0cHV0JywgJ21ldGFkYXRhJywgJ2Vycm9yJ10pIHtcbiAgICByZXN1bHRba2V5XSA9IHRvRGlzcGxheU1hcmtlcihyZXN1bHRba2V5XSk7XG4gIH1cblxuICBpZiAocmVzdWx0LmV2ZW50RGF0YSAmJiB0eXBlb2YgcmVzdWx0LmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPVxuICAgICAgdHlwZW9mIHJlc3VsdC5ldmVudFR5cGUgPT09ICdzdHJpbmcnID8gcmVzdWx0LmV2ZW50VHlwZSA6ICcnO1xuICAgIGNvbnN0IHJlZktleXMgPSBFVkVOVF9EQVRBX1JFRl9GSUVMRFNbZXZlbnRUeXBlXSA/PyBbXTtcbiAgICBjb25zdCBlZCA9IHsgLi4uKHJlc3VsdC5ldmVudERhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcmVmS2V5cykge1xuICAgICAgaWYgKGtleSBpbiBlZCkge1xuICAgICAgICBlZFtrZXldID0gdG9EaXNwbGF5TWFya2VyKGVkW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuZXZlbnREYXRhID0gZWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59XG5cbi8qKlxuICogSHlkcmF0ZSByZXNvdXJjZSBkYXRhIHdpdGggZGVjcnlwdGlvbiBzdXBwb3J0LlxuICpcbiAqIFdoZW4gYSBrZXkgaXMgcHJvdmlkZWQsIGVuY3J5cHRlZCBmaWVsZHMgYXJlIGRlY3J5cHRlZCBiZWZvcmUgaHlkcmF0aW9uLlxuICogVGhpcyBpcyB0aGUgYXN5bmMgdmVyc2lvbiB1c2VkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiRGVjcnlwdFwiIGluIHRoZSB3ZWIgVUkuXG4gKlxuICogSGFuZGxlcyBib3RoIHRvcC1sZXZlbCBmaWVsZHMgKGlucHV0LCBvdXRwdXQsIG1ldGFkYXRhKSBhbmQgbmVzdGVkXG4gKiBldmVudERhdGEgc3ViZmllbGRzIHBlciBgRVZFTlRfREFUQV9SRUZfRklFTERTYCBmcm9tIGBAd29ya2Zsb3cvd29ybGRgIGZvciB0aGF0IGV2ZW50IHR5cGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoeWRyYXRlUmVzb3VyY2VJT1dpdGhLZXk8VD4oXG4gIHJlc291cmNlOiBULFxuICBrZXk6IFVpbnQ4QXJyYXlcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB7IGh5ZHJhdGVEYXRhV2l0aEtleSB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICdAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uLWZvcm1hdCdcbiAgKTtcbiAgY29uc3QgeyBpbXBvcnRLZXkgfSA9IGF3YWl0IGltcG9ydCgnQHdvcmtmbG93L2NvcmUvZW5jcnlwdGlvbicpO1xuICBjb25zdCBjcnlwdG9LZXkgPSBhd2FpdCBpbXBvcnRLZXkoa2V5KTtcbiAgY29uc3QgcmV2aXZlcnMgPSBnZXRSZXZpdmVycygpO1xuXG4gIC8qKiBFeHRyYWN0IG9yaWdpbmFsIGVuY3J5cHRlZCBieXRlcyBmcm9tIGEgbWFya2VyIG9yIHJhdyBVaW50OEFycmF5LCB0aGVuIGRlY3J5cHQgKyBoeWRyYXRlICovXG4gIGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHRGaWVsZChcbiAgICB2YWx1ZTogdW5rbm93bixcbiAgICByZXY6IFJldml2ZXJzLFxuICAgIGs6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgaW1wb3J0S2V5Pj5cbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgLy8gQWxyZWFkeS1oeWRyYXRlZDogZW5jcnlwdGVkIG1hcmtlciB3aXRoIHN0b3JlZCBieXRlc1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHJhdyA9ICh2YWx1ZSBhcyBhbnkpLl9fZW5jcnlwdGVkRGF0YSBhcyBVaW50OEFycmF5O1xuICAgICAgcmV0dXJuIGh5ZHJhdGVEYXRhV2l0aEtleShyYXcsIHJldiwgayk7XG4gICAgfVxuICAgIC8vIFJhdyBlbmNyeXB0ZWQgVWludDhBcnJheSAobm90IHlldCBoeWRyYXRlZClcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XG4gICAgICByZXR1cm4gaHlkcmF0ZURhdGFXaXRoS2V5KHZhbHVlLCByZXYsIGspO1xuICAgIH1cbiAgICAvLyBOb3QgZW5jcnlwdGVkIOKAlCByZXR1cm4gYXMtaXNcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uciB9O1xuXG4gIC8vIERlY3J5cHQgKyBoeWRyYXRlIHRvcC1sZXZlbCBzZXJpYWxpemVkIGZpZWxkcyAocnVucywgc3RlcHMsIGhvb2tzKVxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIFsnaW5wdXQnLCAnb3V0cHV0JywgJ21ldGFkYXRhJywgJ2Vycm9yJ10pIHtcbiAgICBpZiAoZmllbGQgaW4gcmVzdWx0KSB7XG4gICAgICByZXN1bHRbZmllbGRdID0gYXdhaXQgZGVjcnlwdEZpZWxkKHJlc3VsdFtmaWVsZF0sIHJldml2ZXJzLCBjcnlwdG9LZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlY3J5cHQgKyBoeWRyYXRlIGV2ZW50RGF0YSBzdWJmaWVsZHMgKGV2ZW50cylcbiAgaWYgKHJlc3VsdC5ldmVudERhdGEgJiYgdHlwZW9mIHJlc3VsdC5ldmVudERhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID1cbiAgICAgIHR5cGVvZiByZXN1bHQuZXZlbnRUeXBlID09PSAnc3RyaW5nJyA/IHJlc3VsdC5ldmVudFR5cGUgOiAnJztcbiAgICBjb25zdCByZWZLZXlzID0gRVZFTlRfREFUQV9SRUZfRklFTERTW2V2ZW50VHlwZV0gPz8gW107XG4gICAgY29uc3QgZXZlbnREYXRhID0geyAuLi4ocmVzdWx0LmV2ZW50RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHJlZktleXMpIHtcbiAgICAgIGlmIChmaWVsZCBpbiBldmVudERhdGEpIHtcbiAgICAgICAgZXZlbnREYXRhW2ZpZWxkXSA9IGF3YWl0IGRlY3J5cHRGaWVsZChcbiAgICAgICAgICBldmVudERhdGFbZmllbGRdLFxuICAgICAgICAgIHJldml2ZXJzLFxuICAgICAgICAgIGNyeXB0b0tleVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuZXZlbnREYXRhID0gZXZlbnREYXRhO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCBhcyBUO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBoeWRyYXRlZCByZXNvdXJjZSAoZXZlbnQsIHN0ZXAsIHJ1biwgZXRjLikgY29udGFpbnMgYW55XG4gKiBlbmNyeXB0ZWQgZGlzcGxheSBtYXJrZXJzLiBJbnNwZWN0cyB0aGUgc3RhbmRhcmQgdG9wLWxldmVsIGZpZWxkc1xuICogKGBpbnB1dGAsIGBvdXRwdXRgLCBgZXJyb3JgLCBgbWV0YWRhdGFgKSBhcyB3ZWxsIGFzIHRoZSBldmVudC10eXBlLXNwZWNpZmljXG4gKiBgZXZlbnREYXRhYCByZWYgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRW5jcnlwdGVkRmllbGRzKHJlc291cmNlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmICghcmVzb3VyY2UgfHwgdHlwZW9mIHJlc291cmNlICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCByID0gcmVzb3VyY2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydpbnB1dCcsICdvdXRwdXQnLCAnbWV0YWRhdGEnLCAnZXJyb3InXSkge1xuICAgIGlmIChpc0VuY3J5cHRlZE1hcmtlcihyW2tleV0pKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChyLmV2ZW50RGF0YSAmJiB0eXBlb2Ygci5ldmVudERhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgZXZlbnRUeXBlID0gdHlwZW9mIHIuZXZlbnRUeXBlID09PSAnc3RyaW5nJyA/IHIuZXZlbnRUeXBlIDogJyc7XG4gICAgY29uc3QgcmVmS2V5cyA9IEVWRU5UX0RBVEFfUkVGX0ZJRUxEU1tldmVudFR5cGVdID8/IFtdO1xuICAgIGNvbnN0IGVkID0gci5ldmVudERhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZm9yIChjb25zdCBrZXkgb2YgcmVmS2V5cykge1xuICAgICAgaWYgKGtleSBpbiBlZCAmJiBpc0VuY3J5cHRlZE1hcmtlcihlZFtrZXldKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19
|
|
458
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHlkcmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9oeWRyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixpQkFBaUIsSUFBSSx3QkFBd0IsRUFDN0MsZUFBZSxFQUNmLGFBQWEsRUFDYixRQUFRLEVBQ1IscUJBQXFCLEVBRXJCLHVCQUF1QixHQUN4QixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELG9EQUFvRDtBQUNwRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsUUFBUSxFQUNSLFVBQVUsRUFDVixXQUFXLEVBRVgsWUFBWSxFQUVaLGVBQWUsRUFFZix1QkFBdUIsRUFDdkIsVUFBVSxHQUNYLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsOEVBQThFO0FBQzlFLDZCQUE2QjtBQUM3Qiw4RUFBOEU7QUFFOUUsU0FBUyxtQkFBbUIsQ0FBQyxNQUFjO0lBQ3pDLElBQUksTUFBTSxLQUFLLEVBQUUsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDcEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENB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TUFBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxRQUFpQjtJQUNsRCxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1RCxNQUFNLENBQUMsR0FBRyxRQUFtQyxDQUFDO0lBRTlDLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2RCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBb0MsQ0FBQztRQUNsRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0QsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdlYi1zcGVjaWZpYyBoeWRyYXRpb24gZm9yIG8xMXkgZGlzcGxheS5cbiAqXG4gKiBCcm93c2VyLXNhZmUgcmV2aXZlcnMgdGhhdCB1c2UgYGF0b2IoKWAgZm9yIGJhc2U2NCBkZWNvZGluZyAobm8gTm9kZS5qc1xuICogYEJ1ZmZlcmAgZGVwZW5kZW5jeSkuIFByb2R1Y2VzIGBDbGFzc0luc3RhbmNlUmVmYCBvYmplY3RzIGFuZCBgU3RyZWFtUmVmYFxuICogb2JqZWN0cyBmb3IgVUkgcmVuZGVyaW5nLlxuICovXG5cbmltcG9ydCB7XG4gIGV4dHJhY3RDbGFzc05hbWUsXG4gIGh5ZHJhdGVSZXNvdXJjZUlPIGFzIGh5ZHJhdGVSZXNvdXJjZUlPR2VuZXJpYyxcbiAgaXNFbmNyeXB0ZWREYXRhLFxuICBpc0V4cGlyZWRTdHViLFxuICBpc1J1blJlZixcbiAgb2JzZXJ2YWJpbGl0eVJldml2ZXJzLFxuICB0eXBlIFJldml2ZXJzLFxuICBzZXJpYWxpemVkSW5zdGFuY2VUb1JlZixcbn0gZnJvbSAnQHdvcmtmbG93L2NvcmUvc2VyaWFsaXphdGlvbi1mb3JtYXQnO1xuaW1wb3J0IHsgRVZFTlRfREFUQV9SRUZfRklFTERTIH0gZnJvbSAnQHdvcmtmbG93L3dvcmxkJztcblxuLy8gUmUtZXhwb3J0IHR5cGVzIGFuZCB1dGlsaXRpZXMgdGhhdCBjb25zdW1lcnMgbmVlZFxuZXhwb3J0IHtcbiAgQ0xBU1NfSU5TVEFOQ0VfUkVGX1RZUEUsXG4gIENsYXNzSW5zdGFuY2VSZWYsXG4gIEVOQ1JZUFRFRF9QTEFDRUhPTERFUixcbiAgZXh0cmFjdFN0cmVhbUlkcyxcbiAgaXNDbGFzc0luc3RhbmNlUmVmLFxuICBpc0VuY3J5cHRlZERhdGEsXG4gIGlzUnVuUmVmLFxuICBpc1N0cmVhbUlkLFxuICBpc1N0cmVhbVJlZixcbiAgdHlwZSBSZXZpdmVycyxcbiAgUlVOX1JFRl9UWVBFLFxuICB0eXBlIFJ1blJlZixcbiAgU1RSRUFNX1JFRl9UWVBFLFxuICB0eXBlIFN0cmVhbVJlZixcbiAgc2VyaWFsaXplZEluc3RhbmNlVG9SZWYsXG4gIHRydW5jYXRlSWQsXG59IGZyb20gJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0JztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCcm93c2VyLXNhZmUgYmFzZTY0IGRlY29kZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGJhc2U2NFRvQXJyYXlCdWZmZXIoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gIGlmIChiYXNlNjQgPT09ICcnIHx8IGJhc2U2NCA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgfVxuICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKGJhc2U2NCk7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmluYXJ5U3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgfVxuICByZXR1cm4gYnl0ZXMuYnVmZmVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdlYiByZXZpdmVycyAoYnJvd3Nlci1zYWZlLCBubyBCdWZmZXIgZGVwZW5kZW5jeSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEJ1aWxkIGEgcmV2aXZlciBmb3Igb25lIG9mIHRoZSBidWlsdC1pbiBgRXJyb3JgIHN1YmNsYXNzZXMgKGUuZy5cbiAqIGBUeXBlRXJyb3JgLCBgUmFuZ2VFcnJvcmApLiBUaGUgY29uc3RydWN0b3IgZm9yIHRoZSBuYW1lZCBzdWJjbGFzcyBpc1xuICogcmVzb2x2ZWQgb2ZmIGBnbG9iYWxUaGlzYCBhdCBjYWxsIHRpbWUgc28gdGhlIHByb2R1Y2VkIGluc3RhbmNlIGhhcyB0aGVcbiAqIGNvcnJlY3QgcHJvdG90eXBlIGNoYWluIGluIHRoZSBjb25zdW1lciByZWFsbS4gRmFsbHMgYmFjayB0byBhIGdlbmVyaWNcbiAqIGBFcnJvcmAgKHdpdGggYG5hbWVgIHNldCkgaWYgdGhlIGdsb2JhbCBpc24ndCBhdmFpbGFibGUsIHdoaWNoIGtlZXBzIHRoZVxuICogbzExeSBVSSByZW5kZXJpbmcgZXZlbiBvbiBleG90aWMgYnJvd3NlcnMuXG4gKlxuICogYGNhdXNlYCBpcyBwYXNzZWQgdGhyb3VnaCBgRXJyb3JPcHRpb25zYCB0byB0aGUgY29uc3RydWN0b3Igd2hlbiBwcmVzZW50LFxuICogbWF0Y2hpbmcgYGdldENvbW1vblJldml2ZXJzYCBpbiBgQHdvcmtmbG93L2NvcmVgIHNvIHRoZSByZXN1bHRpbmcgYGNhdXNlYFxuICogcHJvcGVydHkgaGFzIHRoZSBzYW1lIHNlbWFudGljcyAobm9uLWVudW1lcmFibGUsIHNldCBieSB0aGUgZW5naW5lKSBhcyBhXG4gKiBmcmVzaGx5IHRocm93biBFcnJvciBpbiB0aGUgY29uc3VtZXIgcmVhbG0uIFRoZSBgJ2NhdXNlJyBpbiB2YWx1ZWAgY2hlY2tcbiAqIHByZXNlcnZlcyB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBcIm5vIGNhdXNlXCIgYW5kIFwiY2F1c2UgaXMgdW5kZWZpbmVkXCIuXG4gKi9cbmZ1bmN0aW9uIG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcihcbiAgbmFtZTpcbiAgICB8ICdFdmFsRXJyb3InXG4gICAgfCAnUmFuZ2VFcnJvcidcbiAgICB8ICdSZWZlcmVuY2VFcnJvcidcbiAgICB8ICdTeW50YXhFcnJvcidcbiAgICB8ICdUeXBlRXJyb3InXG4gICAgfCAnVVJJRXJyb3InXG4pIHtcbiAgcmV0dXJuICh2YWx1ZTogeyBtZXNzYWdlOiBzdHJpbmc7IHN0YWNrPzogc3RyaW5nOyBjYXVzZT86IHVua25vd24gfSkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBDdG9yID0gKGdsb2JhbFRoaXMgYXMgUmVjb3JkPHN0cmluZywgYW55PilbbmFtZV0gYXNcbiAgICAgIHwgRXJyb3JDb25zdHJ1Y3RvclxuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGVycm9yOiBFcnJvcjtcbiAgICBpZiAodHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yID0gbmV3IEN0b3IodmFsdWUubWVzc2FnZSwgb3B0cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZhbGxiYWNrIHBhdGg6IG5vIGJ1aWx0LWluIHN1YmNsYXNzIGF2YWlsYWJsZSAoZXhvdGljIGVudikuIENvbnN0cnVjdFxuICAgICAgLy8gYSBwbGFpbiBFcnJvciB3aXRoIHRoZSByaWdodCBgbmFtZWAgYW5kIGNvcHkgYGNhdXNlYCBtYW51YWxseSBzaW5jZVxuICAgICAgLy8gdGhlIGJhc2UgRXJyb3IgY29uc3RydWN0b3IgaXMgd2hhdCB3ZSBhY3R1YWxseSBjYWxsZWQuXG4gICAgICBlcnJvciA9IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpLCB7IG5hbWUgfSk7XG4gICAgfVxuICAgIGlmICh2YWx1ZS5zdGFjayAhPT0gdW5kZWZpbmVkKSBlcnJvci5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdlYi1zcGVjaWZpYyByZXZpdmVycyBmb3IgaHlkcmF0aW5nIHNlcmlhbGl6ZWQgZGF0YS5cbiAqXG4gKiBVc2VzIGBhdG9iKClgIGZvciBiYXNlNjQgZGVjb2RpbmcgKG5vIE5vZGUuanMgQnVmZmVyIGRlcGVuZGVuY3kpLlxuICogQWxsIHR5cGVzIGFyZSByZXZpdmVkIGFzIHJlYWwgaW5zdGFuY2VzIChEYXRlLCBNYXAsIFNldCwgVVJMLFxuICogVVJMU2VhcmNoUGFyYW1zLCBIZWFkZXJzLCBFcnJvciwgZXRjLikuXG4gKlxuICogTk9URTogdGhpcyBzZXQgbXVzdCBtaXJyb3IgdGhlIGtleXMgaW4gYFNlcmlhbGl6YWJsZVNwZWNpYWxgIChzZWVcbiAqIGBAd29ya2Zsb3cvY29yZS9zZXJpYWxpemF0aW9uL3R5cGVzYCkuIEFueSByZWR1Y2VyIGtleSBhZGRlZCBvbiB0aGVcbiAqIHNlcmlhbGl6YXRpb24gc2lkZSB0aGF0IGlzbid0IGNvdmVyZWQgaGVyZSB3aWxsIGNhdXNlIGBkZXZhbHVlLnVuZmxhdHRlbmBcbiAqIHRvIHRocm93IGBVbmtub3duIHR5cGUgWGAsIHdoaWNoIGBoeWRyYXRlUmVzb3VyY2VJT2Agc3dhbGxvd3MgYW5kXG4gKiBzdXJmYWNlcyBhcyBhIFwiRmFpbGVkIHRvIGxvYWQgcmVzb3VyY2UgZGV0YWlsc1wiIGJhbm5lciBpbiB0aGUgbzExeSBVSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYlJldml2ZXJzKCk6IFJldml2ZXJzIHtcbiAgZnVuY3Rpb24gcmV2aXZlQXJyYXlCdWZmZXIodmFsdWU6IHN0cmluZyk6IEFycmF5QnVmZmVyIHtcbiAgICByZXR1cm4gYmFzZTY0VG9BcnJheUJ1ZmZlcih2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8vIE8xMXktc3BlY2lmaWMgcmV2aXZlcnMgKHN0cmVhbXMsIHN0ZXAgZnVuY3Rpb25zIOKGkiBkaXNwbGF5IG9iamVjdHMpLlxuICAgIC8vIFNwcmVhZCBGSVJTVCBzbyB3ZWItc3BlY2lmaWMgb3ZlcnJpZGVzIGJlbG93IHRha2UgcHJlY2VkZW5jZS5cbiAgICAuLi5vYnNlcnZhYmlsaXR5UmV2aXZlcnMsXG5cbiAgICAvLyBCaW5hcnkgdHlwZXNcbiAgICBBcnJheUJ1ZmZlcjogcmV2aXZlQXJyYXlCdWZmZXIsXG4gICAgQmlnSW50OiAodmFsdWU6IHN0cmluZykgPT4gQmlnSW50KHZhbHVlKSxcbiAgICBCaWdJbnQ2NEFycmF5OiAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgIG5ldyBCaWdJbnQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgQmlnVWludDY0QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PlxuICAgICAgbmV3IEJpZ1VpbnQ2NEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgRGF0ZTogKHZhbHVlKSA9PiBuZXcgRGF0ZSh2YWx1ZSksXG5cbiAgICAvLyBFcnJvciBmYW1pbHkuIFRoZSByZWR1Y2VyIHNpZGUgKHNlZVxuICAgIC8vIGBwYWNrYWdlcy9jb3JlL3NyYy9zZXJpYWxpemF0aW9uL3JlZHVjZXJzL2NvbW1vbi50c2ApIGVtaXRzIGEgdGFnZ2VkXG4gICAgLy8gZW50cnkgZm9yIGVhY2ggYnVpbHQtaW4gRXJyb3Igc3ViY2xhc3MgcGx1cyB0aGUgd29ya2Zsb3ctc3BlY2lmaWNcbiAgICAvLyBgRmF0YWxFcnJvcmAgLyBgUmV0cnlhYmxlRXJyb3JgIC8gYEhvb2tDb25mbGljdEVycm9yYCAvXG4gICAgLy8gYFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3JgIGFuZCBgQWdncmVnYXRlRXJyb3JgLiBXaXRob3V0XG4gICAgLy8gbWF0Y2hpbmcgcmV2aXZlcnMgaGVyZSwgYGRldmFsdWUudW5mbGF0dGVuYCB0aHJvd3MgXCJVbmtub3duIHR5cGUgWFwiXG4gICAgLy8g4oCUIHdoaWNoIHN1cmZhY2VzIGluIHRoZSB3ZWIgbzExeSBVSSBhcyBcIkZhaWxlZCB0byBsb2FkIHJlc291cmNlXG4gICAgLy8gZGV0YWlsczogVW5rbm93biB0eXBlIEZhdGFsRXJyb3JcIi5cbiAgICBFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gJ2NhdXNlJyBpbiB2YWx1ZSA/IHsgY2F1c2U6IHZhbHVlLmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKTtcbiAgICAgIGVycm9yLm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBFdmFsRXJyb3I6IG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcignRXZhbEVycm9yJyksXG4gICAgUmFuZ2VFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdSYW5nZUVycm9yJyksXG4gICAgUmVmZXJlbmNlRXJyb3I6IG1ha2VXZWJFcnJvclN1YmNsYXNzUmV2aXZlcignUmVmZXJlbmNlRXJyb3InKSxcbiAgICBTeW50YXhFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdTeW50YXhFcnJvcicpLFxuICAgIFR5cGVFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdUeXBlRXJyb3InKSxcbiAgICBVUklFcnJvcjogbWFrZVdlYkVycm9yU3ViY2xhc3NSZXZpdmVyKCdVUklFcnJvcicpLFxuICAgIEFnZ3JlZ2F0ZUVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IEN0b3IgPSAoXG4gICAgICAgIGdsb2JhbFRoaXMgYXMgeyBBZ2dyZWdhdGVFcnJvcj86IEFnZ3JlZ2F0ZUVycm9yQ29uc3RydWN0b3IgfVxuICAgICAgKS5BZ2dyZWdhdGVFcnJvcjtcbiAgICAgIGNvbnN0IGVycm9yID1cbiAgICAgICAgdHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IG5ldyBDdG9yKHZhbHVlLmVycm9ycywgdmFsdWUubWVzc2FnZSwgb3B0cylcbiAgICAgICAgICA6IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpLCB7XG4gICAgICAgICAgICAgIG5hbWU6ICdBZ2dyZWdhdGVFcnJvcicsXG4gICAgICAgICAgICAgIGVycm9yczogdmFsdWUuZXJyb3JzLFxuICAgICAgICAgICAgfSk7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIC8vIGBGYXRhbEVycm9yYCBhbmQgYFJldHJ5YWJsZUVycm9yYCBhcmUgbm90IGJ1aWx0LWluIGJyb3dzZXIgZ2xvYmFscyxcbiAgICAvLyBzbyB3ZSBjYW4ndCByZXNvbHZlIGEgY29uc3RydWN0b3IgZnJvbSBnbG9iYWxUaGlzLiBUaGUgd2ViIG8xMXkgVUlcbiAgICAvLyBkb2Vzbid0IG5lZWQgYGluc3RhbmNlb2YgRmF0YWxFcnJvcmAgdG8gcGFzcyAobm8gdXNlciBjb2RlIHJ1bnNcbiAgICAvLyBoZXJlKSDigJQgaXQganVzdCBuZWVkcyBgbmFtZWAsIGBtZXNzYWdlYCwgYHN0YWNrYCwgYW5kIGFueSBleHRyYVxuICAgIC8vIGVudW1lcmFibGUgZmllbGRzIHRvIHJlbmRlci4gQ29uc3RydWN0IGEgcGxhaW4gYEVycm9yYCB3aXRoIGBuYW1lYFxuICAgIC8vIHNldDsgT2JqZWN0SW5zcGVjdG9yIHJlYWRzIGBjb25zdHJ1Y3Rvci5uYW1lYCBmb3IgdGhlIGRpc3BsYXllZFxuICAgIC8vIGNsYXNzIGxhYmVsLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGUgcmVhbCBjbGFzcywgc28gd2UgZW1pdCBhIHRhZ2dlZFxuICAgIC8vIEVycm9yIHdob3NlIGBuYW1lYCBmaWVsZCBjYXJyaWVzIHRoZSBjbGFzcyBpZGVudGl0eS4gVGhpcyBtYXRjaGVzXG4gICAgLy8gaG93IHRoZSBleGlzdGluZyBiYXNlIGBFcnJvcmAgcmV2aXZlciBwcmVzZW50cyB1bmtub3duIHN1YmNsYXNzZXMuXG4gICAgRmF0YWxFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gJ2NhdXNlJyBpbiB2YWx1ZSA/IHsgY2F1c2U6IHZhbHVlLmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnRmF0YWxFcnJvcic7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIEhvb2tDb25mbGljdEVycm9yOiAodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IG9wdHMgPSAnY2F1c2UnIGluIHZhbHVlID8geyBjYXVzZTogdmFsdWUuY2F1c2UgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHZhbHVlLm1lc3NhZ2UsIG9wdHMpIGFzIEVycm9yICYge1xuICAgICAgICB0b2tlbj86IHN0cmluZztcbiAgICAgICAgY29uZmxpY3RpbmdSdW5JZD86IHN0cmluZztcbiAgICAgIH07XG4gICAgICBlcnJvci5uYW1lID0gJ0hvb2tDb25mbGljdEVycm9yJztcbiAgICAgIGVycm9yLnRva2VuID0gdmFsdWUudG9rZW47XG4gICAgICBpZiAodmFsdWUuY29uZmxpY3RpbmdSdW5JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yLmNvbmZsaWN0aW5nUnVuSWQgPSB2YWx1ZS5jb25mbGljdGluZ1J1bklkO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBSZXRyeWFibGVFcnJvcjogKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBvcHRzID0gJ2NhdXNlJyBpbiB2YWx1ZSA/IHsgY2F1c2U6IHZhbHVlLmNhdXNlIH0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlLCBvcHRzKSBhcyBFcnJvciAmIHtcbiAgICAgICAgcmV0cnlBZnRlcj86IERhdGU7XG4gICAgICB9O1xuICAgICAgZXJyb3IubmFtZSA9ICdSZXRyeWFibGVFcnJvcic7XG4gICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZXJyb3Iuc3RhY2sgPSB2YWx1ZS5zdGFjaztcbiAgICAgIC8vIGByZXRyeUFmdGVyYCBpcyBzZXJpYWxpemVkIGFzIGFuIGVwb2NoIG1zIG51bWJlciAoc2VlIHRoZSBydW50aW1lXG4gICAgICAvLyBSZXRyeWFibGVFcnJvciByZWR1Y2VyIGZvciB0aGUgcmF0aW9uYWxlIGFyb3VuZCByZWFsbS1zYWZldHkpLlxuICAgICAgLy8gUmVoeWRyYXRlIGFzIGEgRGF0ZSBzbyBvMTF5IGNvbnN1bWVycyBjYW4gcmVuZGVyIGl0IGRpcmVjdGx5LlxuICAgICAgLy8gR3VhcmQgYWdhaW5zdCBwYXlsb2FkcyBmcm9tIG9sZGVyIHJ1bnRpbWUgdmVyc2lvbnMgdGhhdCBwcmVkYXRlXG4gICAgICAvLyB0aGUgZmllbGQg4oCUIHdpdGhvdXQgdGhpcyBjaGVjaywgYG5ldyBEYXRlKHVuZGVmaW5lZClgIHdvdWxkXG4gICAgICAvLyBwcm9kdWNlIGFuIEludmFsaWQgRGF0ZSByYXRoZXIgdGhhbiBvbWl0dGluZyB0aGUgcHJvcGVydHkuXG4gICAgICBpZiAodmFsdWUucmV0cnlBZnRlciAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yLnJldHJ5QWZ0ZXIgPSBuZXcgRGF0ZSh2YWx1ZS5yZXRyeUFmdGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9LFxuICAgIFJ1bnRpbWVEZWNyeXB0aW9uRXJyb3I6ICh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgb3B0cyA9ICdjYXVzZScgaW4gdmFsdWUgPyB7IGNhdXNlOiB2YWx1ZS5jYXVzZSB9IDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IodmFsdWUubWVzc2FnZSwgb3B0cykgYXMgRXJyb3IgJiB7XG4gICAgICAgIGNvbnRleHQ/OiB1bmtub3duO1xuICAgICAgfTtcbiAgICAgIGVycm9yLm5hbWUgPSAnUnVudGltZURlY3J5cHRpb25FcnJvcic7XG4gICAgICBpZiAodmFsdWUuY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGVycm9yLmNvbnRleHQgPSB2YWx1ZS5jb250ZXh0O1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfSxcbiAgICBET01FeGNlcHRpb246ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gTW9kZXJuIGJyb3dzZXJzIGFuZCBOb2RlIDE4KyBleHBvc2UgYERPTUV4Y2VwdGlvbmAgb24gZ2xvYmFsVGhpcy5cbiAgICAgIC8vIGBBYm9ydENvbnRyb2xsZXIuYWJvcnQoKWAgd2l0aCBubyBhcmd1bWVudCBzeW50aGVzaXplcyBvbmUgYXMgdGhlXG4gICAgICAvLyBzaWduYWwncyByZWFzb24sIHNvIHRoaXMgaXMgYSBjb21tb24gcGF5bG9hZCBmb3IgYW55IGFib3J0ZWQgc3RlcC5cbiAgICAgIGNvbnN0IEcgPSBnbG9iYWxUaGlzIGFzIHsgRE9NRXhjZXB0aW9uPzogdHlwZW9mIERPTUV4Y2VwdGlvbiB9O1xuICAgICAgaWYgKHR5cGVvZiBHLkRPTUV4Y2VwdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBlID0gbmV3IEcuRE9NRXhjZXB0aW9uKHZhbHVlLm1lc3NhZ2UsIHZhbHVlLm5hbWUpO1xuICAgICAgICBpZiAodmFsdWUuc3RhY2sgIT09IHVuZGVmaW5lZCkgZS5zdGFjayA9IHZhbHVlLnN0YWNrO1xuICAgICAgICBpZiAoJ2NhdXNlJyBpbiB2YWx1ZSkgKGUgYXMgeyBjYXVzZT86IHVua25vd24gfSkuY2F1c2UgPSB2YWx1ZS5jYXVzZTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcih2YWx1ZS5tZXNzYWdlKTtcbiAgICAgIGVycm9yLm5hbWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgaWYgKHZhbHVlLnN0YWNrICE9PSB1bmRlZmluZWQpIGVycm9yLnN0YWNrID0gdmFsdWUuc3RhY2s7XG4gICAgICBpZiAoJ2NhdXNlJyBpbiB2YWx1ZSkge1xuICAgICAgICAoZXJyb3IgYXMgRXJyb3IgJiB7IGNhdXNlPzogdW5rbm93biB9KS5jYXVzZSA9IHZhbHVlLmNhdXNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH0sXG4gICAgRmxvYXQzMkFycmF5OiAodmFsdWU6IHN0cmluZykgPT4gbmV3IEZsb2F0MzJBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIEZsb2F0NjRBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBGbG9hdDY0QXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBJbnQ4QXJyYXk6ICh2YWx1ZTogc3RyaW5nKSA9PiBuZXcgSW50OEFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgSW50MTZBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBJbnQxNkFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgSW50MzJBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBJbnQzMkFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG4gICAgTWFwOiAodmFsdWUpID0+IG5ldyBNYXAodmFsdWUpLFxuICAgIFJlZ0V4cDogKHZhbHVlKSA9PiBuZXcgUmVnRXhwKHZhbHVlLnNvdXJjZSwgdmFsdWUuZmxhZ3MpLFxuICAgIFNldDogKHZhbHVlKSA9PiBuZXcgU2V0KHZhbHVlKSxcbiAgICBVaW50OEFycmF5OiAodmFsdWU6IHN0cmluZykgPT4gbmV3IFVpbnQ4QXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBVaW50OENsYW1wZWRBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICBuZXcgVWludDhDbGFtcGVkQXJyYXkocmV2aXZlQXJyYXlCdWZmZXIodmFsdWUpKSxcbiAgICBVaW50MTZBcnJheTogKHZhbHVlOiBzdHJpbmcpID0+IG5ldyBVaW50MTZBcnJheShyZXZpdmVBcnJheUJ1ZmZlcih2YWx1ZSkpLFxuICAgIFVpbnQzMkFycmF5OiAodmFsdWU6IHN0cmluZykgPT4gbmV3IFVpbnQzMkFycmF5KHJldml2ZUFycmF5QnVmZmVyKHZhbHVlKSksXG5cbiAgICBIZWFkZXJzOiAodmFsdWUpID0+IG5ldyBIZWFkZXJzKHZhbHVlKSxcbiAgICBSZXF1ZXN0OiAodmFsdWUpID0+IHtcbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICAgICAgY29uc3QgY3RvciA9IHsgUmVxdWVzdDogZnVuY3Rpb24gKCkge30gfS5SZXF1ZXN0ITtcbiAgICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUoY3Rvci5wcm90b3R5cGUpO1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHtcbiAgICAgICAgbWV0aG9kOiB2YWx1ZS5tZXRob2QsXG4gICAgICAgIHVybDogdmFsdWUudXJsLFxuICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh2YWx1ZS5oZWFkZXJzKSxcbiAgICAgICAgYm9keTogdmFsdWUuYm9keSxcbiAgICAgICAgZHVwbGV4OiB2YWx1ZS5kdXBsZXgsXG4gICAgICAgIC4uLih2YWx1ZS5yZXNwb25zZVdyaXRhYmxlXG4gICAgICAgICAgPyB7IHJlc3BvbnNlV3JpdGFibGU6IHZhbHVlLnJlc3BvbnNlV3JpdGFibGUgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgUmVzcG9uc2U6ICh2YWx1ZSkgPT4ge1xuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS91c2VBcnJvd0Z1bmN0aW9uOiBhcnJvdyBmdW5jdGlvbnMgaGF2ZSBubyAucHJvdG90eXBlXG4gICAgICBjb25zdCBjdG9yID0geyBSZXNwb25zZTogZnVuY3Rpb24gKCkge30gfS5SZXNwb25zZSE7XG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCB7XG4gICAgICAgIHN0YXR1czogdmFsdWUuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB2YWx1ZS5zdGF0dXNUZXh0LFxuICAgICAgICB1cmw6IHZhbHVlLnVybCxcbiAgICAgICAgaGVhZGVyczogbmV3IEhlYWRlcnModmFsdWUuaGVhZGVycyksXG4gICAgICAgIGJvZHk6IHZhbHVlLmJvZHksXG4gICAgICAgIHJlZGlyZWN0ZWQ6IHZhbHVlLnJlZGlyZWN0ZWQsXG4gICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICBVUkw6ICh2YWx1ZSkgPT4gbmV3IFVSTCh2YWx1ZSksXG4gICAgVVJMU2VhcmNoUGFyYW1zOiAodmFsdWUpID0+IG5ldyBVUkxTZWFyY2hQYXJhbXModmFsdWUgPT09ICcuJyA/ICcnIDogdmFsdWUpLFxuXG4gICAgLy8gV2ViLXNwZWNpZmljIG92ZXJyaWRlcyBmb3IgY2xhc3MgaW5zdGFuY2VzLlxuICAgIC8vIENyZWF0ZSBvYmplY3RzIHdpdGggYSBkeW5hbWljYWxseS1uYW1lZCBjb25zdHJ1Y3RvciBzbyB0aGF0XG4gICAgLy8gcmVhY3QtaW5zcGVjdG9yIHNob3dzIHRoZSBjbGFzcyBuYW1lIChpdCByZWFkcyBjb25zdHJ1Y3Rvci5uYW1lKS5cbiAgICBDbGFzczogKHZhbHVlKSA9PiBgPGNsYXNzOiR7ZXh0cmFjdENsYXNzTmFtZSh2YWx1ZS5jbGFzc0lkKX0+YCxcbiAgICBJbnN0YW5jZTogKHZhbHVlKSA9PiB7XG4gICAgICAvLyBSdW4gaW5zdGFuY2VzIGFyZSByZW5kZXJlZCBhcyBjbGlja2FibGUgUnVuUmVmIGJhZGdlc1xuICAgICAgY29uc3QgcnVuUmVmID0gc2VyaWFsaXplZEluc3RhbmNlVG9SZWYodmFsdWUpO1xuICAgICAgaWYgKGlzUnVuUmVmKHJ1blJlZikpIHtcbiAgICAgICAgcmV0dXJuIHJ1blJlZjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGV4dHJhY3RDbGFzc05hbWUodmFsdWUuY2xhc3NJZCk7XG4gICAgICBjb25zdCBkYXRhID0gdmFsdWUuZGF0YTtcbiAgICAgIGNvbnN0IHByb3BzID1cbiAgICAgICAgZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyB7IC4uLmRhdGEgfSA6IHsgdmFsdWU6IGRhdGEgfTtcbiAgICAgIC8vIENyZWF0ZSBhIGNvbnN0cnVjdG9yIHdpdGggdGhlIHJpZ2h0IG5hbWUgdXNpbmcgY29tcHV0ZWQgcHJvcGVydHlcbiAgICAgIC8vIHNvIHJlYWN0LWluc3BlY3RvcidzIGBvYmplY3QuY29uc3RydWN0b3IubmFtZWAgc2hvd3MgdGhlIGNsYXNzIG5hbWUuXG4gICAgICAvLyBNdXN0IHVzZSBgZnVuY3Rpb25gIChub3QgYXJyb3cpIGJlY2F1c2UgYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZS5cbiAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICAgICAgY29uc3QgY3RvciA9IHsgW2NsYXNzTmFtZV06IGZ1bmN0aW9uICgpIHt9IH1bY2xhc3NOYW1lXSE7XG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKGN0b3IucHJvdG90eXBlKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCBwcm9wcyk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHJlLWJ1aWx0IHdlYiByZXZpdmVycyAoY2FjaGVkIGZvciBwZXJmb3JtYW5jZSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5sZXQgY2FjaGVkUmV2aXZlcnM6IFJldml2ZXJzIHwgbnVsbCA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldFJldml2ZXJzKCk6IFJldml2ZXJzIHtcbiAgaWYgKCFjYWNoZWRSZXZpdmVycykge1xuICAgIGNhY2hlZFJldml2ZXJzID0gZ2V0V2ViUmV2aXZlcnMoKTtcbiAgfVxuICByZXR1cm4gY2FjaGVkUmV2aXZlcnM7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUHVibGljIEFQSVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSHlkcmF0ZSB0aGUgc2VyaWFsaXplZCBkYXRhIGZpZWxkcyBvZiBhIHJlc291cmNlIGZvciB3ZWIgZGlzcGxheS5cbiAqXG4gKiBVc2VzIGJyb3dzZXItc2FmZSByZXZpdmVycyAoYXRvYiBmb3IgYmFzZTY0LCBDbGFzc0luc3RhbmNlUmVmIGZvclxuICogY3VzdG9tIGNsYXNzZXMsIFN0cmVhbVJlZiBmb3Igc3RyZWFtcykuIENhbGwgdGhpcyBvbiBkYXRhIHJlY2VpdmVkXG4gKiBmcm9tIHRoZSBzZXJ2ZXIgYmVmb3JlIHBhc3NpbmcgaXQgdG8gVUkgY29tcG9uZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGVSZXNvdXJjZUlPPFQ+KHJlc291cmNlOiBUKTogVCB7XG4gIGNvbnN0IGh5ZHJhdGVkID0gaHlkcmF0ZVJlc291cmNlSU9HZW5lcmljKFxuICAgIHJlc291cmNlIGFzIGFueSxcbiAgICBnZXRSZXZpdmVycygpXG4gICkgYXMgVDtcbiAgcmV0dXJuIHJlcGxhY2VFbmNyeXB0ZWRBbmRFeHBpcmVkV2l0aE1hcmtlcnMoaHlkcmF0ZWQpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEVuY3J5cHRlZCBkYXRhIGRpc3BsYXkgbWFya2Vyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBFTkNSWVBURURfRElTUExBWV9OQU1FID0gJ0VuY3J5cHRlZCc7XG5cbi8qKlxuICogQ3JlYXRlIGEgZGlzcGxheS1mcmllbmRseSBvYmplY3QgZm9yIGVuY3J5cHRlZCBkYXRhLlxuICpcbiAqIFVzZXMgdGhlIHNhbWUgbmFtZWQtY29uc3RydWN0b3IgdHJpY2sgYXMgdGhlIEluc3RhbmNlIHJldml2ZXIgc28gdGhhdFxuICogT2JqZWN0SW5zcGVjdG9yIHJlbmRlcnMgdGhlIGNvbnN0cnVjdG9yIG5hbWUgKFwi8J+UkiBFbmNyeXB0ZWRcIikgd2l0aCBub1xuICogZXhwYW5kYWJsZSBjaGlsZHJlbi4gVGhlIG9yaWdpbmFsIGVuY3J5cHRlZCBieXRlcyBhcmUgc3RvcmVkIGluIGFcbiAqIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5IGZvciBsYXRlciBkZWNyeXB0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFbmNyeXB0ZWRNYXJrZXIoZGF0YTogVWludDhBcnJheSk6IG9iamVjdCB7XG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICBjb25zdCBjdG9yID0geyBbRU5DUllQVEVEX0RJU1BMQVlfTkFNRV06IGZ1bmN0aW9uICgpIHt9IH1bXG4gICAgRU5DUllQVEVEX0RJU1BMQVlfTkFNRVxuICBdITtcbiAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG4gIC8vIFN0b3JlIG9yaWdpbmFsIGJ5dGVzIGZvciBkZWNyeXB0aW9uLCBidXQgbm9uLWVudW1lcmFibGUgc29cbiAgLy8gT2JqZWN0SW5zcGVjdG9yIGRvZXNuJ3Qgc2hvdyB0aGVtIGFzIGNoaWxkcmVuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICdfX2VuY3J5cHRlZERhdGEnLCB7XG4gICAgdmFsdWU6IGRhdGEsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgfSk7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIGVuY3J5cHRlZCBkaXNwbGF5IG1hcmtlciAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICAgdmFsdWUuY29uc3RydWN0b3I/Lm5hbWUgPT09IEVOQ1JZUFRFRF9ESVNQTEFZX05BTUVcbiAgKTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeHBpcmVkIGRhdGEgZGlzcGxheSBtYXJrZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IEVYUElSRURfRElTUExBWV9OQU1FID0gJ0V4cGlyZWQgRGF0YSc7XG5cbi8qKlxuICogQ3JlYXRlIGEgZGlzcGxheS1mcmllbmRseSBvYmplY3QgZm9yIGV4cGlyZWQgZGF0YS5cbiAqXG4gKiBVc2VzIHRoZSBzYW1lIG5hbWVkLWNvbnN0cnVjdG9yIHRyaWNrIGFzIHRoZSBlbmNyeXB0ZWQgbWFya2VyIHNvIHRoYXRcbiAqIE9iamVjdEluc3BlY3RvciByZW5kZXJzIHRoZSBjb25zdHJ1Y3RvciBuYW1lIChcIkV4cGlyZWQgRGF0YVwiKSB3aXRoIG5vXG4gKiBleHBhbmRhYmxlIGNoaWxkcmVuLlxuICovXG5mdW5jdGlvbiBjcmVhdGVFeHBpcmVkTWFya2VyKCk6IG9iamVjdCB7XG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvdXNlQXJyb3dGdW5jdGlvbjogYXJyb3cgZnVuY3Rpb25zIGhhdmUgbm8gLnByb3RvdHlwZVxuICBjb25zdCBjdG9yID0geyBbRVhQSVJFRF9ESVNQTEFZX05BTUVdOiBmdW5jdGlvbiAoKSB7fSB9W1xuICAgIEVYUElSRURfRElTUExBWV9OQU1FXG4gIF0hO1xuICByZXR1cm4gT2JqZWN0LmNyZWF0ZShjdG9yLnByb3RvdHlwZSk7XG59XG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGFuIGV4cGlyZWQgZGF0YSBkaXNwbGF5IG1hcmtlciAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwaXJlZE1hcmtlcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgIHZhbHVlLmNvbnN0cnVjdG9yPy5uYW1lID09PSBFWFBJUkVEX0RJU1BMQVlfTkFNRVxuICApO1xufVxuXG4vKiogUmVwbGFjZSBhIHNpbmdsZSBmaWVsZCB2YWx1ZSB3aXRoIGEgZGlzcGxheSBtYXJrZXIgaWYgaXQncyBlbmNyeXB0ZWQgb3IgZXhwaXJlZC4gKi9cbmZ1bmN0aW9uIHRvRGlzcGxheU1hcmtlcih2YWx1ZTogdW5rbm93bik6IHVua25vd24ge1xuICBpZiAoaXNFbmNyeXB0ZWREYXRhKHZhbHVlKSkgcmV0dXJuIGNyZWF0ZUVuY3J5cHRlZE1hcmtlcih2YWx1ZSBhcyBVaW50OEFycmF5KTtcbiAgaWYgKGlzRXhwaXJlZFN0dWIodmFsdWUpKSByZXR1cm4gY3JlYXRlRXhwaXJlZE1hcmtlcigpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogUG9zdC1wcm9jZXNzIGh5ZHJhdGVkIHJlc291cmNlIGRhdGE6IHJlcGxhY2UgZW5jcnlwdGVkIFVpbnQ4QXJyYXkgdmFsdWVzXG4gKiBhbmQgZXhwaXJlZCBzdHVicyB3aXRoIGRpc3BsYXktZnJpZW5kbHkgbWFya2VyIG9iamVjdHMgaW4ga25vd24gZGF0YSBmaWVsZHMuXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VFbmNyeXB0ZWRBbmRFeHBpcmVkV2l0aE1hcmtlcnM8VD4ocmVzb3VyY2U6IFQpOiBUIHtcbiAgaWYgKCFyZXNvdXJjZSB8fCB0eXBlb2YgcmVzb3VyY2UgIT09ICdvYmplY3QnKSByZXR1cm4gcmVzb3VyY2U7XG4gIGNvbnN0IHIgPSByZXNvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5yIH07XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydpbnB1dCcsICdvdXRwdXQnLCAnbWV0YWRhdGEnLCAnZXJyb3InXSkge1xuICAgIHJlc3VsdFtrZXldID0gdG9EaXNwbGF5TWFya2VyKHJlc3VsdFtrZXldKTtcbiAgfVxuXG4gIGlmIChyZXN1bHQuZXZlbnREYXRhICYmIHR5cGVvZiByZXN1bHQuZXZlbnREYXRhID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGV2ZW50VHlwZSA9XG4gICAgICB0eXBlb2YgcmVzdWx0LmV2ZW50VHlwZSA9PT0gJ3N0cmluZycgPyByZXN1bHQuZXZlbnRUeXBlIDogJyc7XG4gICAgY29uc3QgcmVmS2V5cyA9IEVWRU5UX0RBVEFfUkVGX0ZJRUxEU1tldmVudFR5cGVdID8/IFtdO1xuICAgIGNvbnN0IGVkID0geyAuLi4ocmVzdWx0LmV2ZW50RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiByZWZLZXlzKSB7XG4gICAgICBpZiAoa2V5IGluIGVkKSB7XG4gICAgICAgIGVkW2tleV0gPSB0b0Rpc3BsYXlNYXJrZXIoZWRba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5ldmVudERhdGEgPSBlZDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgYXMgVDtcbn1cblxuLyoqXG4gKiBIeWRyYXRlIHJlc291cmNlIGRhdGEgd2l0aCBkZWNyeXB0aW9uIHN1cHBvcnQuXG4gKlxuICogV2hlbiBhIGtleSBpcyBwcm92aWRlZCwgZW5jcnlwdGVkIGZpZWxkcyBhcmUgZGVjcnlwdGVkIGJlZm9yZSBoeWRyYXRpb24uXG4gKiBUaGlzIGlzIHRoZSBhc3luYyB2ZXJzaW9uIHVzZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgXCJEZWNyeXB0XCIgaW4gdGhlIHdlYiBVSS5cbiAqXG4gKiBIYW5kbGVzIGJvdGggdG9wLWxldmVsIGZpZWxkcyAoaW5wdXQsIG91dHB1dCwgbWV0YWRhdGEpIGFuZCBuZXN0ZWRcbiAqIGV2ZW50RGF0YSBzdWJmaWVsZHMgcGVyIGBFVkVOVF9EQVRBX1JFRl9GSUVMRFNgIGZyb20gYEB3b3JrZmxvdy93b3JsZGAgZm9yIHRoYXQgZXZlbnQgdHlwZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGh5ZHJhdGVSZXNvdXJjZUlPV2l0aEtleTxUPihcbiAgcmVzb3VyY2U6IFQsXG4gIGtleTogVWludDhBcnJheVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHsgaHlkcmF0ZURhdGFXaXRoS2V5IH0gPSBhd2FpdCBpbXBvcnQoXG4gICAgJ0B3b3JrZmxvdy9jb3JlL3NlcmlhbGl6YXRpb24tZm9ybWF0J1xuICApO1xuICBjb25zdCB7IGltcG9ydEtleSB9ID0gYXdhaXQgaW1wb3J0KCdAd29ya2Zsb3cvY29yZS9lbmNyeXB0aW9uJyk7XG4gIGNvbnN0IGNyeXB0b0tleSA9IGF3YWl0IGltcG9ydEtleShrZXkpO1xuICBjb25zdCByZXZpdmVycyA9IGdldFJldml2ZXJzKCk7XG5cbiAgLyoqIEV4dHJhY3Qgb3JpZ2luYWwgZW5jcnlwdGVkIGJ5dGVzIGZyb20gYSBtYXJrZXIgb3IgcmF3IFVpbnQ4QXJyYXksIHRoZW4gZGVjcnlwdCArIGh5ZHJhdGUgKi9cbiAgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdEZpZWxkKFxuICAgIHZhbHVlOiB1bmtub3duLFxuICAgIHJldjogUmV2aXZlcnMsXG4gICAgazogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBpbXBvcnRLZXk+PlxuICApOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAvLyBBbHJlYWR5LWh5ZHJhdGVkOiBlbmNyeXB0ZWQgbWFya2VyIHdpdGggc3RvcmVkIGJ5dGVzXG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHZhbHVlKSkge1xuICAgICAgY29uc3QgcmF3ID0gKHZhbHVlIGFzIGFueSkuX19lbmNyeXB0ZWREYXRhIGFzIFVpbnQ4QXJyYXk7XG4gICAgICByZXR1cm4gaHlkcmF0ZURhdGFXaXRoS2V5KHJhdywgcmV2LCBrKTtcbiAgICB9XG4gICAgLy8gUmF3IGVuY3J5cHRlZCBVaW50OEFycmF5IChub3QgeWV0IGh5ZHJhdGVkKVxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgIHJldHVybiBoeWRyYXRlRGF0YVdpdGhLZXkodmFsdWUsIHJldiwgayk7XG4gICAgfVxuICAgIC8vIE5vdCBlbmNyeXB0ZWQg4oCUIHJldHVybiBhcy1pc1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGNvbnN0IHIgPSByZXNvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5yIH07XG5cbiAgLy8gRGVjcnlwdCArIGh5ZHJhdGUgdG9wLWxldmVsIHNlcmlhbGl6ZWQgZmllbGRzIChydW5zLCBzdGVwcywgaG9va3MpXG4gIGZvciAoY29uc3QgZmllbGQgb2YgWydpbnB1dCcsICdvdXRwdXQnLCAnbWV0YWRhdGEnLCAnZXJyb3InXSkge1xuICAgIGlmIChmaWVsZCBpbiByZXN1bHQpIHtcbiAgICAgIHJlc3VsdFtmaWVsZF0gPSBhd2FpdCBkZWNyeXB0RmllbGQocmVzdWx0W2ZpZWxkXSwgcmV2aXZlcnMsIGNyeXB0b0tleSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRGVjcnlwdCArIGh5ZHJhdGUgZXZlbnREYXRhIHN1YmZpZWxkcyAoZXZlbnRzKVxuICBpZiAocmVzdWx0LmV2ZW50RGF0YSAmJiB0eXBlb2YgcmVzdWx0LmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPVxuICAgICAgdHlwZW9mIHJlc3VsdC5ldmVudFR5cGUgPT09ICdzdHJpbmcnID8gcmVzdWx0LmV2ZW50VHlwZSA6ICcnO1xuICAgIGNvbnN0IHJlZktleXMgPSBFVkVOVF9EQVRBX1JFRl9GSUVMRFNbZXZlbnRUeXBlXSA/PyBbXTtcbiAgICBjb25zdCBldmVudERhdGEgPSB7IC4uLihyZXN1bHQuZXZlbnREYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSB9O1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgcmVmS2V5cykge1xuICAgICAgaWYgKGZpZWxkIGluIGV2ZW50RGF0YSkge1xuICAgICAgICBldmVudERhdGFbZmllbGRdID0gYXdhaXQgZGVjcnlwdEZpZWxkKFxuICAgICAgICAgIGV2ZW50RGF0YVtmaWVsZF0sXG4gICAgICAgICAgcmV2aXZlcnMsXG4gICAgICAgICAgY3J5cHRvS2V5XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5ldmVudERhdGEgPSBldmVudERhdGE7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIFQ7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIGh5ZHJhdGVkIHJlc291cmNlIChldmVudCwgc3RlcCwgcnVuLCBldGMuKSBjb250YWlucyBhbnlcbiAqIGVuY3J5cHRlZCBkaXNwbGF5IG1hcmtlcnMuIEluc3BlY3RzIHRoZSBzdGFuZGFyZCB0b3AtbGV2ZWwgZmllbGRzXG4gKiAoYGlucHV0YCwgYG91dHB1dGAsIGBlcnJvcmAsIGBtZXRhZGF0YWApIGFzIHdlbGwgYXMgdGhlIGV2ZW50LXR5cGUtc3BlY2lmaWNcbiAqIGBldmVudERhdGFgIHJlZiBmaWVsZHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNFbmNyeXB0ZWRGaWVsZHMocmVzb3VyY2U6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKCFyZXNvdXJjZSB8fCB0eXBlb2YgcmVzb3VyY2UgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHIgPSByZXNvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBbJ2lucHV0JywgJ291dHB1dCcsICdtZXRhZGF0YScsICdlcnJvciddKSB7XG4gICAgaWYgKGlzRW5jcnlwdGVkTWFya2VyKHJba2V5XSkpIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHIuZXZlbnREYXRhICYmIHR5cGVvZiByLmV2ZW50RGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBldmVudFR5cGUgPSB0eXBlb2Ygci5ldmVudFR5cGUgPT09ICdzdHJpbmcnID8gci5ldmVudFR5cGUgOiAnJztcbiAgICBjb25zdCByZWZLZXlzID0gRVZFTlRfREFUQV9SRUZfRklFTERTW2V2ZW50VHlwZV0gPz8gW107XG4gICAgY29uc3QgZWQgPSByLmV2ZW50RGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiByZWZLZXlzKSB7XG4gICAgICBpZiAoa2V5IGluIGVkICYmIGlzRW5jcnlwdGVkTWFya2VyKGVkW2tleV0pKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/web-shared",
|
|
3
3
|
"description": "Shared components for Workflow Observability UI",
|
|
4
|
-
"version": "5.0.0-beta.
|
|
4
|
+
"version": "5.0.0-beta.12",
|
|
5
5
|
"private": false,
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -53,9 +53,9 @@
|
|
|
53
53
|
"streamdown": "2.3.0",
|
|
54
54
|
"tailwind-merge": "3.5.0",
|
|
55
55
|
"tailwindcss": "4",
|
|
56
|
-
"@workflow/core": "5.0.0-beta.
|
|
56
|
+
"@workflow/core": "5.0.0-beta.12",
|
|
57
57
|
"@workflow/utils": "5.0.0-beta.3",
|
|
58
|
-
"@workflow/world": "5.0.0-beta.
|
|
58
|
+
"@workflow/world": "5.0.0-beta.7"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@biomejs/biome": "^2.4.4",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"ai": "6.0.116",
|
|
66
66
|
"typescript": "^5.9.3",
|
|
67
67
|
"vitest": "^4.0.18",
|
|
68
|
-
"@workflow/errors": "5.0.0-beta.
|
|
68
|
+
"@workflow/errors": "5.0.0-beta.7",
|
|
69
69
|
"@workflow/tsconfig": "5.0.0-beta.0"
|
|
70
70
|
},
|
|
71
71
|
"scripts": {
|
package/src/components/index.ts
CHANGED
|
@@ -38,3 +38,4 @@ export { MenuDropdown, type MenuDropdownOption } from './ui/menu-dropdown';
|
|
|
38
38
|
export { Spinner } from './ui/spinner';
|
|
39
39
|
export { WorkflowTraceViewer } from './workflow-trace-view';
|
|
40
40
|
export { NewTraceViewer } from './trace-viewer-new';
|
|
41
|
+
export { TraceViewerSkeleton } from './new-trace-viewer/components/trace-viewer-skeleton';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Circle } from 'lucide-react';
|
|
2
|
+
import { useRef } from 'react';
|
|
2
3
|
import { cn } from '../../../lib/utils';
|
|
3
4
|
import type { Span } from '../../trace-viewer/types';
|
|
4
5
|
import { formatDuration } from '../../trace-viewer/util/timing';
|
|
@@ -11,6 +12,7 @@ import {
|
|
|
11
12
|
import { isSpanDimmedBySearch, type SpanSearchResult } from '../search';
|
|
12
13
|
import { getSpanDurationMs } from '../utils';
|
|
13
14
|
import { MiddleTruncate } from './middle-truncate/middle-truncate';
|
|
15
|
+
import { ROW_HEIGHT_PX, useRowWindow } from './use-row-window';
|
|
14
16
|
|
|
15
17
|
interface EventStyle {
|
|
16
18
|
icon: React.ComponentType<{ className?: string }>;
|
|
@@ -103,23 +105,29 @@ const EventList = ({
|
|
|
103
105
|
searchResult: SpanSearchResult;
|
|
104
106
|
onSelectSpan: (spanId: string) => void;
|
|
105
107
|
}) => {
|
|
108
|
+
const listRef = useRef<HTMLUListElement>(null);
|
|
109
|
+
const { start, end } = useRowWindow(listRef, spans.length, ROW_HEIGHT_PX);
|
|
110
|
+
|
|
106
111
|
return (
|
|
107
112
|
<ul
|
|
113
|
+
ref={listRef}
|
|
108
114
|
id="event-list"
|
|
109
115
|
role="tree"
|
|
110
116
|
className="block min-h-0 overflow-visible divide-y divide-gray-alpha-400 border-b border-gray-alpha-400"
|
|
117
|
+
style={{
|
|
118
|
+
paddingTop: start * ROW_HEIGHT_PX,
|
|
119
|
+
paddingBottom: (spans.length - end) * ROW_HEIGHT_PX,
|
|
120
|
+
}}
|
|
111
121
|
>
|
|
112
|
-
{spans.map((span) =>
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
);
|
|
122
|
-
})}
|
|
122
|
+
{spans.slice(start, end).map((span) => (
|
|
123
|
+
<EventRow
|
|
124
|
+
key={span.spanId}
|
|
125
|
+
span={span}
|
|
126
|
+
isSelected={span.spanId === activeSpanId}
|
|
127
|
+
isDimmed={isSpanDimmedBySearch(span.spanId, searchResult)}
|
|
128
|
+
onSelectSpan={onSelectSpan}
|
|
129
|
+
/>
|
|
130
|
+
))}
|
|
123
131
|
</ul>
|
|
124
132
|
);
|
|
125
133
|
};
|