n8n-workflow 1.118.0 → 1.118.1
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/cjs/expression-evaluator-proxy.d.ts.map +1 -1
- package/dist/cjs/expression-evaluator-proxy.js +1 -1
- package/dist/cjs/expression-evaluator-proxy.js.map +1 -1
- package/dist/cjs/expression-sandboxing.d.ts +5 -1
- package/dist/cjs/expression-sandboxing.d.ts.map +1 -1
- package/dist/cjs/expression-sandboxing.js +59 -1
- package/dist/cjs/expression-sandboxing.js.map +1 -1
- package/dist/cjs/typecheck.tsbuildinfo +1 -1
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +9 -1
- package/dist/cjs/utils.js.map +1 -1
- package/dist/esm/expression-evaluator-proxy.d.ts.map +1 -1
- package/dist/esm/expression-evaluator-proxy.js +2 -2
- package/dist/esm/expression-evaluator-proxy.js.map +1 -1
- package/dist/esm/expression-sandboxing.d.ts +5 -1
- package/dist/esm/expression-sandboxing.d.ts.map +1 -1
- package/dist/esm/expression-sandboxing.js +57 -0
- package/dist/esm/expression-sandboxing.js.map +1 -1
- package/dist/esm/typecheck.tsbuildinfo +1 -1
- package/dist/esm/utils.d.ts.map +1 -1
- package/dist/esm/utils.js +9 -1
- package/dist/esm/utils.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression-evaluator-proxy.d.ts","sourceRoot":"","sources":["../../src/expression-evaluator-proxy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"expression-evaluator-proxy.d.ts","sourceRoot":"","sources":["../../src/expression-evaluator-proxy.ts"],"names":[],"mappings":"AAQA,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;AAClF,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAS3C,eAAO,MAAM,eAAe,GAAI,SAAS,YAAY,SAEpD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SAEhC,CAAC"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
const expression_sandboxing_1 = require("./expression-sandboxing");
|
|
15
15
|
const errorHandler = () => { };
|
|
16
16
|
const tournamentEvaluator = new tournament_1.Tournament(errorHandler, undefined, undefined, {
|
|
17
|
-
before: [],
|
|
17
|
+
before: [expression_sandboxing_1.FunctionThisSanitizer],
|
|
18
18
|
after: [expression_sandboxing_1.PrototypeSanitizer, expression_sandboxing_1.DollarSignValidator],
|
|
19
19
|
});
|
|
20
20
|
const evaluator = tournamentEvaluator.execute.bind(tournamentEvaluator);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression-evaluator-proxy.js","sourceRoot":"","sources":["../../src/expression-evaluator-proxy.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,gDAA6C;IAE7C,
|
|
1
|
+
{"version":3,"file":"expression-evaluator-proxy.js","sourceRoot":"","sources":["../../src/expression-evaluator-proxy.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,gDAA6C;IAE7C,mEAIiC;IAKjC,MAAM,YAAY,GAAiB,GAAG,EAAE,GAAE,CAAC,CAAC;IAC5C,MAAM,mBAAmB,GAAG,IAAI,uBAAU,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE;QAC9E,MAAM,EAAE,CAAC,6CAAqB,CAAC;QAC/B,KAAK,EAAE,CAAC,0CAAkB,EAAE,2CAAmB,CAAC;KAChD,CAAC,CAAC;IACH,MAAM,SAAS,GAAc,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAE5E,MAAM,eAAe,GAAG,CAAC,OAAqB,EAAE,EAAE;QACxD,mBAAmB,CAAC,YAAY,GAAG,OAAO,CAAC;IAC5C,CAAC,CAAC;IAFW,QAAA,eAAe,mBAE1B;IAEK,MAAM,kBAAkB,GAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QAC3D,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IAFW,QAAA,kBAAkB,sBAE7B"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import { type ASTAfterHook } from '@n8n/tournament';
|
|
1
|
+
import { type ASTAfterHook, type ASTBeforeHook } from '@n8n/tournament';
|
|
2
2
|
export declare const sanitizerName = "__sanitize";
|
|
3
3
|
export declare const DOLLAR_SIGN_ERROR = "Cannot access \"$\" without calling it as a function";
|
|
4
|
+
/**
|
|
5
|
+
* Prevents regular functions from binding their `this` to the Node.js global.
|
|
6
|
+
*/
|
|
7
|
+
export declare const FunctionThisSanitizer: ASTBeforeHook;
|
|
4
8
|
/**
|
|
5
9
|
* Validates that the $ identifier is only used in allowed contexts.
|
|
6
10
|
* This prevents user errors like `{{ $ }}` which would return the function object itself.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression-sandboxing.d.ts","sourceRoot":"","sources":["../../src/expression-sandboxing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAA8B,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"expression-sandboxing.d.ts","sourceRoot":"","sources":["../../src/expression-sandboxing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAA8B,MAAM,iBAAiB,CAAC;AAKpG,eAAO,MAAM,aAAa,eAAe,CAAC;AAG1C,eAAO,MAAM,iBAAiB,yDAAuD,CAAC;AA+CtF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,aA0DnC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAsDjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,YA0ChC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,OAAO,OAAO,KAAG,OAK1C,CAAC"}
|
|
@@ -9,13 +9,16 @@
|
|
|
9
9
|
})(function (require, exports) {
|
|
10
10
|
"use strict";
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.sanitizer = exports.PrototypeSanitizer = exports.DollarSignValidator = exports.DOLLAR_SIGN_ERROR = exports.sanitizerName = void 0;
|
|
12
|
+
exports.sanitizer = exports.PrototypeSanitizer = exports.DollarSignValidator = exports.FunctionThisSanitizer = exports.DOLLAR_SIGN_ERROR = exports.sanitizerName = void 0;
|
|
13
13
|
const tournament_1 = require("@n8n/tournament");
|
|
14
14
|
const errors_1 = require("./errors");
|
|
15
15
|
const utils_1 = require("./utils");
|
|
16
16
|
exports.sanitizerName = '__sanitize';
|
|
17
17
|
const sanitizerIdentifier = tournament_1.astBuilders.identifier(exports.sanitizerName);
|
|
18
18
|
exports.DOLLAR_SIGN_ERROR = 'Cannot access "$" without calling it as a function';
|
|
19
|
+
const EMPTY_CONTEXT = tournament_1.astBuilders.objectExpression([
|
|
20
|
+
tournament_1.astBuilders.property('init', tournament_1.astBuilders.identifier('process'), tournament_1.astBuilders.objectExpression([])),
|
|
21
|
+
]);
|
|
19
22
|
/**
|
|
20
23
|
* Helper to check if an expression is a valid property access with $ as the property.
|
|
21
24
|
* Returns true for obj.$ or obj.nested.$ but false for bare $ or other expression contexts.
|
|
@@ -46,6 +49,61 @@
|
|
|
46
49
|
(object.type === 'Identifier' || object.type === 'MemberExpression');
|
|
47
50
|
return isPropertyDollar && !isObjectDollar && isObjectValid;
|
|
48
51
|
};
|
|
52
|
+
/**
|
|
53
|
+
* Prevents regular functions from binding their `this` to the Node.js global.
|
|
54
|
+
*/
|
|
55
|
+
const FunctionThisSanitizer = (ast, dataNode) => {
|
|
56
|
+
(0, tournament_1.astVisit)(ast, {
|
|
57
|
+
visitCallExpression(path) {
|
|
58
|
+
const { node } = path;
|
|
59
|
+
if (node.callee.type !== 'FunctionExpression') {
|
|
60
|
+
this.traverse(path);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const fnExpression = node.callee;
|
|
64
|
+
/**
|
|
65
|
+
* Called function expressions (IIFEs) - both anonymous and named:
|
|
66
|
+
*
|
|
67
|
+
* ```js
|
|
68
|
+
* (function(x) { return x * 2; })(5)
|
|
69
|
+
* (function factorial(n) { return n <= 1 ? 1 : n * factorial(n-1); })(5)
|
|
70
|
+
*
|
|
71
|
+
* // become
|
|
72
|
+
*
|
|
73
|
+
* (function(x) { return x * 2; }).call({ process: {} }, 5)
|
|
74
|
+
* (function factorial(n) { return n <= 1 ? 1 : n * factorial(n-1); }).call({ process: {} }, 5)
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
this.traverse(path); // depth first to transform inside out
|
|
78
|
+
const callExpression = tournament_1.astBuilders.callExpression(tournament_1.astBuilders.memberExpression(fnExpression, tournament_1.astBuilders.identifier('call')), [EMPTY_CONTEXT, ...node.arguments]);
|
|
79
|
+
path.replace(callExpression);
|
|
80
|
+
return false;
|
|
81
|
+
},
|
|
82
|
+
visitFunctionExpression(path) {
|
|
83
|
+
const { node } = path;
|
|
84
|
+
/**
|
|
85
|
+
* Callable function expressions (callbacks) - both anonymous and named:
|
|
86
|
+
*
|
|
87
|
+
* ```js
|
|
88
|
+
* [1, 2, 3].map(function(n) { return n * 2; })
|
|
89
|
+
* [1, 2, 3].map(function factorial(n) { return n <= 1 ? 1 : n * factorial(n-1); })
|
|
90
|
+
*
|
|
91
|
+
* // become
|
|
92
|
+
*
|
|
93
|
+
* [1, 2, 3].map((function(n) { return n * 2; }).bind({ process: {} }))
|
|
94
|
+
* [1, 2, 3].map((function factorial(n) { return n <= 1 ? 1 : n * factorial(n-1); }).bind({ process: {} }))
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
this.traverse(path);
|
|
98
|
+
const boundFunction = tournament_1.astBuilders.callExpression(tournament_1.astBuilders.memberExpression(node, tournament_1.astBuilders.identifier('bind')), [
|
|
99
|
+
EMPTY_CONTEXT,
|
|
100
|
+
]);
|
|
101
|
+
path.replace(boundFunction);
|
|
102
|
+
return false;
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
exports.FunctionThisSanitizer = FunctionThisSanitizer;
|
|
49
107
|
/**
|
|
50
108
|
* Validates that the $ identifier is only used in allowed contexts.
|
|
51
109
|
* This prevents user errors like `{{ $ }}` which would return the function object itself.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expression-sandboxing.js","sourceRoot":"","sources":["../../src/expression-sandboxing.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,
|
|
1
|
+
{"version":3,"file":"expression-sandboxing.js","sourceRoot":"","sources":["../../src/expression-sandboxing.ts"],"names":[],"mappings":";;;;;;;;;;;;IAAA,gDAAoG;IAEpG,qCAA2C;IAC3C,mCAA+C;IAElC,QAAA,aAAa,GAAG,YAAY,CAAC;IAC1C,MAAM,mBAAmB,GAAG,wBAAC,CAAC,UAAU,CAAC,qBAAa,CAAC,CAAC;IAE3C,QAAA,iBAAiB,GAAG,oDAAoD,CAAC;IAEtF,MAAM,aAAa,GAAG,wBAAC,CAAC,gBAAgB,CAAC;QACxC,wBAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,wBAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;KACnE,CAAC,CAAC;IAEH;;;OAGG;IACH,MAAM,2BAA2B,GAAG,CAAC,IAAa,EAAW,EAAE;QAC9D,IACC,OAAO,IAAI,KAAK,QAAQ;YACxB,IAAI,KAAK,IAAI;YACb,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC;YACjB,IAAI,CAAC,IAAI,KAAK,kBAAkB;YAChC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC;YACrB,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,EAClB,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,yBAAyB;QACzB,MAAM,gBAAgB,GACrB,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,KAAK,IAAI;YACjB,MAAM,IAAI,QAAQ;YAClB,QAAQ,CAAC,IAAI,KAAK,GAAG,CAAC;QAEvB,kDAAkD;QAClD,MAAM,cAAc,GACnB,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC;QAE1F,sEAAsE;QACtE,yDAAyD;QACzD,MAAM,aAAa,GAClB,OAAO,MAAM,KAAK,QAAQ;YAC1B,MAAM,KAAK,IAAI;YACf,MAAM,IAAI,MAAM;YAChB,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC;QAEtE,OAAO,gBAAgB,IAAI,CAAC,cAAc,IAAI,aAAa,CAAC;IAC7D,CAAC,CAAC;IAEF;;OAEG;IACI,MAAM,qBAAqB,GAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QACrE,IAAA,qBAAQ,EAAC,GAAG,EAAE;YACb,mBAAmB,CAAC,IAAI;gBACvB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;gBAEtB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;oBAC/C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACpB,OAAO;gBACR,CAAC;gBAED,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;gBAEjC;;;;;;;;;;;;mBAYG;gBACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,sCAAsC;gBAC3D,MAAM,cAAc,GAAG,wBAAC,CAAC,cAAc,CACtC,wBAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,wBAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EACtD,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAClC,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAC7B,OAAO,KAAK,CAAC;YACd,CAAC;YAED,uBAAuB,CAAC,IAAI;gBAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;gBAEtB;;;;;;;;;;;;mBAYG;gBACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM,aAAa,GAAG,wBAAC,CAAC,cAAc,CAAC,wBAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,wBAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;oBACtF,aAAa;iBACb,CAAC,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAC5B,OAAO,KAAK,CAAC;YACd,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC;IA1DW,QAAA,qBAAqB,yBA0DhC;IAEF;;;;;;;;;;;;OAYG;IACI,MAAM,mBAAmB,GAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;QACnE,IAAA,qBAAQ,EAAC,GAAG,EAAE;YACb,eAAe,CAAC,IAAI;gBACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBAEvB,0CAA0C;gBAC1C,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG;oBAAE,OAAO;gBAE9B,iEAAiE;gBACjE,MAAM,MAAM,GAAY,IAAI,CAAC,MAAM,CAAC;gBAEpC,0DAA0D;gBAC1D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC;oBAC1E,MAAM,IAAI,wBAAe,CAAC,yBAAiB,CAAC,CAAC;gBAC9C,CAAC;gBAED,oCAAoC;gBACpC,6EAA6E;gBAC7E,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,OAAO;gBACR,CAAC;gBAED,gEAAgE;gBAChE,6EAA6E;gBAC7E,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,MAAM,IAAI,wBAAe,CAAC,yBAAiB,CAAC,CAAC;gBAC9C,CAAC;gBAED,0DAA0D;gBAC1D,iFAAiF;gBACjF,+EAA+E;gBAC/E,IAAI,QAAQ,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;oBACvF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;oBAClC,IACC,OAAO,IAAI,WAAW;wBACtB,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ;wBACrC,WAAW,CAAC,KAAK,KAAK,IAAI,EACzB,CAAC;wBACF,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;wBACjC,iFAAiF;wBACjF,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAqB,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;4BACzF,sDAAsD;4BACtD,IAAI,2BAA2B,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gCACpD,OAAO;4BACR,CAAC;wBACF,CAAC;oBACF,CAAC;gBACF,CAAC;gBAED,4DAA4D;gBAC5D,MAAM,IAAI,wBAAe,CAAC,yBAAiB,CAAC,CAAC;YAC9C,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC;IAtDW,QAAA,mBAAmB,uBAsD9B;IAEK,MAAM,kBAAkB,GAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;QACjE,IAAA,qBAAQ,EAAC,GAAG,EAAE;YACb,qBAAqB,CAAC,IAAI;gBACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACpB,8CAA8C;oBAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;wBACzC,MAAM,IAAI,wBAAe,CACxB,yBAAyB,IAAI,CAAC,QAAQ,CAAC,IAAI,8BAA8B,CACzE,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,IAAA,4BAAoB,EAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC/C,MAAM,IAAI,wBAAe,CACxB,kBAAkB,IAAI,CAAC,QAAQ,CAAC,IAAI,4BAA4B,CAChE,CAAC;oBACH,CAAC;gBACF,CAAC;qBAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBACvF,sDAAsD;oBACtD,IAAI,CAAC,IAAA,4BAAoB,EAAC,IAAI,CAAC,QAAQ,CAAC,KAAe,CAAC,EAAE,CAAC;wBAC1D,MAAM,IAAI,wBAAe,CACxB,kBAAkB,IAAI,CAAC,QAAQ,CAAC,KAAe,4BAA4B,CAC3E,CAAC;oBACH,CAAC;gBACF,CAAC;qBAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBACpD,oDAAoD;oBACpD,IAAI,CAAC,OAAO,CACX,wBAAC,CAAC,gBAAgB;oBACjB,qGAAqG;oBACrG,IAAI,CAAC,MAAa;oBAClB,iEAAiE;oBACjE,wBAAC,CAAC,cAAc,CAAC,wBAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,mBAAmB,CAAC,EAAE;wBACnE,8DAA8D;wBAC9D,IAAI,CAAC,QAAe;qBACpB,CAAC,EACF,IAAI,CACJ,CACD,CAAC;gBACH,CAAC;YACF,CAAC;SACD,CAAC,CAAC;IACJ,CAAC,CAAC;IA1CW,QAAA,kBAAkB,sBA0C7B;IAEK,MAAM,SAAS,GAAG,CAAC,KAAc,EAAW,EAAE;QACpD,IAAI,CAAC,IAAA,4BAAoB,EAAC,KAAe,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,wBAAe,CAAC,kBAAkB,KAAe,4BAA4B,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC,CAAC;IALW,QAAA,SAAS,aAKpB"}
|