modestbench 0.9.1 → 0.9.2
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/CHANGELOG.md +8 -0
- package/dist/cli/builder.cjs +259 -0
- package/dist/cli/builder.cjs.map +1 -0
- package/dist/cli/builder.d.cts +37 -0
- package/dist/cli/builder.d.cts.map +1 -0
- package/dist/cli/builder.d.ts +37 -0
- package/dist/cli/builder.d.ts.map +1 -0
- package/dist/cli/builder.js +255 -0
- package/dist/cli/builder.js.map +1 -0
- package/dist/cli/commands/baseline.cjs +4 -33
- package/dist/cli/commands/baseline.cjs.map +1 -1
- package/dist/cli/commands/baseline.d.cts.map +1 -1
- package/dist/cli/commands/baseline.d.ts.map +1 -1
- package/dist/cli/commands/baseline.js +2 -31
- package/dist/cli/commands/baseline.js.map +1 -1
- package/dist/cli/commands/history.cjs +2 -14
- package/dist/cli/commands/history.cjs.map +1 -1
- package/dist/cli/commands/history.d.cts.map +1 -1
- package/dist/cli/commands/history.d.ts.map +1 -1
- package/dist/cli/commands/history.js +1 -13
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/context.cjs +60 -0
- package/dist/cli/context.cjs.map +1 -0
- package/dist/cli/context.d.cts +28 -0
- package/dist/cli/context.d.cts.map +1 -0
- package/dist/cli/context.d.ts +28 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +56 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/handlers.cjs +74 -0
- package/dist/cli/handlers.cjs.map +1 -0
- package/dist/cli/handlers.d.cts +13 -0
- package/dist/cli/handlers.d.cts.map +1 -0
- package/dist/cli/handlers.d.ts +13 -0
- package/dist/cli/handlers.d.ts.map +1 -0
- package/dist/cli/handlers.js +70 -0
- package/dist/cli/handlers.js.map +1 -0
- package/dist/cli/index.cjs +12 -724
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.d.cts +4 -39
- package/dist/cli/index.d.cts.map +1 -1
- package/dist/cli/index.d.ts +4 -39
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +9 -722
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/parsers/analyze.cjs +54 -0
- package/dist/cli/parsers/analyze.cjs.map +1 -0
- package/dist/cli/parsers/analyze.d.cts +37 -0
- package/dist/cli/parsers/analyze.d.cts.map +1 -0
- package/dist/cli/parsers/analyze.d.ts +37 -0
- package/dist/cli/parsers/analyze.d.ts.map +1 -0
- package/dist/cli/parsers/analyze.js +51 -0
- package/dist/cli/parsers/analyze.js.map +1 -0
- package/dist/cli/parsers/baseline.cjs +75 -0
- package/dist/cli/parsers/baseline.cjs.map +1 -0
- package/dist/cli/parsers/baseline.d.cts +59 -0
- package/dist/cli/parsers/baseline.d.cts.map +1 -0
- package/dist/cli/parsers/baseline.d.ts +59 -0
- package/dist/cli/parsers/baseline.d.ts.map +1 -0
- package/dist/cli/parsers/baseline.js +72 -0
- package/dist/cli/parsers/baseline.js.map +1 -0
- package/dist/cli/parsers/global.cjs +49 -0
- package/dist/cli/parsers/global.cjs.map +1 -0
- package/dist/cli/parsers/global.d.cts +45 -0
- package/dist/cli/parsers/global.d.cts.map +1 -0
- package/dist/cli/parsers/global.d.ts +45 -0
- package/dist/cli/parsers/global.d.ts.map +1 -0
- package/dist/cli/parsers/global.js +46 -0
- package/dist/cli/parsers/global.js.map +1 -0
- package/dist/cli/parsers/history.cjs +138 -0
- package/dist/cli/parsers/history.cjs.map +1 -0
- package/dist/cli/parsers/history.d.cts +108 -0
- package/dist/cli/parsers/history.d.cts.map +1 -0
- package/dist/cli/parsers/history.d.ts +108 -0
- package/dist/cli/parsers/history.d.ts.map +1 -0
- package/dist/cli/parsers/history.js +135 -0
- package/dist/cli/parsers/history.js.map +1 -0
- package/dist/cli/parsers/index.cjs +35 -0
- package/dist/cli/parsers/index.cjs.map +1 -0
- package/dist/cli/parsers/index.d.cts +15 -0
- package/dist/cli/parsers/index.d.cts.map +1 -0
- package/dist/cli/parsers/index.d.ts +15 -0
- package/dist/cli/parsers/index.d.ts.map +1 -0
- package/dist/cli/parsers/index.js +15 -0
- package/dist/cli/parsers/index.js.map +1 -0
- package/dist/cli/parsers/init.cjs +39 -0
- package/dist/cli/parsers/init.cjs.map +1 -0
- package/dist/cli/parsers/init.d.cts +32 -0
- package/dist/cli/parsers/init.d.cts.map +1 -0
- package/dist/cli/parsers/init.d.ts +32 -0
- package/dist/cli/parsers/init.d.ts.map +1 -0
- package/dist/cli/parsers/init.js +36 -0
- package/dist/cli/parsers/init.js.map +1 -0
- package/dist/cli/parsers/run.cjs +99 -0
- package/dist/cli/parsers/run.cjs.map +1 -0
- package/dist/cli/parsers/run.d.cts +62 -0
- package/dist/cli/parsers/run.d.cts.map +1 -0
- package/dist/cli/parsers/run.d.ts +62 -0
- package/dist/cli/parsers/run.d.ts.map +1 -0
- package/dist/cli/parsers/run.js +96 -0
- package/dist/cli/parsers/run.js.map +1 -0
- package/dist/cli/parsers/test.cjs +42 -0
- package/dist/cli/parsers/test.cjs.map +1 -0
- package/dist/cli/parsers/test.d.cts +31 -0
- package/dist/cli/parsers/test.d.cts.map +1 -0
- package/dist/cli/parsers/test.d.ts +31 -0
- package/dist/cli/parsers/test.d.ts.map +1 -0
- package/dist/cli/parsers/test.js +39 -0
- package/dist/cli/parsers/test.js.map +1 -0
- package/dist/cli/theme.cjs +35 -0
- package/dist/cli/theme.cjs.map +1 -0
- package/dist/cli/theme.d.cts +31 -0
- package/dist/cli/theme.d.cts.map +1 -0
- package/dist/cli/theme.d.ts +31 -0
- package/dist/cli/theme.d.ts.map +1 -0
- package/dist/cli/theme.js +32 -0
- package/dist/cli/theme.js.map +1 -0
- package/dist/errors/base.cjs +3 -12
- package/dist/errors/base.cjs.map +1 -1
- package/dist/errors/base.d.cts +0 -7
- package/dist/errors/base.d.cts.map +1 -1
- package/dist/errors/base.d.ts +0 -7
- package/dist/errors/base.d.ts.map +1 -1
- package/dist/errors/base.js +1 -9
- package/dist/errors/base.js.map +1 -1
- package/dist/services/profiler/profile-runner.cjs +11 -0
- package/dist/services/profiler/profile-runner.cjs.map +1 -1
- package/dist/services/profiler/profile-runner.d.cts +2 -0
- package/dist/services/profiler/profile-runner.d.cts.map +1 -1
- package/dist/services/profiler/profile-runner.d.ts +2 -0
- package/dist/services/profiler/profile-runner.d.ts.map +1 -1
- package/dist/services/profiler/profile-runner.js +11 -0
- package/dist/services/profiler/profile-runner.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/builder.ts +387 -0
- package/src/cli/commands/baseline.ts +7 -33
- package/src/cli/commands/history.ts +1 -16
- package/src/cli/context.ts +117 -0
- package/src/cli/handlers.ts +76 -0
- package/src/cli/index.ts +10 -1012
- package/src/cli/parsers/analyze.ts +61 -0
- package/src/cli/parsers/baseline.ts +92 -0
- package/src/cli/parsers/global.ts +51 -0
- package/src/cli/parsers/history.ts +168 -0
- package/src/cli/parsers/index.ts +28 -0
- package/src/cli/parsers/init.ts +45 -0
- package/src/cli/parsers/run.ts +118 -0
- package/src/cli/parsers/test.ts +46 -0
- package/src/cli/theme.ts +33 -0
- package/src/errors/base.ts +1 -10
- package/src/services/profiler/profile-runner.ts +15 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLI Signal Handlers
|
|
4
|
+
*
|
|
5
|
+
* Handles process signals (SIGINT, SIGTERM, etc.) and uncaught errors for
|
|
6
|
+
* graceful shutdown of benchmark runs.
|
|
7
|
+
*
|
|
8
|
+
* @packageDocumentation
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.setupSignalHandlers = void 0;
|
|
12
|
+
const constants_js_1 = require("../constants.cjs");
|
|
13
|
+
const index_js_1 = require("../errors/index.cjs");
|
|
14
|
+
const type_guards_js_1 = require("../utils/type-guards.cjs");
|
|
15
|
+
/**
|
|
16
|
+
* Handle process signals gracefully
|
|
17
|
+
*/
|
|
18
|
+
const setupSignalHandlers = (abortController) => {
|
|
19
|
+
let abortRequested = false;
|
|
20
|
+
const handleSignal = (signal) => {
|
|
21
|
+
if (abortRequested) {
|
|
22
|
+
// Second signal, force exit
|
|
23
|
+
console.log(`\nReceived ${signal} again, forcing exit...`);
|
|
24
|
+
process.exit(computeExitCode(signal));
|
|
25
|
+
}
|
|
26
|
+
console.log(`\nReceived ${signal}, aborting benchmarks...`);
|
|
27
|
+
abortRequested = true;
|
|
28
|
+
abortController.abort();
|
|
29
|
+
// Give a short grace period for cleanup, then exit
|
|
30
|
+
setTimeout(() => {
|
|
31
|
+
console.log('\nBenchmark aborted.');
|
|
32
|
+
process.exit(computeExitCode(signal));
|
|
33
|
+
}, constants_js_1.ABORT_TIMEOUT);
|
|
34
|
+
};
|
|
35
|
+
process
|
|
36
|
+
.once('SIGINT', handleSignal)
|
|
37
|
+
.once('SIGQUIT', handleSignal)
|
|
38
|
+
.once('SIGTERM', handleSignal)
|
|
39
|
+
.once('uncaughtException', (error) => {
|
|
40
|
+
// Wrap non-ModestBench errors with UnknownError
|
|
41
|
+
const wrappedError = (0, index_js_1.isModestBenchError)(error)
|
|
42
|
+
? error
|
|
43
|
+
: new index_js_1.UnknownError(error.message, { cause: error });
|
|
44
|
+
console.error(`${wrappedError}`);
|
|
45
|
+
process.exit(constants_js_1.ExitCodes.RUNTIME_ERROR);
|
|
46
|
+
})
|
|
47
|
+
.once('unhandledRejection', (reason) => {
|
|
48
|
+
const wrappedError = (0, index_js_1.isModestBenchError)(reason)
|
|
49
|
+
? reason
|
|
50
|
+
: new index_js_1.UnknownError((0, type_guards_js_1.isError)(reason) ? reason.message : String(reason), {
|
|
51
|
+
cause: reason,
|
|
52
|
+
});
|
|
53
|
+
console.error(`${wrappedError}`);
|
|
54
|
+
process.exit(constants_js_1.ExitCodes.RUNTIME_ERROR);
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
exports.setupSignalHandlers = setupSignalHandlers;
|
|
58
|
+
/**
|
|
59
|
+
* Compute the exit code based on the signal
|
|
60
|
+
*
|
|
61
|
+
* @param signal - The signal that caused the exit
|
|
62
|
+
* @returns The exit code
|
|
63
|
+
*/
|
|
64
|
+
const computeExitCode = (signal) => {
|
|
65
|
+
switch (signal) {
|
|
66
|
+
case 'SIGINT':
|
|
67
|
+
return 130; // 128 + 2
|
|
68
|
+
case 'SIGQUIT':
|
|
69
|
+
return 131; // 128 + 3
|
|
70
|
+
default:
|
|
71
|
+
return 143; // 128 + 15 (SIGTERM)
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/cli/handlers.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,mDAA2D;AAC3D,kDAAsE;AACtE,6DAAkD;AAElD;;GAEG;AACI,MAAM,mBAAmB,GAAG,CAAC,eAAgC,EAAQ,EAAE;IAC5E,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,MAAM,YAAY,GAAG,CAAC,MAAsB,EAAE,EAAE;QAC9C,IAAI,cAAc,EAAE,CAAC;YACnB,4BAA4B;YAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,yBAAyB,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,0BAA0B,CAAC,CAAC;QAC5D,cAAc,GAAG,IAAI,CAAC;QACtB,eAAe,CAAC,KAAK,EAAE,CAAC;QAExB,mDAAmD;QACnD,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,CAAC,EAAE,4BAAa,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO;SACJ,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;SAC5B,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;SAC7B,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;SAC7B,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QACnC,gDAAgD;QAChD,MAAM,YAAY,GAAU,IAAA,6BAAkB,EAAC,KAAK,CAAC;YACnD,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,uBAAY,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,wBAAS,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC,CAAC;SACD,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QACrC,MAAM,YAAY,GAAU,IAAA,6BAAkB,EAAC,MAAM,CAAC;YACpD,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAI,uBAAY,CAAC,IAAA,wBAAO,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBAClE,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,wBAAS,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AA1CW,QAAA,mBAAmB,uBA0C9B;AAEF;;;;;GAKG;AACH,MAAM,eAAe,GAAG,CAAC,MAAsB,EAAU,EAAE;IACzD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC,CAAC,UAAU;QACxB,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC,CAAC,UAAU;QACxB;YACE,OAAO,GAAG,CAAC,CAAC,qBAAqB;IACrC,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Signal Handlers
|
|
3
|
+
*
|
|
4
|
+
* Handles process signals (SIGINT, SIGTERM, etc.) and uncaught errors for
|
|
5
|
+
* graceful shutdown of benchmark runs.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Handle process signals gracefully
|
|
11
|
+
*/
|
|
12
|
+
export declare const setupSignalHandlers: (abortController: AbortController) => void;
|
|
13
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/cli/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,iBAAiB,eAAe,KAAG,IA0CtE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Signal Handlers
|
|
3
|
+
*
|
|
4
|
+
* Handles process signals (SIGINT, SIGTERM, etc.) and uncaught errors for
|
|
5
|
+
* graceful shutdown of benchmark runs.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Handle process signals gracefully
|
|
11
|
+
*/
|
|
12
|
+
export declare const setupSignalHandlers: (abortController: AbortController) => void;
|
|
13
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/cli/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,iBAAiB,eAAe,KAAG,IA0CtE,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Signal Handlers
|
|
3
|
+
*
|
|
4
|
+
* Handles process signals (SIGINT, SIGTERM, etc.) and uncaught errors for
|
|
5
|
+
* graceful shutdown of benchmark runs.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import { ABORT_TIMEOUT, ExitCodes } from "../constants.js";
|
|
10
|
+
import { isModestBenchError, UnknownError } from "../errors/index.js";
|
|
11
|
+
import { isError } from "../utils/type-guards.js";
|
|
12
|
+
/**
|
|
13
|
+
* Handle process signals gracefully
|
|
14
|
+
*/
|
|
15
|
+
export const setupSignalHandlers = (abortController) => {
|
|
16
|
+
let abortRequested = false;
|
|
17
|
+
const handleSignal = (signal) => {
|
|
18
|
+
if (abortRequested) {
|
|
19
|
+
// Second signal, force exit
|
|
20
|
+
console.log(`\nReceived ${signal} again, forcing exit...`);
|
|
21
|
+
process.exit(computeExitCode(signal));
|
|
22
|
+
}
|
|
23
|
+
console.log(`\nReceived ${signal}, aborting benchmarks...`);
|
|
24
|
+
abortRequested = true;
|
|
25
|
+
abortController.abort();
|
|
26
|
+
// Give a short grace period for cleanup, then exit
|
|
27
|
+
setTimeout(() => {
|
|
28
|
+
console.log('\nBenchmark aborted.');
|
|
29
|
+
process.exit(computeExitCode(signal));
|
|
30
|
+
}, ABORT_TIMEOUT);
|
|
31
|
+
};
|
|
32
|
+
process
|
|
33
|
+
.once('SIGINT', handleSignal)
|
|
34
|
+
.once('SIGQUIT', handleSignal)
|
|
35
|
+
.once('SIGTERM', handleSignal)
|
|
36
|
+
.once('uncaughtException', (error) => {
|
|
37
|
+
// Wrap non-ModestBench errors with UnknownError
|
|
38
|
+
const wrappedError = isModestBenchError(error)
|
|
39
|
+
? error
|
|
40
|
+
: new UnknownError(error.message, { cause: error });
|
|
41
|
+
console.error(`${wrappedError}`);
|
|
42
|
+
process.exit(ExitCodes.RUNTIME_ERROR);
|
|
43
|
+
})
|
|
44
|
+
.once('unhandledRejection', (reason) => {
|
|
45
|
+
const wrappedError = isModestBenchError(reason)
|
|
46
|
+
? reason
|
|
47
|
+
: new UnknownError(isError(reason) ? reason.message : String(reason), {
|
|
48
|
+
cause: reason,
|
|
49
|
+
});
|
|
50
|
+
console.error(`${wrappedError}`);
|
|
51
|
+
process.exit(ExitCodes.RUNTIME_ERROR);
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Compute the exit code based on the signal
|
|
56
|
+
*
|
|
57
|
+
* @param signal - The signal that caused the exit
|
|
58
|
+
* @returns The exit code
|
|
59
|
+
*/
|
|
60
|
+
const computeExitCode = (signal) => {
|
|
61
|
+
switch (signal) {
|
|
62
|
+
case 'SIGINT':
|
|
63
|
+
return 130; // 128 + 2
|
|
64
|
+
case 'SIGQUIT':
|
|
65
|
+
return 131; // 128 + 3
|
|
66
|
+
default:
|
|
67
|
+
return 143; // 128 + 15 (SIGTERM)
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/cli/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,wBAAwB;AAC3D,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,2BAA2B;AACtE,OAAO,EAAE,OAAO,EAAE,gCAAgC;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,eAAgC,EAAQ,EAAE;IAC5E,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,MAAM,YAAY,GAAG,CAAC,MAAsB,EAAE,EAAE;QAC9C,IAAI,cAAc,EAAE,CAAC;YACnB,4BAA4B;YAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,yBAAyB,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,0BAA0B,CAAC,CAAC;QAC5D,cAAc,GAAG,IAAI,CAAC;QACtB,eAAe,CAAC,KAAK,EAAE,CAAC;QAExB,mDAAmD;QACnD,UAAU,CAAC,GAAG,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,CAAC,EAAE,aAAa,CAAC,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO;SACJ,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;SAC5B,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;SAC7B,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;SAC7B,IAAI,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;QACnC,gDAAgD;QAChD,MAAM,YAAY,GAAU,kBAAkB,CAAC,KAAK,CAAC;YACnD,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC,CAAC;SACD,IAAI,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QACrC,MAAM,YAAY,GAAU,kBAAkB,CAAC,MAAM,CAAC;YACpD,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;gBAClE,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,eAAe,GAAG,CAAC,MAAsB,EAAU,EAAE;IACzD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC,CAAC,UAAU;QACxB,KAAK,SAAS;YACZ,OAAO,GAAG,CAAC,CAAC,UAAU;QACxB;YACE,OAAO,GAAG,CAAC,CAAC,qBAAqB;IACrC,CAAC;AACH,CAAC,CAAC"}
|