@mcpc-tech/core 0.3.34 → 0.3.35
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/index.cjs +75 -1
- package/index.mjs +75 -3
- package/package.json +1 -1
- package/plugins/large-result.cjs +0 -1
- package/plugins/large-result.mjs +0 -4
- package/plugins/search.cjs +0 -1
- package/plugins/search.mjs +0 -4
- package/plugins/skills.cjs +0 -1
- package/plugins/skills.mjs +0 -4
- package/plugins.cjs +0 -1
- package/plugins.mjs +0 -4
- package/types/src/compose.d.ts +23 -1
- package/types/src/compose.d.ts.map +1 -1
package/index.cjs
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
1
|
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -13109,6 +13108,9 @@ var Protocol = class {
|
|
|
13109
13108
|
* The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.
|
|
13110
13109
|
*/
|
|
13111
13110
|
async connect(transport) {
|
|
13111
|
+
if (this._transport) {
|
|
13112
|
+
throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");
|
|
13113
|
+
}
|
|
13112
13114
|
this._transport = transport;
|
|
13113
13115
|
const _onclose = this.transport?.onclose;
|
|
13114
13116
|
this._transport.onclose = () => {
|
|
@@ -13141,6 +13143,10 @@ var Protocol = class {
|
|
|
13141
13143
|
this._progressHandlers.clear();
|
|
13142
13144
|
this._taskProgressTokens.clear();
|
|
13143
13145
|
this._pendingDebouncedNotifications.clear();
|
|
13146
|
+
for (const controller of this._requestHandlerAbortControllers.values()) {
|
|
13147
|
+
controller.abort();
|
|
13148
|
+
}
|
|
13149
|
+
this._requestHandlerAbortControllers.clear();
|
|
13144
13150
|
const error2 = McpError.fromError(ErrorCode.ConnectionClosed, "Connection closed");
|
|
13145
13151
|
this._transport = void 0;
|
|
13146
13152
|
this.onclose?.();
|
|
@@ -13191,6 +13197,8 @@ var Protocol = class {
|
|
|
13191
13197
|
sessionId: capturedTransport?.sessionId,
|
|
13192
13198
|
_meta: request.params?._meta,
|
|
13193
13199
|
sendNotification: async (notification) => {
|
|
13200
|
+
if (abortController.signal.aborted)
|
|
13201
|
+
return;
|
|
13194
13202
|
const notificationOptions = { relatedRequestId: request.id };
|
|
13195
13203
|
if (relatedTaskId) {
|
|
13196
13204
|
notificationOptions.relatedTask = { taskId: relatedTaskId };
|
|
@@ -13198,6 +13206,9 @@ var Protocol = class {
|
|
|
13198
13206
|
await this.notification(notification, notificationOptions);
|
|
13199
13207
|
},
|
|
13200
13208
|
sendRequest: async (r, resultSchema, options) => {
|
|
13209
|
+
if (abortController.signal.aborted) {
|
|
13210
|
+
throw new McpError(ErrorCode.ConnectionClosed, "Request was cancelled");
|
|
13211
|
+
}
|
|
13201
13212
|
const requestOptions = { ...options, relatedRequestId: request.id };
|
|
13202
13213
|
if (relatedTaskId && !requestOptions.relatedTask) {
|
|
13203
13214
|
requestOptions.relatedTask = { taskId: relatedTaskId };
|
|
@@ -20085,6 +20096,25 @@ var ToolManager = class {
|
|
|
20085
20096
|
execute: tool2.callback
|
|
20086
20097
|
};
|
|
20087
20098
|
}
|
|
20099
|
+
/**
|
|
20100
|
+
* Get all tools as ComposedTool objects with execute callback
|
|
20101
|
+
* Includes both public and internal tools
|
|
20102
|
+
*/
|
|
20103
|
+
getAllComposedTools() {
|
|
20104
|
+
const composedTools = [];
|
|
20105
|
+
for (const [name, tool2] of this.toolRegistry.entries()) {
|
|
20106
|
+
composedTools.push({
|
|
20107
|
+
name,
|
|
20108
|
+
description: tool2.description,
|
|
20109
|
+
inputSchema: tool2.schema ?? {
|
|
20110
|
+
type: "object",
|
|
20111
|
+
properties: {}
|
|
20112
|
+
},
|
|
20113
|
+
execute: tool2.callback
|
|
20114
|
+
});
|
|
20115
|
+
}
|
|
20116
|
+
return composedTools;
|
|
20117
|
+
}
|
|
20088
20118
|
};
|
|
20089
20119
|
|
|
20090
20120
|
// __mcpc__core_latest/node_modules/@mcpc/core/src/utils/common/schema.js
|
|
@@ -20565,6 +20595,50 @@ var ComposableMCPServer = class extends Server {
|
|
|
20565
20595
|
const publicToolNames = this.getPublicToolNames();
|
|
20566
20596
|
return allToolNames.filter((name) => !publicToolNames.includes(name));
|
|
20567
20597
|
}
|
|
20598
|
+
/**
|
|
20599
|
+
* Get all internal tools with their full metadata (description, schema)
|
|
20600
|
+
* Internal tools are not exposed to MCP clients but available within the agent
|
|
20601
|
+
*/
|
|
20602
|
+
getInternalTools() {
|
|
20603
|
+
const internalNames = this.getInternalToolNames();
|
|
20604
|
+
const registry2 = this.toolManager.getToolRegistry();
|
|
20605
|
+
return internalNames.map((name) => {
|
|
20606
|
+
const tool2 = registry2.get(name);
|
|
20607
|
+
return {
|
|
20608
|
+
name,
|
|
20609
|
+
description: tool2?.description || "",
|
|
20610
|
+
inputSchema: tool2?.schema || {
|
|
20611
|
+
type: "object"
|
|
20612
|
+
}
|
|
20613
|
+
};
|
|
20614
|
+
});
|
|
20615
|
+
}
|
|
20616
|
+
/**
|
|
20617
|
+
* Get a single tool with full details including execute callback
|
|
20618
|
+
* Works for both public and internal tools
|
|
20619
|
+
*/
|
|
20620
|
+
getComposedTool(name) {
|
|
20621
|
+
return this.toolManager.getComposedTool(name);
|
|
20622
|
+
}
|
|
20623
|
+
/**
|
|
20624
|
+
* Get all tools (public and internal) as composed tools with execute callback
|
|
20625
|
+
*/
|
|
20626
|
+
getAllComposedTools() {
|
|
20627
|
+
return this.toolManager.getAllComposedTools();
|
|
20628
|
+
}
|
|
20629
|
+
/**
|
|
20630
|
+
* Get all tools (public and internal) with full details
|
|
20631
|
+
*/
|
|
20632
|
+
getAllTools() {
|
|
20633
|
+
const registry2 = this.toolManager.getToolRegistry();
|
|
20634
|
+
return Array.from(registry2.entries()).map(([name, tool2]) => ({
|
|
20635
|
+
name,
|
|
20636
|
+
description: tool2?.description || "",
|
|
20637
|
+
inputSchema: tool2?.schema || {
|
|
20638
|
+
type: "object"
|
|
20639
|
+
}
|
|
20640
|
+
}));
|
|
20641
|
+
}
|
|
20568
20642
|
/**
|
|
20569
20643
|
* Get hidden tool schema by name (for internal access)
|
|
20570
20644
|
*/
|
package/index.mjs
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
|
-
const require = createRequire(import.meta.url);
|
|
4
1
|
var __create = Object.create;
|
|
5
2
|
var __defProp = Object.defineProperty;
|
|
6
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -13097,6 +13094,9 @@ var Protocol = class {
|
|
|
13097
13094
|
* The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.
|
|
13098
13095
|
*/
|
|
13099
13096
|
async connect(transport) {
|
|
13097
|
+
if (this._transport) {
|
|
13098
|
+
throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");
|
|
13099
|
+
}
|
|
13100
13100
|
this._transport = transport;
|
|
13101
13101
|
const _onclose = this.transport?.onclose;
|
|
13102
13102
|
this._transport.onclose = () => {
|
|
@@ -13129,6 +13129,10 @@ var Protocol = class {
|
|
|
13129
13129
|
this._progressHandlers.clear();
|
|
13130
13130
|
this._taskProgressTokens.clear();
|
|
13131
13131
|
this._pendingDebouncedNotifications.clear();
|
|
13132
|
+
for (const controller of this._requestHandlerAbortControllers.values()) {
|
|
13133
|
+
controller.abort();
|
|
13134
|
+
}
|
|
13135
|
+
this._requestHandlerAbortControllers.clear();
|
|
13132
13136
|
const error2 = McpError.fromError(ErrorCode.ConnectionClosed, "Connection closed");
|
|
13133
13137
|
this._transport = void 0;
|
|
13134
13138
|
this.onclose?.();
|
|
@@ -13179,6 +13183,8 @@ var Protocol = class {
|
|
|
13179
13183
|
sessionId: capturedTransport?.sessionId,
|
|
13180
13184
|
_meta: request.params?._meta,
|
|
13181
13185
|
sendNotification: async (notification) => {
|
|
13186
|
+
if (abortController.signal.aborted)
|
|
13187
|
+
return;
|
|
13182
13188
|
const notificationOptions = { relatedRequestId: request.id };
|
|
13183
13189
|
if (relatedTaskId) {
|
|
13184
13190
|
notificationOptions.relatedTask = { taskId: relatedTaskId };
|
|
@@ -13186,6 +13192,9 @@ var Protocol = class {
|
|
|
13186
13192
|
await this.notification(notification, notificationOptions);
|
|
13187
13193
|
},
|
|
13188
13194
|
sendRequest: async (r, resultSchema, options) => {
|
|
13195
|
+
if (abortController.signal.aborted) {
|
|
13196
|
+
throw new McpError(ErrorCode.ConnectionClosed, "Request was cancelled");
|
|
13197
|
+
}
|
|
13189
13198
|
const requestOptions = { ...options, relatedRequestId: request.id };
|
|
13190
13199
|
if (relatedTaskId && !requestOptions.relatedTask) {
|
|
13191
13200
|
requestOptions.relatedTask = { taskId: relatedTaskId };
|
|
@@ -20072,6 +20081,25 @@ var ToolManager = class {
|
|
|
20072
20081
|
execute: tool2.callback
|
|
20073
20082
|
};
|
|
20074
20083
|
}
|
|
20084
|
+
/**
|
|
20085
|
+
* Get all tools as ComposedTool objects with execute callback
|
|
20086
|
+
* Includes both public and internal tools
|
|
20087
|
+
*/
|
|
20088
|
+
getAllComposedTools() {
|
|
20089
|
+
const composedTools = [];
|
|
20090
|
+
for (const [name, tool2] of this.toolRegistry.entries()) {
|
|
20091
|
+
composedTools.push({
|
|
20092
|
+
name,
|
|
20093
|
+
description: tool2.description,
|
|
20094
|
+
inputSchema: tool2.schema ?? {
|
|
20095
|
+
type: "object",
|
|
20096
|
+
properties: {}
|
|
20097
|
+
},
|
|
20098
|
+
execute: tool2.callback
|
|
20099
|
+
});
|
|
20100
|
+
}
|
|
20101
|
+
return composedTools;
|
|
20102
|
+
}
|
|
20075
20103
|
};
|
|
20076
20104
|
|
|
20077
20105
|
// __mcpc__core_latest/node_modules/@mcpc/core/src/utils/common/schema.js
|
|
@@ -20552,6 +20580,50 @@ var ComposableMCPServer = class extends Server {
|
|
|
20552
20580
|
const publicToolNames = this.getPublicToolNames();
|
|
20553
20581
|
return allToolNames.filter((name) => !publicToolNames.includes(name));
|
|
20554
20582
|
}
|
|
20583
|
+
/**
|
|
20584
|
+
* Get all internal tools with their full metadata (description, schema)
|
|
20585
|
+
* Internal tools are not exposed to MCP clients but available within the agent
|
|
20586
|
+
*/
|
|
20587
|
+
getInternalTools() {
|
|
20588
|
+
const internalNames = this.getInternalToolNames();
|
|
20589
|
+
const registry2 = this.toolManager.getToolRegistry();
|
|
20590
|
+
return internalNames.map((name) => {
|
|
20591
|
+
const tool2 = registry2.get(name);
|
|
20592
|
+
return {
|
|
20593
|
+
name,
|
|
20594
|
+
description: tool2?.description || "",
|
|
20595
|
+
inputSchema: tool2?.schema || {
|
|
20596
|
+
type: "object"
|
|
20597
|
+
}
|
|
20598
|
+
};
|
|
20599
|
+
});
|
|
20600
|
+
}
|
|
20601
|
+
/**
|
|
20602
|
+
* Get a single tool with full details including execute callback
|
|
20603
|
+
* Works for both public and internal tools
|
|
20604
|
+
*/
|
|
20605
|
+
getComposedTool(name) {
|
|
20606
|
+
return this.toolManager.getComposedTool(name);
|
|
20607
|
+
}
|
|
20608
|
+
/**
|
|
20609
|
+
* Get all tools (public and internal) as composed tools with execute callback
|
|
20610
|
+
*/
|
|
20611
|
+
getAllComposedTools() {
|
|
20612
|
+
return this.toolManager.getAllComposedTools();
|
|
20613
|
+
}
|
|
20614
|
+
/**
|
|
20615
|
+
* Get all tools (public and internal) with full details
|
|
20616
|
+
*/
|
|
20617
|
+
getAllTools() {
|
|
20618
|
+
const registry2 = this.toolManager.getToolRegistry();
|
|
20619
|
+
return Array.from(registry2.entries()).map(([name, tool2]) => ({
|
|
20620
|
+
name,
|
|
20621
|
+
description: tool2?.description || "",
|
|
20622
|
+
inputSchema: tool2?.schema || {
|
|
20623
|
+
type: "object"
|
|
20624
|
+
}
|
|
20625
|
+
}));
|
|
20626
|
+
}
|
|
20555
20627
|
/**
|
|
20556
20628
|
* Get hidden tool schema by name (for internal access)
|
|
20557
20629
|
*/
|
package/package.json
CHANGED
package/plugins/large-result.cjs
CHANGED
package/plugins/large-result.mjs
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
|
-
const require = createRequire(import.meta.url);
|
|
4
|
-
|
|
5
1
|
// __mcpc__core_latest/node_modules/@mcpc/core/src/plugins/large-result.ts
|
|
6
2
|
import { mkdtemp, writeFile } from "node:fs/promises";
|
|
7
3
|
import { join } from "node:path";
|
package/plugins/search.cjs
CHANGED
package/plugins/search.mjs
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
|
-
const require = createRequire(import.meta.url);
|
|
4
|
-
|
|
5
1
|
// __mcpc__core_latest/node_modules/@mcpc/core/src/plugins/search-tool.ts
|
|
6
2
|
import rg from "@mcpc-tech/ripgrep-napi";
|
|
7
3
|
import { tmpdir } from "node:os";
|
package/plugins/skills.cjs
CHANGED
package/plugins/skills.mjs
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
|
-
const require = createRequire(import.meta.url);
|
|
4
|
-
|
|
5
1
|
// __mcpc__core_latest/node_modules/@mcpc/core/src/plugins/skills.ts
|
|
6
2
|
import { readdir, readFile } from "node:fs/promises";
|
|
7
3
|
import { join, relative, resolve } from "node:path";
|
package/plugins.cjs
CHANGED
package/plugins.mjs
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
|
-
const require = createRequire(import.meta.url);
|
|
4
|
-
|
|
5
1
|
// __mcpc__core_latest/node_modules/@mcpc/core/src/plugins/search-tool.js
|
|
6
2
|
import rg from "@mcpc-tech/ripgrep-napi";
|
|
7
3
|
import { tmpdir } from "node:os";
|
package/types/src/compose.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import type { MCPSetting } from "./service/tools.js";
|
|
|
4
4
|
import { Server, type ServerOptions } from "@modelcontextprotocol/sdk/server/index.js";
|
|
5
5
|
import type { ComposeDefinition, FileLoader } from "./set-up-mcp-compose.js";
|
|
6
6
|
import type { JSONSchema, ToolCallback } from "./types.js";
|
|
7
|
-
import type { ToolConfig, ToolPlugin } from "./plugin-types.js";
|
|
7
|
+
import type { ComposedTool, ToolConfig, ToolPlugin } from "./plugin-types.js";
|
|
8
8
|
export declare class ComposableMCPServer extends Server {
|
|
9
9
|
private pluginManager: any;
|
|
10
10
|
private toolManager: any;
|
|
@@ -76,6 +76,28 @@ export declare class ComposableMCPServer extends Server {
|
|
|
76
76
|
/**
|
|
77
77
|
* Get all internal tool names (tools that are not public)
|
|
78
78
|
*/ getInternalToolNames(): string[];
|
|
79
|
+
/**
|
|
80
|
+
* Get all internal tools with their full metadata (description, schema)
|
|
81
|
+
* Internal tools are not exposed to MCP clients but available within the agent
|
|
82
|
+
*/ getInternalTools(): Array<{
|
|
83
|
+
name: string;
|
|
84
|
+
description: string;
|
|
85
|
+
inputSchema: JSONSchema;
|
|
86
|
+
}>;
|
|
87
|
+
/**
|
|
88
|
+
* Get a single tool with full details including execute callback
|
|
89
|
+
* Works for both public and internal tools
|
|
90
|
+
*/ getComposedTool(name: string): ComposedTool | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* Get all tools (public and internal) as composed tools with execute callback
|
|
93
|
+
*/ getAllComposedTools(): ComposedTool[];
|
|
94
|
+
/**
|
|
95
|
+
* Get all tools (public and internal) with full details
|
|
96
|
+
*/ getAllTools(): Array<{
|
|
97
|
+
name: string;
|
|
98
|
+
description: string;
|
|
99
|
+
inputSchema: JSONSchema;
|
|
100
|
+
}>;
|
|
79
101
|
/**
|
|
80
102
|
* Get hidden tool schema by name (for internal access)
|
|
81
103
|
*/ getHiddenToolSchema(name: string): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.d.ts","sources":["../../src/compose.ts"],"names":[],"mappings":"AAAA,SAGE,KAAK,cAAc,EAGnB,KAAK,IAAI,6CAC8C;AACzD,SAAwC,KAAK,MAAM,4BAA4B;AAC/E,cAAc,UAAU,6BAA6B;AACrD,SACE,MAAM,EACN,KAAK,aAAa,oDAC4C;AAGhE,cAAc,iBAAiB,EAAE,UAAU,kCAAkC;AAC7E,cAAc,UAAU,EAAE,YAAY,qBAAqB;AAM3D,
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sources":["../../src/compose.ts"],"names":[],"mappings":"AAAA,SAGE,KAAK,cAAc,EAGnB,KAAK,IAAI,6CAC8C;AACzD,SAAwC,KAAK,MAAM,4BAA4B;AAC/E,cAAc,UAAU,6BAA6B;AACrD,SACE,MAAM,EACN,KAAK,aAAa,oDAC4C;AAGhE,cAAc,iBAAiB,EAAE,UAAU,kCAAkC;AAC7E,cAAc,UAAU,EAAE,YAAY,qBAAqB;AAM3D,cAAc,YAAY,EAAE,UAAU,EAAE,UAAU,4BAA4B;AAe9E,OAAO,cAAM,4BAA4B;EACvC,QAAQ,mBAA6B;EACrC,QAAQ,iBAAyB;EACjC,QAAQ,YAAsC;EAC9C,QAAQ,iBAA4C;EAGpD,IAAI,mBAAmB,IAAI,MAAM,EAAE,MAAM;EAIzC,YAAY,aAAa,cAAc,EAAE,SAAS,aAAa;EAiB/D;;;;;;;;;;;;;;;GAeC,GACD,mBAAmB,WAAW,MAAM,EAAE,QAAQ,UAAU,GAAG,IAAI;EAI/D;;GAEC,GACD,cAAc,WAAW,MAAM,GAAG,aAAa,SAAS;EAIxD;;GAEC,GACD,cAAc,WAAW,MAAM,GAAG,OAAO;EAIzC;;GAEC,GACD,2BAA2B,MAAM;EAIjC;;;GAGC,GACD,AAAM,gBAAgB,UAAU,MAAM,GAAG,QAAQ;EAqBjD;;GAEC,GACD,AAAM,sBAAsB,QAAQ,IAAI;UAqB1B;UAsDN;EAIR,KAAK,GACH,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,cAAc,OAAO,KAAK,UAAU,EACpC,KAAK,MAAM,GAAG,QAAQ,OAAO,KAAK,OAAO,EACzC;IAAW,WAAW,OAAO;IAAE,SAAS,OAAO;IAAE,UAAU;GACvD;EA+JN;;GAEC,GACD,gBAAgB,MAAM,MAAM,GAAG,eAAe,SAAS;EAIvD;;GAEC,GACD,eAAe,QAAQ,MAAM,GAAG,aAAa,SAAS;EAItD;;;GAGC,GACD,AAAM,SACJ,MAAM,MAAM,EACZ,MAAM,OAAO,EACb;IAAW,YAAY,MAAM;IAAE,iBAAiB,MAAM;GAAS,GAC9D,QAAQ,OAAO;EA4JlB;;GAEC,GACD,sBAAsB,MAAM;EAI5B;;GAEC,GACD,kBAAkB;EAIlB;;GAEC,GACD,sBAAsB,MAAM;EAI5B;;GAEC,GACD,wBAAwB,MAAM;EAM9B;;;GAGC,GACD,oBAAoB;IAClB,MAAM,MAAM;IACZ,aAAa,MAAM;IACnB,aAAa;;EAef;;;GAGC,GACD,gBAAgB,MAAM,MAAM,GAAG,eAAe,SAAS;EAIvD;;GAEC,GACD,uBAAuB;EAIvB;;GAEC,GACD,eAAe;IACb,MAAM,MAAM;IACZ,aAAa,MAAM;IACnB,aAAa;;EAWf;;GAEC,GACD,oBACE,MAAM,MAAM;IACT,aAAa,MAAM;IAAE,QAAQ;MAAe,SAAS;EAI1D;;GAEC,GACD,aAAa,MAAM,MAAM,GAAG,OAAO;EAInC;;GAEC,GACD,WAAW,UAAU,MAAM,EAAE,QAAQ,UAAU,GAAG,IAAI;EAItD;;GAEC,GACD,cAAc,UAAU,MAAM,GAAG,aAAa,SAAS;EAIvD;;GAEC,GACD,iBAAiB,UAAU,MAAM,GAAG,OAAO;EAI3C;;GAEC,GACD,AAAM,UAAU,QAAQ,UAAU,GAAG,QAAQ,IAAI;EAIjD;;GAEC,GACD,AAAM,mBACJ,YAAY,MAAM,EAClB;IAAW,QAAQ,OAAO;GAAoB,GAC7C,QAAQ,IAAI;UAOD;EAOd;;GAEC,GACD,AAAM,kBAAkB,QAAQ,IAAI;EAIpC;;GAEC,GACD,SAAe,SAAS,QAAQ,IAAI;EAK9B,QACJ,MAAM,MAAM,GAAG,IAAI,EACnB,aAAa,MAAM,EACnB,aAAY,UAA+B,EAC3C,UAAS,kBAAkB,UAAgC,EAC3D,SAAS,MAAM;AAoRnB"}
|