@withpica/mcp-server-directory 1.1.0 → 1.3.0

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.
Files changed (76) hide show
  1. package/CHANGELOG.md +43 -26
  2. package/package.json +4 -2
  3. package/scripts/build-skills.ts +192 -0
  4. package/src/__tests__/prompts/index.test.ts +47 -64
  5. package/src/__tests__/prompts/prompt-eval-harness.test.ts +135 -104
  6. package/src/__tests__/skills/skills-registry.test.ts +63 -0
  7. package/src/__tests__/skills/skills-tools.test.ts +74 -0
  8. package/src/__tests__/tools/chain.test.ts +122 -0
  9. package/src/__tests__/tools/composability-chains.test.ts +4 -2
  10. package/src/__tests__/tools/people.test.ts +9 -3
  11. package/src/__tests__/tools/works.test.ts +32 -3
  12. package/src/prompts/index.ts +97 -141
  13. package/src/prompts/public-question-atlas.ts +557 -0
  14. package/src/server.ts +123 -11
  15. package/src/skills/find-music-for-sync-brief/SKILL.md +89 -0
  16. package/src/skills/index.ts +63 -0
  17. package/src/skills/skills.generated.ts +33 -0
  18. package/src/tools/chain.ts +118 -0
  19. package/src/tools/index.ts +15 -0
  20. package/src/tools/people.ts +22 -41
  21. package/src/tools/recordings.ts +7 -3
  22. package/src/tools/search.ts +7 -4
  23. package/src/tools/skills.ts +146 -0
  24. package/src/tools/works.ts +39 -46
  25. package/dist/client.d.ts +0 -12
  26. package/dist/client.d.ts.map +0 -1
  27. package/dist/client.js +0 -93
  28. package/dist/client.js.map +0 -1
  29. package/dist/config.d.ts +0 -9
  30. package/dist/config.d.ts.map +0 -1
  31. package/dist/config.js +0 -15
  32. package/dist/config.js.map +0 -1
  33. package/dist/index.d.ts +0 -3
  34. package/dist/index.d.ts.map +0 -1
  35. package/dist/index.js +0 -28
  36. package/dist/index.js.map +0 -1
  37. package/dist/prompts/index.d.ts +0 -33
  38. package/dist/prompts/index.d.ts.map +0 -1
  39. package/dist/prompts/index.js +0 -208
  40. package/dist/prompts/index.js.map +0 -1
  41. package/dist/resources/llms-primer.d.ts +0 -2
  42. package/dist/resources/llms-primer.d.ts.map +0 -1
  43. package/dist/resources/llms-primer.js +0 -35
  44. package/dist/resources/llms-primer.js.map +0 -1
  45. package/dist/server.d.ts +0 -13
  46. package/dist/server.d.ts.map +0 -1
  47. package/dist/server.js +0 -104
  48. package/dist/server.js.map +0 -1
  49. package/dist/tools/index.d.ts +0 -26
  50. package/dist/tools/index.d.ts.map +0 -1
  51. package/dist/tools/index.js +0 -43
  52. package/dist/tools/index.js.map +0 -1
  53. package/dist/tools/people.d.ts +0 -14
  54. package/dist/tools/people.d.ts.map +0 -1
  55. package/dist/tools/people.js +0 -190
  56. package/dist/tools/people.js.map +0 -1
  57. package/dist/tools/recordings.d.ts +0 -12
  58. package/dist/tools/recordings.d.ts.map +0 -1
  59. package/dist/tools/recordings.js +0 -141
  60. package/dist/tools/recordings.js.map +0 -1
  61. package/dist/tools/search.d.ts +0 -12
  62. package/dist/tools/search.d.ts.map +0 -1
  63. package/dist/tools/search.js +0 -53
  64. package/dist/tools/search.js.map +0 -1
  65. package/dist/tools/works.d.ts +0 -15
  66. package/dist/tools/works.d.ts.map +0 -1
  67. package/dist/tools/works.js +0 -249
  68. package/dist/tools/works.js.map +0 -1
  69. package/dist/utils/errors.d.ts +0 -14
  70. package/dist/utils/errors.d.ts.map +0 -1
  71. package/dist/utils/errors.js +0 -48
  72. package/dist/utils/errors.js.map +0 -1
  73. package/dist/utils/formatting.d.ts +0 -10
  74. package/dist/utils/formatting.d.ts.map +0 -1
  75. package/dist/utils/formatting.js +0 -16
  76. package/dist/utils/formatting.js.map +0 -1
@@ -1,249 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- import { formatAsText, formatStructuredList } from "../utils/formatting.js";
3
- export class DirectoryWorksTools {
4
- client;
5
- constructor(client) {
6
- this.client = client;
7
- }
8
- getTools() {
9
- return [
10
- {
11
- definition: {
12
- name: "directory_list_works",
13
- description: "Browse and filter verified musical works in the PICA public directory. " +
14
- "Search by title, ISWC, publisher, or label. Returns paginated results. " +
15
- "→ then: directory_lookup_work_full (full details with credits and audio)",
16
- inputSchema: {
17
- type: "object",
18
- properties: {
19
- q: {
20
- type: "string",
21
- description: "Text search across work titles and identifiers",
22
- },
23
- iswc: {
24
- type: "string",
25
- description: "Filter by ISWC (e.g. T-123.456.789-0)",
26
- },
27
- publisher: {
28
- type: "string",
29
- description: "Filter by publisher name (partial match)",
30
- },
31
- label: {
32
- type: "string",
33
- description: "Filter by record label (partial match)",
34
- },
35
- page: {
36
- type: "number",
37
- description: "Page number (default: 1, 20 results per page)",
38
- },
39
- },
40
- },
41
- },
42
- executor: this.listWorks.bind(this),
43
- },
44
- {
45
- definition: {
46
- name: "directory_lookup_work",
47
- description: "Get full details of a single work by ISWC or work ID. " +
48
- "Returns credits, recordings, attestation status, provenance, DSP links, and carbon badge. " +
49
- "→ then: directory_lookup_work_full (agent-optimised markdown), directory_lookup_person_full (inspect a credited writer)",
50
- inputSchema: {
51
- type: "object",
52
- properties: {
53
- identifier: {
54
- type: "string",
55
- description: "ISWC (e.g. T-123.456.789-0) or work UUID",
56
- },
57
- },
58
- required: ["identifier"],
59
- },
60
- },
61
- executor: this.lookupWork.bind(this),
62
- },
63
- {
64
- definition: {
65
- name: "directory_lookup_work_full",
66
- description: "Get complete details about a work in the public directory — credits with IPI numbers and attestation status, " +
67
- "recordings with ISRCs, audio analysis (BPM, key, energy), DSP links (Spotify, Apple Music), " +
68
- "AI provenance, and registration score. Returns a structured markdown summary optimised for agent reasoning. " +
69
- "→ then: directory_lookup_person_full (research a credited writer), directory_search_recordings (find similar tracks by audio)",
70
- inputSchema: {
71
- type: "object",
72
- properties: {
73
- identifier: {
74
- type: "string",
75
- description: "ISWC (e.g. T-123.456.789-0) or work UUID",
76
- },
77
- },
78
- required: ["identifier"],
79
- },
80
- },
81
- executor: this.lookupWorkFull.bind(this),
82
- },
83
- {
84
- definition: {
85
- name: "directory_lookup_isrc",
86
- description: "Find musical work(s) associated with an ISRC code. " +
87
- "ISRC identifies a specific recording; this returns the underlying work(s). " +
88
- "→ then: directory_lookup_work_full (full details on matched work)",
89
- inputSchema: {
90
- type: "object",
91
- properties: {
92
- isrc: {
93
- type: "string",
94
- description: "ISRC code (e.g. USABC1234567)",
95
- },
96
- },
97
- required: ["isrc"],
98
- },
99
- },
100
- executor: this.lookupIsrc.bind(this),
101
- },
102
- ];
103
- }
104
- async listWorks(args) {
105
- const page = Math.max(args.page || 1, 1);
106
- const limit = 20;
107
- const offset = (page - 1) * limit;
108
- const params = {
109
- limit: String(limit),
110
- offset: String(offset),
111
- };
112
- if (args.q)
113
- params.q = args.q;
114
- if (args.iswc)
115
- params.iswc = args.iswc;
116
- if (args.publisher)
117
- params.publisher = args.publisher;
118
- if (args.label)
119
- params.label = args.label;
120
- const response = await this.client.request("/works", params);
121
- return formatStructuredList(response.data || [], "work", {
122
- page,
123
- total: response.pagination?.total || 0,
124
- total_pages: Math.ceil((response.pagination?.total || 0) / limit),
125
- });
126
- }
127
- async lookupWork(args) {
128
- const response = await this.client.request(`/works/${encodeURIComponent(args.identifier)}`);
129
- return formatAsText(response.data);
130
- }
131
- async lookupWorkFull(args) {
132
- const response = await this.client.request(`/works/${encodeURIComponent(args.identifier)}`);
133
- const data = response.data;
134
- if (!data) {
135
- return {
136
- content: [{ type: "text", text: "Work not found." }],
137
- structuredContent: {},
138
- };
139
- }
140
- const lines = [];
141
- // Title + artist
142
- const artistName = data.artist_name || data.primary_artist || "";
143
- lines.push(`## ${data.title}${artistName ? ` by ${artistName}` : ""}`);
144
- lines.push("");
145
- // Key metadata line
146
- const metaParts = [];
147
- if (data.iswc)
148
- metaParts.push(`**ISWC:** ${data.iswc}`);
149
- if (data.organisation_name)
150
- metaParts.push(`**Organisation:** ${data.organisation_name}`);
151
- if (metaParts.length > 0)
152
- lines.push(metaParts.join(" | "));
153
- // Score
154
- if (data.score !== undefined && data.score !== null) {
155
- const tier = data.score >= 80
156
- ? "verified"
157
- : data.score >= 50
158
- ? "partial"
159
- : "incomplete";
160
- lines.push(`- **Score:** ${data.score}/100 (${tier})`);
161
- }
162
- lines.push("");
163
- // Credits
164
- const credits = data.credits || [];
165
- lines.push(`### Credits (${credits.length})`);
166
- if (credits.length > 0) {
167
- lines.push("| Role | Name | IPI | Attestation |");
168
- lines.push("| --- | --- | --- | --- |");
169
- for (const c of credits) {
170
- const role = c.role || c.credit_role || "—";
171
- const name = c.name || c.person_name || "—";
172
- const ipi = c.ipi || c.ipi_number || "—";
173
- const attestation = c.attestation_status || c.attestation || "—";
174
- lines.push(`| ${role} | ${name} | ${ipi} | ${attestation} |`);
175
- }
176
- }
177
- else {
178
- lines.push("_No credits recorded._");
179
- }
180
- lines.push("");
181
- // Recordings
182
- const recordings = data.recordings || [];
183
- lines.push(`### Recordings (${recordings.length})`);
184
- if (recordings.length > 0) {
185
- lines.push("| ISRC | Type |");
186
- lines.push("| --- | --- |");
187
- for (const r of recordings) {
188
- const isrc = r.isrc || "—";
189
- const type = r.recording_type || r.type || "—";
190
- lines.push(`| ${isrc} | ${type} |`);
191
- }
192
- }
193
- else {
194
- lines.push("_No recordings linked._");
195
- }
196
- lines.push("");
197
- // Audio analysis
198
- const audio = data.audio_analysis || data.audio || null;
199
- if (audio) {
200
- lines.push("### Audio");
201
- const audioParts = [];
202
- if (audio.bpm !== undefined && audio.bpm !== null)
203
- audioParts.push(`**BPM:** ${audio.bpm}`);
204
- if (audio.key)
205
- audioParts.push(`**Key:** ${audio.key}`);
206
- if (audio.energy !== undefined && audio.energy !== null)
207
- audioParts.push(`**Energy:** ${audio.energy}`);
208
- if (audioParts.length > 0) {
209
- lines.push(`- ${audioParts.join(" | ")}`);
210
- }
211
- lines.push("");
212
- }
213
- // DSP links
214
- const dsp = data.dsp_links || data.streaming_links || null;
215
- if (dsp && typeof dsp === "object" && Object.keys(dsp).length > 0) {
216
- lines.push("### DSP Links");
217
- if (dsp.spotify)
218
- lines.push(`- Spotify: ${dsp.spotify}`);
219
- if (dsp.apple_music)
220
- lines.push(`- Apple Music: ${dsp.apple_music}`);
221
- if (dsp.youtube)
222
- lines.push(`- YouTube: ${dsp.youtube}`);
223
- // catch any other keys
224
- for (const [key, val] of Object.entries(dsp)) {
225
- if (!["spotify", "apple_music", "youtube"].includes(key) && val) {
226
- lines.push(`- ${key}: ${val}`);
227
- }
228
- }
229
- lines.push("");
230
- }
231
- const markdown = lines.join("\n");
232
- return {
233
- content: [{ type: "text", text: markdown }],
234
- structuredContent: data,
235
- };
236
- }
237
- async lookupIsrc(args) {
238
- const response = await this.client.request("/works", {
239
- isrc: args.isrc,
240
- limit: "100",
241
- offset: "0",
242
- });
243
- return formatStructuredList(response.data || [], "work", {
244
- isrc: args.isrc,
245
- total: response.pagination?.total || 0,
246
- });
247
- }
248
- }
249
- //# sourceMappingURL=works.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"works.js","sourceRoot":"","sources":["../../src/tools/works.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- export declare class McpServerError extends Error {
2
- code: string;
3
- details?: any | undefined;
4
- constructor(message: string, code: string, details?: any | undefined);
5
- }
6
- export declare class ToolExecutionError extends McpServerError {
7
- constructor(message: string, details?: any);
8
- }
9
- export declare function formatError(error: any): {
10
- type: string;
11
- text: string;
12
- };
13
- export declare function logError(context: string, error: any): void;
14
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAe,SAAQ,KAAK;IAG9B,IAAI,EAAE,MAAM;IACZ,OAAO,CAAC,EAAE,GAAG;gBAFpB,OAAO,EAAE,MAAM,EACR,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,GAAG,YAAA;CAMvB;AAED,qBAAa,kBAAmB,SAAQ,cAAc;gBACxC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAI3C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA+BtE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAS1D"}
@@ -1,48 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- export class McpServerError extends Error {
3
- code;
4
- details;
5
- constructor(message, code, details) {
6
- super(message);
7
- this.code = code;
8
- this.details = details;
9
- this.name = "McpServerError";
10
- Object.setPrototypeOf(this, McpServerError.prototype);
11
- }
12
- }
13
- export class ToolExecutionError extends McpServerError {
14
- constructor(message, details) {
15
- super(message, "TOOL_EXECUTION_ERROR", details);
16
- this.name = "ToolExecutionError";
17
- }
18
- }
19
- export function formatError(error) {
20
- if (error instanceof McpServerError) {
21
- return {
22
- type: "text",
23
- text: JSON.stringify({ error: error.code, message: error.message, details: error.details }, null, 2),
24
- };
25
- }
26
- if (error instanceof Error) {
27
- return {
28
- type: "text",
29
- text: JSON.stringify({ error: "UNKNOWN_ERROR", message: error.message }, null, 2),
30
- };
31
- }
32
- return {
33
- type: "text",
34
- text: JSON.stringify({ error: "UNKNOWN_ERROR", message: String(error) }, null, 2),
35
- };
36
- }
37
- export function logError(context, error) {
38
- const entry = {
39
- level: "error",
40
- context,
41
- message: error instanceof Error ? error.message : String(error),
42
- timestamp: new Date().toISOString(),
43
- };
44
- if (error instanceof Error && error.stack)
45
- entry.stack = error.stack;
46
- console.error(JSON.stringify(entry));
47
- }
48
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,MAAM,OAAO,cAAe,SAAQ,KAAK;IAG9B;IACA;IAHT,YACE,OAAe,EACR,IAAY,EACZ,OAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,YAAO,GAAP,OAAO,CAAM;QAGpB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IACpD,YAAY,OAAe,EAAE,OAAa;QACxC,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,KAAU;IACpC,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EACrE,IAAI,EACJ,CAAC,CACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,EAClD,IAAI,EACJ,CAAC,CACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAClD,IAAI,EACJ,CAAC,CACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,KAAU;IAClD,MAAM,KAAK,GAA4B;QACrC,KAAK,EAAE,OAAO;QACd,OAAO;QACP,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/D,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IACF,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IACrE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -1,10 +0,0 @@
1
- export interface FormattedResult {
2
- content: Array<{
3
- type: string;
4
- text: string;
5
- }>;
6
- structuredContent?: Record<string, unknown>;
7
- }
8
- export declare function formatAsText(data: any): FormattedResult;
9
- export declare function formatStructuredList<T>(items: T[], entityName: string, metadata?: Record<string, any>): FormattedResult;
10
- //# sourceMappingURL=formatting.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,GAAG,eAAe,CAKvD;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,KAAK,EAAE,CAAC,EAAE,EACV,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,eAAe,CASjB"}
@@ -1,16 +0,0 @@
1
- // Copyright (c) 2024-2026 Withpica Ltd. All rights reserved.
2
- export function formatAsText(data) {
3
- return {
4
- content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
5
- structuredContent: data,
6
- };
7
- }
8
- export function formatStructuredList(items, entityName, metadata) {
9
- const count = items.length;
10
- const summary = `Found ${count} ${entityName}${count !== 1 ? "s" : ""}${metadata?.query ? ` matching "${metadata.query}"` : ""}.`;
11
- return {
12
- content: [{ type: "text", text: summary }],
13
- structuredContent: { count, items, ...metadata },
14
- };
15
- }
16
- //# sourceMappingURL=formatting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAO7D,MAAM,UAAU,YAAY,CAAC,IAAS;IACpC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAChE,iBAAiB,EAAE,IAA+B;KACnD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAU,EACV,UAAkB,EAClB,QAA8B;IAE9B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B,MAAM,OAAO,GAAG,SAAS,KAAK,IAAI,UAAU,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GACnE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,cAAc,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EACtD,GAAG,CAAC;IACJ,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC1C,iBAAiB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,QAAQ,EAA6B;KAC5E,CAAC;AACJ,CAAC"}