transskill 0.2.0 → 0.2.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/README.md +162 -32
- package/README.zh.md +134 -4
- package/dist/audit/auditor-registry.d.ts +6 -0
- package/dist/audit/auditor-registry.d.ts.map +1 -0
- package/dist/audit/auditor-registry.js +17 -0
- package/dist/audit/auditor-registry.js.map +1 -0
- package/dist/audit/auditor.interface.d.ts +59 -0
- package/dist/audit/auditor.interface.d.ts.map +1 -0
- package/dist/audit/auditor.interface.js +36 -0
- package/dist/audit/auditor.interface.js.map +1 -0
- package/dist/audit/index.d.ts +39 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +155 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/reporter/console-reporter.d.ts +4 -0
- package/dist/audit/reporter/console-reporter.d.ts.map +1 -0
- package/dist/audit/reporter/console-reporter.js +107 -0
- package/dist/audit/reporter/console-reporter.js.map +1 -0
- package/dist/audit/rules/dangerous-commands.d.ts +15 -0
- package/dist/audit/rules/dangerous-commands.d.ts.map +1 -0
- package/dist/audit/rules/dangerous-commands.js +189 -0
- package/dist/audit/rules/dangerous-commands.js.map +1 -0
- package/dist/audit/rules/prompt-injection.d.ts +15 -0
- package/dist/audit/rules/prompt-injection.d.ts.map +1 -0
- package/dist/audit/rules/prompt-injection.js +65 -0
- package/dist/audit/rules/prompt-injection.js.map +1 -0
- package/dist/audit/rules/suspicious-urls.d.ts +14 -0
- package/dist/audit/rules/suspicious-urls.d.ts.map +1 -0
- package/dist/audit/rules/suspicious-urls.js +42 -0
- package/dist/audit/rules/suspicious-urls.js.map +1 -0
- package/dist/audit/scanner/directory-scanner.d.ts +40 -0
- package/dist/audit/scanner/directory-scanner.d.ts.map +1 -0
- package/dist/audit/scanner/directory-scanner.js +288 -0
- package/dist/audit/scanner/directory-scanner.js.map +1 -0
- package/dist/audit/scanner/instruction-scanner.d.ts +20 -0
- package/dist/audit/scanner/instruction-scanner.d.ts.map +1 -0
- package/dist/audit/scanner/instruction-scanner.js +147 -0
- package/dist/audit/scanner/instruction-scanner.js.map +1 -0
- package/dist/audit/scanner/mcp-scanner.d.ts +17 -0
- package/dist/audit/scanner/mcp-scanner.d.ts.map +1 -0
- package/dist/audit/scanner/mcp-scanner.js +181 -0
- package/dist/audit/scanner/mcp-scanner.js.map +1 -0
- package/dist/audit/scanner/permission-scanner.d.ts +19 -0
- package/dist/audit/scanner/permission-scanner.d.ts.map +1 -0
- package/dist/audit/scanner/permission-scanner.js +143 -0
- package/dist/audit/scanner/permission-scanner.js.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -1
- package/dist/mapper/default.mapper.js +2 -2
- package/dist/mapper/default.mapper.js.map +1 -1
- package/dist/parser/cursor-rules.parser.d.ts +5 -0
- package/dist/parser/cursor-rules.parser.d.ts.map +1 -1
- package/dist/parser/cursor-rules.parser.js +28 -5
- package/dist/parser/cursor-rules.parser.js.map +1 -1
- package/dist/renderer/cursor-rules.renderer.d.ts.map +1 -1
- package/dist/renderer/cursor-rules.renderer.js +3 -5
- package/dist/renderer/cursor-rules.renderer.js.map +1 -1
- package/dist/renderer/mdc.renderer.d.ts.map +1 -1
- package/dist/renderer/mdc.renderer.js +3 -2
- package/dist/renderer/mdc.renderer.js.map +1 -1
- package/package.json +1 -1
|
@@ -5,6 +5,11 @@ import { TransSkillError } from '../core/errors.js';
|
|
|
5
5
|
*
|
|
6
6
|
* .cursorrules is a plain text file with instructions for Cursor IDE.
|
|
7
7
|
* It has no frontmatter — the entire content is treated as instructions.
|
|
8
|
+
*
|
|
9
|
+
* Convention: first line may be an optional `# Title` heading.
|
|
10
|
+
* - If present, it's used as the description and stripped from instructions.
|
|
11
|
+
* - If absent, a fallback description is generated from the filename.
|
|
12
|
+
*
|
|
8
13
|
* Used by: Cursor IDE (legacy format)
|
|
9
14
|
*/
|
|
10
15
|
export class CursorRulesParser {
|
|
@@ -13,18 +18,36 @@ export class CursorRulesParser {
|
|
|
13
18
|
return filePath?.endsWith('.cursorrules') ?? false;
|
|
14
19
|
}
|
|
15
20
|
parse(content, filePath) {
|
|
16
|
-
const
|
|
21
|
+
const trimmed = content.trim();
|
|
17
22
|
// Derive name from filename (or parent directory)
|
|
18
23
|
const name = filePath
|
|
19
24
|
? basename(filePath, extname(filePath))
|
|
20
25
|
: 'untitled-rules';
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
26
|
+
const lines = trimmed.split('\n');
|
|
27
|
+
const firstRaw = lines[0] ?? '';
|
|
28
|
+
// Detect whether the first line looks like a markdown heading
|
|
29
|
+
const headingMatch = firstRaw.match(/^#+\s+(.+)/);
|
|
30
|
+
if (headingMatch) {
|
|
31
|
+
// Title line: use as description, strip from instructions
|
|
32
|
+
const description = headingMatch[1].trim();
|
|
33
|
+
const instructions = lines.slice(1).join('\n').trim();
|
|
34
|
+
return {
|
|
35
|
+
name,
|
|
36
|
+
description,
|
|
37
|
+
instructions,
|
|
38
|
+
metadata: {
|
|
39
|
+
sourceFormat: '.cursorrules',
|
|
40
|
+
},
|
|
41
|
+
platformSpecific: {},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// No heading found — treat everything as instructions.
|
|
45
|
+
// Derive a sensible fallback description from the filename.
|
|
46
|
+
const description = `Cursor rules for ${name}`;
|
|
24
47
|
return {
|
|
25
48
|
name,
|
|
26
49
|
description,
|
|
27
|
-
instructions,
|
|
50
|
+
instructions: trimmed,
|
|
28
51
|
metadata: {
|
|
29
52
|
sourceFormat: '.cursorrules',
|
|
30
53
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-rules.parser.js","sourceRoot":"","sources":["../../src/parser/cursor-rules.parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD
|
|
1
|
+
{"version":3,"file":"cursor-rules.parser.js","sourceRoot":"","sources":["../../src/parser/cursor-rules.parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,iBAAiB;IACnB,MAAM,GAAe,cAAc,CAAC;IAE7C,MAAM,CAAC,QAAgB,EAAE,QAAiB;QACxC,OAAO,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,QAAiB;QACtC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAE/B,kDAAkD;QAClD,MAAM,IAAI,GAAG,QAAQ;YACnB,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YACvC,CAAC,CAAC,gBAAgB,CAAC;QAErB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhC,8DAA8D;QAC9D,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,YAAY,EAAE,CAAC;YACjB,0DAA0D;YAC1D,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACtD,OAAO;gBACL,IAAI;gBACJ,WAAW;gBACX,YAAY;gBACZ,QAAQ,EAAE;oBACR,YAAY,EAAE,cAAc;iBAC7B;gBACD,gBAAgB,EAAE,EAAE;aACrB,CAAC;QACJ,CAAC;QAED,uDAAuD;QACvD,4DAA4D;QAC5D,MAAM,WAAW,GAAG,oBAAoB,IAAI,EAAE,CAAC;QAC/C,OAAO;YACL,IAAI;YACJ,WAAW;YACX,YAAY,EAAE,OAAO;YACrB,QAAQ,EAAE;gBACR,YAAY,EAAE,cAAc;aAC7B;YACD,gBAAgB,EAAE,EAAE;SACrB,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,OAAe;QAC5B,MAAM,IAAI,eAAe,CACvB,wEAAwE,EACxE,mBAAmB,EACnB,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-rules.renderer.d.ts","sourceRoot":"","sources":["../../src/renderer/cursor-rules.renderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAGjH,qBAAa,mBAAoB,YAAW,QAAQ;IAClD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAkB;IAC7C,QAAQ,CAAC,SAAS,kBAAkB;IAEpC,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"cursor-rules.renderer.d.ts","sourceRoot":"","sources":["../../src/renderer/cursor-rules.renderer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAGjH,qBAAa,mBAAoB,YAAW,QAAQ;IAClD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAkB;IAC7C,QAAQ,CAAC,SAAS,kBAAkB;IAEpC,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;IAWxC,eAAe,CACb,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,GACjB,yBAAyB;CA6B7B"}
|
|
@@ -6,11 +6,9 @@ export class CursorRulesRenderer {
|
|
|
6
6
|
extension = '.cursorrules';
|
|
7
7
|
render(skill) {
|
|
8
8
|
const parts = [];
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
parts.push(`# Generated by TransSkill from ${skill.metadata.sourceFormat}`);
|
|
9
|
+
// Use description as heading (allows clean round-trip re-parse)
|
|
10
|
+
const heading = skill.description ? skill.description : skill.name;
|
|
11
|
+
parts.push(`# ${heading}`);
|
|
14
12
|
parts.push('');
|
|
15
13
|
parts.push(skill.instructions || '');
|
|
16
14
|
return parts.join('\n').trim() + '\n';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cursor-rules.renderer.js","sourceRoot":"","sources":["../../src/renderer/cursor-rules.renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE/E,MAAM,OAAO,mBAAmB;IACrB,MAAM,GAAe,cAAc,CAAC;IACpC,SAAS,GAAG,cAAc,CAAC;IAEpC,MAAM,CAAC,KAAwB;QAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"cursor-rules.renderer.js","sourceRoot":"","sources":["../../src/renderer/cursor-rules.renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE/E,MAAM,OAAO,mBAAmB;IACrB,MAAM,GAAe,cAAc,CAAC;IACpC,SAAS,GAAG,cAAc,CAAC;IAEpC,MAAM,CAAC,KAAwB;QAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,gEAAgE;QAChE,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACnE,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC;IACxC,CAAC;IAED,eAAe,CACb,QAAwB,EACxB,KAAwB,EACxB,UAAkB;QAElB,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,IAAI,cAAc,CAAC,CAAC;QACnE,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAEtD,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YAC3E,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC3C,SAAS,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAC1C,SAAS,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,IAAI;YACrB,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,UAAU;SACzB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdc.renderer.d.ts","sourceRoot":"","sources":["../../src/renderer/mdc.renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAGjH,qBAAa,WAAY,YAAW,QAAQ;IAC1C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAU;IACrC,QAAQ,CAAC,SAAS,UAAU;IAE5B,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"mdc.renderer.d.ts","sourceRoot":"","sources":["../../src/renderer/mdc.renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAGjH,qBAAa,WAAY,YAAW,QAAQ;IAC1C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAU;IACrC,QAAQ,CAAC,SAAS,UAAU;IAE5B,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM;IAiBxC,eAAe,CACb,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,iBAAiB,EACxB,UAAU,EAAE,MAAM,GACjB,yBAAyB;CAyB7B"}
|
|
@@ -13,8 +13,9 @@ export class MdcRenderer {
|
|
|
13
13
|
if (cursor?.globs && cursor.globs.length > 0) {
|
|
14
14
|
frontmatter.globs = cursor.globs.length === 1 ? cursor.globs[0] : cursor.globs.join(', ');
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
// Only emit alwaysApply when true — false is the Cursor default
|
|
17
|
+
if (cursor?.alwaysApply === true) {
|
|
18
|
+
frontmatter.alwaysApply = true;
|
|
18
19
|
}
|
|
19
20
|
return matter.stringify(skill.instructions || '', frontmatter);
|
|
20
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mdc.renderer.js","sourceRoot":"","sources":["../../src/renderer/mdc.renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE/E,MAAM,OAAO,WAAW;IACb,MAAM,GAAe,MAAM,CAAC;IAC5B,SAAS,GAAG,MAAM,CAAC;IAE5B,MAAM,CAAC,KAAwB;QAC7B,MAAM,WAAW,GAA4B;YAC3C,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC;QAEF,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC7C,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,MAAM,EAAE,WAAW,KAAK,
|
|
1
|
+
{"version":3,"file":"mdc.renderer.js","sourceRoot":"","sources":["../../src/renderer/mdc.renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE/E,MAAM,OAAO,WAAW;IACb,MAAM,GAAe,MAAM,CAAC;IAC5B,SAAS,GAAG,MAAM,CAAC;IAE5B,MAAM,CAAC,KAAwB;QAC7B,MAAM,WAAW,GAA4B;YAC3C,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC;QAEF,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC7C,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5F,CAAC;QACD,gEAAgE;QAChE,IAAI,MAAM,EAAE,WAAW,KAAK,IAAI,EAAE,CAAC;YACjC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC;QACjC,CAAC;QAED,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;IACjE,CAAC;IAED,eAAe,CACb,QAAwB,EACxB,KAAwB,EACxB,UAAkB;QAElB,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC;QACzD,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAEpD,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5E,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YAC3E,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC3C,SAAS,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,IAAI;YACrB,UAAU,EAAE,OAAO;YACnB,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,UAAU;SACzB,CAAC;IACJ,CAAC;CACF"}
|