From 3dff62d308e4ec79ae92b38ed276fd8482ddbad2 Mon Sep 17 00:00:00 2001 From: James Liounis Date: Sun, 27 Apr 2025 17:29:56 -0400 Subject: [PATCH 01/84] add deep wiki --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index 4dba088..b2c854c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,18 @@ An MCP server implementation that integrates the Sonar API to provide Claude with unparalleled real-time, web-wide research. +Please refer to the official [DeepWiki page](https://deepwiki.com/ppl-ai/modelcontextprotocol) for assistance with implementation. + +# High-level System Architecture + +*Credits: DeepWiki powered by Devin* + +![System Architecture](perplexity-ask/assets/system_architecture.png) + + + + + ![Demo](perplexity-ask/assets/demo_screenshot.png) From 332deaf8e6f51fdcfefe0a35b6fa3b777e246038 Mon Sep 17 00:00:00 2001 From: James Liounis Date: Sun, 27 Apr 2025 17:32:41 -0400 Subject: [PATCH 02/84] deploy system arch diagram --- perplexity-ask/assets/system_architecture.png | Bin 0 -> 240899 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 perplexity-ask/assets/system_architecture.png diff --git a/perplexity-ask/assets/system_architecture.png b/perplexity-ask/assets/system_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..3f16b88394b0286529f64b5e5f08411b32ae9864 GIT binary patch literal 240899 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⁣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

$Q%X_MNmFm-uynrHl_9bew^=U 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%0D9pXdYSm`P_rZSl_2G-E)>js)-|h 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¬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 aHKqOgNqSRz&!;bE00K`}KbLh*2~7Zf=q$_t literal 0 HcmV?d00001 From a6348f7efaaadd9c8748d16cf6292ad1a61fd3dc Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 26 Sep 2025 21:26:32 +0100 Subject: [PATCH 03/84] implement search tool --- perplexity-ask/index.ts | 156 +++++++++++++++- perplexity-ask/package-lock.json | 299 +++++++++++++++++++++++++++++-- 2 files changed, 440 insertions(+), 15 deletions(-) diff --git a/perplexity-ask/index.ts b/perplexity-ask/index.ts index f5e5d6d..ee05e6d 100644 --- a/perplexity-ask/index.ts +++ b/perplexity-ask/index.ts @@ -117,6 +117,43 @@ const PERPLEXITY_REASON_TOOL: Tool = { }, }; +/** + * Definition of the Perplexity Search Tool. + * This tool performs web search using the Perplexity Search API. + */ +const PERPLEXITY_SEARCH_TOOL: Tool = { + name: "perplexity_search", + description: + "Performs web search using the Perplexity Search API. " + + "Returns ranked search results with titles, URLs, snippets, and metadata.", + inputSchema: { + type: "object", + properties: { + query: { + type: "string", + description: "Search query string", + }, + max_results: { + type: "number", + description: "Maximum number of results to return (1-20, default: 10)", + minimum: 1, + maximum: 20, + }, + max_tokens_per_page: { + type: "number", + description: "Maximum tokens to extract per webpage (default: 1024)", + minimum: 256, + maximum: 2048, + }, + country: { + type: "string", + description: "ISO 3166-1 alpha-2 country code for regional results (e.g., 'US', 'GB')", + }, + }, + required: ["query"], + }, +}; + // Retrieve the Perplexity API key from environment variables const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; if (!PERPLEXITY_API_KEY) { @@ -196,6 +233,101 @@ async function performChatCompletion( return messageContent; } +/** + * Formats search results from the Perplexity Search API into a readable string. + * + * @param {any} data - The search response data from the API. + * @returns {string} Formatted search results. + */ +function formatSearchResults(data: any): string { + if (!data.results || !Array.isArray(data.results)) { + return "No search results found."; + } + + let formattedResults = `Found ${data.results.length} search results:\n\n`; + + data.results.forEach((result: any, index: number) => { + formattedResults += `${index + 1}. **${result.title}**\n`; + formattedResults += ` URL: ${result.url}\n`; + if (result.snippet) { + const snippet = result.snippet.length > 300 + ? result.snippet.substring(0, 300) + "..." + : result.snippet; + formattedResults += ` ${snippet}\n`; + } + if (result.date) { + formattedResults += ` Date: ${result.date}\n`; + } + formattedResults += `\n`; + }); + + return formattedResults; +} + +/** + * Performs a web search using the Perplexity Search API. + * + * @param {string} query - The search query string. + * @param {number} maxResults - Maximum number of results to return (1-20). + * @param {number} maxTokensPerPage - Maximum tokens to extract per webpage. + * @param {string} country - Optional ISO country code for regional results. + * @returns {Promise} The formatted search results. + * @throws Will throw an error if the API request fails. + */ +async function performSearch( + query: string, + maxResults: number = 10, + maxTokensPerPage: number = 1024, + country?: string +): Promise { + const url = new URL("https://api.perplexity.ai/search"); + const body: any = { + query: query, + max_results: maxResults, + max_tokens_per_page: maxTokensPerPage, + }; + + if (country) { + body.country = country; + } + + let response; + try { + response = await fetch(url.toString(), { + method: "POST", + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, + }, + body: JSON.stringify(body), + }); + } catch (error) { + throw new Error(`Network error while calling Perplexity Search API: ${error}`); + } + + // Check for non-successful HTTP status + if (!response.ok) { + let errorText; + try { + errorText = await response.text(); + } catch (parseError) { + errorText = "Unable to parse error response"; + } + throw new Error( + `Perplexity Search API error: ${response.status} ${response.statusText}\n${errorText}` + ); + } + + let data; + try { + data = await response.json(); + } catch (jsonError) { + throw new Error(`Failed to parse JSON response from Perplexity Search API: ${jsonError}`); + } + + return formatSearchResults(data); +} + // Initialize the server with tool metadata and capabilities const server = new Server( { @@ -214,7 +346,7 @@ const server = new Server( * When the client requests a list of tools, this handler returns all available Perplexity tools. */ server.setRequestHandler(ListToolsRequestSchema, async () => ({ - tools: [PERPLEXITY_ASK_TOOL, PERPLEXITY_RESEARCH_TOOL, PERPLEXITY_REASON_TOOL], + tools: [PERPLEXITY_ASK_TOOL, PERPLEXITY_RESEARCH_TOOL, PERPLEXITY_REASON_TOOL, PERPLEXITY_SEARCH_TOOL], })); /** @@ -267,6 +399,26 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => { isError: false, }; } + case "perplexity_search": { + if (typeof args.query !== "string") { + throw new Error("Invalid arguments for perplexity_search: 'query' must be a string"); + } + const { query, max_results, max_tokens_per_page, country } = args; + const maxResults = typeof max_results === "number" ? max_results : undefined; + const maxTokensPerPage = typeof max_tokens_per_page === "number" ? max_tokens_per_page : undefined; + const countryCode = typeof country === "string" ? country : undefined; + + const result = await performSearch( + query, + maxResults, + maxTokensPerPage, + countryCode + ); + return { + content: [{ type: "text", text: result }], + isError: false, + }; + } default: // Respond with an error if an unknown tool is requested return { @@ -296,7 +448,7 @@ async function runServer() { try { const transport = new StdioServerTransport(); await server.connect(transport); - console.error("Perplexity MCP Server running on stdio with Ask, Research, and Reason tools"); + console.error("Perplexity MCP Server running on stdio with Ask, Research, Reason, and Search tools"); } catch (error) { console.error("Fatal error running server:", error); process.exit(1); diff --git a/perplexity-ask/package-lock.json b/perplexity-ask/package-lock.json index f8e1c2d..594a077 100644 --- a/perplexity-ask/package-lock.json +++ b/perplexity-ask/package-lock.json @@ -1,23 +1,28 @@ { - "name": "@modelcontextprotocol/server-perplexity-ask", + "name": "server-perplexity-ask", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@modelcontextprotocol/server-perplexity-ask", + "name": "server-perplexity-ask", "version": "0.1.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.1" + "@modelcontextprotocol/sdk": "^1.0.1", + "axios": "^1.6.2", + "dotenv": "^16.3.1" }, "bin": { "mcp-server-perplexity-ask": "dist/index.js" }, "devDependencies": { - "@types/node": "^22", + "@types/node": "^20", "shx": "^0.3.4", "typescript": "^5.6.2" + }, + "engines": { + "node": ">=18" } }, "node_modules/@modelcontextprotocol/sdk": { @@ -32,13 +37,30 @@ } }, "node_modules/@types/node": { - "version": "22.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", - "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", + "version": "20.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.17.tgz", + "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" } }, "node_modules/balanced-match": { @@ -68,6 +90,31 @@ "node": ">= 0.8" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -84,6 +131,15 @@ "node": ">= 0.6" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -93,6 +149,113 @@ "node": ">= 0.8" } }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -104,12 +267,48 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -132,11 +331,49 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -217,6 +454,36 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -267,6 +534,12 @@ "dev": true, "license": "MIT" }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/raw-body": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", @@ -408,9 +681,9 @@ } }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, From f14bf0f3641343dfe43eaec6a0243518edda498d Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 26 Sep 2025 21:41:01 +0100 Subject: [PATCH 04/84] remove truncation --- perplexity-ask/index.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/perplexity-ask/index.ts b/perplexity-ask/index.ts index ee05e6d..d5e85f9 100644 --- a/perplexity-ask/index.ts +++ b/perplexity-ask/index.ts @@ -250,10 +250,7 @@ function formatSearchResults(data: any): string { formattedResults += `${index + 1}. **${result.title}**\n`; formattedResults += ` URL: ${result.url}\n`; if (result.snippet) { - const snippet = result.snippet.length > 300 - ? result.snippet.substring(0, 300) + "..." - : result.snippet; - formattedResults += ` ${snippet}\n`; + formattedResults += ` ${result.snippet}\n`; } if (result.date) { formattedResults += ` Date: ${result.date}\n`; From 75766cee5c07ac8438c34b6a10df712b9311e81a Mon Sep 17 00:00:00 2001 From: Kesku Date: Tue, 7 Oct 2025 16:32:17 -0700 Subject: [PATCH 05/84] Restructure: Move package to root, add GitHub Actions publishing - Move all package files from perplexity-ask/ to repo root - Update README.md - Set up GitHub Actions workflow for automated npm publishing with OIDC - Bump version --- .github/workflows/publish.yml | 46 ++++++ .gitignore | 1 + perplexity-ask/Dockerfile => Dockerfile | 0 README.md | 155 +++++------------- perplexity-ask/index.ts => index.ts | 0 .../package-lock.json => package-lock.json | 0 package.json | 51 ++++++ perplexity-ask/assets/available_tools.png | Bin 102920 -> 0 bytes .../assets/cursor-mcp-directory.png | Bin 99145 -> 0 bytes perplexity-ask/assets/cursor-settings.png | Bin 108381 -> 0 bytes perplexity-ask/assets/demo_screenshot.png | Bin 189345 -> 0 bytes .../assets/perplexity-ask-mcp-cursor.png | Bin 127977 -> 0 bytes perplexity-ask/assets/system_architecture.png | Bin 240899 -> 0 bytes .../assets/visual-indicator-mcp-tools.png | Bin 57831 -> 0 bytes perplexity-ask/package.json | 22 ++- perplexity-ask/tsconfig.json => tsconfig.json | 0 16 files changed, 150 insertions(+), 125 deletions(-) create mode 100644 .github/workflows/publish.yml rename perplexity-ask/Dockerfile => Dockerfile (100%) rename perplexity-ask/index.ts => index.ts (100%) rename perplexity-ask/package-lock.json => package-lock.json (100%) create mode 100644 package.json delete mode 100644 perplexity-ask/assets/available_tools.png delete mode 100644 perplexity-ask/assets/cursor-mcp-directory.png delete mode 100644 perplexity-ask/assets/cursor-settings.png delete mode 100644 perplexity-ask/assets/demo_screenshot.png delete mode 100644 perplexity-ask/assets/perplexity-ask-mcp-cursor.png delete mode 100644 perplexity-ask/assets/system_architecture.png delete mode 100644 perplexity-ask/assets/visual-indicator-mcp-tools.png rename perplexity-ask/tsconfig.json => tsconfig.json (100%) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..eaa6899 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,46 @@ +name: Publish to npm + +on: + release: + types: [published] + workflow_dispatch: + inputs: + version: + description: 'Version to publish (e.g., 0.2.1)' + required: true + type: string + +jobs: + publish: + runs-on: ubuntu-latest + environment: + name: production + permissions: + contents: read + id-token: write # Required for OIDC + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + registry-url: 'https://registry.npmjs.org' + + - name: Get latest npm + run: npm install -g npm@latest + + - name: Install dependencies + run: npm ci + + - name: Build package + run: npm run build + + - name: Update version (manual dispatch only) + if: github.event_name == 'workflow_dispatch' + run: npm version ${{ github.event.inputs.version }} --no-git-tag-version + + - name: Publish to npm + run: npm publish --access public diff --git a/.gitignore b/.gitignore index 112c4e8..7fe2a88 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ venv/ # Ignore dependency and build artifacts node_modules/ +dist/ npm-debug.log yarn-error.log diff --git a/perplexity-ask/Dockerfile b/Dockerfile similarity index 100% rename from perplexity-ask/Dockerfile rename to Dockerfile diff --git a/README.md b/README.md index b2c854c..cb0bfef 100644 --- a/README.md +++ b/README.md @@ -1,160 +1,83 @@ -# Perplexity Ask MCP Server +# Perplexity API Platform MCP Server -An MCP server implementation that integrates the Sonar API to provide Claude with unparalleled real-time, web-wide research. +The official MCP server implementation for the Perplexity API Platform, providing AI assistants with real-time web search, reasoning, and research capabilities through Sonar models and the Search API. Please refer to the official [DeepWiki page](https://deepwiki.com/ppl-ai/modelcontextprotocol) for assistance with implementation. -# High-level System Architecture - -*Credits: DeepWiki powered by Devin* - -![System Architecture](perplexity-ask/assets/system_architecture.png) - - - - - -![Demo](perplexity-ask/assets/demo_screenshot.png) - - -## Tools - -- **perplexity_ask** - - Engage in a conversation with the Sonar API for live web searches. - - **Inputs:** - - `messages` (array): An array of conversation messages. - - Each message must include: - - `role` (string): The role of the message (e.g., `system`, `user`, `assistant`). - - `content` (string): The content of the message. - -## Configuration - -### Step 1: - -Clone this repository: +## Quick Start ```bash -git clone git@github.com:ppl-ai/modelcontextprotocol.git +npx @perplexity-ai/mcp-server ``` -Navigate to the `perplexity-ask` directory and install the necessary dependencies: +## Available Tools -```bash -cd modelcontextprotocol/perplexity-ask && npm install -``` +### **perplexity_search** +Direct web search using the Perplexity Search API. Returns ranked search results with metadata, perfect for finding current information. + +### **perplexity_ask** +General-purpose conversational AI with real-time web search using the `sonar-pro` model. Great for quick questions and everyday searches. -### Step 2: Get a Sonar API Key +### **perplexity_research** +Deep, comprehensive research using the `sonar-deep-research` model. Ideal for thorough analysis and detailed reports. -1. Sign up for a [Sonar API account](https://docs.perplexity.ai/guides/getting-started). -2. Follow the account setup instructions and generate your API key from the developer dashboard. -3. Set the API key in your environment as `PERPLEXITY_API_KEY`. +### **perplexity_reason** +Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Perfect for complex analytical tasks. -### Step 3: Configure Claude Desktop +## Configuration -1. Download Claude desktop [here](https://claude.ai/download). +### Get Your API Key +1. Get your Perplexity API Key from the [API Portal](https://www.perplexity.ai/account/api/group) +2. Set it as an environment variable: `PERPLEXITY_API_KEY=your_key_here` -2. Add this to your `claude_desktop_config.json`: +### Claude Desktop +Add to your `claude_desktop_config.json`: ```json { "mcpServers": { - "perplexity-ask": { - "command": "docker", - "args": [ - "run", - "-i", - "--rm", - "-e", - "PERPLEXITY_API_KEY", - "mcp/perplexity-ask" - ], + "perplexity": { + "command": "npx", + "args": ["-y", "@perplexity-ai/mcp-server"], "env": { - "PERPLEXITY_API_KEY": "YOUR_API_KEY_HERE" + "PERPLEXITY_API_KEY": "your_key_here" } } } } ``` -### NPX +### Cursor & Claude Code +Use the HTTP-based configuration: ```json { "mcpServers": { - "perplexity-ask": { - "command": "npx", - "args": [ - "-y", - "server-perplexity-ask" - ], + "perplexity": { + "type": "http", + "url": "http://localhost:3000/mcp", "env": { - "PERPLEXITY_API_KEY": "YOUR_API_KEY_HERE" + "PERPLEXITY_API_KEY": "your_key_here" } } } } ``` -You can access the file using: +### Other MCP Clients +For any MCP-compatible client, use: ```bash -vim ~/Library/Application\ Support/Claude/claude_desktop_config.json +npx @perplexity-ai/mcp-server ``` -### Step 4: Build the Docker Image - -Docker build: - -```bash -docker build -t mcp/perplexity-ask:latest -f Dockerfile . -``` - -### Step 5: Testing - -Let's make sure Claude for Desktop is picking up the two tools we've exposed in our `perplexity-ask` server. You can do this by looking for the hammer icon: - -![Claude Visual Tools](perplexity-ask/assets/visual-indicator-mcp-tools.png) - -After clicking on the hammer icon, you should see the tools that come with the Filesystem MCP Server: - -![Available Integration](perplexity-ask/assets/available_tools.png) - -If you see both of these this means that the integration is active. Congratulations! This means Claude can now ask Perplexity. You can then simply use it as you would use the Perplexity web app. - -### Step 6: Advanced parameters - -Currently, the search parameters used are the default ones. You can modify any search parameter in the API call directly in the `index.ts` script. For this, please refer to the official [API documentation](https://docs.perplexity.ai/api-reference/chat-completions). - -### Troubleshooting - -The Claude documentation provides an excellent [troubleshooting guide](https://modelcontextprotocol.io/docs/tools/debugging) you can refer to. However, you can still reach out to us at api@perplexity.ai for any additional support or [file a bug](https://github.com/ppl-ai/api-discussion/issues). - - -# Cursor integration - -You can also use our MCP with Cursor (or any other app that supports this). To use Sonar with Cursor, you can follow the following steps. - -### Step 1: Navigate to your Cursor settings: - -![Cursor Settings](perplexity-ask/assets/cursor-settings.png) - -### Step 2: Navigate to the MCP directory - -And click on `Add new global MCP server` - -![Add Server](perplexity-ask/assets/cursor-mcp-directory.png) - - -### Step 3: Insert the MCP Server Configuration from above - -This is the same configuration you would use for any other application that supports MCP. - -You should then see the application being part of your available tools like this: - -![Cursor MCP](perplexity-ask/assets/perplexity-ask-mcp-cursor.png) +## Troubleshooting +- **API Key Issues**: Ensure `PERPLEXITY_API_KEY` is set correctly +- **Connection Errors**: Check your internet connection and API key validity +- **Tool Not Found**: Make sure the package is installed and the command path is correct -## License +For support, visit [community.perplexity.ai](https://community.perplexity.ai) or [file an issue](https://github.com/perplexityai/modelcontextprotocol/issues). -This MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository. +--- diff --git a/perplexity-ask/index.ts b/index.ts similarity index 100% rename from perplexity-ask/index.ts rename to index.ts diff --git a/perplexity-ask/package-lock.json b/package-lock.json similarity index 100% rename from perplexity-ask/package-lock.json rename to package-lock.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..7cf67a3 --- /dev/null +++ b/package.json @@ -0,0 +1,51 @@ +{ + "name": "@perplexity-ai/mcp-server", + "version": "0.2.1", + "description": "Official MCP server for Perplexity API Platform", + "keywords": [ + "ai", + "perplexity", + "mcp", + "modelcontextprotocol" + ], + "homepage": "https://docs.perplexity.ai/guides/mcp-server", + "bugs": { + "url": "https://github.com/perplexityai/modelcontextprotocol/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/perplexityai/modelcontextprotocol.git" + }, + "license": "MIT", + "author": "Perplexity <>", + "publishConfig": { + "access": "public" + }, + "type": "module", + "main": "dist/index.js", + "bin": { + "perplexity-mcp": "dist/index.js" + }, + "files": [ + "dist", + "README.md" + ], + "scripts": { + "build": "tsc && shx chmod +x dist/*.js", + "prepare": "npm run build", + "watch": "tsc --watch" + }, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.0.1", + "axios": "^1.6.2", + "dotenv": "^16.3.1" + }, + "devDependencies": { + "@types/node": "^20", + "shx": "^0.3.4", + "typescript": "^5.6.2" + }, + "engines": { + "node": ">=18" + } +} diff --git a/perplexity-ask/assets/available_tools.png b/perplexity-ask/assets/available_tools.png deleted file mode 100644 index e695100b2a91db775897efea672c72cf88d85ae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102920 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%0DHr8p?oVacq9> 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%0Dl9@`u1=8QUQ;m5ayXkzeUb#YR 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 diff --git a/perplexity-ask/assets/cursor-mcp-directory.png b/perplexity-ask/assets/cursor-mcp-directory.png deleted file mode 100644 index c9b9a28fbb00da25703a9c08bacad9e7013bbce3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99145 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

CFOEk3SYHOqlaqPO#u(H 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

;Cvl|{cQ5re>V1?8Icqb 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 diff --git a/perplexity-ask/assets/cursor-settings.png b/perplexity-ask/assets/cursor-settings.png deleted file mode 100644 index dfdaefb7287c0f74797f617a71610dde652e3af7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108381 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

7{5bX0#mT)cla9rcOenqf-;esz%?_ehb- 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�=2QSd@I*^1w!-eWmY^rN}aRK|}$-kA-T=k){C=6V1D zS6c49)2Gj#S@g(ElM*}Z1} z{3xDq=&rVkzOgB!#KsCazW9xLO=CDudBk&P1p=WURk$zn3^TG%cd-7Yb7++S*mhXq z4XOToh?FQt^H~Wu^{h6iFS1y7p}t&wc2cKvtxpybdVlArj1SRD+34d37B$ap)<-z5 z;_khz7qJ36FB>in#eCdCI|Y zyUFQcK2`)7#r&&?p@*%?)_enLhD((1NSZpz1X98t1FH2i<^$ELFGbihF66gi+?o`& z+U8}z`3a8LFr~dpvMGFWO<}7&?&JT$)C7if($9c(YpT%wmvsjkE=y4l4+HS)KF^A# zrSJ}lYHR+8QGWe=pY~|&ORtIh!|dXWp0sox-*nM+W=gK6F2TS{jltWE7A>*f6N@Zc z(f*N1A%zmf0n$rlPJxa4gvZoa8PhjXmV90>1keKJh13~j0NYUiZsIozxjDwZ{w6{& z*A;||Gk2XHK0COddyfqLkX)mbO5kQYw;byKdd6$-2~!q(wR956Y~q+&)f(&@H@SeD z9&(@&aGVV{soc*tD_-%oF0sk>z7T123czhYe{;w5?_0~4cO}>X^sDt4*bnuzVdXrx863 zTYrBryB-|}31eC{Lse2%{lr{^Z6IgZ^gn5HY{_k~9q6XZL4eEd~Vbw8T0gDHv6d6~l7L)t+ z*8hQvyx2>xF*j3rRh6~#_ZYU(a(|| z4&4-gwE!5cxNClNRvP$U3PiMGr4RmU3;%kFJPzyQpi;IyaQSe1uXb&6Ah$TWM=dvK zhXy-=X^W8VHMaZw886r^vm-#|ljQXtDRC$$UM&q{$$G^f` zAp3Bj%S2f_F*)r&ls=7;#oOyz1{cxgVMW8*9>tOjak5wL>C91mPIj_|&cV!8U5dsq@OT9+OPgp)#Wq&!~jQk3J6drzRLNl1Z{iEWe* zahpXs`}Mo$3~PuRR}2qWd@ugkXXk_>TvRf{?1E@ilfAGqL&13JL~XINtOqik5n>DT zIU~PadSqvMM81B_Q@>H~aX>CVbT|BgA|VtmLtaCu^;HD0i}pJ{F(o@cEjzjOG4H`G z?ax7+68$HZH3YL)5Q6~-|zR-4zQ`z z6VpGLiZH5c8C&jaQ#Q!3PYjtQH{tqRQ;pY?@`@N}asba#^I|)Mz2oQsAA|cVPAarI z_1{vl7jxweTu-HGty zur1f)#pk(Qf4-np*Zb{^uBPH=50S*>*`i;bs`S}2>ARaYI;i2W}&XGW&O`bQ*ijHspcIZ9*7IQPL&=3QM^;T?S1|(dHE&pFgL4j z(LVGbf}NU5ZEp&5dovi{75J+Ih!MNW^}9yVlWJ1#+jENbuAT8p0b7r*l?6Ip$z|6B zb5yUY^u;swZ=e;(!NFE-0a>PbnWud%ag?2ax*kSdep>7s3>9a)&QuP!%nTPA8avx+ zFr*)9C8GE9+-aj2`92_(H}FDaH7)R_OuB2vR*b5Y_Ha9MmfM6m1(6dt5Wh5B9u!sg z8HdnX2oHaw0Vq$Afd+h3Wu|cg_VKVw{6z}cW$FWp z+su{x$B}>O{mva-fS-NGyV%*ElQsoe8v1sEP*!J7zToT+7SsjwiR_K0izQnOKcB}x zCmtyMUKB)mWIH_qhe{;L?k!DNKf>gE)rYfW0Z%tJVygv}IL_!{W$|!sao*{JF~cG{ zs;fud_LlJm7S?qILmXH8F{&eY%mRb~IJdOWH^$#^0OyZ6(fOX3&p>K%%Uwt z{6Gh&b$;Tr=cnymb4{BYA-El~Q)|}&F11v5?-2&t`PCLA0s6iU+WkAoqMTR<(Hgd_ z2{g6Tl=rT2#+z&Gx+rkguOvP^na4x66I*H!0+!6X+M?{~TABmMD+QEwKwr>jmf{?z zn3wqfEzHNUA+t|SA(1;vWUBIeeQ`hR_i0$4+T?!=Hp$U?^OMW3R%_>J%WWtzjq0dm zDHfv`duW10v38~RpPEq=GJWO4YoIb|L5TqU4!daLDkxFk%sM-MD7syc%vm}pJL&Rw zkLNmlxL_5ttl|bz&`0PZ{OT^aH+kJbe=SH|OXALO7mz8;SzgAT00`?#0{)uOgZR`ja61Ou-h_9q-Fx5359`^y^M1OV28>qv)i*#P1Y;5Rfoo$7Td+SZDe z{j#+;?Bkpw?Jn3JPLm^by3M$`)0ic)<-NC#ZU)SAg?Yz0?K>TS#=@B$Bv<@i`qKTP zk8oWG7?bxgr{EE$e|%Z3aHTcxbG$w8=qL4|^xN`qJ?oz(qAjBNFYC_bhn&$LU5Ai_t&=gV+A@5ou_?U6^&lzpTjGv?qA;7exZ7U{r6$*|X&v@t?AV&05@D=N5T<+Bw&9 zcd^PcRoxGm@0263 zpBD5`*T@QiOiEuKb)0fuo%~K2>%kS0ChP=J)XxfT734%E?1Qp7SBb0s{;Ub%cCZce z&0qA~K&~EeLv#RRMtvQq$>o-HEgMJ%NK|#Vfsi{;ES2)gErSH=0_6uE&5%}}N!=f$ z)~1vxu_^gTq_$D&{z>3x$(i+{`^EM+e9ED4Sg`D;3_LkfUMg?FS3rRC9P~kTT=I{> z_WIJl_#AOiK2NPG`*2IA5ZjE4r6S?xMhbpmu~Xk_4v#NxXjYd{AO!!6 zclHR81q77UyRRj)2eoZI%N4e*m)Lb1QQeP1&L|t7D0g1ta2|1Vuw&VsD7DuB3n}%@ zy!U315c%16McYE-+S2;Ar30`!{8IC`Hk7SyreC)Zl5bkvSxQ{imh8bW?ahZo{0&4K$qo4rBZ=;ECQj=$1BoJGFf$P?* z9*9OMN}2r}uBX5Md8BHN)h0)Uw9vI1oHLk-S~5p!2_WB8^JIC?_B5LGE;XIfhYIs@ zx@a{Magtf>-`sUePwgaDX(FUIM8>Ta!v#KDBaz0buI`aS5_c8@vv4NtFw<%!9J*Gu zeaZN;^3gKa*-xyaXWCq-l}2R+CrGeqMYxoK%I-2TjBkq*s+_e?VCl%=YMdySRFNQ1zaCG!;3PA~P7vM3TWp7w{RkcS`iHlLWjrh~D+s z*i(g`oqAc3TB2j_^U6Cr&!2k}*73BDJP2W@345ew){T0KD9pgjdV(1egvZ>&Uk=NN z7j|cm=tDJ{%1XSxTmG(^R9Ex^`uGMJ2?`D^rsQsAGBW#?kCK*MKW5ln?rFQF8#dKz zR^EsG7aGgu|CQ-!pH^@)JiBIcGw}XsLB^$5Sh)~bHDd-*A>cqzw8@Z|*%!}f% z+*#A%8ypZw;@`mLN|z)knh+w%pWu2{|Az>szFjXHb?rY89Fq1ff@TM6(EjpAB_DZ$ zLh901W!=C?A-ThT6C*1lVrQF?cuYQ^(Ncep5_?Vz7<2w3B6369f;hW%FpX9N{wT$# z{ciP{zpP#T6yW~uG?+XtkA|AvbpU$4u306O_`fP z6a97kMw4qZ2=SEd;1>9}N+5D?J6ed6L4nnd<6hZXoSOzLP9@)*eS`4)Q5E5`c9I06 zZz9Pyp+Nk0nr}c7>#i8_thu`ccWjgT&>QESq$P$&&FQIfpO^OTYBqRGQUq;!2BL}} z(M(R=dArC)tfsK7hO2su5cLyK8a}6;4whZi#bqfG->OunC&osG;1*O|dQzuI*Z!Ju z+wwV0aXB}S*O#{+Hf4p8Gy@%GPW|P&jgM5*0Lih(xlceX97^l(Vm?Myh?r=BuB{3% zWui6{zWfa`h)Yoo89w%M0XG)b_`q zjYV6RtFC5biEw)>EkcC#?T~M_ca;Yfieoj)%uoY6c|{FRg=gF|Jr6%vChO9R$|o|0 zU&|D&hn#|Z-@|-C9Dq(3^-PASlY5zQ-oez<9Q~sP`^vv3l{a*8zmulilrp=&fvLjz zF+waXNiPiRcS%E3>d^}~Q~$=?liK?vz*`IQ8%`JH-Bo*E=U^5;0Py9@IAx^gX$!xM zZ8MmRbF@vqYJQJX-x682$zx5}*6I0SQUSg4?){BXyr5rirEbI6<>Fh_cr|;eJs$e) zXWEha?L`hN1fq||1n~9f0tB=_k9+{N-O9~>(D>OAxQqex?V$eVx)HK-QglB(UrV(` z*Po%050>M6ayORF5vO#y7?tr#pBL}Kfr|O!AdkHYlElk%Y{n1Aw32;xo%)=R49l3d z4!O4#^CraT1X^Ws|M(m;+#ac#Dw()`cW%!+@M%JNF#&ry;d!&tyf1c?UZ!v0B6bC{ zG!Z}nW!?PQO*_ct(yV!F5v~;Vrop@gAESx)?6n;x>KKtk95Nq;HB$l#TNik9qYE!*sh$?r}*T-}2LU=13j?400i- zy%}SjnD&Ul*_u&Z7;UNp|4mop2g&}1Df0iU7PD+1CQI2XK_uYWyH95?_riqz$uDlX4L0>&;X)u+R~r0}&Hr=C-KfKxzW2c8 za+W8b?PE)Qe=$4i?gBMV6z97I(!kbx?VYLuu!UPk$8V_Ms0of0_b) zhlPdhte=pOP`rhw@yhp)PijiFPhR!cn(DLqgek#PkGz`opI_8-^8QHpyr{~v1xC{( zmSmK4zLiPigGGR41^UA^5DI4GI_=nD4m$s>PlKH;+GRpQT>FV%i+=v)?OgpM7yhTg za=a2wi6utlzpl{*!)7pM3}qfuk2O`ZUzGU5SR%>)nfy)Y?pP)GI?yN6y8L`HQR}f6 z#(9IlFm*R8?-P5WdV5>W%SpCH2sVo|@Ji_N1wI}YO7R?D*lT$IvhY}7h=24xKx0hU zs5&N-I9Nr919iy};d1ToFs1ifd^AF+SG^mF#`DcGspq&yn8q08-{Bqz^^?s+ZGK=V zKyy@)Ej*N5e=-5G+S(b=$aU3p@8S2_k?)A!rK?)W7O!eSngH~hAbC_Z&==3C8=njc z?+I|9QQ!Q@R7_66x9=)i=(GP>8u)0o%Q*~49^DKLKd8sWfgT)TP-$sWy8qkrQ!8rT zWj#+XaaXf1+2Fd2+Dx}%Kd3QFQh5c1MV+0Jua(!4*0J9r`N8h`qdZRN78-2|(5{FL zssVR-SAg)2!EmkZPcT9Pr8W*IMmS5ls5(lqt$T2P0_$D5<#RDDviVzS-T-ppTVXgWDP} zZ9+;E;><4;1biea1O`tqG(6*7!D5Yuld6Re!)~fFpxk>+>0)R-mZId;;khkiIo@ke z)4N~Xj*<*zwcNAX^~}d$g0IuZEF_@>Cy7#8)y~$=XKJ5gDb*jnbNdl3JO+h2X$r*_ zwr78Kv2tfGE0e3TJ%~GC{aDzLLIW1Kn22)2OpbPryMX!n1?M1_ABlhnV#6Jn5FwQ`W34rBE>nI5TFRhwuJ=@ENq$4=^VFS zF4QwF>V8S4?RxeswMd$L?ewfF-M=6A7pCd4&`;>)kf)QR$!B+bs7x|z;P@q+*7Pl{ z(ujWhD;RQcPTzH+4Fe0~O$ne>Q#0q`%Jcyte5qj9c(#i>HbQZGJ441l97_P*$TFqIRoiS-T3+4L!#(6uC;cw19E`p*rg2YdE(w5WUc^JDQs zMf(Jmx|CNK3>=Do{M1sV2|&lIcBbTNYC=X0+d0bpZvQCighY&c)$CMnbIu2^IUh^CoM3lG7tVvTYt55@Zb`q>>k%r)KW z5*l3jbV?_d@iUX*6+U=W%`o~m*317MCG_8;1kEvG-KWpAQ=VDxMe2XwtF8qf$_Ow= zd$qs)&{D?|>SxNW<{nG!+O;mWGYY$&us9AS=n9#}l8Ma9h*3c-|pm8TlY zRVmrx|FcDI{vTW92!l@AhQUsC$gvFLq$tvwLPc>95G;^$X+#Wv2|&f6Yz->Rfsvkh zX)uN#$z-13ugV)2mJ^|%=t%&ta{8zf$)Its@RD4&JjccmOA=-Er~~YQV=IY;H;nSc zOtP8vzROBSl0jehrKDVj!R|9kf|%BNpE$j`C4(T$Z88rw5NN9uu_8b!PjUsC)HoYX zV7?lWIV!bRKK-Z@%^)w?R!^>;owN2BE19IypZj=;`v|;}|JDht@8gnXTEkMSs1r`Q zpHD_}HY7$-+dse%ZjAUMmtLU6bo+Y|;FXNng4OB;U|)>w&O+M+7)KfP_xN)$w7u&0yk0CQjh%nXzI@X%?3K+d&|b_G@;l;-01DoC>g7RKi?$x%i` zO?SE2oXZ-bp)S0S6hi&({wRC)Qk8(O75~p4%WunG)rSH`B!inHCXU4ao-+#neMQF2 z9l)5`lE$v|NqIZ9O=9Mu_Wt|y@|HP@*WZuokLuto*J*Nm!!v-c9my(p)zZl??+u1k z10e1&zc%-muqI$tY#bE%)rqD)#6V@cO~#>2>>Bxi3dY zylHnuoVQ$xyl4}c2I0O{H`0tlzG1MEan zktY%E{C+ft5X#+xE42-MRUmz}%Y7A{U>riHej8s1<=#w|Vw5fQEWzqc2R;HDjuylC z1F*I$zRx54iKg7Uv3}V1x2S4nshzhL^K(FNiW@k1pBv3XOadLg+2(pYX*m?0PILZk zS{Wv`^hd|8$L}E4iI6VPeR+BH$%k?dQHHk9Zun&I+SqKd=M8ZB<$;@8CltD(NSEB& zygqiN-oX{SC+)U!%93XN<=i)EvY0sIg*>!i&)r6Ob|lgy!T-u zTzJL`JM1E}A67?qUwa~|;lF$xL{DLZP=rT~heEFs zzoPwck}UrN&G@pD)ybbWxqbBfJjCme|m`HkMW0T ztV~Hnc5yN5hzq^=Hks#-q&C#933GotTG$ZQ(d|U2$L|(Po|;&)z)PwNn>?3ay^SYS z=d+1AV3rJ6AESu>rIqL5QR4hSnR4w)ba^|dFZ5E;AwJp1kLShLo|Vs~iU(6$vzQ47 z?HEyZf(s|D!Z?><56y1L-WJ~w3!37RwE5&7q6jJ>53$eeRbJ~MMnY-AHJ1x6W0*8| z;wJH#9b$eT%%@o}jQtL*bUGe!p&?qR^WT1#maf2GDbePlDX?)8GP&Qz?aMpR5kyjn zVOC%L*)&!Ud$_R}WuyqDz9qVlg&N1q0km3h_||rD3*aqScdH+Q`lmWT}G2s%}X1vITfKzPiLxhQyR?Fc6MZ@^^>r`~G z{-x-E$K%5cin`A24!P~?Y*@1?3`P)6q3;}}&#~^wp$@Oy(l+z&Sp=EZ5u`sKJTq^+ z_NnT_SMC1fb2u^aTvI>p`=?fV;qIU!hbKL08gtV3C!-k(r-S2{C|}rgsl-X?G-nUI zcyxUeDMk(BA`sB|>st|~ZKSqd)0GJZH&h6%5wougZ*zV9m!0M(vZds_ zvg2vH@!g{MbIwlQJBiE;<@TQMj=G3!(19;nY%exo^xwJ+CqVVh@&8+XEW~kS>)fJe z4mU3+=GWX6h*@`SN%qz_jybxP(47HJkJM9k0{8?TgoKl0>6DTF=;I%d%On?`abwJTN9U`^Qut>xcWN}p-A8|!SfUv?J;+QLah*(Z(jn=A@-=S(H0kwpw+&6 zi;L}{bcfqJkbiA>fg$qi3n~rr_u;xctz}CuW!`I%qksQ#d+xqpx<>6lG`FUwB!Vqv z64OuuE=%qI%74cv>Ca?rkJus58U&)AH4s$!lNh*_mK+3y!6kreFA<}Tn90t+HEFh)Argd4;fz_L@>dyJE6UWc#ZZfMb3o3r68`_RGB zrZw7B-b?VN$iIJAf1MDh&i*gg=DV0}^d1`A3_InTRya=a24e(l`ASBo<

_Cb#oC25FeitZ|N2XmYLhh#GAbGIjXP!ow+sqaSYQQx+3Z&0^AE@8m7Tsdj4PGWw;8) znq|B{Ki%wX@{~TGCkgK{e8I5N5uV7`DAzc4A>44HB0i;eO%XWpf1phDM&9+EJ|Re> zFe?YTI7+F{d-TX=*4KtWbfWV)JNfVGb%hsQ#ob){PW=;2f}no7auWuVz*eT3 zqn$%bdf{S<45I+YzK2^X{0?nefD6uTRIB}Fv4;PqzY6xc$ydyGL}Aqm_4k^WCJ_IE zXZmAQdOqflI^-OH4XA2cxtwN*B3}ttu%b;DWGueop2yGWlJT*t?(Th$KI=4*IiZe; z7S?T?)bnM!Iqon2mD(UTXjQd#xD9k638x#C_yzif;eXyjv0WDrAYX|K&G(m}h;j4n zM<*wyx|Y0SWkj}bJe1(qJD`i~Db|U(4-YswVzT`g8k5^Ofner;T0(_Hy$DLyzfgYx zUKo5gtm#4AC6i7&LVv2Zx-#Vvz?Hrd=RYk0Sl30Yj8c4wU^!kG*}Lr8#QMvG=I`7z zMF0|*{0|aP{`Wol|1rArbN-Kdz4Mnr@-f!M1$ALN6DX93n94(!HQm1w7aPlm__B;t z$0Rhr%>3n(Y(CoHQ)BH3DQ^Ai*681QJnP$%XX~S#o3MZdQS971KT~B-gh(d%zqsGt zxetTsIzGqMqL=*V&(bKlS6<5_iK6T%=B;vRCmakf=Q1jeA#%YqOh*6r@r+Fj8}9rn z*OUvw7hYiSY{MzhuxBPkK4N6y5PEIZm6|=v=de~#?&!k%eRzRBMxSk6Okw5L@-80z zdPu#Kk0(F%VA>R61%m6pcER|+6L5qzQ13aG8j?nAD;1}Si4Rgp$$au%G)AZUG`*nw zvf2Zn3*-Nx3-JFA$n|^%wEj0AuK33hY2oe}P$>QvvC7j`1+4^>6f3lvxe?Ki=vi(y z+mRO)lSMXx0k=MG*f`{JpLQRttx>Km3V z6|Khwb-=9x)6o1iTu=si<+__~N6@Cx*!%}*lrjE?GAuK&{82Ucc$&GuR?0RkFX4zm zE3&|_vJ%=D(A$qh65j|ptq4lnos4%#jeb(s&n6Qm$@HA{Ir_j~t*LK5Vq14G_Wk>C zp$!a%PV#-8uZ*EX##-kL#K6Vq-Lc@}6Kc4}zc>5u;8_xE&!n>#)pMZJB3S!>6;bCt zbosD*!(^S~$|J8ol$z#i_fqDO2O{lgoi+0J*SxTV(E6^@w>a1=>G&)xSXc{!{esv4 zzU7tHX(CZE>Xh?$AqK401ct@mLgoShs`|SD=Epp1=U+!aflO->_uKRt1-F4M1P5aj zLhIJK7tMVK3Jt_+*zy4!*Ca!-#Sc7c+pm&KL*nYsE8np1r!{89N%f8XgZeb~38EV- zn~P>R4eO_KH-ALfg&lWhK*qlSJyScJ~1(^xQFnu{_e z01uYt*%p-I!La$;PwM@JU-tQH8maHiaO#w@cx|WSeh(L#?mWjXa(4Kw?`9$V%UL~` z*)b+uxNG!wED&7j_7WEWfrIIGSwq1irNxJQpeo^|>o~0Xx}Wu~;DhKbbfZxN2;?=p zcBS4cniktV3#$oDpbIM^TwDCaXVon?_rlAT8t!r%1Bqyi(=@Q&kI08WYavPSsB;V) z&ftMOPIgeMp?%>G^C6uG)2Tl^Xo=5D_B{L+_{#KM5(@3GmX$z_RStL)iC;vW({>bRy4cvtW0D>vAI6%LYYu;Vtx)(8> z4aFITU--4@>)l{X2sI<(zh;+YZEQ~ zSmY39PmV^5cH6v9J!u*0*E4ZGDX9cSR#;+w`Z#!h@{O2DOaeycwc72^kMeL37Wlhv zEQ9iJQRhItHnda<(_@;IZNs1E!ho{d1{pH=N-)8O_%G`g;5Hn~T}(GVG3 zb@;x*jP-%a*(6JOi?k^eyVO2H@~|`Iq}MVD=iW6qX|9IKy3rBLr?X3$25f>Wzui{; z85@ET(sP|Km%n!y%1OJ^Y>LsYw8S0U3Z}8MBIH*mu741;`W6bKc4svba9p$p!y}Il zjg+@abYwG7!n@q90XPJo+Q(L00DtiJK&OFp`hMA{K~GKMQ-KJbvnLZ8y7qD3^=qvx zc<(jBskZO)pZP zj9#Tfl#)@v;SqxY7Pa%D(%q+zk*La(_>bSSDmVp+;I@lhSp!1@YkuXzf9uVU%zL&B zU*0+%+FFa?0B5A38&A9~D6pQq`*;^UH)W1oS5Nn5Ws85jZ`W#yg)LwKW-bGVlQ!JL zYmY^jW6#-nv(u@SO|2fNYXnOWPFFr=+W;eg_CN5@;EgKxwP5!Vk30)!PXk+eR3nPK z>2+UVn{Ti5du$SvQ6nJv+Yox}u$#T^u!RjM=2F;j3(R88b-uaj~3!l=VC*T)V=$QHPhD0|xmUS&M!i>Z}jKHpAb>{&Iq)}`B zFaK1C1^FTjyYgU%3wg|zCNTx&U3VuGh^&+#TNyTvub_RxZMcX%9UEIflLW#3`tk5v zyo~Pc1M=6parFVb@Z-q-pLm8Bs|o0&x?f~lxLB!&s>6@r6pdIH2BBzH0#z^Epo`wt z8WxH*pEuVK`(JD*%sR46thOgCq;~2Y_vWIY8sym&9qg3P6q?e`CYIuiMh=fw3zYlB z%uK!SAVyeS`wqWALuq$PhadA}ndQ!xmsAqt{5Z2xNF|_yiIK>Q-8`0UA4J+#h;o0k z>4tc69?vhY5F}~&AJPPRZb>qIK_KY#c8pw4$obFw^!Ltx_9WDQP^a%@a0+f344w11 ze@NjLx2YIC^&Y&c#PXSTA7CvZ2a$#gno&jjMLxdzNkzh?ZA~D6eaoopl`)MA4aXPm z41VVjV%F~<)$X^;l(~=72mCYXC)6xb!@07o_sI~5jTOGOHor!+BM~&E`Cv?6dditU z1C%XNQUih3HH<<66O$6{q@Q+P2LYe@OQjg9B6u0HH^dQtk0 zC*&(x>@e6AmN;XkG5TE5|i#++nAkCP;7y9#|SUI@>$-%oEvnQuws(+66q8$BNba zS6MOc9cml*{Ne00IY~ZGUPRQ}HkVar77>WQB+)z;7^^A11RJ!C+qp(e;*q8vFGTq} z9V`0AUoQzUWrj)v6RVwZB$ikxbKcv8y7=Z4AtZ_=rYHVe1J@Yl4^>>kqh4Acm0-&L ztiZRy*dOcW>wY&3%khkx58gzj`F#(znA77R`t-hXY4iiuL^T|{UJ$!b>OsOD0z)xH?Az>3t>8+LtBpL( z&g64SbfbyvBn}dStb}3avT5wQMVvpcGDLoJiF=hLN7!!6% z>SiZHs6rLH7IF#=KZGhqzjeZ3O%}M|E=>f_;6(qV*!)6ABZ5G_UW&f$qgVKEDPn_} zn{O%|*$i}x_9cK==s2CsEt<|4c{&zAAsVlaQN}8S!|(Uq2*tK&>7jZZa1R9J=c|iV z6AD!1#m)h{VYQMpgFzvmN=~0B8jS_TNsABMqa!H8r6qG%#tw z7aX}LW-JD=1!*i(-tj*KwrC^2lf1A~a}vboDAz?cEN8~(&H&HEzI$j0WUj?uN~IyT zaKlEGf0u-xP+a|8D=)YVp(%~R05V+3RIGkN6MFQyX6XLbyYz@3WqG#h)~`sB4!Lbm z+}lR=R@cKpuPL_W8y(p6v=|JxIHXDXVpw{apvA;p=)rJ#2+E}!y-d|uK5KlYXb7!( ze>(zC&Z=nI@={{|j2~x=V1R?q?A4wl$nM$F>-31emC5*2HR*H9XJKlvHVZMGOLi=f0ZILiaT5=lHj!Jcsnn zvzz3MxY?X(PeNZRQjqHqzS=EUyd+S`@aZvXT0Kesm2Glz zDP{1_8Gwy|6xPxl{)`_bHYR-NN<}z|+^%0ZxdS2H=1DVs&o%0$edr7dT8Q&|iQUc{ zBr?}SZ}xQ@o%R4W^LG+Yx4^dqNoiF4dtcT!c$h*>4?r1=Xb7qA=RyW_&SAM+eHt$x z{_4spjYbMY>k}U&%`pSz&+UMg*$J{l5ArW|sL_4z@Am1*PWv4-Vc0P^!R4m@@{oj& z551PSxS;6g<)48LB|>a)zITB@;i*!xHBnDe@VcyuLW*S)>TAN`#kOpu_ibuz$G)jE2Z{D0 zb?{=oKBgKx{CZKq=JTlG`5u_2j$7v>mw@Pz*~*l0SC*Cq8)Umo_a2p}rZxqq;fKmj z$_@H2>hM)rZs9RXmqE$oPoi=wEpoVI6NZgC==&aoRE8^*X8Qz*<1f$R4FCSL48TQ3 zTK2TRdLWd7SEx80)rs(f)4~LlxyN6{9eQF9Y5y4DZBN?6MXsKVL9xr5axU`U1(Wz! zTVrvlhY9;AUXby$HHO^&{LL!T{~4F|Bn}Je<`~r@Zb=l+y253qWppn~d=t2dIVDzp zK`V#sp>w;`gZAW<>{^)KvsSOhGYIDvvnj!rg>oXOqjr(82RS7Yy269jdTa($&iZ-- zcxa5}Tq72VK;R{i)_o`v<5tJq)RI^4-HVF~!N?@rg*X{f^i+6|l(ess6U7zvf2|>$ zlRNWR6TC85lC&@L$o38M`XQIL8~T#^Jh#h;B7l1^-7&#*TV56qg%%2;kR8h+rsmr@< z&GskbyCil9y>I21(W$#|lmR(%{IBCu!WnhoqSzNTzTLR)1SvYGIL23a(w%XSyx&`> z&}Ic13cc95mxgn{+p^L49p?M-iL65~DH`Rulwn8sxDCVm@NxZl=rDQ411Stn+WR6G z7zUyWf0em3k4Jstm?W-^?MO+%<_TB~kx^RFYO}|Yao_=|=JBL~p-|NsAg2FI~A?5revuQHEhl!Oo&IpG-D71<6# z*%i^SB4n?Q8Ha4ydxXd)Tejch)T{UB`+Z&Bzt8XYPk*>vdYseBd#mF=RMc}7@?Z6 zet;qP(X_aqhAD_CdSr@$%-F+c(|Es3$#_KstZ*<4GQrF$E3fCn5ck{kYKI2$zUUO( z8g1m7PBz;~@u9S#u&qfSW`ara4`(8FvlD(-%9TDxY(9Bx>1CzPPowekNm(lsZ2$GL zUS=y_3CG=!dthhwuElq)mgKE)UvY;F|4D89P@{UcKBN{jWU{UP!Sm&?a_nXwFSS1% z?Nr?xoOX-NfKEsJvgwRlghmG|P2YlkY}*z#xu|uF*b^1K^dUzpc4mgcO86@O!R@cB zQ@#RNtO_3?RL<>qZ*DH5Pv60wRs`Zi=P77dfGU1+x={zowBkN>Bd37d%V&)3@P z`EbR+BqKab>sv`7B%q>>u8s6s14VjQyvK%;Ng6205t|A`zE%abD`NOoT&n{!oSkQ< z$y{-D_3i(K*$Dkp083s`2?~b;rcJ(c*!?`zKesF^@MG9rR#-Y2gs4{vqdjaxC!@3G zMxjdgny=K(d{aZe%lTSfvKHysqcDp<#{LPN_A0pP8L>_@lJit7*4d=Xh1kSt0IFMsDO^~ zMI533)Q9h@{J&RBY5rDBRbZpaYe4w(%^IN5lX{~v6ZEqQZOL_O1{a}p+bl_sdB5xq zs7OvC?3D^gtghu!m()>E4W zm&2#Ot@=KuMuw7Qc_|{`{5t%BP_js+yWsG$e-8hj;^}`5|KEzI$)I>TcLQXtDH6`M zPwZWxybA^5_WS<(gA6~mx79wSM!hBASN~z6g#X^Gju<6-zre^seB_5kq3LG`B7HcbgKUlwBq#$!UXoGBALzdS7Z{R zhA#3f>4E|%=4puL;LdhE6o$}A;o%i?Lkp&IQlp$f)6JXhF-n-!J0GMYYw_2sj8>Qe zt1w484hz#(k~Fd?>DzYyXafIxRTV9w@=PDm59%QVRYpXRu7hnu5xa#ucnt}%Y84vaMK$Di0m{z35O zNQwR&Dxmw2ON?w}FV1J98||Ht&i3zue6x3eJN`2i{fUI3Z~;qmQejXDTu+SKE|2ov zN*x9Sgk4oHLC%U+$S?U22CByMsjbObB+~?~N|O;hVJSB+A->!X)2r09h#noJUfJ0i zY`06ccXq7CL7V=*XS)BqXHc_^cb2kF<5j0PoqlBlg5}bv_hx%BaJ8RzU(A&w8e)|r zl4AQx|H=Xae;-4PE@E@8vy)2kaLpb#s#_yu6w^aA%NGGDv?s;jL+n;eXp7b8 zyP)>#tguFsK;Qx|8${b2E4 zs~rZx3f{^)&$PVHdjSLAJ1{e|$E_-}?MFY?^lnZvM0K5|i54S5rq7%U7-`fc<8QP; z5M5hg3|tn{Hqx{8o2dFNo8JVo`I`Pwu9FYHEU<1pNDY-DsGHWH_8G4uaAXG(oZ1xi zu3d;Q>p8-cC`1by6ZkV_;2WK@a_3Ck@5`{t z_h`4fF+!MHbU*hs*!8}Ds+b3TEioqBJIRshAm>xT5~%Y@<=XvD2Fu6Wik0$5u3k)C zL)~{Ni97zPW}3gB&FfI;63mcj7XWrcHse3Q)d@H$@O~kPGGWRD#}! zVdHt>aUl>?0cd{0=&OLjN@E{Vh584*Xja2}i4+2ucQ;(tBTrjZi(`qqqOJv?vdwn^nq3!9Tn}H?&-aWi2S`Yp7mB@ojop*lzvL8SRBb#Rmj;Z;;)R*8PodzE z&jC{xYSdS=Sd!>3D*abmG*o7%hLV%l09K08p@3(N0Mv=&HbsL_Y@C{_m-D=POt6y^ zCr1;M?AU=B4m`d%7<&lh{Ps`sMDEbz-6qAwg&EOa#*qfpRJ|8cyX0(AshIQk_uQ0c zr4|$&ugW@8fAd_*wJKD1!Pquq#X3LPbf2G|g1vqfOhv)h`9#W=D^E}>Q&7rbeV;%H z>`aD|wENzp+kHf9;*+0Uao}ln+xu}=$loc_uHVyr70DoOT>$ZKyg4YlC}78Ri~0m} zRe4TIJ7&+hu1bGyZ$|uV`!STJAc%%uk(_*w8sa`DJ7Ig1Iqj$<5F1_+7B5MXHUScr zhDXPDa2zRy%2;|R3k>B$Y&X+1lGB1?9n6v6}#+-hA3@UAd|lAgr6IX zsnzn`cp1K#BRW~;as~RU1B9}8DenyW9SvGF@JRzwF{$|FO_`Q7VKB>iZD*S~6SWHWY}Az2r+ZR8pT9a!QE^@CSri0(4&>=#YY{fZwRdD%}t z707m&3?%}%V{b9oVEdK$2!437e@~--$KF~JO^r+7!89tkXY+~oZPCsqJbP~JL-Hk% zL#%eHbC-~^IQPiyb^mNGt|;8#&DX=N0}zR7zpH)R9p&)|*V6d*M_9+k`#?`N&$Sc+ zkGv<_D*H?}!DC?vPl7b-SZ(3&vsngr zTrtFD#cUw$AvSFigQ3n79T;IPePJ_0YgWK8Z;tQUbP@dlWmx+>yJ%N*Fl^xDPuu$7 zI-6O;?^2wMH8g33bdvR3SAI1>gWg0jR(`YRt)G9n`bG>X$miX_fA=|5W_SOjFGE4H zE~&yWgkAWmKB}M=!E6bkgR$K^1A5s(F^EKOgSA)=pLeVQ=@973BzY2VV20cbFK393 z#1u#7$-SSR7cNHlL!Y$LQ~7_cwEu9AW*Spxj8!9w(Tp!0saoz*rfvtdXRn7&C*?m! zmWqS{f_rg6Mc7xTT5T|W0qip(7RnPZphV0k$)lblQCZV&XgjkFkPwd~uyawC%J$2mi{?gke0Q??V z87F^J`vsa0h4+$?5@5{B>s@1Ck83TmJ_gI^A`0$hr{Tv9A<)?3jTib+40$sCH;p7? zVmYGXo;^gO9+-xtLzL8imILlTE9FQ7bcLPT4EVhDLAV_?=r$Q71G0T1=$~vgWMyZ?p?h7Gu3@eN(qT4X7Ff57=FX}J+%b|31fC2N==f0RPo7i3*12eaY{H1uL>HN6>Ak2@RqYl?pKKYGEnF2=s-cF9SJpU+|AtT6|=Z4QdW~^E= zU2U}m@1B${D;iP8DT43?z`9gtkaeqhBiqruS|fJ)Tbl1y?wnD-GKz)doHJ^t)bF6w zB(g~vW$p3vVUk_-4#VUU7FPLX2_q^g6fCO> ztCUAEE+o--nSgkaYgp`##UXUwO>rv0dJ%%YT5&9X(}jV?!`<5bgaDC8Wd{99bUC9i z|N1c-3Qdwu$-vxf@GV>^FSGt&TmW{uT0$7G?aH*HB9#5PINb~ zCc|aIWdwzUIx3__ZO>IwR6iVetUB9bufU*lRQD?3XXUI$pt3l!Z1|CSaMWGaNT(ye ziB|fd!)e813mkxQF!Xnw@412Qn){(|%nn9YNCVG&7C_<0?{%=nWq&fkJTqe7X1tQ8%>Za%K+)nQRB)RuoR{9cYE?onUq0`bP(`3cFjy#8-YANs5u$+9!@2pkuxhYb}Ihl;%DmJ-7uVV zyv1E~!xE$@$YAsx?}0J{O9*~_lk=YPnu58s`nuSdFzuif7bz(e*F z4;DI$2)nD`EssvW#Jx8eD-7S5^J;3hxWv{y<$k(Ei9doQ_8S;~Gig)CQwr|_0P3v+ z$Z?(xs@E3RYB~!O=FepH;Sq^y8kAM?oLqv)Pl^_7qrGfIwq!2G6eau6`PK#I!_)Z~ z&JIoF@Sff1=Gt51N>GZyWg$@sGEa+2`}og;LkT;nWFoMDw&xDmDoLt^DBIHaUVxcH0H^RG7wl!7v~1 z)>etv(r&<Yx%UjG`0hTLJyz`5B++ zfiMFIh=aPRvoI37bH^25LaO;}6wN-wnMoBll_HT}2UnUD@5xAy?(XuHMqIedI%e^; zRvfbi8hXnv^7|{tRG%EJg1|x2n@9KKuJIfeLZLtNUuww=Yj-`~8S%=0SMi9l);DGohrYAR7ucwqX-Ki7u^5f#bS%TJ;w-Q-G)DR$ zdIfdlt_0zSupGpQ0$Zt@UGgThlnaGg$^#qr<>MLg$_MjFI|qjLKC~!woN3XIf!a&O z^*88;?2x}f8zpG3*ygL;>O}Y zkUmgfzMk6wlD5UyE&nA5f)`80!Nn(d@wOUY&(u_-I_&Ch1t^My&Ah3iXV3g1j-WX_ zrmpF9EZeOJ*e0U;GMi z{@B4OTP?3Qexa1`E6BLb5Rva&vcaQCXbH z9jsjF))`CJA&GrN zikun_g?_lW)JnGlo{9&_>caU)QAt%W7WfgP%MfDU~cKpihh_Ts^ zcJh|6>rbIXikA*ZhJ}5P$(2ub9#?%UOK#Wv-f4YvH~jS#9#}xqp*!%0RA=th2_g_Y z?cc?Jv2JefhnXFoS46i!Vr$3B_|HQ99k%Xp7q0pq%r-1nr94Cu__F%2yIb$8a)ja) zU=lQ!7@jy35t-}|8uPVFA`&jwm?uvp0xs<09Xpy(EM$^5T1Vgn>@V>4!sio?u_O^M zo1Mwye2D4xwtl5DWs0GqUgbSME#mA-Dfyx+V`%mlK9mF@PLgd&UTQkO9Mv_DtCpxf zHp7WUPjVPK9c^Eyhw47QL&J`jMR%wp=fhOmH4v=iR|c_oY0M-binqjk`gnC4^Y4$p zgApM+@1P#${>=g~=MNW4#;&lG-SJ8J+DzY8hQ-<#Mv$^kW;>683Sd&~PRgY0$1Y$; z6(tlFtkU7TFWlRVC#Eodi=fpTTqGD$i;sQ~z;0Gu=)XK}MzURsJBMV-=LAtg+A2S$d(g-imM zP$a!bVe2k%2&M0F(7vS)YygR^7If27IuHF%y{)cc1qEVYn#K1^_T3-u8I79_)4CH_ zC-I8Een8oeq-#T`UUHiB#N}miWDrV5mzJN^@Of@^S1P17 zjn(uV!M(r5&a{q-T{T3#mdGiy@}lG&-Zn`%8i>U%R6ndwLznugjc6c)a+_i z7I8y~7=Cf-UKJ8Ed%xNz6zCsHnH(>#T=iA5MZt2zBlz5#Q)J%X*L2?#RX;J?co7$V z)&&|++#$z*a=BCauBUpnb99{p47Qc5tZcpwNoKEyfgJFR`QQm2>s9gI%U~WtM3DtL zvrS0?WBjNXyZik2kQ;uMM`s+S!|8MH6n;7lN3Mn5OTKf}uRAcI?aw|VX2 z1vu={1+QCuaa-q^%&O;~s&Ja}<7`K&6JKH>zvlf(SZ%cV$osvOsK3NHWyEz)aiAk9 zP8;ssN;z^R^BM+!+1;%?!6z7wI9^~-`%E(yIObIw3 zI0jtS;A}hSDHuHF-u=KmO+-y;^-8XCunQ5*^3Ib}-HV>cF8Da(7C!%7&=&evCD8ck z7+7ym7jg!s>JU>6`QyEMLfk>#K!osf^0hgcOdNDO4k2D7JxDiM7ezvTBCI*F<_O3h+uUZ zQIppP=^#x0xUNHL z&=m^x#3yLEx7*!4(--({ZV?949bRVJzgVdfe;Zv&5=M1ELxBFrs31_;o4eoO`%Dl< zVWq+ZfKWZ$7hT@sPskT8(2>|!7AxC~l%;$+C{o58qTP960#U2tK@);2Sbh7wj7)1=r*MQS$a=a303~UMVz|sICTCN>@CpSv< ziErW@wfFAYI(~jOEkDW9w+b%LL|r>cZs<=OIHJ5d;)Z0&b8z6WTnyS~7xka}N^LK~ zaB6oEQ=33eu@-drZPk0QYkjI}wqP)P*{WIIo+g>Z*EJl=I%KPD zGH<=)e|$k6Sf;9237rbQcanzY1%*Ihc>cU$zugc&k&>gNO9af`4T7|}92UOk0F^`F zl;Um!i<6xN14%qtZwH+RWoRXXV>M=tnFNrRqo?+s0>6nNH&2nsh@>lr$62k@>`0ay zX;QS)Lkjd720tc#90B4B3k^rw#6d-g5NSk7&kcM<-MZV9vEB6y5f4Z2y(E~ElSx3y z>SS<^Io7_qVb)5AS(R9r;$gpE)sLw1icl<;LVQJJh!zDrGj&RI<c?P1pySvmy_NL@C`EADfkn89@WeovD=GVj;?&QwBG`=CPi$nIc=t zD|N*6zcS91s~Fm#K}AtP?G7n2gheurK_ThuyZyOTmk(cM z$3Sh)@AZUTX`2Www2M6r0$WfD9?nx9^k#7>5y@cV1CNW%>+xFUMk7+MxA`D%#ahcpBar@}=u6KH2m} zyJ)*jZ>kwetWlh>zy~G?8w&yjRJ;wkB*)oKdoE*9iBN~J zTY=0z83~X1FhO=F1~rGVP+_Ad)^M0Fgv``MK*a2O-kLwPH=g019L2j}8TVtpTtfr7>#h&_gf}Q(9EpJ~1tFpuDyHz>A zf&`08IiD-7I-TQ#8Yse7;u)0U$>)9}I92A%*xoEGj-Fa@M4l?j2IjtWaU^>k_hpO)g&mI)Qb-9xT`ov#g&cx4IgmVD^UAC$E-bH zB-cMM(f2g_?Ap_WK$g6P=#eu(hHq2qqo5hBwxbmMBYVSlg6ON)f*KndVxYS8>;u=R zM6t;wKBvGx-sVW3g|CGe4jAo5QjQNG)6k@eq!L^yid^KX`o0^+Z! zG{KP0USc7hfXV1Qd}1AOQIEy_^=Ko%e^{LU)H_%PK8hKNbk-G5l55dLv>;r+?g-rR zWnE+#)&69bMZM!9%`^{HQuh1_RmxL0OX`WM5mvMo@zRN{HmrUIE+yb1QHWY>Exi#I zseATN7_o6}ZZ3-3wUvE1KC(Od&D`)4E;bA1tgR;Vlcm+lZq)MRSiFRP)Xr#XEcn$A!nwW$I{uIGp`RN7qo;)Q2jyS7DhArPAS z6<29|`Q(~YV76IoY1!VG>Z5q}+tb0^N^}O@1T$Fe%>e^!&7)|7cP;S>s%s#|e>rad z;`GzJ4?pv!fGm8=C|0Q~{FNM})}@I>+J!YhH5|`Sle4h=ay+=Gy1&0|>?sv94bEk{ z7kk6Jdk;kr%`3>(I!8@05AFuF5^Sl}07FusZH;?lv2b-lRjwPGoOPuY;jnShr8QZU zvkM-O_09Hab&eC|DV%$+p_vV;(NcL3OCdxDW^o{tk2 zy=EOtqY$+J^aJMLTWkTnn z{uTPULxUOjMYHc@b{}i&2AdZ)MraoXF#Qq@d`O8qK2JDoD#VZU)jy*-DI0>~<85@^ zH%bs|@YMZDpbzG=;4X~vz=9lkc{V;J)kZgF^!BhS$q6gP1^M(Mh1mMCE8kTQl!H8# z(;}Etw1ZCV{qZRh4*c=L|6ntiqbvcf8&^};ul{OXU%l2^+w9)?NyDgb8v#4ZHXIi#&`W6reQ6Y!+D#xM?$J><3pplNf6Eu z_v`?ewQ*AxwC_nUy)UH(OIf58)_$S!KVh-?rbn4#FY93uzn)$72yI}NzS=;>H~ttv zGC-#Dg<Q3mk-BymG`FBkX#*?Ug>SMV!+V!F}Cddx;P+Vvs>$#JKB)ir%6M+Sfb1 z*<6>q71mr~(ZVFHT1YE9FT-XJd~kQ9p~ttB{^1M!okltM{*V`Qp()lkJ{om2WIK+4 zEdZ0iOas+dU}qP_02P+o^3d_fge;e0U!FnTvmWEa`^+VXaCoxqrWaC<;pY5qU9Nu& zi;m!I1ODpX0L{--4BGf`vq67BKkuXa6jVuHWf$?FXKw0!-2mc7cG676xnW+Tk>soAR3dZE)Emh3hP;l$}7^B-- zqeDWlFUjUwyBl&TcM0d{*SfEBdYUZAc!`t|Lq-F4u?=FM+~tbkOVcz#_(F4e9)J2;xR56?5(hPvFHsL-PN7t)R~=KQ#M z2`j^ED|ZRE=qBv2zwGZt$Au*4D1y_BsPD49!TTE(1vo}#7CY}ZeMcc^z-^KPR*EuK zzeh%Q*g~yds1MygQIE;Zai3QGm?NfjcbR>K_pbb9V1IQzJt^$}_cTrH{*#{75Ln3d zYFua(uu;GZeUB;r1M1sBOlpyWOwU{$Q@{W?KFw~0x?V;8$yHj%r3~P&;f8yycS5 zVdIm$3f!dR`W3&n6RzJl{mgik^Vvo$trHHmIERp2>YaZ^n)~-i|9T#}p~nFZ zum92e6>bwM{m+2V{?X8BX!PzVYZD{&QeyWF5 zHTR|eb%qqFedD#uW8RzBcVam|Cy6=R=DjXar5I*#D9WFZNKJ4TikKIzu2ALmLWyK` zSSDO-Hv|ouLmn|K%BE|p`7w24 z)Qae`uSxl;1WW#uWpgIH(%j&c*7@^F%M&>W^M$i4Z6imX0(10GXts>u0dNRY)|O>Z zyb?A`{06=^!$)mDJ70aP`RXos+stSCMzAlaQL~AeFPDUeYhG zy+38@#*=TVKdstg#p>}59-yug)C{mqE#tUt-VFxDR-3f@-B0fpZd4LZQ(aUau?X0`mb%AeKzl?#n;i$Yj^)iuvO8#H>DYriQd)d?YWTVoV|YjqBMEGgniDAv9bG7vV$ zY`9TKlpb9cEI_-4H#<9`N_A^E7=22PaAVT`b7O7+M}v8D*HX1W-WB7<499W66;k$q zy|^eDPbwGnpJ2dOsbPDqpKZG}J;a^0zSB;I#pO?U{jBEpLN~xK`i)n4%-Y2p-eZD7 z6|cB{p_Eo9ZtSl?*9IJpyLQ82akne3X-N4}J{|rOASgq+7Wc<){jUg;Lc2Ks=N9M? z6OMF{UVURwbjD;`@;OLL#Bz)hlyHKqGW-H8z)InqLR^g^ud}g`^4%WO^+~eL7Y-G} z=>*P9w(kPIbxI|ySa!9dHx0CkZ6w4WMfZXz$*$(XoF-Y+7s4Nxfp4tU75}?th3(UR z@2X1-R?+lf80)x*`C@TfHU9ez*znuBZ+gIT5=UDe-U3eBK;`$W@Nb~Eg9*l&K_YTi zWueN6j+kK#SV-+bp?_G3gvFBX@!woYa36&}E+(&}awqV@J2>V&M>$xr*?ATBC%gSF z!Gj2`&^j97WDu(Q8!Yxfk9yZZj7$#v#blQwDsFJs+~lEZAbD%9VPReU4NZ~GyBWn& z=6E@=&73ac&InuBz-e}AcG7|$OP8;h3mYZMNEn>vPlq4hmMI>qhHzGY_i0?n#(zpj}?5Yw=?5z;Smj>GTjc!xO7C}Itm>dx?FD(BbHso}LW5`U z+$rlZ(g;Y7sMLE}_^m>D5QM0L^WDIT6fETk{;1oi=*R~OzMUJ5wIAFULf{X-Dw#xjs~5NFpOegU-I#SY2*a@7RcN_V=5^;QIkD)jg0saY46ql|6R7y9Y5g2355#cLZXBf+|p0eB*ze% zaCi+ACt~O}zVkv@8i*)PU%wDZi7ELJv59^U+Rh18&W*o5a~ev_Eaw(z|IKxv9k4VH zzN7ERf(KVgm_b5DWKf{m_(9tX69X0HU0?`dpeA17p8Sw3U^a@COeB?fqAC5YZ+T+w z4YALf)phglbwL+iinK1zc%JKZq3zXO(- z<0IbyNKH!^$h6h z=GV6hBf!kiG-)>oujCNvAd+XRy!ptdVJ2`TfLh)LAJV(~3Ia=)Ecy9ln`b1TmWtaokjMN^lc2@ii^4bKRdR6rGQPl)~|Gwz4uL9 z*Zd{rW$-2;-)_AtrdH1jnHB?*Ou0q@;?+)X&B%j~SN9KX;5<8;JW1eU<|Ya4f0(6Z z5l-iH5igjPTgMd5zTt9OGdMT4E59F7s>zYSh#K-;V|~zj@L_^)-!V+}WHFn>Y%`D- zj=NlReS&uFG&}P>a7z&_Q<5}Vxp2I*zcZ9^MCzK?@~2aMDhWi)Jn=-wF<9tU9qh&; zqEGv-|Hsqm^2j__^0W{L)Cd16R_q}MFgCo-ppjLV)*Z!a{I3@~s*AwF8|4}=DO}xE zcZnFzJ8nG7KP|w94^Ile+;z_@UWU>GSpX%c6A;1dY6p(fn-9`-B@*&t>l6W0 z*qL~=Y|X3!C2M6`yj2~QpOE)J%d_WY5x3lT(pipUAXv8jMs?)kUBE|j-<@yhW(Wr+ z(In6N6FfDFqh#(IF>)xc`FxGJ`)*2zxD66ltIU>T#_pC&OvC1NDp}qE>(UsQTvVbo z3ccfmAC#TMCo+}!ETEMp+rvVtD6^XCxv*GXigW{{N~#vKd+i#|*?SW#cpT=J73J9r zK6S6Sg16fIj0u>`==z)CQv8H9&gnl%oBz7`aAW~Bz+U|925x;9?57fFoF^Bq5|Q2e z@p6-C-Y)#w;zRd3v-MDeZ~?rP$uS6ki}wM&v!vLJ6sT*>j%UoQguRB_f?K~Z%hsw1 zO64$I!A?r%duZb361`?|mN{W$VRa8r%9`Xm+{sW{gio{D&g)T(wwrxdpblgBBEQ+* zb=`B*2klP24|8-8$nz*|`!i;J&1GA-4|}}9DuLW6H1h$60$l%SuhUQJnpA|td>CRt zh&q(`5{>0yd7~Zn7sN-%unZ5?;kxQ|s^kj+}#MacEDi+ei zzY!75?uYflcFO6<={wxTDAt#gSZRhv=65Oxb3ZB5JAS%sE!KiNgpYXKwfk4M}^J28uA?Jtx2F>PI=3Yfw($JaR(84IU=g(nx`Efn5;B5NVq=)Zd0#b(iVFd z&5+r#3L}7lC)4|nMjdJr*6Aj3P1<$`Y+~^H^+|DLS67JGxv&sM2z|XMlv>556l6S^ zOAJzJ621kQOv(SB!@xidWmRt!q|!l2yB63u zY4LQ=<}#qs+6{N=xfMjc7Il;EE4*v|A|Pg76)MTbvdyM^q1lBE3NsG?TY)I16;dv` zw)S0`ZdWIrt5itTQBc!V-6~yNr00e>%`&n7#S|inXzI{LckL zP52a2ka_oK-^E1JQ~UFVy1diN>|duiscW$0YlClU?kkbdKdOp(R7q`B3uncNDRO>AA}HW@N=;a+n9G(90f)iPf&L`8+%N7nIF6=c5-GIwSAXv#ga3B@WLUNs!}U z@^~v6QzpE9)ca{FONWT7oiqJ8UXa5wsx`o4w~8 z_?XdB1WM$sGHqnQ>~J|aoq|kNl$d6SJ+%z(zwa|j#l?(PQe|Z%H4?^4?hjM|tE2>T zj^ZVA_cKdRze5<%DaixpV-mzsKF$2X^#C!n-nu4JON{Je`}$q`a|l{hNAS>LjHf@k zd;4xb`i$9yf4166e`*h8NMGR9up|Io3JRk~&r}u(K8tmt-wBl&l)zCF#TeKj!J7y- zK${MLhL1WgKL9J627^b{K;M@TIyW8H7x_zZRX@0_S_4W5QI#IFfUEzO8V+OAo=fsO z9vj9$7>2-(_$!$UQ?7+Am$N7?w$_#BX|;OWxlPa(+djP6V=f_%#ijmK0vu*(?Rb9= z-li#TXc%CZ!0_t~f~pJu{mQSpj*K4{APv!k)aHO*?#i9MZ~##Ynb^@RCuJ! z0m)uo)qN`s&TB$ifo`msW6ib!{%SVN8_$c(?>ES_&S3KSxJ~U4)ezeN z8U}5+MD&uv*@OAvR{vVG?;Eyw{H_~|NY>zl^JmfHlnN+3=aK##R)LsCJ5j|?KT;?? z9F|B4i9o@7VVlzLE>9Usloj<|d+yad!v=w`b?vBn6~1?`H1`Vql32|HlGj2Wo}!Vv zH9)-<&Ln+3kAzLVIO#FA@Y-6{l4~FZaB^f+J$}-TmIU1fj%T^BKZfV^0kziX!0GB?ewWVT)6T zZ1&@IwMP7n10d~L^GsJX=s3segsck=$c+Zueg)6l9_Gm?tFJSUDWeyKYn zD5l3M`qPcB3W^L(IZN}E$)vmN_QaP?cMb&4?XV3!lI6XC2OBItbfQsQk>i%Fg8&aTm!_^^9n zB>eq%p4rAhO^@0q4kMsMH;m6xzHiTHw>z+-!PXnd*4URdzOjp6fR}&fZ=(?@Q}Mm> zW*$lZN+}X9e-I#88rAsru8x#&5)-2vTc%Fc%k$SNR<73VUI({xU4JfyscQ2HPWUiC z;^Sq)y6OJi-w!OX>{yq30~1nvP0z~l)?>e4kB4;=H_oPV(9v!{RTaX>hEFw0%2J5z zHekPf$8!Ry&MOWiO~xyvj}iP4=G{F9d{~I8#U_YgSmPpLKu4Be&y+PLLXvzS!6B+T5NTGU{!NRlu*d^6( zFV3%J*ONPHo4mmxB<7$iM8PuhQ&XFr7l$`?5*Vt|)-UM}9)MP}hZ18z_cCcE1V~5F zxZ<(h`;*jUYAv^_dQ3&L6;rqhVxO0@%R;mbEgOvxkpbt_Z2p{o%h-F9lsWod>nn02 z9a=pOqjmk06TeTN8hPKQUB{9P>Q8mi{D_X^jEkPA*@}DOUS}Vl>Oox1Ax6Oz+g`iU zS$oxcX4(Pc!XdHz#ykRIOxwZgg}l<$Ir_NDZsK5uhOq;Uld!1 zYk(B%r{{7Rv2>J9FTM)4ewbSf%idyPi^BE3d^C!4mfZaXK5@1!G7IuVsn;ENgFdMX zBwE=?A>u)JuOieUQVB=htIMkRBrP>8g_yyHA|P1Ub@wGza{&~(1+sW5FYi9JgJJX% zz4F!-3K*V$A|q3vhAN)I(=|^?Y#BoQpJ+aFz|?O*YoSPxWVObbu=l3CAUK)Ftj9+q zSh@xM>4I)};^I~UL$zklg$3L-C8i&-_J>T-D)2|}oGHV<6RhR$=k;F&9IICBCuoke zg-hwc?T=dPLG7n@-LzS4!8X%)XCtmgZrc7VY@EowU;vvM=yEX4JBgNLmSdQzWgFn0 zH}KTI?G`4u`7YHW5ZdZyPNF*HV+pdKg{{v&wp6ZIK8R{!7RC`aTE`nhZqMD(Q2ncjrC$ zv5qE`HX>znaovlxSmTu2_Z_|&$<2;n2%92KpTI{dQtLmUZ(|9ycG5S5$(prq^pcjl z8qPYn1XlRt=F>aM&LF{ICJ|c5M?e+%v;^2`G@RlbHay=0Qqq|0rHk-5K{DVoNaJLY zrpUOyZHEjUVf?HmW(ZO^^)q8%q#1{GnpE01VD;?N8pA>x7XMRTbN}ymXEMUcdzywF zxt*b1ZQHcWM3jfgI9-2(PeuouJaj9`g-{T$7EAjDvSl@6%?726)-e89aWRj{8>8N& zjQ8l7HdOA)I+dB1o@`{-HX0zHbkCa9yHf$@P5 zn`FPk1l#6lP{E~%kMC|cfGAM6a;ZFm$Pf|tKAURopQKii$kZ@naUwy+$&n4*g{W_e zCWDyHaTUeLk`Wn}kOIji`-Z1_F}W3>~N$y352)a%A#8P9o|Yv5o~8DvBZMwdLfrW-|%Zpd8VQ@KescF$UZaicDOp_ zune;^;lX4BYQP_p=D*&cJQ<93MpQrV%dWKN?+KyR*P5G0b1500xWEE#M<@}ZX1@xy zSST({xy}#MFH~0N=eFe$J0w>Vj$SUq?Eb$V-O)=YW%*9P(-xI~bcZ3JJFo!-&<>HJ zGHq-;ONZI`Oj&LHGj&z$Gmf?LY*B56k?48JA4^ar$`8XTo+z46`q93PyJvbQu5x-d z;6_HPL4Ga!2R+7l<&qy!)8_(iQ(g&cEX9opwx;>sYf71O>~-@oH4ZT)A3^&(B&O-Q zK#8Z6a*ENPYd>`yujlgDJ>lOpS%?^pQFlRpW>9WA#dmTC@eyE=Sx z6|~XVmUMh~zje3;|6An;56S(%nFxPE3yuW-&&1bxf}TT2e61LB8+zknGrTtNq7w5u zRQT!Y9r}fes{9Y7Ld46-d5sae0bg^e>j?1Gbk$o1C$$u2kqt1weS z^y{S(dvCjz@uC|$VP`zYr5p?fKRp_Vb!HjpEpxdZE$@cUGgTpI-RJRU5B}4tNR9|7 zv(yA-mV;HwbaW78h%(Fvy-#Z%s;vo+tjZgtDY0Ug5vlrQxr!3{EQ0AYk}z%jwAKFs z%QDdazaAHJlp&yXU(Y1yHU{WfR5a?O6uUfyt#~t4jk|*+XFge7Fp{eJG~;+jsM2ZP zQ>gyawj})%C#7J*wTI_Y*Z=$4e{&9)qf7y<#ggf)Ew|ymB>-bcRQ*YI?cWCKDTPW~ zFyR?%`w+*mm7_AKVq$Dyij;1YVUpG+b+C1X5L&3n17%w9uXGCXU@`-$IsY`{F__}; zRj&{y`Q$@?2 z&px?wQ+z4S$`~CDr3)C92G83{<{^1E7|lGR@2SAdJFdx<1B4g^S&p1vG@V)>POJ`V^Dhg@p_Xa2KCwPZRmrTncp&B}^Ikl)%cl%Q-YS_lHDLBwKnZY2BO#!b=rE%9K?+V#%r3m)V4f%?J5UdajV zQZum%SM4aVOolN|gQ72SMZSZRF9%H-;x7a~v(@;{#n#F;7VR{sS#8PRvv^mIH^XkG z+`Rkjl0V(Lz^Ag%sPuLP&bJd^#hJMzdEuUCOe)TI#wr-sGY%h`w~lV91dGm?V${Q8 zy>Pz9X6C~&#|@pd^hq^>Bpy5RGuc};&-ck>biQ@zXdU0By8qp14@V(x%RiwgOP!D% z?mjE_RY7CJ;0~t$bw`5rMj0Z=dgg5kV{T2e@uT1f-s+-oLk)%Q5xJ|W?oZs3Ndm61 znT)KSvgP;ac&ZQw^%u+^F{U&4AUv%v?L-LD7Fx1V3CdYkFHY6*#~uo0P%KB@rTK82 zTWPz!=W%`D)o09J))t9YFVnTW+@!vdu>AyoI7gLzB1(C?p8kz~E%Ml$jlim!v2A=f$jZ9DI;|`11Cpa7s2Dxt z%uRv=OI$#Bz()Udex^X98&hQcQtpCn^PYJwg7+h{aE`ZBczPXzl%({-hc-;9XF1A^ zn4iKcv<8$xFn7X#TX>AV5ldceiR4K1Nnm%(C46PlO88Wh|B_CFEwxu8m?OmkwX^MZ z$@{@|GPWh=*GRU{^bKfaAw@k`+?K=d>+mDEvSxMOv(khwrb%GH3fn18DRcG7#)mmW zneNh4zj2Cau|TD}2D%7vIEFxN{X1M+pJtqNI*P1~dty|J?=Nwwg!0KGSR@lN^Sv=@ z3cZc4@w+Z*>EMDY!jrG#enYxcFG z&vm&xH~^6tJ%r!=ot$zeZabk!PV`hnqu4k8nrwG_5Uue4u=bW=RlQsLDBUI9p>&sk zbO?w@O9>Lvo$8_&-L0U4bSN#|EV@KeTDnVEbf0Ja_I}^9&;RW6?R*g~uXQo!e4a7K zdd5BOao=ygodaE33n(&r9nhK1f2Zn|Ezf>#IP9%gyWqWR1t59ncjIcJv7~`hU0ztP zgexE6d{O&`j=?^cQ}W{$HdQcjGAsUF$8Fp@MwtEW(^!sia0A~b6vhV_X-8cCxq*rQ zDfJhrQS{rG)K-(YOzpXQbZw)p(&`z&a2+zJDAEKbeH$_nHiDornmZTT;ndwrJ`r5G zt+M-O&OEm#*KXB}tIOlH(H*(fTPcnBi&(a)No6{f*%9+Rx$lphUwrPt*L{&s|3wdD z73!Zn$FNjh@Xt%?BWou7U`Ht1_j|HIZOL=6;3QKPm}tUpfN%QH*^Eu*9`KAeU9KByk|5$OnE1A{!W)hNunplkG_0(s%^xe>)@mkpcL~gS6g?D z^6G!Dx&n3nkE;T?l#5!r9Af=Nw|o`9GD`2Bs-kt{=A8myDh54l+N+G70qSWm9oOsq zI?Ord_0X7(o#OJ077%A51Fb7jT$MmbB>V|5B))DFWz+akal|HbsdCm%=+EB-#{Q3Q z3izmn7@epil9Z-W+E~04hFkME`VDK|YSnC{c#1MB<(X4)j*qCV_7oKum*RCHx3Jbp z!Ay((*BMZaD&*<~J75SIe>7SD5`~zjl0z5+dT1a!;K*kL8CX;Rp<(NC@889E@J1kV zQH7{`rxs;yI%Phc0LAmc5-S9N`0Dk`>4*p09kOfG)UDrm0#pTi&jOeAggx|)D0GWl zR9w^_JdBO5a+H6w+QX@s(ysq1mkGw(un#a2)&Ex2@E!;f6$?HxNhyQ_&Y5KKKb$j! z#;F$2Z}14yY6TJb^8`6;maK>p1qnGU^D&CPiPt)qe)5n7x&fFm`az9H+SO##0uNtP zM+QB#A6yLjse2`xP1RplbE=uYLGG#d%CBy9H-WvBGBule#hIER231_m`8~Al)ql;e zemWRdeg)jaEYEelDdIm=1MuATr@F+xr7W`9QWuGaXYH_(Hd7}OqnSODm5`O057r^A ztL7N6T(64eZDg0&tLWS~`ye-^l#_Kk8&-kdpfKFR=$#AhhKNfM_bRHWaZW&l;yc-D zl1F@-t*

mQceVusmM>b$Pt8YfoxL{JQR{ROoL;zpAGs|{4sBoXD4=LMhNTqi?ix&7pYo=5+B zB3rQ$pY*Pn_ZKkl4uB4%El`NS#ex!4e86ZNkZ1= zBCM;zw}{ zg~7T>|NemxwAbxRKF*e4!w^`W$NvqHXhI51>=fKmJUb}_rSs99J}JAaj13a98PYIP znU5rDGzA|$@gKdSGK<(CB;=EB#ZV+*mV$zI`=LEyHr&~srh^>s^z=?&OV$5dMP0^$Y8vnz1+8d=HG)CcQymG# z3q!BOz#LqhoQIRFl@|GJTg|#E6Y~KmkS&UMpWIK$ScCjmHO9@En>| zN-w@Nw=b3^nn#A3>=EB|h=1soPxtcQ*CzgNhyf7s<#$JuMEjvz^tZpYJH;W%8BAX| zU>xG5yY)~R0_VpgUA&-4qAXV+rUh;TnI62#h0JF<7-NU7#x!`a0!*~dfs;QqS!|}d z`P+Zusv5xC`YGLKJ``hJYzM0d%9}h#yTph64}kf9aJ}4sw}`mkclFO9tg)nYT#N}e zPzJI$L(pC2a3$ti;*dP~C0Qsmr<()SNdk??7qpCakOT8guPa3uZTtH|Ga7h&#;0oD zJ|NCxc^z6r*Z=oFB9NLP0k!dkv&a8eu9!0M+27mBjTf1l_^m;DJsk#DldzV;tF)0e zd7TGrbEh3Jen}qx-0PuniE%D3t*1n!jZ&m)pnVU#Vj8X-XxdX^jDLFYxoF+a&o*M| z&Low||BhQj?ECM!f9<;fP}C|k{GTN-{I5&!fM`VD(P-@rokFhrj?c<>gUi=lKn-%v zu}bY7LJ#r}+T!J}_mv2#Ej=R;g8NMMKyM7Rx%M6d)r@q&KlV7FMVXWy(Ie2b@4R*9 z%Ir=DdS@oJGuCNV2;#yEy(HuqVfX6zcV9$iQM}45GFu8E+U`lx1NLzfx>V6h@J2ct zk3=H@{wL@4xcCEZ6A%73V)RNe%Xu2j#D7y^oJQIFem~W(5sBIwgNooO)q>;C9)j8B zP*!8zL;1^PY?&%%#bAlBsd4CJ?;{pJZm3!8G*4lqKtF9JD3Ub7I;4pvPU>v>hl|9TRr6YsY9%gTJ-?CrZqi<*G|B7nxcCc+miiDF`B}w*A&)oAqsI6 z3Fy33s+|_;o@B`3;^q7R^s%W-8(+sm5(;)dxr@ZJmV=RxFZM`Ea?fLy4S`G+)ErFj z@|}Q5_a_$)@w+8e>hHF)!>x@Re<;2f&$W}jzZ~8i7lnR9$0c8bLMa$f)u(}D$xm6W zf$8J!;>VAGD9m5gXcr*rHp3K7n}i$^1w>mEV}&6Mc9zs7qZL>8a}tCQi6Z-Z7ossn z=ByB+=gwGVY<-MMCLsMzZ*@DB_jKk2ZmA6k&yhFftvRf24?)j6@ zwyRJ1^arNx&ur+c-Iuz9DNuKLVC??hJL98iH*L9`8#g1_olT#n*q1_~4K9=6RTFDn zL{qn)1T5yWE-_hFUTP8XQfY>NB;j+I&kas@ZaJL{+nigew%6Bd){~4%IkgLh{@T>V zQ@L2n{Z=2IrPE80>9s+1KDT%?*)+IClM(w-rnQo$W{X|s@R0mw_3!;*nef16_8U@e zaGqmUMfU#yafWc2^}|~6HGHhUTmy&J{oNV!Ub^|B;`c0HK}JUYU;# zK!NVb2N@Y=_0KP2%VzTwv*ley(nu5`Scr^?-#s!@u>v6e0Ibze*H~cJ zy5&+vS%9N7k*!yb=;6+PHsPt}|B0N8%;n5yML6^x({P z*K2V!5M{KUI>`7;(-}O9jYU5O#UqBVZz5qR4&mwIS_}f@XA3?q(b_aUD&w~D~uD1DyA5czI||)Go(G78!x>Rpbw#2|7dXu#h=P66@}-g=HA$r zy}8qpj-s*1XdrzgW7nYJ^w9Fx`Wi(KCd?hFM|s}EOeOHvdIFXE>W89KnZ`*+rWhge z@1jylH14XgfU}p=V6$7ezO(ONN-=VFtDEr+T!kYqL;BxH-jC*wnCjJik~abm?{8*G1*rNJ-Uk%#16G}>4Y?w8WGt|Iy@P9X#fj!_-4Q4c;~ z33Tf0zex&FE|-lWE-u11{Gg}%HoBbkeLikDMpXs>vJ869-EGfRYZmrkDq%gUR{t_fgd zIVdVn$%LuDe&IQ5SJ<#!u6`culj(QvR=@nlymkx%T#)H@Zz(Zv3=nx$6k`)m4mJS? zSl}M@ZY;HxbP%IXN`_nVfk6$5h%uae*u6VZnSMJJ4_MDjzyJMF-|G@PUNiW@BlAAp z$ZP$hlNR&d1~bQn>m_LgkaVmEDQ&Vh`R-7}6(Kyc5=p|=IPAM2B(2`s8q@%o^bJP> z2mN;A1r0zOd2n^LCpQymArm1V*Nc#DxR#!OJN5c*$6oNsZ3iKZ8T=B^jg}xD@&dR@ zF|^B*CJs*L{cojb5&{RX1h`$=_TQb?wcVEX&viZh(GkT}4}{P1`fqWD=3H9-Oz^@H za(yDRp(PW%1Dv5T&kOcMEVW))O;N$eKM@?ysTcNDx@PKJ6#p^YNfc$gvQqXKK=J2& zgB|z;gF-582kme3b=>uE+x;rOG5oW{W$e>&+q~)U>&O1fwK$&(v(PmU3}f~w?oV@k zoO&DsY3e{9zmJ^NNJo_xDV)`>mSbIGQq;>YB%))4+>*f zISVQ?fT|1$+a30_hqTWL$oL~!mAByS@hv$qhXCWC*??bPeDQ+ZMhn=XqVK5Cfb43H zOFSK+Al9dO|LeKM+8fwpEm?yOyke zrgE^AaILpqBgd%nk|sr(s*rt;JF3wtUgsiOL{;jB;KHfp_)KCNO-->nNm`MD03TF6XL{-;^mhRD`zmfvABTLoo+A4^^8^rg##x(>CKM3%+I zrO^AOV8X^|zQ$=b8Nlgl;HjOLSCmp1M}Jqj04VJAn4#@P!kV>muvt2s-3FV?<7+{fU@wkTHvzwG1&j?oYgmZ?+st zah5y|UV;sS9%Ob?mzL8Te}Wy>Ond_vz0bk2rDKBi%qAc~v+a;GRMn@|_dKne7*oA` zI}L>8r~kbF>(}Zy@h10XE+hrHL=FjM{}q^;@u?mp(Z6Nu%rjObsbnwZ+^LZqXSIw@ z)J$+drCy58Q1UJ?VQw5^XJ39A1rn}Hs{NH=STE*j{J{w|0Pq|`l2!9WPaKs>u3A&%y*jF8yM3U<^ggBW5UKYtGluWTWDj*krD%)=iiPawDlMr#X@ zWBhOmXsjlsA~?Sm@b%8htgq?#rdx#q`{Kf0=>&)JhDkmaX!T6q5G@8Ukw=-W0ccKd z?cgJ@s;ha%?}Xs&rIownZT0;IR!*V+lf*rmPR(F#Hv@yt?daYIOtMt5v;u-&UOFGy zLe4yqT`rsVZ60GCI^Ri%!y~lgj)_=b8nPQEX~okGayiOU`o{v-?S2{#?hI+h}D}GZ=6JoRnVB3Wik=i&~#CSo#1(?n_b` zv&p-;&`LZM<6{JN<0v#;-S3W06A6f__pIms^FkrmE<6Zl^3Bb25pIcAOqcn*m>;5x zknvJsa~7A=U`wz*-M6@O!H9f$R#RL(;26$2Jq9WGcd}&IpX@A>gNkdF!i5FVArC5VRVSnD4?tQJReM5@GVp14 z`emO#cZ~zk(><};qPp|Q#Px~c4}n~7eiDTyhG-!XA`$lWvt{nZ67DRcC$uPzEZZ%G z28mD8D9%O6XNq8LNp>hQh8Qvtq)O7G;E)H)5(;t+mq6SG)&SSkRdm5M*XGAHeN$a6 zL`~Gq$brWXbZ_1#v#P-*L1K^=TvVP%NV*m{TfvDwojrb_9Es2=zU%E=z&InS#%Hv^~MX9^#RRX>a zK;V0!mn;YKcwwKaTy~|=qtdWvU5!{jQbY0s51fGhfjP6xKV zDh%Wxg#@<&DHWnpSB};8cO43_gKI9{whmDmtBN~}UADJOmCy}Rb1P6z*GLBkb{;8Y zSzrX(rMWyi41W}E0NbN8BMkKCMt)^q$sLRoAJsZVq!)D^SLeq{k6Zouv1(cT2L9qf z@KTt{B%GYKH7iq$`)jO5gIm;My~;v%INi=7N(pc=J5m}I==)|l;B4CTy!hw4Y6(`7 zxrBdbvUgUc;a;viF;sW?5toNDqtbx^%5CWLtIef23$g0-%?#@v*rQp`v~spIKkc<+ zzh23~Ryd&fO#R0Q$#s6ph5FYB!)zZN%Sq&VjUb=(actzJ!q;X>-+c#D4{oZ%AlX0f z2m|BjlHyma36Wv1@wrnUYB<}hdtVS4@Lqy3skP0gl9=3vC;&st7sdLP$@0c2f?#{_ z`MF&%V>uC#J+Wq(Dndj#70-ZB;<}{DZ=BLLGxO#$&su~E%^({PsN;LPPfOMOJ&NU^ zqNr8`72(hpw0&6@O0?=|f%d9~`@8Fw9Kv37ipss(YiE27Stp|EW8uvaOWju<>;v)m zmch_V!tzIH=&R60RJay9ZCbdX<$3et51|xc6H~u9P~+s_O_t3Sd4=P;O!tE0C!^k2 zCtt}N5boLrveL8?6C9|`e%wqQ!4xszn_xQ5>b2qhfjqF-Sk?`k8c(PVS9eqHR_)8Q|bz7S$^tJgTc2J)t<0#3^35NfAc8#5F!`8y{ODa z>J0gFjueJ*Of?+dyggp%6P#6dz?5ZzSWioJpzz+hyva5j5e~(N{?tFCN14A$N9y$G z2(S!sM2-~=UDNutUvi0oo~6A$H7H;741l8bpcDIRJl zC@a9WY*osJ&G(BD={zZ#@92Per3Bk;R#w*M*F`tg-4-=!|rf(WUM~Koe zFd7Ua3}-57m{7?n$bIJ?W7W<{Yi?1|Bd72wTO#=z&nJ!ys2+k*tP4KPAfWsMr1L+0 z)Bj1SAe*GU$&2pyyAm%LrY~|mY~<3mt}byZ9N_jKnY8XX3MCW8Ye-@|#mq|s8Z?s- zx=RbT4Q=X#oQf*;os|7&%Y3ukr&|T`J=Lbe@eyy6%~ms@Gk6W(iBQc#8onpQI#KTS zB|PC691Hwou(fMoukv^%ycy5U8`I1%umw*XuA15W;K2|}3o@n5?8|Q~s2lnlI#3GQ z4eBc=DYSHvH|nVZNYYn|7O}o#KO?zySI}W26)>S?YyBPc;j!TJ>&5$p*FY&cC9f2c z`50@<$t3>|PNpC|>FzuP>!e~f$sRX{Iaqd6^D>XUVqMQj#EE;A%d+k6cR5Y4hVF+oFqh%)5G&vyO+E4{k5VGw;^GjHr0#PYWW+`}yO$0ZS~lvL~Axvcv4ba!B+v zI|jI@lxx*=yE15N?cK7Dk~!%^l9Xad!`PzKGW4uy{vqUjn~!uyP`vO_Sid6%`NrK* zE$Z9jZ6f4gA$@eHrZMv&vXDKZ&Y`lVpyc&wb0;Fk@4sXbxj*!)qE_99r#Jzl*58#= z&3|mCzI8z=M_#41a@wTy8$?1MQZhnPEbu|+$2uY3!zH=n|9gcWH0nYQbLhcPkiu+1 zKTg9~QlWyc@7}anpk_e+ zq{WRqLzsrJVZJA*t&iQE!w@!RGlK*hTLk{6Hw1dz5MxzJyc4oM3nJP3WQO~$aeO+F z38(t@FlWap1D6JyTT+f>T$l4#g=@XTO9gc7{`2ta%-!VE&dnhD56oFMz5Zx1%+N=v z^=lRBNAgQl3B`%SAlW}vT(rj8RSO+mqrBY}uKp4+XK(a86$b%a&8Fwm`)l0v z7}CSYhNWn3;x44jnuYGr=eyf+QIL4sq?)mfEro4I%)+xX$oA||!(a*R3eDzF6l-Z#~_G+)bfSKLk6kJoCd#cEhAYzfHw%iSRsfhV7T5Fap&aG*L6F^Z}iv_G=b$^Me| z{)WzbD?2v-r8HKrO31^JO>mrx&pMW+mG)v+iKBZ%^b%c#9%UyNe_ryN1oqf0^le|+ zlq*p?=DF5bBe6pup7RGA`e5i;I+-5>^lz5Yp+1H3rh65Na;%uf;94@qJW-#Qkzu>{ zyL#f`C!4f?St3^3X`)290YI`8zIPGW&(0Jt(wFdX$S$~FLhWD~{aI5Z<>lYo{1zG) z^TQ(ipjk#U+O;rZe3T8T`J=1Y2ZD93#%0CD#a8-Fwi_5?l8$4&g}5;=YwBJ02I zT+{TSt-UT#dm#OEJt=0kfKyPqp^#*Lyym!zaFQ!PK+vZG(C7TR3$xp)!KF}$=UBf1d9=Mk|f((N|n(3c$f=A z*&LFT)V9pTEmQLMe8H?e(H9aeeGzEhj5Nsz!+HWt4*jIvN8S!gKf36gd!Wii$#5mf z#lGhQ^9i;IX7I$SM$e5~RcMq%Pxso`mlhf#oc1@$5R`V#dv`RNueXoVroAB2+(xvI%vEm)fLYRV!LA033Km1+n#xnX^a&T|z>qje!({+Pp@r9T$_Po)L1*n1ga3bL(# zUSgU0AMYV&#k2~D9%fpROP};qqDXSATB!`;AR66mq2zZjzaompo4cotCU+9XBV;cCg9r(qMpN00BbF2|qwJ`r3Q!h96ck2Z{C{&3C1lckcw zI6v(O3VU*uz?)6~a*zZ;dx10ZWg zUd|z%Jto&dw{k-0WV&&!6Up%=b`2V_}&b;(zMp;?J=*d-5hOFzx+&Y$q z^}`&%Ri@)KBC+G!!kAZwghfE3mIq_;AE&Sw+!UjRa9IqwSpyX=eI3|%Gb{C26mGd_ zhqMFHGcn@4F}rLuy0OF*IcN=eO5xGaD-(myFH3~oYsyz@yZWn(Hi`B1wM}@bSOg*m z|3W2Kza-jd$K|^SRUz(xCtst3L%jGORPZ`<_rar3t(JV?_SSRfnY$sY*Mu8FiAF2& zL2hY|h~rqSPa+Ox<2OzoXMM zQyDJ*b62a7s;cD0xdoN9NTZPH?aoR0Y>3zi*&((k{Yj($^XL`-<^*x#AyVMcm)9_eYqI>_yuiVYFWyt=<|!CU>6b ze?D(i{18NDV#4wuTq7d|Z$}D^DqIJX)L_19aC&xZ#6CDnSW85p=xMv~?}Utsi)Cq9slLgox*-fqziuQU^M&L-gfe1O375>4bg~tD_-{zZk!Rq-n=0uNE7m$ z#5xc}-WpS1R8n2mp!68zl-yw#=wOO zP~kC7CVz*j)PC#dn0>K-rZIsb*BB$&gCvBtB}9*+PGw6dH)fzRK*-_{i~P|lpUi*8 zTp1iGI<0W`*kEeIYO3>Csbrc2Zt_lwi&0@T6$sJo>#9;+j*O0hyf^uY#eU$L2T$}) zjaPP_4-B&8GPAl}(k0j!3&ET7yT|H28`7XTVe#f3=`}iHX34?S@sXhv@YqMczdA7X$hY^2OzqV-dAQu4VjKTl1jgoCl}S$wN}h z$2fV6C9cUKigdo5`gKN^5?LW($z|TVJ_=SO&@1 z9mLM3YV~)Gk@s=GwyPOU8Drb{H#`%WUg2!x6@2un5+$hV!@A33qud0YYDzDcef4ZeB6;KXyX> z?yRBv{uf6LjY(Y z3sRvO_G;-#Mz-v@mI-2Q?Eyr3O~z+XnHx@xjwPyYe#nIFx032E&2!oJDE@+P$~=U- zZr(j3PW%$q1w?Dsl;UU&BU7^~1iyn|v^VW`iln)58x|!fA80lf92idkJ5%dL_3;I_ zQ{d0Bk9sst9DYIS|2n*+V&MQUCmhTKIcVJ{jgsRBOb6f0W4dBVwlnJmBZtB|*!Z|& z^UEJfPf?+Hx`&eKxq^Oo=sh#=;>wt-Tx7?>)-!(wOZ{%ZiFAQ+3c7L>E=X7bt6Rw* ze3d?_J(`cM*tSkeZ(xx8bQ7Tsf1aGcaBM@9t!G6V# z7#+%auZmydyAUfl=m|Fu`K~mj!iiBIUCYjN=gG%+ zm4pwx9^?3MB!T2TJAv%gBf^)P6q(PHVAwcjpUd+leU34fP37Omz1)AT7^n)h+kxZa zL0L0=poaoGxd-cVOo3RZm_Jg3>r2t#hIp{-0isgjcR0?cE#e!%NG3NX9J(n zued#%YZ{G?e^({_Y5i#BV#AOB|B(m=AsBAH$7>)FNcVVE6n73G;6GVJA9K znEwZK*Ze2*%7|jsbN>Zq!)^%Wg?XThzn6-$ zn+x>MZON(!8b6n%F0mu2F))#v2Tij-5ZDM@mLE?{uLB7w<&`~0Kn?txR_^@PXs#bU z1TJ_HBXUQo$4bVvY`kAw&*Qc-bXBryJNQqM`1npX%pVxiY+%*Gms#^|LKnxrruDla$6#jD&?!3Ysm zga16Z2n|-n=5h%kzCB*f|Gy(J>;D~r5@tk)j-TFZjr>GC{xwdQ#K1Y>nn6S`G$n+g ze7`&x(A*8UKW+EK<*jz8t+o@l_58STTQK~&l1lY3I#H}WL1Y?Hv4v5BXZ0ao=D?)J zEt;>jo^2Ja!|(jh<|>e#D`fC>4phararV|?7vHKMGCkd`0| z>~L<$4Lzxm&C)6o8S?sLM5w(*pdX<8j zU{NNK_|brl47Z|-f-bg(oX(u}_-MeWuA$7^XG-?*<)X6=Ih(e-HVt+Q@jvG*WrGO6 zY4j!jSnB+ixf9+Kyrb1d#%X%7GV?Nknc~9W^5k2Px_VN_o7H?L)@0O}aCIGUwm8 zPgcVOI1Za1TJ?Lpyr03fx{PAWhI{;$X)@`Ty|E33bZDGDVhG%+svo(yx}@W$w{w~B zUpDZTVYZplXjoUKHijgY*E=zYA$ie0-XxYx!K}A{wpa@csgk`TzKS+Fk;MzYa%s3G3Q?ZI~hsy z=sN{H3{VpH74AwvtUAwFrJnk3lQy2e!$cxSi4N)vw0I28NsmC1cNLP5=J=yZ(}B9szUTt}@&+?zF97nVJEDjG74{ zKL5b9Y`-8H;5NLcH>AJ7VWwb3rklD*`YdM!%VP@f{AV>ZVHpL&*8!aGCxuXh}Kl6%+jxFJT#3WPv3;gl3y6 zET+nmuhXoAY%_CMb_dfNZ-0~YRC$~Fb@4&4+1~VzxH^{-7vm%LCP5g^E4K@Gon@eX zj9!kUOGp?j8h~3u_v8D>m^(!~kOlhF7aS)V;CkY!Ro%QCO@JC)E{4+ln$1gEb9PS+ z8s7qqjQ;R+n5Ox5nz$b6tvRja#ZvGOmy7hIrI(?z*mQ8~cr@5pcntXwb7uWj`>4i& zAd-HszUEw?A;AH&)H{s-^Qj;*i*jkb?&Gunc+M0=Bu) zHw|q_N+g;ZeFtkS9HD!4vyHsc!DJbaL)z#7&L2Z5(BWde7VCF)vi)N}ZZ*8a#^RC7jhj<}8ia`-l7Q($ zZ2yggKY?YWOfF&l{B^#u(eGhe*dVewS2OoMi4;>-gZibLB)2nHGxMw8at&Jw8E(}B zgHc=yMam~Q-O6?}QIla_13b>gv{cnaGI6XLCT#*(6WjH2xs~ta2g~WaM-8N@xjAta zQfS2puy5|p+dz+q$>eJpi>7K8H8ytz3?)NA$&)zmHg0?%`68)YW$_mclRtHUQQQL< zF8+;U>rUnAH|O7lf@yrx9a`+hM>Us4`q=}Hvy<8IcM3=m^AY0LHM?c=vX z(wKFYPnD+s;-Q4Fw$HZD#PKUKNWP2iEZMJ?)e%ewhmrQ=6o`|1{ySUrQJD@VzjxIp_Rh>WNn@??bCq;LjaQiDThTl)YRI zQuaE=GN&(&52GAZo4jtv7!&xJjq~TQ2bU7{$}z$^Ty=7!0?je4ifgg?N+dW;A=DA2 z5ZpT5PcJpJTOq$s&tHlpsb%o1{8G7Gc|F)>bhn%o=%1FPGs%zp+EC2RiP(io%uVc8 zU^vdA+vv24o#3R8+O~UeW#+6p=LbZ$_qtThj3I7CG1QPev-;g3hqVZrHp7$+{BlSb zX^NnT|Ep3tJc0KGE+3vkGe6x5TfRag|7(%geS9T+FTyXLheOO?LF~+*Q4}O^fe(Cr zO0f~{X)fNSFW!Ya-l2*MKK=D6!%FBjb0fd0XSN*C%4tnCUJ!HWhsjK4@idoJ6|hWQ zqfv4EXc<&ygD12K^ZZVB9fJ8r%bMi+ZML2K1Tqdr3MRUFh#L*f$Fx3%cb&oR!{%&j+N^UBq;x#h;E>bx~vw7V0c;$QPJ{**mMck#WCF{4dj1?%% zCgcVt)CpEcWtS7g-&jVxun(1n{u=vWi7)27;aMU%Bo`LtthQ2INy&^2m((rb=Pu_g zy%bj&or7~b;a=vAM#$XiNUmw=E><1xPhkX-LFq}&4K-QID`#IGe@Dc9J=)qE4RNci ze#!5wMrHN#wvNVGfA6@a$Q1SNXcHbNV~l z$bjnrMu=QiI19Qn!;7Yl*i~%4-=n;XU&>Nsc>;f_%Hog`2HvW%4bkZdbk!`385*a# zY=0=%v@)OFAgOcGr83`Qs<0|uQ8}&2;i%#+k$F+f3r8Lr9MHg3@Lx%OYI8L1$`dcv z*z8nuQxru=8H|KH8?OCP_B6rCK=<|I#aAdbXhn(8$5>I5Sq+SYneS|qE;@08WpQGJ zvo1BWhmNr};%)mYPt0Fgtr@jG?_D;Mq`}lDnsgao(scR6He1b)OD9&OU{2neEt#cd zlHxtS!`|d8ONmDO#g8bexTGk-`(#PC5JTViYw5ts;cheHf&;0tpE2YvO9zLw=uspX zBBSA?oHD$4ZXKSqu|v_F`Wf=kri#WMC0|p?hP6%UjW4h>?`Enso(6aqFBX;SPP^a- zY4$yz(+pY;Of+TvMt}5jHjGo}7Uv@aMOZLyI=83S;mS^pm${$$?8+=ePg0eHg77kA zTZ|fBxxzBaC9_6S02D!KZdW(t&}}5l6t`81w{x}nCphV&rQu-PeVhyxno1hZ{@;AQu63p@TqmB~SQQTg z`h^r_dU02t(yty)l6=DpFop_@K-TxyhaC_XNodL2=|Ia>!)=9TVS4ihwK+(isDpT{ zvVrrsNJdR75#PUlrH2oFQD1$KGFKgIQ_9z+`mbNZeX9z_AtCD`POFByxJP3UJkWz2 zz@?gjuvbZLOZsw`#nu(^b?JPmz>0{6M3~M(9<+8aOLGnnYIy2~qfRo)R(P|A$X*cn zS>F~Sq7s=c@XndYwoIoF^%wD!Y(+g&scYq$k#tvJz1IxI&%0drG@I3T(sh@1M-_L% zH{9zxnfQvSlZ4Bs)?!)sC}^ea<7x8cyG7vLF*`_s;sw=PgjY+Zi*{g}Ci_u_wGdot z(sQy#TMTlSS6^+%+w#0lslPIFQ;wzneRBE~MA6gamr8elf4^(uz0Hz+hLvpV!?^J? z;ir71rn=W|-ARrv<>ceKe9RI#qH|~;iERb@OMkja#LIur0(exXBI!bouiR+l+1AaD z9~Vv&87~uI!t+8M6d>R31kZ`Mflsq@dCOUlUvOI~IBspet+F1n|1gd*R@;_$$y^2J zt6xF^L!jqgUly(`<`ll}D2!fp>-&DF%^ujOb%jx*mC~c3=7u3c9it3w1rJ5#QTd83 zg-j$bhv`19!eKZe1HEXt9}YPBLE99f5#w2hvUB1m*@;80p8Xv`ZqNJ=9YVn3QjFq zqAM1%B~yi06mD-pC_~s%$jwTInz2crgR=^uZ7@vwo1Pneirh=;0VB zkR?=$-nh32?((hvYXPj6peDMho0M6QZL*{nJp9k`% zwct91>Zi}?tS-s}ZU=d)N93Im%tbfLx|15-RrGXq3y zBh5v6_!`(bpWphfM6x0Hy;G~521)loX?J%w@QFL}%disqfEzailXpn!{^q!~MD!lO zp#*lj*)wtun2{?u9u;L;h)4Mp%{*c%h4xcTwzz@2Yt-TazA6Snw{9McH4FV^!n!o{ z9@z7>9gMKxUt$_b3f!rXj6?;8ETc1o^BX?3aNjDBZK^t$(9t-pwhQ1#IkX;Oy~~{t zfXGt{T1H5$B`D12MDyCwxt*73*Lr$ws{0tvrEu)Iz6pqKP6;Qo4% zhvxmwQLj&KXydex`E_r7un7!12KaYhf4*Y;@(?f-))Gv_7$0vXVf;7@Rn|RQ-uyN@ zZYb?mZLe(nc?gU?q_T1?mO$R#dN3y_S{u49eIj#F-=DFqgbzhc^9ez%sWEb=jND=I|`F;(0{!C9!5wxKS0)I|@`wFE(={+$*7Ih@Cq zD3R@p7;PG6>{w3Sc3%As)-I;0Bw5cg`|!%d>G0?J1PykYYi@S^FJg>0{Cm9ncg2G1 zGs14NzMX<;E=Q7DC(0M*-`wRtats$lqSj{Q)ps919c4JeQTRww^ukL-jrLj5_=b_B z2I=jCa{iZ3vIjocjF;k}MBA*cB=^j%)R5G@ovmLd+Za?ZbGx!gud~A=2aTl-ASM^y z`%YKz)tg9`dBA*nD?`u!ux~0Uu!riJxE08-c}pK=2wFuo0hC3u%!)wz1j0J4feZv0 zZ{mFbG)!&Ftv1rb9E|j|XYqaOG2J5J87nQ|A>dzeKB|$^4Dx)8C9g;Q0*^=*g5#8- zjOE%lo~6q!X;e@@@Unc2Q@_P+oqVcCx4ffX@JQc~Hei&C)cF;=Zz%cV#si9pQ&F12 zKE+CHcEkKokb#bz=-uQ35(2n_Wp86}OJA%E6#r5!YI_k36&Hz9r)GR4klAIjXpzlXVvImev)99M?pKR0C?oqZtHc{c5-T z@1-;#&>bK~u5}nD7>;_9p~}eqj zq|wLl`juke|NWo;Uq58t0GhFdcv)m$yY-Em9oebVD0&pq`FVWTxtJGwLTwa2rrHse zw4BX4190N3GQmN*M91zoPy-NVd_v6j_kG*-*QV`)v}fcfBFp&nlGBU6eLXU>y*v?X zy~t%g#uwG`*TjctW}2?z%M@)Fp={Zu|8#CnI)HFP@-}h4uAX7H3%#Ys(xZ6Eu}^a~ z-}#-NwAZ=;?zAf~elHjn2kPqc;9JMW$XKOW1dH>5!`m18gx?!qB|Vus9rkKcNzs1G z;%9hwj8DB6#v?Y5Pc1&7=+p2=0?_Fe{4EO7$Qs^O$-A7IVg$A{8Vr=`e)Atu$IW4i z7bBXYNGq&|L@F1L2xSZzxyjE@tth;bjMxkXa~WMOuqH4Acrz+C`O_4#jQ;+po1*FQ zq(Nt!3JKd^;6)5~>C5wS*x;cNAAojKn9i$ZNY40RxwccFJ58_lEdYGzK+o7sahNz5 z)@ojSPy2WtWX+akR|JS!YerOI3G>57a_@WuE0D(v2fSC-w{5{}FD`=RU`g$O3Qf`! zE^7&Fkf&}q@W#0HPkQWvXBiVtRPjy~esv1wVUO>_pReY+hZeED;F3|bwR4h;(_6<0 zB`Nrr$x>Y{La$ux9@>FDJ}^xD>J?3Vu5N?;a){l!4K`0{Z0~51akgtmHM}Y$CFNqN z56QrH-u)mqnr~S%`IRx_!Q#)1%#FLpr`YHIo)|`EUhI4h|NMOu@b@kLGG%dNYjVrd z#(hxNri90Is;=SyImN zFt;T;9Oz=*W-Gp0vbJo^-8 zsKAJgSt-^{)LF)%DvXncW5ZTCnQ2M%Z3u+LX(*F!Qux>+5czLO+I;g6SLKAfx2LJG z@uti-j?O;W#Grg^BnNPKp}^q}~*X`T?p=Yy}K6g@-gGKB%0cSgx^V`&&f=?<5}k-#}bq zXEA4a%P%(=)_VMINDlt=SzYc~5atsI8WC0x`oB>-H(5LI+F>}KeaMh080Kph(Ztzi+vg!tdB|DF%RjqOt2Z`vbMT6?$ujwE4|2i4m9{GBDK zCN1K@JkR!C0dU5q11$XyV*tW_tegKuWjae8)CXiEluN)r6i+!go8 z<(L`O3(x_4ly^4nC98x17r~1Lqw0nAtVx6X6(2fwnU4?C#O!G5E)TBj+dIQ9ktcc9 z4kEX5Na8()CE;cyO@0A~I-=G$@Ppv3>0XVt%G9~*`s6?I(Y`+kV+a@S#AO^bKh4_*QYI|%vG;IDKJgq<76Wt_# z(V+ShPvw!T`7V$~uo@6rzX>?nW}83OkUo$mbq){77qxHtUJ+IB?1^ss9NbbT`$H+I z-6wMYY1U;eg8f$xrR#tjKvCZ8_<5y%J|EVFE580f|BHK1)Ss8^)N}OR**a2PJPGk| zT577CbhMFQ{-peAm<>-Oa(zeeqdk$7Q6q!72%#w$dw{u@uo+leSzF#ZeO1*{Dwpt7 z!L&YL>4T0s$4hle$Fnl&Q1HxNshhj22M4CJ!sZBsDgXKFP&#{cp zlDTsYKATtifn2xO_<_;)XUEX;C&z^cE~39KS0?Y+ZsubTsQ+RvNsOl5jr862Lzm23 z;^iu?Z6w>wJC*Cp@Ae!;13W*VWgNm499CyvYi4r{fih z-!l{ia)Xgr)3-S^l`xc8Y{}Bgo3g`MsmpVpc^{6{iM%7uR~f$(I)|Daa2t5iZ zAI#ZLMB@Jn2?+N00w{iN7Q}1721fvQ{KF4F?AuK_b3CUEbTJV)cpf+^NIhJK%uR-X z+Tjx!|5$_I{`>E5qT=Mi0}njlUw(@i9ZgJgBq}!uXbT9Mb-k34n-Fx%z-O~}y zgmpJ^6V}U# zVZ0Ttt;f>Y{4lOIB-L;6g^O1JJ;T|5j00%-01g9bq_Mta2{pg&{A zjB(pO(Y79{K`k&p!P13Qzvi_Rvy0eBCVTYW9eJ$L%o z_HC^D;~`ia4?*;A#>+3c(+}Ava{JHO2@QkIcG=6Vzr!w`*PAn6b0;6LTa$}t@X%rI z&|hBU2L|)vN&D~W-kdq3QFk4wCD7j_z+^aTsV=wV@+&pErU{!2%3Gz`*YonUr<-sZ zjCv`eH|naF40@?M{%u}zClv4;l(un|$AxTs9x-hT&3Zu`joG}hT;{}+#7C^Wuur>(1Sh~-gViaJRwel3Kyz_FgOrJh| zHi!0t^|qVrHs51kPyFQH?{()Km+c70e#f8g#zgC&z$Fy z@B{hO|NeiG;qam@_VE=auH)9+vU|V5jlcbsd-3Tfd*IX=wFLT$1enwpU23dba=C7U zK$E-_0R5D5XoTIFezKkR=s(>n&py*oE}f7|e=`WOUQDECq-PctQ1SqD zxVlNBd`X7}0C?mH4?bK4%sv9~Y*jz>fN+TmA7!g01NIXrf7Ml2b$l8b8vbja1IPKS z7l=)Tv@P62KppHq&~?NZihTb77k>!ceX!qt`*}W;akP<3j|8Ws(xgfL(~lSfYy>F^BR)3D9rE+vG}v$<%EOWC|AE`5c=x{@SPi5ofgw{B7u|a6t^U}d&y4wF>yIgJWU)-ZDFZDTGzy{!-UBuq!VBQ`z%$M`!^ia} zX~}?c_QSEE5MW$m6mYxZz4zYhmmXGFVFfpF;>5;fNZ`?Tcv`3p0xOLuzSv@mxgB=c zp@&g`TLxnQ7ZPhUocSyZKDF&+x5b{_UINRL!SQT#3gFgDe&Zg$|F5>lb#E$MCd!+~ zeP`z_o61NqD2~10dOyHkjV@RDS+t~3LoIj&HzRtZIql#thA4HqmcW3Nz`W5q z>=NTwaHE#)^8ME&EDu4_8|lBEe#*V@xTyxDe4zEWX;Kg8{L)yoU;%KYR>$OdVaUB^oYLxdBU=#psDq)#m=FFLK=%wZj zUw9F>`legCPj2;Dx4?+#;*{BN%7J?}_5s*qhu__0E1@)nhyUu5=!C&S(Y34Zx$l{K z37U}VL@j{Lqj{ErP(eJDK1db+jLckganjwtXr(o%7y1Z+Bc;wLy^l2()By z&pr3}?*&*)`-~N*Jbc#5V@)2|ayo$zc{Y81j(X*+NWdbhVqkkAwj#yLx006Q{ zL_t(X9AAvvR}e=(H|BNJAV45|k&1OCHg;Tb#TC6`41^Ej3*Y*&8yDTE2HbSPS?;#W z&hv432pCv#O9mi8+cjZT?}p+O!mBSl>uK$urK96lYizc)cSTJ(|9{=g`Yr-1o;u!- zB``F)vbbx)YHrvf{p#%jyQ(W!ZC`i7I s+h?wP@&Lkf&pp?##rurW;2-mJzhHlvZQX1*VI7>bQA4%nbYuL^eJE%InCUs8~673WkiYpURicqu(874;-9;y^hS{{8U$w%)H z&y(Z)&$Jo%RV=l>4(xBQ(@t$1+3)j{g>#=1e8T(S^y)6~$upIHdvuQbF~?izm&B4M zY26RrX(b49z9Z!rUd%}=T7Mz$f0@oH#E$)u3Q1Xqez!s6!@C4_PEo6<1#D8mB#sV0 zP#Qf?B(S6JGn(%@0i|df-AF|E2JmrvSz#dcN6(OwZ=b(5BBv4`7ghP6 z=#536G@{L&sQ?E*@#9}76s%XLLP=}0`O*$|&;>Y~O% zzk_#cR#I2RrLq+=yps=k94^U-_fWMjGWOeK054b6-q11X#~DLA_xIMPK0?&Aqqr)t z9|V0bu{R#{J=*O4R`k6u%;;(YW)6gXwiMN@U7+y*h9C(NV9tqPS@0)eSNrCcwPaDQ z6uJBPBK3G!7YE#@5{C}`vN3-=X{ ze}e~lXh)5S(R8FYU%^OqOiL)}7rseDjb%XE_1OM{`q{m^SM=SWEgkXej%OGqpEw?{ zgo^fve0=sg$uyX9qpgvL8o2^q*}V2-$$>4h;yj=)z_|;xi%Se+{X2Q7V zdS3X~OEt^jsOj2SM@m(dt?R|xLQe&nK^~hzlgnGMO*O#J>e5!u63ZD=AS}IS)Nn)- z)xfZ?N~)Apptwu?<)O;`XUa5|`qj)Qg&ZCu9-h_3@-NaX(p%DiMK{OaIF8j*V|diL z)mR6H2TdH-$;5|$$OS6q%(0HLS|b&<0e5E?OOoJF>@M@WL6%!8q)dpXrzg;Jt1A-K zwga_|DAHrglJ96L8@Z#2K`aj}GO}KbgWSgV*!F@PiP!+y@`E622Nej_n*gm#gd_xG zz<~W!7^mEUFA2}sAN}j&IKOxUszM~~4rgWDb3gyD$ejMMYbLhHIw-RpR*i1_ogCw+ zD?U+}e$fQ{T@nuo)OxV(M05!7Hp0;82xVS<3D2cV4k1yYuZanid0tIXBvMbu)sMW1 zX-~u#Rm;#2eIrA5OmyY*@fq%nWQ2-^Bj=!KlPNDnl%g2NgqbN_Gp252LXP@R>RM`{ zP(6`~EUKRzwPdJC4|=;~ z=S96xWnRaPk@-Yu6+&$bU?Q#wtqBn8o3HuZ~cf9EDib)1d_D+82?hC!bRNavkvs#5w)FYejr5cb$=ziR(U zi6)tyT#sCHHLF75X^=U$6LMXemb8#~tGH)gR@R5|^&-L?x{0I;mGUZmNLsIF#04i+ zico~KT;6lDA+r`!X43}Kil2_nT+5jmVq*n>g4uDU3FySC89P@x=T!>*h-*rG%2`Sx zS0=}^hc6!_zD`!@e`fgPqs}Ks3zgc^I*=AhS(8@0mUOMP>6tl4U7xA6*|r&AYNgCm z@1_V(woi*$Mmo1f#-wHRd3vyXxLN1s>%if_VX9${VMX2S@(5Oa9_@y=E)~|P)=?Re z86|qzD-T=WwC1=`y$UxP*{HF9k64KJv+rr79!IT35=3e8XIuAd5!#$d@80Z%oynbE z?C4M38+34EviHB%G#WRsoh9I@5|xUoP`i+-VUR!UImDVcA+%k#en2bMkV!XRUQJ&ubVq9nlJ8x4HmBpv+LGp( zvTSJl>5+Lp=c4g<1CeAAR@7GRZK>sJx;r(9nEBT|)bNl~Ue! z@89i}jcT>l)mJH2>sc-v+)YcZ2HB{Ys#!SnC0Os72#nMZo)=S1L>eXxH^yK66;m-pSK zB6he}tg5ub7EN66U7Fm}-4lcJq*MB&q9~u}Dsq~TZ>KSLa&$OknAB{$16(RRD*W}l zT?O2>LC|wA{!!yJ&{CuwzUQzfn((3rzsG!=S(~<}!0qrYnwPp4{w>R`BwXMw)Apco zeo1I)8+jD@*ryxW##Il@2PXE_G>|cnHPDV$R2EZ~9B(x^SsPwkSj!-2h<;DUEQXb} zo>d}da};qU=7rnNJj`IJIJaY~1=0aYUixF+V7f|7fgC;NF1a932`$Mt43ya-BtUb8 z>1ET@pJo%lZv=+fhA#}M`yxZrsoc3E$$6eyyDX(%`dpI28i*~4 zePv5x`I*8q*i5&&jr;m$JatrQHED%m6KfVHGxS!{LQ?l54a^)C`!F+nhFpom zlYRD+v(c4NypfX}=nM8h*#7uF%e;+4w!QP#=@!%0;Sj@i-WFBNu8c!&K|zXq`s+H~ zAG9wMoa9eZ>aDe+1a;cfe4jBrr#Nw1kMb&+e0P<8?B#1CYSh`X6FP-IGM+(~KEXfb z^qvdL?k3GnC@-AM_VGTG*<%eww1 zQ>Tf&Kv|sBN92H%_Mhu6bgMIuEFKMo*}OW}0~=wrNmS=r?abv-CU`w3jK5Xg)zNx) zZI*014_J-5YP-E@+ae!YeAiep2maEi+I)QdqFsHaq)vmZ+^f;}Hs!i*zwW7peno2a zp+~aCe8SoE+29$~7U5O|!^pYU(9{A&9B;XGv9W0WiNg5P_SY!rY?wgi}NXs)A%&m7El zTOC@RkqNPK>m7rqr-jS!=8W2hm@ClquC89(?*>}L%q~$JNvoJsX5OpFvX*xR&T zmaR2JHEgfaEj@24acbDlm}o6tJ@8tcU0<;~^;*08j$wyy4I~lvIG2I_RNKz(JMA-4 zlFytLbaGu-B3*LYi3;_06pj_TnbW;3IM1ZaTok^C0q)zi+?h@t+oIclx;O2|cb4c@ z=;}9|N?okD$6ow^EPio$04-j1SjoJLK3yN^+sTy490V?UT3-{vw-ojD^fTpY$xiRF z4Md!32awjbSdo4XAhE4C#qg_m3hx6#uH_e_I=s7fIX-#YVSL4dPxU!=x2IAf?XM#H za7~-!q7W!x(5?`FHSEKi>8#PYZ&FhaIkK#D8r(hwJ0975zLvj^SnbySs_KN^z37en zK-X`l{{GSnK`=fWY04TaC?LH+Tw@}kAyXisBd(AUhcGhbpVv~z&yZ06RgQv$6l{is z_U|@|i1V*kG~)Qx=Z`b$mmnkz#5W?u0s4yayEXdCSJdCv$b*PFBvCbSSy{wc&CuS+ z$lAfw#<8sAMK_`V%U0&S0}|4sr@szlSyjd(#Q3vjZ#5k?73BF1ZLC;7e6smy#0s*q z{WT7fAc!AvX=UX2ffi(CY3;xd5~BZC3x34)uVMf_?Z28hS_si=Dk#&6+t?e?aXJ{u=kgM;j+cA$s~>H~RDS$L}-(nf-Mq zYlnYN3o${!uNuH>RyM$&V{wn2HHUk-1zLzkwLdXnp4`EI&UcrC0|6etK-SKZd zHUH}Qnv0G7?_K{^^*_6+I~duE+gKs)=_vfydi}fe-z)#!Q4sKJ>VFf(A9DUzDMHY~ z*n)sR7fl$Oqe?v;v5rs7B$VDF&Im30*J}&$`3!OVI&UE%OOus2drBc8i6F^Jh`t3O z@9UzcsY{Y&K7EA7s4k)+A|i=SDZmCKj{PDV&j@!EP{xL(9n=YMFL{f%ro3DgF0i5<$^b++1 zbzAMy|BtFP58u^5ASR+JI`-BV4f@eMDCKK3EiEP{il5K_^+Z61_A26{QQ~RL|Fh{I zqhYS(;r@R$wUeMVgIcq5LCnHZti%S?7CWLCj)>y_`PUGT>i~D3Le@l-n{XvcA2IBWpcJJ=#a>Te!kTkle^0G%JY1A zrXRm8d!GpRu0FlLAKoe^cN_FAf6n;Ng1K!VkijOHxN8_>%_IG-0`@4rYVVHlLbC+MSV0cV>8V3U9rdSl>A_@dTcaYD^apLPT#_8AEt%<&`^c z-=UcV4pS3eYF{I)YKO+xv&$nEPIo7M9X!u~;w^X2i+&S~xrR#F1paeiYRsQQ>UFvA z#zIU73%Tg~UFgAk@(c{}Nt1&DIUf|(5qj!R7!9XGm?QGVgY~E`{9h|d;MIZo>y!4@ z$K8Jze`5gu8LM_|27weutV@@#k3kYTey8|?|0%{g#{CtH?m3r}cF-~&2rM5^zz58| zWn?5Io;kr8OcTWQdI6Gg|H>U5?IC&m^o;&i_A>VG;9^U3gv`>D@4>`w*2He4{Ns)u zpTITb6!j1IX*@xeg9!ObouoBvd5PuYu{&jR)4u9XH^OA~3zIJj0R9iaBKnNaxRt%H z++NF7TI5v?)3t18juw%urvJlMqLncjlh&3iL`R>&YK1ePTKR*7ga1Wuc)t;_aZNUv zzOQQQP1F?A_F5}1VIlT0X%NhGOMreom$%OHLg zba)5gYo_eHpIwW!*F0H?1AHpzZO@gXdPb?FiMis}P|LFc;dAVgos4L^e|mtxi#{u` zN&16keShJ-d@^>WyQpEcZ%9%5+5>G=&K7x8G6K=gw0D1l>$Fpkj+7Y{$=+1c>SrgC z^J64eVZUXm>ER=>ky4xWTKY!+hBEZ#aI>yzV`4J>dV7BovP0*-6mQLx?_wUQ| z=QKJ!kn}fNsWqCy9jmq5Xm?aRvEkh9iRZKjqSyZV!Y}UVq_4#%+gcadP=^SsPbVO; zwcJmMGYc6X{j)1t0|tr+0%R4iqkr5N7{qn`8*4C8xKV^Dp{E%m*aQh*m*zr8Bp#fO zB14ywlt{uX`xsar4Qnf{SlG&DcDrv$FQK}Gr14@2`$aY7ygKl2jP5ka^_IDhhOY~) zBUJjAU7X@?gMa%K0s-$1%eN2{A(-~!#{#Hcy&KELFb<|;b8=MB@s6&CG4Zj4C${1w zUM|%ytBp4G=wRm(Kl@T95xWfvZ||?s79{VBDk0Wdi^S0m{7;bi>zfaukF5~dozh_X zqPilwH!K>WWvs-j?)v8p?^)2koF5JtQ$m?#9$TBg;^oq$2L)Fy%MxsvC@=Lz6~q$f zV+yJmOn|}K#LNgYLrenUJMjZ)K0>s5QOWT?2}Z+2eqXSOZv`C*k)a)ZZ$w(@&u#x? ze^+k5mHpG>Bog!cO>#V$3@EI|3=aSze&`o`3S0+v;fLUF5&#(^F81qSqfGiB+Nf)+ zuTLE5A&vYQUP~}_J@o$)KF|`O*>4XhXdN~Ax0-hv9c|0BR~Dtp+=T&uukqSj(T+*b zSpKAG3?G!O=U75G!Zrk-;;<6J`Zv7%Pj_C$fJDsM3{fL}--` z!JoXC5?Sy&_?Oro8x|N;jP2lTV&9HZU+M-kcM7$)GzH@T4zpmS9%wW>`j2Rc;2-Ha z4mz($JgUiPR=0``CggRV!rc3q8Z)z_fV8~0Gvs}Aj!O8C=lI^aK2QYx^7d&yvhL9c zgXjd(CBkX%5O#rp$3LT}wGoVCkrN@Fo`avyAH8qCg~A{82tQW2a2YaJ*k8|4P`V8+ z$M2LrdVSOID`J?W-T(?;p+NMoJ_udV z1)HnpTh^zt<8r88vHTWGnja=(-r;;o47s*d{Rj_W(VAIiH?lLHCo&sk?%GNS#rn*6 zr%CaRj9%;<8vnHs$7|9HERg$$)5-Pjzm&D=Fv_62Rk_SLl1BImnm{02x-VGJHFjY5 zVMN55e;bT|A&>Hj-ZJBwJFB)ra*?Ze+xN`S z7`M3dr+0GKiATQU9tiE56(@}P`tbda)d30t$&HY)?~hMHereXx&Q9Ok2fBsk-^_3? z-(g(z0iYssN0ljpJRY6mM+9ET)-Qj}EgYYnx*tRf@eRjdryleW`GHzBieWz?S>k%U z`ILKuMyXScbB9>;cEk2U^PYL09W(g;>*crfJ{z15h+!&!a7bnNLX`a!bFzvF#h03+zx<}^^t2=DnCbVr{Lesi-cMvj&~d)Fdqsfg9A|=IOvCD^3LbaA;^erEDp2SG-RonOGAwCC6B_8XUaP_P^#%uD2ak?cJs=^#p(3&vE1XR!p)lB(PgwPW^}}bRnp78_@({YV7U&3 zBQL+&<)|s||E_VaX!fza?yTZ_=?)}e1VWE)j?yv&f5W1$gfxN`WL)Z(7eBq4m@7ni z!wQeeqsbX#<1qZGTnW4(NEPpsTEb#Q1u!f6MIpjh)Q8N`6-O<!HRgL)F815TJBmIdC8x|Me86*l6}f>T zedFc#V969RCFY{jHe;Ye3GGRzdgbP5lS!2HSwjkEZWe!C4-x#cKk0=uN%1Ps#t2AB?X|D7h z&`voz?N0;BB1G_%U{(#TNay+b@9(FUYG;BP_gylLWA5;nuZ`O=TJ}nLmpByDI{Np= z^2Y8o`OR9oBTiy`#@g?%<;rw#q86%MV;9;CTNYBAHK_P)mGffqg`XwYB4LxfDEv&y zlK&<{T{Ycvw5izR>bQ6kos7w`NmD~ABVjZeVQ7r(2!nrqptitl!9S$-OCswSe<*7| zD}pe;B%60t%HJ$p-8lnS+)oHBS=!sVXy0qoBNqb~+W`-5mTB6xK`l%5-dGicl`w)^ zPVZV+G=f6=6I3qx|I(fJJn$Y32vr0(Hujd#!JNu2Dgl`Jk>}l+#%?gQO|9hJUGC(^ zTG34T^P}RoP4c>SGwQ`!br!@WK3^z*%lkjUl@<*}_LDIapN+5*O}=${0rM2yE|Rgq zUrvLO2?bUMqki+{P}K{-!Eu!0d>VqczUVTj;(6hHkyngJ4oZ98PDt-|bl$N(4ZTy# z@+&COwr*8l_Uh9uHjT;V(^8zkuR3GQr7o0}L%7Fi%v+6xtXgri;I62^Kl2SD8!+Tj zpV*VF3mr^pD`6=#Xoluz|356aV;~I43~bYMkm8{|ww_D0y6t;v|0IMyBNE+X_6Ldaj8I6D*NLGqgh{}rVD5(5#kud<)ZCP232 zSR!Gn5dADh@@3oaCcaN3X`ee?d~cisUEt)mI;u9NCAbIqk&{pA`iLwpEuXg*PzhN! z2{=Vr-Ba)M4BVAe2x|;w>gS*DuZ)n7C78g7o=!uQrr*u#xg&NNSJevW6))f1zF+i0 z*YBKF=TW?_umQ&)R<~QyMfF#hDnvv2ubhbZxS;AU4~q{^N`rEmv-a>PxZF@J_2dEP z_uTdLZmw8|XD=ZqO^dLr+j;0l`7c%RIK4E2{K~ap&>1vf{340qt+8`(pEUrsMI%Z9 z72Lo2g5?Hks##keN@w`!az3_tHE?KVmQX|v&qyD0JuxYX5(WVUVjsTQ`@Y*yB88j! zz%vp5H}d>v_C-XIAv!G$C=+h|150Zk+{V+M+OFWjQ|2~)F1;AMIMf##kq1hC3 z30KMe`Ji*XSA}xb7xRhiI{uPRvgy|E67@Hv`v#lOpI&0OO}6EF!=@GgZDR<=>O-vc zOvW1lMR)6)`}hL`xiD(KCA1wnaO?&+Q2ZHi<4<>+CXX52d&50^%C0cp9~IYywM;ms zLIgHpF1s^{Na6iZx{yASZ`2iEg_fM*+N>+B4!^}-2Y+t)?N0s^S)*An8MjAh-f2=t zu<33d&Z}B|3HhU?2sgb51r)EdWhy^{gM<38o^82%IWlNTeDLQ0;o&&Qges}js~mwj z6ddLO3*Kw`0;!>=kW;Zh_3iTIw^zrc&$UJRCgbA@5Q!E zpU?uQ+z$cZU5Q42U0J6l32h{X$3R|Q@)1OzGaN`?N9CwJu9yUFAl}(9Ynk9(FSz z={A2f=)C%4S?S+7n0^#A6wZ|@C2UVZz_GoFXmg@KU*F+=X8XyMWAIw~YRxepZC-^| z>os6hObqz)9a!W{jy#T~F=T~6;ku9u6VK1T7Io*}@cADJ6u&DGVIpwwWW7{7);6Aw z0y{c%2`cY$($J`VH`&v3%YsNhj>4ZFbVvF8!p!*@Adw;@J@9xw3npwbDt`udhhDm` z$R6#T3mmE{q;Lvg*}r)Ij|jo5PUzDs&`**eFhnspvcsdJV-4T>Giepw|0|rPqlC`w zez0FSS}(gJI7EK8$bd;xS+W)ag!EvwzRXB)4p4jO!GDXvKdBvXsP6$QN)a>@Q$C7a z7f-D}m^qtW{h2X?IRvFnYI_4R_s;lGBRg zTm$=yU%otxdwewD9O3fav_YUAg3;oRy+Q>ybQN-brR#Kf$~o_}N-B5s1Ya$?hunOa zgIIk9>}oFv`0|f@(D$AiMe9iM8(zT-_2{w$D@D68@828;Jqj}Sis1+?&JY6@%_yKn z{3tR4O)hn1K{aIdraDhvyUhp&5RG zCv!pkPXRmnlkEZRnBJuD6w*C>a{W&pe58G3gy5Waf01w-v})a>@~9V}?cg-KddZ^F zNziJGONIGVb5puvNGW42F()#UQgYU3(w7P2S8>CCa?8JiT$&rE#0wBUn-S522NNKC z)M#FuKk{>FZ!sAU0wXTui4fBXW$K^?Ya?kNc_rzvr00Ny6ItJv>bb!-zdM`EnG4Em zL7jGuu@uLhJ~JQQf4fvn>sQ9W-=F1W+8!!7-V%uL%1moC{*hNouv3Ve z2XCt_AvtrkX`0|0h#f`5kZB(}PCA18i)AKwQ9->t5p*#HLOspPygelCpp#4n*I0aS z&;Ff9A|KaoPp(7XszGQi>>> z>tu7Jr1)Lys}0-GT|&*$>n)SI;6qeiyW2+o3$T5$<$U!n_+&8Xo6+6%S+RRVWV0#0 z;8Aq3M!QP(BM!?pTh(0kq5Or_k%p!Gg<3N*ZuwejZtJDOUr6PzYi~xnO3&)?O2Fk% znUcqHoH~pYkTsYHpy3`*U`d@R&h$Rdb1HhF_G78?!}l`nf<(X?qW|NOFx5{O+C#tMF>HqYiNy0ZC6J@3s-2!x~i zUF*JmJhReTI!Q1dm8$nGTw4OR1!QS|p^{Kih&T+SNaz;kE*DVaA&TLAm&T8+GdZP@Xlk-lE z`c@b~<*8f(HjOBWu>I%l6vJZ8r%hL+DVn|^*7*!VW4{8TPo(t*4g zbWD;fkpZDDxN?I?opJ7N$34#p!lm5OLajPynC+*(e7q;f<5%b~Ew=)Ob5p-DpdK7~ z?_+w)-#z%JH;gvLL^B1~2xFSCPr5uxklwftpaZ#F2a{9$B=@BSnOuN`fcN{vTy|ZW zFMZWEZ5ExWW)yf$?xKNb9O`@yx{V#wiUGSGjIM=rM z$u?utuEu3E!Efp6<_s-GC`<|Zlc_?hZTb=F+!H@K5EOBrK}HaMqSw1-9&=?4QAmYq z9?o<}XLonP%eO+2Y#`(g^BYGDrzwR7iMPVBQSzz6(xfa}oU}^|To!LD^mLu5B(5>~ zlA&$e)Mq~pl?qV`NHIeIZ~1&KPKFW+<6maZ%6`Z(I!%J91mcsmH};L%)KmjyT0hye zCf!lEOiY()Lvw$c3?;C>1GE`nbqhG|XP37e1~qQG6JV`)bD=?#%`Ph1j;po6rWrp> zgxt>56ZM@X=WgLrl<74lifXAm+9>W+a~I4!R^cn|(7WAGX7i#?L?nGVtFIU`Zu~kO zqzT6&q`~X9+M z>^u1IEYU#tiBcMeKPrh)M(IsJd4e*;^VQumj;qg38L7`2-L@E#(V!jZXuf_a||oY9F(7bCDM5a(mdZ24IT9G7mfcE{lW$~+ZS(GC|= zNEQ^O;v<4jOR7{?tu{NkYaGCFDZdw4>%NDy_R5yQGE$l~>MSQDG$1Su?+V!a^dX+U zkHGEOQ;&fk%zGAG=E^OWi<1{xOd0_DB-q;gpJKa(@LOD<(_Z863ceWdP7}_xx?jvu z+&8FRX_Ig1H*N5VLp)_7ExthcGp@r*)jNk(1!fUmAc&)5G?CI?bB?PF4 zprRPJm#aWtt0QcK8I?u1x&IN^Wq(>-*Zlz3ZtQ$b^zLEA#c;Bq$JtEcbavp0Benba zZUHMpr~9*o#+ZQITG!!|v85)5lA6&MdFRmkL`B~&#tcaq#j3-XUobOg7yEW+5;g1Ox6TspmYfphk7F8JK_jS?Bl5m5YD3LaTvfHlF%2DgnV|*+q8I9{q=JKOF zcwy6H5MM(O8cnD4LhuMHxEH@YxW5;F(HrFqFbU#8gF53e+;=V<#spz*ty(&mnZX)h zD}|y|lW0N|X73;y756^tyS|Cy~@)!__;*Daq)!9 zzK{h(Bj|{RwE_s?h4Tw{x)W+2QMY@1EAhzMa6O18o7wn=W9m`+p#Nm7;%j+ZJ_XiK z);z=RZ*{Vv45AupU3%nFLu8F~wAYAa{;S8yr&r^A(wyzWt7fi7Bt z2c-q~IH-4W^S`V$1sa(@z&UwWmYM&>q&%Ik8;}IlXod0PtQ4TF@0{ASjb(7@w%&}U zHVg0anC2d~+|!NSids-D>@nd!=8Th%dYi9wcy`ix11%(oDF!;9R-0j*bo~Cc% zeM`AFHrC3^?&)xM!FgD#U3YW+8WjaJZA>#GCtQJ77j%t!qIReDU_wy9rQbfq;}d^6 z!L!mpTrZvPaB&K#aHoKL`;t2pHBDmtWUbTR{O;OmH#Q1bi!MF8tI)@~$>Sk#dmN@T zb7^OYve62^rc`giGsRf%Hj!?X70#tr40JX=w=f0I7HMZ*C$+CKn+x!8t*}tzce;C= z;C2dFfPpO}eiw5P?}M2{t4?=(?W02~{mhl+nUooCwUjq^QJjk^fPqiK56`O1XOzqb zb7AMbpBQ0*C4GSQ%VGa*KNI(D4jphzV}(vtc<-m-uz0_(l@N65R!Ag`g7*>BO`AqxlaFjQ>`jKiglQJ^?(1B?GbCjoXu2zk4opZ5r7QGpJM6Mk8wt(_0?sT0T z#sPfIUo(!=S;}D&EUwll>G1NN0Nh|UC4A_r&*ok4cEBZfB>Z8cHiT;>CMMJCS`U|s zU3q(FBdo-MAhBSr3E3=>tz@+SKDckvdCnNoFWp>xf$=qC2= z(Imbxbx5l;KIVtG`hukocLFetA<{0s*3HcYbhf=f zF_l#1vXY$mSJL9^FWz>s7fch>D}V+KRZ8Wys#F-#m2oj7dHIh1FqxW@fC37PHFzP* zqI)iuzY&~&*oE%k^rY2I9CG(&?DBknUXr;!WAZRj&nM~K5X7fu~@ z^+xen$3dQ&$IE_+YsED@aAU|XaLBLH(d+V{LEZf5D~bCQ?^E=GGFB%yft?j%*T}Fl z#syAHL$8@)f6&bw#4j;H$U9Ago}b^ACmX=!7Mui`2N<5H=7VGLULQp#6?C0bGg03Ks82amSw#_HzY}+@KV7AbEWJE(^nr%L$i2Ok~=WmXYcfB{*)Op-?LpF zReZrq+odB4zAiQ{j)(citmCGVsx+@a!M!)({f6!IRYV zOH(zDptV*mtQAN)T#T&KJr}gz)o83hS=b$nZ|1u@Jdg9X6Q#11W(jV)Q;^RgMRR{8 z4%Ui-3*h!a{;3+lC!gz6ITgfeHo*_Jyb%eRVmam^PNLc+yLE;|``!m#Ic>OT6-Rno z#P>-6vf_~3q_@Xga>iXq7Ju~HfaIb)kK^6_{!Mn!m@EOFgRiyIy z*NVb^@ zTp-&$saJH(Ev?z=ij|bE#3~o6B{-OT_thSils(>kzB||otdwt9OXGQpyr5k_=_AU3 z%DKX<__%DN42G9FWwp?&gzAd$o9#E}lo3;v>p8MVdapkYn+vbcA~w2Nh~6kDJXQGW zsE$Z8#DK<#fQ^==99Y}7f}~n|u}n(L0^d!76!uQWgw;=ej7-9Zr4>)p~ne_m5lMY$4nbho4cZSc&%?WO6=iYbcgZ`@p+?(o#;Gd<5k zoh_7@B&>7gg3|-ka7(XTE`%MlWAYXey(pJiR(AP0 zCi%H%CCaeO+l2Z9(OyRo-Z#BTDbyCr+Nmm3|NWQJn_ZY>pAeYnt+K1@hD z!_*3@vbqjEb5Vq;*H%yoI1>N?h1jH@ai^4xq*^yNr9z34r-pkahovKPjf%@st~hVb zy77V3Y)mO|u{*`->SR}`mM)Mg7!(?E#lg9vQC7{lk|=cHM@6+?4!yb1-_4N}KUWbz zx&v*Iw)eV2h3~`{K;9SW4Kjoui}4~OAP8!mqO!Bf*4gVasblvo9@`mWm+im&JN= z*6@+)m<)p>uk$N~ld_soe!2C?Vr7zpCuDX{yF6B3A;7u+A=w^uc+|mAfv2SVeZFz& zSu2;9`w($gleTMJ*UdJ{3M?6Zw?%SKZ+@DF!D8{ zyH8_?88k}))jB$)wkE?8Bm-y_!f#Jph`bIbL1e5t0i32UC&XHP`7f3nP$%6#Y@O_e zjRB|N)UNwjPIqTKXpPzrmj+kM(_2Vt&qX!#oa%~oF}iFoJdQ55WdyLpxW>D6hrt&#ZTEUCuFhHK_j3>~QcJy-tDD^+zG|D#KFL$zt5tgEnAo|!rK%x z2Oy^D@hx7XCSk4`m+jJlHsx;1kHAU{3SU*rw_w=!S0vD*Dam46s}Ru`1d0e5xSMw`oM*#CA7)2_O84LnEnD+B3l);SJ*JlkQW`SJk% z0bQWds8DFtWz~Q8`(kk{;Nlq4a!7_lrg``A!kUVC7unCh1=^GdzmG!WX!_X#ysI*l zDk{@%Fm1o||HcNN9N0?7kEFQ^;aR5z0aR-%DLCA6udho02u#?I zUO7G44u)`Dg?tAwXA$*==zG_3uGp#Q=Haj& zKg77zp2+I}WvKnoIUAnC+T@Wv!C=)$EEk&QngK87ad=i-))txUT(#~^w{eeT{7d3? zbFnMwbk~O1;ZqmPMB9RH%8K@Uc;1w_{2G~2VY#{B@nc8^h=n#@#Tw4n6`}; zC0AL!^UCBP>a(&?j z^tgNmTj~|g&<+9}GEznHQELj4c`oV;H(bImAv|>(S4P)jT9%G%A8K}vUsk;1viP1K zYhkMI3oF%Zlb;3NiXZ6}bM|(29HS_i^5-o3*z%*EJSYG*Tm+q!jaVHOqiY=@wktS* zAa8h+5w`K6$imx2NZrpwppMqUYayGCoq)BbDe*RUqgyzie%0|yY5-dUrI-ufoj3$0 z*1QIf0(#A+_9nT+v1lj?NkGVc^rU56P3If)yNJY`7A;T@kOc}$F6tmecb5Br~N zja4)|9>`Mq&o$z+-Zwk#O-~OHb1F&E{FL{?Arsc!&T*+I-+jEURqo-MQd2*>Zg?OK zDAmd8L;frwbUX*Ceb6M^x2>hOz$oU9@!oyW+NV>;58~gqPZ85WVkfe3m_T= zoQ|JdD`C+;HiqAy=+vCvU91*`68FX=N8OblYGQJl-NrRTMq8{dW@`HnW{A6N^At=U zVr32BWNp78n)bgwr4p&90!+1w-;wh;*IuUuy!@(|-cqzzOCazzH^`h);8?3}PW*gUlY8LwB4dXm@A_$?wW`dGg#Gt=XkaGm#EJEzTr*0R}}ky|g! zxb1PRbd<0gok24VZ>7G%SCB1o5+&&iNB$3!>bOq~%sNEp7T)1#qk7uRSHF)S=Md8u zq5Qew?QdK7p_?gJHh%Vg;=%$B7NLZWTZSPv2>Ej}=p8r+3`l4>IBK?EVNOa&kQ*2_ zh;)jXpYLByKfo{iF+#ByX#A8&2AAA?zL9Inv)M|{lL%RCAB&i!Omu2_x_nQmUYjo9 z9w8@rz`2d-dV|I4fO-jR2msWGWmXvPdLrNhkq-PEUyFrgI>EmF7Cqn~=1Zb6;_--B zG7%8oiJ&P!m)|8~Z00ZX7>x;cI zvU!5hND3j=!pIR`d6w?p9<{?(DDuH=H~wnOPN3*DPc3lXBbuB$WtBiLl3Yj(M}DcR z(~&el642VHDu7QTES0XGCFV1$xtGa6&il3Ek@ANuYz`4r)$2L#zr(eO8u?!FUmfE+6*7u|G-hEOsnZnEB$JmUH=veqIPEgY7$b*MhUY`;w zQtq0h$J%xS$r4I{vX8f5lA)c2gYGS*78(1w|{KY9w)jA_R>ez+40S zIY~86IbqL76qwJ$uDc)f-xp>iwZX6DxZI{~y>M@OH2q`sW5ydCyI{#CQbmpnml*dT z<9&&R$FGQG$7zAEjV9i#&#}c>m`VQ9>s_j`!@~RAE1sfc?H>;VnotJAa8wmaM;e#B zW-BzbqoxKJLHZ=Vy#k8FA6OebZ=9)g8xC7%W;6^L2C@-hTTSW2(M#*FXW|;WP=+A< z36O2ZFe0$KSK^`zPxE-Xgb3k!*jF*`d!CD94v3QJdla=Lb|k~S_@DZzIj~)XxJ^^? z&+3$PuPL><)xD*#LKEW)Rl5JS5VcYFU|?TxmQ}~^PDXLmW*gIq@N-vF>W3VdMNsVO z@9ja6Y`W;UH~GeF5)bwWCF(QrD4{Vy1v78@9px`_%%tffdA^*wqCA3PH?DOJzG%1G zcbWkJ&C1vne^K%zUPz+_Bd>(&7{kL(_llJ}^(OnRCf*O3BdJ`IUIy$2kFZwKcdY1< zNznq6Gz}-v6s%0=pKcA7!RZe!w#`1chXiDOMMnLZJs1Y48bV)O;_bzw;4=1m;lAQ3 z3M-%imM_$rOQjgN*NS}V$~AjIrht-uW!vU*u%J>_kn{cPIzz^UmPztA2Y)(HaKyy} zMi9?bV8UoHO5EW54D&hNz=!_VY!H8R9s zN=L7x1z&-nihf9@k}2?Ek4-w?%MqUCY*uh#^+JOUjc)Y~u9^P5s8~0L8Dy~9XiRJL z2{5D26nQaA*TVD36XGoaXtT799to>XTrJ-0p4+k*#nD%08My-(v-#rLAncVbAvpEw zlXq4|W5+&%TTSnXV0yuxCNAtep+8W={9$LA&Vx_T-i8)g`!)tzG__s0k()KJ^HFpu z%af97_3i>#ND0Gfm~qqZi2p60fiQMT=UU8Eku?swW79iX;oUMv zdcMb_uuu7LzD)mzoi{si!G@ncZ~oA>R^Og{@D1<9b|RzY#*kfAs3X3W-v~3VG^W;i z#W0_d-)+`vR3_W|OwhXH(Xgd=rYsZLitCMn?lQsAM(rrNqdl^i!}JLv#w+GJT3;7l zcx5J&%4B>Up1L@-X;O8hUIR4T_s7B`7}h2M=;`QB7XZgI%a`4DZ2J3ddQ1wGGPBda zUfrU>cuj|B=vdAwc0L-%VL_-D4tr$P>VC9n!cmZ~~gjfSzeIM9({ib{i3*@dQ0owPfc=89(mCP4`z<#nQhFmS z-|u}rWuax`7&0@Ta8`BRWExUHwUD@xTz+*j47@=P;#mgXoEma{xaDwGsr;Z3kJiR% zSx93#b*(`}lp*TrL3YMP(2Eq_z@&#-h^`1W~k^%jGyXGPL;Nq+SezBhu~%=Qm2 zTDsR@I#j1Pz6e^*@$9M>I9W35alldWWY8UkE)tBP3qJ!ckR86W3-jJC|37q{cQl)C z{P$av`Q$gy-KOQ_bMUwjJ=7yB7z7>Jo)~f z^ZV;L&$<7~IXRj4ecjjf`Mln*E2F73Y}z)kBXI3D`#=ZOXZ(?5x-u?tmz;ygAD=`2 zE?Hysn6$=9U%IAQ#n_Uz)1p^kvN@Pi2qQ!K9LPBnk-r#XM@Z-MQpO=39G7@~s)VQ` zWZ5#B+58^kb~B^pvGPV}JMuOB48A~P3z1xlRChY83E9*iJ&(MhKAqCs|q-Py^)R*4-!6sl9V{?E%dWqpIUy=FU*j9pL)Ty=1j6kER|o zWCp9f&+OWX?IHey9m}5*u6Y9XZ2{$x&7~q~WPjI{e5QKPWsA3=oqzv5G&Z8irA4iH zvl-PkMt89agO7${T7vm2{%uc{Ca|#o1h$8=>q~7KDlraL>ZVDVTz&DpZu&z1;w-Iv zvNwK;$sqZb-}!1!x@G86WyN2s_FFWHLLJ@vvUGjJ&ti-0V^y8VRieIivryB$aGbHZ zZZ|H?U&1E&DVex#PcF~Rj&hkUd*B7gI9a1jtx)to5#ZSPdEk02O+9+^N%C*&_c@a7 zNE``ID5S(}?HahxVJl|mGj{Kurs2dgUx&?M}Ej%HcRE7P);`oLzkGFMBUzI;J``1b*pt3DBopd9d%BWyS zBI9#g9I)o|%wG4}G(R=Z#Shs?64*DDr3uYsoba6i(owcZoX=YE8zit+9Hqlj1a&G5 z!(yt;8$VTwpITh?u{pd0iAgRUC^O-et%CbvJq7Q3?q);UE#=_zq+Wfk>!cLV8LO4K z%H~~`T@S{?wa(^u+XwYa*?RCDxoz34#IaL{C5G!A%W)m#`!UQQZ|9a=3;Q~vNf;BF zRRny)sg+?0`(%ZSLi_>j%dII6wJFv=sLFfFtYm7|eH4&hku>{at9GW80l(yoQ}Jp- zt6Lh2DUWHM*0Ux9Tj#hTd+Kz*jLR@^#q^6Z~UYYq!YkNfHGS8#NTJZ?${=<2&QE^Pl;uh zhd>#)#NwoMu)7~A1XXxWr25jyRTwEbmKa0DJ1hfVyzscZqiS?JR!v;VRP0g`ZuK3O z^U$!LP1~q01>wsA$BHp*=@S z!e%<9Z z#S{N)s0_I=r`K-wuXcuhPX{I?{vMQJi};khey1hP9WS2>z5|uiQrK)v$3FKL*y1xX zZaZx)qnd~SYi5k@E`jSWLar2NERqJcmZeG^!=)Gbege-Cm>l~aR=J?BR!1M}NH&%5 z;1hrWQGmqFYW^kWNG^Tm`-*08QG0${A>9h0NZ;vlIHO|lA_k6jT(AjP_zwJm*I08{ z3fcDXhAdVwX;1mMYfBa3I+ofp`7q~j4!(=6pVX|K3bvrY2#UxGHuJTc$;_#4k(vasE;}m0G5(hG zQp?XK=4b(3?;s3+?1+RUB7-H>cr~iJJV^H*P{T#;{;hzJJ!*#X#U}63x#lA(`3<+Z zntBW!Hs8*9M*Q1s5%3e>9o`K(Q@mQ_P31dw2B**5dZxUyG|ya2ay{0% zoQnAOt9Fmytu`tQALH5u3l*D72aLw1-4LQm=CkRH6rdUN5EhBGNFOeJ?O^M<-wvoY zA0kz}Q|g;y@ObozEQSTQ`&EH`L%ep+bG_AfnRxxM7a;ZU<3}!uY!yWQ$lGq6^c+Ow zrJ>xnvfRA(3MXgy$j0S{v11B$Y?b%9dqtd{q}Q6k0QsnA;)Y!}SQS?3d1%1sSS zJHaQL(-zqC{sEl+@1fYq>&a?=BV%g*f%AK7`T<2AS=@5M$%~;lAz_i>Qb{-SzB_F=^viTML-t;8L^-(QupiR+~Gx9vQdl?|C?E>Z20p=qZHjBTLXME!IQtt?y z{1o|!X@-jGP072jhX!n`eOZkQ`Jb2!k2E7sF$TXcJy1YEB-A;JZyj3J#eYSD*g7(OipRLEAwC1#zNQF z^V9qY14cR_LM&HbY!kE`=`@V;p6&n1;HfFwE{J&ri)8=cf)LKeUk}A9Jt}&vPlr1i zBdae=kPuEn_zvm}p3DNE(??Ms>*Q1JJR>;S6qG}!3eBt(kEtKsxVNFK5O8*wkB|}C zX-l%5x_2YS#7e28Afo+|sKl1GKwHQv{@^OtY|Sjh=7IDI!EqfQ*1;gag#(HkgDk$FjzX|9o|_6UA#~ye~AG; zx*a;tDN;0M!CsN;UMF$}41&KtU6S|Mso9$-EI3FLSCV-!_jB_L&w}klwhEv8)e7_k#BGAn?6P?P-FFNyr9zd6|;)oGg?7%qbXMx22=d%e{*RINS*nNLlDEE zX2_1061q#FR2>7KVh_K#sXvBR_(2GPbhgA=hK;5#0#TK7#^-+SJW8D9S1HMdB!1Y0 z+^M7a6mjYy<17AB0zBk-Z1%qpxt0XQ?J0P`0;z5)V2v&de$LpU7T4g3_9Eis?!Fo^ zvkmNgPGO}0I+dJ!%_L^V=oE;Ge=A2FiZ$W?D-H`fCpJ6xCw`r4Wuy7_j7@6MuQen$ zeKeGOvUoX8_oagKWf%*;a4$vWXcX)~;JUNR?QB)$>o$g4!ixuJRDE z^{}3+iwn|mad&%2>cK<_{*LA}U>-Swo^gqbcSu{@V&>)-fv1igoev%Zot!E!1@rFO z&w<*bDcs!A?K;r{h>4r7(N(~8hRzkc+cLwvDvUK_vS1AEdP-Ny8e*zzqiA&39-EOj zHlP35D?@W;qsNINb~!LJTkLEHVPwSnphRmLYi3oi@W~RuUvJih$ zEyg0n)rT@^sZOe$E}au_mFP%I^N)!XLxZJN#}(Wse-}+HX9IZKWv%(ZG1Ct zCl;T(I9Yrd&O*$&`X@n^^n{zx3W3}XL}=WmJ_T`PXf>?A7ki??5tpv7koi9=T{XHp zby*qbGRrxAL?*P>Nl3>8)iERR^T3rnYGwT2w0C2qVOsdt2htFGyg-(RvLGm%;L_v; zN|td{;m~GuU+bcDjY=cFlPPs88A;tr6_%5M_e_E0ooWB2bnxQw6 zZA5d_^~{YM={-((ErrOyFff0b;nz9+=|=l==)@R9qf<%tAx--O(sPqJKPgk9|4YDo zU2Kw-DVsHtP&FW2zqmCTvCu$$Z=yhCkweYh{(^I4+6tLC_wvAiZYh8wEp>J1S#ta% zFZYT<+Ag{TmKpv5b;9cGg8?V;`@S#zWg@-|sHn7VCr;c=vU1u=!XVF{w*&*$aPB^BfOrJ?|1;v3%_oRs9#Dg%Hk=)w(58?qnSDNA?^647xdd6ZenU$#NJ%! z-pA&LZcCpOaxz6tdRa4}+~S$Ki$ZT2?6@hwH(G}Cl-6{m$FUb}&sbDDqJ^8@_3Yup zn&cA(msjkj{I-5pyEY|2#Fy^@=h?jklV6D~$^vINH|1apg;YZsGgeRWwCGeMCH$b@ z+c^dyo@G|=T4&&}R`%n}?lE+6dTb&7rw(_Xtb0%@@>AQ|v*j)CK_V4KNX8`GC{dty0&fTN9OcCh<{uH~)Z`N58~gB< zfzgv^x5j1-`9oJMT+|FQK5RXz2A+c+uCd9vCQe;MOXxohRxw3p)R^m;wnRzHT2;l~ zNLyATe0eKE@t(AJbbFm4_k)F-iA8~&$|TynC9NmQrVQq{%7O>8!Na%8{_}Yo7 zu3v=jWgB<&58+#GJTN|qxe7zH99L3zgkN$=*PYI~r@d2a;tFe_uh+?0A*!C--_i-4CmeZbcR3B*{5qwnOGfyX{>6z=I}KoB zuQ%S-NhL5fXpob**qNGIX^Jec;pPz0(8i9Gsvv~p*@Ok%tz-}vL2#~*F^yQ<5N z-v}epsy(B>hz%GI5f=&=oRkvcBsp{FvxT0k`6H91xH`wGM}&Xtm?gP*1YOdPHh>~* zFid|hadeKkECmjMUF<0TuqX;Q%ZdHMFBf2jWI(FIhc8LeBPjd!x>_&AK*3kDmf)|# z#ugG*TN5Uzd&@KKgr`l399WqKro)#jdXCBM|3EIcv4(-LR)v?Tp1BTiQp|>s38vlRHje^lBJ4<44TFd1&p?06}4EAQZYQQK_ck&#^kh>HkNcL@f{L9 zL*e@&*x2g1FZp#_$36MJeb{K!m#^}p>ip&!87p0O_EA0WN>5Zz?>*@bOG^Flxo-X? zPHg@@sM|@xzByjjKp_kM^t**_&SnET8RaE66DWPqh?EC$>a*t1gP1n!>)_2)Bhht$ z4?gs_%l*oXQ@nNql*A-qPwq|7m+xg5tc#>KpQ%9@vk-9k1?6E7Zt>GyUpS0pW_U`G z-f+}R3L0L!?#?h=P{ZH^NO1$uxF9X&wMhYZ_Cels>^>9k!sW@Xd)o7rSZ3%}dZW&p z*-sk>e|IO!a(v<#e>yFk?-YHrDfinK=bI=lFR|NdP^h(k;^Z~zDqtV@^e6q37N`5F zbW2a(RM{&tby;E1>`l7A3RC>rJWswB4M`B<nYC&}J1T2o^B}sy>_7kfnr5w4?ytv-YHw zIeHmeIP&eq^z9z5e9t8a$bRhj5co7M>&2$_i?}n^o-4HAC<|vnSThOkI=(t=9{mq? zRx%PFrF9=Gsl3JDrSz^P;Iy1@by#3@-Mb~F*TeaXBhD;IbgBXg|GbBL6#U+v8i407)!4pUp1YO9E9dxwQo)4I` zfBF45qxT3+c6&U`^SaBDg5Rk}Jy7%~Ea>Uz>zg>Aj_Ie;6z>8(lr84g{gS2pbbZC~ zVq#WR?;9WFjfML5vo`nS5>4VleQZ;>y+$DQ?xQVM#Sv9>EW(n<9Ph43oY`B_Ed}lI z`{Eq3Pgs=u*?q2DL5+Fpn%`6E?kQK`H!zj=)9U*%TQV@V=c-0mu6x+H^t|=5+V^58 z)wI(&v7-;R*dO5m1sdv*C|8o~qtP4*kEt8-bqtu?O1G`&a0gC_Yo}QSo3JoSy{gRV zM^~&6UNzmRu>#IL{Iezl3xljo%#>Nk*G}OR3u_D=FEPTv0_c%Ss4t0lUnHQ%(ydDj zrNqR&NLiqm6EaMs5#{v{Pjo(DPDe})6n~!vsDM3QeR6WRpvMnp`kB_k%7;WX~7zq*Dl}5Eb1>-+-Vf~Rh{##?(I z0Fr)ZeOjpgH3N0Kxl4=4NB?Ooy#l`1_Lg~X8oaMLP~TTdGM5q+{k1@oEpu<^*aZ~&#sNy2F2lvW$DY7VT>QsmoQFOTahrKXh5A`jHj{@QdX6PGO zzPW$nr)Y>*c~)38xW3{QGd*XFIn(Yb&7oR28CC8;g4-G)76Td)e!72tH-`ccQS zY?dsCk`?%f=~`s|b3Yq!H(T8@toic(82W3BZ|80L@qZ&-k(^x?N2F*t0k+xR3822- ztjNy|(S65((u8vVUJYj%hu?fCj!F=W$yJ|^Y*K_{MpklcwdBtP*^k?5bZv-9E!tCkhrb9 zX#AjzoIOc!@N5#bl@+8RaQ|t?d=M6>MOU6L*Uq=I_V(q0oL%JcSkL`_kuB64Tc&7r zq^MjQyS5*cQ&IOU?kexK_(??7hk>8D%WpN8D>7YM=Gjq_y~Gc;%`Jc+3WU%vSuV~X z@JdIdmfF>e@$;wdk(w7HiuKRupZtN&!JBu8eLZ%_px+Nbkvo~qTF8t6+o|bhyCv&< z17s_QQ-BG(Dw}^bndZmJxJL#bxK&bh-B%4W^}dL5u%k+2&dwI=my64YQeQ%rHR)kRRuxXR3>{7gXT zZ9V=ok9Q8!b`Y0XrdB0K6+^750Mot`s0BT^T(|K~>&Gfx~4zY=72v{WTI z>sSshi1BT%6WX4D`Op?j1lhIYQ=KO#)LGxw?QxLRql}Jq7qDg=!$#Rq_qkLgkAjH#oz%<@^y+O{>+jvNe}f{2O^c8JYbT(@?T1M+ znQpS<=3m14wj8JuG`BV}*ogF|pIf%&ZF}v=kzq&6agC8mAfL`r$9$*h#Qj2EfZC^ zaz1pNo#`1$IX8-7Rh8Muv^r#%@l+*z#33h_nU=?Da(Ab#z&Uzo;KZ+?wAz<nv%s2qR4jltsF`ORAKgQ)UPL?)tNSh@a~;8*-%{F#HeQjKl0R&_#sh{ROuW8W>c<1Pktj}}HT)1_v0MOI%&I-d{Uk~6Gu+0s`Wt`OyZ zxBD?kUs)`3W@Y^uZdH@pSd=eZEX>pJI2WqO9bUk^{1QdKXC}483$n_VTw0u$-s&Ma zq=*OgR)__szr)i;L#E>kJKPrs9wMuqFhv${#K{o){p#8uZ>v{I9Kc~f!Sdgb&w@RT zcI-|k;>q=<8y59op~WkN;TB-?4hbuA+*)2YOG!bAb9>p3R1JCas!RkxGlLvqJCFUn zdX@{(!yC^C?WzRF_%Wz(F4(Tg>%u2aUg(5+Hf4(X>dE>SjX>Kn0?@88v7!bIfuT(@TiS_7T;LdZg zMXh$tvY8a}+YE{)QL*F2_;gGDLq_ZBe}hiW0_Gr=o6a%5wr+(PdYVi*;}-#Rzb z8M3Uz>uM9-tZKpRTEj=1=v`Cq#=M|aK1wh7F9WOp^}Ck>ux?z9r72n-`@@Ad=$3T0 zKd>zrYIZOOxupDCMN89j;X{TkU3u{@+>8O%+1AhNrC<%=ReYrR%68#tmkbB|g8<0uiXJ~IBG zJv+5_cl1wA?TJS{K84-kQ63unj4Q-9mm!@UHA%WPJBrMTM7r6J);6SFOSqimcr)C#UT|5x6<%D4s1+UaUG9#x3a(!bY9ZT^weAYuKjt;Rw2Ix4ne`%|KR6B!&yw zj_|plh#t$5Rp{w4Sg1w!2?BPE-S_tGm0CNi0n)x+3*mbE^1b*}R-2piDn7X%X-H0^ zLFN*zE=f6P_j9j-tksfvDk&b2+5vA<)*s8(8+EJ>plVm4Lf6ScSM55~ zKR}8Q$9pf@rJ*~jDXGsylD&t&4$6QZ2)(P*BWXX93fZU=P73dcixTVu1vo;n+N5G9 zJL-!(I88uori(2yvYF$<&&w6kSl<}Gi4t9GuOh+8^HWm#aPQn`SJ@U>0Vn{d?v{6{ z0!OGH&v;)`xo1`Hu1M;*!d8boHa&c{j6Rqm7eysuhxYd{^@zoE`H&>l^TSCZ6I5KG zE#(8fPtN-YZe zH^>OTF%v{33!@_a!CS2Mz|aHy6GdIhRJ3hbuuf>MMVJhxK->*4o3d!*{N+)4g+jV~ zPng61Q?)gBYq4GHVGi~*;4F`x0LJD-d>iowehL?cL`$qu;|cn6FCMiGq^_CJZ1iW8 z=a0P0K92h*z!`M18sI%~kNqY3PvZ43A)$F{Pim9vZAYV)#NmPsxkO=y66>_ooWRH; zWm+iTa`t_7EuBwO3)ik(h$f}}r`tt~#c@*>fcfy7LA1=}h#*qfeYcx6X|KV0&1UC^ zx@qpt++LY67{NT&eYqC>Wa4&J0bM5(K`F?{Tef9x6#yZY-AMTLNMzH~ggrLB>gtqZ z3RfGV#ZjkJV-vJdBPHE7N!q94#gamwkIXITRu|g#U;ywjC*8^UhR>?WN(`Nv{Ab>f zQo7htB4IPF+}pH{C2wSTJ02|USh-vTbxknVR0z8fCv_kK+>@z+2XKgOthtDY9*pJ1 zfByK0MRj!aiE?P55A*~#k80n|z0jf{Gn%3E-Q*j`0>M`nrznS0NzTT!i^pYB71w4)e8 zM1_6Qo+nMnVK|1GXZ3SVzk|6RD})n$CgTtM%i}guALH%)Jn$c;?mX+sl~K59gz+L=LsIA zO~d73R1Ak=;eU*&G{Ks7z2pZ!g=eBICSR|}tH4Lj>K`R5Lnp;8e2NSSbfTgcBMlDl zX7Mb1tR5Xp3#?8A;;SU@U7;WBDC9o3V21^r`o@mzeWhcv5hI)UrO&$%xL2yuAoo#f z-lZf^a-8V8IY03Wu3?c)!}d5hSMfQf&3wLh3otp_K`vqWAI9R3 zJpjbHADEJUQVT}s&E@Y5QvD`JWo|8+GYm3H>F@r15#FwwcQ-Db8_jsiyv-F$;)e)Jt%a@{ZLV%a9qqJsAP%D?qLsFMM742q(_$1fT}KEy zEN{K|W~yu-uRQq``##~HZWbbJws1s=@ca_?=MUqJG$M$z`(3!vBhF!5my=98{8A#T zknP)4FRHob(V;5v8Z z(UYzLB&F!5*j)RjO%R>Xq3P${Ib3KVn>qU}{}q)~C?YO!~a7wc68Luf! zvw>+A8W#fF2vd7<7BiOs3DCWarEJ+6a*WrpW-0MzkisJ6>7l*egsVYJAY->PT4>~}QUdkSZ z6pfuCbGR7>RkSn$825PiXd;%iO@kWn3}jL)C1iD$HP&^)Z|F}@H&JJqJ`yn$vqEk{ z1FyXM0O2SHXE%08;Pzuc%T<|DX1@SaMU>0<`lJ2_rj?VDYALBE8l7s6zr#qJyh^@$ z8T~`Ras5Zwjmf0_O4VjMic)?=BK?o|IRKVpf{`QnjkE5c9rAKgrZ^Nr`uzK|1wyswZcR;#L*Ia%cVqJ?9I8Gj>Oltr>OQz#*BPA;f9wH zVy$EfX7TjajzDo0EvSxL2m8?Z&1V?1+ldh+9f*K7VzwQEpHj6b_SqWhBlC46joAt5|x06UK!^O9HzQ@m*Rz5Gjb~suXJu;E>hLpXq-y8V0dLw80jj@$pdkL}kyrDHMKQUWT zI%L1P^NyNK;7Xh0D%rTwgMgvu#&J^tq=sParb2;l;(7nycr|j-XL>_j#Y8>CbraIS zfBqrA{fap6K|6PqJ+Q6XD{NOF?Xjewau7spX?&d|;sR-Sjv_VABT5;lzorLHnk;if zm7j^9?^3T7Z}k7HMnG$TUWEHZQegH6E_W(*Ib9>^PUnfb-&~?^T^1$X=1#M~%ZJGU zh0hiGQb-|;oG_!Pq^l@viD}1tqAx1Q2fPZg+O-T~dmubSd0H@ZuJd;}ZD+o7=c$w= zxe@JYkieklCp*qrcahhBt(CzkRy+_jDuxNH{| z6F1U#>KvAbzn>{SoNdl3dXaRMdQLonF*wgus7QJAI~$3Mj)f0+tIY6kPeu1p_3s}K6|z>_b2Po!qhBm|qu5OwA~izN&Rr4&ozDv=;ie-RN-kW0%%5^4l!@`7sY|d9gn(NAfDs zbI2v@OL31<|Fbj0u(+wlqTF$$Nf0_2(th6gB2`{!0#~`I?-mM&q>GV_tT!_2zw!*~ z>MRc?m4LKl3^Em(2K<~CVJQP+o?d3Bu!#5aA3k9|P=pXeU*GIZ5*Tn)X)^Nbz1!L7 zr2rBzY)wPutlfpM5JSUOcnIMQ->I(RQRBc*RS^D?7+<3!cRf+i#VRWgx{L1>w$kn~ zxqx_8D9QbzF}b;;pN9@~S3VgX2a)1{&K;p9wDyi`deiYvw2mMn>G1?E-379btJvN} zy;2pWw_HwmS6cGaN^yrF1hY*wSjs(o5ffY2s^@rU8Kftvn6g~!68T?ntu~)EJg)oO zU87w1ccTacku_5#bNo30`)f+Z^E2%r*~h37e1j;Bz#Ad~Yi04~ot;|l=9-T1n{I7t zIvcq`o|SDeBNF32X+1unlOOT*YkSfP7mlQR^Kkn`o;uU8&Ab_!eM*(c#{+Q%gw9{1Lr6&YV^L&M(r1|d7EO8QQ_)zD~q-#XtwT= zYnpNEepU9_v%qa0QtWhjPv)gZL*RZVoyfRqo`(}N1-nW^x%Cy1Fb6d{iVe&<<09 zm3H1>rUrHJclv!8C?bSEV9_dXKP$34dVhTqD*Uf`M)000s7Azc@VYwVQw$!KvXg zaNJ6P6&b=8UN&MjO!tJ7+m(67Yjpye8F=+(21Q=D4SZj&L0h(fXcpa9r?q9KVus>K z5yl_aR^ko$&SH1-xe49w??4%nVG=y!;1lDhQ=0t zweeQKw&7!dlJ`5h;A977FRZ(m14Y}lq2qeTYU`oYNpBC8suwys2%Iz}DvDG|Vo;&b z|6|QOe5XZz09AuN^xisN^`@*b>0o{d5de>2u_|-ktVnt{ouzbHYzyYEl~U1TCiiZg z#8D)_)J+>^K-z7``U;q3;v9D*1K9MGdC-`H(W*7`+?jW+I6(DiQn<^QZs&ZFRAMKH zgHdgmU!@`6n{EI~b?u%1ElYdMmMjS>HIdSdO~m52t>2|SQ{CI3;R3=r7Fau5II&I2 zxlQjX*Cc-7|15zBl4;oELXk4f;Vhx_Gp7jo#YS+3=_+UDA~}o_3u#ERe@e?LtjqB# z(OB&23o#1uk|EwlyeBNWbg0TEu<=L#+w}f3)}IG@nzM4ghwdx(e>~F0a_ASq1nqOZ zD;e;f)9RjtBoa%75E2;`miN zu6x!;Y5%h=^7g7VB8a4}Xl08bLj8vHNVyJ!j*Z+lN(_i(oZ?Npnrhi-yCeY@?9#P+ z0}}0GnNr{v@o;%0Rm7K$F378(%@>RwdvynIxQpb6jgQ1DAabO;$wjlR(N3#5C zsA2Mtu$2CwJei|N+rx>hIjnk~b;o%V<_Y%93wsc1I-llpFiO`Lq?p@W1Sp z%Xb)k!N1)fvk&!IM^5*qcX2JZF0JX`l&j=k^F`sn+CfF|fHsds6^Y;rx_*Wt17H4C zVSfE9D>2F0Rx<}PLo$JpLw*k2eykwfl1Mggf29Lvu_s*x4)^;tfOnkXF%1hWz(fK! zZ~RDMs18aF^}QmM>Vr~F?Ya}r|8sPbLFoQJl`2v>o>c2gAG_E$YGRDsSFnGeqV-Xj zW{~#ILuJ-iBym7?-AwdGiB^5k%%{|s-BLCN(=y+SHGFiM<-y@JO9k!b_%PHsY zqvu{1VMA!{8pl%IR5weCoXaDdFt;r^yJ}3lCU^a^Eg{7AEVoyI&UNw&pX1z0gIM?z zebaVu2Ft^h%dnb<9i1Kg^#N2BD;@dd)O6ebg)it{+tjmm)ybUF5kh$E@97b7s*1$J z!1pSDpx5QOwz)pSe$_XoSo^DGnkGmw?cWRIx#y%t_eL6E_j^&o?4ypyUKhljp+tsc;tP=a63YvhV9neF1X_o z!4GPO`M~pU=muvWJVS?uiNrT2gflcOxE`9jsdyv(qucqYJvKEYhJoWSS^G zUQ)2{=oXQMCJ4J&Kar0QLI{;OAr*hf%rba3?rfU9M&t`gWNn~O?N`F+pV}9-Zx5P& zH8S{oU%|~f5a|#+*LG*CJt%UXima$3dt$~?L)=5Gn`m2Zs)88jpE|Uo|6YZBSy>zc zOB7HduDLqHosb!X6&iXgmX=&%dSVJOc8H0Zce;$w!{#;`fXE-3RJ>{y*>0YW96X-X zx~vutIx(8b_|hkKSgj8P0WbHx?wnKXS7@rueDCIZ6iC)DglRUC8CuTubDyg*Jms(ceS#c@)hhKCs zl4elnF*?JucsdHyV!%5=`5CLcposyvd=G4d0azov@8jZ;%=#YecpFZU9AVSxB=36O z^TMRhD@Q`qWm6(RY5k|>_nno3WH0fQpc%K8Ft^W+pQ?Xf)93WrpP5`r-vqT}Dj0{r zFI8di=AEJw(|La1E+omQ>ZLlyqXAS0JTG1aVfsi6?*fpW|v1fLH zYxl4vvlyW_)WXUFXx^WUa#cF1>-;k0D#%vV?r)s(ua#8uw@Ck=?NLNer^DuVr`-`C zxZW)fMi*PX7Uh#GpjRtp_4lM=CcN(MzKNR5O^)r+qRFC1u_xz}uLI|xB9Kwj0PyVX zQxfGqmukpK6~4dGpES+xk%Xu;E0PiXM%(76kG4i_PTgB3%FOqpWVpm*Rg zTC)z$jaO5?d|l15%Q>DOruc@jMrgjqtpFmAR`_%t6}$CBuF>--`_ES@Xs=EL?cLgx z@NW&`!F|0@Bj&%iVprG?<+Sdg{=y1UB}UoJMvJ;1)UB?`XM)p(Bi-_9smE9xMohAg z<9!37wseY0-081~zPeMjYJxb8sK!`(|ZaJ{sh z0Y*c?Y$m>*mp~=pHR#|}`yaHs6TnwC4wb0Dm`Lmfl;Q92|!^54BC|Dk1XUX)aT zdB{r8+;>@(9pv+Y!JXGqVpL=*>k$i{ee%^jCMowJ{EbsXO`=R|pB<7!eJPEi zm7_URYf{be$Szp_&w)t+XAhDkwdSrO56EM>%t-knjWk2R2!lJCKRCk~TbjE(HnT7e zA2bTN^FDsZeI4@3O^5se@MX^TuQb-kmZ5r&9t6wFvk0Y@_wXFiCBzBb0c2()Y-FDO z=}Ur4jCf6)DO)1B^bP5`liz#1bg4GB@c+9W*e91xM21j}ym@LQZime1g8}8`(c;Tv znVTaSr9D2=jm$B;cb|+d^gZM5?k{f;`oyMmwQuC6#6u%3W$nmJGm65(5l1j^nnBNAYY0QRzEK0)b)a4PwWekNUt`CZ@Eduy0eHH#uWUQh^?CZ%qTL(PRt?_~xI->i`KWr6J|Gn{M;x*&v^2jMZ_5t$5veq1 zb2hjP0z;uPa?lbumMdSvbAmHfb1U6Q1Mpxt&|$CpEPek`tv+xW@6D zFVUvj9|PBOo<7VljUq!la!8aBKiv8EYeVX`g0fo0>%wX$wBOs8t!wv%*9AQ?l@p}w z2_%EzOE=#6!is2Wq4}0Rzp%Au1bMXB9(iiYAFcDdPC+ur#mb=OrI#|fU2MDiVjo_& zk(}N=Ln)B0OKvfdkD+s#Vosm$=EpoPXr7mk6@?{gkoNO%WK!Q`+RjRAFS)q2dR2E| zHaUDCKe3b7NXtxyJKmz}r_wFXHaGbR9fU`J+Mj8(*kb5Rd^c}skBMJgW#E?i>uD%* z;nH}#v8}o;?tPh}@Udm77uF!|G8~viBLoB@12aobvr>qeO&;Z;FFku=-7a2tn>^5Y znIQP7l zMrq?$IVh3g0HSE28;fo=#~s^!%74D#8Ldft>HZy-T<^-yYf<>)v>rzN|!dGA%f z`CtCdUya!HwBDt@ks&0lb%R=h_M~c^1~h(V{wf=O{N~3wOx8}Ubo9|z5jZ5d>ye5A zITBKXY0#RJO-r@uke_4TgqTTtjA0lCuPPcxd^5UoTT?Itj$4;#E#PhQ-`Z4o*0j@i zVdgr%54?BB4-#FW@hd)aP7(X3iqEMS%hL8Bmt52l9}9wg&abL{xq?4UXqbWBXW#-k z{NdbM+pSnj<`=3oG^DLqGOp!NQUhCk!**J2{b{plUXo>x)Q%bviHT$QAhi^Y zND=+B^&?#V2pt-}^Nc3xRg(UaL^}u2MCt9XNR9{JWFERKraAg0CP)u)SM@f$b_XG) z-uZsUMiI0L4<{>oGOdB4Qx=uh&0nuEIl5ECDsF0Bx=}3zw)ywc4_TN@#ZohdOi=%u zx^ybYaK#+7VB9wiAWKgr>Fs&QGD5ED?zRdob5wl8?q!%=W*CB4AB6?Pz0y3}+gb$m zFz*{6PpBr>gy?Zp7i4*#VN$_c$E*bg)(U7|$hPAuC`Tb%!I8y}u>zf$DT!w4`4K&W z+S$%cJA@mAt|?}k522-(y~Ao@rbWJcgiyDC5Z89KdM<4lnGpIl)W(+-!r!8n->z1b zQ2X*!T=!ON`g#0GG&SS0yL_e)RgLu((&th~q}93@=$Nl!kK1^A5?L(|3F66Di3REp z>PNwPd<_(|_m}If0~!%RpG7VWDz*hMLU$5D0aOPTF9rvO#G;d>XxQ3CEsm$mJl+X( zP<64IxqiJ33(rFdpPMkw5cAnZ?tb$m~uXf#t4H}nvMNl3_|_~u^quQo%UxLra#e9eK{ ze!CDieMo=dkK`H=)c>S61oBL@yj~)*Abh6AAm`aG7BKS*Wx5V%0n;}B1l7(4P*x}@ zydY!?NTz0SD~0;?_X*B%haI>iFZO){nldryGPpwajzlhtU5@rnVt1x$x(tAR%WwZ_ ze!qHL^|yV&c^Z9wDDRP`BiyE}l)m>z_V7Gm@cnxSGvp(WR7l$@=ztwrJ9RpaJkBwg z$%=&aC}4?OV0%MZWh4KD?&k~i(-tn=0sBm8_VMa0KVh{-1kkYob~DR<|H^0`S>=x; z%2J%yHgY?I(P%WpwWO3`v`=B1~^>WCf+#6z<)D@Q1NSxc9?5h{DwWbZdiK~&C zN8~g7>ZvFz-+lra?+Mfe^8n%)*q`0%B&n$;h0TEmE0J>`Xdi15cbM`(hD7CwjfTST z97!5py%~xb=}UDj7?ppibW%O%?Be~xWXQA^x0T_R2>~Z#4MhS+sR6I@_{g3IQ+tb% zosVv43vxLeeS9kun8*rv0M|^`jK$~gBL~k}x@{u4Ci^7qK9Zg~5q52@=5M6J3fbE&7T@CLXdrrt>2hc4*Sr!b#~0Up=b(627XjU{${`$IbFZU`_45GDRv& z$fM(Dd(EgO*iA0~a!4;r$x|iAwq+t!ir-d-$h~e+CdbDVo}{b%cMR60yt%P(cWVFV zDtBI0C}EBjNPPH?Cub9;VG~c3ievn{O!e z2^hD*y17^0CT0u&UMIc0mFd7uE-SfZ?!~k$cT`$yl?*)=8o;4Rk_}e*LyuICHe7!o z=5#vW>WXMz*0?EkZ)-rPIdo^TnYBl@$8QLu< zRw!A|q&Y@KMqa~(;DaL~<&Md5IkLDMcMepYNq5?A|K>+3sU1^X`8id{W82y4HvmzPxglnl0{b_NRE*x8NyBAVVhX*pSZmwT7ay@^zV2 znLgX}@Fmc+iR`Z3!+Q*yiHB%|hA^~nhA0Qh2K^R&sL?>VeuO6(jit6Sz3fSL@*X{` z+AaCcr=sl-7rh*PO?u*$pk!X$4(rmIFF&<>{O_>LC4K$>JsfTR=Vz$9P`?z7-#33i z!d#ShnDUVD$c}ChLkN#MyMR&`74<_PMbI%7E({-!I)69^61kZ}>q!`PR{L*2G-7nMp3$rc$U zYlV`X84|KJNs&F3eGl1&Ns8>szK-l=E&Dpz_kBy4iLn!g8OE3y?^pMIzt8h~e$VIq zyr1(Aj4@`e>%5NhIFIwX&gORwcGGPjO*fB=KdZ~Y=N+g$7d)1Er_@oZ({oxTddAc{3_h`spoE>Iec9WG$- zyw21-Y)gK7=0Sa(u=w#7)dl>sviD#G;@O>6Y?Me-5OJ*t6)^cc$}e@-PIB8BA-iG3 z)3e9)K;aDpcyT4(PWFoeh-hdhu!2QEZy*b_e@x|ps7>N_!1kw_g+R1diB(I35qz>3 zl@FiLRf57j@0+|2lXvO_&C_kG;O)K*VY5aY>kB@j(@oaSq+kmo_Re5cacHG}Z~q_S zZX-Gqp0z8SiSd(82bcQ36cnQechy%xTzy}!BjH0zHQ!w?r$Fa0^%8OmeETt2z+S%o zV;L+9-(PcvNu#Ic+vUvyJ$DICiBf3Gr|rL3-fM;b9Z(ogKF@!?Kg%UIhrO%>%;fUjInoinDZK{9qbUy1I%EH`s6XSS z;?_gAQo^Z**@8*bwS#QNVo-aym@i-y>f016w-32Do>iG*g4z2}R>Gxs?^( z(=B902KC29r8!|Q37$`9G_Ey)wR&jY2x5lnYWMw$DSCR2l__FdJ?f$*kN3Rt&OA$0 ziYvA~&POEBoR*I9_F8dO7V0_Lw)r8N;#c7XlYQXuVIGzONkm$x-+BAT*<7)4f7~~AF{`j$ zC2z`$jw@@MQQkmkoEhpm=QT1k6fk-`PnI@{^0W~*06i=OS`;Sqy=N{-64uKl=H%`V zRXLlN;fH&YS@li2B!uwI0&s?PY_zl?_O!S%xxK+7DI}ZZZVhfm& z6)FQcGLfKnhp(}Lfc^bovMani#2e`OX&w8;yZhzuoDB0Djc9xm`JC_c9q#wER;=5{ z_g}*YiLTMW9&YViyOf#q)5~3UZ=;&P35+3VH|AUpz{WsgM|CkapK!D#XEYFlBtV}t- z_Eb@PhAGkXB)T3Tq|uDOFRa82Tgq_?wMyOue>CqD;}+{$km}GPdvyVhE};IyD!61V zT?U+Xo*g6?BM7@SlB;t@C(phxf16|TvJ$*`{{t{d$7qhc(qf0{?oQ9-7ubaue>; zaK`PNRhCH5kzHco2FKF%iT{e3>Isr2hoGCnJFUyX0c7zp$?#sOaR=b6PVkcF{e%# z`@sgwJZ*u(wrJ7wa_EZhOQZ}FUH6e4{|^i3PoM?x^_HUQ*Nyy{YqghuGwhbH5I7_28RKNB{2SyrxM}Mg^_zcvLdUZwcKDYJn zdOA*J&99eRvHs?W+Q5hzK;(yOVV0T~!Y+vb*F~!nf+;H0dl<>oI zbHZ6|Buj_s{p6uR7-$tVoC{jCej;--7YZZ{ml0P-4C3!!NJ9Iv+-;9c+j_5l!|TN> ztm&_+J3Nh|N?-Ol@UAO)I%&@YbkY+O%__Dz#7tu|5%1Y?S5Q|IthoUPIWf7y&O zBR=I5YGo$RdCboznQQ%ll?&O0>>i9$fe0dF2I?k!hJe6rifmSkxFnL?xEu&HvQ569 z6hP$lgZhb^-h|F|L|)>*94Zhh;6e+mF(t?^nSX-qzrNbUa(^GIQ4aKX^t5WCG=SqN ziawp7HHc{S=0s^LHVzpfUCK`!+QO3p5TR(R=?}nCn@^bEc~pdL z13r6MrmD%kNtQ^wg}sbGj?ULN@Vk=5^^q$hebu<<>%$S}K0sAQyYKa?2lU~(a2m2o z|6zk33&*4uXsuJb$_eW$;ZJFm=FtG0_(RQwXp1#i1^wFv*?JA}Gb4*{h2Fp9SO8~Y1hhqI3-x{1e zjbEdi+K_lOvzZ6n5o;$EBjtC|k9Jw2!Hw~bLMN!1mYY46J~k{(nlY7Y)92eGq7+ zDrU6@8=h;f-1!nK-Ow--4z!<3Ev3?UUQqoKY{Xv6okyRDcAUI%QaB( z#-#>fa019Z?|#~qU9{kZw%2yMk441ST~Fb*n0TSlU|!&QdhpTvzQmA|Rt7mDFTaR` zL*H@A-b#Ng<1}8pbPb&cirvsx<*6GeY18*TUn>%~>^mF+K;1ptzvA6REUz2a<`?&> z#pheyPwu32YdADKf2dab`Q?t^@Lk5S#-iP4Vq`%`=W;(7`G^O88 zGc{-3Z!f<6aG61K=WD+f-c%t31jIewhi%9N;1dP6?*t;SGv?A=Ao+b(@adHC3!<-w z+H$(06f}mPGwA^ItFQlV&cxE{RJROaXlYdf{a;4Y1)i^Pn)Eln0x8#ISo{I^;Keu) zh3?#iom&m6oWEw=L6H+rtJQJ0Oh$=}x#}F=!`bRQxg|PK+Vx-W!ML6~m?c-1{Sa&j zR=CScWYWtZva3_f{q*HgUjByc{pjMX=e0>Pw)IWH1}p!zy8bP-3HZtUo$k@WUdm8; z1tB(N>L%8OEF;g~%`qZij3sG5BcCsZFoWaviq&^1Qq#Ju)(^ z^K8wuBV-sUA{Vy_-Y_VhGb;BCT&_pp&R0^B)VxCUQ zvs@sC{j`0fW|0N^pNZsO^YH!3pq6$wK*lHV8#5EX+H2)1#)@aFDZYsjuln-*pZHgW zmwNTlBXN_f)+P=iV*6p(Fl@n9O5kt+mahP(`wdsjK_@)Hx$9Utp@b0`)r$pdV}^z- zexs^j&eE5NG2-jZ2cbTVJ|cV?#{?K#1K{6X{}a`fWCz>kUze7X>3n}XIy&YSS&NO( zBN}{r*h=%Agg2@JEoK@GY#QygH;2nAX9&unl*Ybh{PO5WJ|2J;eaB^-e!z1(N1+pt zc-o<)OWmfw56k^8rfdp{Ig-i=8Xp_ecLhF`R1fbF!+-@H$>r>S8F(Yx(c95~XFac9 zW>m}{6IGVkyj}i_3zpD-)#$hCg;^>{B7Um64$Qv z)1`uBz%QWSA1O=13t=wLRw?!J!1+y>cjx~11wp`50?6M9%4H=W0Ok^*voC)9q(m^h z;LzU@tr#wmM4?{~)GB5#U4CGXI1inpJJAW&3~(Q{K^a?llT!jzSnW>MPF@i({4~O( z1TWw+)37ZiiQaRs#6N<&qUO~j)mcyd!#QK=AT&2>Q5yCwia*e5OQ7-K*()?Rx}(;i zyGYg7RB_j#e&#+W##`h(7{s9Rj?nX1>g3<+)Qa&oJ= zQD4;TckK$y%XNqjQ|7jT;rOz7u{mR|!-RI0oh9MJPUO7UcEWX`w+!72jX_-ihXlxO z@c(6w(RU$UQd4D@pbt)t_8=60{**a%qqGpfr}R#OUHl6S8pWYY9o?=uJ5Sxh#Wt~D z61C-rJ~!<8g!P8rukdl#mmOPe^7>Dy23TRsji-qM<}ZVI3toQ9jB#_*NdH^XQ4&3k z=a3-zrq+1W_B>2V<1e~T_vYmJ|0VYTuVHik#J7j>)~b0LPc0<>LCYx(n`K47Yy?9^ljSESH^QjuDfV~<%btK{70+Tm~*x=10dOc+BK6FxBs zGfx7oeU8Si|A-r}0h-=n8YXX3vry z6A-ExFm^#1n&)M%fzHJHCBFOuU14YDZDim?&O^5WFT_S+2h75D`0wl=rM-bU!venmrUw_yL(* z)CL6d!@n5(=A~}Sj0PmgZz@Z^0wsa3x-5l0Iam5Ij@E7Wnq#A0DwXf>!{J-H>WyEuSpf%h+u#Kk&xDo*sWEvZ_@b%5=O&^O zxyIBVm?pL-v!RLY_t#8W``$@;@V&k63jZ;qiRw~opIldfA)^}7qI7cOT+CL7Bf~5} z0gJz($rhyqDUPCA80uvX3p*yreiCH+w1tGxF{o42k0(V+ebBN)7ot6|1B`_O45AV zoz~N{IQ7@ETJAsX9$eE3Z1!+Ftr%q|fKpj+Trx$9r)>6x(yfi9!n^$~Q1dtP?qTZ0 zlmMM#;RaxT@oGSd0YD{D=V_!CU_I@TT5~XR-5c(W&>gLjNv|qryLb1_{WNnPj`>h5 z{!N8=BNVis3Qs)H;NAalO`!YnhKcaMvFGFmjDzuY>+h0F&8wjnsA#dzdCOm3W?bu) zf9z0CzY{NOdOTjyoo2s-{p_Xt-c87%h2W`hSUN_FQwNDtdQJ4Yb~B1gT#nQC-P?0+1IWlHc z3Y~Sb@SNC9WxYOr4ZVm{*#EkE+@()+$8paT5gf$+BH_3BXo{qy_odLR+WBR!P8r3M zEq1hKYh34~eJO^h@j2;T_Je}BdA|KPvZnvoSb!%u$cqW2`g;2VU`pz=3w#U8ISQ{M zOg&oj&LhvuasPz|ftp&~foh$B`iUi)Qs_8?ivf?)_$r<<7@dj1vcc(r%`Erj-iuj} z%XM7aH+@$`2PUe;RY z9?!<+*1Jhvw`)gy;d5&>mQ9Jh}w< zvQR|SaQ(OfdFZ1Q+WzZ|nHJBb#{Ztxl;5JE7VYXgomjj7w@+uBrRlqksfdm66dEA- zS3fg>$=Lhk>nRc}{O8oExc;wY9GJfbgBw=8lo9zS$}QXcA|E9ugO}z5L@sr1&hKq} z-;`_lfa%(t_q@blvZ>5-JCK1G{}s1^dE%ULwZg;Z>HaHXDZKw`s)kIA5Y1mPTJB=? zw``y;d}I$!2!U#|6&|R{Is2T+(nGJT&6;mPNLMp34Qzb=N~!%y&&_C0p6GQ{0U}5`MMrsq>riD&`|) zMS1Rp3JLv=_AKT;?5IGctS6%^16X(w4_W-86MV~)+w{gnUktxrLNQf<@(^)NU^TDp z)czdFVC4%&1Ygmp3@sqht=J{v6=k!%PWa8Kz~3k^3n1Ru-cA)f9KFLu&@@5}N2OQ2 z<^z_$wBr;$=3`;66Zrf zjku6QIXStz_dVZl7DfG>n(8aJ)ze8C8+s-dcr&#BbTv0APk*01KZ*VNc!`A+dZ%hd z^!NHukI2-gCz~UAQ7bcbQ7e-L)u*{)#`2VeE+ISNs;Zh~A@^oB<3Vy*;`j?niQ$@ZP?l+YDnn z35V4%fEIlH1)~X(ZdE6b1LE4V42^FfU+EdQOfl){skT&Y^O{MB${}_9t#(8Fq+3?~)@AAk1&jTg&hVGn;K@?95MFA;Zy_M~dyMJ!kf)#ESH;rE z;3$g%Y>X!bJ5&Ib+9XwpP)Hvl@}9a55vs2`t`NK#31U|sW*0tL)qaTh(Sp+14ZD=% z>+$T%Xi$au?e(gXgVt-!-uv^2rCTWj=KK`ZNRq%*PAlpx)%zx71t6?UVaG0P0r&jf z8kuKk(c?ypls+!oi&*oG^ zNH?i=e=IwA7T>a(W=W}|rTBOWo`GbW8)?^itq{MQ1Sdpp`wk9-H4Z<9u92>p5;Rb$ zhzsllKy!+kn07k*Ur!S--0*q2zV!l`zN*YoiT(mtQps zJCPg4nH<6*7-mYe-DZIGvR5BRHWV1}WU4Jlp+EIkb-Rwu(~;%oe(UVXZELk{-G`}C zeBK)-+5SE$@$~z#5q0gJLFWIJ^B94T`*xTnE1OHbVQBtDsL8i9{`Jl85nt>L4shf# z9In+`Mvnh$GtmV|edocQvqBSB$u})mFGyH4p8)j46ud#*XyucyOcd8i9}!iBk0f{d zjH3z*Y*z&hGv(VEg? z5#Fqd3|`WtJ_6QHm+-s1-mv0$HB#u^YVbQy`Uo&W(cA&MyRRgire%D08jAYr_R}97 zUVI#y0(EGZZ4VxD!OFL_`)asUt7h3%1k>kM^+B=U1IFWhpQ!AI|DAFEONAXwKK?N$D;;zZ~m!9 znw)xemD(LL>(2q16}GSQ&?M>F_zVE7LifbCkB6FK%S#$4wx9Xt52=EFKgB`Y68nPZ zK5Scan=g2sQ0aROEBeOZsPPanJm7Es2_Ab6p_7INF2qXN{%KM$3@VT&at{O+vrz>p zyrB!T*~HN|ikfzhNv;G&>_9m&JI5Stf9_}qFB}h-OiW9HTzZAMwiK7`o;jRz=|D4Y zy1fo@B_nyCM9%G4`vI4a!dGD(m^rA!>m z=#8f<7U}Gj#+=Flzsh`1c9hX6xw;A+B2xpugCe3bqlonmoyNlqxlwa5)k5%S=|arM zLHCj9#xS)7=Q+KQkb}3xYMVz?0Z3e8HSFR$7~40N-|vAG*tbC&ZsJrz)`5%MbVV|O z*(16!5#I%`O$Lp>9fQ)7blnNw{2y1+h0=temnynPkAAj{bce;>k3~irS*{AzqIbIS zw#e3zs=AKytBxc)cgaS9xsMt<20J?$CAZf&&0Prs6e9H`gzz+qJhtVmO0r3)Rah-4 zUtu|Z#K(d@UzBhe-GX0O7BpUwQNNROiM zI%HOU*_=gwTuB!4F5B^}Ahn?rdyXyHEqLw`&+$g`56$2#545Z}jFn;SRJ#W19b^Qj zd^>(scrEYFbLYl{8Lz0gaACfo&UF*e2&5sHQ^qBFWvsy9%7Vv}NuOKHZ0vj2ouW_f zj6GE2TPcVhdG*5d@cOd-%*S6q51FU}Pd1{vCF$qhs`U&?)4*?749fk;WKG}Tx;39=wWePv{eWl{6Jv`v69~_m6FCIk)gX8qS zRDrZwY4>z_SPkbid~=4ryo}4**7C`IgeOPg*T6=vtjzXOLFsH=$;CbAR~L3XFZd++ zQ%ETgzXK}_3#VQ_=IkM6y3 zcJS}5@|H8?XpI-M^j!0r17i-ou`z<1fv*a75cF73jd>N^Ap^dhF~L@z?(AHv1@e+m z@}l_Oc7@ZIHOAT97&zo;=$5Kf-G&8OghdVRxU;v>(BPYBXKtbmL{4sXo<*3(cpAX{ zUTx%(+jf0VM<2?oH{MT^8q-deQNEtn=`?Z{pZRo0KBLkls zhnQ#w`r!eV5r5e48z7TXd+Y*e|;=T|G6K+JC&*Hz<^|XKRSBNYMg*|E@c*6?{Iz-ZhP;&2x7rckY z9&)Lnvi%3YjLu6JQYFVKV}-w6X&?U8RdHzhe(cfYu;PcA0-=a zU^l*Tdhxdb<5DT!LJTJ|A;lYi5zngR;0rmoK6|WZvTCftNVtO>GENw0{L_3L0^XA>F$p{k%`xzRQ@(K&Q?g&r9qjpn!4W;fn1Kp7Zyx z&CU5IhNs$F*z@)q9&EdC`1yVbP@$=U^PA+AEYv{m3CL<_JS^8@zs;D;hEc8lK}OJo>?9|F(@7`)kaC=YPT>o43mL~9%Q zDO=tJJ6pONMKjK0)FOT7h!R%LKJ&hTz{cT1Yk1pO3Le{WW9u`W?|exRVgs+J!|>%{ z41EDgODKxuDd1Oiohm?cmskEodnA|OaGvRl{Q4W$UuY!{&XX*PB2vJ&IvDsOxI|I7 z4Rza(^GDu!GL%ubHY_B`tYOP_?Bh#C?M^9``Zt(W|FXH1a=kEn%(k+p zjyf5;4|Rrb=VDgjY0?ny5kaaqA2$q1^mK%8ubMk+#lfL5Qi{9K>Xo}t?%-`8jDjZ4 zr?6w(S!*pXzB4*j{4sCL^~-R5Zj=BOXF9q{ET!TOj`{qb z)GGNn(x^l9XG}IV+uXlKsFSWJ3RbGx)iRItDtr&yYtQ4EJU0IY2iw3GHD7B4VV`lC z9m;v=jIDwvUbO?h`9PkA!#ArVT<64l22bNB+K(k2LzS%!Ay=#Ga^F3*#BNZG-rU z9-v}c34VN1e04C|ilHN*kl=h0Wr#cZN`r)A6^|_7!$qld7+| zRzmvXAz~(SVNPYUNtKYacY0cbG2vyYiz2h4^Z+k;nuuPfRbO-0Cy*xGr3AR zXA^k0U^wba6{LinCx>Ne!uZq<00~Ty-(x>NbF!MdyWeS7>9a0nav|YL3x3UG%4>p) z;fg+A=)HsK#8q>Mr5ea5s5m&O^Ow z=-+UP_cD#l)_{oS1up=sYFPC7m72E-o{Jln_~YH| zxHAAk|D^|vog?XIvhCCfRZ=EiH}$96v0YX_%Z0CKt$`4abrjgAo++gwR=UoTc?p z#X6GDD{U-N|AwIY@{JY!ww$t69WwpyYreCa^|;GNBC!#BKv#?)mk`ExH`;iUvn1>FlK^IOj+!$xZ?YS8>t&z^z`?i^kDb}-_mNps5^7@4aTd<>#4*vpgZY$P(R>dqy*E3Uy3 z;1mIDOB(4*{Q6vbGd=Og$+OpfecSOpF)k=M<+aIVk*Y%Jz3|l$y3<=W3ip+z-w-x_ zySgaQI*@sN@bop9Egeh~?|l&(-k4r!r3`(NkiY$A#g0Mx4P+JAvur^Sq@0&#`V%q# zjXH|Wu>@(ZaN>l4c`0BfzL4C@R6Kg>Lzwg_m89>)h?X z;WoNb!lO=vs-GLl-2)Eh6&~Zi1UTeBC3vPIz*mB-P4<@bzwl$t`@H;a?;P?K4GpKT zwEU;s>u>%|cuBe}ZZ|5VTMuLRDGpVr^9!(FYY+e=&EW*Yu&}pEp2>;HNtW@3Wdf#Z zFc=5nQ;?}SwwbJOU#6wIsm!SR@)1Ny@lf2Ou=m$F~j8P@A1#vdOHlO~$wg`i?2SN9eo)Dch$ z(|wZ}ki?(2;(=&&ory!ys(fWqs=-Rpq(ZLxWi9Zb#^(%P(H*A(7x-4foUsvmc8Z<< zu{C0F`}89bJ>y1=qS4pfyKb_k+&g<=*<$C$FOiDk+L_lh{~F^P!Qb+fHA2gBpcNZO0OJbnI~#R)=2zu&Kv@BIy0zn# zDz!^finc}^{w)IxfN#g15#b3SdK=_1A+G?UchtbY7{Pl0tFdkdQIF+j{R!l;hi^x2 zGzdSqfv6zr=a?6vFPaxobaBb3WN;kn=Z;Kmauv_M3MuqiwK>BPK8HMBnPQ3Gs^#}K zifdfwUvsswhLYzlE9mk`O0o!O-wco>)!Z)Ds!_uxJ>K{B)YK<9Tu7_Otz0KXGy}{? zo<6U>yX$PQ+E5ogd(Kq;s|wAUP(3sMf?rI9)@EMrY%@=Njc%AUcNwC71{X1l&fWkA zuMRC1#u)QmU#)t`KEGA)7S?6*L}FbKh!&ReI&J2j>6~vJ_sz>YysD$cI*fO^G^sjUw5N6k# zcxSlxX!9`wy+xYfn@&D{cySFJB=2={z|`Q{p*uTCRG+K^s4bAw%MqRrg0;IJq8x2~ z-r`C$fbQbbY~+i!eXDrW6kMMVb|!P|{>YTcr zTk_lHF_QR*=cPvwTyO(dy%YgM*Th^~atc5uCI;@X-2YyU!o+Jz^a8+oS$hDWkE?64Cy0CKpP! zOuCSOSOS&J*^1S5$8i^y+XOFc?T(YL$f@jIcbdOVeA)gOkWn^I`k zGSe?l-(}@_?Kdh2k2my!S?)Qb>7+kYd}uTRg1zAmGVcw`bP z9<(2MMnp z1!W^{T#)PS5kuKfOTUBru9x+*UA5>*5x1!Ko_)8}d$yZYQpY(7&u6@l48*ykdKG4KA(R`Sui)fQyt|OG>Y;+>a zsWl^F@ioD)=sk+ zU|=%TE4AjF{PjyA3-kNCO3wB6G|PFagEr!2zMRqOpB?J!Du4J*iT59WZ7wlZEw~jZ zg*C>tAAD5@J8je~F^<%EI`0g&z)~=MH-mo{0#lf5jr99@uHn#WXY?>#TrXGqW)<3} z#1P(lDnXHkk4_rv>;YHHB}-12OquxXOIq4)pMz7z3>N)AV`)Lt_K*WSOIc7X z!cZ_C=`odDr0Cq;K2JT^ya|Hd9wl%03@nzm99q7b@wTmh41VOw86vXk6os3TE2R@YK)Mjac?BWlWVP=ga zQXg|k%E609;ELx@R-ziJi z4W5Z(`o=x$)g#5Z1|{e*i5zX*n1Okx(QlqQtAqOEYZY6o&n}}CHYz59QtXQxhkIq0 zrmglA_imQ;%h^A_X0Qa|FQD8v$dGuo{$!_<57b%j8pR1AvyK2K>vmS{H{YQ;hfY+( zk`=m4eEXj6{46L*L^;+q7$Rst{MLC;Vzk>MIac?Tuf#Y$QgT*efIP5qknX>#0UU6< z;I>n=m&l(WggKDrk}*e6;!Noo8qD2~BSS==GAz>s-7ZY#d$DAd6x{^7_R1{gVH*s!r zXH4I;Jv@Hm!ms-ZD=4cJl%uu4{ZyNAbI->TR=qaTDK&&j-@a#IVk^iWjE&n5-Ox4G zu{oa&aOv3%K4;+ztO<`|k@`3ueV&Wima&q>K}r`WrMK*CVcfu%;oBA^imz@DDDF8J z#;bq==Nihr^4arBNr3|C1qJ%;%R^bcrk?08U4Dp~1^wGvq7~r-B|uq3huAv;ONK%A z?*+0_H~po9CxP>lJ;z6}iz6_oXqdXBYw0rS!F|eNRapwAiy^pXF}boZ=bExAv>29m<=MfrIa;>ssE_lL;X&t+1h7 zVU{6RXo7jZAsxev7?_M5>n|6M$avM)L`^Idc5&QA>KmGi#+| ztmuPlFi$PY8~=fB!7)##FUdM>v&aJ`+cf>jer9B#!hS|={DUP+K=u*;auy(1Jrc^D zcCpPJ5UbS;;l++%*y7&X_P7Ld2OdAX#hF(>h{nJPsPol0 zv(a1kK9Un9?Ylv7R-Us9PQ2M(K%joDNQPztwy>0=XG#aAqfA^&Vdd`YFl4 zS>$+0JD}dv>sW=cUSwPFVV7nqmnIZyd=gVd-y|TI3n>-TWi{@MNA^ewyb>KBYRvYs2$BWyT>>-Cr~OsvTb~C zei!pv+xqc5a*H1A&E83Rezjp#P}x7~Fmr{EXQ%6uXQ$7~mwbW|+`o`EYZaMI?j*m= zPc7KN#f06m^wJMPQFe{XW=RDHV}|ZSZGFEzrwuT~`?~&Klx(?LDk-8vr{$*>dxY#xq8oK+V-$*x^{bX@di$q5a(mnfWD_K_8gA( z-Mr*hvrYjc&iNw5OS<;jeNPc#@y7duswOvT-*1N1o;Js&AE*4FGBh1_fKk#aK_<3N zbp$I}mt-5gx58+ZZ~Bn#I_gX~M6~>O#e^u^k|1@jK5-x}P#fsbQ&YbtdRRIz0NJ}z zHWY*q=`)Dn#>^BV3dw@#&xLS@p!i^RbD!ebRa|4l-mTh? z=B90K7G}<8aSu;mCAs6E*Bj%xHmNU+uHS31g%>>^tO_&oe$T+jHm%O%8jYxXUODOi zT(n``PM3PaEdKZV7ErVSVY6xgSY?J1OVe%%ZJS@GcE=m#c~&F#zMVMFfg=@I1^=$9 zj3S(REUq)`!ok>7|MR|I^r+{K*|nuV8gZ%Sb@hK|c<9j?|&bT9<$xQe{=G2q#E_f zC(zZREEB5Sd%}_TtU0$(Q|r0*UsuAe>sLA*>lYGR9-cb{JUa1G6{h{;5aHugq|tKJ zCHZ!=i~`UBsb`Ts!O5Kx$S(jA%!(TGeOcAvBu}(QKR@*Q2=u5(>n2^kCwznIL{(S? zs{uZXxFG9Y%_%_V;6fo0q{Tpp9%_5a4Gf%8vA-QQu<&$|ZKstb>gSRl34b$~+b4F? zc4@{zW*yo81!a7{l&9hsYV8%`8U6RSAK; z*E#Lk9`(4ap!PQ8o2y!0BKRKn1eq66os32aU)6b})H@p=fkHpIpoqgw&we@yYth@9 zOmIr0zaF-6@mL)2R*71mOv&~u81dwdvijxVA%<~qRV9+$|BaR}R`HDApiT?)UWsTZ zwcwe6L*AuOH{(mv=&WU|>~v0o*;8k&fz3k6a;M@b+H*7Vb)kE9_&Bw3q76l?W*&ZE zg{8TP5ge9#yRWeZj;|UTpyKvWKLQO3J%S-y)#hnn1gR<2qutiZ$#89>3ezOHlM9Q6 zzE=`Fl8h>3>gM7oZ&r%{@VVTDuOW@iU5>irR3H36Fe%9jB7O1k)?rQk?;96UQHiOPNZHaLAfrP*IB78G5NYWi zvW*gu?(UZE9^Ksyqerui(QM1IsY8)%;_+cIw>TF+^E8kiKTY4D-8K=ZFV zusLUq17R$1_oY+O&7*=Fg(4vcY_JjPa8jUW?GoXjrII5GX_@>3lth7#J*s&b40XBC-A4JC_v zm-pF*(|s_|&9(IN8P4fAs6nZmv$#I00lA1!@A8{Ayk@-Iun)>=9ns-rSekNPR=*J);W_r*YOq9K zr#0EtmEl;O(T~l_nwy8s`6xT;R$QY+Fn^4#r~Dah)>puQiC$13@EUuCB(jPtEgi-j z`Z7TaE7OE_P|ZlhY!~Ji=Ie3fE8(T`db@va3T496KI-4*+pnyIIiL&MMDJyOE_JNr zXU$Ia-APH!-!f9%ssB!78lQzJq@OiRkY8!DBYd4dq|~OV@5ZKGoi9;RGZ%u(ZZ--P zfJ9}*0q}AXruTvPbsl_mtA4i!@sH3NkzDGz0JhORXgoff^rJUq(7sz@Hx@n=!T*x@ zK?f5SY61BGrs}fP=nUfIp5z_Itr&x`aN_aYBTD@zCju49PJCeBuFAK|220xh0cnWG zXZi$6Pj%gsNBT4R&poF>Ibb6vIL~9h;9(-m6UcwC0Tw^_4rqLO`*eoYx#a@qgx!`3 zOnl;?fgvo2wM@MDd{b{6&hNIo#oV@*cbXk8MSWdiSYjT-nv*V+@?kkQPHRjP4w?st zZ)|*;UEyYBZC!HDZw+>Y{n56)q#bgZU7?#VvuzP1E{iwB3Z<6yKhPyYF0C1Vb#JgD z`9P4CGKX@)snf9kT%ACuYn`hLAvB=8&2I332b-lV&btl!4p0N4-uaN&OX%G$Wnq+~ zA9Z-18GrQaJG^%sbhyWCEOS-XED1jm(j=}Cv<=Vky)3ac{t$Aq(JD1K*>2OCINDp^ zX%1L-%FBVMDXF=zh5F(Q$(!L=$p6S}s>#L1!QKzF6Eulq1SMf!2ryu;#wc2X99pM1 z+k`3oJO7mXBg-#^%Li+#ew`cKfeAPx43Qzh$bR#g@M#4+Tlmj220j6F-f0$knhOrV z?+^)h8Zl8G3E6~GyWzcS(}xVi>F3_xQpfcUVY;AnBKjlowd%eqcxf1vf4GbuZ}&Ll@`(cDZXVaKlQlFiUah>2p?pYynV8RC+8{WHDOo zn9W@%Vb@1VI1B<_%<5U$ynpPhOfx?thePWAMbnwpZbbytITE)B8L>&?Mm0aw?4pYEB`D-4#EMRT%9&XM>H0E%}*+8x$1!3x~jX-Dj5rLT@&ohF z8(LRa^F){0uG4YH@wD(9iRSCG$IqO4V4HPHBf*KmZ{oCc`sc#4G68Qx7|oH__}j=? zfzgBBH~6*bEeY(twwb(Ni6U!)w7(Bv>RyA#1~h=#t!9PC0lQ-d;ll;<_O+irVK z_0md$A)9@6Lz;#VOARf{Ej3A^`5RWx^j}Ah$L(!Q{Ez1s!xHE4f@^BIRq4kY&MrTj>Vu)=)~oMZAh<-L#3zIW6S4b#Vsf^B{3(?KF{@>4b9rkyg8!=C zNbJi{$y)X*b_AH7DmM6phSWj~vD2{@PrSru|Bn<)KQKKAApJS4RN|sk| zlPD1n^i5vFFZYJHn=EFCC6K}af2pGC#G3J5(a)CeovFPunj`52Mj{_2vc$snsteB6 zdw&MYdy2eWecLaJ;+)@W^hHVV!v%%u@?yU|AWsBG5OS zHWO9+zz~#f4K6p%nFdwXtocD=Af1O5fxn0j&ska*{jT)!Qe|BqSKSi0f&a56)f2*O zW0SMtU%20L4a*U^$new=Faq1sqS#lo9CuxMP_M#;=fu%ob-WU|zs5tQ$A?+POKge3 zlF<$Vqi}wDZ@{Z1&Q3%A0Orcpo8~+y!QD&bc}I-SoxrhPyMCB4U9pjAb1s$Rv0|}N zu5Hz*WI*De_R6nkr>&P~R@l_O6%o@^u_h*Pu8V6ZCX)CWDyLx)H~q@`86p@G@E_d} zCzNk+XdJ3mVv`N(Z~Qnzh7D5kW>Q%MX|*q4ZGgnYIB zt=3ei(k*5^Ypk-%?Ex2#{@|*NUk36U4krD+jDO66sKKJ$m1&^@2CMBFsXD`Wl z_spxT^b;rPXsdi&!_JK_eDA*o{fOxs$RHL)AY8@I*>_rA>!9%>t?;+ObwGp!2WI~* z#nSItxptfugM=a0YK6oo4+$Hn=uO@Zf ze9!fxfMlt;G{#capDgYdBv@N5kIfH*hg~^=arw@O2u9o@tsR<-7FACI-RA~cOz?XW zH4Oox${KmY_4%Ag8y38g*t+AnF87h`zOTYZrU{(OVCyA>iKqZB9(m|KhIFIr}TR zC%5n}vj+2R$b&JmbiqaI<^qP(;B$vBTnO8y4Or3B>0+6XLUu$A;o=`E@Er{;ig6(H z94pR<`s>ELvyojaTiUWDS<7nG_ORa96dTDt5*yy#t z$eRRKAM%+MNhNf695xn`a0Yi$0TNa6g!X$f%rr}CA4BP}WLmdKRdFv^4~8}(_tlxmdgY{F6CG-#iWK%|=ca+I|1D z;fn#8A2XEArQ)xjFEgIjR2{m6$)BrznHpzK-6y4XJLMI0AC^Gl5W&gWM=~n3XlqWy z?QV?uzK&0u@RP#D#+y2LR=RI9j}l7brppYa+8tk2m5k}B7(|9Rs__{*w~HXj@2zW7| zIFubOZnFQR>+FJBg_|)rY4kL+UR-kzeXKZ2UIsy80Wm(;M{W^JK2#@maN=#G7SZ|# zk`6U%xgm%ppR+C=nh>B%p17B4plfgK_xY!ZY`F4Bua|U3v1_OVSO-~KuM2Ub*d|3m zI;Jl_1k|EPso0FmZq58Gj9L;HO12AQ^N1!3kj?J{rDtCJS@Kad-oVSbM<41$w$@MQ zK}iwaOa)Y|@vwuyZ7$b={J*4jZT~SV%|l-)IJ&68d22Q&koNCcZ*74RWDOvOCOddH z#biXpY41HGWd4>nq2?uMMC968H=PoA6%ChncDPH(2!x4U83rr>1{+ORGkEL08#YSG z{%Cp{3c4L4idUr6GG1*vq>9`X7H`vY zYJmXm9#fD#+{<9{U-IF9xg(7_)eK0!K5FgFJog&Yt)_76W(|0<{qWPx^~%N;zwYMg z(o6c@LAOuO1wg?*j!SbDasKD+da7pe?1)*tK|R;Y4?>hJzbS5xCk8NstVNK%O6}=>yh;i1NOE=DDRr5!+ymU{_QhI<6{O?*1 z&kOYPd8*5aYZmn|QGD1ozuYS-8#1i>OQ=7+q&KkD(06fBzaUr(A?%f<(g|&gcL9Bk zw6=TIM5guJyJ4u$bh&x@6OR-85IJuc`VvQ(2%ws?Q!VnE#QozP+OD@Hz5KkIAwxQx z>bA5edFHvXy0HdIt28><50}F4w32MS;~;>|=Ikd`_cE!ravd@}ry>J{gU++%FfE$% z7mmAcGNm+T?rRwvhkCs)8rkR^9$Ew822YNrdwUOO7H#?SQ-5bkZNHGXs&cd2elC~B z>~s+53SpPHFxq$+&l8hg;op6?mf3A-xYUT3n%bgn3F6B;D@}?!_N;_C@IWwGaDw_(yR({<7u_+s}og`k};^pA2&Lp<_}XfKkoFM*V?Q3iU<}mmj%x2COq>a z=RjmSw;awSFRkNOtV(N2ML=gGMnroFk^!?W%2FE`g#|5|Hhq1D^D^l8BK z{uatD(y~Jn<+`M>a1B zJUf9_Z}~Wl#>lP%4;$$pTX3HB7L_*o!)5HhM4kf*$D1jxW#M!3ErZ{ok#ibAx74+*CsB3(M~?3oYs?Y87juS&9=f+!Uvkk0MsF zJJsu8#Mq9nkf>H78CXR4SSooLqSMK4GR}sy_WLsk$l^EPvvK>Xt zY(4ia`fsJH+UTBZIeI{x-<;?0>C3q+y(z|9NrZ6_t6=ZI+YDvvXEqJfwUzC<6Fm0B zU|9K;6DlEp^E4OlU0SVj?@#3tMI|kHTp2kMj<4!wx& zF220JTmg(Z?-`e`xSY$H$;>DG5mA~c_aO7z7RL^m3oR2_V{xbS#~df5l? z=;Gn9bc5XWjP9$0PsnT3r-j9CUF()ycWlY*md12)T$z6NHSr()(~gj>s%dDfOtelg z&M`LgHedK~Ioeg95@WGG`Ck3}x+{9#S#iY_bRG(vSF&|DH14gDbb~G(!LQQ-N|c26 z`g~2^pTZdrZ~Pt4D&G0`509gP-|U@^{=EXwd9DSM%5XcT+=8L)+hJuoza?POjLuN^!5 zu)aMTi8;?7uH_^4a{u^tTa`5^Q02d!<7o5Wf0$KG*~t6fduYV!8Ih3xcimG?zA9*W z$*4V`QBhg%W-d&qWD-!tW$sz)~;FLRgEcV`ngc)qUZ_A*R~4@qJdv ze=9NN`YSD4SVR*_M?jfQcQ?Iiw7IXia$wI^;|55@36LP>r}cCa8QiurahkI9Iu`0! zJm8fa!|`7UuJ*SS1CI5pOSiiBB(fl+JbOMtZsH)%jV3DIf%PQ`$Zt98n|o3wAt&;* zsJ2x@pLT&&UXj1;Ssu0XW>r9XDB%f3`I@fw0zHz2#&q&QFRL-Fq^@;E>=M$Tdq|{r zsSrlu`hVJY0(^&Mx`8AIq?g+nML zS(4CU#tT5eou}q%h>R6J6*S%RA)kha3{28CExT8=8@C7WyN8F!AD2&sY=Z+ttcx)Y z|DAI`XA|z+S!O?>qq?NKkHo#&QvQTyHxZ&*A2WbFJwK>Yp*G$8?4edakG$}jV?4XO zBO)HE0WY(ODvNhLPChMVic5#ic-mY{ua#Y_e5(+$t9Z-PNTlh$!8ujj0Ovce_hsBSzF*z6 zc`g9W^qyUL2<_g0wjO1v+KJ5F{$%lSym$DLXi6D@zZHLQP57TBLHlQau8k+c4W+MP z=0jy74bWx`jYv)f3$$?{D$?$ck(0}+taFPBvu$Nr!>yXp%VggZG9<+g%7YC@0v!K& zjFDVx&4)Aq@;KHE=(~l7PDu=lZ+KcZ3oC*5e&mrLsr2%L+#p?-NiQ_7)Im({At&m| zWhrBSKgjVMxV617yMdnbNf9o5p#r4PBG!ZdL{GS9!kbVp_CaLk-EWS2ntWfKg%WG7 zyyCCC+@)XZh`-H~Ms7TR=FhvC0yV_yM3jEMg2?~oAV4g?+gQ>dZ|h*wB`*TN#0_FV zY&`y&vK-EDJtt5}U$1jUJvwiq<*^z%F>Km=SG#%?(G=8SSsYbvR|3D7V1zv-D?JbH z_*Kb-4ta`cgi2bBJ&*KOyuklC`*_*devdJkleaZT$^EbFhrYVpE&k4^5kHPTU*O@k}tGq2wTm1cSzxAkE9G){FiDQ(nE=?(~55AhoSza&j$FJu} z#rV}T-66D#UKBg=2o`-RuIkuX*PbBCXNJW1Uy=YrwVFS(SurP}}hwREles3(jm3nhOwWQ;7LOml2EOy7K7k|EN z%;LE;FBW|4yn+V^DGrjzB=}}QP!evn>Jc7NgUKK4gLxVgpuvcHK{qLm3yH^hA9ufe zQNx6tvAUuONK+B5`%V$MZVwH)UW+q2&rKdR4oaCcU!|qK5?Z)WJw6Qm{-67eZ-aqS zvyr5iZ%Vrx^_1MSXGOP3iJ<*kWix#AjfekbDm?b_R%uMIAhDzlC~lC#MoVL;ph5d> zp4+J&dG7K&w;HT|4T&UpOfkQ<+ZQKj74V{Q=vQGvYCh@D=@-l6x=4}?AXAX1^sBqm zIjE@m7qX>%qY~F4?cjD24yK((VGpb2&~e11Gt zxxe_v5cZHPYq@dB9{&M3B!Cghb4w(5_&rD{$S@KB>-+;=P}{Hm1i6QS}1bi-fCr$ErVA?BZO_N|xkL4SMXNm}f& zTD-%H;l}U}$$5q2@lAxrq9Y0wOp-Z zeUxtbExY0aRLw)D<2n0=dnz5PmED#cs+8-92c?rF?D$qzMtrhOy>{O8H;{v9dr(nX zjWWUrW8hAk2LDAUvRD&CS*<+P?X#d{TbHx$s0=smKt}G_lisC+b5ZkQ~ zDSRf`O;!2P0w*n%h(&rws?Ve@agz%n%)j#kv9RdO+2g12&ScE>ny>ZMT^F1^4r=vf zsJ>Z?cEg4e)cy2buaZLzO)?wEQ7w40*Qr1BKfv=&4kr`|?fD+dHJVqaw-J@&b%zuD zA6Ri>D0p|CT=MdE`$`?cu~`+{hCeTEW39%VV@IXvG_)<{lU<43Urq{E!cQ*!80=Pj zI{nyL^Z7zS$dRN6>LA{IBCz+up}q0VgF)p#9mj(_*1P>Lf>agv@%Zys7)A>jT8LIW`#ZKor`K+FkoKe9WI`m{e;~l@#8SUI#?oQV>K)Oxt$d3GU*thy~ zgc$C(Z{Ctn=|B2CDu$~5PgdH$w^Lk_R^E0WO@>Qx71#6}3$e6V{}|W%`6T9v#+ zbp>vaJMItnq)n*Th_UA}QP9TG{l37$}i{yQeE?kQbRhZh5w>Wz6(8ulD$(ceuG<~PfSw>j?I&pWsqU9_K9^GT9Q95s)|Lj{Al$Dhlk=LH zA>ptToeLaR6^98B+8~0HC{1dAf^%Z$4RBhVRT83~fw)+DykqVB)hOb(WwLVfY19cT zGM!$or=H&^bULnP|4kj@iqS#Gu1@mrtbIbb`IVln9lem2-G}rMVhdl>KQitvu@$1Q z0V7JB7|i%F(O>)^eFVzSTJMh0<>9`-=t!m+D-GyonPML!8FGsVWd|H{#U`w%se<|#AXFk4m7Xg1Z?0-A9?#Ir4?m)-1@}t z5x6m5&~+05;g{;ymWjD^Clvss%u{S+p5M(nd4dz%Q8J?8)@8gN#M_5${LrZ` zmm&Q@E9wX)xmov=3<>$c6=Wb49_KN=s(5h4&c<6VIcGh2`Y>F6e$L7J=+A?VhY9p` zw30J8G%NJNyYje(GMM+uBY8ykojsq zdbRXCN@($oeT$Jo2G`&5oMk5_xXelv1JKslNOVTy7-%~1UsI{W?9`4&sAj7^(u*jT zj`5mb9};xh1n`s2d#I{y71#pw#eVRX+@;lnnbrPtQ)Yib1x@@vh{I?FVoLHE*P&+P z9;eNPgLApiH%SOieXUbkm&NnoMSA|G^eiuEHy-7yQr5?sLr)i1_mFd@JYe_P*+1Eb z=gUq3sbtT|%UOC7#%lqQE=l^GN2OMCnx-KzYi#k}ke?=H%hY<-N41{hl6?Z z)V=)i-#)wpv)YyZls|HwHnqf6Eb`MMOpggBsqPkr zI~3ZuA2s9~V}1OaG`e(b^tC+(bF(^9>sEfAAMV%{9||pHRJ;AJ6oQ0Qv!KJJjy|^@ zfXZ27%&&m3rKh|5wASKRoy=vQH)dC~d4IA@;w+)Dp>69@bHQ}I9FTLAFTls@*SwUd zWrks7@Eud9BVq^dg{YU!p@Dnx4p{_&Xh`JjdlOUHy!=HGCv%oz7(4D{8G!G(QoB}_ zyw93^UMwIX0T>`jC)+iGebG_mI=jBzQ=d#60D#5R9PQrivr!J<2jP#Mw8b9PowHQV zxY)0u93@|}V8DN;10O;KPbRhZn`K5r7`E7#i!QT0F)>Hlm)Wqhm?N1L-8;2|w+F8$ zhYd80a-*lpfDJ@Yk{n7u4>~I%W1jbX3@rxEF ztbE9mNES}M2C;S{GrEAs&ze?d_`1bnI3JxP2UlXn)M@J7mse!CKIpZqaSoId`*WoI=ft}2Q7 ztbIk4R442@D;0T7V!tQRw;*TD9gNuAXv6Ce;N>`KB`K4>Em#sU$F8K9hs}6rEb8_K z(GytmH=W-!s!Y5l`BOk|O&EGqV%xcu={@B)Fi|A=xbHh$G{eByk)H-BE>M{g^Eq6w0yvAqRRipN|(* zgA)f3F^=}tf4}p6ba=P&?b7qCl+>V5XP4|$LhMSCljEUlj@GTacXH%GyUhw^Su~bD zg0yN8h4&w3P2_0arHMgQ{E*@Cc|IYNz7@ERN2XUfxvB_lA0V1N?mAwElY^nV8fVz2!&Ps|oF!RMUe4|ukV3~C^EB#OIQq*n9`h)n|C zFh>%>{jOe#K-#68=Lz!=4Sfl0IHd<~8 z8b3}RbP~NXD+TQEPd@hNYKQay@7L=g;#T6)qJFX=WKZS?Jf&BjPu}U~q#Jr_I2dv4 zIybgma(Y*sExulSfpN!39IYNVS;3}Pqo7^#-=8NiZuZMJlA8gy!?Btrdj51Ap6IrX ztB*1x!RvjhP1JggiLf>-8-jgkD{&;ezwiFmi~Owc50j63Zr=g>LUd+;7Y#7{FHQCb zm*HVu7&Hl#NK$vomAvZf9J&2)hYuE!S&tCv7CX+*0n?)1QZV?FJn7`L_vGnNgl2e0 zcP<$u3BF`ldKVrti=(~7br^JCKc%lVg!LHZO{%js@-#9(F%V!j>f_g2p=6w?ufOHA zXJY9^lfIs68GYFBmfLJXy?{lpkL>qzPd*79fBlxJ;di_7$B$`h_0lly<|2xN<&vjF z_RrdQ_UBLe5M1=dBXfV{?xsWnIk&5fd+5~|)$-rt6wl$L@=EHB2Q=YN(*KY)`0NTm zsYe1IF(m^0m4^(!VyJ#+Z1yZQJUJy_@oXLS4c;{c*V;#{FUJ`U1nt!QfLr*shSCWo z*s^U$_WtR;M-oA986Qj@uon94GK*Z6@lKH2u=|99RJ_1$;s@ixVDcb00e$~m3h%qO z{n__{j$PzD;#_>smGcC|A)3~G_h6^{`>RN2|3mtorNB#yH}!@D=IS49_ly>_I*ui! zS&?oOsEQt!V)RY|9}r+KDOL_--*DQgMDcpWn=DHdyfeC^fX3}$id6YM5AgFViLD?i zR)r6z<4h_sh~%}gxbR71jIB$VK{LOVLV_*mUvUL2Jyb_#m15YBW`6Zr3`%I~BS3p8&MHLeU z_cFfvf>G(^suve9%I4C2V?6egQ#CQ1`+CPB;J$bWz5TBldzwJ7W_e{CpHG^)1_z=+ zGNE20TVAx)qq;%0PhsItw}R-@ypn9fnsVxK9yvKRb>maPSRO}ZzwU0FyMVm+iH|{> zcf@QE*KF%sQ*X*N1~NtM`yAcb@5LW%oBgI>=9U1dzVg*;{&NGh6JD-bD%zEeaOo*|yl|o~>x!c{MG8j#OE+ z53Cc>7iDP4c`zDPr!^G4TOMU*@Z+P8pg*Z0!T;|v2o`iMQkCC?R_bp0LoQytbejMs zUe|x^;$B}C!(m#MjfaD)Bs9)A6`L9K5bs!cpd^+&xH3vgPin*ti>E=oUCstkx?rRm zM!?p5j30{Eki_S=xj2gcGS`u%Y57O{LsPNNm=?;G5MxtO@FNopPprxX4@1D8?or1l zy4_%4N|^)Ja!PMX|O9nFy$Px9xXB_|mtHaNSpj z2kd-e@gH<76ln1nRM48}KvV~TB4{W3k1YqfEX z2K8B0etr!ZXojJh`_96Bi0m!>7^o_Vy*<@&>7wA-@%07gN%gHmd4^MsC=HTBzJ;+$t!K`5b)uD|K0DZSNNaH*dX3y(cdwau z;8R^8?Um0^j85iH&mCBJd|`my2nJ8Taq0VX*K>!1Ht0meaxr+5s$Yxij6vvHY4RX( z`*{IN!2WrmV$Z-mop!2(ytOx-@t z_ieOx(8POy?wLc^!|iBvW?S#$N43A(btrqa=O>2hwKHFZNoyYJg#X9n-G2F|nW+~f zxN7ku9S@OMd8)~+9pg(4Koq0esX8X)^J;JCbV1un5rUf_k6W{B? zz*?&Je7lBau3= z1LM!>IR2{ax9iNWYFUQF%I{htqnl_>d?M7-uz=q!>E!0!WJKX+unc+zltKN@; ztpl`*x4OyOY?do4@?>}$bq1X9TVlWDOds)H^16p)>)BTaDFLyaI*IO-cVm?5rt8Ay zLT_0qk0M6i~CNy>I}YW zU8D-Eli7M>2L?XaR?X>dvL5|ip#oRzAzO(t!e4ZKq643oj|gEMuDwINUzra%GxSsx zdXX~7_9!-5WAcb+FFoCrhNLu(?4PY!BgN#KP1|JO_hDVV_IzRX3^|Li2)hf9AHw|U z#G8cgz2U5r`GOzSR$14murVgLxIJh;!;wWhGGxXFeXRce-wHsADR}j6k4<%zwm{yv zSiYQsFGx{7y&aBO6nVb8oo(i`bDm8vmcgL8V!rdV#0zCOKvoW}TN9u~$)L-PecXI~ z?j1xt9N@*wb0JJcSEbL^8)a&RCWp~pgytpORf5_tyC{|da6oZW`pF~y7F1Y0@upWzd5hv)jwyhjjX4(M_w+SA#H zl&5cXF!?9u@)49LfG=%w-(tU1M>_s{hg_3Vj6>o{)XQX^AG*2G`6}s*4&Ha3*gsZl z7X9v$_EIjmK(j|>YP14Zq>&46S)!u<(TraIY}j(QU4fintDmlh-TnDRSg-yS?`XT6 za(x0dkNL=wbH!%O)%+Q%Z>@7LTD5jJN2g}L2m!sfV_vH2UO4(l5o%pNBrIB{Gfj!9 z+L7(vnFtNMnqaT2)HEH4(e&MU31~qNLkyXOj0VtRlkbX%*tjwE5*;_SLospoXo*oT z;L-H^t7Dnh;`0T`EuROtW9=CjCx<0%-QIQQc#I?a#>)zyyip+QsD3kHqPdpmR__-a&#CvN9}l>${}U0@ zD5@G;_+dAyqy2wBDhDzVuW**@+C$IEqjl0U5O-)s4_Li5`!BMShTGYqyk4(HrZZ22 z#@V&(*W`kHkrqZB&&+3-6Fx}E%JW^Tvp$uFJxOBL!(BBUu{;&xmbXX#oScr!q`NzE zzn~d+GO0==O`V!SFJIrL9iVmNJ?)Z<;?}Ln4R*5H4>oPE)`5s>Ch{D5%r)mcif3^H zWgF^Sr{z;~z@e*L|AKM@fILGLzuc>1TztqUS&42Xo988x;6{%^%H#5m;1? zFPvNbIdrdHFb4#4tt2)`O9|j4o13WZ@+}Z_e>-#`!BKTj#UAH%Q&3XVcQgyG(*htp zodmr`@mM-B7Z$AJcV_t;v6d|4l-92+G=6h0_ywZp?>ya^2Td2P{3msd-=A-;I;xA1Ou6_TbkTE) z;e55>;I6&VQ{(cjKPq?nuX@>l2|grvatzhBb{kdqZggU$G^`xgc{ewwdYrwU3p^Re zyY!wsl5yvF>#g$Mjrw^icZ!h%OJwtQEaIP6VtTkPX z-@{>f$4qgA?*6iVA{{}0n|8!hN;??K5#c07JG&i8uN+Mx`-=Q*pVqDGiR zriZjI%+QBMXybVK55J_*JB~WS#FHVIY^J>5Krhd$ha)-7op0c~q!K@w&s7kH3h~r3 ze~!-;;Ryl656qNl>Vw3N7w(L6r7D6N64#p&rFdWSj_00sE5?L)X%_F09s#lQ+f5%2 zUxongK4roBb-wtqX_}>|k^ZI1Ol49%GQP-v?GVwdd*0gD7hl9L-e$<>$pb~HS_og9 z-_qxqFLd#MY8%#%l6N}s`*)6j1wVrJ2fs54RZOVHo&GZ3!H=fY{N?E!Uh|r`=|rC$ zW}mClXLqi3=)rYihJP0;-J^f0tu*|pza47j8vx&2mu=kOFEEg3n&@_&bg`c&E0UnU zrwC3ltmQ?M8B-XR1}VxYMsqzlC)2lA)bM>>1=(%^^~LX~>elT(YMdJ{P`#`i0Xj45 ze+#S~su}w4{+9wz;~PLD4Jtc4&g!C`0!r{PJz=s%MfHws6+WHq+|^^X<-Oo}_TgXd z+S<#;_s)-*8z;++6;cx9?ck-n-Ln5CUVWd!`udN5eM(qvu$zsqFtBgG`wKh6s|O=p z$@0VcrCdd{P$Xt1x5RvPc;J!fNTvD)PaODD|IQij#CzX*DW@R`cg9%wJ5^*jVg{eYcE%#y2%?(hEiMq zTULmNDu4!FPQ%?_O>b7v6*_Gn@rc7%(Q7#S&sxZ;bI0i;L8|J{0=S1;ivO0KEw4^z zSES=FkoW6kKi(U-kVyR~rq}Q>+8#SxSLpstbByB3d?YmpKH7RUT1UBv&aH&Itmuw*)2$G)_&uT3ijw=zkEy4K9lI01 zqaD;e0IdI2z@4>^&pJ(8$%hT;xl{6kn}ybFzOQ78}MarVz^X{u`N?y65DdtG?&6X*}QjQz&LzZ=Qe8 zEfj#=ifja$O0Vo(&I`NqSuGi@86BB$xS@%PrWvf+s5t|r;5sAmIpMr zkirFEyJe)qbSV@Z^^5d)Z*H8W+hfvYASW?Dz9w@+;`?p-*GQKp@_qU)%l*5V z2hDEu91ED$$31k-b(9HjZPQ}|j7Ilw%B4y&{&D*T!s#3PVK7x9qJk&a1R z`se+=yBZSx0~<=VLs@Ew7|yRsAldQze%a2>GbIbsK}*%guHqOW^3#S3m0ucVIWj`O zmXuteh4FV-F)3`_Vx%g6)+L(76NE{qySQ!eVZwzCT;y@Q%w-=Jm_$zkTVz{3dB(JHi*2!IHX$f{ImVepxWNYuLKJ(p&DJ z^A-7q&rKRr#Ob^#(|G;Tnc~G~6fs{GYi;v1#(uIcO*UT_Ex7FMn-j?7GSahBux)jm z2ve$Uk!SFVvXCdxvyB-^kA9EfX=>(03opFIN1c+!SEHY;g}R%R;zySoqt>AWYvvD0 zG^p+jFmQACez({k<0}EI9J$nTG!5!SHxZlGT+G6wKl9N19Js>9hFEpn8YszA&Udq0 z?Yw;$zzWO2qFal#?Y@O;lzwX6n+iAFR!sl)(5hREJwy58{^VVIBjVehqt|ycxYI!x znE7W6&ki2Hi7I@~{RMxuU&i5t9NKHnE$V9(^l2FgkD0#rVAdd6uDKPW{NHau!oXc} zHu;Ql6SpIg#3|y)XLcpRIeH-J^zGd(p^G>Bq<5i+>!XQ>R$NhLEeHHOEIWqoTd{kg z@;M=o4$Wx#s}S#R-m5lt1v@6!S%0J47qelgZWcdtdDjX+p05~YiAFfy@yMS?*8YQgk!?1e4S0&L`_L40@z$p4vj9G3DE}NG zjgMY9T(lbvDZKL^;d!^%k3)p)if<+u1c_jLzb@xTxKj%A?J4v)mrOfI6>}T=^y;@a zFQqv87UqHTn~isk0gCyqFB+O0Hjt7chvR%nm}=Rm$e#|jVicw@^DCOuA%U=^aK8pH z4JrhfB>~Jivv%P8r}~SLpJhDQI_G|^NCCL@@J!6o2wL%uF(x3wh?h7`=Q8}kGRCM% zZH3-<(&;8*9m>Iua3a5?uGjX~F8rpggRUF(e4T{5d=9{6Wh0}+?K!#o-Vhzv^Npc& zvHKdc?Jwnm3dG%3WSz_ddikDNElllF3w!F|tBLwiC}Xz4Gok;o1N~d?aQly|h^4yW z{Z;!cLVLV!fk5SjZkB0&7zX3UZ;)&5y@V5~N2Y6S0ErOoMmMJuMwdOI=ba;H$O4z| zr7$M~XoD!_$q=#<744XbwW(fDrNj9!9TL9SsU&4oRa;Mog^(Ff*8F%Jv{<46*9}q1 zuv)7q0F{}4uA5@}OLKa;o!;O?7ZS{u5y?ZB!tZ%3((hgExO#^jL2UZPfDDY?$rW6` zrYUF&#|a<=)-^OGCznr#1rQZm!g1*hHKOW9i|PUyWN2TAe3kfyz9Gd&Q{^k45iKBA z0e;+fk16^&=D125K}RJ@t-mfi&y%{)u;^ny71HHP4s;J5ABY`%wP)GMy@r~v8srXl zvSFw_vEdsMu9D1o?Xvc>iD~3rEcgv13}`e^F8(%PRA<|nhZl-+ZHVNt<#`3wd)g%~ zIBK?Sv;U8Dgcc+c?MkJXVCnwJ-F=FpQvj;x*z4TU8@k&@efW=|O-9na$0NYixgugq z*Syi8wh(?R(!oLW8lv>L78xm5gHpAXzjJ5^!DuVl(1H_S5D(#pWLwx}H}k?OWl@|Y zEaxzx{)BvYj$?Q$L1WiAd2)~!pt|)+^&wqf^woivWD<}2)KJ|DjJo|@Ti{%tqQjH_ zW9qDhpx0#&`! zO-5YS_5{3TA?RHjHC_P~os|Zf;tj%UJ zZqF3XLFk$F4Op4GjJ+Oj<+^h268hCUmf5G-_i{O7WD9<7>a8~D3Wc82omzbKc9<;eZP3J zt0nM^aXQ2+yJ%%asJmxOzx9sxc-$4k8{kR~YVY_T8NixxbWPHsBrifE$xC8&T(e}s zOYfbu*nYjDMP{4rp6fEHYP395 z*kK0xhM&U%gPeN=;Hn*G{lhazpR*9AU0QU)SnGiZkJdQPb_zdNTvnnFW-rlF?pn>~ zvq4YdxwS+d#=lC-FB*8`XT${054&J{@h$za2b6E8x`uq`C4GuEZlxb9gK+AJxA%F9sBvi{m3lRbj?>MVQp5ny zo}cC-mtiT(JUlTk*%+7V$7*eOdnls;H2v%&KKSP4_i67WL(prcr3@xxDYTY=M^5#F zI4*YHD#V!j7}i}Zj&S8{tetfrmr4T5le#^z*gVcTBpqjwAyRtFk~_^ip_Wt6$ZyWS zxb2+;QWR&p8MB2lNr4hVwK~SPJbuqnpzVug^R89?R{g!~_3yi?NvV5Q>X?nFsj|TE)&+f$4|lpZ6Y%hFE78;7U@-JY9m&)S=Nq1&ia14*0>Qwape4ZR7|*uA19$#)=ofb`smLU)1GBpU#SxOATIa?)uUEbKTr-@6*1jP-Hi1Q2e3LCS<2S+o-O2E zKJi5gE-kCxoP5#mc)Q*bZXfClsC{v9bzg!;i-{ld~$CSstGau2_j-(I%r_NxRV8qI=h5yc+xFSbTPm9%e-1dXk64>5GaE=AYjM;NCupPFSiks__L&3t+T6jX6hz>XTj*R z@Zb=JV?$uEz(;t=MdZH+(bX+x-e|8f+2|^ohys_0J;Dbh6t!DuS|_9Hl$1J9l)&PI ziCIqdt=Qn!8>dAjWU^h6o4j={ zL6FPS-Is)NMBC;(rhiODAz%{!As2%bv5|av=7w8qVRy)prml5c^Z}Lo1UfTrvk_mt&Xii1cUBz91sXgf@5GNRvDwQ4i#F{SU*9a^=R9dqXH4q! z(fLnF)IsL=N!#$^gyY1R|I~^G8*|3E0P$EAWq>IGH=bi~pCfqK6;MT#=({dOp!^Y^ zmNfJ6&=^yVG7QtW;$UN`u1F9M2Zdn}{RLhxRZm@rqBDywbqi?s-NNpDAvU0&R# z0R`HwEPr?;ojCJ@0aSn~2tXZb`Qig1u^iLHFDAfd>_#@#3V)X&uRVsWx8pZ!wF9n- zo%QRHDDy6X*j%I23fZHKw_g|P$Id!48wct>{>_Z?PBwq!Pl;we@lQHjb5B@dp#F=s z7$AN{Cl#0MGJ)lyM3bsq;=YNIt2xEhWfl5c`u7wNj zK$pOpM>AZCFCbiqMrEdvx-45W8GG>YmZgR$5gbj+IaF5@w*D9v?VvljJ=9pCUzsqQ z$u*eH4Y%?0Vij2_*s^(E#~EUuVpFujpv=6M2waQJ37vCQj`kjnsE^UP95?DO@rej~ zG!gp%pj3OowahP-4CV<@aj;zHp_Uu%8pCkGM1K5==y|4R30NE19*@a=5aYfutLr4e z^JT;5wD8v^s2&2S|L>Hr;U1n;wjKYTV0-!DsNGc>WGw@JJ1`F?k%(-hFTntCeANv2|qdf%p>W9TRm|!Jm)^=*Y4V ze2J7u5>}^QBUg}j#r4BGy2opx`KZ`Och>XX&EGOTGxR;9zCqUo zXa8jZsoIs!ypoV*@y3YlmN$5l+?QRnCDUtNOrR2?3uX%R!$1+|(3M0_w>y3?Javh4@ZwW0#wdlzc%X?FMW_|o40grA)QP4x7CBvo|KvDCc@H}x6YFS z{p(oeAANe|JxHG#>?0TE$UmC86~&XXNIxPq9fDsycVT{f^L<%%zTU&y?1N$W(`bMX zWYng5i^MZ z&k}R(G3HO#i`nb(q7_NKXz#s^F>%oMG?XH8vr5>hKGBGeLP}i;dd`cDFy#h z!k>Vc2>W#YzMobsSLEg^7fP)hBZv4kL8vTsw__>A00Fp_6_iF;XVC5QDU5l!!-ZJP zCBx~w1pm3E2L_LOx{1UHh$hg6o5yOeoYsmVJmeujM5~EzmqvHKmz5Eh%Eb#UD)jZ`sS9ee##Fq@ zM@{U>yXq0gu7q`I)HS_9g82j&9PLEDrR&(dTTZ)RpTh za+Oe%0>GL*Zj4u2D&+tXFE;2k0R(N`Au4?GA^^NKiW`3dSvr2y>ra0u zNrg6kXSf~zZ)G94%j93(`oYHI-Ks+ZUwKf2;rFXlj4F!~hUaL2TlR_D&voq*1Qu)^ z@GkS@=OpSOs#dCX0O~cYFt5(ogP9hGkxtM&2AAzWc)cij9E!yk6pS%+qAiYR|M8A4 z$pk}>6?{K3TCYp9{UcO?6VO|n^L@3`>WN&gq>Xf8H(CqY(A%LXJk;YCOSst+c5u=i z-mTN@@l;Y&+-)s^eK-_u$zfr^F!I)QGP)@K$QLBd6qi)s-l=2U;;{F~ME+W0{rvhn zc80GznaLooVf1raa+G)14WIUyB^pR>gIUD;oSMKalN`tCxuL$Rmy@q`7Qb^*uK*|x zn|?QA&lXLW)+liTu79${nNJES(F#4J7%+h0@rU%dc8>;`vlrZ-UFhDo`$CfmHSXNt zVK>I}51bUnsv7s52@b!Aq`-6xbbkaCfO*JNeB)O-Q4`D1`OgCo0r9W7C#vX!zY;Mh z0i|&ewl)|0{{YXWDX~%?D}%fawt`=QqC`eZjcp&?~c_ zyZ55go?d*o-m20T?wXs9_TW@cWDI|t`T86$8o*TOpu4O>EyKPZMOuQb5^04DVjVtE z55-<_&Oyhw_%g!Fl~QTm5~Tup%((dNpuzaZh*!!bBdA$qphL4=A7cjmLx}%(p}&;_ zuJgX%B=C08>eCWK{A0QTiChyQne< zcPHrIC#T%$8q@7Yh8hLZbx;3dToR(D*Z;k*J!Ua9uG>N+OMXchTvxQ=P4J*06IoA! zZ$(`OUo+|cYGf@}r^#Z&f7M`*R zvVF4{VBgpsk(9e^mEJvV9#{@1ARIMt_&cU8^(x-5?-~AmZ-57;XiRI>Dbv{wvZb$P zg(k_qu|E%x_Y3XqNMzJ%2|E6M`n6nmiFI(LQ^Q#{Jht#=Y=_zs!?T0mG(gOIg)ms7 z0u-=8io%vmB8R!z=3pH?5h*AE2q^NLsd$cSG4b?BL(sd#^uzq$mz=x39zYW*%+vbt zKepvv`WSWjFZ^8?u1$A*RjHcGJQYUy3=`XKC&@W6HpV|P`2fL-4Mz;Fs8`&J;{LA$ ztTY!D+Dg8Q;t`3dGx7Y8 z{{NF0-2E#IemftwyY3?De7sW*fih1ufT!^1V1=VuL30gQLHP;TmQ=VOpbZts9Y5p9>g#jH#1+b~jnOhC{Ycz?7f=#7Gb&v^2ciOr z#2??qbGmA+^l3ITgSo!Ms0tryl$sI#{#aus3E!WW(6e7xVA?t(;*=kaz)4F@OFNCg z)d@IOZ92b>ka{l#Ek56@(B*t}$Okg^jl0T-%l!mi?q`g%J>OI56`$pSZ+N6cXEbWk z!;@i+K6p%kChoY<5Xx)tB+p=#)PmF~MxjTVzQ>^Gz4;|M5&DsapB2=sif9LId4a_J z`s)}z0*fR>P)ZL(`CP2x4zI@fUXzlOTdQ*(xmXG_I^M&ufyiXP|Gp-lX&!X#XR2Mv zwXEY!rSe60G7HVhjK_P#i6Kb|ouvsWa>m=4j3tLJ?@-@LM4jDu;k95wd#i1e9}o`{t#>c@PllZFN~vYEq@3M6!Ev5E~kYzY64iSMo)6oSqxsRN%=y4CHx|g z*pJx$bQ>F4+wNJ%{SZ%r88U6el1JRUJ!fZ6wv6^JCFLwz1_WS4)7dz3M1~(SMSTPl zA`e;=pX1-J<14vU`Z7^_Gn8nVL^`qdaLaB)Cv85_*~p7O_U|r3R`B-_zpO6O=;eB6 zT__z|_J6@X_x}U?c;l7Im}dcqY&_tfyJcx`NHPx*Zwl-(bILJfw3K3>`4_t!(2}^C zNG&z-pEe1n#a~CZ zi8030nRM}@k71z^b&Wml!h!}Va z;-XnKU<`E)d<+*3*z>!>M(?+S6;*aM@K&Bb@gT@OPTNMwz9|J7jmZkFf!Ixt0jA#p z*G&^-nYV}Q_k=03P4I@vp%A-h@7M5Iqz`^}n|8JM!iru>wLK!p`Q-khawK-W3Lg&Y7jR^8_gLghF93QwG`v#09et zaDo#M`~;n?yX>}nx)^`&H#?ehuW{-89oPFzj|`FFW9yl1=OoZ~2*3zm?UwNu&*Pm= zn~S<$f5m?XMzH9*zsK-dQzK|8a~1cZEMmBo3SID)^OFZcE_rQYe|22ppvs)?*3INt zvG?k4!oA5VY93`viMoFNiIAQ;d`up1L2Gy~hsIKId?B}mV}wecHB=45GqK)4;d2q= zt%P#hv2NoL(I+Q1@OTvT^5`XL*z+w{wgvTeL#D4Jw}-h&@rfaW|uc|5&KVwn6F_GRiIsXDs+0{9||K99;9YT0m{0#FQulFV33@~9b z2n=RJ#=9GfJ_cv&A>S!F#q)D-8Ri+2&S-Kl2R>O)M4Ua~^i1)+X#>v=5)Hlt>6gS4 zb@Q&gG70CM~@#Pkb+@MU*!5U* z>Wz)(RXWD4lAY&fq1CmzN#fFmL#{2r@~M8$^5ya)LS%^hv|#~q`|vIaXw~sg|48&h zex{|N2etb4#ub@l25f*)*dNfN-BY==nJt1l*@4_;8kSj{dK?8uu35(gjp@X$0X(%q zA<%bFelw%B4C>rL&|I^l8+X{4_ZJm463}Fq%*9F;n11>b9N#lB@ivw!k2&(+Q0e$p zOGMuH44_17eX-nnk86?7Af|4xp%({Fv+QokIZ+=#}|JZ6!}qi;`H8yCX$(#J79W< z*P$y&KZb&a)cMNR`a;e1l3F>Q>htA!t5CPYSQRX9?*~_@RT3x|3F}QXiWxDiA|2D% z?gxY^eXKXdY*5)5mE-uO_EUdNI2&>D_-wQKI&@3-=w)`Taf@p8esDqd8q&lG%*f`hwnmv5!)T^-hf1P(gW*$ z_ac0jtqN$YgfEG>*`Iz@-^5(%(o}x;DYD{&#K+wsi+OFLe(AH}-52GZN!E%z7d9BR z$`Qs~gauyhQ=dUyp!$=APWywf^)X(VMFO?frKc_vmtQpGADXZm)DxyEm|7-;;V#Lt zpD+O!E*B@r<|a(e2$O^zPkzf-N$&tW#3|60my?GQj|K&jYwd~r=LDL(zbX8UpJUsx z>cAraS@;2f#8rNE_)PWEpy55#wnjm)f!;%IC{phAG1_^>^ZsoNJjD=a5h)8Ck6NSvqV7AG?|N0_{*FkIP z_86Y!0dI^)EsvfQ-Z*mcy5`Vv5F4W~4t$!9pMCaXlEaA-RKBL|(U_O0=B*``|2(&Z zv)efA-H_FPVxlmj=Q7*7yW`Ga#X+ZPoRi{tjr36vZIfk)&IBLtp}O?xESLTJI@AH` z#{aBMK>J6KKH>P@4mn^h$F=a1b+C;;TdLCQRD4wCF;F*xV=3HI`@LTy_H(=P10In+ z>b^iMp!h$iiv2?H_V)S=MfteT0lnxf#A-97r^!o3r?y5O&;NA)t`zYL0DUfd)hYT` z9S8*4l~o)o>Rxl*j>XPa=#SKh?ex((Ye%E5G}-*~9DU4veT$w8xs_$}>K}CIh7re? z<+NeT@C)hYjs{(N)#fcm)kY_Y6?m#m$gbZ-n3wVM2w34{XG{)Z!-_)_ZhS zfd5L4yzsPwkZ)BOIPKQxopYJ1tI02!Fx|*!fJ&1OfJIn|?e+5}ui-bk&GZ=0Ejwhz zh1hATRuodedzJr(6eRGp++nh;`BiaapZiFs@6`G9qBgaePeJrF+L8fNZ=dWZMvKes zvdC<|39k}Ur6#U$oNF$-_ki)^?d5crM}VIfx@rTNTRu^#S6O@sps{`sTQA4>r*iak zsYC-(>b8Mg9k{}$?v%UPFlu{v;VBUDO6{hS!ED~Hc1{HzxhRe%*HynJw{_yC)k@x} z{~MM+_p!MD;548^A@$|C3mPh5zTTh7`Jp(-YU}HGDI=QBO$3ZA?`3eug@J``mSm32ZKXxWc#hWrc#hgPP#+N%u`t91{ z=J3VauSnb8)Cs$0xO3o-cAq%3Xf_Z1ca1w5iSm*t!$&RYDij2$XTDR&bw`Tk^zKaL z7ZFnrRvyAWc}|;pcUBnJ7C4L^@_8=$-fDXkMZPf-fn2Tvc8>c~xpa+$oEPN_sslT0 zTQ2R^-Gm$m=XO?9c(fYd79Ta*&uKL|P5fGad{j1+yg&7$_sBC3|1l~M;$o=!xF@%E zE5#21&&#Ydr|r>y8nA>Yo1@R_*=?bRwI-c%*H@@ps)UqFpIs{57N=I;jz7 zdL~EE6RzNEiDwwoW`{9@&5phLp~(nNVQnDBdBp#G&1%Il*Fg+$BMNoQzZ&`adyYX| z272AS{NLDq6!n_=1#96O}4npNX`aeoFw|plBp1T?QmERaA zMq%%7`(o)Pu}=VtS*rWHH6~8JqaQmR9t`V$_&ns*;8!s>vBS8-#BU2zWe_>+yj)wY z-YK?}rI_u*Z(Dl&>j{glDE+SguL1P~J`eWj-b6LpJ6D27jwj1~vGZyH{U*ZfEgGkg zgOijWrVqugOS0=LBb`;X^mVdr2#xyhnRA=G)sL4G_{{UsXR}1WRXtBkp~bV0fC*W^ zG{R-OZTA%U!D^pmCpBGRI~30e6q+#zM_#V{p-|UF1>SbPVhtY*43rKoo(#TlpVBcE z-+|I_BA__2fUXDkC5q>I@C3FH8bT-dQ4*_2sUb!j0)5s?TqYYq_NuJ!DN-gZ`aAm0 z&x9tVR;3=e%ax@KGel!SfhWk z6LIyG5Tfn=c|=oE5<5;zt&wrtolvneStElTM?BAE<`n`IY@8)336+_fI{t$yA^t<2 zJhx|=C)si3UI#d%_^0?tzx0|2A|{-r)YpH|M2o3Mzw|3C3ri+7rnJ*dz1n6kPRJI{ zIz{b+->6>CLfaZVq#EOwnfspAMrrzYyg#}fQ?~g?99tPUtBkG_#nbZq588~^3QU;w z+tv=7!n0QMPyt(BZSTcI_+thC_dva$pI%EIyh7hzqbPT-0eZVPJ!^nN(h~H_ehZsj z-Ktrk)K80ZIy#_KJ%e6}*LT7-J-@S;zwHTH*yF&qLtKS-=i&zdDG38>|lCS@!LL-x>gpP+B z;JAE+cw~*lAu{H{8@lz7WN2ilK-iKA+`=P!cd=84hHQZHA5mNp-QnkvSElcI3!;6z z!$?Aynw@Vy3jKB8H20Y7WYLMGbB2g#A1aJO8ISy1JCy#?T)nZ5Rq;GuDnL)=E%;Af zpULLAn0RN2`&;+kgor3zkut6NjlH^9XcO4D(`FwBcj{00=CBfq5qoq2u+qN3#%~=` zn>$V0mwunF)C(wEJv1H8YEU%w?bUViCkzbU2IhMO9>uOmJ>phtHlt;;lF{8OxW}S% ztG~+m@q1t4sYV%{Vtk!9s%58=7pAFG3M;Q+rM>S~ky5@p^+gqRecLt;xD&%bk~^UJ znBIOPBSPsO!r80m9PXXDd@0vdHFbgxWQ}ci}r!$i9Tlv{J`{))}?B)QHo5;vY<}{4kjDV<%4hKwIb4Xu$zJJV~YoRE;h~cldXCI=bFvDzRo|h6qD(_XmZ3P7M0eSTdT_6 zKc`6Y5REiyUo%BIoRCm~G-G{jf=e6Z`aGs=j~)(3hwvSelV3JFX0;EFeCky$TV^(Y zOhF+HDaXmr4-2Cz9*A>*oVu>ng>Ft-CeKg-rFyl7O3JZM+tpq$;j^puS1TT=%^c(t zJ(|Z$hN2hu$N#zS6vpdqiQqbtL!p1G=PEnUZ6mrYuNXsU4Hw6YK!m}t8k@?~%j@&c zk67PhR5}0o)l0hf2{t*S%yRFsevZxZoUCqHtRYUaxWoE20e(+s_<8Ci#tL!Vjrw6D zu5nuXUD$jSA25+>bSEY9iO5?Kb6?8)48@dE)`>OLwr{`7`rawN??ZU^5&4rxY{_h} z4W6$BkN=iW2Zi2N3BKg1pqzh32z36}sI~vE!Z2G1ez5x2u}#`N)hN*SIGeAuHj zFNG?E&zyt@53Oi=Bvx~}nBn8%DkNW15RbNmc|B728z`7)UfM-sRwoTAlpm&`_~U!v zN>NRyq@`lJmLzk^s!tmY>es3C3Roap@0rA&rB~!hich=>?&2qjCS_LWtca5ONT1(W zD9+uu6o;mdrWgA1SEpAwWm4JlQ6^JBt4ZhW&9f6;?Ng0BiR8;!6O+klrn4Oy?H^); zq#PC5LeA9(#l3=uA;@uE`~rMD?587fa`tv(zIC(Bqvi#OUlOcq9VU`+XfTmhp<}yw zom&KEMD0U;8x%9e7Ptv*eyvXOid{nmo`wZKjpBQR@L}2;OsRf7AG)v9EM=1=T;?1f>yfiZ)kQv1Xy;4^~@LA2#M$F;y#bFboMXCXaVp@O!mqF8K z5=rT;pW?Q-`TX#%z%b_&@8y^R_9^Ai9|m^iobI8yJK)~&hBY7xO1mw@6LlMQ&IQw zRYd%k2O4eIR7F~$9&S>AD3|uXe?we2VUxIcoqOYzo5_BwErz)}?N;4I5 zoK;=`+mci*IgI@+3n#VD^`@v140WwE4NJbermQ@qF$cFbR=?v9$0 zF3FIK(&)2Y-MkwUIq94n_9IKmG3ra%UHb0Wn=8hoks2sg`FgleQr=yYsuMS;C=}jj zC~+m)Z|)4cj%&XWvn7>=?OV@S#9ibUDkXmwl-is+O5!Zb&2$oo-F>_}JvoNY!cH|i zA5rK3QrM@~wC8u+Z+ZFm-Rt_gNp#IBxhc_ScR&WYHP`zNFG`B$ErFR|TZM)Ve~~{n ziql;iXXQ{;X*%{}?ERMCnq?!@#Yko)7>J7hI=fK)Dj?k-TctHh;jBuvAhktIo7+o4 z&wGyOi>cp8dtVTzmO+3DEdsNa%2AvM%}2B($@8WyU}jHLfbUdsy0zC(^Vda1PORuk z6lcvx;e`}6x}^6Tw9>140cRVl*6|wDe=3t$8H-^1EZn4@^@jAT^r=mj{`|C-kBKhs ze?o%g>JU9z)M-fsF$`PI&o@L^{|!4j#zRLhAwbRi1iijxarta9dH!?4MvmApSFa(U zNofu2O;ya)egaH4W`AsMnbaX-T7YA}(D{vibL*G;p^6-%$Wp##6>TGY5*x#82GMmM zWDa(%Q@wXQSVz6>OA?drR47H@be88lDbEk1<-^Ju{c(+ndxEMPvl3)X(f8hLi=bfN z9A9||n^tr9ld)Vg4!C&xd9uP(W5HecGKS=7F@sO2++_X(!^4k5b%G@d?r;6hGcIo~ zjz0Ta%ltW;)1ezl2X?jdsGR$USH<($j~7j!hzHHzW&LWvXrP4c-n8@$I{)In9Y$co zyCDZxiodhU?Uiw>TV;@$vWA@L!*D7|FT_!8wQ>VLR?+n;wX4$Y*2)-o|e8MWir)Uz&+w-eM}MqBVq?QY+Ef8`6=s@+XZ z{d&CnN9$&+=FlQD%Lmn<4_vUFv39Vp3kH*ky=dLFg9bg-RLUCa8GR=I%|Ow-!GV>Q zZ}@Nhe*R0|Z7-^@55m4En54r*c3$nuz70te{1`V$Gn%5{Z-Z|chn3sbJxxp zTailpd%&+VFC43T2_(iXhG)OCJ@?!xYLY@f1$N5tQ1C$K?$nvnic3>QN_QJ|c%=rj zia#Xt%IMdv(Uz?(vAU;jo7P6IiG<(Sq?_ZHJ3QI$N82Tqs%#=eU-vjqwr1{Je&l5s z*}pSbL>(caKsuf<1kJ63n^KHh`J~yFXoT6TH@9x>lC6gwQ2toAXPJWVCQMF`Vs*ujmxkKqQ$BKW&w= z{wKJa`#OhWIi69#tV?IKn~cPe;0jp%ZsNnUWD~C?jkbEqZMs02%)g^aycw#e`xCO9 z6!~`HaBBi(U9R@`_V?G>L#?MURR5~_tB47g_p1}X+@W_iweh)Z9$GNJ-n zM$!rMyChHC*#IU#wwF1z?;P*Wg|N9n+FF0oxZ|sIQz{3=)ck=KYQAxmMRm`L2tI^g`erbKC!L;DrzWJ>?w)%_)l2nD{LtKZ2QV+H}>`&$OC zZqiF}y=p8EFp62N*XTeb3$={}W}zlPq0^-Y9kP9!<|QwA`_)|A$?=4PyDs5QFOSz_ z69w@Xsu8%8-|7zq81(Ey%zcy;&H_rP1EQ0Mxtx5Cw=g?y^*G{S{kSFkdb`U)UR}ay zvX`-SNpoL7bFBDQL)QzNh&kKjp66-xctazilbgg~j4yaCf5e69cxh(k zKjz5*Mie$aBN`0J6I_n4$sY(r+QCqTMJY1oA-OO1@-qU;42Vuxn#%EU-+5KU-uOMF zL7C-PX9_FvzTC^mDP7>Wvnm^JRA9o3@_6=I*4Qh$|(*R!G%r%;MJwz$Wix;ITb)+4j$A;^+FBb`i>a5IsP0?$2RYw6Ww^soU?@@~mB!=g=XI*BZB+=3P zvxzyW+#Sdvk2#Qa&@-ASL!f??byo}A9pRSi?vv|_`2%$NrpaqpUA))SA( zTbWwj8NHwRyd$kiRn6sv%6qC`tet!L*CT&+1;w+i?M}vIjfN#mc(_}wimmfrdfNlPI`GLY1k|=IdgZZ2An!i-epZs zkBMW4-5#~D|LT&ot=^%A{RII4A4Pl9L6FiA`Nw=u_c^~}klfiX zqw5O20CEQ7LaeU>8(p421%9pMR=T~rdXfh#+0ULiAXNEO71UFI>>A6r#8xlctxTnd*aiXq~!GHh7% zDQqSKGI-#0T);Aeg=yS$UtYS`xmrgu0k(3~0t6q9r}G#WxA3@|85pB+mtXvx(-T+v zIOp9MzZyz<;W8GV1D5wx-Jg_M{H))cTbQjNPJ?NBAy(paI$@|Tb7$wSjoB}{f2)Lj ztCBu_dwCQ@rFy^X7Tk4tl5T#ywtl(m{M{jz+48;pZ;Ke1GTg%Vz_3}P;t>x0P(=zB};AdSImG+>XNWNx1C*9UW$`{r~}tC*7U zxVr+BUChdS;lp3(Y*b1jOSc9uAm0O?_;5xYL_MVomK9+nu{4;Li&J^x$B)bvJ1Nae zpce&YP)QwVXMD`#Ia>t)9fmj#iAh+u;y<}wZO<)S5A$?pulZ^3ea=vcz!8N3bH`Mo zcUUKvUc%|06?T7_uhVNCDOnY)fuEBNWSgd7Yl;}HZU_j;60~u2oy-J|n0rP=vD8cy zhjnft&-R+`Ohx#9ZQ!X z7NJs$kH|b!zxGu=+4^h9oo~uXLLHD_Z!?0NC;M_ogzW=wTs0hdM}$V16y#Nx%$#>A z!a8ws8?VzAjg^IAY;&A>!_shb>A>Md^xGBmeV!lJ_TLvD7+Uwqk3))b;k1ui{6X9@9&va9r{!{8O?L zvUZ?%^p)a{QH-z(Za{&e-^C?iu!crZD+L~=yP%~jwB6&X-kL_WJyiA^zCBo@j}x3C<&C*rV=8Yvxjx4K!Nb&KXEMTzcCllPwAI$*OKG2P zfbG3!k-$gJuP_gmmoIHRIyE65mg}Y>E>a&!ygUC>8WTR^^Xyk;Oby}Dd^o!#=$?dB zHcgtQ2$eGS!S=iJx|JQ3&G%ONzjvC9t(=^}$8#=rzwL49p-g}3SOSqIH$nBsr*hJ0 zVNz70vrLcX_m`G!Ve8DsV(kRaOPXd@&n3*n*Vkzmnz0|V4lhVDk+-_mfUvS{Q!8V#vI;tK{~0JSFYP1aE-h zjcPuVGBRTO&()Wjws0@SKWS^*r*_GJ#MhmT1mSBWtI`rC&%jAQb(O>0K(RT%edgo( zJ%d3d6`J7GxdY#P%R9EBxW+?S{O(Nj8Jl%4Bn@j}$lt~Mz~x8@y9$BFuhF7Q@mSN% zRubNrK#7b+)WYqK-l%S6%EXw60=>8_XsLwfyJ-m<)86+Jv#$DhK5S19}zoW^Fy zCZ*X!`0@+LQ9EZP{ZlNtrD6ArkgY>_e0}7PU*Qn@WH9vn>tUPO9{W82yl#0_aNG7n z01HS05lvv@cp_qoQ}&S51a9*`mvZTiCZHyye&Z6q$P=;OpInM;&bxiRy!uHaXF0x* z&I}@w+5C3#RpqWPa_bBvwj9FVJ)(~NzWU=r`j~y0@QhsPrYIFSW@Kf3nK>yXZEDo@ zvvD+#t!GpC)h^~gM1YWFv2sMKGwpKkb^C~ym)<32^V&v5cbbP`ve@I}(ESBl)Svt& z-sL0jUf7>4Li3HElI+WKtFTZQ?Z9sz&W#}BkLxKu{`HlCDPW#;?JH7JC*PXz;-GsC)>6fwp+hjA>zjVZ5nSSO|)H(yX72_6ko-9 z9K2)0(3+xJmrEn~ex^uAua9Fyscw2R*$+-FCJE~mH`VvI-G+s-o=y5rZn^Hf zY*!VQJc*Y#&zXvAGZ4hlCc+>{RUXqfAX+Z+O6mZk#$ioxNs|?J~@DL3!`J~u)G?VL=Z7BeQx5hI~yotj-o1lSgD^&XcYMVrC8>3xzAosOHmBvYp z3I&Ixl}=g9t9bx9Zjsjm%LWR&2ezvY+W!{aB^#8w{*NNlSZMAj7k zCYYg56PY;rb67NT_)LqMNPm0;6T@i+Sw6qO^au@I{Mz&p2!vXO+g@UNWJSB53;2oT zZi*@~u-iNqhXPFKA6ELTeS@=xdF}{mQohkEQQ@|y13k}G5{9dNFuwOXQ2)Hl_?6EZ z0>T1v>F&CIvA?(3RrA0ha`yLngtg2ivKw$n@|MBp5rQOrNU2rnJP{pvakL33-&yB_ zPffmdP7J>0psCHBur*f>I1OBox>9dHuk^~jtoT$sh#X_Ri-s(#058CBv^18raCQ@! zEB^5o+&P&xoIUUTJw4jWR@)xWRNP)`bnTLCkGB(3GU_&MEi8KK^F)zM44{&?3CC*- zO3>!=@w}$(9v`ErhmQ`!UWZp<|IVSyjJLI?eDDjJfhE6g6E7q2E);*$TLeZ90`r6L z=kl3h=WTSM$*pQ3ij}J`g5~;Gj53zp6}P-N1NgyhiZy>^@I3T&;OwA^N%Qdpk@AAV%!|`^w|pQ3QS)CZg*hnrHG$c~?_P@8`Lkg<|wJb?yb1ja&yd}>S&A4XpIrR2T5A5x@ z5I=mQ1?t(~!yByWzV=|g9xGI6N)=Dp#bCpDlh6IFO?yWYy@Oydk z&+uc~ms%Y|XQGKZ`%}j`=2yTSD3UN=w%9+KmTj-`>pxUWy|(lCB43Y2a#J$Qa9F>iv!CFHZah| zf1T!26?J`(d^{#{Nkf8C!tJu9Sj5)df;hsvs5izl<0O!WY4bgE+Qi)w# zumqFQfq|g!8obEHrD($R$5KoEJ`G^Zk|oVEp4DZ+ZA3J)-g!4AfQ$~;Rl)d90y8O% z{iny2$;b<#>C3zWl=S=_cEf^Ox(S|>k#H2!yFpx$A-T@~l+OgvT{nYYCE}EN09_E4 zTR5~%^1AT6uoy%~ja$9Z!bQrurmV#W&PgjL0hMmv5y3g)iHcN#s5F%hQUi&Kh=_nllP)SEz4s8LC@8&44bnSEmlCRUh&1Vh z5FpYMYJdd3i~F4OKHo2u1Tfd$d)AsYYi47N1r&_t&k#auS5jdFHjPc$Q~m6_muYn} zIDBNnza!9Zdh5}a4}aAf&@8Kuk6D=AQbba5-DY@>Sh4zo-VOBXgeWnF!>VjQ{=;DAFI`ZDcJ%wREeZ%99-e=m;K7UI^;_qB zYIFSHBwNk-W{*EFO$_H#Nt&2h%VdKDq5pm-d5N<{Q5K)ZRN-0sdOWnnDjumW`+eJx zC^G);ke=gD#;GcvhdL+a@GY&)68x!>!!kNVa&9spz^mnqXY|Hzd+K4>H4Mo&>rXCw z+mez_9ur!qk!!!81ipV*=O+la(oLQ$V2^k&(|lko)VxhdWhC_rjEXk7l@Fl_IUr+V zT_qQETrQuxJ9h5iN{|38@+a<8(enN&(;lPkMu-ibEhzUF%SXPHatFzCZx4BCk-T@_ z#9Q4=T-2?=`o;xJ!SN7W~gHCIR-NDss1`?48%ix3=MHUA%`|Ps2|yAb`mSiAPq` z>{}9Csb8g16>w=rI>Va(?Zv*bcm++aTmVB~Kdd-Dwn#!d{nOL0%?B58uDkSFQZUa4*u0oxl+#=6 zjpwo8e&h>bIw-p-McKc^v^D0Qa$8SF&zrRu6 zf0WyxX8Mr{& zWlxHhi>%4;KklaXSb-*u!sR?e_$iuE+GuPQtbSB!jM-+ZHS)#4N5l1{w%n$1M(K#1 zlH}~mMBg1P8PiXrAO6;F5QWRE5rv%x11htgZJOnE-3s@KXj+q1naPof3$4qp-tub( z@tBqUP=xT2Wn#5u0eW@SWuXH!N-)=E3jTUKv`Y20693v4kMt3T{k)+F4~&gSt1-$) zxNn9y_{`GIHnl7ST>+2j`&I(~leptFu`5?{netq&Me}kcqXmT*9w8d)kZ5T(f& z?mL-~e+ZeO)VRxiC;mz0g_}tjllUE?v^(7((CN7~_wqCgUslbQ;(FL6#0!@da>Le+ z*M7yk*ZCW7)xk@_zZruRWL44Pz{W5)4vOuy2xlcPs!-L|C zKw2pA^>#-Psjll=9XXYc)PFAg!TodMqU$b&1W~f1(bMf53a>a*2OaF!p{nTJg0_!h z^P&FGDIzr0y-}cP{LmY7;Ur3x$*Rkz*X6XTz;lhyq_-IsEPIrZbU|VLY#_*nGnBh( zD#s_@*=c88YFy3DM1`_@+04yR*UfBYzdk>UF(|9h$Xp&3ELW{_-mU7p&P4^@RnU+k z%f;}E=WF2pYKwFIIuphjl8OhX%9lWSNA_CB_Id=YIm|c=(AIR zxs0=ee(^ZVT9=U_2F*AoYU}qIWe%Af&^YO2fyPJ%_Gh%TJAb@zds>pwsiY)n&$}z5 zl5;;b#LAPYGPsuECFFZFAB?1TEfizn4fJg&SJxho9$a08Gep-^tHF4GVy}Cqwd_&E z7qchSz4hxqh<)ANU(Iwr(;?T|YqFl2WMdl^uScI(99jJ4e*KpveIlpE+vc#a){mg{ zug-Cwke4vVghhzkD>c`lRBo(NSBA+&zJ;YMX0oe-2H$;QO+r$%EHbSVwEIOAQMYGd zv%M-x>NuzM_2f$3d&Je)ab=32x5o3fI}+5ih-)bi8wosQF{^x?|m)!1DMe+{X#={)SlzAON*{Whh3N3sK2jPw`Lz_YJ5Ks2 zx?+sGpp?L#$F4+3qOBDr*Lh)IVS|$#kJ}SQ?%i%5 z9pOVi?{Z^jHz4$NJ7OC=@7?2Jz$D;O1a36vGu-JKv;gI`ioT`ltvv$^$9bEC7Jf?T zX0t(?6~u91TiGL<4&m*)dmFZ#cx{H;w+5NsF-~Ej$Rb_B9iUrOffvEWtUnVimQ)B? zn46B(n%KPB!@I+^zxgZnMQ3yGz&2~vW70qOyI%Vk0ebiyy)h!>kUnIW;4wQp;L4P^ zbP3UNg~W{L&s$&KPl*RtawTt|!|?k;E9a^DgE#14Z6LOCz@8NSnQIF`jE4s)A5NxI zk)6kk!FI^#4Nu1D74HSEN3optF(?y`+*8Rpb?csMDE8nds^05=es^d-)rmCSeMQkX zQB&W@>LV2;Bd3TBVW+wK+EV7Ty`bIFb~izoo1=CxJrB(j`WDw3-4x@S~mxjB1j z@+%!|MZpaM(_KRjnjVf8?v*iuyT=+< z`@Kf81+Qj>y-nq9rkC#J$5Io!u~XA+qW30!P1njP_MKgf0hy3ey9PVcD=g%EUs~7- zMJyUQVX9tL@Mcg-<6OZio(?z^Y9vjES^%A62OoGBR)MhsY5u#TrgpFuJ+(q$kCWa# z81&SX!*K-`*IBa@_S$qy5`O*mDWQyN={L0*a2Ye(#80a2Ju=ZT0X4O1?MrL%0wMK! z&8>9s`)l=giq|qicgL>ZI9in#1L(`7nVX;^EB{cGpB+EPS6Cy4bN>6knGXcb>5njEv2wVeD~Sl)j&B|h z5S8SdMUZg4h)*|U@9{+B@esU3K9o4$^$!G0m~8&5sb5a3&E>Bra-R zh5pj%Rn}5LY}c=6*9FLrjq6Ic3GG?;aE=rE1G^I~oD9F^Lk$M;>?^r&g!~ow8zWMr z;>8RKL&AO!r3HRj;ux8&q8VOFR3cqP)HT1e0{i+ht%MyE+@AxsP=Dh8MHXu6U7Xiv zc#JX-Fys@?uXJ)5No9Tm7SUCjN&@cgP6=`UZ_G|>ZOMS)nx@?wrw2N#dHg*P6%L7a z>yLXoojz5rYR5B*92Q$LOT;c7#sKuOh6^p7uxDo+ge|P<8vR+!nRwFA+ILrwO4iC5 zK3`cXBKLHMkB1hM80NlkT;7_~JeeNg{QxX}pzscq0&((czj{2O^kUzZcpsiX)qI(9 z5s9!&PY&o&dRcep)L4Wz5hrJ+g>*7TjBQl0kS9!Kc7uT(Y6|R7q9Gyh=-SE1bO``o z*^*J|_cl~Ws+Knub*D5fw_{7=voBM%ebl5b$N9=`cxrls1&`+(7FM&~zv z=-h9x^5gymiR_Ug2W{~PHa51*C)ugQ!NU&V5S|Ah>k4%;`%_f&eSG{kHY)Z_zh`hCMn zp{bcKoj54@S3B>b<(wm1>~ia5ia)h-TWe!O1N^k*{@4m+&P1>yKdy?jY)$_LzVTIp zII{a%ae!R6Ul6Q@5=Q6s3vKsK0HPN6q|AmO51p)t7eCaDH6GVy37HTTq*@wT6oZm8 z-NinuG3Na+d-8+@-hKC878l7~F%jF71H)CCQ6u|ud$0?8!E6n(#b(Zii;a&F|Z~-S|Bh>zTTJF3G+a?B<)O35bZyUJ2NxLYhmInsk86FO-Lc0N ztvRqd+J)-tWUD$7g|CltZzB2zb`o20pmYPx2y%zlAlF8ggWDfo#Ft@ATP=^1Kq;ac zmOi0C119*++LFVtC-!3M1Aw$_?h_4nL53lt4lPQ|qQ>{hUq{!6enO&03mo!wPZ ztbO%=clLs1qongLf?WZmg1xEog8)$IF5LRJZUfno+?S7^)$bTpupItSgt;a(-qnud zkbCCd7);iI`={uYLCi#>3_Mr)plgf5bhXMmyU)^eOu$Vo+85VC)CWqZy}nlSteqGw zA~uf?Z_=5*qA@A-dqu;%g4rW?a6HszT_=S^okon`H)t&n=eN8YKfJ*SfXJAc6l`U< zFVEfQI6J<1n>YKWD}Z;kXnVXs&T11c?WyU9>sNq9A+&r<_pAlRlFgxaJuQN&y93PS zaI;$Gb>;z!3Mi`FyM=`})L9f$;=W(1g}SR%s7dE_Exo1rX3|N&!`|~g)oV7)A@@y} zHJrw@F+JI%ihq(_MV;=~2HoP%Z5nvZ9~dgeV(S|nsdCzkw~XWDIs6ZL7Mhu=s&8=k z=4w89jCyVmKb{l*36_3 z*{Z|3EQl9>>;l1*>0o3B(BJeglJpXBkHWg*+qX*ht!z^G!frs0_&p`;3CWKu8wZts zERS$Xk6mm&&+2HutU^Cb^pim7pcF|piUZiz0Zkp)L*FTKT#4C@GC74;B+Z3d-P4%e z509P0VE`crL|wG3iEQ=lJZ4oo6C3`~TP*u8;a8`hm*&*~VrPB&`ITN1vrli%Qh}<- z^X!kNyPBS|{4cbwz5&R?RykPTZ6j))`Ir}DE7Yx>=dxncSN1aR{-JJniD5b&rqqM5 z)+e2)PQ5Q!ev19t&^7VH4t;`ltD@OQ<4> z7;FX{fchv;7=fk`etOf9N{P4H@CdsI+QXnr2zj&FL6FgSFXN#8=#~ZC@ml!RUu@5C zDuh||Lxn*gh-ns?3Qz>ozPs;?c)rrqmjGOQM|pqwRe^XkpXjgZ%QQwXC%qYm*M6Bp z2jG9);e0B}@<(MLyCAZ)t5&U@Gm2{qwZihB;3gq9?^lezsZ((l&K#(-1&`nB5CBkm zeMS7H(%+kfw&J>H%pdr|Z;9WzTw9*~EzkXCkkaA$=N5?WCKXr*=ZB?Q>$KL@5Xg9n1FCe+=Rk3<`WK6KWxqrbB$gQ>CZ^nUc(hhnR;DSuvthAk z|BV*{^*r_6TNM;7y2xtyYC!JIWBR-5Wv@Ep9>f?+&gsqs+s-FD*QFOm;bUTX%fjs3 zddwq?w`Ie9G5cbrE3EO@VdUB;-vn(P>fXE_b2!Q3T}C6YLhAZYo=C%=+Hjv%hOMM#rL zmlPT@+^M(4ecHU__1z88s+p$_FrdO_jM}NxankHU(CObke!`-&vYdn$&FA^9$$>Ua zt<76jV)JXP(Xu5;N@*>c?=ASUfUW6ieiMaj@`7fr`v^B<+7h|8^y2M~M!@-iRlMgb zL%^B?LCI}&s4LhCxE(f2{%=cDyO^0!^{&h)ShOi7aLR8#DQ~PGkGt&T7%6aFPjB9F zC)ELUakMZ?U*Bi5+H8cEyiq%wS^9JN@-W_F54f(oz~BFT^~9UdBEUtboQQ`Z;oDz0 zAj_}!diz9+&RSl5N!WL3uKPb(3xM0aLo2_C{+mkwL$#S$6x4rB82DFO??=}qjS}`D zwX>7<5jb2888MHQ{|9(2R8&%1p2#bTZ(lP#zCN7Wp_j$ABJLxZ+a;!c?j8n~bHufk z`_y>nvOwup!-0s~a#CJ?7ue_e!wnW=$6M92`;daA1i;%{-tx#Cu@3dy9SR4Zbvi$!X;?`4fu^p)iEYbIx(P_~Z8v^7su z@F{*L7sqG?(sNP70f$dZCtk-Ts{wR_TAB(c-$X($jCULZth=l?y&k0(T^D!8dp)iTUmttMn8*5$$MrXjycn%)oj5hdbG~CpI`9Oi z*)uN{^G+#B;fA>s-0}VDfPy#*1TiKFbp@Z~mey&+SmFga+_6-BiNZ}^w?eac5rrKG zlcpv|bWm$iN8v-&iSKNP-)#?SFrEmtj;?Wfjt-HDOL)%{$u-Hi@fN&eY+M-0IKt_X z8R0GZ;Fjp9sjIImJ4}6V-N3Kal9~hY=#*|+t8B+%C|ZhbyPZ;uwG_tOL(b<(@{;MH zh`*l`>|G;9-K&tCtEzhcg5ZO4+-&kW8OLDy9C1E5_8XIuc^)$n2Y0ESg|mtGipkXX zo9pXz*Yz5n;38o!VWbmzSI+(mCf=u1jJie?=ak2$XKn7)*dv?5vOx&49{YKEbXT(f z$}`2oY~1KYJhB9*0o&lLUbVLQY*klB%G?>H?E;tJa#QT(-3F@t^yx$^J_w=R#!Yh= zp&!6p!Cww+PQ6`((x}XSN09dZaFy^sXDiDRBccr7c0o*wsbkv*hTRR;Fd|*p?Cqw` zl2C|a)H^>x#8kYgO4B!Ew;M2HQG(AK&kQJLW{pQsZCn!+^{!?-Bx%0zKJ0?_-BSi~ z;j!B_6_a+&sl_^zm5Xh&gPJit(6w4FyV1N8kqGz#9c+L;g?t&dLcX8pjewSrOt(0c z29C;Rpury%wsU-?nLca-iQ&#j>T2!j?I}!=a-2;eHk0p|_Xkl{)iy;W~ zTC(oTAUtL0xt>EKvEIpPI%?-*_yVPoO6~v*rOTkuy6^jF^0RAB5ZKr+t@ZW#Gt!Xz$hD2G2Lf`xh}3 zvLN~CF;+TiQSJ2E8~zYhL=e)xx%obK_K2Xwt!kzzzX0ohgAlX$$1evfyB!Ta>9@Ch zZlKNT$Pv>-sF>K}aJH2>qUlwP#smoJX;xDCr?;@V*^GfpUT4;OTG2Y)3$@zcFqV*# ze|mC2yB9gVrE7MwJ!77Zv90{%P4GV+>z71lZZ@v9=1R`U@wiWvH7!2_8WEwxT9&D9 zC_|ePH#vhQ%D$2HY_6!5Gx6sCDhDw(AewUTcA0o&Hq82Y5`jjmXx=8X{Xhn7gK z8xD=%8U6g)!38)?dBx{0CY&z2S66|Xwue}x*Bzv&k@m-Ye1M-4onNi;d$s7$H< zvGBzs(bx!l$6@~K6p8rU%qtc)AZ_0YmUHUCRaMlS z%S$6gnf;+oJZY)I-6{&JB(6KM+g28bhl&{+q`!L7K=7T6%J$Qocj1dCjF5<}S`fld zn0`+4yb8mhZgYQRqTB@m}=S z*S^~Ao$pV68eyHib#7yr6CIZDO5x76ZA-iPk5Pgmm|k=+$CCZ0z7?%6aD8J`JQ5_; zJ9{~CB3`%j0iuf^B*6v&yng{f7 z@*n!;$1bP31l0rAMzwQgIW+C%8akxux^W*oxSt zA1*mA9OU8^{#+BpvtU5h@t*ZwQ@4(sbsufjRVjM{gL~f?_$U&w$6OyOR!QzmtD5)@oP@v ze}$rL@!!^fP-M8iD}?|h&B)wpt588))=c5xlNl(6Y~+gk&*WVHdA(|_dqpgx4^j8t0 z>{iZo8ofuVd)U6uroU*mpt8>vRB$QrYo5@aBY4&{pGB^Nxa;Yk@}OYHzX}T}+ZURD z@Qlx!k-qB8W<@MW`g65`#zEuyLnqHMnJdK4KuilUBHZrC88E2#GeA6?DE~Ge ztRpKL1QrlBetz4o)x46>hmqFrO zrpt#yHMq2k-=NfBj0l5EM!S1s`~D6ZVw46SmQ`=BX`c2Uw83Zsx0CV36l&Va2+EjpXN;-;u@}2pRl&A--HN%!MYY(jSbG@ujf`QO(1B+F+a#>fiB2b|8 z`kzhCens_P+17cljqb$fR#oYL@v&I-?J3 z_sz<+RlqEWnCb6T$anTp!yDw5&-bSN#we^up-ezDJ!1P%jhnSZ=5cMM0T-N@xLV$F z8P0}Q|KSiU09yQ?14Q#BWoM8EVE1OFot#eP^0@w;QA3-u@$AhskGWF!DQvAg0{e+o z*RO$C(-AB@vuJ;Ej2WG~Z^an=*2WRefFbvDZG{SLOSw@PPJbWv!)&`yK3mUV>xP?Q z9tkPSDHVswZu5>>&GtV`yXH%b4FY+2S=5or=rBMbF@RO{=U z;wh^(p}w<8BGGLh{iwxO1kSV=@0jx|bBYEfZ{h$V^q8KP!R6a!wP#9Js;r1?-^Y}0 zl(olc`CfE6@G2lUw9LQG7>hV~=+p_(uWsTIaG2=8uH8O4P50BVs~S40{~JIjl5Og{ z$9$G37R|b2AXhhILebh?;gDx}W#w%iqZe5zstjPLiS`LF?Z>F3dCvMs;c)g~LdEX5 zforeys*8n3&Xy1`c|(gNns}<~i%aSI!0EC?YNgrKmNhy7CPw_W%1d>xF?48R*sDII zf$Wvlku|+(cD>i^GBo5iI3<6sOpUfLBPCP39gVdxe345P=n3eOM6Mb%?+_>uTQ*Dt zD}XCL;$nh5-BF8TrZEa2GB>L^*VSPGS#3Gs<5BgSZ;vl= zVMS@C4-*VD3~sb23CeZj+J7#d(|2f-uw+@6SqZ~lLFWGGmmKy@`!Oy8?{Cy~>uf01 zZylHPQQb45IsN9vaO~W<&%NLC~hLtAcG4X;_0WI%rrn~Gh&O&1)x<3qiX;8=^39ox6}^|SXyaq|61wU*DXY{Sbazs zDS9miRO3GWD*!uC2XJjs7w(Za*C1 zzOsG&`sjDC`A)*a7I>D1&}$pDI&@6)A_)IF^8JTmrW0tj%A-Lui7}g1T5XY zOv^RRluz}iC?7X6c}Fy#QI_zcdUP101C*G?D$&pq`=&$wy#*jMy2_(c*v0Mp7;oe< zP(6k^=E`I-{(!v#iY2d=R2C-7yIHf*B&iAg&|yoUGtc0l{_C%w3hcC9eyZUnpGwnT z_W)jXi9O0(B>R!be+w`F{_)qE+Hk{DwDOxZlaghlW_dc#)earM`Q249nkuknB%j6e zt^k*qHKas1e`F6=j%c@LeS zFA;PYw|T=M_YmPG$q;dfmMOc2$^JQXnB_D!G5XUs;H-JrxN@8Quq#p)x_D8ZXU^Sw zyhI!^x#F#69O}x{JjuQO^2QYXjn1l?GG=HeCZz02ofDP@{Mw%V7a>W2;Gm~g8McoL zG^_J$SU9;l4nACvuKI%{YO#oj?4J4LI0-(Ibq zJ~6c;j|}Y6F(HZ2wc^SG3)G%)b-zSk;ZovhgrUXQSerx_x8xJbN=0Zj_YK5p*D8rg zgJERx5nKM}^Dgi5p9Ew8)w~BOY*CxD{0qv(XP>F(9LTNofK?+98Z$?R-X%X4)}2!E znO4zZa^^dWl^?~#zOk2kG)^B_9*22A6g6chh=Y8bCshTz`HLarlDijic~XOKT(SEH zn%X=n17kn-n$Hs7ajON&K4jA+eSGd2Q4>bdQ3SdktU0*$Di&X=6|uknHZ*m$2O^4t zI{sJ)z}c939a`*hZy1}wdvZooT_Qrhz|S(G70YiAh3o&mDS#w8EBt=PE7&@3dqbFR6>IpaYq{(J*xI%s!tGr{3sEe#jV ztI%GS%@q*Y`E7mtW`+7z&r1+HDBd22$ezb7k9T8ZZ& z)7v8)ZSLW+DcO|*f*3~YAI+^#LF18p0eFHwHjl&Fg@maHxB)+tn(6+Pu)>$VaBqi0jonZdHH5VNUgkEG$tUnoyi^c{Bw*SjBw_l5LDu0>o?ABK?3DZcZ-onDAmGX<$NP|3RC z17kgW%-h6pmv?!&!I1M{4wmX$p(g?84M{?*;p1re?q0tk`77k?smlu{WP+z<;;wG< z1|T_o-X@ILkxIS0jk>JJu2j%k;(ds$X7tfgMc~C|;uZ9J%Y7O;nAb5Y(;c!HlRZoj zwmE$5EcMovxB^)IIvS4cq}f=FnvnwWAXiXtAN!WD^);1-=ikIkO*}SqSBoVzb+h!1 zl+s)_e+fTRtq}XoK>zy66#?KU*jYTNH#b^g#R8}E1&C_-Mez6yT9rmR@Gy6M0qn7` zerb@u0{yoV1x>l0v)|bEK#Kl(DjSAq4~x|G>x4`z$D~;{-dJgsxpLkA$LOE9_JqiI z*haBu+*X|ATv@~BJ-6TIeQ3O;Pu~2(MJAelPcTCKdez7^AFm#PcT7fm4REn3>!-5| z79n#J3qXXz-*=11_ujShC&D}0b#MKfoR_MMfP{oj$N3_)dhZ1cN`83L}>N zh3jXv5{qx%4W0|G+V9hCM3BqJ<$-R_Jq1*NkAjyX1wHL?I(>X~gW~|5EBU45*k)wX zRqv318aQ|>IQyw=n%Vwn*KdsUThx8OHpfhmBBxjt2&`^ugv;^JQeB!}2W%B6`2!_ti1X2{(;1LwBTs6@fkysq(h74-C+Jy1 z303Qs?MXqv2(xYUYN44g%zhVlZz^(LCH^*91u(Eo4MeI5{ClFU*)O3zEye%1_>t06 zq6W7#Q#n5ib7lju5PUI=j{ecVb^VqrQUQaW4z)hJ(ZQn*emiuAm;QouC+&~ZM(rE6 zm_9E(V*6`KO+HxLTzYh$m3j(L@!F-YioO97=nQ-6cXdT6PSIzJ-u6I1{HBM$Mj^w{ zna3rr0*J|}aVA%!iJX>=DLt*5k)F>FUrcrQoW@xdY7cszm2E}=VW<##xcFAedu(j% zUY7oNXI@FjcCWV}?29roK82Sj^u*l&>Ft&YpEeEhom{V|z3e3-H^XS>Wnp`R-q{v) zMWolj1pZ@C#4A;=ldenb8|*!}vy$H{DqeXrCh^8;7iYOOxO4)S%^|2_gfpEWl>ym&$G>jAbk z00apgb<#t~vxDnfe@#oBRrUz@0^AWJp-y@a3Y@c<`U;+*v3-u^p7*=&kHb> zI%H0G$f8S`Nn^`1(!Fh@z4-*5V2_HULsn~~Nsmp4V^Zz$=xezUpAZK;QX)hCO;>|z zj4>Tm)30+|vh(TaKdQ29he44a&s%}wYlAPN?%@6io`F43g6eocFm2spU7!PdqT}3u zt8Zk)b}|j+++dG7Kxh2%T*S%8IWBD(c`s{`6834R7bxK#jV?l9o*wLXARk|ACB~2& zU&5gZ6GZM?;&1*!fS$)5%r`AiUqhSslpk^$=I%d(y+W_+k z{S7MXf|WFLo3Dh|6cnR9Ys^>@`=;wIwI9x3mQ^JgQlF~Uf$KMsooQwm%fR6Ch)b8? zB6;YbeaGeq?nlW>L6#WiINUHM&T`u5{*1kx@?K3J-=sN!gZ4DgDVs_6j{W*wRyfB8 z4oam7`2mVMQfxWiu>fb)Gh6pUjW8nE^-D7i&AKvGt-(wgkpl|Hi9(ZIhS)^kO=|&! z!ECET@<{;Zn4EF)>&(v5L>~m1W14&G+l2g!pI7z8Y5RCF2R`6zA80esW`i;udY?Q z-R7-70K!!^+V4$96q4+y;gp;DZ}XjINLo4@hv&dbAU4cnoQlah(5t<=Z!BrEGWw_O z%3_^;KA6?dU@F-DU1^)V2;HNdcEknNcn_y;oJt%FG1jy4&@W^?)MoH|%*tasF$oFN znXPw-jJs=z3hr@>d7W1)BKGM}^|MI|ZkijN2AcL|M7Xk2Kd=j^8rJ6XQw|FPc@Xv* z*1=q8FhAW;!e28!Xp{cy=9kw_UOc<8zA}=}7(*gn1^bzWjl0MIUjFO@FhM&9=aZvG zU8||ju^@k|sk`lQjAALt9;pTd;efc#i157M;y$G z+K@pKx&2Vsee=Z7wjpv|Dsl7gTei9ZR&_=^k)1^r&Lbu+*Te`5oy+CcT}x6%-g5(X z$Z=8B^xbXv7U2{Vw4DV8`l=?76mmozIU8_c6h75rVd)(O#ZzAH&Ips zQs4Zr^X!-JW$AqcAnhiMN`iL@|NPm%sl{&yeYZ)5$LdR=s{ldPFn_(!@#W0OW_grE z3y8$l^t%zRO*;eKNWL&;y$D8vYzPSwl7Bv;8%h&R)w z2llc&mHcLK>9G}r;HId=9txUZt-p38i5k!!Bb5u-YO?QH`n0E^!$lYS%LhkV1izv; zigbPT!$C$>VX5SIV`hXvQK8tWNP9J78qRKP@J8_T-AEOdCle9HB)x~NnwI&jhYyYX zO=<*(KO2*G??D-|r7eWpoBAV7(5PumnRyqg?w4p~(pC8To3mRNPDZ5Sbj}|8SAWMY z2wnM{$5&LDBxf_|)(jwjb7%gAQHG0rPht?4(umNp5IkJVyV1DD)%#8RaVeEY2nW4o zV=(hAR<4c*zi+3!Pv8)aH)_mI5j9efn1t#VaiPssL2R#~wq_(N2<*Kie)WnO5DtR; zrNv%D(ZzII2J5eF=dQlU88p}{ zcorXQ8Q%LxQ-v$KCUeOro+T( z>pkH>d{hVVl;WfRMx@@I^&JVf|AW2ksbSoZs>Zkr(*N6V9qhi!wZ*&wgb7&CVLpvM z<){O{AIBR!(s!gv;xuDH_DQC1xBz(Dx#VbIECQe`IIMi>w7wH&_EyI60<0+_2>FJb zp)=_N6N@30Q6cF+etTJ(cH{v$&Ghq`f_dWIjS7j{=AEkB4eZUun=eg)XZKb7ER=d; zcK4v+cz6>|QC*$h{){`u-F*g@ioKuj?%n86y4tqpYFac_CX&D-H#WtjxHu{-P*E;Z zy1Gy%Ght16Va$rmS^UdhZf%nthv-y$-r!VdQE)u1Jw_HoG)zAYynKHQX7 zV5E25VkIX4g6;y{YDM_^bs)j}1)gq4nK&q0obTd8cdFE#oi+gI?v`Da<43R?z4&7h z84ehH^~jk3(LBo!_k*(J%HS?@iM_bc@^5t#<*d{gDMUE zo?U*({a5Q$p0GDaWPTDew^9T z@aE4xt(NlY1H#6$ufd;?vS9b8q#x{Gf_Df^qIYkd9lucjFHEo(BOsYT&gkuf;<620NN{9WV4^T8W`d7HHlFRHkWdWdPaDu(!$-eR0a z{B&K0cSn66Mdh`ZnoaIs#n<9=LDt1kqyHggH zwx{t8@D}|HKbab{zu*+1r9#4b3J6DU(&gFp7WD2Ys;gdq>G)5rePf}gxYHy*c(3PG zOBo%=xzN>C+ho67*mUWtibB0URx<~`{+*W!it~8O=0I2MCv(*1=S^{wgy}}Quz7eE zw^xr7^Y|71n&hk@5SfQji|K9j{NW#aR%TDg+>L17X?^LY>BFlOam=+kdtVqcrKkWl zN8}DqzJD6#C3gfuppit=t_Tmr9o6lhPSXf3kY-K4p1Hzv-pN)X|C2H4DkEg^cF{sB zAM&v5(fhG&W716NM6fT))}`m|3B210TgkP49Mvx0u;`Qw8Z;*5azX9RC#ad;r24We zTJOSqIYkD7S`jZzM-*NGJGaGe1UMTXrMT;SK|2>Nd?ET0IyO3f>2m=l17=M(pwE2o zKntY0*SBY;?DzVl`h-tl-vpP2CQ30NmvnrQSKu?P|KJNj*`)bPvH>8L7?W!-o%21P zoU?hcY7}Z-pgZd6ffkMG5zq!i0TLCw!0!hqXOi3Of7tGEA1aS<9D&$M9hHF^KeF($ z6>FO?ZyAi|&RO7-{$^7r|F>aA1LALm<*Tg15 z?aq>-Q)>Bnr6P^X;xqo5xhveJ_ z-Uxo)dQNeDR{?t~_L%=MCPDt0M#{5H*>vCK;W|+J+wb-lk4%Go% z3+#smpCnL`V+Ru3Ka2ZLcui%~`;rm5`|pO(qk(0gw@ea$4+V(>9k zHvr{TqGpUQ*v-8McYhx;$(?v&EV^FFMd+Id*cR~$k>RpGkM$g+-S_ox*Yh5Ucx7*v z+Kder9Mn5}A%d?RHX$Vo%sd&2`^kCeP4h!{?m19pxv``qmkqD&m&p3 z+mA9HiNLRqOVqQOO}AKfPrG{pM-@@bO;2(4*#^2iY%qVpX(8z4U`p$Uyqc2_2jbwRe?fJXql%&Hm@TxG@|9*S3sN{(;5Wa&cmk8NV~|Ovy7elj1375dT(9AXkQyX zq@>5TmwyV}4U(L*a>N5vJO>1HtbLsC)61o4RqUmft)5b?lNUSH^#^$oi zV>PEDcfryj2}~p^H{X+U;KO+MRs&9C)S`r`V6%u9P-Kee6Ujcb zmK1?+%Anqr3lmJXuWYI5U4y=B(Y-6Ms7{v&;|6$83X5YqvnA*Nj7q9Nd-E8(EB?xX z^{r6DYnrVghCSHb3RGW&{FJs#?Rep_(il*pbX8=Xxf^X$Un(@5PUyQsMyH}!&w_l9UFE_D(`-60! zyd6JZTZCwc$WOgo8#-RNxO~6aaldf4j9DKY#*%weztwP~a2^rWH*qcLQ=aW2t>(YI zZoiRp`_<8U+C3CHxJDpqvY%xF-Nsu04r z<<~R^W%j!xwmZ>(X33=2H@UJJ4rw=IS6C9%m=V21ft<6A#6b-#P}VfMJ#aP5ga3P& zSr?TNJ1~X5gN;*TN6sPHEPmF?o7iq0V+wU$eRn9*&^ML(-oa$s*!hZnXHETjp&Fyh zB4C5bHH&K~CPnE!{(P2Y!evLmRtNH0KPOcBiDcUbwTtaPwxL_0k|BN zbMeiu6?VO|(xAxs2>_+&I>kx%st;xcyJb{hc;^wuR}hKb@c{I;#J|!TCyJJN zpGHz*seYO`Sp~?aAaWzwak7}CY@rj5d`|;(`NZ+Wc}%v}t$RSAQn#h~YLTD7A6b^3 z0)@iIfIgk=$JY$YsbxI#%lON)UGiwG6hmOFNZ5#jAXmic;-Z)>_GS|f@ZlpRN=73* zd}9ULci|T_Ss2>NOLsexYmM6GX*DJNDqnZM@U}{NCL}dzTX^qz-5`4fcRtdPR8)_k zC)cm4?&#_INUj$YA@cq8SKo*_@D><#9XwNgEM7vk_^;o()Xz2CK~l!m=8DISf%JN^oh!vvaN>|4uk9}J~k z;(sDz(#8Fc7ct`#dVj2yd96!A&h`jMV&c7%oNo!-?XQp9izN(rCTM+{&HevqI?I42 z-}mjSD2O14C><&a5;Ey#A|fIsDkUuJ7mj6xq1`9)xl7aM<-1d7Om3s!mOylS~72>UsiG;j1P?kCIZSYIeIk5sp zeMi#CFMVgt7%R;n5i@2-UkCEK?k9yCcL^(lH)nBB~fD1eug(8d;AIRbR{Y|Jy#e8lPyPpFaQhMm+s*(A;Ni z#nc}Jk@8ycBexXV2d!k8KnX7nQ7u*k^weebUVmGaBc6(;6PW!03iYrp(!DRu;s= z1`XrC|7*MbsKkjs1`q|GWt`n_Pc#$H)iS|=^Ml>pK0o%4OQ75&tCQ#mpY%5Q5!lSb z>eYe(WYBZPRn%A2H=c9nU0{r)&`!8)B3G1vC5pfngM1VG{Fp-V)EuZB%G_!;dO45@ zDnBqfB2MWpe8mnU$I*sySjc9QFNPG4BOWE&K%V7NyC3eBOXo4kc-Pg()hIn=QKqO!*3ndRah zdtM7q`ODA*McKZ3?zYm)We4cGqzTu|3vD{Q7h5N}(kqlcz$IO!fvpMrl+t-G#{m$O zQq}6`gijl4VgDV*p&wdXBb}OTdiQ7T=CqGnp0*XxDPcl0w@xM9NbPZirGpx+v#iMe zh-76cmlXyeIesfkyI&`j?GlrRsrx7WKUzxPDA+ctwFB$_wD1V28~QeT2eS!Qqi7Qu$VpeE|3$GC#DSqcA=j!0&)~? z>D%=qc+)l$6*IEH7W)OF4de($qAPF)Yo0_V3Xsi-O>-V_>#dKi&dQ^%MXv$)#n%J& z(`>Z{;sRwWG}m`=Q$p!}^}*b2rKdDL8Y^q*h0_J8r*uSAdK#D6@4!iW!}yturNts%Q78QaysrE?Kw2RDJo@2ghyl$=ceuY)LR6W>mb$E{$43fP{Z&Wnp6NccaRe*ZZh91yaY`NIf!`Y0-nLdzBBK& zlegp`$DUZo5fi_>e(wtguhEYkR=$Vtgus^x``H`h{jqJFdPjUe`Vk>?2Zx)*@M{1O zsiVWgqJ_?{tIYvOrMYp7eYELnXD%;pB{&hsz7zqd)x(E~<^-^|iD>eBbS#i6{T?M6 z))@d1Pwz(lGR*JG@k@iuk**IR3xEi*;S}yG`)uh)trst#re+pXAQFx9F`D5%)T6aqd-HcVLdH8+3p9c*eS~FX6cA6qPb8O!g%!kI^ zl6^BaC!{(@-4Z#-53%?s6T1S3Z^KqP5Y$(dc|MZSk9Jf}y%BJ{@Y58Z(Dpf|7(cQ# zFMSlfhO)Epb>}+y$Umpkfv5zO(S4eKY>xckOHgM@V_DR{$j+hEmnLjW7lf`2o!SZr zprCkhD8ua%;12M6A1eP=!+o5*#;xn{$gizOloK6vv)iqC@4AS>r{>g))0_JR^Lpukg(WC#xSRRWi` z?S7jXjMgh$=Ij&Uj~Bsc!I9&)0-E7)ryve6zh4QCI(U7x*({*ykS(jS(`dzY%lD>@ zBm4FaI|4f^!yKn;jKHc0tLP)P{6Txy#&Q_JZ#-lHfwocX#79}VT5NoT$qUh^iD~lI z`HCWu#yjsYOZF3s-_W4Hb$T|NX7%yaMF&qrIP(tz&f~*75fZQ^N3TWHNO+dIg_7HV zPmYMMd-FSy*0(FeTOVeAdJgZln&?s<o^6T(5$eJCB&1 zIEVR)gPbCLl<6ZQ0vM{-Zy8%-? zVlY~R{o~3g-eN&ja6Ee=49Pdqw--ec52#bITYA$TfzVs+v!kn*g8?BecXH!W3Q;YQ zy@DV{Y~Ab}hj(gBC2EJ1(;fBA7mS6*T74>zRw!-jsqm*0-I1`{xo5f~WQa|!0#^L3 z_;$LbwDP-};$#b=hU=5g`sHg?-(kDaTWqLYVCVm!QCi`Ny>TAXvpOdrV0$NGWS)Ht zE)mGvCZ<_NWI0{IvNXC@S^bE;MD5R+M)kxuyChAx5J|Dp4CXJg#E81#w;uunxRc!( z%>f-bMpowA<5f_TBNa?nq7=r0F`ZFMv9=>D=`MbUPXzI8wL2~B#siQ4nvsh%UGK4t z&vq0$qH7qOXjvIw2bGdxs9ig4d3s)nA)f^C=hhL=2o@Q!W;y$pO5u6vVQ{84doH{GODQnC6Cok>c1^Z{u|+SYrZ z(u%9ZR~jM}eni=xSa+nWdI(>naRYw}(HxvsExyXIZCLTmFW{s&mwfav7(GmF zxOe@)ES7M=COxXwOb_<(0x%n%5!qtB;L&JOv3Rn0Hxd}PqX8Rupj}%T33k!8e>dx8aZz|WSK+lGP%Pn=FqHi7p-Q+J2O%*SW(X}7EW`9ATwE7z3 zzhoLkI5v{t_(H-~joGigf?RCL93d5D4qJRdlUYzOmfnYWXIfl|f& zuT<^7!inBhuwCSmwm_9>ptd|0rbBCmD++nC6g+#S@Bpzw0qACs1w7*bFeiz1hi8z8 zaZEyej6e0+HSA&n)E<67v-K_J4cM6W3r;z$pxF)%6h|&@2RBhn}q`Q-RP+=iTv}nRmv4!3(X|cGjkTiI$jNuDHm84 z$`S`C?cGKL%-Z^}&VZ;5)~x6KxSIq4BB52bKRzAXXiGV;Gire{@YwN=Kut1*+KSswMz zi^?NF(B6Y}W2Z;4^Bu;jKYGiz0}* z;QcXBYVk{Ws5y|PSQr=^SHY= zP~mgpK^?p;*Qadv)8#V4L4_43&p(hV4?TKq1B(}<@g?u9X68CP3eH;vX58E}haCSx zXMBN*L-GzE25%l+GlEt{*Wgu`ia2V-0jdh&a|IWCIc&S=J+C9lk481!Wy)i!2w7sE z74Y1(s=H!z!?|=jpU>Pgg+DK`h^FV0+f)KO6|nlgj8{I*CgC5a7ve%f1XyJedL3v^ zW##=J3n%kWb~}r`E%Wf9=j=8g>}J+PBy7(M;pACFHXGd6t%Ouxii|uqTb~;MHVSs1 z)}^7hPWQa{9X)vl^m2fLm;IRbwGzg(9N$`kwEo|TfQcgjGh`f(hHRC_ERLBGqPFrk zYWuH^)5Lv6etp!8cbmoRJI#=gwlrzSuRGw}$FVsP+@rcGhr@GJ&fct2yM1`7eU|Bf zWS`izQd@o7$4Xv2>0Q2``6YHKbhsDjg1HihhRL^Z-GTe$7#^2sDhbF=*JB_m-&Dv4 zQiXQOW;Yr8G$d)P7#RyAVS+u9FK5d}XsB$O%{gI$Tw#mRZ$L1-2iSsRfGJjp(U=K$00o1_Z_@>hq3tf?^eWoFA zaKEsVqQJfW+w8pk@8gpuoCUs3bP}}i!AJ2-e6){b{!=+c-u$-%p1^0_hyK@cM=KZE zYQB2jNTE17o!3RAi^e*Nh8r$5W8wA1A3g{>{YZUl1lZ(6XNtlV?E}h5A%OdEY#*gk z274TDsXg$Bwdi-qJf*pW+2P!~Lz!^{Gs+^mJjW870-^;>8>j#aRhQj$6Xu?!%5|@_ zK0-b!B+LJ0rq4?6tFGRHjFPt*jz21)jaj%hocQ5_CVz1_yXDJ!brV+=-3*Rtq#X&U zX*VOk(|vxR^I=ZYF|(h&JoXkmEjf@E3Q;^wM@uu!x$h zqTY8WLMV0%{}{(}k4X8dIS2#;@-e{8$6qk6(EXsp*+e5P9;%B9i*IlB{&LkS@Wn8a znFs34M*o@a+kZPSt>^7zK$q(fN~5*!bc$%Au1C^mO_X4EMv#`oo2>vvhGodwZkJ zWmce3x{Wcr2#dLk?7ZOW_~h;#*e@#f&T7dCE}k?kQd0gMdfYdcGFDy@JuyEFM+P66 zeu)IS&AtrJ;i`;0a+PLg;R@GvD~G^Syyj>#E{=KsUISoZ-t?}JUj7v6ZS&_ow%Rhi zp^ozFZgkr!pHiW|>aqMwdxFZ5aWts)4TrdBZX$(0IHrn_m4fgYH-*c({+&o~pCl$z z@aKGRE!5}SE<}Oap~vY?=U3MLh*I@uq0<9SlnZRn=y<)~&>n1|nA>R{3H~+_Gz$r{ zh;t=wjp&c@HM><*Z&hMeLW%JlUpCl>AW`gN_cQNviMl|74mMf5vr7G-DA&WuI%xO6UvcGz)udphKfS} zjJI3=0`(xi0YT5RR{!Pq7Q)`PAiWyaPLz}7$iO~c6a}i{$%@LHYI=0Vwt$^}GkNjT znPx~x12$9UmwNs2L$hGw*XZ>-DT3w;aU5P5X(yulYn$`>KTk*Wcnh+i8(K0b<^AH$ zxOw(*M`?U(gan=<`mqSjm$16R4KuUPysnF|{eFH#UeGFnzX=|=npwY=e;BbL#7#vA z&kn-bT2E2Q#Y#I3iT7vT%^tQ^$j-WWJ@ww?{uZ^FELh=931hdcKf1d4dOn+m;F9G} z71u@756S2w;`1U2+5DBS+*%K5x34LG37rCC`x&nJnlZm6&;|=z>m%UMo?|D)DVEJX z70N{CMuwN3c9@y__i*5g#gmXCPT$KoDj(={=jWg1rN#X;K}@rAJ-YEV?jOoX;8|$#!d5La^c# zwO-OnCd_ICKZT8G#;E88ANN^Bs#r|0;sWp^dje%lXs1PTYY-)0yyf6r?b2245(~lv zD*dV4={A=S_Aw_b5l=<~C-mwV9^2#O zF=s}lbHc(Y<~SV*4-d?^zH98YkTw6Xb zPC*D`L414iWMm-GS7kdd4(DGGN$?ozQd(*`98Vu$#n~UH`V(B^U2R1ndi8yF^g`SI zNDq}527V@=mtC>nFT?}YDl|?rMc4HJraM;O+JZ>SgkBr!0SR=D_I1fj8=5NVa5m_{ zUVIZZdz_Oo;hkIZ@<=|J_pU_`ExJp|7vUBBty`{4dw4EsA(vD?j}39<)c*+_ilPmJTv6? zd+o34!fKzshQRRJ=j5X58Q{xFwI2bBo2iTNKV@W@jY@0MbJo zh_y!^{u1EA#-*R-!%Smsjj=%5^2gisU?!ifh8Jd80~9&M*0ar4pGJ;Tv2kD(lV(OacQY~i5A=AZE(G{11uuvw*k8#DL|ztjM4nXIblQSmn=Ylwl^Pv4Vm9~8)@=*g^ax?OJ$yVb z;{9@O4G+TQVz7n2(}#W}|5TZAb7R-mW6+D^IN|4NH!3KZX>H{NpNmFAKD{3PxN%M& zWZGFC>9^&NdZk){$UEg>rq-e@4MHew(d#0f0D=GAhPG9jR1Nbn5Hvl!C6k}(A3&V< z^qFQ32pYLv7BI@_iwMb#OY>Mq1(FUdlrZ|a6;3}2DxCKAJdUk)6KBDrfpaIVQ*U4c z>3^&Omf>rKsb(FyZ}%1pmg8UP`WSP#sZzJ9cMDVJaFywng>NF2`C^rh-2bs@isoGP zQI>rRlcMe!meQxEUZ_HtzT#tc( z$^b)2!T!)w@HF4t0$?JQ;`OTwG_Q{Z*R>v2-hTeCyL?9r#7N7J*S|}q5|N?+TI!wY?7jJcnU$&?GUQc?zaQ$9siG zsJbIcv;rnoT$oJxo5Ob_qb>GtIqi;BS&t5o&>PS)7NeWKW0;rKyPiV_CD ztZqQ~-N{_MPjUYw4jmR=Ed=_~I~jSQs*dHQ+b$J-e!cnPiSm56V_DxqlG=Owt&XvNkyH59b74H6|&{YY)IA zC1m=>hpMUN1Ql~tuqz!W+CvFk0*4339Y)#vo`P|@V?b(oOG*; zg2vX9PJ$`Wif8yX&^9xAnDz`v+Dh+M17^aPkJ-qnpKeJGDx~`&!0-5E_Gu1b@bj7j z_r*^%b}dLWba?S(<4>`;Dg3)Ed=@+0r)D|DW{`$jR-fJ`E6GmiN0d9W5>jlLUR1P@ zqJ~+AdnQ+1)Dw7dg3#A0YY`Wdeao;v=c_3XoNKYX0p+b5sExXi)6CXKv(L!i*lw7( z9VH-re=sTyFitDY1?3q0Qn>JP$oc8UXEklI!ixg%ZX($kpEb291B6PYg z1TQ2LrVWEB$E!6j$mveW7KAYoe3XxLp`Ia1`S6?Kb`92>v=g*bk(6D1d%%0k9mSO; zT@*jakflehbl$zfvi1A-D@?u>-?8Dh5Gt84#^crh9i=w-F`m>DKctsBT=95_xv?9S zcw|fs81zT4jt_SQv5_qx;8Psk=rM4e#`JGadyBk~yJb-%a*S$8PrStI*KHS7-}^#(Pqp~rw|`eP4VVX_qoz5#$U8aovlM2F8!Y4V5U?d0<3+Xn2Sa|QBt zZJSL}I&W{qNDUV5b~g77iz{yNtU~|LzMaKW_{e8AL#X>Hf#h1_^$38Fk-I{QN^@&H z9+hi7c9oG^@7$?HTLI6QY{lfnkIX1l1J5XXJ4g>Q>ZIoEoT6Q;_*YJcdAy2oeM@h+C0U6^T)Kyns>+f%6&3N&^YWCS^I(hvY=Zf;OiSsf0X!Hc_{n5~rERB) zJ52dLKQ#z{f%KtywFBY>bqpI1ADLv9T55P;%ENu(9VSn)J)Si#$E$EPZL_b*vi0e9 zhp!m3=7#d_uh|2EAK0gPVt# zAl8oii^<31dmEx*y`HesUf9XnlVXe7rskcxidUY!`L^=D3e)Av3#v`%?17xw+X`lU z5mf^Iv`&8N>va5+@1`|X`W5?JBG-MPQm21PK%1=txnv-a_j2xd@J~}5l|0|#bUN); zlJK%^El9L<*TOZ_H0v;IZjRa*xRelaz_e4pe!7)vpPEP-Ki$}r?pf24?DYSAvewzV zp^A;rOF&Qv&k=72Pw)-nU$&>*dmb%zDnpXk>2`cb zV&OtlN=R$S8i{hXm9ISwJxZTIKcq1H_unic4Q-V$^z28$q;(;0$Zvr+eSI6QPR%Y1 zP~yp^_nwW}~dUWi|%2O&lSKsY8=`NyNpC&1RX-33ULJC`}EZ!f!v^Wysjfe=X=l@ zsP{D#4HE87JBzk=TLjJE^#}u@OsYSHXS?8vJ|g!R^_W`yZ!kSSw(sWt*HEsnPI20I z;MU%F(Hxvc1nmLj!vlHSq{X9ia{y&QCn76;C?!U~kIi(+*$GZ&x;&kpS>Yh>xEds? zJn}=N+^iRO;QbEAA~$0z|HHgtZ6DHQ7Bq(ngS(u1ITuA$=s7ZXPgN_lU6okg7g;Pg zR$;<=6%?E-J*@m!A@@1%1O5$PL?eTZir&z^TuY?8WO!6~I?BI3%l7__o{U63ZS@=K zir;iSS2%HoOg&<7x?rYsN`469MuxxAMha~Gf^}Xhk0tekFJz&co7LAgPFXc(HM)9G z-at3yzS_baUij%06YSL3;y8qq&j-qK_ZpC?hgO{o#baR>Xp10)mTZ;cx2ZmCwW!vJ zsb@}-E%Q9SYpqUPEw^2ds;$2C%cQ?^BAyac3*e)mtluL%j^|F-2( zJT~Wm2)e2!OdB_(%}eGIZZfY?fWZp7uDJ93lfa$-Xeu~XZUnd3=*rzK!qzs$#qjvgmo}f~@sLfqe zF6Z*x@mD87Ha`JOWsKCoqt(W?vOyK4i3{;DxE4ZrmV0Wrp!4pcQxmW6%q(faLdtL* zB$yR+us*IB%6vDehr9fH?bOi9`xihf_G2aR?J){I18e0vM? zaCMFP7OYCh80qY__%>+`(53J=ggQ)%Is6JlBCxi0bj9rSIsaUj2ZthQJ^XZ|gpxz? zS#`Ck2{=0o)j~>JzYd>fAGY{e_17I#dvoLhgX_tf)=ZW6(zo@>%1;%ycYnGm{yyEt z`M!(}cJ+8J;otBma52s=cNc&ay|4&gh9BO7vy_26ysr-)_vooKfE@O44IZ`*SJw@B zSHNHrUVn@kN`$$ewj9K>7YD6B;q?7AX^inP=nQa37LU-fJ184~w%#EF_Sz<8->6*OMgMrZoi?PQ4szfT>=F1B z-{X|&GtRtkUDZvwI$t9-I5P1I@=ehHxQ|V|hH+bZ)&@EIQPpidUYRiG7vFTe(zd=u z>~J}!+tEItuzFF3%=lrj0c|_%-FGh}f0})8JwhyF7BS#fXUt4JQ6pnBSOsIygfri) z5=l4|wDr2UI^hq%&EziJ(yl-hsvf5ZqUeE-&i357Vqb-9$j&FyevTR(BCY%I}BH!Y^E0bBZzw@PfLx29fempTxOD(Jggq5&pE-)gz+IYQzud| z^Q&nloK)E|=i%{}Kj|J;eSUxR!K2Tcn|fgHL_Q30csxX=DjwEvR?uUU zOgx2aPj*fsY|OJMjnK(e#;UqU38*0!w`6l~zS$RZSh4T%RW`h7qg4E3aDI2#dZ&L7 z^2Dt$WY)dYsuSAFi9Zno(5AKjlKu)$Pa3G0z|B~apEPM5scXR$9hB}?Rr@Ni$jvE; zFBe2hc|hnX-EkmEY_ZgEEPM7dPt5_*k^U?C7wP6Co9Sz3&LLh2MpHQK~=Sxi^@7LAr!x_^{xo_4|BEJZunL;|UX4 zj8;6<9$7JrTReRP%KI5?F5MSLKwAcz@_HTEkS1w0)jA~fzM_bxWHF_=fg`8-u~N@1 zh&VYxbC>1^kiF_on5R<~B5&J4AvNEnp&RY`#f>ibZ8V%OPP@T()9Rs*um~_uXK{Sq z_V=^iSS{)~DH2fl{3k^mNU2CE^qVZ%eqA&PG>Kpktdspwa+epDl+w^S=&u8%c*EeL zryQb-0}xFf-}hNpEZ~ABq1dN62lb90Nu^SHIkTSFqL^V=^F&b>tTg4@S3Kpsj{-0El5a0tl}-4>Sk@b@%F z)4H2SQh`Nn36>8e6r7u}4w{BQK3-RavL>*R6Frz8nQZNOmG#Mla5!(MyXeTHi3(`T zJqwM%o53>@5fLDVl)GIFeELSYGja|&e#lHh_H1nD-D{&Xf-w>-VZC-d3my0$D6kQ5 zLbyBvO{PD~dQiR@X=pP^+z_?N?8U)0^<`JIi}7u8No*1 z1N=VHMhHlGTDtvGDG&+PDyv-dli7Nd)=%wJC@2Pqti8gt(Hheu3D+6KE1!vxfkwv4 z!oPh|5pYFV`nf{(uF+3)H?LyoHUcjQtu)p%$^sV+IZ^zQ`@&9%lqgkqY zVog&U&Lvi-i|DEYR(<8CHV?}Zr)?r;*AeLD4wpI?vApcrNha9M=B>x9IPaN16B2Yi zUq=o!(p6sfdpPCcyY)(Vap(~@^%Sr-7wg;eIyn`uM#tlv&v5RKqer9alwxx6-uq@X*R&MHex zv!Mou;`s>=Y7A#KT_P@+L(Y1fde~muNw4e7LFyeSor4(p-VaRAm5%@O!L8mv4AQit zBxcV?Dn5(FUrEzhZvIn!Ak*(yz*8VJArJ4fa&HeGh0^h`0HV@L`ara(mhA;W4EuMj zCnpVwMx;1PSKZn%qc(cDAfPdt2Q(42dIpDyp!1C$M`jBhw-PLJ3&$HFhOs zQeM^$Jxh2&_6|`!nhU7>0-JIQsnQ#lG_V6uEEpuEn(wX&JP2 zr5XKwd$EK*xpRrE7Qs{GH|W*ejQ`|3b~&VZJW+)$LZc#-S>^eFjMKXo4*^uyiG(y1 zDr_TgkpZ|^1R2j=A{S$g{oH3GVFAbMVMjmIU}wEwIKJq%OSX8#5bBpcv>?OASC{Pp zz4Hq3bM_I}K1y-(_CI9tw3cFwZylXV`k)@e_*SLql1?C7PqN!q<>#;p<%zP!@urQ{ znhBdG6c|ti?Ca15fT)pyqj^>OkC%LKTeVfb^iQhN+;RQc;;)I9(PL5#`B88P-Brw@ z-GeG08A4_4qTsM;&uWZsL_WB$v2;_?i zImHULm|bu7jN|p=B6B!HjHP$o_2hkT(Xryvk&k%fb}qJ&1?lftrW?KXv@}ar;Xy{L-P#KcSiJ&NW3H9~ zgcQR&@9)_0<~YXtwq}}?5XL?St3h&P$JVdSEL1@3_*|WL11k>7L5S?vxAwn;9*vXk z>BCFh^gwT`2Ng>&;jyR!k8!~n;7Cjmj5i*Jyzb^?Z39r!p;=qA9tE@Og$Z{KhNLU^ z2LWyontCV_Th;s4Y|Uc7)N8*>so)VMMSv+=e_`%fd)LX2n^r(;pHhR==38nZwy}3~ zgpfuwE`bvIMm%VV(irdP;hh!E^<@Q!Z9T@;GG7a_#StD%&9#*Uplz3%h)ha5--W~i z@_Ci!58vEN1Ru-?A9m5Sxi40e!yPo2c@92CMOrl6Su6b5=(x(Ul;zXYy8*5V;`NE; zMal1-2OR)B?r%+dQQ!m>`1&j^g4d%Iy1vBwomqwWzG=6^dXd+aos}#)G{hx;bzUK@ z@)whfPK|AcBQV>24rM;rnbcS};pm$4B4oYt_ zU!nz)RC9V?j;PhEJ9>WF?%tW#7N@AETtJjIZ8(kctr{{9?QBw2j~}JTevK1WJgCg| zF^k|k>IzC3YWfw2u<-TKM|c^D3EB`ueV0;qnnlZs{ccpZL@Hs{RcMh6){80Zd6j=Z z?4=Mx(gdg656%~Shcf3`tnWj8R0pKuD&+SMSZ!fX3q`knJ!(mVT4}A%{D@HwthyN8bb%%Z{GH%Poh&Q?VyUW^Rri zMAAC&=M1BXQ;upp3^@#R(LV#v#vZh74M!imQHp1k=c2RnheXEho@I8o%AYN?D&SqO zM4LbAd3}a$x^i9;daAU+f6#qpI=a^qvVJb10iDWs3!hpM-3k2qULmzhNc# zvNO{eerD7iR@7Z?e1B3kuIyJ=Gaotz_{jVluN6rKI@M)2FZ){SP$Yu~!cTtPNzUL`a(b+9B)4-c zZsvY|%x}HnYkjY3O!vy-NK(zSM#Xz39X34j%S*On44^J{5f5*!IJ>}M4$x525qRD` zxc};(CjYyV_&8o%19-kKr_Z7NxA&Kb6KF^CbA~ss(lLFs!*1 zf*`RUK?D63yPxMG*+%$+Vtf%J#;m3mQ(a2?p&(KvvF*&^KAD+^^`VsJ=O^j@ZQFHi zo2zG*I;*Fq4r*`2Q94=N(8F)(4(`?1iunhpX4&Wz2>mT`y%`MCl|y6C_T1cpBH5q& z4|d>;tzVpJHgjuC7#2sj!)02>yV$`nM?ABYS~jXalSNXbALM)8$-C+GTSA$T zy0pk0gML=XbSlrJV_AnkRB<`a)~Bu-MYi4I8?ft}PY)ET)%tgz3_IRJ`FIH#ZdJqd zA5_|IDq&tK=pC3J{4S+DxDL|bN$nr{^M-qA&XDQlh5oc_gw@tNK7)G=?lA$zp^^E0q_5j?&z9bFfA zROOI)JaMd?L8Fm2EC>j$9wkoF2zi@!8@bd4s+)RjvnrrO)>6teY!V}zlpYUvuGhKg zA#B;Qyis6;AzJ-tT>srtZHqh7F;Y>3JC;Ep<`AK_G{@n%;o68&P?tk2UytD=E zNK9T5GY><5=?`h|uS-|;4QAX}Xkc*cxW0;CTqXg7t#Ri;^2LmeBMaEvgjVyyC-C?- zkFw3;5RYH~Ean8))~pIj9jcPzWgXj!Q{1pt6e7zoiFjT8bBCLg-NgN78V@h$IK5zw z+{C=*ATMssOKC*@efXJ-v+=f(mi`OJ&-nOW>&vfi?J}O$@Z#7lpPZ_2=$dTKv1HR5 z_!^s2gr+i~40MN!@uvDmRg5-|vFBD-ZC80WK4+>F^(tYiKL65GUbx7vb31(}3^w?D zWMuK8Qm{9}g)MriJfK91d-DuODQ?<$&wOYsIYPH#ve*KQ#vJV^GhV37DiGUl^BJpL zsgp@w5C7eKmI#j;8ecoC%RaE;PRy+hxv$GNAcs4($!K){@MHxg!x_+_WxoM+s8bSi z*{LO{1uiO|A8^MnM8HN>gXjn>I`?fPr~f7WhTUn81Z&QuAD#121_Y=ltm!G);N5JA z!0*u>L+HUAdPSW}udA&4C$JsfUW>erCNAx%Gh3B^1Fz^xzgA;o(loPCoA4&g=(3h4 zTV&_{WgFlxmfl}TgY$36MoH^rU`6kVv0+QeQhG`^>;8VA*V~#3_x+*s&Eidh#y?;p z+ama}eFZ$o*Bz&!DEP*MNp`8(H_$69z)`|B$@H!Iv*uV?%uD^OX(dd8L!2|SN*E|+ zFf!KJWUK4EfcbtLq35+={;W1@T=KBT)2#_MCM?gf7f+qLB3o#j>c(FVV~-0zk+{cIr9Rj02DU~Mp$CUyEuoyz;qE3&ttaJ5 z4JnrWb7{Ugoi;xS#iHU2Bj)U)Wi@GBy7q8&>d6`-2~5GC-sj#rne|oL3}0`J#EJ5B zhwqan7y1wGg;d3shXAJ{+f})IN;rP2aW#uR{?+17lT%(z@;N3=!o0GFuZfsd(Dq>` z9{W9l?=QEAJa76{J$byCib1@FQ4RQ%No{08JK+8gcWO#pxmhFKngTO}B2o8j%pLJ$ zz!V{&;=Hg)GkQIacIFfG+Ke~+Zwu~s72PK2))2@quflXfMK`*m0Pc%mqC~NE8s&g^ zbpLJp3IV1sfjZfI>Ah&wHu#eAKIi)nQPzIwlaqdXzxtflbmuPJE&P0eMK@4pprxrB(cVO%~B`l-gAk;~jX6fqFhapt$rmk3VGau-^zx%o}x z8#{wklhjv&^@Za7_F}N|SObnTY@3;i38`=);`~+u4%%n*j1x%r!GpT-emYm$v!i?O=%t7e zPpkEhpCJK;HyLdeVyL38I0$C$#2J~nt@2~(WVO1_GYRP^ZioD8f92-NBY=9ScmIty zxG4UdY+V>f&)dRO6~YvJ@thkLyT-{W&L|Cvc>lA@Unuk};$1?GO$y^o#(b){T%88O zWqqjSVwt4Ez8J{+-0q_$?+J~K?RunSiU@^KiaQ_r-CzNK8)q=aoM zbMt|SN)fyDbHxX<^sGH68YP_^Bg>BtFN8n%`uO(D+^WU>mu^o*kE>KwKb!|cg+LxU z*R10&auA3M#GVvmnqajc$_uLpidAO!GtMu)a$Giad{|i!cb#v_{+qXPCX*+``$bNMfVo&(;?iOB}a_~gU&cJ>#H?zY#*7%#c` zcHkqNRpw0xF%u3~d}m!h`NgPx)I4uM!sX5PAgs>1!!ix}=2;kk~can4KD1HytKl(@ zp`quAY^PEst!n*@r^N$yVECNy5T1>rhOKuj!y%-E4poMgu&c=e=ckXRaUBtg^$XU` ztt(+aphvh*vA_FJ!B@h>>t`Rc?&}AN=DRa}THPPyf9jLCF}d#_ew{xkuVSMIW%-Ns`?GBn3Mbe_L!;J}T% z?H~TswKsE?)(tVAxMwQ0eg(AGb9^q|tu;Zp>h~{tRGFtd=PN$wc4DAX1C zWd}H48N2x($A}{h%wK(FCp`d3EtoQ5Ife~tZem_-{>lxK-Rn7h;T zKESumc}b=ED;mUjEW(I;tZ={py!|+*9dI27u12)X7|^x~laWfYBVoxF8XwK`nX?!i zhv~R?$}}JEcQPsUl!*NCSd<{i^J(xSfzhUb%M*Y7d<5Du5FyY%IFo<*xPiyjhvT;7 z`^_;PX@gu?HdRIUN`{)mdP39le(Npa8`GQTu zOYG)#K3o?w#G}GnW#RKPb&io_g`I-$Z{{5hE-8floa+^+qACPC{&dbMExx=YbhxGd z-B3j6x=yZO5JLN$6%3s}KpctcSa7Gp4y%qa_vEZr;U7zBdb2;7AU#>lyJ%FGz6hKK zUI(A2T(^_I`A5QNM*C*r1AguRBW>7IFo~fzrmTz2tOML-&FwGoGYa-_E zPp65ppId%N`E@+}K^8Hxboc8Rwq-O+1;YYI)L#_1i5E_I>1oHvXfttsCP{D2GmI~N zIg1r2Ft9=A;Y&RG!hSdvzh@j}C$(t#j^xy3dDZ2m^1ut@zSFozJwq*BBMD8ci6{DA z!^|N0xBQ1H!`jP*Aa%t`Rhr(yx-*<(i#s&!+h1(4OV`&FLR;PR%B_9IA0A{7z~_ou zzfDUc_EXk3H4ga;InZoF=~bb6`3o&PSaMEE(5ow)VEmtRy;R54ReIU~&jNTA={sGP zXo+=(skgI8(>e#AZK92SD~FD1f@b?Zh`jGp$WGyEz=dy=}kQ1 z<-RSYdJ*TvR`w%-9!BSHuXY0Zt;8SXVBKw+5!M>+_oQc&yKf@;y4^+7Z?|t6DH?@~ z4YjJcW(AkmI)*P~E+L6fYA^;Pu)D%41Jp0YIfi*sd=+MtcP4C_n**~ccS>^JS4h%?{3CMKw zCYSUkvoqOv7vtT2dj_wLujs$Ss()_K7-6%Qd#Oe7Rrw zUoPEEmcT^BH)K7z>ZQ&nYe}Sa%00E8@~>wOhpK&C2<}ca8uz{(@&Y=7wdm7JzuFfF zGT^vVO1lttS(gq#c*+S&k9=lPKlUy)=XNJC40CI5j7)QoWl^HWHWuilX76eDD3I_dk3-<%yEPd|Gtw+q{6?@4TjIA?WWU zu=Uu?<-lppo=b-1Re?VL9_{tRhbkDeuRA$>*!LVwEe@w@gY?{5V9JF02jX}Z`;CCA zsFS;{TQ$u)Tv`YGZ+#8D=63b=sATk9Ak7-uaapsr1`{Y|=s3Egg zzZPHRLw)XdcasSWM`0KJ5in!vKX`CGo#n;E4|pqmF@q=Erh|v_$UKP%?NCksl91Y* zocX>BQ*bp~!lNm_UvsSQO`ditF^=qJ$&AqC58P(YzRpHN$5g}-BEbareZ?%9N6uFF ztuprfM)zS-Q_0snsv{$_$aKGfA~5S^VsnS}_3uuBBeAJ#$7WS&kH+awf*l;6GupTe z=HKU%w2(bjByTORR*3x{Q(qnq^&7QcRFs%R*-a9X?7PNHCHtNtvLw4mmNH{amdQF< zvS*a7q!h}&FJmA3ZY*OLV-|+7^!w=hzVG$>Z@9+Cb$y=aJm@xs+~=4i z<9-BlEA)Q{$qRn0igR%ovn-R*6E^XM*AS}KaV1elJ){0o;Tii|q0~c?eEVl+E(H1{ z`^xf+LG`-I_2va*d6e%)*bj16RgbxotxbxIV;{(G;vz5yVU^g+CgaS+7nJ|vdZ587 z|CQDV-=Zqz6w|nS?x%R2wHPLHGS3rKSOYWWR6Fq>78S^nIvXnM4j$Qz35 z80CD$`@)1trrmqvz)e_k8qn-uo9#sow3y^n^WMa3X1g;n4Tl|LCp-#%usg!RT5>;E zr!TYT_!i$U8kOQ++5=(}yx{9^h9(HMR@+)lh5+)X3SOI3vsxR^*79v|j z))9j&w6tBs4(C28+VB@<5LNbIKUxwtXsdDik!0kItr>bV2Q^i!xZc$E;?Wro|CPpD z%seNW`l6Vb(q<;h`bQm7m`6yi#UAN5-vzRrmZ!oCDheNE^=jB=KyUsq{?OyocvfYzXL-gITM%)IzBmuvdHhC5lKt zMxF;Ze#`84iq{rmaQ9pDm=?+^VPWE#CNOq0=uTG{jPI78hTHgE5Jj@W5Ov*0vZ3hKg_KBHvgaLlaeDpcC>p#pZk)YB>6RqUHXY%PV=|+``&%O zxSl5C-cFT!w7$TD+dH)=RZ?d_EU%}LbSIoCk5yT3xOffAV(V^Ww#&H$N3Hz>x7&D% zy&irb>##%`@*YY-sTcVPHFG)I4AS+i`~H=S&gu+YxE?P=k*W={e}PR%Z|aGRMslg8 zlv0zdkJ-5|;i@d}^qTk2*&E5sFz~ZS`2Jb9O~!M2&f3DAP`>(^N3(}?(s*-zXdCX# z82&Yzur(_a&s;;r5n#XKc#Ds%;utKN-Y4|`xbumkM8PyUg_-Mgnad@>lXIK)2VlX=CgU;=VF!`!t+HK3WWgR+#1b-a^fg>d0oCMuD@T zeNy#DB&Nf2hH!?|oFSOhNY|tF0GQ5U({~Yt;uL;@U&*_>xEF^VsV_G9)Z<*>QHSzd~w`|p5NPh8^n)(V(b z!c?DB00N73_u%tDuCVa;pD19+tg`97ty2%N)&*blT!NXC?DBZ)Q+U}))>l`ZEnR|H zXXA)YKU*)G?Hf(~1!|;m&{r1liVIepOT~3-B@ZH~k}j9%?q=Cuq$8{kCy3e%5iyjw z7BQlmhHv1s_L0TXFr~|aKU`CMyZeTwDR1E~>23;jg?21H&=hAGI0VaaBh0%FsfgNtS%8Du@{IO^hEKCYUqtx zifX=;HI7HxuT-qZWw?CV;Bf7cA2rq-yua`nIBJ&l@26Nhnr}R8k%PaGM(sho4ni>y zh4N4*x#VfV?(>q-8jr2d#jtqq#$#4dRxPLMp7iBqjY`PAZO6lFx|XC`j`Z4S?&Xv5 zrgVK?-nI|oNnHw`+1_7h14gK_f>T7G6-Q#lHM5wjt*2U^E^IjGZ(5-Sz&?IC`cXMO zUhSNOKg8!zpO^_VL3l(+^1NCGG-YIHP6os3d5Y6|?5B^!8G${%vKx z*t1#kqonQmqqfBo4;OsuTcS0y-QyTv_XjFl7tk{%WyMV!8oLp)SQRvF^^--|Ig~Fe z-U@l{B2Vd4wz^uXY6AhSaBw^6C2g+&P05cO^HI8K`@TJB-}f9lCX)DFgfB*^*^hoE zR*|VMfniIkbuHmXu1MnbWI0MgF%}YHF3>&t@))n!{AmN>15uc0RX4U%Zzk-_Sk6O+0{hU2vSDWKsY8D z61%7qn)=%2Cn~l-6imkV89=WNwG&cfFG=i$w67ebZiJDfJ%jZh!@E~~dLDb!ew>^$+!s>$ z{P%g;7bpuE?nE<1Q3sArr1UMc-Fk{;b_Y`C;+a?sFpa(HGme z90vX|^Fv>JPpY1M@9u#Z`|vW z>wk5)ZI&-nW5-5*<|0eJ)Zw{s%Hjj&u&ujsriF32DS_fse0lK0_ADgE@fUfj&cZs@ z;1NQ;%94Ksx{1hVOUC4}nM%e;^a=`9_A2nJ4?1NjKoRXTQ>)A2#+*m|ff~|*{Q5B3 zq!NpnCX74JZ=Ov&P3$G3(ka*Q*E?{J)mol0xMQHrJ2~|jUq9B538WHV0_RV~T8Gsg zuhO7QJ3Xe`syy|p!HBGQ2Z2gq^cSqOf|6?G@>#zxVi0ZH-8)ShK3~867G}~!J)^sOA8Dgu^Lm3KpTV;-(?2oqdc;9fpQK`gbP#fFUxw!R0Gr$fmBrtS3W{tzz z=gZFXw&qh`B*lqHb${haf_<{`f3c6v|H`_}L#G*WDM`ebEccye&E|?Xw{h z7s{`@yG1hJ8_XZI$#EDmvntH6@fw%6{>*i!yWW~n-h>37`BFAy{ebD9<^I-J-8M4* z3;6q89>&fvqw|Nfoq-6JFrV?*`Ax5Z2xUuar62c9s{MseL9te7vDW#AM0q*Xcy1KR@hT0w!;RpLX9uHie&3-Q>7$RZYEL zKX`-Qt-Isw&&i#!XRwX;QQp>Caan#PaqB+HACYzSZf#mc*V1(4_R;=+4PqRiHGCW< zu#!9ROS)Z*Bg)sUrjn%d)nc+?7T7UkVI>wSiNg2la?akb7T4FMDCxNbKQOohmKJ~prxKir0zggdjDE(`q3rNbsaM&u=VGCX` zm6Z5;XxTl2`rEz*_cZ$3L$PyMN)yw2JU5TY9mP(3ASBj_o*}jBkI}%Qr0SPvgX)-E zkqNuDcLh@Juf^DY$TZ&+SYS78Z&2g*3sU3nsX*Gl!Q6_WTtwb_UN8E?_Qsl^0=!y% z;>);;`fTUdA|3qxtCI(M&A{DQMg`3-G1J$KY)GY63`t!_lwo*N%y$^f%(&*jORSK& zqXHUqz_HfKk(IZ<56T=lE4KQ3^10KulvN^&3e53g5-BnW8El*h{+p-P))0ADSTBnL zTb8rX-i>WqT2K|`Wfs}d!w^05hHWe(cnNNQTHd_B%wz&fyC=YExZ$1fJ%Z?FZqZ?v zpW)GT1MQ?uKy0sZNTAs8feYfeGp)2V)Rq@(N6Yo1HBE4BafGFu5r;SU?AOQZ`76LiOL}eJm3vPf-c0hr9`aXHQ9rTCF$F?bm5Jp zZ>Fn2TeIgstDNGc(>|`fHE&G&<;kmpNI#I+9j5T~ejE0idBn^#`9yY&pX4GJ7t=Cia_! zg$TgC4w^8Eb=X;fef_2(VDS0xlb0tTHBthh+8ms!FWqn#VPWZal+2b`&9OkF>Jy4IKW=B$t3HETQ<6T}{^((9N$ zYnJ6EkaOs82V}lM1nR8Pb;NBRSe?v>cWP!pok@XUdqt@<*t7*s(4#if{*D`^G+$@L zUpfEGGXbajCPwWYHT|n3h;z|4>Ca0Y8+l1CI~v;Cuc7oZn^&NLY8SbwVBOdSUcgCk z^AWX@d@{=5f6wUeS=~n^GwH(I*Mi1OUW=sKS36vHyN$}S-^%;Dd!(iuN32KR3+`XO z8fPe|)`POYl5iH+!1y(cnZ^C=*U$^WJb{d2-bx>Xf#&D3tb@I^uaeh?S_qc8`?%9( z9%nZFAIDHXrt~=m+7}&A5>eYqLTZjr^qSg2S1`8PP!JuEi++L^GvS%9Kk|P4p)_

*i|g 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 z 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

nG(vOYpe5t!}T}IK}$SRGL8hWF-CjH>#=a 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⁣y3i?iDda_&Z+L6ph-Q|$K-%oKHLi8>*!!Y)T_;l7 z7u()dotP4tln6NBf>G{B;n1ys?CT+`X3; zOZ3NQR1I7sP|#I62jLBYuBDrmmGd=Q7k9&RA^GqHx$9ZOYXk)J9LUd}b2`W8Vf-Gu z3kL26ni`UpE=~fMueexP33xlXBI6K9drQJcCoA{MtlmzJ&etTpW!Qe*Aqk(6uLapy zf8FBlAj4*$iDp%DakF9-7Z4Hg?shKDtjM^R zEnGa@W!Tt|7yawsZ}YVBw)^*+oUi@9ELfl*az#*BKuGXkW5c7;$hVScJ8vsTLuETB zpc%YFR#;Txl=QC$c3t}SEC2MU!M`6B5juVH&yW7;(*Jz);x#KbB^M`nsk`jI8TR|b zf4=zpgVKV?+W$n0-w6HdTcETog|y(mxF$>SiIlY(7=?e>=+FhDhx9s_qJ&j0;9|9A@_YVf~ZB0P##*n8%*E?^> zW4!)*vXWgu%VV)YDiT-zd$O{kzcT+99Q=babhK35ndYtg;{R(IAOkj%{xQt|UVQ#x z<9`&Uf7tkUiu#W>{zoPIM;rgn-u`1$|4yZTInsZ8|J%M1dyFK^A@ro3@70!g)nadrc9%wj(q5tyd*(z;XWRnP^6IChL1*h6)z7a3`$O6$yr~a)c-pcaQ)c zcV(M?Lta5dtV9J~GXgk(HiO=Zq!Nnrjm+dkqpM#`(BPT60$B$k>N8)F z#$&I+>!hvsj1jbjB_rIyRqZ4s`~G-!9E}dKpCH=(=pI5V>O*IR%vo1y2h_3H3A#2p zJh*8K5Y7Zw+-DdT?FxV{h~exiKG>6=9okA^Dv41WZkql3Hiww$xox}aCna{T022??Yap(5c3C!{I&t$vbFOl9%+GjJmzT8 zb;V{_Hu{*J@1y4CR^wO-#PPM_>%M>Q!5O^WouW zImBsj^&?&T(Dq81mI7XQF|$zkAS;>!gpTK8zX3kJep1H@ zYoIBqmfZRBwo9g75u$SLbqe5FXd-aJEoc>qw~EgK(NyvubL8YgPk(0fO@>p{!Z)YI8{2myW!hqIfw{U~$%0X2w4$N6^v52`{ zU=*{zQdO&yj>gC|rKkN=S4A9DO-JN^%uQm>w} zp#Z6Uhff~g$1GXAO3BnzBQu^77~pxO^P;|HzhjZ+hu#OIBn+zAEVtw5 zvpyDEL`iSzJzQMRll3g8w2ucj6htY|vtAQswzD}d*A9;)Gxz#T=d_>WO1dD2Ym%CK z#_ZX1tYTv-tGB>1`ZVV(tYUfb;=rpP<4<(}zxdvm`x(%b^?IHPOroT2iycGpmK41rjP;t~Cg&Zuz~Q_0EXY7sdpQbSlT- zfgcdP(1V*TywG+E&(%$1dF6*BzV3`^Iilw&Rka+`tY(`F* zyh65V{(xtH+6mqCD`f%WQbXrp9=h6%wBLJ*nq`gW=IVL#zAVwvy_eFv8ZNk6yAmqs zcZ}I*;z{V?9eK$%W9-*9bwN#=BoDo=nS1I2@c~=YW*Mm@6dO7?PrnROop#T1RV+5? zMOxm!-O!(AYl{Gdl^3ytyPZ5$TpD0KwYf^1v*d6HP1|y}nb|6%xTAp)ysgdcGk@$L zFk&gTYLi1|xkGodVs-FyZahSc?W>im6^?9vTj_ywOZ42~>K4nv>H@Eh=M>a1PCA(3 zj3P=S-l$9rrzgP9a?i2@u5n^@pTw6t(UMb{KDvwRu zi3i;>IU>H++I?<}h`C;Yl=;CASi4qP%GH{~cI}!Hv+mhR0kCk}jH|`vE3;QxwfyPe z5Bo`8ycnqu0aF!IX=Qk(Xng{`EdLG>z-|uP8UU)+jcK z8`=qYENpoO(d2f)fQ887hLfK==BT+dbsOAletxU7t7Z0T*krF>SWMZGHWs$X$|ik0)lcP;(xV@^p-NdxlsnVDZtFl+FI$K1Q~AL5OJSq zIg0y|61?S~himtIZNiIgai(iG!xITWXcq%Yfa_4x#zUQ@bJ%)J(0H=1fd7Wa5FrZe*33%i1k^jSkpQmcc$E|Tlt?iX1K zRxIhf(CmtSc*y>KRV)nd-eqXxQJz;NXK^GD*FV(uA}jZC?wgL`tt_Pm>SR@J$W@?7e9tHEWRKw(QWn5BHvhX2Q<$S2%GZlKn<5FGAa$Je7ir;B! z^C~x{W|n5lhLUS;AHJUqBHJLsIg%aWLHgn48Brd(o_C3ulMGZrbL=l*6xlbIgGsx>hzDJapA>q=pJ&n?WkBsi6x zOTm2^*LkBa(ocdjZO$GjWM<&zHdcwc`4>R;hn@UL4T_@0zZA0js=O}oizD3OdBZ85 zeRlDd8lrMbElN16jd8i1(;uq`dc=FogE#btY`_3)PWgtQ=nc#<&dpoPd4Wk<(hJo~ zKVHvyO6g1GH%U%Ei+foKuC{xB=Z^E6g_>UCC9=JKJGh}{&K%WDY=+a5PT0I_nyl)I|EmX7vCKS5K5RCY=2dGB=X!3-Loqx9ag=0oDQ<5sT^otCxg7jZ-}F`g5yg9 zk=(oN@+I)ov6~%36*Y^(c5?PCSp*G^kzQQy2`-!Tljz_o-?UR74_|fMSeh(R^}sP@ z35MW6>IY^o9XT}PJ7D>gLz)|nexJ&C5U;(YV1tPBj^YH#?yDGU@(ZWY^HDB->;qS8 znGcV>8c$A;-Dr&w5B12$1Wo5v$ufg)H#8fGT%ta*)>A9{$U+6P7PKR?`sKdn%NR;M zW2X|@`%|OkH96u7l9kph_lrkA&oem{pQrZ=KewzcvwVS`B>WbxASeGlMK1*j*kAn> zsmfHA=3BFU4tb50t}Hm*TvcEM&N7ma#~(<>M^# zGI{t!7)>>L`^I|!MR64j!-qYh9&#M@n}5fbP3<4iS4}~%@NlcfNeB~U*Pfn+_<|F9 znc@6;wBZ{r<&)`lgV)D3wPn|@lm@+ja6-3m@v3wKV_7XrptMR4YiXw4QeaL=SG}G@ zc)ntsMx4+w_A=& zr+%&SqP1f%IW3qa-pOkzxJy2ZjS@w9O(}jq>+B-=OD8&Vp6h0$3kI%#p1j4C{3)6R zNMhG4vpVCh=``YTZ7|zWu~%?W_dg=$iqEfQ zHZ|aA_(O(LFg3LIN1mE7n0jBX2+cg#!C5*nw1@NvTCUq819&iQ@zY-;dZ*>4Y{z6< zoOwmJsjt=jh0$uyey7-Ix$QNrZc!475#?+P*M*M^8SCE@^4dM9o5JH;mcj7K zUA`q@zqNU-Zn4FRA04iB0gzRFBwA+Hz_M~~*M_Y1SfE1Jbo{mZBLyqtDwom()7JX@vJbg_*e7viPe@-$ z6ir@?%t}x3hy79=S{@s|{Z3_R@R?7F{(j{Fxy^a4@ln;$D+|_u`P#0}8V+rAl@(H{ zj0Su4*=5X7ZXufz<$&z1jS_M(K|33HJ8H(xudFO}m$%kN0^=%{yNnHeFPByyRPSh( zAfd1z4AgK<>761IHk9L>t)wZ;@9Z=CkO$IoY1kEPCX;Zxf)m1k|1puMiQ$ zCeL)-J}lA}B{3LRQULZiBPMWjw8Xf4E9xSFsqbuwBVCw5+SBQ-?mh|AZZWhgOf0Ry zvesHN=BSLMKUm3`jkt|DZ-xLc-8NNK8=ZO9$L?&@t$ICPHHWA)GEQi(xt_NXJLPfF3PCVF%k4hT3T z@(pIoD`@akjXg3h6snyA+(m2l%;k%~%dbJSJCXd`xn+YsQ5n;?C`=Gwb)h7{`ODX2 zW;fSr<+K<~+|PUR)X=>P?dv+keQN$KQF|rshp|-W=#YWTFo2U!O&%VHZLwd$L~0`V zpzAxJ*`&&!5A&ARX8PVi94hz`C%*dSn$7)Lhg#f*gkHJ##FLwC`IkTFgs7K0`{($N zdcd2>B$VSgf~1sg?$?B1*LS6C`kH-}WoR^+YISL!eOB6M!Kyc&Jh=Xb)pFer9Jpg> zbYT$V{@s28zM+8BCmL%pL9zQP#+nSg2o=qwrQ+7+Vsnb7yK|ULu`q~@MtSr_8Vh5G zoRYSW3}%V5%`u!%xs3YjZI0Xo@V%Tsy6kbOs7V_JO`&o3wiPihqLT8{vx!0Y*cWE0a6y8!ZP5w z`j`{3>Ep7iua-J=wXGhRa0whB@y23;5CAt@P!q3|M8xoP_$?g`1~RnsL4xXFwZEvdOT*F1S{GwNTl-3wN1+v<^FdIslIZ7#%B z?rrC|tg3)6UyA|KcQx-5MYr_av<*byWZCIENn|e4KR>bCja1*7gbAxJ-~fv@C<-nl zYe696AkH~k#)hV9&V5x~Ps9aym+vNZmQr;+Wr0cH*0SC6v_~(7+CeS{ZOOfeDbx%u zDB;_w0185Oo6CUCzKi zTdp9Eg&BxExf&sKGhyk^7!s}|y9XAOlW98J+5RH->w&;ErHzg5s$>~iJ*Dvcx7nqc z%ZRISa-JBV8gBM zMv#XHD(ZlVxzg4%OlgpNdEM^>$`v2FpV7tV$E)$S4B6%9GcBsJKkqI*W!cIMD2LPr zQ5BQ}v_p2sRIaHps=&MzSzG9AAyJ^wegAD77{9a+ z2jrv&0&ugvG9SYBsV~T81E92nkVX^9Js8z9|bdVdAOb#`d2Mxsy&Jim$L_S)!l1``nqfoG-n6t=D$kV0aM z7t3>>*kiK01q7Hux(O+$FNE_G3bLz4H>}_mQ)+$J@azjken%g#)+ zBfMJ$Kjj_Gb~d`(V*y5Kbpx6~ya|%Y^pYG}Rt-7K)2mmR{xUVgH+QDYXe^rz8sJD4VW3uOn2@-i1 z>VCL+pm{qvaC?37J*8m7%IlS^f~c1+kZH1;>Uho%(Yh1@ureT3`Rw}lcrF#}Q~Eb{ zGwMz|Uu=xv$y~Kv)bQbfsqo zOy{G@wU2^bRRMuuN}eG(<^U%U`Z|tS4gE`3RgA9ORhb%R@*2t77VeefY!ED{KG-`& zUZA7m!~}o{V(oJUZi*p-NYdL86_OTfTHfWDQS~d(^a-yUW!aigomRN@G+L5pTKm#w zmf02$e^JB9q#s#Zw%N6ye@QTr+`i`_^9zFQ&tY^&$)I@|NpM>wnha;WHl$ueO#GKS+v9DLP4J-u4a^Ht ziuXUk*{N^T>sQ_zaab$(c;!1F_0vc;!S2=ABX!~HI3z&cW*Elwd4RfWbEWvXMRe|A zECb%8CW$niV#l5IpEC~9>RiX4o+yk)pG+Em3to|#X*$?LMS30tIB!ai=aox5!35C5= z4nW082ztF&tTrK&siG{$MoZOipOvE*Xa<2Fap_P1uBY)fg2#&iJ6iLqE4y;)b%ob$EF{;y z*f02IUa@N@S&w_dVb+(D7M_ly&N8m1A5J)=PRz=7?^WJ#XiYRESr--Q^++tOA=?CChNXJsSIVQO3Z74D{eUt@#FBlxkiD#GbxD0S8HxP%y z7a>6XXA1w8wLNtEhWxvo$qEp+$;S@4b(N=B%&yPbMP4KynO*>hHm6aQFV`clF#8H3 zT?g^gvYdVr&cgAsl|L#$HqykpFBL6Z@UQBn$wMrhDEKAOfX%ff2x+aF*T0g=#aVm| zt8^q~c1N#RZM|Ii!|$3oXPI65c2_kWsZi^kYuA>O!M*q2oB*GNtqmckDHI%0J^QTm zqdi%Hy+Q}S9`l49FyIR${(9?askOodr)yuI?}rpny4w^liGo5$ljn2(7ULhx}xCY6oGJ; z!IR+|MEfVi&{W;4X$ZxYr3yaQQ&97)fl|f6$`*DGRPGFAYKKT8&Mh6RaaF*ZX|1B6 z>D<}aG1#;;;-esZ~`sTaRid@>VmX?+hZy zmms9>(%^FSa(RAQ)xu((Qt-{4bdC6XkBsb})0)-f`9G;TtvzAJ3wWriugQBpH2|u^CkhZfvo+4+gVva%4XC_T8xO4+IQ!{tK`K08~=RQ&_KT><19YkpR=kOR9u9znI`g(pjSVw*gvC-~7V zV{L}piH2D7M-t^AqKJjpqZ+_t4WP>H7F<=kprM54Diw(SV6Z2YuGx-HP5NfRokkp4 zCU`fspxSVLKc0zk#{>83D2xh*$!ITRe+}#Bf{DrszY52{L=q@e6Cw~T!#5IAQF=G) zsY?-5fWE~idp&tn2 z9WRu03f{$xAxm{}irT$YY$_0vj{nVN8dkIsEUWEN*W2AxgKzF2Wu`wkT6SmC_7FD0 z@V2=bUC3=^aN8i=ydU1hJkW=wz9|tqx$7z>0`?0o6wilg-jKJ0WvLk(5$&cL7=8I4 zFyU9R^7z`|M3LcNB^$wm{|E>|tA7OKuj=rRfc#ar{}GV?VOIYUkpEW&q%m-({*SW& z{^ZO5aX0@%L;f=!u?JvO`T_wYRG*B^Ct9A^-3?`^f6bJv{Xd5J9Z_-sc;r4Wyf5^x zb{e@V4~bdt10arQEx;viU7eYK70utDxRU{ZBY7iP6Wr7hus>S0|3wJwOTkoEU z`jX08!J{w1shylyqx~|iAA9Dufk=*+g>u;_KDhjQkZAS~DEY0tK|79ZBuY@H+ z3hpBBiK%(=#mvmDF+qLzi7D+5ZsV!A{B3|DCp28<*TIr|L}Nu*)b$-_DnY zvda19kCX-Qz53UZAHzOp%ki^~crZG|%LBxWABZ^%nv@+_l_~DOikxG*m5e6#N;d!9?(vVPQw#9LR=Xs?_}{>=-o_??dS_CqU%4MUq>JPE^))c*&~DT z50@v;uR+Cr`yn~o1@i=dLd!fxiLW=wY4^r8Md5t_=qrB!prs7<6#k8ZLJHApH)^5ap=7E*1lUVcu zjq`Omw9qRve|paUNJ&`$%S+VtR(J=t^}_TidtMImLcWpujd2&^{vF7h zv%;c@&R;u#57-m;X<%V0!0M-GoLj9c1ogdejNDYmx%CI4{!V&mk^aK)i>+LE-za+i z>+mfa$SuWO;Xf0{s)#D}L)DmyIX_~~zgNw7>(ZZ0?_XtauMX(Uog2>h1FgF##;Pzu z4RoT~#|Ub{s!cZ^*pw>w;0YowAqYn+NF2o%F8tyfh7)KhO0BDlmzLc3fJtwwm)I_H zrqx_zXY?)Y&wW~y5;cxeU<{qXYYz~{HzNIX>FK3^F%*9oC^Rc(jUpg~0!k}&G}OxI zRI$P{)DT7s;u^co|GaWorYv?wOlhiFY+vQjAd?tJcSQ#JZJ$QhBppXsHzIxQ3Uz zV5~2|XsLQu_Vj=>*ul!MasGkH8(w~jRdq3zT69m}BR~Ouq z{wfZ?>zoP7udy=g?CAiBFbZOo`t!O^|ISXTfG%c6Rb1QG~ILF{XtQEG!HzX{eHMOeV2pdlLL)bWYGkdDG={*WfUJhq@q5xU01 z@pX+O)WC={fHW==PRZhx0MI@GC82k380Qp6?P={zqaHJH;Jpz<a^vVE;qFI%`{vIb)Vs%hizDQGsE-rN z>>T1jbp{-`oxJ;=U*GIK0|r9K=Lg;vUFgRI%4KU&^=IBSzQRlUt%EM6@w_>rBpH-+ z-wcRj{_cb$CqD2pH6PnO@Cp12UaHGMWOQ+7O$WSK&zKsgv96%h72ln~M;~OdOR8WS z<&1Li&v6fk%qN6;=f0sP?g@P3M*Fg)Qof#*l&nqm7X4fDIfDV8)f3*rHz>C4_jM-- zw&`zNoDlWq)pH-2$J2NI8&xNs0*6_iT*A8o3>(?)3j0f4QGZBsh`^+h0`VIr)QJ%1 zzj1;XaX@&sPc0^S@Xf!IKGQ!G*+Vo=!uBzq8M^o{=Wx@j-^0DTJpiw6{UUEU)G)fU zU&T-Ak2G=8*WDuI6&%5F-3181-f|I3&yyddqJOyR?~E%Z8B(e~I#+jR$&iln~y;S_Hq)^`GBF1K#r+a3_Gp z7-W$2_6$~zuw<3%N3T(;BzlE0bX4S5yd2ak^JhvRrq0k(qJ0vV09^w&JkV5U@P+5f~Sa`^j-#e=nJKpqgt8&ZX{%9Ac#)c3opCO z55Dxm#uMtD_*)17^mqkptG}rI6d%6D5)>$kC}odi(bB$=FIUBH^@y#(e7|$7Ug5?^BC@69K%?Xf zM;y|SxjfHu!h078i!3r1U0#{p9>rD(bD5Ga4l2~5#b;g#&~T@`?Rf5zHaS;m{0W1! zrt;^1RSca;(DI=7UW_`CbYKn6tHEdaiTez|6-Gs7Oz&pYN5CuG0Z~i&l8AwN?!l`H z4S8xNPWbE;oW3ywJ7RGIBgwmof<6JvR(sfQP6?ueo+m6hw@OUW_Y7T*?{Ev4ra$6fmY=@> zi_9q_UxW;9RrvY}&&f9k;V8J^u9x>FsCE%iJ|3|k7c?#HykG>+Jagdj9{Z+b$yuzu8UEEZaKdf9#IwS?#i;EIDViRFA`th%IOBpQWlk5rhNJ-Yv|rty6?P#LGi1w|;1ERVqma;?hmlFwhFWBUa7OLT)HdKTJDX7WF@ zIlrFm`e2Zrj#Pd|F-wULfB>IRBtgo%C809b_lR#9N#7Do;qOlI0-T!pojDF39epjSq*XHIUQ=dt9=$*704ytjeF9cisNR5#czqO(TJB#Ih*m7W( zh+=do8lXsC<5|GgayN2BLpzj6k$gJ^++2bd$}|-QlVU2GyQ2=%CBn<%Sm;WDe=x;6W@BUj zvPWnTISuDC_UKb=)BQ-(sCb|4)A*Ien{u0%%V9W?ouQrWRXZrTnQ(V9Btk9BSuIVp z+O<79*Xu3#>f1d4r{P+ba~te~-I@N`8$wVb=pi$ZG1R!WlPoKfIh?9TN|Cy?w%U?V zm*ApdH*xoGDppuqkeZHJ6S<1rDL(F(^89F5C|-L8jW-#$F^t4AtFZxS_Z^?4*(@s1k3|(lJCn`r|p|2zZ%5YETKnI;2R7E!ic)czdehck5 z_XVmpf4YO+u%?L|?Pz(T)XtNYeGk#-VlZ9SRZPxyQ$I#y0C#C`yU6hrHBal8utXNC1XHo@yj$o2i=Ik8RSwgb2)caVm z7wE{&wy-vm!B=XEb9Zj&(9)hSH&(d*uUFO7q~tMSb?tI57o z4I(zHdFxGY)+{0vT7|vWBF#1}j9_7le5(ZmI;RmmgHoEu2cUReAn;7m(`Mw*Kk3Nr zy&?^F5JM{peIe3M1LE{vOK;A9K+YmqFBN7FTnc=EVz`vwW<$wejAoSaaUV3>rW4s3 zg7r-z-LZ38elcxjE<>W`Z*Pct&wmxQZNW-smiw8g_aBg1LNh|s|Bt*w;mjQGX_2z9 zKI;UhHjrwWkJ#-I+1Y)xN1z`RG5YnGn3w4}n87jMWY_oP2z>>P#>z24JzErXNR0lJ zV(#ZJky(KX-P%c{;Q;B;3NRaW;Zoa7Qb_^QH`zf&YctLW*V(%xv#=w$ec;Tks_~L8 zqpT9uXG5FcB_^SRz)n^cIwp&U!!D;!1}x zC0U{|b5IE9dS4f5_(@YbAS0@oc&eZddYoQzl2nz6t6$&Sa`d#@m80gDDs$gdyr_I$X&f8ec|EixfV5I0 zRig1DZ!Auwt^hi4y#yysbq+KgZ94yVf_pS)WlCk*B`3|WgHKEs6Y5TKs%kB5` zH9)ns?vY4lVJaDtoLb)wy>;ZMh@mHB&qW2t#H)EI!OHqC>i&G4kMzbt#n+G>l+Mymp&eP+Zwb_Z&iOc;Ao3aA3D zN`rG3(oWI@G$b>N_%}mO+Vzs4L*I^KLb(ygm0VY~e*4E5rlP`kRg3zFfn}6f8`6e& z^!m5E(o)`g8=`-v3HqNnpcB3L!US4Em3c>^NzaI z!2Wq!8ywOSJI#cJ3M%{}FYKpPCL00gP}d|Jd_DUaRdCWA^j<814|wu3ab5;AN@uS| zuHG%7a}6U$ITX26->_v+IsJwvO9&}=U_CL8G`PST@#3$44!{OEJ>_S}h`p-D&#+H7;yW3b>(MRx+j z=hd?<4(?FSL8nFiPKv>a%g|chaGVe|Ch-9Z1$QGGVzLgT9Ij#&yRjSkcNEK){MM6+ zoN{w5A))z;iG20#wU4*^k=F1&K*SMBC#=7-NPD~bKx0!oVsveu44DV-y8}vnQ?T+;Ajj(-~phL7QMWw2TSV~OC~IR>_8HnOYk}rnSE$^t z?jXPh%I@Xr%`B;w2E2v_uH5myYTA$wiisP~8>S83i9AU3xe6kt?|B8~3Wr2lq%S2h zJqd$qXt_Wq*=qsN;vAd<=fSiUe`1TIjTK+N-P_3CLd`+KS4%LP%RPHodJE2Y`9`Jk zhKBk&hc4PC%sn!@256?Z{%Gar*TqBT%vmzZc6OY&k#ymgG8@oDZ2IXn z+uQsvZlCFH>iQC*x-VVR+<&uL<=5#YP>#;iT~24{PCEUD=urUWk!RCH&_&zt% zPuK>Gk1b2siKx2C)`B!=eSatj)vvtkTKE%8%dl^QZm!7qv0Hn^1ktnd3VUgjg)S>P zd+qfxyBtaYI{dw_Vk{YT+HtJVLT&9N?}2QL%K#!b$k=C z#tlIq{$eE!_H>88gFEgi;$f&%u0@p{w{SsE& z_USJBBEPYb2X?)vKI?FzTm6X>Bs!|MT;Bp3O)1kivP*LZeEe;;E8wBNNDq|3>x39Y zv?a?ce5vxT0nm0wzkoZ}Wmd#`NDip~bNKtQFrU4&dl^N!a|-KubVVf;*%r!A7guHfRSkJZ)vPv)W;V1%m@Y zWaDh)4rxJzQl9Dm$KIcZW4X3(!0^fxBC|>vqKuhVh7fKEg$x-ZLzK)?=CK>AP^g6x z;g$>;k|JeRhJ{4NlA*{v&ol3FT5CPOXFaZ-Z`;2A-gkTcYeUy{UgvO3=f3Yp3IBwH zog#rC$Xc_rW`TY}=z-$SXm(BOPW4j4bCL{JUP!70&Qnc?)4!^jLV{qC=Ok=?z4=C* zFl+ujhEI;nxIk}P!Uzc613G(U=bOYX|8eiN#?*A~bpl}}lxQFhcDrW zIAt>u=OC$u)KAGO1{zAy(1@`5=1Vb3LyR+cBS3%RRATOlGh|1R? zE6vHM6}3o0={Fmh_!Q(L2G#m*KujtuKsks| zdmpk5Im9RTG^2_&1M!)-Lr$AViKsvkNZ(ZODYxxx62n~i=bjR8gYbO^x5+>FHKhyS-9sCgi96)=T$3*pj&g~LxArUQ z3}1ldXLN|%ze!@j<(^0e{UdLOT(ub{b;) zc(&bL>h+f|9sCsx;J{W&E>X?uSWa(W?;D&#(m*7(KVd;N2Rbk9gFDZLtv>Q6*25s! z^Vq`No$BLejr^vl(pSr-1yl(`3UMdvJ)GYmD`H{pdA06aMPLh^%Arq>)Qn54yg*Xr z#WbX0@ndvJcWyMw7PLv9o4|>RlxZf)@tw460+}_kV@Lz+V_IH5rK0gtOlK}kZ{HU> z-jLNz$Rf@Pl4{g7dJaSzG(%?gz#V1G(R!kwq~fvkWF65wQEcDiIA##E7m5hKiH&8w zlAw5($D?%(gsM_39<0M*m1%&T;2_J-UIhMCU{~Yzz1wgxiyOkBW7}F zSrTszo40)@a5rNUe=k!B9)P^We&%zln*@!s%c8&L$uwqSQtg}JFZw(eAb#>X-ZLk##f7ezUed%B(nofSnZWkT4an_;A@@d17q|Ovsd;sXv34^UtT=_I{;llTs z8g@X`K=XAwqVwzaKwJ98r`L2qe=J% zJHwep((z*HQ&|Cl$`Aun&nwa+Pa|i=5#bXlh|RjKXVl;-kW`}>Nam>?3=Ny*r=Kx3 z1KzL=s0In`HIVBs@m~IZdv3|YV0CfA7#xuD%9J0J=hRWIsFs!zzCIOlu+^48uwGn|^_^4s}yV?9NK2RuPdPY+9T* z)h~|OhrsPcD@;M0?`s5m%UCAAc5{Co>nr=34>O`%K2fvg(}oS^AS%$XW&pI(y7KAb zXeQ3PT0wiieLSip91qO=R_fk{G4cj0{{{kky@_A<30z{t zC#eR?ck?c7zzQZJMbg>t8TOhJu)&{#wwycfrewZ;-P9Lt71n4(N3VOfwdB9`u-(jm zW8D`Omyo2+fMM>ZgtCynu68-ZXiot;8#k(mDv5Bb21zi30@M+$rr6kxo$(I(iB<%x z!op{}QS}|+l9nV9s5e4QZv@H)wF{-gPwq6A&iv+55uH;1u#4OY9xZzBTF-*Co5fU~lx zody+-6bv^Q4j&1OeQMZfui zR${}JFt`c>8z=kIgrnn6PMe{Y9!~C6IqjQEm9N-5zTr`^da$N?loza>ccxzO3yt-} zyUix}fc0rj|7hX^O1v;*O*22aWDEmNT@!gpI`z(l5*N@Sp#(z^J|D=w&e3sPt^ioZ z%wy}2$EF}x>I;W;#Y2?K%_l@*QmKi9>?|t43ifch?FBwJnB5yTw+>jHK?R&x2&L!V zBI^pWaB;J4RK;v!)>=J|BOSd^&7Fr898?s@&O2`eTuLM9?3T6EtAy>V>R|fg?KM=3 zznz^UtE8kC4L(taiqKFVydafwh&KkVh*}_dNf?Bm)XmIRqbg$QLbg*1`E}$oJ=;P| zOT3~rpVhfhT`z@&m@6^blUckzTW?b@SfGwL^BemEKNx2&LG*P)i!*=+S(?2TmF5di zD*5;2b}B7bQ4(c0cx-_rVG0reh<0BDa=maJ?kOY^H#I%b)X% zPS$1Zuq|1XTXq6he~zpFmEo>rPgc%DbX#Sd$LLb_SDHQUNMNGuoRdUil_~If$E$iT zXNfg;ZUrJi93;}aG6N!|?wfJU&=27~4|c6UEC6Z+T=P#PcHV-vX5r{~JwPILE@PMW zr=t%HIcZKuRCEr|2YOge&x6M^_+qk`u^37KHm@2a)KK0O3(?lx-6f>5I?!doWknI8 zb&85DqDev2*!z(G=(Duh@p(~e$pnAc%LBU>tMaR^Qf-Ds(_4sKr{XRHa`apVS=EfK zk47U-;qzX&vM&MW`gSzego<9M;3!!gyyIiy-jn{44ZqeOL)AZ<=1GXsp5NIuD;noT zB3U;8<%#;^E4MA9$eAn6e>~^SRV_ziSx&y7^l6|^YrUCe?L-wG-fUFzo^MrFpEH8FxWl+BbU&?GUcrfMI-o|kzX&Pa(>t6vcqtjFnMqxw+lzFhOc#>6_Wjm~su{?Y zuZstW(WQr+hoyE-G#u#zs&ixDQVr-qqkE9g-A@q}p6?xx(ug{NAnVTnIw_``Tl=62 zAuB9jMn1kRpk%hz+3`EXbp8K-#dPG1mA`DlotkJ>)|NK9CPMlc1J^1b(oEchs_4*7 z9M!joigFOORhP>FhrlX&Plk+2B}7D_>jng4AD2Sx{6QvnVArH*kx$gN0wB~zJ&TrI zk#CDhlB=_S)$jl*k#5UsgFr;RCx=^B0PXRq8je2R-G{E>(Dm<}o49}U?mIQ=i!&|f z`5IraDTILV@XM5z*-~qjs2snAOdIe5@Yn@V9G0UQk0=eM&lIYp8b|f-y(}jobdmZn z19zf7`awGb|9Rm2UPk-8Ps$_DizZc(aGw!`7IVif7w1t7U1h$qf0*^keI@3zs64;- zTGW(Y_5``?At-^axIvP+tAB<;fHum2B>38UC@n{Yx^s=PPN1YmCyRR;5*le5>4<5y zD8u`l?|28=C@lP!l}>P4c|T=S4mrrIyU z0X%i1m8nvv-cr8R^;-uW&qSP@JtN1K=~THD+~_-bW5s(tqk1a=u2oZ)6Pd4ou$U^! z1?Dm+axLB=J)dGP)vR>-%wWbTgR5|%1tlo=qwjcTCZPtY9Fqm9t!G<6x@Jr@|2}PI z(9~I9qMdq$Q{bM#0$PDVVL?rR6r|4|$H*6S2+$*FViQ%gVish`mR{@cmHKgyQGkju zlky^Dk>{*t!trf%^l#t}Gp_52L5``XQh>!(Dx!!-197)0`j%0`w0k$2^Qw_-ziRsh zB(#)SlQvL34<%uf_kv`+D#6LwFToF`Kr~ZUdw10t)s=`7xk%_Hth0|n=H~f&;enNf z(?o3e37<=irYAQ;IqbpJ{D_L~27^W3-X$c2jB%40%WkwsPFOc)^;Z76~xIY!f^B**NmUI@We*ketAEi(0ht`*}M%~534s{ ztbdB|i-NG=p(X<_Z=Me}vj@k8fE=fUZFly~!ZlDrsYknZ|2%7;ujS$dy6=egswtn_ zZ(RhTNGb?^rhFsnZ3&~0fH?y5rI7(Hn9(A3MO5S(tyZgw9nn|I@{8WXNoMCh?wxUD@?ob+9>2F@wgisO{jWx#$v`C~Z*JY06H)a@YiX&* zmV}Oy?;-dpVQL6!a=hrLoa|7csj`kIw^Jd@9B$^;lV@W*u5w;u5(up1XQwj^X?}!L zxY*HC7II<=X(XZyB~;hw zL=D8G1EHnhB|U!`gInj{k>bv5lAF_Zkyn5PGQ9okoj$*~dOI?{x=}MqAzJPMx8-N( z9D#X~{E(cu7-~_TRl(Lb)+@(*|Tqj7#2p!S7FJn`(lnIrfo|FK^ui)K8?(WxC%z5oY`>0lq0KhtM-ru zeoTsh+~t*`<}3dlo643htd3%JG=lnDUp;$!jWpPDI+EVF-xdQbh}iWXf8@bM zuI{KGs$3wHh66~Pj|4Gjq>nq5!p-@`%B7DmG#BLt@tx~|exj8LXE49>_~=f=XcH|F zWYpHddmmLRUj!Yo5rARbC{?4fFi6cQC#E@hZxUqj#1PKI$#=|nAjqH2Z+^gc3QCQpM)Wn=$Vpdf;&H696?NPm^?Wpiy*nX-Tj#2gtWAj z)C;hI*my@kunsQ@Y3)pQ@XAP>=0{K4YcB@CTo$lpHmp)Iwpx{?Gwu9i^b;2ic;gMn z=NNBl5`sB&6O{@ncLBy*jL-+_En0lQttks?%xWJl0%3QxyR&n5ejwb|#+LVMp1cpD zt+f}kFDc$`HCkv*+eL~%lRyLJS(xgTcQ|1kNM@hJy%Qw%*8)!&7B8shD5whwmlqCRAY#91Tbp88Fo!B$zYl5>Xx_kW)v) zcH$b&$njhGl2AR$zU3E5ibgUGenhoJeMd1K@|QgUYD*KH;1Fi6Lx>{@ z#rIjoPo?fn53H%qAjy?hh=S?6x4JZCwmV;633Dl7DF}$*TBy_e3Uk?-cHu=0Orsl_ z`GvzzB5 zvkkT1z4%ET8oV#^_wO%bOH1IE_AnCHCUd{PwRdEb@>zw;KHlAG5{L2>MtjS)Tyg?; zW9|!NjTS&HL#uZqZ4v9d&zs|cjTs$~utJaacGtBH(EK&a#M})q-QvhTCk?Y2I;63&c6Kvd+`CiR$=*yWMAy z+%<&0y)W&pET*AEUjGj`ZDCzSomg~PTm-F1d9jMi4adt_sAM3r@D*$*Mq#z2T=x56c(_b#MUYxAs5SllbgJl<%Sib zHT9E*zQEZ9e!A1Yizz9PoSiqHODl*Xm6`HcJWD3U&*o9f3BG)x-EtJ0l|AROY}|5pSy zGOZi&?+f=&d*uUap5M-4{vH=dp{_BK2 zlz&?sX_5LQtn~SP25n1Cm(G8@{a@q7^P$jHEEhZTq2|+KtL)JyzD>>A+^$K2EAu_!hVX~d3|)8+BAHy0n+I^FYD<8S*S`BxgUVnw`r@0oh)Lx%AO zi}w6$Z2$QW0%9A+<8EM^5*7tQzBzPE?^tj|VJ3%qlWXoUJ=@XOBKfJ;V&byZDU zM5pRRHHNP>+SpTQT?Qt0E&DM>&_hTi4aHT^s~x*<@#5Kb=c}-z(}`Q_JhD(ZTJbMt zqGZW*%Eyikx{G#HG?tC)oNmecXcOCKEl|?g*f=1d$hWLhlLbJO_&tpllU?I4)kPb zVU%PeXBsf91sD;ey^FJiT_NVSWy|`X+j-lA6e_~IWLmLeW!yeg?%S1N41p@)7R8t~4PR>>f*ze?E4w+I<+_#X6dRbqe>u zM;89lCJ0^$QXt4yTMuMl^r1r`CrY30g||{+j1qX$XhVp-hM`(6<+Ni(RFG_w!$>^={qaP~jr@#hTx&v^Xf=>E@m z{4<99pYiyIA^M;3_=hw7|C;fb_#ueEB(0eSIjsP~)#$0X5>JOZK{g|{e>XI}@10+1 z^e;VL;7kp`c!&(XJl7V*bY!jB;K;h&;zKc#T5JBMNMcgN4MDBXkDr<9DM9)LIzDcx zKr|&D0c3$gX&&?$v4I{uaib1BKS-PQxK0i&D3rN-bUmpE`fnuU&P=MBv#t(3b*u z=?06a#p#rXn$S}gG2QEy79G{01052J;Ik@>cnOe^G@$;x_Vf(;MF`k+^FZLp_cZ0bb8&zDL5?L?)-;C z_&dcS(4mMkX&T7hUxOf4uRfmcwoL+$PkZY^9=L>J=b1Sa^MGP%z>u;YAVl|=^ zJWVhME|A@INAEH~Nae070Dr90)h16y-y}UBdVQ`R4THA33nMK&zKEQTV6WMF+P>0! z(*Oo3dr4XQ#<{;42qf*bGHpv&pcK~aZ;L55jW)q8)oTVE8n$S_oLmE zvXs`fDkg)xw_c~br$$Z^nLq$N{U`&cU{Gu_i4jFZ$eDmL0qko&7KmrfPe=B20Y<*L zVmEu&Wiw+lQ{eUF0bMN>`h!2cZUiiN0RR13RribN8~5r1SJk2UqB>GH87O=pfs|tA z5hgcBOr%BqIBI{Kii96(pXuyjjMCg}N!*M=eF>q>5Boqjog<>5*QKeu8WYSjPHUvo zK^D>|eTqO(Ha*jZk=sG2OAMi|nATO>ouMwS5n}26pMH?W0C=ngx;iFUO#6A)Aq4j} zm@n-$wB;13K(ZW--GG5>hBNc^M`3#@G#B}7lNNv8NBChlu$l_tzw>NWx~UK|IycOd zGx~s7glF_Ec#aI)g~+31HmJ9q5-XxFTd@MuVxhIjeF_ms;Dmbb)vxE)uLxf9v7K5) z%okv~J$RPTVbpE;+g)gU#{*n4;i`;7E$4dxSL?F^WaiH2U*R3qz`=OlQH5PO=4jdl z6SLP`3PbA)CkT1&-9Ne+0yhv3w^$ZbRf zElO%PQWsN<@BxTwi2CfU0Ixet4LYhT6#n>KZM*x7x2^irw$`Vw-I#B+?hJZK?ymb2d4H%}br>uNm?}^Z*+`4W3nDb=4h+{k#n1K%Fkh)fKSnwY`@9Bs64H z`|lyv2^lp@lpgikz6 z)q$W*^X1f~aA=iowF=mG`CdDKw5c1I`MUNvPUYB=QkKrePdx>|sEE7-8J-;|4I^N5 zuiR-1el$S?`XP*NN+A`SRZEEYOCu*7oMiNY)BqBupd)MY(>X|6<9$l-ZPn=K=;h`2epv;M*fdBBRAUg3>t`gE%ojW zUNLeAU5lP#K#j{zaL~LF4u2@098Z_G+~DLFImW&#;(;oOXhD9DQGhQ` zACak$%vIhSi}yeSX#@0pc{w0N`x!4Kk~8J$zMBM$UL8K6&!brJd#}FDh*Mtn+}K9U z&%_(RO%fJi_HA=CTQQnq;nKEOrU2O%Ss?b0K(p(HUdzR`nENH!=c!7=4>UVL8^)9M z-gW|vhk)-t0@kU%KnB>O%|I&dY0s8%$x6ltke{;$ueWjlwask?Dnv)pkgF0PVy^+) zYp`vX1;@&HHNj{Lz1xUTsT9Mh`ay{Oc$+YgV53*7?H56w;v(XKw3xVe>pjAkUVrB= zStoEBf$=>FUd|fc#H2`f$TXURtPYWzG=O|_k&U(tb-M?I@rhm`tM?IYNBTUqEy}&K zJZJ?Je87}@zSwjEdT3qN3W}UeMa{u2d>GnSR;O_DV`pVa-O?A(=9(L&gaFJjRAKE? zILKKXQF_Cvnx&7NvHS*b85+Mw8&(`XMWbC{*wzQ=`Sh$jT8Crr#8&#YHn$r=W=+$j z0Dh1!fcVp*p*G<3Fa2itiK`Cvz;ywBv}UfVBKS>rbBOIU5Lb0}l!5N)Be1zGsLNY* zIIHp7MsW8Jdhfgw8Sj_UeqOe@s``S9=&-YIl!sZUT)hm-I-I*e_ZNfMHKBvBf`z-f zxv*+NzX84@_yY?*K-lN|o^8gB=}Fv9m7zjsu9b8qVppLm)X8i`d}`&zqk$9bN_bvz8S=+b)27IoRoH1w#tnTL@j}5O_ z0yX?u*AOTlXw0}b6`#iS0TB5^5u9te;SeRbA6qPxz(^(F4B8=>NP7nsEK*$(yeQol zX(CbteBCC_ep^6bcGPX#2KbY9xxyCLyr|AcD0GSncvFdORZEuMH-hfQ|L>9V8w!F1+xel0C4fKIPfLHrR@ zSqVO1cr0ed4*siIf6{aEPI^U|eKGhrGV$W@a-Uwx)?DH8$V-2$ciZeHYLzAl1h$YpGil^qMC&M_krokAd?Dt?Dfc!@dHnL8S&{n9zH_>2O zt5_6ZwVdUNkD@7H;xz=mNs9`*ZxJl7yZQbR4ri;O^4!^hG7p~3MJ z15rB7@N;9S6eEd&HO48Afx{_bhPj-lsI`&o&Qm=DlYF!Qx$i1I=UUE%s|me5f_k(^ z2j*s|WOdPHQlieD=S~qtM{X9)KpT19?rZOm3ay7j!!-Mn zfPO*n#52+(eUGl5_6->h>O${Zr1jaub1c4KGDx*Dd#6!K>v-a0W_`z;~(@* z9r1foX-fjPpC7*Ft}16;r@dlZap%MkP}H(Wod4DZ`5dnX9;J=dLMixl9h{a($ihnw z*$3ZLoP$04C>WnC@kbD_r0GS;(Y@;PjlaxN>DQfH+1;i0UQ47#QIg1E9+ftRmbX>EZRXIop zPIjh};cbF;?_dg8oM+k6T8^4s$9p1P*P(Wrj7xXveGP+j`@C07TP#|7)}q$L^gV|= za?ErsLz|7DDdS6(i(>iieNctS?vmL|xJAQmx?)N~sSjzR3nIKP7Ua$3=lBYiz_${S z3Vx4Tq+pB^vB$XZLbrB$U@tP>4Rd2`;zGDO273{7{n|H}g)@jYWU6icH_JUG*@9yp zoW$cY#CXiMuL*}rgXp!BWcO4;Xx|~nUywPI2~i#sZR|txla+VpMElne7u_Ee48E@C zx%msz$mRS7!VD)@dC6uPL4uW!ta1s;2L(ew&NJA1pz`71MzrSgyg@#w0oO5q--zp7 z=U$lXF7h~iClREnRQ($JzJUpd(~ug7s`H$nCaNTL_)W0WJMns=8#lOyM;`iDRf8PD zPxJ-XrGW53XodqwwT3l^VcX7cWpH9mNip^px^@)dT)GVYMh10wc3ByCID{W5=(?_U zrFzlg+bR&BAEUAY;@A(4^&1%Dw>v|le(WnJMIi^z9n=yH{=0IIw3u}#=^a+UlsR3Qi8;5dUciN7?eA!>0Xf0ib!0a3d z*!hKinX)W*72PlMoPl>)-3g{rO}KQ~q7zD5&9E~f-I;w~ev}^jVP0|ds>Fr~kd%sP zkQQ;NXVCt>M-I`zCzfM{Fl{Buu$yr5y?+TQB~pfb3Zz7df|TP^?qAM=a+r3!189Mt zDEtZZVqFtQ_~y@y)eNXL9|fFU{=hKHeHG&@XB8V!(TlS2WaY5BA=HL?q~2`vdXJDF zQ(y<^P|S$AjeoXq-(3H91qR@>4~f4e%%_}OTSHmHb7-F4tc?#K>IWvb8nWD`;wbJ? z2hBDkWHoN^{@{^cIg13i^dEQrcm=fp!|d-soU2{xL5;t`c76IG)ll{rTJG9FjN|E^ z<&z7?-azA70mx=-gzL#bF;>e)O+}J~Qkq|40RT~{jz6%jY2o}2BTPh1@nZ}eJi!X0 zJmnvyHa0i6psW^$$g4ibP+O;WK4rK=?O(Z+; zDElQWc?HztE>egbdr?j_0^Ugt3U=-TQUhTj3_PijUWxBke_{$Q-8~kHmI7(5#sm(2 zzwz7}5acQ3EBIc?ps5~6MxBwDwo?5sWrc1Om{R6E(LJs;4Voh&OTJxe5T2=mqdLac zk}O9`>80y#ckCaRFn=G1)H|>xTrMrrVi*h)VPr743P4>%;f?6~4S;zyBjvlR#SxK6 z6LV>3k6KwOGw(8z8WSoS{~ZZZ4Q5*W7MQp(e)SpD-cyR!o#sFc_bjURfp(F9&lkug zif0u(zj+>_dkuZ*@o8{OuWHg*-(W5JY21&A=G!8 zk|mIP9f-K=yW60EFW)eh7Qd?)x-xRw0`Zx!VCU_AK`-e z@O>TM;L%9GH{?un zHexVh*KdwE4*%- zPu5`IxICi#;U4?(fu+$lfhtu}ZB*~i1A)AOi3fgq$3cm2z#Yi?s%3(&KKyDE@7jJA zA|0zxTrCRG=QGVV_;V6yT|*wNfF8vtcP2ySrtO!!CAon%(n&bQ`iep`?)387MzJ&U z`m@2&2c95xKAS*li8Gm5FI7XQ)w8}$1NS-&)s{;j9b0*f3^ck<06M>31Fk}_pzC+2 zSjYH`kxOMk%Dlp(A0Aw;qR9tbpOmzGY^-?;ST6I`3*PiQcPd^8jQIZhzQ%hPi$PM{ z2IPFtpbG)HDWpUu4MDi^cq9^+dbiKif$zwo|z4U|sOP?gXQ>A#6VJwkUl{XTg6vFuGd(AJauj?R1Pe9HTX&$OO8|B-BV3~oj%@%n`k?{+AN$1D+E5O^2v%qaKZ&jtVu362 zO2&6l+-ei43bsIe8jsEtb7M$6v>C7oms=f1D%FGW;OaCX3cuRI5bK-iM&NMVg5XZZ z#JP%T1Su7u>@<>R5wY2zx@3deZ$jwibUkaixrYPyxL5!4lai%p`UFDywz);JtLUg( z7;KJr7rC2eUxIY~EHN3CHT;kBa2C6esi+kQJI!%)^{8r)lm+R%g!9lMNmbJhTk0e= z5scUTtHmQ&#%ue2(1h~q$GDoiljxq%G@C>J80ym$3#F6Un?rCp@w|aUL5BT1L^Q$p zuH5q#P}GRB5ZNHwbL^f$thE3~b68vUYH}~=4$Z^C5hwwg_}hs+LT}97(pLjJJ>Mf4 zSfzL*PJ^yG-Awhi(kK{P{n>4I?cBof6WenD{Au?(?TZn*xj@4~LgY0e0DR%%VM$xh zsyxF0@W4|>5qv0IT1^k5q?Ct%gAc+{JDPNV$R$>%6a}$wM6wb1$0#BlqY)!s19~mE z(0{ywp27f6ksje~!>lUfSkY6ouRi17`Mvnp5R`W|Z@0Hv08gT|<(p255un36#Ni!A zV{{7`=)tD5@H>rnZ&8yhR|sIWcvw?nv7f?)Mml;-4+A3I^Z!k$v%<8c*nm{9tj%oaidR@b+Ij(E5aeF#HVCnJf#yc8`Nshjdv?T zk8Ug_G5_t2|FJLr3win`jt9O%nqmlbwr>rAr^LHN*#gt zfI9*FD!}j4x8z!hFwPRZBNpC~y%4;LG16gZQ=-809W`;oOGA>H9vOcA9QIT0!(Xzx zKFGirsWmjI{Y%1AYYT?8(0kkHUuB4Y{|DX(k$v;owAnG<5f7KH!$%(1!$fNFz*AhC zwKK5qGo=wGG5OEDkI8$up$u4(Q0$I|@0cm5j>gb)euj}N+m8exti zQ56koRdI|X3nNuQBW=Bqff05P1YuXdb~%L1!Uo*g{hx7J_FtSlc`-cW1N-u&`zBfs z1RTGSN&isR-mMKn#=izr2Ak7M(keOcV*1V5vXXS)4`<>^ChevpZ@!n}=-pYFv~MIQ zKRFS~u`lS7cKc!Zp5tYO?Gy78MXtTiM^_&Yopp5Ab8VAKEGXQP?v?(JZH#L}`L;gY z2F8IEQG@{>c(;Nk&lVln$WtTOcFYzX66{uecnvgnE{Lay+d${lOpy!QjQwvUJ1p=2 zR_EUh`k!0(e{=G`Ir)EuJ^4Z=UG=vXz`vI4f4lczQ}M5V{P#HlVw%YNh&AMd$XicC zs{@HMU!4jZ&Ut0V{f966>w#KVz-{pxsPtm^d39iYn6nt}g}@RQ2Hwc_;z<)M2H;Ix z75GJdeOm0UndKKLvM%OJhlPiyCM6~1S$_|BTbMQ0b@+wV2%3q0Cnep({WKSY=ke#) z4?lspY@cX+=)Y$7-~ZuCOUs?E9IgM{$hC%&&OoE{!1sW&A&34wCi{mE`k)2Vb?cfO z2GRsYh?G(9N#4JoYhM5UU3#x2$LhuBRk~zH3`LlZ)?fsee|r5E2rFa4A6R04uOHA|`5?D1lO3)geqcAsS&GYJnH(f%$v~Ncc0$BpWiY` z5UI$k_4)ftcPy4Q)Uuk$s<<(tUlMYvP@Lzx!n4C|nYM4`bSC1ZHT3G7f3_RTFGH*r zN$~}HSh18*Jek5qZ#bx_soPwR1a?ncsW(u!xfwvBV{v_Fm&w2Ood{~3Yhx~jP3(20 zgHKgUIdAmV)|G{ob>j2)@83ObHm9%ESdL?+soPIgH-K$fXc7LClS^uG-Any^gcYY( z)g4!rrMmAC8YTI4r+HX^az_nY`4Ob)A5J%1#V{EV)NAj$6cEass#qXRO8G$O!bzcP z9J)=rnuRcD9QK?!>W|#QJ%_m$$#o4l^g*hjqNzzMw06iymITgquBi%_x>g>i3*q^1 z!9Qs)2_{Ptj8b9J@FC0vOuuAMzJQ$RUIxamp_W0Elyv@>XAK#jFR%?i z=r;{v{sA4+m*z9=dyC)aL)%s4=gh zqVv;z+eQxyuP^KMB@PZeqX5%s2L9ocyc?KD4FlBT#oSDgh`~pyA*?SYS>+IsmX5U`@)WxiAje1uczCRr;S?#;v3o+8 zKq{CyO7MERZ%!0qJC>I>L;9~!=hPEThP}Mi@zcfJ7XRTNIDvT#=P#gB7SgY%sOae$ zAm?5)Ai({%doFqDrBoG~Ec25m6P~~>VG_LSh&g(~F)elGecZg69^L%kOBq4{aIhLY)r|SQ);zQV45!ooRQnMldPT>p z&lh~daKb|3cR36u`1Vqep*xdlTierEPi!?LoLuo9`MpY-~63Xf;t<@WIoT`!M*O;60fTR(`BUzXHQ>d11d2dh#&@X-^H4a9m9Sc#ES{nT+$Q zpFJ`C9{5>bRA|L)V-C(8M;c1eLw6(?hgT*%+}?zfZ>@=rl|;EY{^V?E`GWNv?Kne& z^}hY)yCRErzj?#N)){;MzSyrXC30>Zt~~$!)CddanS^`sT!`@_@bTD&C!PeOkB6x zAO^#{_)6!V1Y#Rkuu$+0)8>2NZtHnfw2-U#{%R zWQY~>cJMchi)D+RrgsrC-LQoL*bV} z26l5AJO#-nG(3^q=%12Qf6-yJ<7t1szDX9|HhDoB!^`18Yw?>hhlnIv!~Svp8we?} zH255IXX8^LU>3`tt={Q>n~uXP56a;e&Q|tUhuNkSB_q?Amv)|LpdDVmf|NNcX6rtbm1S*|I@DCg;RZ3+e3kn z25*xcaGjNdN6yprreGN&jwTTp@hzsVYde4I1+&uRZE3(k3lEwMR6tkwt#vH>FjqGN z$-KWA~OumY*~Sjw1|#WBBt~QU;$t?)D1q& zVAu_AR3;($!;#1YF1Lp1pSI{C!Q1OcKOM%H3P|&_V2hMLXfNNn30BcPvan}|1G@KX z;qQ4oL&+$X)~<}{O!0oG992a0d}rDqat-F0*x)>IMmju5X-~58D8$!_<|gF z4wNb!x~RN?CNnKM3A0grH1-IMf+%RxeZgF*>yP}{JplIo^p0@p33p2XoYqzZ`z_Tj z>{c;}A_A(Xo)#%+531G*}S*x6b$UooYJc#LF zNchoZ-~Cg=WINBwH}bqaj3+0ZBh=EMlcZPRU5ZLX6KX~%bvZydrjhSIEwlVBu*D8K zpDcvubl$4v_A$sVTh$T9*G}e0lTl7WtLU^gVBZ-8yN z_OL0<8#rD!_kEt;dA#5!T1Ya9l1b5E=Wodr%~Jtky8+F17v~=}`fw|vW@RIQjf-O( z00fRVYV_Ok`m19cYPWkfVrp<#Ayc z28pjO(pmkbBdvBX*X*>2Nq6nfd{8_no>Th(b;@p8>scxdf1dm5;8G6)efeuz>GVHI zcBXO4tzv#2#V}_u zGfn4UmK<%RF?BmyBz_{xPx)a)_UXChl)VNI^yHDR=Gp* z60sHieqTYo9(fvGuT2AU_kn(nX}r7dd@}nv_qX*XovaeCdev)yaV9ZK+Kei+x@3sUoQ zZ=Gh6Buhrljo@i~%z;7hsu?j1^Q; zEe$%|i}(%*n4NW|shLtDxi{&W2s}p-uruNm#N7U%QhyQR+dHp zd8xVSh#+b!7a4rzUN=5f1{A{SiJv%PN3g{%IxTN^9$@mW!y<9G3L2pCxj=t{%Qa~y z2lz&)ojl&3Xo+#z1e+`FJECUBQc$vRPW`ffM^R5S&q%?fcmKiO6N@XT4VkCw&34Ps zCDdF|8la(bUxAC{WZ!46ek3BKDBfuP2J|asbw4wYT0+z@JgAxAE%E$Ak?r@j9!DZS z^_Kuh)T!a#cqk{a_$#+u&C@l+cVy+EjPNDQ_W{w~L(bnm^z7n3K;eI0zVqIQm{hcO z85rH33Dy@6wX90&i+ccRHjbDwd#!H+XuOGybdfK3YT@7WXN zmMdt&Wr}0+*dpWaLt1k+j;!5e3Vw?$gFSdLaGG3J{dP#=pmkIrv z7@Lw*FMnCL#FE_-TD0QfMk+-$vXl2qm#c)Ce^~k#IZye*OEjH4>y4Wc2H&lxeIH#@ zNN?Dii2Ce>HTqrA1tk*>D?NPd2F2lxDxWz5C?||0{d$#^m74*fpPYs@nmBUZX_mgWFR3r4SGX(4EnQQ>ycNo{hx0LQ zWQOrq^)d0bHM`pr1##D&c-Wb(&iF|PFs=imyuKo4cnMem_fbPNXT{;_l6?zd(kgdY zYFbur-@bi=mM39wD}Ks{XPW`MW@+Jbd`Miw`zBH z&6oup>?;jt(tD!xhAaHe3yrLg^ktHC)x7$_QV@Z*K-0u;KK3)c_O?f~w0KvsiXaed zlt8>Yod05O=Ou-h26FQ;hHMO89a$G58^Dn+g~=wJl&G{Nn#mit7L}6ao~v%juXli3 z;SrF(IEM&YbAvIsHE;|ZnzMr8W6A`=34@dO*KIVtjr{M0BM!aR zz>v6HISMO9DvX2Pnyre}1j?;p^MM&)?@^EwR0;gy}sB@@>lwi>o&UyI- za=E0!b@AclN;C0J8yj&BVQ|OWjD5#@6DJHgjMuZVuAL!G7-P&?XciaciyG-^`i|;+ zImR7T(=u-P#O{+t^E9HvuP*}GMq|%Dp<`}gYX>zygj4)c6`3!;m>V&`Grn(kG|!uw zBRxO}di^=Sr}xcAq*GFm2z>Q^?yl-;2%Gou+|8{z-EW=aQ6@^vO^?g=Y|VV3!!IAwKp z#}0^sUe0G-m9-l`J5@r(8017^+y{Zh85`eOuTN#d-2!@SP9`BOum zt^^CW#$e|<>jsz54P;?)3beV`kYp5 zdPP0uxo7revqKu-efM}Zb0!btVf+)#fwGw&voSbU!GvR*_imp&QWl;Thw{6!@Y<3~ zx_dAFV12cogDiadX7j^Rmv_fY2LzpJBcuCo#@vGog;jqk8x%WW|I>t0W``a%|}D0fdx20CVG(I$lhajRD9$p6FMn}<``uK&X&%8-z$ z5K|rWQvfPNR%NmWKQOJo`?6mJp0+-{XFjW z@gBe5AMg9ecOS<-w%xtfz3%%O&f#;NpU;^F(PRu1RAMcX0lPP`S*d$I7Eey-c`7HAd!tpe#cD`)~Bx2ZO+mr{0LzS_wi(CmMqeTIGK6 zLlvsSMjTEbHbX{;)R?E^${#SsgW^a^zFR>v>fBuqIz+Si1#?5c><)1IafJirZ~X)R z%s{PDx}i)w1K&wVZh4j-?=yKQqAi{*!HGk?ub0+l4&ZDTgXr}#8eZJJyV80-?XcQ^Rs|1>=q#FKV*ICzJ z#0GeQ%O7^5!|H@?NSL)nf8L>;Zsej+FOyb@fgE|@SB#_JeKBp3;ZuHi?}sPvZa~dR zOn@ja>U}tJpyQDn|7Fyr?Su#F%{~yQelkFO`g4Bk`FOVv?JuSmVo&9$Nv1gKMi#TZ z3Id^U!HMDi2^~<3fCj(8GdEmIW z<^)zun7J=-e9kl|@g~!72t{7$Q@R^wPXbVgN2T!xQ&cem5mkaNft|CqaH-l_kE$1F ztqLe}o|#8L)mnwuYK3b>*}YI_=4Vzh5zy$_40h}1RIxQirG`yut{vo4#B0&j4utMq zQj5}}(8$gIi_*x%L0^`qdTYZPfh%8I-&@Scu5Px?6;SEiue3Mte&N)ODd17X=Ud39 zexZFWMnY}{C`CXLqkV3R2P7Y}LrPwvY$u-OemdNbc(F?60g}Nw?PpOQ?jK+6)qgUI zXF_|zLELr?#@~Yp5<-3Wv5NVS6`?F!fBw$-tn5c5tp0&tlPZM|CX zuXBMbooa8IUs}Gq*lM3qZ5QR=Y6(g@zlbEy`65NEbb4L{_@L&9aUfxn(;_jSt+SwK zTgsQ3e8hW65Sk46+>aRXpnIrh@sp7LNGiT|$x?Wgjt@ZX^{hRW`OQe_H>SP~B zc#2VxS)ZF#R*`iF@W(XKILCnjdyV?Vj!+&OWJaBWHc;+!;jmU{k^uMJDp?}MIr0g@c*VYp-N40mi&SP) znl5VV7!O8j7Y}vaQef-Rh;X)_Z@cb$pdPf=BsMqGJ6l29Gn`kIX79`*(+w@}y5yx+ ze$>{VW7K`lRnIu^z@TKRf-MT69fl3h*Mqq(KyM;hHnzD0IV2a>`m%F2?qaR}Lq5*u zjMsgKn&trY{7f7A%dkNE6`?&I2(tX=_Qk34eWI@z1q$I1gqUt^A5E^LO7Es?U#fAs z47i__g*{5LzyQa)Al6z4$LzP(T!)GGks{vvY1Z$nAL&^^#NGJC13axL&a>~i&lLwK zSVD`C)!j$WE{pQ4wH2+kwG=w?bByjS@i$F>dT#3F)xrVem6fJ3oU~v7smVD3KFgji zfL1g{^F+E&g5zd1-@McDVgmZ7a@5n)^c5jg3=a9HI-5NcW9<5hZh z?28A;da%6AT!)~D4+UTR6M7SKDB7I;9xr*yI*@EhP^HimL>k0jNJc74sXU;k^^b2x z5#EsALT+=;S+19p2X-N@_7d5^lxy@ORoF%px9L zNNx?rVcP}#&`$E6%5G2}vsnh-XjlQqwKPCEA7!i{)vw5hPG7dk^i>nwCjK&^=$@iuw12eiutEn%-8vG-2ZQyPvM) zTuM7lTL2Df1fc*;U+m{R&Ja%lFWU3ySAn1h&tY$9zhbYUr;Rc4w$HrzB{&vN0*(|# z)_C=i^{SHTgahAl2r_`05K~5Ozsf<|8ias&K>yyTG(OwfatQ{dE7lRDfRAj5O28(p ziPB9okak7E_)nMI^cdBGFa~bY+Gap#hk$`zo2gO@nx@7Q{SZQrMA&;%_T9dChM3wn zq=+A6Nt|3k^+KXVYu$RLLUKNRQ{+iRFoi?>TXk3V2U0pZpNCypq*mp~32u+u9C+pV ztx?qGxuGi(h_tvqu=RA@G`!dzaN}73n9f81n(<>8LL7bVLU)%|5UZJ4=_x`omQrJ0 zNRRkI*VzD zoX@0tRvQz<^@X8g6}(5)bwB5gK{+YWbDFPo`BMFb6ilSqCEb@}YrCs0Qq(2xd z0rk8A>|WP=c={ByF=eA*YllqtBBY`^lER#`74qBD>!sh?*nq6r>wR{4j!1k~Ga@=P zzx}xKnso}cxQUIaoLx3ZMaUz8gE-jnKZKjHoqB$?@$} z&bVb{D36D4N`xE$X-Jn16fd|(q9gty{`CjcB}E%6MS+Umfn(qgk#4T*S0mPET%8Cd zaM^on!!)c4hoR8r#Qr;WT6#F5$>OWvpVNh!I!<%y&;#-NaPYMkVlWJY?#uJ`^9f$XQ9Y~nUT*B z(neV}2ywbb^cLi&ZY&ZQ*B%hPZ=gX;+ADv~SiLn%dzV4rPurrxs-eV={Yq{XBi zW#)9>=0RPVPWs6oBcBSKzMW%?JrpQ@B5Gcm%2hc<_pRl()*d%6V5Rp})7blU-Hi?^ z;!nR7jervU<@%5~lvpgq2o6bdc7^CE~I1js+kKRQiMQqttL+Yfs(*PIP!T zZ9UptIR8GqtM|{`tL^_J_c}>NM|@SBX5}Woo0j8)`+cD1sTZlHkNfnx-MPn8d`UuE zf!J%*i0vgS#1eh?^98jQP>31Xdtl|){RN~ovK-r67!ja0Xw;(>e2xpcv zSME?C^OV2Q`x5d=Q zu3l|{=;(_0DT%AcAXi*}92KXp(B1`Ni!-lBZ9)-_5_wdadH?~OFZHJUHF`mkY#tzu z)jQLJst*qlaR|nR+OQ;d@a_@hahd8VU#gt7RZwX@EzCJp;W0I4?IpGbi>^B9O4*&E zP)o2O)Jowf3VvY)osUneYiF9Oq$u4X;)hsPd6eY_0)KW%_Oys~3|&UYsB8;|7pxkS8rB>_Ze_9RNFSogG2A%kY}`;STwB2V zi6%+1jF%}wyQQ3V<-vpuv1os7l+^g4j+}+y2Ul%5j0d$YZ(ctK% zE28gXXde7Dp_5HS(ie1D7&L%p;Sg4=Z8sIwK+u&QrzsGBQw+KG$3@mp_+6}_mqE{A z`myoc3Y1O+)H7q-qrq1I15nvUY^{DKydXMBNq47-LVvN;9;C{R0q{M|A+=WU))_>I z;y}9Ab2N0iaC#&(jZLXBfNWt*TRcLtMqgaFs6#N-wJ~YBY^vwt5RHxB{h{PzkyRa{ zPlN-^JQAH09zUXIkc7jt>`23c1;H0>FjBi_U@DDZ90u+&j}uBbz``;ZN_(lWpIuCW@LXUj;H zMtn$2hE#BB1!2;zzULDTU%iwAmcOZukr@ej+k?DioJir+qal@~viTJNAbBF6v;OLW z5T{~Zaqip*@sK8o0q?QMLRO_ein_fiuAI@Ne)hiXd##Q~nL6tJ{f;jo{Iz_$%MxkNJ(!Yh=|)CfkN%Y^fnAcec?nf0 zoMi_+^AF{!Z76#m2-@o}j;U#u$g|a}mg!gDJnY_Apuzg-o zAlCM;oS9nt0f*v$*z`dk_KP%E%x{eq@+VzQMo@$HoNYDK6}jq+)U*BK)hY@8x}WoK!Idz zQdg;y4&5=yqbC!M;Nx`Ghx!~I&K^05Uqh2OL*5XR18VcSHUr3|jf-X^Yk=g+jG{;YiDs*AYFArNUe1v5%i4<~xwaGKXL?qkRVC?wC8&iS zSm}gz=kDy@)DX?Fson`Uy!i~y;u2d<^%Vh5{c@Uw>&zqwnqCOeb2VE}&Ryx4kgWVR zG7)(h($J=b3=HuhRMO&#_*~2yCR@cXpuOC+o#aek+gn~KaVZN7ULYb_OSXx}Nqf0n z-AJOK`(AYK{N_&E0>W!{oS5PaZ&rELFyeZyj;E4q2&6t&XMg+SE< z0W7P!XjrEZ6lf39tG$<5JQshO!9p9i_T4!+3`KBi3TH9v?s4UCT*Rx#-m$gJAOZAk zq}R;jD&|lx0h5kd*FRtcD<837Rx55N>VT@J!GM?yG}vfS{0F+a53!D7CcSY==y0lP zq}Kz%frkn&VNMm{Ix3Ch%lWz0>dxxHhF$oSf@6oe#r9o3s8}%}=oB`sO-%_t?0V|k zp}#!~dOCa<;3nVmZ|Ca&xs>GP;-R6ufTDme<^$a>ehANPtT5p7pD*>V*KCDbWjdt? z;j-Z~xyOdx)ls#j{E=B~!mAG|)?GX$EVK2Y&YN^f+v?;@%DrKf>G`72Ta`nNfU#Hq{CG9AurNIz@d&lu`{$hC$;nXhdwE^Z z4F@8T?OQ*v`7fp^FvxZm*1iAyI=VW0v6z>{!`tb{9C1|=?NQx#&IN1OoF25&eE@q9 zXqh{O*$<7E7q|xk;^O?(Y^*7!{0M+v%$%L|!lcC8XGT73!{>DM6h1I^AX@lcb92)y znBj~O>sibh)++8Dmt-X1L-=KmUga`1n4)}vv6j%|Wr8EhyzPuxVS)d^pn3Ad)AQ$> zIBD|-vN(adr`S2#I2nJ?t!oFf%s z(}-uZiK6^%aW^rk0*DtGXkXid`GYuXVt;k=o>5pOpOffk`{ip|)$l<{SK~Eb70d5a zEZFhzcZ`m=V5!my?;pb&KI*{-Kz|YVna97n!{Zz2UReTrSaB6Dq_rDsk->WxXM(|w zEAKPFTmiFJ3C{kj|9a(YM!We>q=*L?*yzz1`jnab&qcCjI76Sps(BvDf?cfqfreY^ zVrTEf2SK*kB)Wt2eEPdxV;=?nW|9?ztHg7Y~-;0_Q~$Ud~iNZ$7aQNFd*`uRVZEOfZ_Mi>GFb;VBDeG z{BN5Vv)7?o{|NtEm_q>uK~PXUH^aWN$A4B{B=M+np$Ufq^{fBm`#r`9O1C%k^Qk@e zcf9$RPpe5}pg;B$n*odXyRhrj687a{+DZID^3v|?C!K-!!(r0N}oi2`+it0<_8E$M1A*v0i}CfmH%3nJW*dGAF*Ph+Wy~C zG8>UBo9ClhY+4C$r-){o|fm`spX3v(eci}RB8t7=yJ*!mY znD9Eb{KKb5lKS|N3H@(LXWv0pfl&Cq!47M5nT{hCBIZ~hgMt4q zb>3*_DYIYY_Pf~k?GAZAbsm4+)V_r&xdFnX&p)?7;5m=cJU=OO=#&xOM2@9+Ou-g-obt_l;S%SbCo1_Bqj z^)8vA*IPqsK6=x}zr1|^XlA+YpQKZU82!o;r}=_g5Z{_SPzXW!qOlV|GOiVl-#)5v>0i;Asvv?EgSE((o zO12n?xeOtEO$Q@qf(88?_B(=9)_=3+qzV@ecz=4s;#3;Cwr4mJgku(tM%>4CB&5`# zFJN_kZFk2Om3mKWO36?*ObpQXmtT|is~`AH-YQU^+Rw!FPNuAV2Ajl;)~yXRx5l^q zxdHyR;&2~{t@4NB>_1X^S+^umqKL1NF=ytgP8=MCyj?!fcoutK?%M~;3eOXZ|J&XE ze5+8DxP1?2feit92KaRg+h!~~3y*^*TEG|y{5>*gmXMs?DT*YLDVYlpqC#*bLORU3 zpw#>nCp~8#BZs*m|J!;ug&@Op`&2Oeqz63LpxyRs*u;KHxN2%MMY%P~gfkB!lIpj4 zDzxm%x-bO8P3LQ|L!d$UppV{ltYo&E0qkytw%XHbXCQ$gt`451UkIS4~Y%8<^;tQP!POJd`KIo(2< zaJ8gd#D2?FyfL^Xp^WkKinnnN@Joq0%o3P$T}%MHX}9ZLtV{+6a{AH~e%UaggBkE= z6h-$m=H!~D!Bw9J)`MHGRwHw1+yNpz_+do%%ocXVv|4y+#7>?iXJ*?nrrYogFry6A z))36pnZTctjKzJJflZwOT;0joRk!tO7yxp0UvrtE(54Y-cv#(<#nxHyLF(j#^uk!0 zHOF8^kFj^6RbLB#dK|y~1>5_Tz*WlQg|D_=6+-egf5wi9NVB7(br5OlZe6Q8k*TfY zvvkL}hB``V0PLC|Pf-1>a$qfGIO>>PR4? zPCyWvgGG!9#vA{4hxxw-j~7Al)13PF#~g zL33-1QCcToD9r!Zr*<@&p052^GN0dflJZg|>T__qoF03dqsQC-d#-m-ldjrp@=SI= z0z0>NGDT@%G=o~%0czuSHHV*Rop@Hc;jYxLH?C-P;?jvq#c5ByR56o+0r7#g_TcSN zwM%xvicxGy-mtVb?B! zLJj2N3ygl_(*9pOit$uGYC&fYyyXERUzR^ExK2Ndy5_*7q33cl7i0$-Es06!O_lL<>=@KndYERs`BgV(dofhDyfE zsH0l$LZ=(54wW*@>92`+sjZ{4*=J>s9=T_fv?XGY|QCz1VKNrx2v{La~6&Y z+|?Unpn}h1Q^ue(eqRXcPskQxK6u00+8X5x_2__k7Ahiy%N;Y1Tnc^-EEwA%Q~`>r zkgn+J>YlRKU`xCP;Yro53kw(l2p~o%#4(=ib``>iUV@0>E!aE%*noSgNAFMP=k!Gc z=v9Mxd3g;`RT)0fhAQFg?CgF_ zNu<*R9pLbrf)>^fU6v}u`vr%L*j6-K;T{X2<F)gu#y7?#Y&uDu^DdPFw!nMgCHV{S4yC-m1NKAP`;5UF}Y)}*bBTjYDqSf5ECH3W5*7c>`jK&m6AyVd3}9- z(T&xa2E@vb67gDJweJhkh)d8U&?KOK3Kz?$jTzK&EsZ1Is28)x(3u7oU4lXL`3Y}|;}@ow{TxBn;5Dj%HPY)o#I|$+l|4<{ zarjZw(+Lp;!C>*eX~EbdXl|b!gx}g2e{_V})xIcAuZ|JDkQ!(? zrg`A~t+uRV4h{~nxw*M&Iyz#*E@F1-?~@(?P?7&?Jf zC4<8F7a(gTF!Sj{5hK3YQT%jgbtj8_=7tm!cfr3lkv=MYaw_NXEVYbRSh{~Za0rgO0cx+4& znr7c{MPd$7&;_^oH4+}t2lLn!1q2VSShNsbiaepGZG2>8Z?S2I{JNP=IiCSRn9Qu}Ss+v%FfcaK{LbR%8Bll9#Rwze*r%Kz&1}tMbPrHE{#Xy&@ zM$;2}HjJFyDVq1KyO9#GaQYYzzL@0?xl+F0>2s}4Igq!Q?=hFA$Ir#(LLlaL#)QoG?Wb{V9NNC>ZS&!Yg0 z#n5sR>|GuMw`P&2hva^-^D*^0{l6$Dt$}X!z&a&W$Qn-E2`h^as4J=@!Hw&ZqR0l`)5KX8>;rKhsJWlg|x6$yQX99>1C*~ zCY-KZJIl7LEDC-5V_1!F+2b_|Jin zp!LOXfu7HI$@FLvn_re%o9!_ZG)Beq4UHQ5y6qZfo5hOOZf$MT0_BsxykTdLe&6V#%7l^x$1iW#z|dnD8r@BR8aYT)UjR6_?tEPlTGOmiM?4)S)~;bU4AC z1$Jh996uDzmJ2?r9GHq*g(}a5r9$T&UTT8Qs1}NTSii>fc;+^hn^c3a%rd)mQEVd5p#n9BE-Xr{#T><)w<3M$pM%GJ1z!`|eVS#7!C8WIf#k@}t zpM>&q38~fK?EE9B32C`%(Oj~1EC|o=ckO9Fo4m5)0oQ0xm9xh$$JioYQW;r-LFLmU zOV(V88nQRQwBaQq{2gBU1H4k8{$Xm;H(;VDu8wYpWHp)k$*>s8Iss6tvBtBKRElL0)n?PHn~-zN448 z9#<41YB-pg8)Zu`g>O}H-Pk~-`9(~$!y8Lc8y{?5xPOSjmB@;B4L2sKD)3H>j9gMV z_A@alrHU(GZWo6=jdgmU`8Fk&D%E;KuA{NeNTuWE_VC+mpq@w~D+Yv3|DS>Nc7|(+ zjVlGlb$SFT9I(=)aEG%s`&I1}r14sGncBIwDHH{6;EPgV6|JD4InG)USeMR-oN% zIFem)&v^5OXJhQ#DSSOc(Ff8zkR@h0bcc3hL8X-(@7J1=YiLf;mu|T>tLo7ytMGdhXDKfd?;jp-21>_)2}xu7r8&XY(-y$ju>T zo$33FA^M&!Q`NIeC1YL+YJ_eOiO_Sc5bJ!Re<~P_+$HO0sdDAF_cf57F1xdUI1h(v z?pH3VIJ~0f|jjYWznJ6_CU=VSn%6cJxRd*%+ERh&|2+{pN-7H zS(Vdz@Yatn-*GUuqvZ~*j+ywe6}^RJFYq3P&?6J$7#oHYVWk5=7v2x7U{oQ!w6FZe zlyl4q6tz!}IlHYPSq%3zU|CdmeU@xB$a?>to=c(P#!Rhy|H*RIOFKxA2#cVzviS8D z`61%z(9HE8wVsYG`}$+N7wR02;9~yi_5k&qw+))d2^Qr);0i^Y{# zGTo}h)*2l~efv_T>aaLIZjkq)ys*YVgPgW(p>sMo`!z6;e3y;{gXmV+%a;}T?H&sq zA#716O)g84NpyZ?O%_tNsp5%$z4)+Ep6hWD$c0@(G~`dB638COBP}b>n#sx)BNB4X z;U#%7Mm^gOnFluIsAUUe2-+>D49`5ldxKP_SOheDU6SYoy|dS$n);?HX5Hodp0=$J z`-%cvSNiUjrfV{I&ZM)dpNSTg zdqqz~f>imgsJ#sxQ-o#?8${w#e`TtFJD`k%dNG6H(GHBF%i`xya4Ei*TQlEz%1_Xb zY-6f_Sx#bDWr=tu^hV((e1UkpLmoWoZ zj}hJ>bo%t^o=3BPj^I6~@y&+YKq#E5(1=~Ls`elnicWJ3F{OKrd`+2`~jIZV723 z6_xDGhca#`$>F#`-FO;pe>Kv=vZ+lw&C5hrm>qLd&DU>3hgS&i?Oj%Pg+OTk$bdOY zqzb5?K(AIFmI`zt)Ijeer~BUAJYfB#t3&z>==n4paB6?zwH9ty^JbqYcY&kAV3e4X zRpH1vepeL~UldBhAOVT7gpPK+!dx(Y4R*>+Px<_VlAUz=rhg6+`GS8RYEW*-;ces0qB9 z_Fyg~zxN1_%yy&q^Wz#cD2(OyV>o@SL@+5g53W8ffX2 zlmYrNHY3t*b5=4AQBLcTfNlp<*Ay{1@_6osi<%+ zRXM3WVxwsY?3vwI^V-mNZFt$KHaMRX5*sjeZ=>|^YW>=;rL|EjLN}7>+)S6H^wkb) zg5Xdt(CGZ>4;4bX8wZI%(dg14QrgVQ$b8|QE<>p>U!z!CWhzEiI zT$;u)N<;{}Xuvp?ZH8h);x@Ua6|=Xj-E>^5E%Y*Ueu=?SnE{bdL`e*A=|T=}>CW2e zp@%1HE^vk0$V{!K6Oqu)x!-+xSN+;a-W}JFSSk3Ci|N{>@FMd_e3I_+F`diy1oqcgmt|^ZM3_bh)65#pLv9Ba+dnD;a>k*8 zA#7p^gaku-6xY6?4Yz{?MZQTivVJ`vo?y3`-usep2&KWUj6+oB36mkVO^{&5unS4S z9M9?YuK$>q3GAnuBg)F-*B|`N9Q}LAZ~|wf4Mwapp`|~Ct`ZEQBl)f7LEuTqYh)wqR$D#N7(v)0|`7b{{IERXQr!Wy;sJ+>~7ptltn{W@L9}`8THdp?ABL{HAUe z$ei+dj-kX{6llaVMo5CSYqejb0VMi(BXwH#Kbwo0mVUSre#UOvEi*H-*OzN^tiRny zz%NfCt@zMIrK+fv$&XY@h&4(h&LggLRDY>TZhc|^W$WdFeBoXok{z2sN^^{b;rKPp z)6X@`Nke23Vw??vQ$Vx49>36n5fDNKMFask?>=H(RHXM0V<>=%MFJK4j_058bXr62 z7>AUkYl_xO84Crxd_3~;Ue0{UdnW+~5sYvhep9aciI&^%L0Rwom*aUy-)Chpr0(Yv zblE`0->KbJu5d%E*7fQ#7;+uQ8cpE2+HwHW)F?N158-mjn&})UK@p6#zsi1Z4uo?#bY z>(5aBu2STRTz%+awqu2Cjk^Fici1zx%J9mr2y#k)uOt7uXtu~RX3nC(V?BXpE5fLh>V^02EF2r(%mPNC%{6P^hGSd6y{;v!HaJsG6 zr9eNaetB+WCjF5}fz-g6+KVXUR?T5wkRXxq{L4$rO#2XMh&uPtd|3``{lR~YPVFpoIhl0 zJ6WiP;B0;X~i`!la+Y)K`So%h1SCP3c`XQ?(Osg`tBe}zLo!o>-I*oV>s zJuD^rk>qXz0ya0{>p`bXQsuHc%SfJg$?<34{mBDL1op28^%ftcffgOFR^hC~VHw1{ zv<7?pZid@|ia{)rPg+V>Pr4e5B(grNAbr4bKv!mgelBp1-tV-CryCLsYCyVe?<~mZ zp4*brJ-2JYKnM_2dlBkxLS-$pF)k}p!t$pDL6#{{?D2Ym?85iXPRahs^P%0aINklT zb3?Mgi6KQ%I&}u5M;$Z!^yUbhDh+{FgQ+VheduIK3B#K8v->pT9^1GBsU_umpS_lm zIX6Ea7ZWHcTF$&?bj6GKIMQ(F;Sozzrsnble(nX7-1>L%yp_cnIQQKvO;2c7*5>I! zDy>MJg4|b5H$^LhvtTA-LII9d77_-YvueJ(adEvJiCJE9Vr;JX#mu-L#7Kj&Zm=o=8w(Y;aKaia zdNf$f+N)kOrZO=o{( zw4$~S_qu-deK(T9=^EE>(a&vvfs+m|602>7K&7Zaic`KBVj?8hara#8JW_&1>f1}N zz&}eN!EQ5^ihQ9WGA~DUC(_@(p=f}?ee317`XK~zl2MLwx!t)!uxAQI@iy$eLTon;rmf@49=0NxIW4aZiY94Wdco3@`2~lxUxjRMWa?b#?WJH6)>f#N_H5oN^=&xbsQKD%=a~a=){?N2CZ83585*!sX*zMPSHE zxCI*3?r5+EP$7YYj&obNXC`eJc(!+CZzE6+pHvm!W`$9> zXYdX{Ax@q4H3Yw9!9Hn`48ShqE{;T}3wBv43R{9L9Dx_^lK6+Fz5h16)=_~-oV1RP zj`lN;J?_)bOwtJ$6%=Tl;ya*9vqkqz7e>{pfFc5`hKh%TfuMBNKw}394M)yOr2gxY zk`nM_diH0=PgO89Cu6L?&09x6y>ZL_BLf)ML(wVzNmBs{a=5jOfe8`GU25s0au!4+ zF_kSCLxf&82JtUBjWB=-{C-3zKf9~Rh=yI@7Rh;#&{gmw%)TNamp}CuV+kSSSpy4u z^x;#xf2R=t^T$`zPienUDC^yA`27c!nYagshAujF%{&mgdc^x1t2V(vX#Wc4EaMD> z;H%$mjAE_0voM;*gT<~#iHPHpaR-$r;oysR4ZzLLu>lyUTcY}y=S{_LVTMBApPeY# z`jf^VPK*u7w36w4BPo-Qj<8sb~q} zH;IK+!)wh}mX;S36|3KTc*Aq*lu6W4Q)M`xPqA1&fobVTzoPQh7iUr;F^B=h39y!8 z>QAH9%tOOXNq1B`le@#CRw9pu*SUvw<3#d=Zd6mMew1rQZERVj;>gy=!lVAzPfB3{6DP_TI1>nUZ*<8RSQf&JDD*Ea zZA5jk9_J?BZMZ+G`lSeCE#F&N0)dBuk*;)Sdgo&jN{-vVVaXSNMRw%JuaTkuS&;u8 z|Az=Wk~TylxN&L*nK)^CbCa_qv9RP=ITIOXXJ_e>_R-1g9BE#NEi5eb*VnnC5fT=b z?MoRJrh4|QhhC#WP52r5+U%{p2{!FXTnH?ZStkC1t%4xz0#+~swzRp(6>+K=yakD< zgyiI79uvVj75M`YHhs#)-Jx)Gb!%9DTD3DhRb&NFwOeHxj7K$5lSz^_T7vCYZcW{W$n$NP7F?W;XaVYnvAG)vPZa5!2bPwqslYQ`g zfJUi!oMMz)SvhCgw2}N1Gbi`8qWV8(`m0^keLBaaeMtAw@iN2Fk;byTxuxaj(w&>@ zZ^K0KRibqHvoXx=2WtxLzbl?1SbI91C?Z1l=1)Atf59Dul$7HVpt-IHqJSYd=@$~(n?77 zbW``aOTl6>@M2y`#fbr8`s{3{LDkM80jC=%toiCq*2Gvhtu@ z>`i_BuK6@+>+~?`SMN%?ySx2Tzeb3OB$?I;seNNlvZ_;#@?aWnczWd0`EUyieP*o(!d8$swdQ8b(B z?(r*5k%;7w+9;ak?_{Hw0f%FUZx#w@Gub4({oEr0Uq+jlj}=X^ei z-%w64PlMRhf1quv9?fQ~na2q+l!aamhI5AlV8eGe@9Yw774r|;b+4%ULzbfo>pt$Q zY@dmUr;G>Wf8ymM=(!VK8=?}&xXT7v#N_8`1H5YHW@m3ib$)MXd*(`U-KTSoXZ?lx zn{x#A^&id8*G{HMCK;1vAe zku*#+%q=V~jU6~}Xjv1g1@7)*@+BfxabSPB`$v7fc*e2+>5DC5# zEZxze+u`C&h{>=kTeDy|u0ZMHY`~4HYi|$Nepl#F87Ub{`DmvD?QN zA4b{P-psbYPat}euL}6kx1qkfV9wlh+=fSonWhL78Iw38qqF9ge(=9~4(vq4s;4fh z5Ddzwe?ZaOpEihPeQ}^m`LhAHDfLJ}LBX5URO|11zBe}BqS}9ByU)Gl{9Nffdte6S z)&j8WBSSBP;b<_+oDD)&{BKLkK%NBZ*I?ff3Jy7#9Q6Kq3+lF9OyN1;z|o}<9~>M^ zXDyWy40SQb4!vT7FYkjhwa`}mQshzz(yYRt6Pe1=<&UkqbUju-;ru$WMA^ZIbdUMp zf97BN{=YrQ72=({cFm;WUQOfVN*`z`PZIM-`{Z8?v1q;Ftr|P7Ly-no}SAB%fSZD7oP#cV{=#yT>KU zH+{}a`^ame7x)h&{pWHK_z43|dwJM<>!dcaQ(Nx|=*Arsr~cB}Id>?R!J5R%@?qkR z>NjV+ceEu@eSHqwe^-qo1gTfjk(`GrI^l4bf95iPLY3=2ia)xvc;7>La<7-%e)4@c z8h5`dN-c9GW;^wdrTXV%DLjYWFMBa}Yb)B~=VX@cIkvLSgjDN~e(SOqz>AnA^x#<8 zO)GtfPo5DMAUfD~@UN;@g$TIM_a7P`BUYfSmQa!#8ELt6LEUF=L~iH7n4(L;-(&B+ z4U-0YWMKLO0ymJb)Ta!L!IYR#K%H65gblW;frO3`skji5lEhZ*V{1lfzW^7|y6-3c z=;_DmY-sId91|C4KaxfAuNv4*+ZZakVqQ1{#|l@JCJt@)sZT3GTP>yem|pmBhJo}Q z3MQsu-{3jQH(8F~{Oras<_nl<(h%CSU*GEdlpTn4vaOC$?2&agSX(aiUt=NPy_;m0 z_PcHz_>uCNQ9ABPX1FEpJ(w}IHa|5lujsw1O4e#Z-0ttXOL85|R2lMFIvI{?rb*mT zW)9Pg?`_ERotTd-A*idm+8Ki6%RzM2K-g z_A=W3qXwat_{zNr`d302j%f>NW!pt*9j@!@iXx$Gx+(2*^u}Y7-O*vvZ>^!OJX!`$ zmIbfXDeo16^Kjep8O-3)U>R-6uJo-!7{!@1eq@#^9)y!gk^*XX34D}$_5=)id3dbN zPvY#%tCOfQUqcs&N2hB8rchd3Tbm89mKF~~HUIqWNB}3bv`+%5dV=|5U&?o5l+40v zt5vH@GrrzCT|Rd|@!$FA(WBp_0r+7g9Q0xXM|Kb9m?L);oqQWCrUvoWj3|m8%BkjSa z?c&?l8?^hK|4x-^_NJBdWK3m!V5)C#nrgLB-nX?cPMR=IjBn-K!gAt7K-`J<9a~NV z1wIlR{-NbW48FCb?wuHFf>ow^970}--MjDZ)Q+CU*8;E0`0@De9$;pO4Lh-5ZMWYa zWjAQEa|ZUQ?~;eb%}e#YscFyMU14lw)R3y0YD?wS0G%4qSsKqAcLgYEl=idF&bFj| zvc(1_-aF^!=Gu~&o)c5PBi}VcOljOj^_g}nsG;x%?AY_^ye%3o1X1MK^CZOUB62gf zNfVQSMG=n9aOnfs{gwmAg1+1L9{eZ=L2lxTm3ai8>&<=UcHid4<<>gmQeqk7)Kn zUA~qnftqz+qU2^?xH%&N2)BH8WK0tMz9#zpvaWN7H0xTZxBI+$j3<YBb@ zhR6PKW<2trY7wEa$nIvG4Y7F9ax+&w9de}i%JqU5e*JD-30QLfZ0lRR20W%D$ zK_Kbqz@cJJ2|~K+Via;8xx?P3cpGk9RBGbanc5m^zz8;(A6?!=cO)l9cAtu9v;48 zVPRo@tCEPg?c)x#Q$53O!8a8skkb-W5CtcJm*7kjllFnb@M(gyUI*b|HEhDbxrV!2 z>?YKuBdYqTz<|On)4@wB8-z~~7Ep6wr=Yo^P8!WrGRdI6ljAh?cJJV(SAEf8VL#)4 zppYaJrPf(z5G# zvC>w(bn&(UK=_AhGLT?ph9VfmtVcNm@SMfHSK0lUZV4*u6LhPMv|(w33%f{E7#v6S+CiviZ&t==jQo&jgtW04Gp&GAYAuk1P%0&%7*_ zOh-)9Y<`x$x-HEr-Yr^vajeBA4)pmL1ed`k=bd{Y#ila;Tvqx z90v%He?($xYAyJdQ$7hdsOc%eF7QTLU}V_%2-uu0T08^)+}{~j**RxrZ6GyV;!47$ z*|xOF8eOSXb~Z>@#wm<{L$1M~7FP7Amc9m>SlB~Q7+Q_|s`KF+X`XA#{t;S$$|#=# zK<>GkkTO{^M@R%rDjLfFcyW3NW_SrL|16ODYK3>cG^jj>PjTN*>mskC(5jVXZ>F7V zX;x@?>z1O*6C66qz*i#Ea?RRl^Z&e|Z3(*@-rTp{XAJf{JtZ*c_#DlFhu}iu(|>f4 z<@&&4nIy)kUa<`<(4QP=FaPJW;kAyW0V?qQg*pqj8k?UyF$$$mCICC(OP230sPGIf z+MYQ|yeXL^a0KR5wRAiVy`b_rB4%OB&%FB~yP3XSqTIqxR3Fs3dX!j~lu`EX`%+ip zxUJa^{s*vI1>7n+pZ(qI+0)IsNva@WT>UR;hdaipkB>5-tO}N#^sr+ zT&yGToVvLo+4#LhvpO)|dh2QwgA}4=`{R%QxB|A@^2fVaO$T=H^Nz2Rb#|S%hqCum zNurNEv}2ZW7XG+D6Qh%7!D1OdjEP4p2|rBR5@f#9E=%L2X$>#LdF=YeBhbF{ZQ-tl zt;%Y68dySyE+FLdKlcZ5q6#59J9{6yX>B4kG!3(o6#)mI(TyV}y;r(}hSRU|*e2Zi z_p_5k4FiqD{ofmp)g9z%Og-Lm>D;E=9Ka~dJFF;>nQC|*()L;d+$+6qB1fft7K$n%lKbE z2OT}{`}x1mr>Bp{bH?w!?`wXq>-yfZEG8L_qebq;8tRe7UC>1o_YqS_ijh|Jnf&LFPjet`|12wU!H6W|j-Te_Dc= z9LmG1w>s1-)srva`IR)wE8aa~IHf5B*;P{8jHmdtp3=dz8FM=y0=dJI0ccDx-{%nMires>%<6!8tG~N|r@B^A#$h6X z`M;?6oX+gf*nT|<%Bbo$&1S37ZIL^7>18Pq>((>t8^Z*8j=OEtf4r6^!d{g7@RsL4 zHgX?3gnJ@ZE%72YHc6$aQqO3QE=}%d*x#6yvRI*h*F-ltHI;GQoihspO-^N~B*ofF zah7~kEH~5OBn&b89h_d^a5ikwhgJ-)IdkmTK0~eIxb>SrI8TDH-y8I9tC+&Eo1-B^ z)o{}W?W9hzRE~;@Vk>L^^5uMrbcQ6^?k``yJQS@)t639LbdHPTsS!#3u!)oNDQk~%mzB=~(wl&cTEgL%#)YiVT(2|z6?5>K6nOTdOM z46muS$!kzn&d4w5wGXIxNQI1){`xhh+6j56gZXg8F}s74)|2C@)VJ+yYLfTm_WJ#<1mwB5&Vsi~zUTGaF@pHfGowVXoiBKGjW#|RzQHvCX$D8d_f zn#&1~f(XVD!B}eOPBQUg@pDk-_*LgKv%I{_7JVdnk9?vuax%W;SvOWyC4FlCJsgv8 z1mtPLHLV4%e{Hy+5e^xuqr;H0_(XSgWhwLP7v&tr3ObE_%laX@77bNsB9>+bQ-JSz z2z5b~el2G>m0`kdQXeLs9kW)9+i7EMefZTy#QT3g@ZZ{M6Ci*l;t!ulZ#5z~5~{)B zj(~QF_H(D)PF=CHQ?ts(%31=ZtP8ou=ifP!`t;1)&6#W2d^6O3)E~t?SHp`+KZ(N) zrx5fm))<)*ND#Rc5}DI4W|W4@o;dMlqRDz|lmbVXjF1ffx-EZaYlv6z76XB@Ih@5s zZ{`+d{euU%NvPiT?Zn4nDqM)W7S>zDPxM^&t7yUD4x0#SmYO7n%bNd!@$k1hKEYj! z&?Zdb3#C*@*Y^k*N#cck^= zYzBQjvH>r2ykVPuxju+>P^N?rS`H}pK-wi~ zT_3*ZaH!0ZaL3wa5oibQG@_)!SC0MD{zxNGU+QS1jf;`W&3Ed%;6u(~C!Yc_`s*FF zQxjNCw#1~Quz89Ce0CZt2itP!t&!VvzhYuNvbY0sUw3Agn140~H+&b-Z zohdv)m}F5j{&S(2l{Pk(@}yF|fH_!7%74ktqxasxr>J5nllmtDA(v%u!q_W4h5lCY z1F7KD1i_R$Zuk#9oJtB7*j1qP8yA=Dd~;!{{{?a=KWkaB8N$y@)g>+PcbU|o;3;$k z-yeLuW`64IacgzNU2yR_MCR0LhWh#uIsz6p_jrg;1nolZo%){yqZs^f#;c2;{s}1E z&d0DtNY(>SgjaiqL?gI@2TlgjS_kj`+Cj~H_eISPh5fv1fdm<1WqM=WOxI3Bkc_A$ zeOx)p@N8AjV?}FWQKdy?=OubUM0^; z&R*qO+l$l4URVlCts^`cTtwnor1#EpWX5?|951|>D2=?Fq=L{}~z#)$8w^Q57 zBJZXilb)Ww_n?K9oieoa(2cjiII0%Q`Dipr@XuOjwwQHv>>)Dz;_g|tZr0xFUw-u z!$E@Hr;LBkhCLJ%g7;p2C+14J<@cfN08!v_E`JQqalJ8H6Aa@jyj_LB7o0*`34AU0 zt5en^EE*)MolHpEsQnKPj;Jt>GM)gS-XsH(+M|I>Ii-NpdZ4|QYWP14*?;1mR-xfmn_?2u= z@Qa_d&y{{;<(Sqy=?%&F$1hGcJGp1v5t2t}uw3 z26}NA>Xh?^M@7E0su^Y~8|3g!RyMmz6dDIO|TaV``&d=}DVfhU4)EYS=o6*rK&$p{o(zML)d8kcg zeH0$-q4U>8E-dGB+hc-QT5twb>zoX+>py;-Jp(XxNGHN+wJ_S|wYgTUd)yk^+6qc{SAK9m z4w2ONBX~odjTq|LdDo&O1Qycsa>Co0ryNvtyOeeiPj;J-@)>=}a9_w85uz2myGk6l zW$Td`0$;8k+ggf0$D9FWxY6xC%?sDw+$OIwI$YcJgq{wgoo4VDne_c;w`QI;6m>)OJnhV)Tff^O#yzn3$NvwB^ERQLMe}tzE%LB|2 z#4`@!>t`d+vF7Hjv);1$&^)4sU|B{N09vl{uDlN+1cJtFX#9ruVokmy=|a~Rx-GUc zh7^e)eos`q(YU(^t6d3;999Cp= zZ9||bYvOVV(uRklKek@Lq8W=Vc`?=tw{^au zO#jrS-Kss(3&0IL516&8OWOF&|AYXyDS=a%f7YPRk2GgVYGzz^t3XhkEE$jvq zhA`z`=s^nluYnDOr}%dk2**P=I5Gm?Njbpc+Avvx5wom%1Tn?Da zAFGgShvT2YEc?RLL6~SxDl9Baj$Ve_4AqdU|JuD)mz!$1o<%}vBsR7}Li;eH9*vhv zoFUcTy=}pe@J&G-;;4m{+GKY$sm)az8@)2t*J$3~KcS4jaR!?!5VS(v^hb3!bwWR& znUAz)X+J`cH^3=ItOK8SyNzpEj%&TrfVT0g<@f*r+7Xa>OQ1vuPb*veH678t#3=<- zPKSU&q`~#)hak&m9J3``JX_CLYFvRqDJDT8wYe{JhNvxCh6_)dW0-l$*dvT>Av0XCC<%#z&Y`WpYWMM4wFwo_U-y^ z>*Z~NyhKP~zY{~+i~)%3_dwc5rMgpeK8YtYc=Yi-d(aNYgC<@1Q@$!u3inB>PM&O% zbNlw=V90lxUR>zi>7JXE{dRT!UM&g{K#U;{({2bI-TC?ZKZ!_6R+q=sV4&D=@(N7m zS|F3*4?3F6UWD&JUzlGW_gWjcTjPB)kGy&kdLWjb4nmVpZTdMGJpMF7a~Er7S%6p? zRyj>3-c%#NH#9bb{f(?u#R-Ywq5bu;KR5OlNK$x&v@` zd6fU`o_svWk9S7-3{S}7Vcb2~bi@fI}0$sc*Q-OBvXaUbR;2I@H zy3?Ymv?RYf?Jh3_vO>+JB2qM+?nc*dLKs#}P3?$D2KZ=NFJr$wUOV+NS;^=DuM|G^ z$Ihh5+TzBRi^Q@uz#nK+6yG64(ktGQP0!4jZTE?#l09W^?g_xhz{^uGS~qm$t9dhz zomsT=4IN}Y0mKRhlALE=8Aq*=o#ijUEPVisV7?rk=99?wI=Ir=y=;i^$4JMn0!^Ok z3p-wzF4S*YBZhHBm;sxRTXxT;FT)@|>EK2y$h6va_vU;fzZ;? z(v)1f=%#tf`6sV&m|B^gwROsTC&Djl=sNUbAv5vy1ag)70@1R>SOHrnjQJrHpe{FV zBLroKcy_#XG{~RWMJEtG`cV4q0@Ab0LAKWjbSq9(lxcLo?=mAJ;}CL>yXQxQ%`56g zi|)eA_wWY9T_A&mw5sU^OBFk%13VX-p7mFMUkY8C0qPSDU}!R2xNiG_=dkZt$yK<4 zI2hp%y5D+eO*{|# zL{mSx*FBH0K?Ow_w;@bvO_W~qZ``L~r0YturY?`?b?UwXm~U?cMizbdm4aD>5XIql z4OfT293YyPgUFx}4K8mM7|Z|X=CkC} zV9&!(o-qC!Z-R#-N5k#LcN%w4N(bB_`JP(V08KY>OhUBm+)-l3$(htb)=b_WQd;o6 z$Cu!?<{C6IGL8(=k7b>-4Dtzmzw#ucB;NTEA|gX2Q=e+{Wu{{(AB7SbNgmM$A};+# zgdN0P$6)F`oBv^{$nJMs3lFBw_!)K7#F0{E`R`-Z!Lz!8~u z`QW!UA2>+U}(yXF2r!H-1W$=}S$2-30+j*WeCOW$89%pl*1lu2=C(Lk(+ z+(cb)AuF(I zuB!2D^-N};z0~iyZD8K~`L$}~>iRFx=BrbAS83;2Gd4Niv#HD|3SU7v4^fw~+YGjf z;3ZJ#7Zok*o`0V}ebBN~cJnKpmm)4RJ|a~EkIFkz4Z^he&mRGBp`6PSFBltH!v8pU z02+Ppy&Tb;%!G;dqaGaX(;v^1P70Fm)WB=93JwV8y84)Cdg2fpJ``|*V&9Zo5XHN` z>Cl{me4MGsW%h@nMbCmeRrCbIL(f%F-7$@jucYfie*Wyd}ED!7IzPZ;CD`eHc z&6hb2k-Dq&@luW4SOC-G%a=RK&qzs0x!myS4cbN8`mjtv;U;9GM?UjL%CsEqy3It> z7FRX(PJe-HG^>`MS2ce1+kkXP^g^Ba9*RfjgNaGMn`knNt<3+Z{q(@IT7QPknral7 zFkDE>8~4aQ4h>)$g~Lz-3UVVYS25%A#b2+cNQpDgTE1QZZkI%!iS*UQ^o1MGU)+#fI*Iy)il z80KUxTKAK$!l{=9G*4mDfiOcaCMMBp9WoBJK>)hXuhCYGzeHY5nJq<$>n$x?{k(tJ zAi(#MPHMZAyjJ4Z{=Th6Rg>Qc^wIr|5r5kF5JxbT2%(KwnW&aYkXh>Ww;XNHb?Me( z3)Mc6n2nq^6drxCm4yS*5#?G^Wu6dpy}U^wZb6?O*a&2Mzw;NX>3@8jnN0X27m*0$ z79^|FO=_P7{vfQDlrr)nxLz9w!4~3Yi^qz1WgMEdbY4_T&t_INDeXZ28T+%E?KGQa z>3epsOe0m5EQ_+`eL3+0@sm^sh*;88RXv$`E?!H?PTVz*c&(V z$Ky2T(_g}*3v7??Hkgh7aF-VNc};gghllRCgoOU1C>2g03MwkpUJ2QhNYBv}GE(N* zitAmM&o3}#W}sxWXIjU}jcJEkhi~Zehg{6>s2Z5EA&dQlMs1fp^>S+J`XO3U2G3$5 zbkmTgPi4#pl8dOjqx*@m zDf{9&_+__8|FjU+=p+%3^858V#=j|l{*y?=nV>grsfrZO!^ib{zg;}iYFNOreK#}y z5AG(r_i9I(^p)?ZGbR&>_ax1yo|XHnz#7?!FI1jNjSD?XOgRS_OOW%wu8hygqKTj{UInj%QyFzKPwY8OJ?Aa~K zTs<2ttewFTFGF>z2USE1<5|7-+zl3*h4C7PDyuC9N48O;i74LFzv?M}t6t#$-IaEs z*ns~~kkaSZ@lBRPGp-kN^|Yw}jNeahL8GY@=9gE@GpA{K?a!-Q+hv|7LN5wr%CoZE zti&!mUdiuZU~wcN?MeJhH&){g`|Y2v7`m z)Xq92hB>6RW^^=_ROj%Xs!_*rx^N$#Qo)9M>&sQ_@y1|N7Gv&_zWcFrR4DkXbwZYm zxGUF7CRH8Oj_j}QSm^!Vy3erf6|3wMJGO0GUESAkZF=K&>ygf#?m^AV)sswYEF&3j zFt^UMotW)vLMJwBkCx|MNwr~2g@2oq8G~D-^bY5y-Y3OivPez@Bt6X7jk+cHnsbDD zp}V_sz!iFru0J(+@<;OXK#39Oob;Rvq~CueV-H1+AAgah8ePCjOGJg;ww>UwGHNmR zzPlq`x%!TyU3_1^e(kp?b)AX7D#vEomcgQmVfNmJ!iX6$b0(C?E1asm~G*{ z`|9?ge0AB*1p>UfKY$ILcAXm=T|S&n|D)PJq%*pEU%0R(E0gE^1;3^=gF@E0laHRf zxkITuH`e(Rg8$k{7uhb0a$xJAzFq^AKthE8TU;}gwrLl387my9n>3GhdG}4C^>p+O z*X8?kymhCt%|8dX=UVL)|9HS{F!qiqbUgLXK<`St`@(OR=!n*xU=}HV0*B}mi_b!4 zovq?duWyk&{~R2A=v;y#e0z$2-5i+h8lZP#m|6tZs<>VIjz+&Cdg08M^|M_&I(mr6O3*2>vgB2eARnICZpS3#%V0_ zNJBTraPuqPnO`kJ-Eq&K8`z;YUcB}WW^e2~krFjGhKW;z1v%~Y-)=)W?rF=ndp7c$ zh-CJ%X{haB{M%c%h-la`q79!uc_fVDUr4k&1BDjH{rTZ9Bl@xgTp#CNs=+0bYClGa zesWT{x+7}ZCdeL5x;Q&J92VnoJZhPa`mzom^3Pdr zA2s`Mo+)CSi1eEM1o4LUy+4QbO7ARRy^?_~H=bCsO;p(Nc2UB>gM6=Z+3>i@e>C+z zD}>bCt_BYXj|kIdfYqUBp{h*lEbgn1eUosEjz@EXm?T*<>EhJEMt8iXlk%GY00wk% z@Ad6U&3K%bCacY$CWub6{_*b7@0(0Z6$Z!bd$2$)z4ASk4Te0SgY#C-Q}4M1X@UL6 zY!5SeOh2AeynsT(aXmS5>0Kz}-m%g-qlVR#-*Ds02cQpTUM%)ayT)WaKr|eV?H1t{ zy!aN=P&1>qq%%2Jdiis-RDY^!vPL&H_C1Kg^c=T`v~XZ-`V=qhxhHM;jY(hCe&akSU#P|`-{xCtDs&gD( zUwX8+^Qy=2rpo}^?QK~ueYH@**a~*LlF8dn^xgoYssX_ylglvXR1B6YYi{IglgdcT z{Tp1~OZSc9XvTQ8Q$jE8c7ZK+6|f3&?~KAa9jbpmw^!s!-~nm(^J(QPt}eflUe-;% zb`LvhcE1D?b#&QutWwaxGq0|Zc0rHD=@<#}!G)shavB;>QjE)u z%9egB3$dK>w`wq{L@YmC?Ni&lquc$XfO?Nx)|es$f5xGUH}Z*jw>=*iOhc!a&W2~Q zsQ0{jXSLyCVtPwZY5%%kx(umH{!~SZvv2KjRHi-HS5dF@j*X-nG|I28Gw z!M7GPb8~DuM#1UCUGk&HmAqOP=70EqEL@Qg480jG&-)MkFM{5 zbV$(&Usv6y^$uLO=I5R5M9?I(&H}$n>aW(DpWPucG&I!D=Ak;Xk5j#ex9aa1SfGHr zY{7BBXUEQxpys(Hk7soJ-1>Pbb7BJjgacF7OugIlC-YJ*;Ewp~ZP7 z+|+MjCn;ikgx{&~~LW!2rpuzMneS zLM~uf#C~%prKqR^3GHC%bo7xUN3u*RQ9>8IpofPO)3YjhevV?M__nMt?Q?}u;S!S| zIJT7G8%yu}ne5t=%CG3nxg4ya|W-JevA+a+Ang2 zsKDn0{veop7`WTYJc_>o5b-1`%0_#om9F)Mg7Yf)AX*n-(yi--8OjfE)q)k|aBh8X z@6q&!5|f?uI}r9Gi|v%(`@7U^bw`$0?#L{$R1dT;7)q^xTMmheHoToPueLbbIfQkR zcLsv>6y@t4hzmXD9svJb%JR6d1MT`00hBn!VsHwb_byBiHe7Bc>NLdaGzwUs9luAz z6<)hzA91o1L{z_l%sR{;<#LNny+?w?*vY@1@fj)z+^yRm<3McX%JQF&X|zSdzGLbE zK|vfK9wmXiI;!AN>Fo!0bt?3N+H%%4#GRt7u`+9izPwss2Uc!!@6`GZ4BB&!9O+n` zbSqHw9vx^-H|{3VDy3g2tv5dgv87T7KOb0Is>$izZ-uY6>y)2!`Rh@sh_^4VQtszz z8(t7#yYwvoB)N0AA(>>a58Mpo=0Ann@ZB3RGzu-bV}0N8uEKiKw3Ce3P?xmXm>HR2BzLYhnG^gi)%2!=t60?tS8ULfe^;B&M9$1VE^D3H{Bl^fmmEis)P*UGj8wNcM*l&uU+q{*RnFV3IY5fyRwCZ<0+r- z_<6*9FOIu;n=Z%mRUaL9y}9a+qvn#hW~CsWuxFH=zHiD0DbNs+OqpWRLhCEj!u*r9Q+a^B)&FDK_WcHm%F05o zR)&+uTxATe8a?oe!TJLXrGi*64@>R%@s9lTK~<6{@f*9NmQtT~tOB`lO__&|4lsUQ z<5r5PaQaok9njUiuGZ`$hN#sYd(XyLaTmV=!s1oVE(ahOylpyC0L# zaJ~oraC5&tsBn-UIj?2WrcixUy&>lQ7;UVCwq@Z$f5Z!?@vi4+}K306_@r|d4iCcZA;fxVi(s2Bk z53N+WQNSu+OHCKZW^?}(PZ5KU>iN~?bWbzYjij{h#$sKV&>4nQlDK=yv!x`f)Ak6`bMrp91ZsJXLq3Y@7gEskZ4h%pbR%@ zona8J572>YCSt!WJMiM`-DN64mC5ZK6Rxyg}3Ih275h?BY+!TXC4NkRaYwhq> ztg$CYV9?Bs=LKoAX-|8Ejvg)1`XxWYwA8cn8iWGx!G8YCtUf68>?i0wWxicEKNQxz z%pl}H&RH}}6uXuy5mO$t=G^6CH~sO!b7IoQrY5tIw#VpDx4{Ut{Ow+`qGPxq^p?^e{=;W}d(y5b!utZFa2F3Ps$q zTHereMGk&**%(%p&Zc=?V?&G?3>fyvK|Cv(` z=jtnQ8gK4w626sOOa~bd5bR!~L3=1{aXAKT*q92D6K75lK6?cTsw3Yn#8fR5tHao$ zb(=;%_sQG0+Ny*5J@AWTzDV?%n!ElJ+~=SNU6_`O&2=;@P0fFz^!yGSX9X7dJGxOu zPL`pN4hHgQeMsu$d+b>XR{Qs7ua%~6f5Ob8kM#QNwp66HQ;LbX>uun-kp|N~tpE^7 ziY$CYv=`OstD+3%>r6&Wtocr1(yhk9`#KSZR?PhH5DDS$#m-}Oj(26pEkUX7Xjne)hIJ zo8qAhso^3Y{fLV8??tb_GwsnfoKL+$x61&d3*4bw$~8s6%>WPDiPjl;l;xyd<@Zc#?D@J*}&`TZyQwp_P-5N@rktgLv@i)cm?J-{5M+*B#? zqQtEW?~7ef3p=X7sT#?B_3G6|pc2|A?OtF2H(+e#~N<9TdV~tgx_#CIbHl{J4dxY(=mF>f`WSkPA$;Ft^{H&_v&u; z)})Y#^(3_6zTJf;-w2%WE+~yOQtaw$01e|`M(j8fE(`ru_S540DBqu`Zy+tgl7I(wcGkb7R;iENYhG>IN7Je_s{uBNo@qT17rt&k7x$W zeoRBdFfxovj%nAY=$=b52?R4$o`~{F)>!U?Ks1AtG@c?_x9i5crsav0b@# z58v;?`~K^D)uTs7#a+bPvvxklI&lKZ#=W6o+kkQo?p)2bR#gp#TgsF= zL~TeNkC<=zLwFrTW3c)98j_Vha28>Iu7t*z)$V!HmaLVTcQfK2kf4v2Sv{cXrqkcg zho34$Xv83ZG1u{VbZxNyLW9@gCT7_mw{BTE%J6IoOC&!yq#-ty)xR1Q$sH5x!+0p^ zNl=hkkxsEApJh}iH#AD$xac%QL%7GxRFlZod)@^~MS^b@lQsD>JBn<5&8JVni!;B% z1ZA6(wW8`p7B>tcCNLCi>+ZOLcLeXFJ>ApzLOHsVR70xLhZd?Ckx8#yrY>`ySC5tR zWo`agMeth0CZd60N?lOk)8<;%mO#o5p~SwggI|M8)Le@S0h$tRgtkyrb7jrn_v0Ye zB695ICU|T|>Uu%kZBk)_7?zt*{Be~-r^f4MUv?Zq{gX9X3&4)eo>1KRcgLu(%o^yU zLXNt3Y+A-y4QhhN#xPH$R*ZEPOI`4}ac$wZndO&^SchL<&VC3H zSRExPk=xW%?kspSD~-l>f;Urh*n?nvg;GdZSXhGLJ=l9aE>0yFua?h!`fh93rMjD0 zy(hjQUf}O8!oyP|tY<;w49CLrpw(F=ZMczxwOxU2b8B9bfMssK+sH(qA8DlQc3)X* zYV_G9Bs#MHSZS#x#ssmmvsc{Q>Iv=1!7dr>&`jR6%gD#hk){~tf6C@_O5SeKk?<(T zsJR<$7)U9@V z0D0i9&_*_b2d3g?!9h#4^1CvR{;?c9CSL>+FO1<$$nND}GB3Xllp8?T^Km-}%D(4i8j z=Q{U`gM9xNCjsJ37eRFYG`#JI?DfrD58kD8zGr@thEp@(@#716jbbd7L}WagiR!QU ze#{acnz#2dh<}^ct|3BMzy!urfQ>Wjf0^9}Lw&nxXxL5=QwD?U3Nm?6AhNmCgUC|% zS-Ik4>b0eKlg7u#gRR!D>#qLQ{U*<@Rdv6pHHKp2J$S9hQp0i5ZueIv-0+G{6x2PB zTFsgh$6g8IIeO)bqSMX#4Ht=x356%66%xxQ@HoKHGd*s0jEk!_T52dkgik+5u$V58 zPhS+JcZz0H@YaqG2<^EuxnY1#25#~ zm715?mm^NxOVv9Kaj?5g|K^^0V~@ata&ubP5@-PS7HOpP^^>AD-`I=iMvm}Vx8|h+ z+Zv~wzVg=K3-=z3KULTdxmSeW$t;Kdv*0n&l6mQU>owL*8NklNQQqnf+)r@)8LzNV699cS%F52>;NejcclyN+VPc+@ zlf|*kcOqY|ZViun|4}#tq2u$8Lc_4UK(@>u6@G&PZWs^?87^|jyY6HmvGL{}42Y}W z-jm|Eze~Wj5m7K5XN8M!9;c)nK4)H>XY&H+124RKcAszuw{7P_!piT7ja(a>h8R=K zs|o;_0j}`9);Q&_ekMZrF;M5;&h_N^E2G?zU~69&UZvZ34A1~o`tw;1Nr(kiOoeKk zfRn8@bK6j&)XeH8PjSz~2<2CO2?cE*zZV90 zO}kf?8wI6}pus|G=~0j0-&eW7ro4Z8o04#=D%b+boYEI0jH(hfUfkcsc=Y`9xVX%% zsQ}dkd}GheN@c=TV=HzST!Y@UxmzShj~-?Jl6sK36g`sk^R(-}!so@DuGb*xc{g{p&p}>xmW{ zF333LNoTPW(nJw&_pD0;ZVY3{jZWAMW5knYLdf6cV{V-=8Or*ZW!EizP79h` zUU-(e_9h046K==0?Hv%;W-L=R{(W3Ta`G!$Qak!yku$_YKGWDeMX6jwC%TbsLJaX6 z45WNlX#F~Dx%QE)x+d4JWeu+S*I(gZ8Zm9WB7yJ{K?aa}qozvk5&8 za3ICTCod8TOWo$4+@73tv=sjv%NTHhS`Z14#k`@6_lC9NRewn>xdGL_Ye;*Kj zvd^u60;%cM#@$GgBy88Bl2)Ad;FZ*%fxE}{ky>|@83I7c+f)&I zf*1j;+43`Uc5V4=Og0Fm;7tw2jgLa2fHq~5h2Nje>`vYWxaI^g#h}31vu9_2ZA;yZ zbPW!JSXSLsYbB5YO!lVY00MHGL@g z@f7J2I%?6g?Xz}E?t|X6Z+}a8%!r7+<~S`y_{JDijeg$ycaI|Cul-bNeCcF&@6jXl zX3NeRj$~f~TUt$dgpn{p#bHq|)t&{rOwqrG(oy`mYCpJ;y%ziO>filg_5oigKhaY! zydkn6+}1oMeDddVmFR|A)6+GRHER;2V!skTkT>8mM5J=pzi&EmL?!G)D;5RH14lcY z6jSwbP2cy(QVcV8Zra{&EU=%9KU4$=_LJKd$DthZ0Xi|*0T|9cC!7AgOlpomFX40V zL*t8V=C$iW1W!nHmk4*M+P@YiY+=xmx1Z_eG?OnuPCHA3;eZ=l8#(UXzn^71U~z=- z=mSG50Pi!M{LX%S{A+KX#~;VWgd4-Vt;mjT&EL{;L2j)0RF(;sPIVRaN;@?;$FMkF z_9k&-zS{U*D<<;4$<4fW&oU*a*PjHcbYhCV%vZ18Aic^FLYTmKN1z)U8%>*kiQG29 zu6iQK__6EtPK2wo&w$h1Ny%?WxD&Wi7Z98SX<+qlajTyRzt=$6_tm@vV&Xwyaw0-wmU(p zggzQ;gsKhp;@`J#Ut@~pxuN!%q7u~~e>-8Yw=fo=*b``9J|a?5-s&x?U_bd?LAONg zv>&4k|04!2MgOr**-eR9v*rg7>woox(j7wE&MdHBVFe(`HEE;+V+93H&-X zlLW~lVeaDzzy`GyxE=A1sd`n8cD7r?RRb$9VXb_aiepI*>*pC9ogIA|E^;MQT^7dHPZS6I z6P07=!QJ)lke}MJ!;&Z<9tnx7_9M~PxKsU9Z{vUBzVG24=ez-TzB!LdGvy#&U0j^u!(v-%z`zQ@p;_&)J5Tjx&f z2IRJF`yI@!BIWJHG-9R|L&O9cO3j%e#CJwJ-G~ir@=^CT^(26qZ{-H`6CN_4F0d|j zd!e+y`vgBlkU&qQwuaLfEhlt8_gL_6d~OdH)h}dOJv*!Q2?YTYQSrR$0f*33K#oP1 zL6O7IfjrkF48agBnDays>N96w_TpUh=zCASTR-cI8Qh2Svs@9jcRj$C&qw#T~=7%VYt&lDXmhm@4zdeBZWNNu=f$Bsc1 zWj{68L}-Bwm@~vI?;&UBIy1roLFqMF|Dnwcs>dBy;&{l!2{qs^B}HIin0FH)RiG*Q z!@_6wiN%z^t*TOx%eL6DaRh7Gw>t19pnWg?APg<3GHzBhT&gzhDp}AdyvDIlla9yWLzFSJ=}53dgdQsO8pzi=6(Ih zKU=I?CW&=h#@RgUPM%bKE~PuOqYp;QzWqJZ1;ygecLLp7$mEi(AC(2$;t;*(7)2IfyS;Er{-)M3$Fga zT-kSK&G=*T;q~?pG??&`F$;j6N&4jTT>NUq&MVPGP7r=9GUH5y4jb^9)39()TNJa7Nkj=&Rg7r^28L|om{ z0xMrov4ke;d;d5NI(uZ2bnlNiAEYaif8uLo;kEB?N%l!w zCu*h}bq;mD@FLvK9%e8I6#G?*HvKH3Y^>m9o~k8$4uD3BeaB`mAA*wC;kCC>fZ6Yv z*q-2q{}3WrFV!~RjZQ=L=O`$S2Y;-o0jzy3I=GkT8$p=Wfa8FyMV*RoOZ^OYmtIl1 zgX5Jp^eIP2kq|pOa>uMGy_hkm@le^oFI)$b z8Q}0UdSe<)@rMtV+2ZOGQ;@VC*&Q#SV#7ap#Bj?e1M3dA{cG;VodnWCH9@KpC3*(I zrr1vI3IS-M>qp6&7qCwQn=#+QN`o9Q)VkmXav4J*6na9{#eNDn!MaX@ZwPBq;(U* zfFPp{CJmbF>tna?AJGjHvC7j-Ie+$~|Nf!p(M?)}OUZzA4kh7#&}NHsJg|{laj>w+ zy3P(p{}AfJpPvq#-}UO?XuMGi2m$FXF%{b=?{V;Lr0+X+PKOi}6g;t|m?Qk;?L@x; zE(j2y<|6a~-iAclDbq_QK1M@-*^6ul9lr5@Oo&>O3I#wx)#b7L_)n?04Zg=(%tCk{ zUOz%G@$m^C+H;5FPyCr}EV}Vr+4amZLPJvV3EnUw>6){pZ{QlHE=)qrk4c6fu#|uT z@f+9N-{BGW0mM3twKcBiN58?C288UYUjN9Lcr*er!i5xp^Yg@zJdXdL7bv~xeBYqV zUDvjx*ELB!*2ggXjKtcf-sgs)kIm){Z*s7PZT9sRNAcF2pSmD23Tfeg8XCH{uy^qY z|By)M776_yahnNJ0JK#TK8La(oH6?E{HG2MteGJ1DfoObuZKhHO=2ssJxdDC8#?xw zUC?d?b=-A2@!>%cB^WU|aQaLf-@1CPMI7E(evr^YMKSz;tw-~YwD0Tc0u>%Sjdz{7 z0zsyrgdtGi+qYZ)v-lrc>{7xlMaa4V*#h-Aph~BwAy72 zy6SORIAG4iQgnah@dVH*c=3|n_J(mi0F^J1U{iOGaQPY_%_9YIn zFMj)N2+;uC0hF=Va<0m3%51!XjvJ3*k%Ql7m$f2Ek2SKwgT}7-j1Y^sGo0q;@Y`c{ z;4az!wNU6xk;B+wxY^1-KA~X`;TK|=A#U?IaG+#Mj3YrBDe0nd*-P{kwC1q4`tP%; z=C5CC48XA>*dXd)2;L+8)28G7fC#dmKsY^UT|3#BZB9u)6Pbp8DP94*JCQC6o3|EQ zx)=I(x50qkVcjCl@87?h_IR%pN)N25igz}me{SwW>-ZTC-c6*@yV2ty|D*z1-p#s} z&>E?FDG&EbOa50v4}gpjPMIN|2PD+0m4D%4^A&B^tRFpVJrB&g;DxWf73uKm+ol4h z`y=tg{&m+YhnpJsT$`hopzPof_>e)O#TVtUZdKPs6Q3*!e}rm2e0W05c3U~O?R>~g^w^eTGenNfEZ%~PFrVr>G*Ok@oCRAs z)ROxO+C$ktPtC9S<%%%a%*f+u)A)KW4hV=zeTF9Xt-o9TKDO}*$F-gc*`bbnf8j)9 z8I5oSiLI99e>pePA&sx)tJ_w&FI88rH6LR4!lT{V{+I{<_KYylpa}B4AMsdf#S4^G zOIpyEFHwz!*SRdeKKE6o8(d#C{-EWHKmin)SlS6dm2Id6(z=LptlvQ?o)fos1?xe{ z+D#hogvFFWFtXo0#d~;WD!7x~M?Fw%=en6v(qne1-Sf5J>Qi>kyeAM}1v*?WkRjYP zW-7qDWwCoGwrp?|k#v-ZzG{>>2Xt8mLX%Zn(ooJ?=KlW?ObuM%7fsz_$0*o;`Jx-6 zzckQATiSCTLvIUn#@$KhUgquEFINA8)PaG}C$K^xRyN+BYLqZ2JWVZ2P#R`DpTf> zz`-7>sHm5IhnMltFtZ(ep-acaM$f9e-&*bV!xzilbXwZ){4f1K_TDn8$}Vafl}$*9 zG$=|aDIqAOD6m05KtNPVkTL+Jl#~t;6)7n}1U8}4p>$)R2-4k3BO%?KdGC$Svwg?; z@s2ab`NsF-`QuPA%{BYF=A*tZ2M_A~6#`Yjg>@7A7b%J?y@2jZ-C543j6w(+ z{2PP-RvjM90f?T~u!kooNFx9Sm_y8x7PZKni(B5*~TCT`}x>RP0$;KR++uVSESA16gn3upKr<4mH1NRmuDU5lv0aSjLqzZ1 z4V%dEaq|_q#=j!m$GWgWnlqxJ|JFg^4drM$p@;`4tZ+ZdpRb$%wsGzKY3%jc5A9up zIRt-Tg}$K2*@-y+AalGQQ%5a-wMQV>y>2am5bw~@SS8ZnUpy}_q_NV7(hxrmg|0^k z-vo^^^tb})Xp_$e&lFh5P-2}9UPK=z9=g1nIdg>P8yC_fmE*p%NXK|RAli2M*Hy&3 zzMOkq;eY#rN`1vw+B2^5!-$6nYlCcx|NRLbW6kBpzj*WdCP zutASmfFKgWKx)}npjNSd=fQ5UN{au2K7)iWz?82WK~vcr-P+;{Qa9+OwuJ%( zkUSJ~FP+J6&dU>p$TM=HA0!sP&K*S(v*O2ouS=O5V z7ijMrk0OI`{=(oXZ%6}t%Y{7VYEHuCau-JaQ-h6_%*ZbL|1tcfl0$dd-96{{)G=NRUaI!7^`GQ>k zLk0AQLlEkPAXFCsRpEk;UqJo|fKm%5p=5rn9>jLqHn}z1NJe1A?he=bru6!F(rZ_s zin6&0s1};GHX!!X`v@W$tWCn@57-3PW7j-Eb!6?mL@JU4mAAph^5z_Ss#bdB16LJX6F%5tBhXIf10o(au zWf35GqC$Gg6Ii8WKb&Qre3EB7(|a1}Q%AamMW+!=KY$lGn_ooRxE|ed{#r=*@_%Np zc?p22JWRFIt+9&WGGv8m%?S$e4Fmy^4}_1TGaugI>jUZ`c>AMnUgoTb;zpd_kE$dd zfTSE*XpmX)*GbWk?Jl&j(S9H7?;i?~4k#7qL+*{E-wvS_0dXAY%Beu)5=NWe-I zi(%)GbMAwrzHX)eVPSx??N+7PUIZwsEOoIn>Mv_XD*pm;@($5-|M6n5J3WJPu4DL937~u~Ps#tv=kgaZ5xzg`?YjgE?u_Id%u!jQ8 zee7iwFxL+QjBCO0tYxRL^Pu-$q%zxoWBn*FCiT0{O8v~v&R?ABxX7&1T0Y+lZl$(P*YEC@!+at4uG?bdankp3-F=y^bZ zdvl=;+ii_X56qQ+0zBNoh9l)f+L5upGQ}F2h)re~b^(1@wT-f-qOXfOaSp+%iiAY) zX`KvffuUT7?TsA@eSk5O=Pi^H?D{hc`(NCUb8CFMCj1C#icr1(b8hIv=qig-?~&lM z^GZQ>n*-1Sa*5S_@e&fpt|{r{c2J{m?-jg=u1+}j=q5bJR3{Jt7r_+q4eHGhWCxC$L?o9Cg=WA_;GdvYMv5Q;Q9 z+b;M16?MHw?BTx0nutm7yjE53?E`EzwV*|i24quuijybYJF*NC!yY@J?t#J@0r`zb z*obxG{la)IzSz)$Zh$ODLAV4RcN&Y6YId^Vt zA%4g5yH$5yY8ThhaEf4-Gu%i!|J|rqX?H#Q^AuY`x=r`^0P0*ZMx1_5rlnv?{Qw|K z)?)b{Mze1(br{9CLRPUUPhueE+E2QpQW}_sOzBEJQPnvBXg@8u8vh79ITcvOQ_kd{ z2AO(dkagBfm^^*&hp)5YysLEn{QI*)5ASG336YP9xB_{=rFYOt`$C4}eQ)dIj3BhE z{CfUZ5m!urzG zH()J%`BP*^qJ(cJPRcbIAl0%wZP^B;+S?lgJGJmX6bNbb>_dyyKX!2B#rn{%u6IbvnxFytVB#jm zpc!6uXNfa5JbOPvn*_IZ#f|7F?5S6@zBwf>bULO!mN3v~= zpFeqj&UkjK?Fvs!wqAa%YIBEjUw0uyZeIcR$0mGD7?_l9U?Rq|4t7^SoAe78am!BQ znaudxG7h)gSY|srb)~}7eI;eD5uT7-bDtmnih#kuV?60_yL>WnWiCD^X^77KxIM~I zQ#0JTfUwI#0cd<8c;fEM+5dREyaOx+3+f>|K-tL+U<`?smUs^Lprz;vfWX(Epj;nM zb`b>K(r`l76L^GP&teTMAQ4`FFYI^uwz(NaF~6F4gr0>?FuQEtzZF3B!6FMXZr=n8 zACo)Ku^Gme&xDyYE1nW#i=;Ah%@c>QJCj#K4^!NJqEHyhXO z1==pftGQdZWCdz@C%YDAjjrgQcL@5v8{Fa?9uCM0oVtEsf(Xxfn}KxtV1MqL zF_3yMuE9}sHNyJ+ ziwy@Hd#p@pbJXkFzy97<(D||562HwUnJT4Q3>+#WKvDa!ORRdQ3@V<{WJ{2%dxlVK z*a8cRvy)k)T_(C3P`GvSwoFYP<&c?)!jaf+y-GGDb0$5@n?Q|2`e9F8t9}w!UtGU-778?SC!QvYkv9Mr5E%S#e z6{|le?2KaXvZXBk>bkPM-cdP9&aep=Pdu!5i815FG27=zg)atyAnvVs&Vlzq*nq5KG#r<+PJ6(s8Q_Kc_q(j5c)p{pp&PdFj%@mcfT4 zRHBcEN}oPbFX_m6^oN;iJc~-t$U`B!CB)n2j6JGEeZC=m{QmfY8~8Rhr0m&t3um$# z!k5*aN^`91ZKTUmxpM>LbC$AeSnK)DeT!JcyI7FyBRacynlkT(x1VgB%jB`9_|!80 zndC%8NQ8ZJP%&(Hs@~6b;=1qEVxtf0Kr?@}N=83}d87!#+X0KS0|R4^qa5j%qucy9>z5il`=&n@{vG#GA4FMnWQ9RCrFf>~c=Oq+ zot-BE+RfyDf>I<9y^GX;B!Z>g@v1bSD4~a3__00Gmdl&y6+=iYdG9KZ@YKyQ=zM#@ z&`eQ#JM(f@$He513jVl9A{v;mYxy36;1`SXJ5AmB3BjqUPia<;)wC{V$kzxM??FHCG>ym3%KM?8JUoKnXTr8wd#na%`>k=eEVzs3u9uky(RJLSsk%^ zn$M=Y-DzTf+Ku2aA@fJDpgJ+RxbAklDPqf^1}M#HM@#g|NtE+eJ+o>=*{@4cF@G!q z<-3$q2+;cR&bpVUTV5uW-Ze)nJe9stLh(pTF_={l%%w>B+*IvWxBAw#2M3%ZfPn8S z5Hp!ddjM12uoUk2lHmh<<6#GC1>&s;tcy;p`fo`sgSK$oZ4En>lUvRFzy!Gs{`8)KP*3^IKH|)WwcYv;D5?_J~>)5i*7u>7sxk8Wde~gCYHi}zSK{0Q%7+n_E$!SR*FV-Kt98s+{xxAL(H3vCpr@8 zCLILaFXWK@aEbF{UGxAVnRQ^GingdBa?e^?gEMcjka3vL*Frk8U+NH@ceH1adn@qf_WuMx}U0DKy1(S~jMV6+>*Sp)% zpGx8jI69rZvzDY@(+xbLVmrRRY2JBm!<3;fu$r82bNswaC`fR_I&X*5&hPfNRR=9k zPaaCz+Zd&%Bup7HHW}n?eccK-p$WL(F0)~&bmkhSAwa#o!?=DbyK-hDm&nynGz2q5 zC&-LxHrS71=sR%};*n7f7FYf=o@v7_OCV03p*AQ>X+tOvD9>ZeWTR`l-9melv(s!Qc!T`(@ zF-^=@=Zk|0Zb8z(bvRQpb=)TBLrMR7RwM}aNt*}L1(UfbE4F8Nxml9kh2aXeXvz z?&2w@*u@zmdk5F)cO-`w$IzbE6#99Y?K89pYfX9Bc;{I;As18kda;zG z>eRA2_u1Lj4k+75zFnjMQwC|EF*3`=&7Gm)VZrA9UjidReaSB+{1^XiQ`3n*gcKFMPJr&;3Ly><;F77XLQK;6@E=5&{*?LD9$ z0odh9)4Bt6w4_|CcU#mXp7?RuJ8TeBFb+ovSP+xjAI())X}9xXusB(+j&3hmEVV%} zfdL0jyjSgAiB+9(RnO@F<%=1=X)aizSGl9IS)E0>+y#~AvY!XdI|z0x+?_LK}OBg&Hm-)(}D)Q6Gk=qggg%gE5T>E_4~)C z%db@rBD^kLVjl~Smshs=88-yX-k(yZ(z7vCa5^4!*7@yP5hiRYQ_?}l2gvPf%G&1S zKp$lW`;cfXat_Fh*$0%`Py8rvcljMV>sIsY#j}tQW5@KIps^K$2jsBjg=DVd4RJFw zLu~I!J4B`|vd)N)$IDtD2c+NG^~K#Pyerw9Q|B_Xklw#6U|wE_AjMjAuXREM&zas& zJIHq9uxOM$QZnaF_R=RL21dL@I^%rA-BP_SxGzCHtF3J*e>Hm@Val47@7Cb1(hG~t zmqJLAL@nA?jb2=b^QA3Sr~aP3n#Ig&p6@omFzk?MYj}od*nw@JVDdN$GNjJ2dYGS* z`$bIaggaJenQ2lIgQeG%w!!O-4z`zgjN~u+TighVOMZAjg19VxtpXWEBP3$>UGx#e znOVcEDXZ$@@uIgw0Xx|4`eOE`nZdJdm;$lv!8rbKmeZLs_UzVTOFs+-Cr4&)eBp_A zyZ+rB2zHar8shq=P~`_i%|oIyveSP|No_ryAx)tB;h;ld5U~Ro(L|H5O-B@|4hG$` z@SZ~GOZc%Xb+v2jB0pzs`Yt#nG>%DT-&>rG+1Wr64s$*;GmWKAHqH~To^M_}QA(#f z6a*YfO+f4^)8tgPwexFEM#ob+!*vT@;5kG|tMQ>Q{XiytGrruo;i-1U8TJ5Hsczp# zK+-MPGltKMls=UxR>mW#h%u_ZrUb~5jy7=Z#PThc-IaP*F*=!gV|-K& zQ&pdIaR66)$$7rV^O4oRosZbqsR;VNybqm^mBuR;K#$z^iO;eRlyyKQc*~I&iD_Wy z;xe^r9gdde+d9b}%zRSk(g%Doe871;r%i)B>Fb$A;EMIH6P9=8-gvZ?2_)o5+)%u| zK1JAW!m=3qaazV%rjzJ53@lQL6f&|-L$bn}>Du*aCkLITqMNmTLSO8$k`E6(AS zH(y0N#im?+_u2srw?$~BM+jsrx9PsR6Y{%ci7CtID8vy$pC2vd1M{Y@Gm;a1d`KA; zGGDd8f%%7&H~%8@PPVQ&vHKPcD^}{k%i8KKu!_m;e0%F@ z*D*Oy$E8Zhf=2J;9T!9d`*VK3q8yG5_eQOw{I$fIqyi1IWqGA&IQ7JL?8KUnbM$ zA09*0E`)_lqs=P=o<=VuY-TdK4|}6x&Dm>*%;Nv zZw^aKpi*DhK?aEjqSCoIqsvfxcXa#m{kwQWjyn1BfWuKZW+1ZE4-E?|cNh5b)Yyb< zAfCAVkvf`6`~5-Q#trj9v`)ziRUHgl(zTb^Cs-1r1gZ17srPQb^V1DV3&!PF(Fz|} zwVUFPY+d~=L>%24XM{l$9%S}yYLw@FCG713gMz-ydaRteQtr9u2SNoI9!@{eou5v| z=-W)<{#k4>nM;Txoz=)`N;hS|J-*8)>XBY$Yy*de@mN#RG%np%biu3ggJZ}27JWRs z`3qXxs)CXfaUC0fiWU4-GN11syN@I|i?pjUy-_T4@buER038xph7e^Z8B$%uF8hHM zl?PmIMj&0|VVv^aupOzzlIvDEHBSSD<-EZsBc8{4{EwV|bzTD4-;~uw6BIEFUk`De zDXwY#T_dyI^h*3YB*RR98NK-LqDNkS@?~fQbS1z5s;4vQ- z{{>JLbv2-pzZ6ZDOQVXD@zHjNqaRO*+? zZvsD~nD-HP#igrlW(C5x!23MuvAK#e>V9W-5n(~MHP8w9I$aGsW`GO69vC(gn#jLp zF_-{b(7z)(mpnu+_z;*&_mh^~_zFqwy8YB8biRxOu_qBmcA!ZPIL-R&DT(`{*#$xa zX2tu9P3IrP9tY2e;yP=d?EW>lJm*M4t+AJ9Q^wT^p$M`6__4F3s2v+*>xyTH>L~SsozRRxi5FQvu7^d&yLGx zpwFabqP8I;zHq!a8OBabZQ3twZva*DI8xwXBXR>Dtd0B1o<*29_{)et#S!X1`3-vR z&FXUAk-0F=sf5YMt%-+@Hx>N}ZyKc2-gq+N^J?}`I{2<;~H;h*cRhL z4?%k!y9Kxq@(FuSNcpa2$uux|2o>Wp1LEc%%=t6KwY~;F$0A91WVnA(kzk!#pk^nC$)Ng zhL+YKqcZxyX2}h*qE0Z@&o8b(t6Pm%BLpz=@v{%M#K=E@!f?MhGHI|0;hO!KUpeRW zr;?)Ssk5u@M?fm7ac4n@dGn27bAGSHfLqI6u}4zPMlk(t2IinW%N~LWH}@b=wz+PF zOcIE7vC&zB5k6yu^`>9=6VS@kDt=0Q+1)nU2x#LYv?^W>E5q+VRclZa$-mQ2cPoV{(N^VTQSV>I5=gY8r{QBrc^$b_rxNY01->02y4XK`}SSa2t1 zO7KJEtMgleDOQ@@2NTc>TT9uVnOlK;&y>g%m`w&#-^AHAHA#uO=Z%-D4N29F^x=g1EZ=|fuO0D#^ltV3A+FVbz z*Ax7QJF??YmMNnO2qZbce`@Q6Mb>YJiCn{mp&_NcO}?mlOAeMgIGY)uuUFsauU(bx za!2Prv9@|lE*SwAj)2T$N>VRUl3IZoa-V{AG2&Wp{ahA?eEsZh$FIW-zCls{ zDsuje!K||RT91W1+FnDU1op$#!^vUlY55kF#Px18K_rO{ut$vpsTCB9PB3A*b@a@1 zUYOC#3MPq8W5S)XeoyFTxQFBscY?G+FTYE=k(}R9aNW@6P}-t28L`$KwE|q@vG*Mc z(EZ)h-`erIH#CR|Kr1x*TjImnqy(z!qgbuo#F4mdRSDBUM{el3<-m5}3>2V*5;3kz zd|87NIp)a(OBtEQ6FDh5%g`UP?lm&!F4ggPFG5Vc)uTe*2;6vvA&1ESO1^eMD~teBg`T*r7d^a$F? zBMVqNHw05)_R&jQf2>KlMj?>nb!P0PU2l%bhwB!Xj7w3|Z8wU2Ix}_Lh(AA4C~r=8 za)|(Uav&Bw5RdM=%xzp7P~>`FS^n*KX%VO#@s}T0Ha)>SclQJ3 z_6@G90?=rY86DtFU8Ppu#c$Qg6z+iG5Uqc9 zo^>MZ`l8#rdU3lq@gD1Y*xVU|e2kOq#@!i+Q!VTXiJwy)Jo(YUp-n6QW&m_vd}O&> zMIfDeZX;2#SVRBet4ng;y%CKG^Dw=(KzveO_xxgUyYj{e3}u)-U#Zbp(%fiFM^$f(xc9;~AAdwY0Ck64&qSZ}0J({_rKtg^UIs4EcyX|L%PcYKmQOXsm`~LPY0kIm)yl9e+GHlU3 z4I_Da4PB>i32jJ8!~E9@CTC)abT?qDUrD0mJ%)Zl1nnL3vLob)I*kiRwwNu-73}L$ z`gww3a<`5}KD{?EU9~k6#Kam}Wz@eR6KLGf*{|Ey(+ck{^|D2((~`HQ7r8J|eS>K+ zH)JMdR}IfJL}2bhrMUyO!9b0$dTv}IX?<7jQXCIy5m%T5@zQef+O77hW=r0`k;!ph zpZG4_grZw!en%~T_Al3t0gxQ`;NQ^HkxiB236pL%%b35SWqXFkiPqV(X~+wDZ7(=M z6?An=wz}nzRo=507Fj&uOcJlJ4WmzobU~`W@3*{FN`91CxFz{27OEJ|x zRAUYl`}!qjHwCt>H%%O({_^FCc0ret6x$RnG~{HH65Sy&RGPDsZbfi zmDsO-bF%_kTv`xuK)p{=glK4tw%_Q(Z{@7IC*l{2jUB;!QLPXV_op$zmCX&tXpMNf@Gt^Cj`kUaZp z8>~g9#1l`?u3OKSIMBS#NA%`Zz=ka`n+(l=6AI3{JiYYN?)!xLnQ76&-=7b4^uOZ? z1Vs_+^DV!DznClai(Yv%Kh0;AQ!Z6w(krKB-g~>722URJgm8Y@d%9aFA|wZfRrl0T z(vgdroN`gH`W$^RoE^hD|I=U5x>1QmTQtpYo4Z?(IU3DDpCTWIVs1MPt#mt1NjHgz zq4P_opXa@Kg|<&m7`)y!+tr~*JOxRL{Te>9;tUos@OwTGwYv(9#gD{XP)Hj|p1o9>{QHqlLDlQbkTqgI1 zt!3xc1Ivw--FMR0DwzTW66Rq{W)D{&NMd-EEku^;3~d-J&(Bq2~^livY-{$Z~Y|NU#*QyK5nue3LHGu+JDW0#+b z>TZi8kGg2#`*3`|+c}p0SH{i9$V`TM@MJxby%2pFtI!&Ie&e-U-o<0L&uwUmkR5X1 zuNx%HOgbF?k^NC}qWm+M+v8D{vPXGAb4bL!a1&CfD;zHbU`-BT$0hr;xfqXCD=Bci z;XU@I=heOq%R)6h16DHPO#c&qcu0o1jG>*Oq0CPzz@pPxjPTn(j68_SBZ3=3dv_JT z{z2p~WGrz*iI>+yKi3a#5n3B!vpgQx@2AIFT}Jw0C~Yr{PVY2S;EKM$!EXtcNxi%! zJNGlQdi89$Ju&zu%?6kAEn=WJ(W1n{2c@IJ7G65|O}K^wG~%oehyDIp!*qO&voAB# z+6uzHLaVNmxCB5NH>_2eH%0H;TPfVd$7U!r&x7in%;VC>>wrXGB=4+0KuhlOcCE`C zK3xU6yRknAbBO|(F|$E~()<7^qTZuV1)2?SaYapmX|n^K^(6~QD9glO)9`6K-o_WI z(dcYOOHisGMrW zTVcB*o8o2gfja?{NLgo!C!iVxu&aEHk1bJnl3Xr;-PQ4taxZ||dK)r@axA6nY-hhK5cf>MbA~zBP(-3?Vdu9*Y)fhL%5q$Q?@_^@#hlmYG%Zx9b z`dtXZ&R4EDH^q4=x;K6y(q_DNSJny2_N6e+uc!YJo>yN)m4WlaS&u~ryk1rx3o`zWUB}Qw{4ae@=JTeQm-vr0PRdXOvE`}Dl ze4`_F+~g@MD=;;!?czJo$|biVuX5jWk>1o81UaAMpsADD*|Y|A;xv_67}o>xKd5}k z7zW?WKsw6)f>3#$zR5#|UYKVz6RCUs3H@`lmNRLHM#v+{Z@alJZ%3kE%;IFk)8i+o z@FarN{v61)HSfE9xR=Dq)E8Ck>O&5mU_jj1hlrfaseL5JL90Sa_K*>$hF$(M;o&AH z_Qrf6jk<&Hv|w(41WNu7_Tn#BaNlgkpJNG6WH*BUGrwduf!n*`BXF3klLBPDCAgWK8U<8XwN$(nySm=2P4idoWs)#J^m2 z$wJs~RvL)J=Zi`@u9$}OB@)Gx&IVIdyg(WNl#rO){EvZooOi{x35{*7RVcX(X=y*Pm zoI;xY$N6R=#zto4o$HqPeSjl~^L=>wqaHq?1sXhcB+6l7??>Ev>J(ouE=t}fRdJ6F zz4lTg<{p3MgBC&}^$VHx1(C8|L=R5p(N6tw#`_qt@sz!O+(@om{>C3J0KBw;7y2E9 z2BQ3*?02^t8@*^K;huUV=23(k^4M`Sriqs*?FFaLey`|!TKI@&;=!)R1lo%B{8g8tB`&NcYw4liGMB*4}ZD zoWqR0c!|T~<8&fM57KykzCL&I`Sp>=XVKq_cCTUVno!o5=>=wEdLP5CL!I9pA#^i8 zALvZY8-#A2#k60pd>CM?@pAdP+V17SNa5lqSC6{C2qU|Y0IvMRg})T=K3rsW@aPpR zHv&2h6(ASF#}lzs1X3zhL71}^L1!LrjG=5Vj<1F6;wHz=KL@11ggrp|@>ja}1ph8b zq||TaTJVSC4c6tYLW)gJ@io1)M6g;K$^^vc(^R8Q-5ymUVv{bUyhV=+8>I1GMqaKV zu$Y?nsTbD)b9bKan=FC+k;cLwgH0QmB*I#t*{1esVvI8ox5y?c#V)(Z%Bp93NVrTP=MEHdkL($E=M7A1Ui9UpjO0s*rXON|` zm__=aqlpEojcda@UT#G`>N)2ln^OIU9OH`|HX9N0@VLWYYJ?eiUV;+KU(budJ+F}4 zxEg+renre2D2Jx1iLmw%&mw{kgkzrRDiD!#H(L65YrC%Im=No`YX4#Asl};l-WyZ7 z-|@b6(GO0nyy?3o7cPp&{wjh28|Z5mJi!)JG3lswyWhS~!X}rm*YOe=SkW^2p%dYA zPq19hYNR2?jYPCzyXh44dEChb9fdfVIOa^!9RBm zloF!B{!vQ1?->#UYb|biXZ)8*I)^hHe%ubo!pk`@#?^{R)Jh*9UwqzAPyurd+0pcJ zU45cj-bUVPbWifaB?j7kX9@pYceFhA?5Mqm@b`|CUJ=P`i4ybUWuo_>rg68uyXgi3 zRl+zC(eF#4eJ*dTOc)^7cxHo8Uk|ZvX)TeKWT;y-IYfk+vmc*?UDt^rdZ5eLk4q9_ z%y5=Ss+1yU2=5I4M=lL3v3pR;IMvC?C5_w(mn&6@M;hDp<-C=7pP(h?wFDBXq<;d- zTrF}zoV)$S6kzu`4`}A!>N<|wr)D~=GD|j7QNw!}dq@`S=7h`Te`gZF1MRP3ceC-< zeMW>(ie95Cl;j6Ia8i$!fQ*RP@~k$Qw>V^?%;|!(qN2hKKMz$EBICO@Ho2Zq98o-Nt?}ZJ&bVFeBrBQq?ZE zpIo6reWC@UqB~vPjji;Z(T4Ut9(CqZ)pbtx(&=(|vct!NeRj&Vmbdt0AvBT0tQF-t zgm;)|o87X)yREJ}U~AO~h(~YJqZp*9o(9TcR+NsC-nt)z7K671A!@t!Hl44Df9{R>*{5vup_@-kCy#GesAX;!R6^!)K00I#lG%)WBOr58}*i#j(YCj1Nxdkc%IW@!gewcm`Sl zjAx3{xwi-L9=Mo>lN_CuJq3`)tUYe5OmvTos9U_xlE)kKE3VP*~s`2XrVdFRlEf0dE`8kb;Ihd8=6$-gDR+b8!#4p@L2QmK-&HLdXoRV2@A4 zDePAM4t8G_4@TB$03V-ho`aEGi;wq^kw`T+T5==$7@dl{@vp2EwRg#Wk^S^mLFyF~ zqqlzIEh41?_qcVddd8z(XlG*j@z+GCh$2o@pN5VJC#s4MVCdKpTp3WoE;kgu{2VG$ zo?4Ba+8fnnPZvw%!`gkMQ9>?2Byp7Ym z2GZ;=AsmB8O^0s7844|%+XYl`XzUt7PpWA5DjnrL$Nx5nG#t4Aw)spJ0Nz>Kb#f^W zoK~?g<2bM{I(pBYn!9V+VivpisTjAZBi85J@i&zZ+0=h)%~+>!oB-!qP>G7ifS3M| zE~jZP#1^9L>}mw&C6}_~g!P7A1Tn~APJ*@2e0{8o8ghTim`gt1-}AMUgukSE>k42G zk_&g?Bh1ys{~bL72T2ak{AzkD3GX1scVmdzywm#NSgetA630H153%XVu_to51TSi6 z=}-Ws^({RTvt(EFlahct=+>Ddp!1*vcVsEyxT53b`r6OCW*NB^8plA+_}X4t?nBnJ zdr!)Fa7D-R0<)(yXpAeE;6`2|K5;&8!M;$^0}rd@@5}G;wuXf^s#!(CH7MsbCL^Jf zkz@>D4l$-?7}})}BgE}0q1F9AE(i9V{E?c`iEi)wznpAw+;Li=P9kPR<9t;p=?_{` z(WllvVe%S#g9~9H7O zg{SoKbiq@cJ!Bk;LX_QO8ulmbBo7P07B|9!=u4b+PeZs?6s5Gf&a3VJz{Cd^s`4=q<=1tC}#eoKcZNogdSCB!O*h^H8y9dJ7B|4K2aS0{taNmI zV$|#>&G>Cth)c;@*L@Ja9Q0)$f+Qx*qMPq9D^6OqKOfshUR!n_V3b3 z7vJLc>iG()fW^C?9?nCeCpJ@YkM}kl$l}T%19Ht2ypxB0Dk`Kq5JL{uN2}MZ0NX8v zLG9X4QSO*O+kwc00^-E{+hT>?Du}_c1%4ff)#NdS$g4~*n@!Q6jWJ*$2-UFHKc!^% zUCNh`%|!oy4(Bj6#LQeYkIzfJyNqnPA(A;_(vP)5vMbVzN-D>V7kz?barZwY8)uvc z9RJB%VP8hW2$bf!xEr1iw+F>VjXmvfOfJMs)aH6{+OJciAZ~R*%n$1TL8lw6oBe1= zxN+4uF^zyBHa@dg!&Q&PY#Dw3)h&Baf{1!NdLRt%$YF>tF7Ewwhp8Qy*Y%ikI8pVf zW7@6n(yULV3)6b1&LN2(H(sHdW^2)3#`@nHUq(${!ESqdaqUM^320hx)3!juew}U1xF9CoXv{eAD!(P)$Ggdk*XZUf_g6R4a8C7>!6h0Z}s&$f>DK%E8~U zKR^y9ivpX?C{b@ff$k_3!@xL*z9oZ&CIG`cViUX%+>D|IMDH&LQ(_;BgOY~^!BtyaV!+~gA;tNZ!z^eMwHtx>f!=I6carX5@T zWvIr?KiP0(9;ulhG3RN=@2fRM(p-v9ZsY9-OvNB0Cbq%s(+T$V*>^9M**lz=)K=+W z_$0N`B`@O$dYGH*%}7itcZVk6D-D`mf*^FnF3GH#l#~2!R_vE6-BhQ~^Pg|ICtwuh zcwG?BvX~=5ooRR!-b58|ALKyhNNVpcLGuXp^E4Wzt6uDn!evwUd(#t>YAe%(rBRz- z@?uYBtVa9?TL{$HC0rN-AP+Lu{p9Sctq{9BTTzz(pI(fX-1fg0`|rg56UF~~@0f6o zH^O`=vC?ZtwaNa|X{KyJeP!+g)y6A?u|p65MfqF^`;RSj>sEM{Lw|LtklPSNenYqW z^R(y=z_tP=2R{>i$ZC$zLSXeLKQ?#?Pvu)I}z~KD;YZy-{!kUo%V>HHQ z#*gxlc4ynx-~+1OU+)@bq<=rTNbktLWWlfhI}zvF^;62$LY~?@hHiQdcu?H0O_JL>_Gamh1L!UK{ZfY6Za{ z7xx6`ypCuY_0F zwoxS$L8ydc0RDH8yK!I(=|k_a1oU!tkLkm%ki$B@?2iurzAB2MBntJ>GOddmvfsA| zB#7-uXRmsV<__=yZLai%UN}AxzUTFD0pI3+G2_YcpGS8-JG?dNWIV(b5UoliH zLW|6N#wVT1y2Puh9ZdGIvK{ZNE7nG{vS?~(W9{s+`if0xEJz!ge(BkkFSX`R5HnqC zTv}RMvuL3ZD!W^*%)jCR5@KyBP&41BVTzxLvqyTiXHLDt=kz+sV9uQ|I3}~>oayA2 z8G!m}pY$sF9}HZ*>ZEC`gLdIaq<#tA#k0BAHVcz#hO#?=(2bupsYvyoQcbR^pi@6p zJ>ln(l*sA-VgDI{mP2dG68DsNS92b=p3C(aWx&K~MjE=@b{dT~D*?g{kE)w@py|B7 zr!qUnPshmJp>jBoKqP!P@F3(Bz}Y}Hz&dx0N`W%6hP6ZVW$_O>YG2LYB&G}0DIs25^t@j+1}5qmiHjynKAA}`M4OtK zlpLoRj?k#em6xQfFLsm+Qb^}Id;Xop*ZPbkN!G6GPX&9Gd15tJy6r`l!f(AuwrJ`m z3Cw!4|Gp-puCaG3-O%aCmAp;-oEjGrNXm=6#UoBHKi;S+=k4OElbxy^bb9oF%w_L# zb(a8cdS3HW0xfSYI!zvv5dfO5iZcLYxNg(isfJOfBS&~~oj%f>KSg|2|LW~m5pGmo zlTTD6E+7=DGR!`}LU!30V~x3aDb)H$h{oXNViCZgb+M+qKIj=GBo1Rbn47*z^mnovRi`kT;bCYtUo8 zIvYVo$6W+$9F?ClX}H6EF?;lDYfwa|-7Kp`i2S*!Nzyw@ZYL+SsGrGn3`nY?UlJ~B zy?o*HlH_LRjo`I7O9qUIg0j}Y>Su|QYKD2YBBpcAEAPdw9;==Kb}J`91!QU^ZJkRp zx!p?6Vs?k~sac%!XDL9M=ie5+;s$dqJm-ZG$pdZvgn9ffFD( z_L1@x#Gqq2=@BrHH3BLmj^nRd`@#`yZ;@T@Sn1I66d}=AQ4w>P)ZFQ!y&y1jym&ZN zHIy8VdC^6#8v5Rck$!rK8=v<4)K1GZFl7mm3;rvV2*qn4Bc0&UBlybNpaM6b)X zU3lgrH~<_~g#d+Z-Ht=B(@tNGJX)nu5~Wqv6`e+GQuuJfEFl9ILki0=Hn@Rvxx@|B zyf4rPG7=rGyziC(-q-Fsd~-i6j5c0SF=m&aUU=fsVsB{=$j5e%0qKpd21ynwxV!Wd z5?MPh^0!qgoe;dIg~(*5c1<^E?96hri$F$Mxw>@&h+Ve@xBQTQEq-+tSId^6^=+MU z-P03{b|(4(u(|bqR@YxAj5)$Nv)R8R1}zW(Zo$j1heZsGx=drNNK_jRt&!WGN$|Sy z#J(rSZrWbz>1F-Ul=_}F4@fBaYE55Nuqt;X<_pu3 zU*>ru_fL!sUz3y6t))_R73H&r`1q9tVX>iV$6qD2eCewn`^|j}FSBTE2l)E%6&~;LL+2CeDf5yRZUSfX633~@@=r`gy<0$z zU?Q4CowBE)G#b&P>y+P%9oJtgq?|Z=-eN>=9+=ax5DmJ0c`N|QPHb74ON&JGs3}xt zyXP&LkgUjV)@K6Z#gK|)Vt7^iMhEX?;Al9Ls$)R>&Zc-IQhI#isnKTQEQ<}$HrxXm zCi4$VR$K|_h*XJ`2m2+zbfiBc^jJzaTGChKm+)S%Uu~iw7VL3p04$00)$88GjE`gT z23!%g%GuKz<=UxcRS1yKdgvk3jD*_a!`E$(DJTTES_~%@#vjX2A5gZRX2h|4PH!8X2u#{STjGkP$v>>G@v-uQa3h~!VS*q zn^M5qzEoT`e~l2F&V*l4{~dO`WIS=EuyQLCAYFZYw_Q@QfXAo^+=86cWsAH(qSK#jy7EyRII(05o#~K&-1FwPE>8>^C6oe1;(q% zsRLzj_*;HcQJkrCPqhnD>uP9kv&Ot~7N{$*PU`poxdlRN&_kGEP$3n4{NZ>hgHi*XGlvV@{fS%zGkKqvOb zqNZsSJDazc_gqVMz!|(~yk)Nf*4GT6Ktqg(pu@_2-QQ{3FFz(eTqsrrTLmtN<^C3x#YXVHY_=c6y%h6F zy;tFDyRNolbkeSd!*)UcaRMXXiNyp10Qb4`x!%Vc?Dv~CkRG*fM*mp{<@ z?_UNsy`P(^msw*ULZG)c?c4+S=~z7IJ>_^43VCNIgUT)G;Of)cW_6_Bk?<(gDNVd5 z-`4p@OaqEtyL;<(cR(XwM3-x{c@An>z3wa{i#&dk2;0xzW6Hp5L}1cJ<1PF*ZzLII zP8=al=h|G`yh_S18utP8tNjw838XoJ6h__@y2)ZOBV|@+=x7r0Q(s6zsq4Wcz^k|e z#3RpwCod$D1erE)3j!|~28P%IkD+xsjX+b1%>$_4u+AF*F>T<9ODjtivVF2|0Wi_d z2f@;Q>+zP7DWKS@@llKA6UPH?rJk@&n=oe4b*Ult?s+?hjj4E9bk*k7J%V5%HCu8n zc1xlt^;&xPOl}n^&fk&E%*J;?jj>VF$>N|9(gv~%%0a}j&y~>}Qp$=*d+}uSP>SbA zV4aS-8gyP$Iw8FjxS!u6%4GH!qs?9w&Fr062Eg&Q*9p5BPGpsdxS!&?zj!mv@!OJe zrT|cD_wo{OqprK&-uLI3GBhY6l>dxY+rdst2Id!|I!qJb)9Z#)!ASsr(fPN3RNkA^ z`!%I3jW%dSuT+klr*#T1)=0u{?!lRiRojAtT=b7UNc19#$N=(;lzj0#1 z-e;X??Ep@H?clOU=Uc*7;@&TP5THGi;S}PY{@mt9PC?9UxmXmdx3hXnA24E^W0!Ds zH@V2Cx7|Ha(ItVdst&M0gydJvuODOL3hM4=0s{yr+eIJP| z|)P|D*G!J z>sh6!a9Gz%V@KZo;XU1x%g~So{C0HBX+OOq1J`dROuBL^%jMjmRqhf6SDiMkSCjr{ z24eW2nsdr1{_6`2Zoc!oUrgGOaO@C^p9Kj8A`*iMUHe*yTG~nUSy*=E#hGvz8@V=) zdtvhfz2Wa>>?*OZ^n|TVwJ|#YgRhB11rG6^Ut#&L4h@-+u`b!P(ntJ`;v-{y5#{y{ z+{tK}keRTgh_#b>R|@Dd|6q+Cm1*`%TutmXX}G^-q8*q{bDA;Y=czm)=JYW&i>+v> zy^RT{=O_s;;LooYFcIf+>pZC(F-J0j-BQwZPmHjaq`|pNcn=PGPyl4S=Wuvi_+?-h z%U-bB1a5tWu61HK>`aUvuw*m8fDAS&8_h!rR~7E9NDWsK$Gp2|w91r@kHyLth~?4X z=r|esE`-)Th#@mu95(buQLM(=L}n#Czh1M}KeHJ_(C*v@PVY}IQ~d(_U7}RBXQREt zB=h%Q`U+L8&!0!0?Y0VxModV)EOav3V(D7UfX%V_Z&>Bj;wM0}_iR85fs1D~UgGz; zS(`_0t51~r%(^>5l+<;eJ#O_$1%h>{rzg+m(Xn0&kb$tD&>t&FNOjN!w|H)vbA&oB z<&?N!^4GfMj(`MK{+u|2f{C!NWzIT{uV}KLhkJLXq&cYZmCnqXJuY1ojX%F|VM``i zQ)HFNiju;8WxD!G-(BZ478=Bl7k5EL%RhOKAP=Y_r1iE<-l2rWG!I578BNkqsh!PQ zB*<=XDLW%MuXOOsdZB^PHE~lk!*KU4fKit-YE37QeuNY5e7%T?`}-Q-jg=W~@k{Ff zcy0eBHmnK+oSLGfu&m^#_}ERv6T5xpAbh8g9AKfFRlEtkunY(SZr}t*-gIcV62sRsAv!g$eP!| zi>yBNQaITXK<>#(XnQ*jbu-~g^|vEw=vT`!Qr3~zaF+KAMF5n^)5^7gh&Rb8OpgdX z?jzoP#2N{Hx2y6edZ}uIkM(@@=I7dxdN?an@wyWEA-P^*HxK2mEbfq(_8RjvOc^+d zYn}MGwP!sBCg1mW`RjGW)rbja{4=s2wA&ZBl}2ExLoOkir2xX7vVuGc^b3S@SvK$y z9<6~0>l%N?q8I#mx_)e~T8+{n_BrWjHF6(_R>TlVd zu5bK@0QeSL(!=!mo(nH;b(0p-2)|&rS4l>M=`DUm9DkRBXD0s6N=(rI;ZGXFo|1;4 z<6?5WmxtsEnJzQtl7wj$6GKyv@b-5`&xr)w{WjvDAb)o_z2p1~3HCM+58aqxpLcz^ zbIyjP?W*!eigi)0&%DnJTUfKz=2O!ybJpg)<8H-cMb zJ;j{l`3PpYV?=@g$_x_cklKza;=`V2jX<7{*x;Idm~OldE_1EPxOax%{#yc&oCH~=s1StCsb&V5P*~a zTb#5pIoz4ihdLxaP6dT&&kJ_d|AEzf$HYC)iL_5BS>SUQ@7O)+ymx2Vy`{p$rQ%~7 z%N<=4w#+g#QMMq3{R*5ZEFIjUTz=K7oocli@*~$eHD(K^f30U~rw)fw((Vi)uJsj; z+)zQqiaEzgP2)lwYmmmBVKk&-1GcnyUF-6ih(vK zwcvh!)xvL%)2OFcYWhrE>(}nZVsPuLWofpw8cg)?i(vdN>?9cQ3TCA|c)r1|2xrJd zeYOI(4q^RXe@;5=5`c)TCgI=?6<3TY#LerS2>(v+TmT!>|3QO_%Tt!;RAt3T@h2;& z(DONPBh$uDk>}X&t|p|P;!K&(Xw!?7_(8#DnzE}ZBdq*fLG}%yX{{@w*G-ZJq5eRb zESv{OBtooAoAL*&Q|h`W+}q&=iVkkG4}d(ETCA)R5E~d+bS=NWh)4L|A5r|``i6${ zgv40j;ItHiP&`rNHq>OJvunP;(IR(T?lv?JNKV!lnD%~Sk0UeY#4&FPJ=f)z5DyK7 zGj@!55s76TT*%Ojw5JA-qvzhU@O9XHcH5Q&R698Z1<}3c(w+69`cz}79|!A*{s;`t z)B8aq(CDYpm1(vrWnVXgZBvb1jTga&C@r^FW@XBBU%DuN?d>PPI7lFYh$ z19wFH7$|bu^aPU8ZA7UIylq~9(W+0nHr>z6l(ge!uN>2D{RB>#pP1%MX3w)Jc41L- z%OCk-Zj|US&#d7zOenEU;6YtBQ4F}V#*)+Lz`|eV$#MsTJG%HbtcPCcD+CEDb7T$L z3lnQOM4e;%>0jBVIlS;K;Pj<4Q#Pz&{_1ml@4xsJ8uw3k62*Uap!w-cafP6flloc; zl@-k78Y2LLa{&w>Soi7})lN;ca?`y;3D4G&Da-l*4;?u6{5HT8s#=hg%Y8@KgD@{c z+E%N(Qp}y{m~-R55(M>Y2KxAc45dR^mc=~HRI<=?=-kVI@z3S(6HesJVa4kA8rdAn zh}Q%X(=N%6(WyDgAIL5+DBeR`Txv!FSM}E}c%qU%5E?uk(Nw4jr!ZQqR*})3Emmgp z>)t;$0wsZ>*-|Lsh(wG~t-E54Vm8lJxFp{-`G8lz+RoRA6Hy5IrCn304dJ%3*`}DE znh0N0gJ);=AFC~&`7zq{kox8H$zxtm;%i5JtZ<=N#V&k|sxc+p;a(^ueDDO3<$3ql zv{FTRPCl$&yY2hTn_49?d-+X)hQZ7!I@L-z2^f8DNZ5XK{jZw9zB>_Creax@E_uRU~8LDJENY|noO+|tTRtrDqt_Z;V{Xnx{Q zT8FJ3@_nXFa^WNnls#BeMJ2pm-Hx|T=YObv?jPa)qQa1V(-S<*U>%nRvN z{0JlDB`(EQLAt4#mqA~V@(95}B)=NuI`+!1ey(?)q8hKIkGxH9_-eFkEmPcvYiMQ> zCB0sF4|yaf^co$@m6^LQ**UwQlA-YP?Erc=nzGv}C;~^jyU-`L2w-w+Cywln&PwS_ zeRNlRbad-j2l25zW*Pu5i|;nOhHhE?R>oGw#O{c>Gpc1M+C%>KRVF8TDJ z%3W%kubru_>0U1Bn&-VDSt37mf4OWN%bDE4McmF{EuILM90Z8HR6EKYWd2qDZ%_2F z0+6r1iEKA3%LOpx>Z5VA<=lr0u6BL`&kPjgja%%1mo{c9Wp^{D-sE=VTMdUv5ZWz$ zVVUkJiEoP0amxrt*b@U{}3U0 zGEa*6JGzD5D#d1F*Ej}WuB&Xq+-hsnnCgP7c1Pl4is4akbkW2Dt1bH~s zT$#5aO>*RCJ)~_`2UBk7b{saZca4XRg<~M|l!paCizZjk?}+ODdYeH)@nq)_Zcxw~ z6pZ-5g`BR|@6$_B{2aP{1v%N)R zQ-j{O%cJX@r|bu*scHdoG1pXBd zT^x$>i1VfFSJLn+y#0hQCKoq=$sOz0y?BAzMaRuUq~1ilrDvrwEH(*PLrI1WONbrA zg47OcadimI_%i~e^WGNx2IU%eIFz0|G)UT=CIjYW-4b0}B9$$Tt-1 zp}PU@?de}CfGMR6Rnd$emrQrsKz9{bp!?FOF%7cy-Um{FX> zRTh`DV7ZnErYTYpy1TR^uE^YMG=?aUuROF*;Xy%nFA|gk3K&fSH`*PDZI#7kF2(%P zLC37zX^@>927$iCSxGPy#IMs-=cDQe$@%wPJDeTn9!>SR**neGF;OslPnTO~kyflo z4qoz}(&JzWI@~j_+t!DIblT&+n;>G#^p4Wf6T(#wZ=d6qLIw%DgmQ@?_|yO%S7Y3HPU8m*jno?i%`I{~%3o$b2Kb zZ3ppk#xev;O@=nC+b7q>S`LJu{JW39>zqPKc8f>hbaRPz3PCQ8GjE=;n-y{U1X>`aAG!9Qsr~M ze{<~uWjE(RHa2lZsKj^Vo4yKvGP_`uuu=MJ^QMwxV7`UhJMBl2FH&|5WDE#C)(=>2 zXGZWPJ5YK&g~5ZY5k`gKT+|MNJzbTx8C@tVVF-0|0#tL%d~l3;n!dVCDv>)y(9qe*@J9>bnL;+QA9fQ@zu$d3yL~Igriw zzs*8QFe>b!Vg0HUa5G-!e8-I7J29NQ^_fxzmc82A1n<@WY1AS`ME{;2=Y|V&?Tvk zQeDa?sv?D*U)D>pn}!)D43Mz}=37ngKG3Lb%u+In+JTCe0x246kZ~%#74}N?-9K0W z38!bU;jIa)z&Z<_iwn;$FuIA1Gf(}=OWCT*KV>gz(1r3yc*2@CX{-?BU)Mc=)+y5D z9#lbn+A=zq7aIIN@;h*pK}xEV)nv474)C&NUv&IHoEGpIG!v$;(w2+3#6%W_wUxmKrGZK|ZWZzv%`4T^$bj%uGW?s<`5r@K}r+2-a5urs*=cu;$+U zwCE?&qi@`j7 zsm$NNmmGuL?*1fz_|~x=M#t5Z*@vMcmS@H18&G%%Q?i~yB?iKCLTe`Zg0ur>9gy(5 z{C5?Dx&c&s(or(2tFMwLNVpzk+rMC)<<%*OKlTj~g^%_>8mAHWl_0K3@<7u6R>pMs zwbaYq{DjHtqkImWDcP@d)qY@vQV@F%CDRgGsduxO0Wh@-@LCJ>J8s20gaLf*j+H>; zNeyZ3i(_Cmw@LiF0lz%4rf)owVfsfvHcF7|qjAS_j#8|VYYoxYI;ckLWV8y@fuMLA z*p8SfYT&f51nSEHm}_4i_!b(!$k@P@j|$RGRV~$hL6LR!e&MvZMQW=9vfjQ!^a&_U z{5D^=zo!ZOd@i78d$KfPUb3zU7ec>2@)>ne2vTC#X`$kiTzq%x#E+L9(={$!NZ?mK zQ&NzR`)f5&#%-@Q9kA%1Bzhq{CO@{?<eeqjMGa|8jJ@m_R3)`a4dp#{2G(~x*)`>~$X$W8y^fIs<6zfC@G1`h8 z6DWJBh~J=6bp(|2_|@{kZ%#{{%L?U4hR|MJz%cZZ&j*a%2@2`~SJxRbxs)fLFz-+b z8!{f6{zSVS(X|{$bN)v-R?)yM&A&}gBo8Jqf#r*cms_Y=l2`4}CP~=jZ4D^I8O&LGZSD z@;Y7GfW24Rl8;YbNv{X6obSF@-8cT+R#}@oOSyIWwh?ZYQPq}08GdbchXCfQq_c4~ z^y+?IRW*Ma^wMeneBF+R+{I)AF|1&AjHd`wGMb3@>e48p|6V-+PC7S=tI^VFbu!AqY%`qBCpdsl&D0z@smf+A!l$&yGdIPN>fY1H3p`S zK_IkD;0g?|AZdrJ=Xg**YctCPY9s5;CVixU7g4?0d>c#vnBR*&!@5j4(_xFiU|7tK z!{D6t3c~1-xWEU(ytZnKCGhG}it-W8{wYuU&dQAh+UvN#Tt1Y9Kcy!U zp(=tC6O1wl)^F_b0l?Nf_@rP#q(Iis(|(ICMIY&Fc{KgBn893}ae+wo2mZ{}XdDI# zqa=C}@8s6qgyZla@^p;0yzyAaoe41OjeysAni$Qd-?#|H)W15v`^>$!i`_T-r}l*n z8mVA&-9b#4U)o=dBbogxUc#?smO-P%U@L)|)cIDG$vwU88HT%H;1e_ipmqvVlYzek zuSIDWC8XdOxyUk64?XAli%7FO7K4>`-Bzs~= zy+uweN%rwex1`R!cObsArPBR8Q>j?z5%>8mag&XL0Y5?G^hoCydKss_dhKL8cNcwy zW@kfCzngVAZXYfMKTQd)1`UEKi1(o2#90FPIwN2slj2h#Uz5+}dw(cnQB8`c`(CWs zD~gO6Fv9oFD%0DaaHa|##z3~c{P#Y!S&N=r#k1m=IugbU=svR_;nA)0cUJ$71J*)(4e6RDb41nN}1A!sOTsu04%OeaxsmuNoXf!K``MO&R(ro;5 zu4XDKjAt(9Pj8jBCg`o2;cRR**j|c6#WZ14+h)yLN}NpNMoU#%mW}(;QamXVZYtGP ziE71WBIk#dk{&#&iI6PsSanzAXq=YTXjxG;(k+_xV*c9lX!&r{=Ooln_-4M@_)svV zU5i~EMM2u`HPPylwijkB#DAow^#cFeHiN}E@EUYtX*nmr4 z%UE4G$qc}*FC3NI2r94va}+!YH!f1&?LJ!hI+NKRYGJtG5NqDL)HZ8pZML7m zBvi?+CRp-9gTO}VG2PNYMTX!4<+P|7wFVkKsLW`;@7tGb<=gOw)ga=yCv}Or=4y); zVig00T82Tea5f3da(^JVldRiT!`Cr-1G*MMy1Kx%@LT-6NZ;+8mam%Ok+ejqWc+zJ zFW=oxB~Y+iS@Mnbu0q!5=7f5l8bfXcDCNBzA%Udd|+Khus3`6aVI| zc9l?=f-J(adQdgt^{r1&&mOxEDuS8sKxq9ljqE=07pSlCD<}lP(xAd*abWw@g?BI| zm5z3_faq{RuTQnhFaGv6tnx9^Y9v`HaBHsKTrXIx+xO2fC)Mu+Q4d$`-lpf#XS(Ap zOgls}p-BOsn8%MG zZkW}l`xg7d0F&$DlI@J7NU2kf*ho%cjnlG{o_HlNk z#f=kXA~cA1I}yc;y3R@d0mxO00`+*Yyq8Nwz;`}=4W_^C5Xu0rKt0^eOpWwV_0YxP zlmsyGd=6*hR`p%)b*zJw))(W#jL6eHk5|STLQPGx0UTRzEMu`Wn5zjLubmEmM|pVd$c%a9Wzza)7A7#JoIwih*M$-nRw3CxJA zs+inPe5)Pfm5W<6gQpU-IRs|5tIa#?pKKk|p(I`ElBh$F-qezu;gm};8ODZAZEaP9 zQ)l7f%|a_qSxN47UQjdbn3k(tO9f$^c>_@GkT6;F0n~ael#XJZ1e@gs9~$mOjLAu9 z>U2I1Zyj{aC)0%wD8P$U{{bKP`_KPPNrxo|63X4m-c@Gf>zA%p z>2MAE^tgpBVEAbMj5G0_qs;W6?Rdn?b08mF(+sRA(pN-NabYjg0hh?>8hdS_nM(J3 zb`d&a>Dzi2ek-kaL~N%IK*#qxnWW^2QMr_iZg5Ri0v38cK--s<5Ik>WN@4@mi6?22 z7$emAuP6l3z>w-0V@K(@NbN^v;ku6YOQ0KNn@KlL)}>Cs8d!k(l(esaryiJga-`5u z=!vSTwszYi#2AH|jzZ8|DG-Vr0o8Cka$lhofwJF2s^$~Q@(hR1#bk zy|aSm@*}F;y3v8P#j7>G9p6SLQ&U-H?z9D4^jZY?Wtdx~;>WYqWZM21vIB(Oj^Lj= zOqceZ{xR6lU)u=c3;V@)gqD755cgXQPgi^;&N3!ntNp^2E*GO#`H(FcgHYt#JnQjQ z$lvUmwvH+nWyPewipSWYWLO>%*#;NSF+FxjrO9?a^sRhzW>pY4tzel888FfWI`*C%d-B9#e zUe~%Y)|cp1xpn&N^~mcpq;O2NQgKyKaQ2%rIt

$Q%X_MNmFm-uynrHl_9bew^=U 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%0D9pXdYSm`P_rZSl_2G-E)>js)-|h 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¬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 aHKqOgNqSRz&!;bE00K`}KbLh*2~7Zf=q$_t diff --git a/perplexity-ask/assets/visual-indicator-mcp-tools.png b/perplexity-ask/assets/visual-indicator-mcp-tools.png deleted file mode 100644 index af71d074d601aa62ba2311e7c544dcc224b8eec4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57831 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", + "publishConfig": { + "access": "public" + }, "type": "module", "main": "dist/index.js", "bin": { - "mcp-server-perplexity-ask": "dist/index.js" + "perplexity-mcp": "dist/index.js" }, "files": [ - "dist" + "dist", + "README.md" ], "scripts": { "build": "tsc && shx chmod +x dist/*.js", diff --git a/perplexity-ask/tsconfig.json b/tsconfig.json similarity index 100% rename from perplexity-ask/tsconfig.json rename to tsconfig.json From 688d415bf47dc032f98cc88d799aea3f1c4e22d8 Mon Sep 17 00:00:00 2001 From: Kesku Date: Tue, 7 Oct 2025 16:48:02 -0700 Subject: [PATCH 06/84] Switch to publish on main commit --- .github/workflows/publish.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index eaa6899..77f3ff1 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,14 +1,10 @@ name: Publish to npm on: - release: - types: [published] + push: + branches: [main] + paths: ['package.json'] workflow_dispatch: - inputs: - version: - description: 'Version to publish (e.g., 0.2.1)' - required: true - type: string jobs: publish: @@ -38,9 +34,5 @@ jobs: - name: Build package run: npm run build - - name: Update version (manual dispatch only) - if: github.event_name == 'workflow_dispatch' - run: npm version ${{ github.event.inputs.version }} --no-git-tag-version - - name: Publish to npm run: npm publish --access public From becc3b963bb83e29bd9a76e8ab36d092a53e0b9e Mon Sep 17 00:00:00 2001 From: Kesku Date: Tue, 14 Oct 2025 19:26:13 +0100 Subject: [PATCH 07/84] update install guide --- README.md | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index cb0bfef..ad6206b 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,35 @@ Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Pe 1. Get your Perplexity API Key from the [API Portal](https://www.perplexity.ai/account/api/group) 2. Set it as an environment variable: `PERPLEXITY_API_KEY=your_key_here` -### Claude Desktop -Add to your `claude_desktop_config.json`: +### Claude Code + +Use the HTTP-based configuration: + +```bash +claude mcp add perplexity --transport stdio --env PERPLEXITY_API_KEY=your_key_here -- npx -y perplexity-mcp +``` + +Or add to your `claude.json`: + +```json +"mcpServers": { + "perplexity": { + "type": "stdio", + "command": "npx", + "args": [ + "-y", + "perplexity-mcp" + ], + "env": { + "PERPLEXITY_API_KEY": "your_key_here", + } + } +} +``` + +### Cursor + +Add to your `mcp.json`: ```json { @@ -40,24 +67,24 @@ Add to your `claude_desktop_config.json`: "command": "npx", "args": ["-y", "@perplexity-ai/mcp-server"], "env": { - "PERPLEXITY_API_KEY": "your_key_here" + "PERPLEXITY_API_KEY": "your_key_here", } } } } ``` -### Cursor & Claude Code -Use the HTTP-based configuration: +### Claude Desktop +Add to your `claude_desktop_config.json`: ```json { "mcpServers": { "perplexity": { - "type": "http", - "url": "http://localhost:3000/mcp", + "command": "npx", + "args": ["-y", "@perplexity-ai/mcp-server"], "env": { - "PERPLEXITY_API_KEY": "your_key_here" + "PERPLEXITY_API_KEY": "your_key_here", } } } From 124f38f3c3a0002e36053cb031697c4616a9f783 Mon Sep 17 00:00:00 2001 From: Kesku <62210496+kesku@users.noreply.github.com> Date: Tue, 14 Oct 2025 19:28:18 +0100 Subject: [PATCH 08/84] Update README --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ad6206b..b97f6f9 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Pe ### Claude Code -Use the HTTP-based configuration: +Run in your terminal: ```bash claude mcp add perplexity --transport stdio --env PERPLEXITY_API_KEY=your_key_here -- npx -y perplexity-mcp @@ -75,6 +75,7 @@ Add to your `mcp.json`: ``` ### Claude Desktop + Add to your `claude_desktop_config.json`: ```json @@ -92,6 +93,7 @@ Add to your `claude_desktop_config.json`: ``` ### Other MCP Clients + For any MCP-compatible client, use: ```bash From 2883c65ddc12da472834a4edaaa737eaac2e9f73 Mon Sep 17 00:00:00 2001 From: Kesku Date: Tue, 14 Oct 2025 19:58:17 +0100 Subject: [PATCH 09/84] add PERPLEXITY_TIMEOUT_MS env and timeout logic --- README.md | 5 +++++ index.ts | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/README.md b/README.md index ad6206b..986b9ee 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Pe ### Get Your API Key 1. Get your Perplexity API Key from the [API Portal](https://www.perplexity.ai/account/api/group) 2. Set it as an environment variable: `PERPLEXITY_API_KEY=your_key_here` +3. (Optional) Set a timeout for requests: `PERPLEXITY_TIMEOUT_MS=600000`. The default is 5 minutes. ### Claude Code @@ -51,6 +52,7 @@ Or add to your `claude.json`: ], "env": { "PERPLEXITY_API_KEY": "your_key_here", + "PERPLEXITY_TIMEOUT_MS": "600000" } } } @@ -68,6 +70,7 @@ Add to your `mcp.json`: "args": ["-y", "@perplexity-ai/mcp-server"], "env": { "PERPLEXITY_API_KEY": "your_key_here", + "PERPLEXITY_TIMEOUT_MS": "600000" } } } @@ -85,6 +88,7 @@ Add to your `claude_desktop_config.json`: "args": ["-y", "@perplexity-ai/mcp-server"], "env": { "PERPLEXITY_API_KEY": "your_key_here", + "PERPLEXITY_TIMEOUT_MS": "600000" } } } @@ -103,6 +107,7 @@ npx @perplexity-ai/mcp-server - **API Key Issues**: Ensure `PERPLEXITY_API_KEY` is set correctly - **Connection Errors**: Check your internet connection and API key validity - **Tool Not Found**: Make sure the package is installed and the command path is correct +- **Timeout Errors**: For very long research queries, set `PERPLEXITY_TIMEOUT_MS` to a higher value For support, visit [community.perplexity.ai](https://community.perplexity.ai) or [file an issue](https://github.com/perplexityai/modelcontextprotocol/issues). diff --git a/index.ts b/index.ts index d5e85f9..472d962 100644 --- a/index.ts +++ b/index.ts @@ -161,6 +161,10 @@ if (!PERPLEXITY_API_KEY) { process.exit(1); } +// Configure timeout for API requests (default: 5 minutes) +// Can be overridden via PERPLEXITY_TIMEOUT_MS environment variable +const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); + /** * Performs a chat completion by sending a request to the Perplexity API. * Appends citations to the returned message content if they exist. @@ -184,6 +188,9 @@ async function performChatCompletion( // https://docs.perplexity.ai/api-reference/chat-completions }; + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); + let response; try { response = await fetch(url.toString(), { @@ -193,8 +200,14 @@ async function performChatCompletion( "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, }, body: JSON.stringify(body), + signal: controller.signal, }); + clearTimeout(timeoutId); } catch (error) { + clearTimeout(timeoutId); + if (error instanceof Error && error.name === "AbortError") { + throw new Error(`Request timeout: Perplexity API did not respond within ${TIMEOUT_MS}ms. Consider increasing PERPLEXITY_TIMEOUT_MS.`); + } throw new Error(`Network error while calling Perplexity API: ${error}`); } @@ -288,6 +301,9 @@ async function performSearch( body.country = country; } + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); + let response; try { response = await fetch(url.toString(), { @@ -297,8 +313,14 @@ async function performSearch( "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, }, body: JSON.stringify(body), + signal: controller.signal, }); + clearTimeout(timeoutId); } catch (error) { + clearTimeout(timeoutId); + if (error instanceof Error && error.name === "AbortError") { + throw new Error(`Request timeout: Perplexity Search API did not respond within ${TIMEOUT_MS}ms. Consider increasing PERPLEXITY_TIMEOUT_MS.`); + } throw new Error(`Network error while calling Perplexity Search API: ${error}`); } From c15970622d37b95fdf357c0d87fc0364663a1127 Mon Sep 17 00:00:00 2001 From: Kesku Date: Tue, 14 Oct 2025 19:59:04 +0100 Subject: [PATCH 10/84] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7cf67a3..97ee4a1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.2.1", + "version": "0.2.2", "description": "Official MCP server for Perplexity API Platform", "keywords": [ "ai", From 4dbe1bb66740b5c5b3bd82011f5ebab2d2178b67 Mon Sep 17 00:00:00 2001 From: Kesku <62210496+kesku@users.noreply.github.com> Date: Tue, 14 Oct 2025 20:54:58 +0100 Subject: [PATCH 11/84] Update README --- README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index 47287b5..dccf33a 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,7 @@ The official MCP server implementation for the Perplexity API Platform, providing AI assistants with real-time web search, reasoning, and research capabilities through Sonar models and the Search API. -Please refer to the official [DeepWiki page](https://deepwiki.com/ppl-ai/modelcontextprotocol) for assistance with implementation. - -## Quick Start - -```bash -npx @perplexity-ai/mcp-server -``` +Please refer to the official [DeepWiki page](https://deepwiki.com/ppl-ai/modelcontextprotocol) for assistance with implementation. ## Available Tools From 4748eb6eab70a3a175e0604c2d8dac0997fcfc8e Mon Sep 17 00:00:00 2001 From: Kesku <62210496+kesku@users.noreply.github.com> Date: Sat, 18 Oct 2025 04:15:44 +0100 Subject: [PATCH 12/84] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index dccf33a..6161e9d 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,14 @@ Run in your terminal: claude mcp add perplexity --transport stdio --env PERPLEXITY_API_KEY=your_key_here -- npx -y perplexity-mcp ``` +### Codex + +Run in your terminal: + +```bash +codex mcp add perplexity --env PERPLEXITY_API_KEY=your_key_here -- npx -y @perplexity-ai/mcp-server +``` + Or add to your `claude.json`: ```json From ac847a6128bf8112061fe9539bfb877dd5900366 Mon Sep 17 00:00:00 2001 From: Kesku <62210496+kesku@users.noreply.github.com> Date: Sat, 18 Oct 2025 04:16:08 +0100 Subject: [PATCH 13/84] Update README.md --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 6161e9d..f7d4707 100644 --- a/README.md +++ b/README.md @@ -33,14 +33,6 @@ Run in your terminal: claude mcp add perplexity --transport stdio --env PERPLEXITY_API_KEY=your_key_here -- npx -y perplexity-mcp ``` -### Codex - -Run in your terminal: - -```bash -codex mcp add perplexity --env PERPLEXITY_API_KEY=your_key_here -- npx -y @perplexity-ai/mcp-server -``` - Or add to your `claude.json`: ```json @@ -79,6 +71,14 @@ Add to your `mcp.json`: } ``` +### Codex + +Run in your terminal: + +```bash +codex mcp add perplexity --env PERPLEXITY_API_KEY=your_key_here -- npx -y @perplexity-ai/mcp-server +``` + ### Claude Desktop Add to your `claude_desktop_config.json`: From 596821521605e92bbc4dac8f3901ba9783144ce8 Mon Sep 17 00:00:00 2001 From: Ray Walker Date: Thu, 30 Oct 2025 19:56:28 +1100 Subject: [PATCH 14/84] update dependencies to resolve deprecations and security issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - update @modelcontextprotocol/sdk 1.0.1 → 1.20.2 - update axios 1.6.2 → 1.13.1 - update dotenv 16.3.1 → 16.6.1 - update shx 0.3.4 → 0.4.0 - update typescript 5.6.2 → 5.9.3 - add vitest 4.0.5 for testing resolves npm warnings for deprecated inflight@1.0.6 and glob@7.2.3 fixes 5 moderate severity vulnerabilities in vitest dependency chain --- package-lock.json | 3277 +++++++++++++++++++++++++++++++++++++++------ package.json | 14 +- 2 files changed, 2867 insertions(+), 424 deletions(-) diff --git a/package-lock.json b/package-lock.json index 594a077..18a9642 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,341 +1,2598 @@ { - "name": "server-perplexity-ask", - "version": "0.1.0", + "name": "@perplexity-ai/mcp-server", + "version": "0.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "server-perplexity-ask", - "version": "0.1.0", + "name": "@perplexity-ai/mcp-server", + "version": "0.2.2", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.1", - "axios": "^1.6.2", - "dotenv": "^16.3.1" + "@modelcontextprotocol/sdk": "^1.20.2", + "dotenv": "^16.6.1" }, "bin": { - "mcp-server-perplexity-ask": "dist/index.js" + "perplexity-mcp": "dist/index.js" }, "devDependencies": { "@types/node": "^20", - "shx": "^0.3.4", - "typescript": "^5.6.2" + "shx": "^0.4.0", + "typescript": "^5.9.3", + "vitest": "^4.0.5" }, "engines": { "node": ">=18" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", + "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", + "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", + "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", + "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", + "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", + "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", + "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", + "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", + "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", + "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", + "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", + "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", + "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", + "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", + "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", + "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", + "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", + "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", + "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", + "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", + "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", + "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", + "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", + "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", + "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", + "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, "node_modules/@modelcontextprotocol/sdk": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.20.2.tgz", + "integrity": "sha512-6rqTdFt67AAAzln3NOKsXRmv5ZzPkgbfaebKBqUbts7vK1GZudqnrun5a8d3M/h955cam9RHZ6Jb4Y1XhnmFPg==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.17.tgz", + "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@vitest/expect": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.5.tgz", + "integrity": "sha512-DJctLVlKoddvP/G389oGmKWNG6GD9frm2FPXARziU80Rjo7SIYxQzb2YFzmQ4fVD3Q5utUYY8nUmWrqsuIlIXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.0.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.0.5", + "@vitest/utils": "4.0.5", + "chai": "^6.0.1", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.5.tgz", + "integrity": "sha512-iYHIy72LfbK+mL5W8zXROp6oOcJKXWeKcNjcPPsqoa18qIEDrhB6/Z08o0wRajTd6SSSDNw8NCSIHVNOMpz0mw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.0.5", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.19" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.5.tgz", + "integrity": "sha512-t1T/sSdsYyNc5AZl0EMeD0jW9cpJe2cODP0R++ZQe1kTkpgrwEfxGFR/yCG4w8ZybizbXRTHU7lE8sTDD/QsGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.5.tgz", + "integrity": "sha512-CQVVe+YEeKSiFBD5gBAmRDQglm4PnMBYzeTmt06t5iWtsUN9StQeeKhYCea/oaqBYilf8sARG6fSctUcEL/UmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.0.5", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.5.tgz", + "integrity": "sha512-jfmSAeR6xYNEvcD+/RxFGA1bzpqHtkVhgxo2cxXia+Q3xX7m6GpZij07rz+WyQcA/xEGn4eIS1OItkMyWsGBmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.5", + "magic-string": "^0.30.19", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.5.tgz", + "integrity": "sha512-TUmVQpAQign7r8+EnZsgTF3vY9BdGofTUge1rGNbnHn2IN3FChiQoT9lrPz7A7AVUZJU2LAZXl4v66HhsNMhoA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.5.tgz", + "integrity": "sha512-V5RndUgCB5/AfNvK9zxGCrRs99IrPYtMTIdUzJMMFs9nrmE5JXExIEfjVtUteyTRiLfCm+dCRMHf/Uu7Mm8/dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.0.5", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chai": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.0.tgz", + "integrity": "sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", + "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.11", + "@esbuild/android-arm": "0.25.11", + "@esbuild/android-arm64": "0.25.11", + "@esbuild/android-x64": "0.25.11", + "@esbuild/darwin-arm64": "0.25.11", + "@esbuild/darwin-x64": "0.25.11", + "@esbuild/freebsd-arm64": "0.25.11", + "@esbuild/freebsd-x64": "0.25.11", + "@esbuild/linux-arm": "0.25.11", + "@esbuild/linux-arm64": "0.25.11", + "@esbuild/linux-ia32": "0.25.11", + "@esbuild/linux-loong64": "0.25.11", + "@esbuild/linux-mips64el": "0.25.11", + "@esbuild/linux-ppc64": "0.25.11", + "@esbuild/linux-riscv64": "0.25.11", + "@esbuild/linux-s390x": "0.25.11", + "@esbuild/linux-x64": "0.25.11", + "@esbuild/netbsd-arm64": "0.25.11", + "@esbuild/netbsd-x64": "0.25.11", + "@esbuild/openbsd-arm64": "0.25.11", + "@esbuild/openbsd-x64": "0.25.11", + "@esbuild/openharmony-arm64": "0.25.11", + "@esbuild/sunos-x64": "0.25.11", + "@esbuild/win32-arm64": "0.25.11", + "@esbuild/win32-ia32": "0.25.11", + "@esbuild/win32-x64": "0.25.11" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/express/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.0.1.tgz", - "integrity": "sha512-slLdFaxQJ9AlRg+hw28iiTtGvShAOgOKXcD0F91nUcRYiOMuS9ZBYjcdNZRXW9G5JQ511GRTdUy1zQVZDpJ+4w==", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, "license": "MIT", "dependencies": { - "content-type": "^1.0.5", - "raw-body": "^3.0.0", - "zod": "^3.23.8" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, - "node_modules/axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" + "engines": { + "node": ">=18" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">= 8" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 0.8" + "node": ">=8.6" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/delayed-stream": { + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-finally": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=4" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "license": "BSD-2-Clause", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" }, - "funding": { - "url": "https://dotenvx.com" + "engines": { + "node": ">= 0.8" } }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "resolve": "^1.1.6" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.10" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "node_modules/rollup": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0" + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">= 0.4" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", + "fsevents": "~2.3.2" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 18" } }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } ], "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 6" + "node": ">= 18" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/send/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.6" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "node_modules/send/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 18" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/shelljs": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.9.2.tgz", + "integrity": "sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "execa": "^1.0.0", + "fast-glob": "^3.3.2", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" }, "engines": { - "node": "*" + "node": ">=18" + } + }, + "node_modules/shx": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.4.0.tgz", + "integrity": "sha512-Z0KixSIlGPpijKgcH6oCMCbltPImvaKy0sGH8AkLRXw1KyzpKtaCTizP2xen+hNDqVF4xxgvA0KXSb9o4Q6hnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.8", + "shelljs": "^0.9.2" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=18" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, "engines": { "node": ">= 0.4" }, @@ -343,11 +2600,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, "engines": { "node": ">= 0.4" }, @@ -355,13 +2616,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" }, "engines": { "node": ">= 0.4" @@ -370,337 +2634,505 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-errors": { + "node_modules/siginfo": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, "engines": { "node": ">= 0.8" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "node_modules/tinyrainbow": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=14.0.0" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8.0" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, "engines": { - "node": ">= 0.6" + "node": ">=0.6" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { - "node": "*" + "node": ">= 0.6" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.6" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", + "node_modules/type-is/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", "dependencies": { - "wrappy": "1" + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=0.10.0" + "node": ">=14.17" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "dev": true, "license": "MIT" }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" - }, "engines": { "node": ">= 0.8" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "dependencies": { - "resolve": "^1.1.6" - }, + "punycode": "^2.1.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">= 0.8" } }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "node_modules/vite": { + "version": "7.1.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", + "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { - "resolve": "bin/resolve" + "vite": "bin/vite.js" }, "engines": { - "node": ">= 0.4" + "node": "^20.19.0 || >=22.12.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "url": "https://github.com/vitejs/vite?sponsor=1" }, - "bin": { - "shjs": "bin/shjs" + "optionalDependencies": { + "fsevents": "~2.3.3" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, - "node_modules/shx": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", - "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", - "dependencies": { - "minimist": "^1.2.3", - "shelljs": "^0.8.5" + "engines": { + "node": ">=12.0.0" }, - "bin": { - "shx": "lib/cli.js" + "peerDependencies": { + "picomatch": "^3 || ^4" }, - "engines": { - "node": ">=6" + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/vitest": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.5.tgz", + "integrity": "sha512-4H+J28MI5oeYgGg3h5BFSkQ1g/2GKK1IR8oorH3a6EQQbb7CwjbnyBjH4PGxw9/6vpwAPNzaeUMp4Js4WJmdXQ==", "dev": true, "license": "MIT", + "dependencies": { + "@vitest/expect": "4.0.5", + "@vitest/mocker": "4.0.5", + "@vitest/pretty-format": "4.0.5", + "@vitest/runner": "4.0.5", + "@vitest/snapshot": "4.0.5", + "@vitest/spy": "4.0.5", + "@vitest/utils": "4.0.5", + "debug": "^4.4.3", + "es-module-lexer": "^1.7.0", + "expect-type": "^1.2.2", + "magic-string": "^0.30.19", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3", + "vite": "^6.0.0 || ^7.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, "engines": { - "node": ">= 0.4" + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.0.5", + "@vitest/browser-preview": "4.0.5", + "@vitest/browser-webdriverio": "4.0.5", + "@vitest/ui": "4.0.5", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "node-which": "bin/node-which" }, "engines": { - "node": ">=14.17" + "node": ">= 8" } }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/zod": { @@ -711,6 +3143,15 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.6", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } } } } diff --git a/package.json b/package.json index 97ee4a1..087ef1b 100644 --- a/package.json +++ b/package.json @@ -33,17 +33,19 @@ "scripts": { "build": "tsc && shx chmod +x dist/*.js", "prepare": "npm run build", - "watch": "tsc --watch" + "watch": "tsc --watch", + "test": "vitest run", + "test:watch": "vitest" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.1", - "axios": "^1.6.2", - "dotenv": "^16.3.1" + "@modelcontextprotocol/sdk": "^1.20.2", + "dotenv": "^16.6.1" }, "devDependencies": { "@types/node": "^20", - "shx": "^0.3.4", - "typescript": "^5.6.2" + "shx": "^0.4.0", + "typescript": "^5.9.3", + "vitest": "^4.0.5" }, "engines": { "node": ">=18" From 45e06cb9ab390db1d43e41075aff8c3835ede54b Mon Sep 17 00:00:00 2001 From: Ray Walker Date: Thu, 30 Oct 2025 19:57:39 +1100 Subject: [PATCH 15/84] add validation for API responses and message structure - validate choices array exists and is non-empty - validate message content is string type - add message structure validation in tool handlers - export functions for testing prevents null pointer crashes on malformed API responses follows MCP security best practices for zero-trust validation --- index.ts | 78 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/index.ts b/index.ts index 472d962..d80728b 100644 --- a/index.ts +++ b/index.ts @@ -161,9 +161,32 @@ if (!PERPLEXITY_API_KEY) { process.exit(1); } -// Configure timeout for API requests (default: 5 minutes) -// Can be overridden via PERPLEXITY_TIMEOUT_MS environment variable -const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); +/** + * Validates an array of message objects for chat completion tools. + * Ensures each message has a valid role and content field. + * + * @param {any} messages - The messages to validate + * @param {string} toolName - The name of the tool calling this validation (for error messages) + * @throws {Error} If messages is not an array or if any message is invalid + */ +function validateMessages(messages: any, toolName: string): void { + if (!Array.isArray(messages)) { + throw new Error(`Invalid arguments for ${toolName}: 'messages' must be an array`); + } + + for (let i = 0; i < messages.length; i++) { + const msg = messages[i]; + if (!msg || typeof msg !== 'object') { + throw new Error(`Invalid message at index ${i}: must be an object`); + } + if (!msg.role || typeof msg.role !== 'string') { + throw new Error(`Invalid message at index ${i}: 'role' must be a string`); + } + if (msg.content === undefined || msg.content === null || typeof msg.content !== 'string') { + throw new Error(`Invalid message at index ${i}: 'content' must be a string`); + } + } +} /** * Performs a chat completion by sending a request to the Perplexity API. @@ -174,17 +197,20 @@ const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); * @returns {Promise} The chat completion result with appended citations. * @throws Will throw an error if the API request fails. */ -async function performChatCompletion( +export async function performChatCompletion( messages: Array<{ role: string; content: string }>, model: string = "sonar-pro" ): Promise { + // Read timeout fresh each time to respect env var changes + const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); + // Construct the API endpoint URL and request body const url = new URL("https://api.perplexity.ai/chat/completions"); const body = { model: model, // Model identifier passed as parameter messages: messages, // Additional parameters can be added here if required (e.g., max_tokens, temperature, etc.) - // See the Sonar API documentation for more details: + // See the Sonar API documentation for more details: // https://docs.perplexity.ai/api-reference/chat-completions }; @@ -232,8 +258,18 @@ async function performChatCompletion( throw new Error(`Failed to parse JSON response from Perplexity API: ${jsonError}`); } - // Directly retrieve the main message content from the response - let messageContent = data.choices[0].message.content; + // Validate response structure + if (!data.choices || !Array.isArray(data.choices) || data.choices.length === 0) { + throw new Error("Invalid API response: missing or empty choices array"); + } + + const firstChoice = data.choices[0]; + if (!firstChoice.message || typeof firstChoice.message.content !== 'string') { + throw new Error("Invalid API response: missing message content"); + } + + // Directly retrieve the main message content from the response + let messageContent = firstChoice.message.content; // If citations are provided, append them to the message content if (data.citations && Array.isArray(data.citations) && data.citations.length > 0) { @@ -252,7 +288,7 @@ async function performChatCompletion( * @param {any} data - The search response data from the API. * @returns {string} Formatted search results. */ -function formatSearchResults(data: any): string { +export function formatSearchResults(data: any): string { if (!data.results || !Array.isArray(data.results)) { return "No search results found."; } @@ -284,12 +320,15 @@ function formatSearchResults(data: any): string { * @returns {Promise} The formatted search results. * @throws Will throw an error if the API request fails. */ -async function performSearch( +export async function performSearch( query: string, maxResults: number = 10, maxTokensPerPage: number = 1024, country?: string ): Promise { + // Read timeout fresh each time to respect env var changes + const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); + const url = new URL("https://api.perplexity.ai/search"); const body: any = { query: query, @@ -383,11 +422,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => { } switch (name) { case "perplexity_ask": { - if (!Array.isArray(args.messages)) { - throw new Error("Invalid arguments for perplexity_ask: 'messages' must be an array"); - } - // Invoke the chat completion function with the provided messages - const messages = args.messages; + validateMessages(args.messages, "perplexity_ask"); + const messages = args.messages as Array<{ role: string; content: string }>; const result = await performChatCompletion(messages, "sonar-pro"); return { content: [{ type: "text", text: result }], @@ -395,11 +431,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => { }; } case "perplexity_research": { - if (!Array.isArray(args.messages)) { - throw new Error("Invalid arguments for perplexity_research: 'messages' must be an array"); - } - // Invoke the chat completion function with the provided messages using the deep research model - const messages = args.messages; + validateMessages(args.messages, "perplexity_research"); + const messages = args.messages as Array<{ role: string; content: string }>; const result = await performChatCompletion(messages, "sonar-deep-research"); return { content: [{ type: "text", text: result }], @@ -407,11 +440,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => { }; } case "perplexity_reason": { - if (!Array.isArray(args.messages)) { - throw new Error("Invalid arguments for perplexity_reason: 'messages' must be an array"); - } - // Invoke the chat completion function with the provided messages using the reasoning model - const messages = args.messages; + validateMessages(args.messages, "perplexity_reason"); + const messages = args.messages as Array<{ role: string; content: string }>; const result = await performChatCompletion(messages, "sonar-reasoning-pro"); return { content: [{ type: "text", text: result }], From c9e9d592e9794454cd268c6a6ec1049617c7b366 Mon Sep 17 00:00:00 2001 From: Ray Walker Date: Thu, 30 Oct 2025 19:59:24 +1100 Subject: [PATCH 16/84] add comprehensive test suite with 47 tests unit tests: - formatSearchResults edge cases - performChatCompletion success and error paths - performSearch parameter handling - API response validation - timeout and error handling - concurrent requests - special characters and long content integration tests: - all four tool types (ask, research, reason, search) - real-world scenarios - multi-turn conversations - performance and reliability tests run against actual implementation via imports vitest configured with proper env vars and exclusions --- index.test.ts | 629 +++++++++++++++++++++++++++++++++++++++++++++++ vitest.config.ts | 10 + 2 files changed, 639 insertions(+) create mode 100644 index.test.ts create mode 100644 vitest.config.ts diff --git a/index.test.ts b/index.test.ts new file mode 100644 index 0000000..21b9946 --- /dev/null +++ b/index.test.ts @@ -0,0 +1,629 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; +import { formatSearchResults, performChatCompletion, performSearch } from "./index.js"; + +describe("Perplexity MCP Server", () => { + let originalFetch: typeof global.fetch; + + beforeEach(() => { + originalFetch = global.fetch; + }); + + afterEach(() => { + global.fetch = originalFetch; + vi.restoreAllMocks(); + }); + + describe("formatSearchResults", () => { + it("should format search results correctly", () => { + const mockData = { + results: [ + { + title: "Test Result 1", + url: "https://example.com/1", + snippet: "This is a test snippet", + date: "2025-01-01", + }, + { + title: "Test Result 2", + url: "https://example.com/2", + snippet: "Another snippet", + }, + ], + }; + + const formatted = formatSearchResults(mockData); + + expect(formatted).toContain("Found 2 search results"); + expect(formatted).toContain("Test Result 1"); + expect(formatted).toContain("https://example.com/1"); + expect(formatted).toContain("This is a test snippet"); + expect(formatted).toContain("Date: 2025-01-01"); + expect(formatted).toContain("Test Result 2"); + }); + + it("should handle empty results", () => { + const mockData = { results: [] }; + const formatted = formatSearchResults(mockData); + expect(formatted).toContain("Found 0 search results"); + }); + + it("should handle missing results array", () => { + const mockData = {}; + const formatted = formatSearchResults(mockData); + expect(formatted).toBe("No search results found."); + }); + }); + + describe("performChatCompletion", () => { + it("should successfully complete chat request", async () => { + const mockResponse = { + choices: [ + { + message: { + content: "This is a test response", + }, + }, + ], + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const messages = [{ role: "user", content: "test question" }]; + const result = await performChatCompletion(messages, "sonar-pro"); + + expect(result).toBe("This is a test response"); + expect(global.fetch).toHaveBeenCalledWith( + "https://api.perplexity.ai/chat/completions", + expect.objectContaining({ + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: "Bearer test-api-key", + }, + body: JSON.stringify({ + model: "sonar-pro", + messages, + }), + }) + ); + }); + + it("should append citations when present", async () => { + const mockResponse = { + choices: [ + { + message: { + content: "Response with citations", + }, + }, + ], + citations: [ + "https://example.com/source1", + "https://example.com/source2", + ], + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const messages = [{ role: "user", content: "test" }]; + const result = await performChatCompletion(messages); + + expect(result).toContain("Response with citations"); + expect(result).toContain("\n\nCitations:\n"); + expect(result).toContain("[1] https://example.com/source1"); + expect(result).toContain("[2] https://example.com/source2"); + }); + + it("should handle API errors", async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: false, + status: 401, + statusText: "Unauthorized", + text: async () => "Invalid API key", + } as Response); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "Perplexity API error: 401 Unauthorized" + ); + }); + + it("should handle timeout errors", async () => { + process.env.PERPLEXITY_TIMEOUT_MS = "100"; + + global.fetch = vi.fn().mockImplementation((_url, options) => { + return new Promise((resolve, reject) => { + const signal = options?.signal as AbortSignal; + + if (signal) { + signal.addEventListener("abort", () => { + reject(new DOMException("The operation was aborted.", "AbortError")); + }); + } + + setTimeout(() => { + resolve({ + ok: true, + json: async () => ({ choices: [{ message: { content: "late" } }] }), + } as Response); + }, 200); + }); + }); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "Request timeout" + ); + }); + + it("should handle network errors", async () => { + global.fetch = vi.fn().mockRejectedValue(new Error("Network failure")); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "Network error while calling Perplexity API" + ); + }); + }); + + describe("performSearch", () => { + it("should successfully perform search", async () => { + const mockResponse = { + results: [ + { + title: "Search Result", + url: "https://example.com", + snippet: "Test snippet", + }, + ], + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const result = await performSearch("test query", 10, 1024); + + expect(result).toContain("Found 1 search results"); + expect(result).toContain("Search Result"); + expect(global.fetch).toHaveBeenCalledWith( + "https://api.perplexity.ai/search", + expect.objectContaining({ + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: "Bearer test-api-key", + }, + body: JSON.stringify({ + query: "test query", + max_results: 10, + max_tokens_per_page: 1024, + }), + }) + ); + }); + + it("should include country parameter when provided", async () => { + const mockResponse = { results: [] }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + await performSearch("test", 10, 1024, "US"); + + expect(global.fetch).toHaveBeenCalledWith( + "https://api.perplexity.ai/search", + expect.objectContaining({ + body: JSON.stringify({ + query: "test", + max_results: 10, + max_tokens_per_page: 1024, + country: "US", + }), + }) + ); + }); + + it("should handle search API errors", async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: false, + status: 500, + statusText: "Internal Server Error", + text: async () => "Server error", + } as Response); + + await expect(performSearch("test")).rejects.toThrow( + "Perplexity Search API error: 500 Internal Server Error" + ); + }); + }); + + describe("API Response Validation", () => { + it("should handle empty choices array", async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => ({ choices: [] }), + } as Response); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "missing or empty choices array" + ); + }); + + it("should handle missing message content", async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => ({ choices: [{ message: null }] }), + } as Response); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "missing message content" + ); + }); + + it("should handle missing choices property", async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => ({}), + } as Response); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "missing or empty choices array" + ); + }); + + it("should handle malformed message object", async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => ({ choices: [{ message: { content: 123 } }] }), + } as Response); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "missing message content" + ); + }); + + it("should handle null choices", async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => ({ choices: null }), + } as Response); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "missing or empty choices array" + ); + }); + + it("should handle undefined message in choice", async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => ({ choices: [{}] }), + } as Response); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "missing message content" + ); + }); + + it("should handle empty citations array gracefully", async () => { + const mockResponse = { + choices: [{ message: { content: "Response" } }], + citations: [], + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const messages = [{ role: "user", content: "test" }]; + const result = await performChatCompletion(messages); + + expect(result).toBe("Response"); + expect(result).not.toContain("Citations:"); + }); + + it("should handle non-array citations", async () => { + const mockResponse = { + choices: [{ message: { content: "Response" } }], + citations: "not-an-array", + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const messages = [{ role: "user", content: "test" }]; + const result = await performChatCompletion(messages); + + expect(result).toBe("Response"); + expect(result).not.toContain("Citations:"); + }); + }); + + describe("Edge Cases", () => { + it("should handle JSON parse errors gracefully", async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => { + throw new Error("Invalid JSON"); + }, + } as unknown as Response); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "Failed to parse JSON response" + ); + }); + + it("should handle error text parse failures", async () => { + global.fetch = vi.fn().mockResolvedValue({ + ok: false, + status: 500, + statusText: "Internal Server Error", + text: async () => { + throw new Error("Cannot read error"); + }, + } as unknown as Response); + + const messages = [{ role: "user", content: "test" }]; + + await expect(performChatCompletion(messages)).rejects.toThrow( + "Unable to parse error response" + ); + }); + + it("should handle special characters in messages", async () => { + const mockResponse = { + choices: [{ message: { content: "Response with émojis 🎉 and unicode ñ" } }], + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const messages = [{ role: "user", content: "test with émojis 🎉" }]; + const result = await performChatCompletion(messages); + + expect(result).toContain("émojis 🎉"); + expect(result).toContain("unicode ñ"); + }); + + it("should handle very long content strings", async () => { + const longContent = "x".repeat(100000); + const mockResponse = { + choices: [{ message: { content: longContent } }], + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const messages = [{ role: "user", content: "test" }]; + const result = await performChatCompletion(messages); + + expect(result).toBe(longContent); + expect(result.length).toBe(100000); + }); + + it("should handle multiple models correctly", async () => { + const models = ["sonar-pro", "sonar-deep-research", "sonar-reasoning-pro"]; + + for (const model of models) { + const mockResponse = { + choices: [{ message: { content: `Response from ${model}` } }], + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const messages = [{ role: "user", content: "test" }]; + const result = await performChatCompletion(messages, model); + + expect(result).toContain(model); + expect(global.fetch).toHaveBeenCalledWith( + "https://api.perplexity.ai/chat/completions", + expect.objectContaining({ + body: expect.stringContaining(`"model":"${model}"`), + }) + ); + } + }); + + it("should handle search with boundary values", async () => { + const mockResponse = { results: [] }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + // Test max values + await performSearch("test", 20, 2048); + expect(global.fetch).toHaveBeenCalledWith( + "https://api.perplexity.ai/search", + expect.objectContaining({ + body: expect.stringContaining('"max_results":20'), + }) + ); + + // Test min values + await performSearch("test", 1, 256); + expect(global.fetch).toHaveBeenCalledWith( + "https://api.perplexity.ai/search", + expect.objectContaining({ + body: expect.stringContaining('"max_results":1'), + }) + ); + }); + + it("should handle formatSearchResults with missing optional fields", async () => { + const mockData = { + results: [ + { title: "Test", url: "https://example.com" }, + { title: "Test 2", url: "https://example.com/2", snippet: "snippet only" }, + { title: "Test 3", url: "https://example.com/3", date: "2025-01-01" }, + ], + }; + + const formatted = formatSearchResults(mockData); + + expect(formatted).toContain("Test"); + expect(formatted).toContain("Test 2"); + expect(formatted).toContain("snippet only"); + expect(formatted).toContain("Date: 2025-01-01"); + expect(formatted).not.toContain("undefined"); + }); + + it("should handle concurrent requests correctly", async () => { + let callCount = 0; + global.fetch = vi.fn().mockImplementation(async () => { + const currentCall = ++callCount; + await new Promise((resolve) => setTimeout(resolve, 10)); + return { + ok: true, + json: async () => ({ + choices: [{ message: { content: `Response ${currentCall}` } }] + }), + } as Response; + }); + + const messages = [{ role: "user", content: "test" }]; + const promises = [ + performChatCompletion(messages), + performChatCompletion(messages), + performChatCompletion(messages), + ]; + + const results = await Promise.all(promises); + + expect(results).toHaveLength(3); + expect(global.fetch).toHaveBeenCalledTimes(3); + // Results should all be present (may not be unique due to timing) + expect(results.every(r => r.startsWith("Response"))).toBe(true); + }); + + it("should respect timeout on each call independently", async () => { + // First call with long timeout + process.env.PERPLEXITY_TIMEOUT_MS = "1000"; + + global.fetch = vi.fn().mockImplementation((_url, options) => { + return new Promise((resolve) => { + const signal = options?.signal as AbortSignal; + setTimeout(() => { + if (!signal?.aborted) { + resolve({ + ok: true, + json: async () => ({ choices: [{ message: { content: "fast" } }] }), + } as Response); + } + }, 50); + }); + }); + + const messages = [{ role: "user", content: "test" }]; + const result1 = await performChatCompletion(messages); + expect(result1).toBe("fast"); + + // Second call with short timeout + process.env.PERPLEXITY_TIMEOUT_MS = "10"; + + global.fetch = vi.fn().mockImplementation((_url, options) => { + return new Promise((resolve, reject) => { + const signal = options?.signal as AbortSignal; + + if (signal) { + signal.addEventListener("abort", () => { + reject(new DOMException("The operation was aborted.", "AbortError")); + }); + } + + setTimeout(() => { + resolve({ + ok: true, + json: async () => ({ choices: [{ message: { content: "slow" } }] }), + } as Response); + }, 100); + }); + }); + + await expect(performChatCompletion(messages)).rejects.toThrow("timeout"); + }); + }); + + describe("formatSearchResults Edge Cases", () => { + it("should handle results with null/undefined values", () => { + const mockData = { + results: [ + { title: null, url: "https://example.com", snippet: undefined }, + { title: "Valid", url: null, snippet: "snippet", date: undefined }, + ], + }; + + const formatted = formatSearchResults(mockData); + + expect(formatted).toContain("null"); + expect(formatted).toContain("Valid"); + expect(formatted).not.toContain("undefined"); + }); + + it("should handle empty strings in result fields", () => { + const mockData = { + results: [{ title: "", url: "", snippet: "", date: "" }], + }; + + const formatted = formatSearchResults(mockData); + + expect(formatted).toContain("Found 1 search results"); + }); + + it("should handle results with extra unexpected fields", () => { + const mockData = { + results: [ + { + title: "Test", + url: "https://example.com", + unexpectedField: "should be ignored", + anotherField: 12345, + }, + ], + }; + + const formatted = formatSearchResults(mockData); + + expect(formatted).toContain("Test"); + expect(formatted).not.toContain("unexpectedField"); + expect(formatted).not.toContain("12345"); + }); + }); +}); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..99020a2 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: ['**/node_modules/**', '**/dist/**'], + env: { + PERPLEXITY_API_KEY: 'test-api-key', + }, + }, +}) From e49497e35f7d8a0672b6fd48856bb33f3806ced5 Mon Sep 17 00:00:00 2001 From: Ray Walker Date: Thu, 30 Oct 2025 23:28:04 +1100 Subject: [PATCH 17/84] Enhance testing capabilities and coverage reporting - Add coverage configuration to vitest for improved test reporting - Introduce a new GitHub Actions workflow for automated testing on push and pull requests - Update .gitignore to exclude coverage directory - Add @vitest/coverage-v8 as a development dependency for coverage analysis - Introduce a new test command for coverage reporting in package.json --- .github/workflows/test.yml | 25 ++++ .gitignore | 1 + package-lock.json | 258 +++++++++++++++++++++++++++++++++++++ package.json | 4 +- vitest.config.ts | 10 ++ 5 files changed, 297 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..59d1a50 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,25 @@ +name: Test + +on: + pull_request: + push: + branches: [main] + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: npm ci + + - name: Run tests + run: npm test diff --git a/.gitignore b/.gitignore index 7fe2a88..00c3763 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ yarn-error.log # Ignore coverage and test reports .coverage coverage.xml +coverage/ *.cover *.pyc diff --git a/package-lock.json b/package-lock.json index 18a9642..660d21c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ }, "devDependencies": { "@types/node": "^20", + "@vitest/coverage-v8": "^4.0.5", "shx": "^0.4.0", "typescript": "^5.9.3", "vitest": "^4.0.5" @@ -25,6 +26,66 @@ "node": ">=18" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.11", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", @@ -467,6 +528,16 @@ "node": ">=18" } }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -474,6 +545,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@modelcontextprotocol/sdk": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.20.2.tgz", @@ -885,6 +967,38 @@ "undici-types": "~6.21.0" } }, + "node_modules/@vitest/coverage-v8": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.5.tgz", + "integrity": "sha512-Yn5Dx0UVvllE3uatQw+ftObWtM/TjAOdbd8WvygaR04iyFXdNmtvZ/nJ2/JndyzfPQtbAWw0F+GJY5+lgM/7qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^1.0.2", + "@vitest/utils": "4.0.5", + "ast-v8-to-istanbul": "^0.3.5", + "debug": "^4.4.3", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.2.0", + "magicast": "^0.3.5", + "std-env": "^3.9.0", + "tinyrainbow": "^3.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "4.0.5", + "vitest": "4.0.5" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, "node_modules/@vitest/expect": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.5.tgz", @@ -1056,6 +1170,18 @@ "node": ">=12" } }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.8.tgz", + "integrity": "sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.31", + "estree-walker": "^3.0.3", + "js-tokens": "^9.0.1" + } + }, "node_modules/body-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", @@ -1761,6 +1887,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -1785,6 +1921,13 @@ "node": ">= 0.4" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -1909,6 +2052,67 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -1925,6 +2129,47 @@ "@jridgewell/sourcemap-codec": "^1.5.5" } }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -2710,6 +2955,19 @@ "node": ">=0.10.0" } }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", diff --git a/package.json b/package.json index 087ef1b..7bd8b1f 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,8 @@ "prepare": "npm run build", "watch": "tsc --watch", "test": "vitest run", - "test:watch": "vitest" + "test:watch": "vitest", + "test:coverage": "vitest run --coverage" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.20.2", @@ -43,6 +44,7 @@ }, "devDependencies": { "@types/node": "^20", + "@vitest/coverage-v8": "^4.0.5", "shx": "^0.4.0", "typescript": "^5.9.3", "vitest": "^4.0.5" diff --git a/vitest.config.ts b/vitest.config.ts index 99020a2..b4c8877 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -6,5 +6,15 @@ export default defineConfig({ env: { PERPLEXITY_API_KEY: 'test-api-key', }, + coverage: { + provider: 'v8', + reporter: ['text', 'html', 'lcov'], + exclude: [ + '**/node_modules/**', + '**/dist/**', + '**/*.test.ts', + '**/*.config.ts', + ], + }, }, }) From 71e80ea6d7d4a3e41857376d99c51bde2e207261 Mon Sep 17 00:00:00 2001 From: Kesku <62210496+kesku@users.noreply.github.com> Date: Fri, 31 Oct 2025 14:50:27 +0000 Subject: [PATCH 18/84] Bump version from 0.2.2 to 0.2.3 Overwrite auto-generated MCP config, which followed a different schema --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 97ee4a1..0a2a094 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.2.2", + "version": "0.2.3", "description": "Official MCP server for Perplexity API Platform", "keywords": [ "ai", From e2ae36f6a8d20d94d6ade640fb4df0a6f715d642 Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 7 Nov 2025 14:35:27 +0000 Subject: [PATCH 19/84] Add MCP registry publishing support - Add server.json for MCP registry - Add mcpName field to package.json - Add publish-mcp.yml workflow with GitHub OIDC - Bump version to 0.3.0 --- .github/workflows/publish-mcp.yml | 29 +++++++++++++++++++++++++++++ .gitignore | 4 +++- package.json | 5 +++-- server.json | 18 ++++++++++++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/publish-mcp.yml create mode 100644 server.json diff --git a/.github/workflows/publish-mcp.yml b/.github/workflows/publish-mcp.yml new file mode 100644 index 0000000..66c716c --- /dev/null +++ b/.github/workflows/publish-mcp.yml @@ -0,0 +1,29 @@ +name: Publish to MCP Registry + +on: + push: + branches: [main] + paths: ['server.json', 'package.json'] + workflow_dispatch: + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install MCP Publisher + run: | + curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher + + - name: Login to MCP Registry + run: ./mcp-publisher login github-oidc + + - name: Publish to MCP Registry + run: ./mcp-publisher publish + diff --git a/.gitignore b/.gitignore index 00c3763..7c3379c 100644 --- a/.gitignore +++ b/.gitignore @@ -51,4 +51,6 @@ Desktop.ini *.csv *.tsv *.jsonl -: + +# Ignore MCP registry authentication tokens +.mcpregistry_* diff --git a/package.json b/package.json index 6bc0ed3..9dfc933 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,8 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.2.3", - "description": "Official MCP server for Perplexity API Platform", + "version": "0.3.0", + "mcpName": "io.github.perplexityai/mcp-server", + "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ "ai", "perplexity", diff --git a/server.json b/server.json new file mode 100644 index 0000000..856eac0 --- /dev/null +++ b/server.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json", + "name": "io.github.perplexityai/mcp-server", + "title": "Perplexity API Platform", + "description": "Real-time web search, reasoning, and research through Perplexity's API", + "version": "0.3.0", + "packages": [ + { + "registryType": "npm", + "identifier": "@perplexity-ai/mcp-server", + "version": "0.3.0", + "transport": { + "type": "stdio" + } + } + ] +} + From a831eee4d99f46aa38f406980c5b6f7bed0eceda Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 7 Nov 2025 14:43:10 +0000 Subject: [PATCH 20/84] Added --provenance flag for npm publishing --- .github/workflows/publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 77f3ff1..bc0714f 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -35,4 +35,4 @@ jobs: run: npm run build - name: Publish to npm - run: npm publish --access public + run: npm publish --access public --provenance From 007ee78fe3074bd98ffbc36aa778126a9f5d9a40 Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 7 Nov 2025 14:54:20 +0000 Subject: [PATCH 21/84] Add production environment to MCP publishing workflow --- .github/workflows/publish-mcp.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/publish-mcp.yml b/.github/workflows/publish-mcp.yml index 66c716c..43f7ea4 100644 --- a/.github/workflows/publish-mcp.yml +++ b/.github/workflows/publish-mcp.yml @@ -9,6 +9,8 @@ on: jobs: publish: runs-on: ubuntu-latest + environment: + name: production permissions: contents: read id-token: write From ae074d0f733d807bbe2357ce9e7ae33331aeee1f Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 7 Nov 2025 15:46:36 +0000 Subject: [PATCH 22/84] update mcp sdk --- package-lock.json | 107 +++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 68 insertions(+), 41 deletions(-) diff --git a/package-lock.json b/package-lock.json index 660d21c..23649ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.2.2", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.2.2", + "version": "0.3.0", "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.20.2", + "@modelcontextprotocol/sdk": "^1.21.1", "dotenv": "^16.6.1" }, "bin": { @@ -557,12 +557,13 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.20.2.tgz", - "integrity": "sha512-6rqTdFt67AAAzln3NOKsXRmv5ZzPkgbfaebKBqUbts7vK1GZudqnrun5a8d3M/h955cam9RHZ6Jb4Y1XhnmFPg==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.21.1.tgz", + "integrity": "sha512-UyLFcJLDvUuZbGnaQqXFT32CpPpGj7VS19roLut6gkQVhb439xUzYWbsUvdI3ZPL+2hnFosuugtYWE0Mcs1rmQ==", "license": "MIT", "dependencies": { - "ajv": "^6.12.6", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", @@ -577,6 +578,14 @@ }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + } } }, "node_modules/@nodelib/fs.scandir": { @@ -1145,21 +1154,38 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -1724,11 +1750,21 @@ "node": ">=8.6.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastq": { "version": "1.19.1", @@ -2114,9 +2150,9 @@ "license": "MIT" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/magic-string": { @@ -2474,15 +2510,6 @@ "once": "^1.3.1" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", @@ -2555,6 +2582,15 @@ "node": ">= 0.10" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.11", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", @@ -3140,15 +3176,6 @@ "node": ">= 0.8" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index 9dfc933..222cf2a 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "test:coverage": "vitest run --coverage" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.20.2", + "@modelcontextprotocol/sdk": "^1.21.1", "dotenv": "^16.6.1" }, "devDependencies": { From 7bb417bb55bb858c61f657c576e4a2083fb2b49d Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 7 Nov 2025 15:48:50 +0000 Subject: [PATCH 23/84] bump version --- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 23649ac..f1cc2e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.3.0", + "version": "0.3.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.3.0", + "version": "0.3.1", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 222cf2a..9727059 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.3.0", + "version": "0.3.1", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 856eac0..88ff67b 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.3.0", + "version": "0.3.1", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.3.0", + "version": "0.3.1", "transport": { "type": "stdio" } From 2aed2ae1bd0eb723103663f29d51e8d8762a022b Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 9 Nov 2025 00:51:22 +0000 Subject: [PATCH 24/84] Allow excluding thinking tokens (deep research and reasoning) --- index.test.ts | 39 +++++++++++++++++++++++++++++++++++++++ index.ts | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/index.test.ts b/index.test.ts index 21b9946..f0999c7 100644 --- a/index.test.ts +++ b/index.test.ts @@ -626,4 +626,43 @@ describe("Perplexity MCP Server", () => { expect(formatted).not.toContain("12345"); }); }); + + describe("strip_thinking parameter", () => { + it("should strip thinking tokens when true and keep them when false", async () => { + const mockResponse = { + choices: [ + { + message: { + content: "This is my reasoning process\n\nThe answer is 4.", + }, + }, + ], + }; + + // Test with stripThinking = true + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const messages = [{ role: "user", content: "What is 2+2?" }]; + const resultStripped = await performChatCompletion(messages, "sonar-reasoning-pro", true); + + expect(resultStripped).not.toContain(""); + expect(resultStripped).not.toContain(""); + expect(resultStripped).not.toContain("This is my reasoning process"); + expect(resultStripped).toContain("The answer is 4."); + + // Test with stripThinking = false + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const resultKept = await performChatCompletion(messages, "sonar-reasoning-pro", false); + + expect(resultKept).toContain("This is my reasoning process"); + expect(resultKept).toContain("The answer is 4."); + }); + }); }); diff --git a/index.ts b/index.ts index d80728b..5e7fa33 100644 --- a/index.ts +++ b/index.ts @@ -76,6 +76,10 @@ const PERPLEXITY_RESEARCH_TOOL: Tool = { }, description: "Array of conversation messages", }, + strip_thinking: { + type: "boolean", + description: "If true, removes ... tags and their content from the response to save context tokens. Default is false.", + }, }, required: ["messages"], }, @@ -112,6 +116,10 @@ const PERPLEXITY_REASON_TOOL: Tool = { }, description: "Array of conversation messages", }, + strip_thinking: { + type: "boolean", + description: "If true, removes ... tags and their content from the response to save context tokens. Default is false.", + }, }, required: ["messages"], }, @@ -188,18 +196,31 @@ function validateMessages(messages: any, toolName: string): void { } } +/** + * Strips thinking tokens (content within ... tags) from the response. + * This helps reduce context usage when the thinking process is not needed. + * + * @param {string} content - The content to process + * @returns {string} The content with thinking tokens removed + */ +function stripThinkingTokens(content: string): string { + return content.replace(/[\s\S]*?<\/think>/g, '').trim(); +} + /** * Performs a chat completion by sending a request to the Perplexity API. * Appends citations to the returned message content if they exist. * * @param {Array<{ role: string; content: string }>} messages - An array of message objects. * @param {string} model - The model to use for the completion. + * @param {boolean} stripThinking - If true, removes ... tags from the response. * @returns {Promise} The chat completion result with appended citations. * @throws Will throw an error if the API request fails. */ export async function performChatCompletion( messages: Array<{ role: string; content: string }>, - model: string = "sonar-pro" + model: string = "sonar-pro", + stripThinking: boolean = false ): Promise { // Read timeout fresh each time to respect env var changes const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); @@ -271,6 +292,11 @@ export async function performChatCompletion( // Directly retrieve the main message content from the response let messageContent = firstChoice.message.content; + // Strip thinking tokens if requested + if (stripThinking) { + messageContent = stripThinkingTokens(messageContent); + } + // If citations are provided, append them to the message content if (data.citations && Array.isArray(data.citations) && data.citations.length > 0) { messageContent += "\n\nCitations:\n"; @@ -433,7 +459,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => { case "perplexity_research": { validateMessages(args.messages, "perplexity_research"); const messages = args.messages as Array<{ role: string; content: string }>; - const result = await performChatCompletion(messages, "sonar-deep-research"); + const stripThinking = typeof args.strip_thinking === "boolean" ? args.strip_thinking : false; + const result = await performChatCompletion(messages, "sonar-deep-research", stripThinking); return { content: [{ type: "text", text: result }], isError: false, @@ -442,7 +469,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => { case "perplexity_reason": { validateMessages(args.messages, "perplexity_reason"); const messages = args.messages as Array<{ role: string; content: string }>; - const result = await performChatCompletion(messages, "sonar-reasoning-pro"); + const stripThinking = typeof args.strip_thinking === "boolean" ? args.strip_thinking : false; + const result = await performChatCompletion(messages, "sonar-reasoning-pro", stripThinking); return { content: [{ type: "text", text: result }], isError: false, From f2a05d6c6ff589dcaa1f5f882b4e03989917e130 Mon Sep 17 00:00:00 2001 From: Kesku <62210496+kesku@users.noreply.github.com> Date: Sun, 9 Nov 2025 00:52:34 +0000 Subject: [PATCH 25/84] Update README with strip_thinking parameter details --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index f7d4707..7908427 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,11 @@ Deep, comprehensive research using the `sonar-deep-research` model. Ideal for th ### **perplexity_reason** Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Perfect for complex analytical tasks. +> [!TIP] +> Available as an optional parameter for **perplexity_reason** and **perplexity_research**: `strip_thinking` +> +> Set to `true` to remove `...` tags from the response, saving context tokens. Default: `false` + ## Configuration ### Get Your API Key From a93b3545f2282cbe6b7f2b07778d1b782e291458 Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 9 Nov 2025 01:18:04 +0000 Subject: [PATCH 26/84] Add web proxy support --- README.md | 39 ++++++++++++++++++++++++++++++ index.test.ts | 61 +++++++++++++++++++++++++++++++++++++++++++++++ index.ts | 44 ++++++++++++++++++++++++++++++++-- package-lock.json | 12 +++++++++- package.json | 3 ++- 5 files changed, 155 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7908427..e05f42a 100644 --- a/README.md +++ b/README.md @@ -111,12 +111,51 @@ For any MCP-compatible client, use: npx @perplexity-ai/mcp-server ``` +### Proxy Setup (For Corporate Networks) + +If you are running this server at work—especially behind a company firewall or proxy—you may need to tell the program how to send its internet traffic through your network's proxy. Follow these steps: + +**1. Get your proxy details** + +- Ask your IT department for your HTTP(S) proxy address and port. +- You may also need a username and password. + +**2. Set the proxy environment variable** + +The easiest and most reliable way for Perplexity MCP is to use `PERPLEXITY_PROXY`. For example: + +```bash +export PERPLEXITY_PROXY=http://your-proxy-host:8080 +``` + +- If your proxy needs a username and password, use: + ```bash + export PERPLEXITY_PROXY=http://username:password@your-proxy-host:8080 + ``` + +**3. Alternate: Standard environment variables** + +If you'd rather use the standard variables, we support `HTTPS_PROXY` and `HTTP_PROXY`. + +> [!NOTE] +>The server checks proxy settings in this order: `PERPLEXITY_PROXY` → `HTTPS_PROXY` → `HTTP_PROXY`. If none are set, it connects directly to the internet. + ## Troubleshooting - **API Key Issues**: Ensure `PERPLEXITY_API_KEY` is set correctly - **Connection Errors**: Check your internet connection and API key validity - **Tool Not Found**: Make sure the package is installed and the command path is correct - **Timeout Errors**: For very long research queries, set `PERPLEXITY_TIMEOUT_MS` to a higher value +- **Proxy Issues**: If you're behind a corporate firewall and experience connection errors, you likely need to set up a proxy: + - Obtain your proxy server address and port from your IT department. + - Set the environment variable before running the server, e.g.: + - `export PERPLEXITY_PROXY=http://proxy-address:port` + - If authentication is needed: `export PERPLEXITY_PROXY=http://username:password@proxy-address:port` + - Typical proxy ports include 8080, 3128, or 80. + - The format for authenticated proxies is: + `http://username:password@proxy-host:port` + - Double-check the address, port, and credentials if connections fail or time out. + - If you continue to have issues, your firewall may be blocking traffic; ask IT if traffic for `api.perplexity.ai` is being restricted. For support, visit [community.perplexity.ai](https://community.perplexity.ai) or [file an issue](https://github.com/perplexityai/modelcontextprotocol/issues). diff --git a/index.test.ts b/index.test.ts index f0999c7..f7b98d8 100644 --- a/index.test.ts +++ b/index.test.ts @@ -665,4 +665,65 @@ describe("Perplexity MCP Server", () => { expect(resultKept).toContain("The answer is 4."); }); }); + + describe("Proxy Support", () => { + const originalEnv = process.env; + + beforeEach(() => { + // Reset environment variables + process.env = { ...originalEnv }; + delete process.env.PERPLEXITY_PROXY; + delete process.env.HTTPS_PROXY; + delete process.env.HTTP_PROXY; + }); + + afterEach(() => { + process.env = originalEnv; + }); + + it("should use native fetch when no proxy is configured", async () => { + const mockResponse = { + choices: [{ message: { content: "Test response" } }], + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + const messages = [{ role: "user", content: "test" }]; + await performChatCompletion(messages); + + // Verify native fetch was called (not undici) + expect(global.fetch).toHaveBeenCalled(); + }); + + it("should read PERPLEXITY_PROXY environment variable", () => { + process.env.PERPLEXITY_PROXY = "http://proxy.example.com:8080"; + expect(process.env.PERPLEXITY_PROXY).toBe("http://proxy.example.com:8080"); + }); + + it("should prioritize PERPLEXITY_PROXY over HTTPS_PROXY", () => { + process.env.PERPLEXITY_PROXY = "http://perplexity-proxy.example.com:8080"; + process.env.HTTPS_PROXY = "http://https-proxy.example.com:8080"; + + // PERPLEXITY_PROXY should take precedence + expect(process.env.PERPLEXITY_PROXY).toBe("http://perplexity-proxy.example.com:8080"); + }); + + it("should fall back to HTTPS_PROXY when PERPLEXITY_PROXY is not set", () => { + delete process.env.PERPLEXITY_PROXY; + process.env.HTTPS_PROXY = "http://https-proxy.example.com:8080"; + + expect(process.env.HTTPS_PROXY).toBe("http://https-proxy.example.com:8080"); + }); + + it("should fall back to HTTP_PROXY when others are not set", () => { + delete process.env.PERPLEXITY_PROXY; + delete process.env.HTTPS_PROXY; + process.env.HTTP_PROXY = "http://http-proxy.example.com:8080"; + + expect(process.env.HTTP_PROXY).toBe("http://http-proxy.example.com:8080"); + }); + }); }); diff --git a/index.ts b/index.ts index 5e7fa33..be38ac3 100644 --- a/index.ts +++ b/index.ts @@ -7,6 +7,7 @@ import { ListToolsRequestSchema, Tool, } from "@modelcontextprotocol/sdk/types.js"; +import { fetch as undiciFetch, ProxyAgent } from "undici"; /** * Definition of the Perplexity Ask Tool. @@ -169,6 +170,45 @@ if (!PERPLEXITY_API_KEY) { process.exit(1); } +/** + * Gets the proxy URL from environment variables. + * Checks PERPLEXITY_PROXY, HTTPS_PROXY, HTTP_PROXY in order. + * + * @returns {string | undefined} The proxy URL if configured, undefined otherwise + */ +function getProxyUrl(): string | undefined { + return process.env.PERPLEXITY_PROXY || + process.env.HTTPS_PROXY || + process.env.HTTP_PROXY || + undefined; +} + +/** + * Creates a proxy-aware fetch function. + * Uses undici with ProxyAgent when a proxy is configured, otherwise uses native fetch. + * + * @param {string} url - The URL to fetch + * @param {RequestInit} options - Fetch options + * @returns {Promise} The fetch response + */ +async function proxyAwareFetch(url: string, options: RequestInit = {}): Promise { + const proxyUrl = getProxyUrl(); + + if (proxyUrl) { + // Use undici with ProxyAgent when proxy is configured + const proxyAgent = new ProxyAgent(proxyUrl); + const response = await undiciFetch(url, { + ...options, + dispatcher: proxyAgent, + } as any); + // Cast to native Response type for compatibility + return response as unknown as Response; + } else { + // Use native fetch when no proxy is configured + return fetch(url, options); + } +} + /** * Validates an array of message objects for chat completion tools. * Ensures each message has a valid role and content field. @@ -240,7 +280,7 @@ export async function performChatCompletion( let response; try { - response = await fetch(url.toString(), { + response = await proxyAwareFetch(url.toString(), { method: "POST", headers: { "Content-Type": "application/json", @@ -371,7 +411,7 @@ export async function performSearch( let response; try { - response = await fetch(url.toString(), { + response = await proxyAwareFetch(url.toString(), { method: "POST", headers: { "Content-Type": "application/json", diff --git a/package-lock.json b/package-lock.json index f1cc2e0..49d7913 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", - "dotenv": "^16.6.1" + "dotenv": "^16.6.1", + "undici": "^6.20.0" }, "bin": { "perplexity-mcp": "dist/index.js" @@ -3160,6 +3161,15 @@ "node": ">=14.17" } }, + "node_modules/undici": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", + "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, "node_modules/undici-types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", diff --git a/package.json b/package.json index 9727059..33b771d 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,8 @@ }, "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", - "dotenv": "^16.6.1" + "dotenv": "^16.6.1", + "undici": "^6.20.0" }, "devDependencies": { "@types/node": "^20", From b357a5c049450e9c2ba26f3cbd649b675681c471 Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 9 Nov 2025 01:45:01 +0000 Subject: [PATCH 27/84] Add Claude Code plugin support - Add .claude-plugin/marketplace.json - Update README with installation guide - Add workflow to validate plugin config - Include .claude-plugin directory in npm package files - version bump --- .claude-plugin/marketplace.json | 49 +++++++++++++++++++++++++++ .github/workflows/validate-plugin.yml | 46 +++++++++++++++++++++++++ README.md | 19 +++++++++++ package-lock.json | 4 +-- package.json | 5 +-- server.json | 4 +-- 6 files changed, 121 insertions(+), 6 deletions(-) create mode 100644 .claude-plugin/marketplace.json create mode 100644 .github/workflows/validate-plugin.yml diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json new file mode 100644 index 0000000..96e98de --- /dev/null +++ b/.claude-plugin/marketplace.json @@ -0,0 +1,49 @@ +{ + "name": "perplexity-mcp-server", + "owner": { + "name": "Perplexity AI", + "email": "api@perplexity.ai" + }, + "metadata": { + "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", + "version": "0.4.0" + }, + "plugins": [ + { + "name": "perplexity", + "source": "./", + "description": "Real-time web search, reasoning, and research through Perplexity's API", + "version": "0.4.0", + "author": { + "name": "Perplexity AI", + "email": "api@perplexity.ai" + }, + "homepage": "https://docs.perplexity.ai/guides/mcp-server", + "repository": "https://github.com/perplexityai/modelcontextprotocol", + "license": "MIT", + "keywords": [ + "mcp", + "search", + "web-search", + "perplexity", + "research", + "reasoning", + "ai" + ], + "category": "productivity", + "strict": false, + "mcpServers": { + "perplexity": { + "type": "stdio", + "command": "npx", + "args": ["-y", "@perplexity-ai/mcp-server"], + "env": { + "PERPLEXITY_API_KEY": "${PERPLEXITY_API_KEY}", + "PERPLEXITY_TIMEOUT_MS": "${PERPLEXITY_TIMEOUT_MS:-600000}" + } + } + } + } + ] +} + diff --git a/.github/workflows/validate-plugin.yml b/.github/workflows/validate-plugin.yml new file mode 100644 index 0000000..b9e1e64 --- /dev/null +++ b/.github/workflows/validate-plugin.yml @@ -0,0 +1,46 @@ +name: Validate Plugin Configuration + +on: + pull_request: + paths: + - '.claude-plugin/**' + - 'package.json' + push: + branches: [main] + paths: + - '.claude-plugin/**' + - 'package.json' + +jobs: + validate: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install Claude CLI + run: npm install -g @anthropic-ai/claude-code + + - name: Validate Plugin Configuration + run: claude plugin validate . + + - name: Check Plugin Files Exist + run: | + if [ ! -f ".claude-plugin/marketplace.json" ]; then + echo "Error: .claude-plugin/marketplace.json not found" + exit 1 + fi + echo "✓ Marketplace file exists" + + - name: Validate JSON Syntax + run: | + echo "Validating marketplace.json syntax..." + cat .claude-plugin/marketplace.json | jq empty + echo "✓ JSON syntax is valid" + diff --git a/README.md b/README.md index e05f42a..7721b83 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,25 @@ Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Pe ### Claude Code +#### Option 1: Install via Plugin (Recommended) + +The easiest way to get started with Perplexity in Claude Code: + +```bash +# Add the Perplexity marketplace +/plugin marketplace add perplexityai/modelcontextprotocol + +# Install the plugin +/plugin install perplexity +``` + +Then set your API key: +```bash +export PERPLEXITY_API_KEY="your_key_here" +``` + +#### Option 2: Manual Configuration + Run in your terminal: ```bash diff --git a/package-lock.json b/package-lock.json index 49d7913..c0686e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.3.1", + "version": "0.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.3.1", + "version": "0.4.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 33b771d..0fe9045 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.3.1", + "version": "0.4.0", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ @@ -29,7 +29,8 @@ }, "files": [ "dist", - "README.md" + "README.md", + ".claude-plugin" ], "scripts": { "build": "tsc && shx chmod +x dist/*.js", diff --git a/server.json b/server.json index 88ff67b..1dd85f2 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.3.1", + "version": "0.4.0", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.3.1", + "version": "0.4.0", "transport": { "type": "stdio" } From 05c45e67823217eaff3ab88389052e0fc3c3dbd7 Mon Sep 17 00:00:00 2001 From: Kesku <62210496+kesku@users.noreply.github.com> Date: Sun, 9 Nov 2025 01:57:03 +0000 Subject: [PATCH 28/84] Update proxy setup instructions in README --- README.md | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 7721b83..8f8e797 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,7 @@ If you are running this server at work—especially behind a company firewall or **1. Get your proxy details** -- Ask your IT department for your HTTP(S) proxy address and port. +- Ask your IT department for your HTTPS proxy address and port. - You may also need a username and password. **2. Set the proxy environment variable** @@ -144,20 +144,22 @@ If you are running this server at work—especially behind a company firewall or The easiest and most reliable way for Perplexity MCP is to use `PERPLEXITY_PROXY`. For example: ```bash -export PERPLEXITY_PROXY=http://your-proxy-host:8080 +export PERPLEXITY_PROXY=https://your-proxy-host:8080 ``` -- If your proxy needs a username and password, use: - ```bash - export PERPLEXITY_PROXY=http://username:password@your-proxy-host:8080 - ``` +If your proxy needs a username and password, use: + +```bash +export PERPLEXITY_PROXY=https://username:password@your-proxy-host:8080 +``` **3. Alternate: Standard environment variables** If you'd rather use the standard variables, we support `HTTPS_PROXY` and `HTTP_PROXY`. > [!NOTE] ->The server checks proxy settings in this order: `PERPLEXITY_PROXY` → `HTTPS_PROXY` → `HTTP_PROXY`. If none are set, it connects directly to the internet. +> The server checks proxy settings in this order: `PERPLEXITY_PROXY` → `HTTPS_PROXY` → `HTTP_PROXY`. If none are set, it connects directly to the internet. +> URLs must include `https://`. Typical ports are `8080`, `3128`, and `80`. ## Troubleshooting @@ -165,16 +167,7 @@ If you'd rather use the standard variables, we support `HTTPS_PROXY` and `HTTP_P - **Connection Errors**: Check your internet connection and API key validity - **Tool Not Found**: Make sure the package is installed and the command path is correct - **Timeout Errors**: For very long research queries, set `PERPLEXITY_TIMEOUT_MS` to a higher value -- **Proxy Issues**: If you're behind a corporate firewall and experience connection errors, you likely need to set up a proxy: - - Obtain your proxy server address and port from your IT department. - - Set the environment variable before running the server, e.g.: - - `export PERPLEXITY_PROXY=http://proxy-address:port` - - If authentication is needed: `export PERPLEXITY_PROXY=http://username:password@proxy-address:port` - - Typical proxy ports include 8080, 3128, or 80. - - The format for authenticated proxies is: - `http://username:password@proxy-host:port` - - Double-check the address, port, and credentials if connections fail or time out. - - If you continue to have issues, your firewall may be blocking traffic; ask IT if traffic for `api.perplexity.ai` is being restricted. +- **Proxy Issues**: Verify your `PERPLEXITY_PROXY` or `HTTPS_PROXY` setup and ensure `api.perplexity.ai` isn’t blocked by your firewall. For support, visit [community.perplexity.ai](https://community.perplexity.ai) or [file an issue](https://github.com/perplexityai/modelcontextprotocol/issues). From c1655994c32a7be851edb6fdecdee65cf108ffc4 Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 9 Nov 2025 02:14:34 +0000 Subject: [PATCH 29/84] Enhance tool metadata --- index.ts | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/index.ts b/index.ts index be38ac3..dc91973 100644 --- a/index.ts +++ b/index.ts @@ -16,6 +16,7 @@ import { fetch as undiciFetch, ProxyAgent } from "undici"; */ const PERPLEXITY_ASK_TOOL: Tool = { name: "perplexity_ask", + title: "Ask Perplexity", description: "Engages in a conversation using the Sonar API. " + "Accepts an array of messages (each with a role and content) " + @@ -44,6 +45,10 @@ const PERPLEXITY_ASK_TOOL: Tool = { }, required: ["messages"], }, + annotations: { + readOnlyHint: true, + openWorldHint: true, + }, }; /** @@ -52,6 +57,7 @@ const PERPLEXITY_ASK_TOOL: Tool = { */ const PERPLEXITY_RESEARCH_TOOL: Tool = { name: "perplexity_research", + title: "Deep Research", description: "Performs deep research using the Perplexity API. " + "Accepts an array of messages (each with a role and content) " + @@ -84,6 +90,10 @@ const PERPLEXITY_RESEARCH_TOOL: Tool = { }, required: ["messages"], }, + annotations: { + readOnlyHint: true, + openWorldHint: true, + }, }; /** @@ -92,6 +102,7 @@ const PERPLEXITY_RESEARCH_TOOL: Tool = { */ const PERPLEXITY_REASON_TOOL: Tool = { name: "perplexity_reason", + title: "Advanced Reasoning", description: "Performs reasoning tasks using the Perplexity API. " + "Accepts an array of messages (each with a role and content) " + @@ -124,6 +135,10 @@ const PERPLEXITY_REASON_TOOL: Tool = { }, required: ["messages"], }, + annotations: { + readOnlyHint: true, + openWorldHint: true, + }, }; /** @@ -132,9 +147,11 @@ const PERPLEXITY_REASON_TOOL: Tool = { */ const PERPLEXITY_SEARCH_TOOL: Tool = { name: "perplexity_search", + title: "Search the Web", description: "Performs web search using the Perplexity Search API. " + - "Returns ranked search results with titles, URLs, snippets, and metadata.", + "Returns ranked search results with titles, URLs, snippets, and metadata. " + + "Perfect for finding up-to-date facts, news, or specific information.", inputSchema: { type: "object", properties: { @@ -161,6 +178,10 @@ const PERPLEXITY_SEARCH_TOOL: Tool = { }, required: ["query"], }, + annotations: { + readOnlyHint: true, + openWorldHint: true, + }, }; // Retrieve the Perplexity API key from environment variables @@ -455,13 +476,24 @@ export async function performSearch( // Initialize the server with tool metadata and capabilities const server = new Server( { - name: "example-servers/perplexity-ask", - version: "0.1.0", + name: "io.github.perplexityai/mcp-server", + version: "0.4.0", }, { capabilities: { tools: {}, }, + instructions: `You are the Perplexity MCP Server. Use these tools appropriately: + +- perplexity_search: For quick web searches when you need current information or facts. Returns ranked search results. + +- perplexity_ask: For general questions and conversational queries with real-time web search using the sonar-pro model. + +- perplexity_research: For deep, comprehensive research requiring thorough analysis using the sonar-deep-research model. Use this for complex topics that require detailed investigation. + +- perplexity_reason: For complex analytical tasks requiring advanced reasoning using the sonar-reasoning-pro model. Use this for logical problems, analysis, and decision-making. + +When using perplexity_research or perplexity_reason, consider setting strip_thinking=true to save context tokens if the reasoning process isn't needed in the final output.`, } ); From 30840f827fb1a3874afdd33022560be5d3ab5f9c Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 9 Nov 2025 02:20:23 +0000 Subject: [PATCH 30/84] Update README --- README.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8f8e797..1ed4d7e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # Perplexity API Platform MCP Server +[![Install in Cursor](https://custom-icon-badges.demolab.com/badge/Install_in_Cursor-000000?style=for-the-badge&logo=cursor-ai-white)](https://cursor.com/en/install-mcp?name=perplexity&config=eyJ0eXBlIjoic3RkaW8iLCJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBwZXJwbGV4aXR5LWFpL21jcC1zZXJ2ZXIiXX0=) +  +[![Install in VS Code](https://custom-icon-badges.demolab.com/badge/Install_in_VS_Code-007ACC?style=for-the-badge&logo=vsc&logoColor=white)](https://vscode.dev/redirect/mcp/install?name=perplexity&config=%7B%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40perplexity-ai%2Fmcp-server%22%5D%7D) +  +[![npm version](https://img.shields.io/npm/v/%40perplexity-ai%2Fmcp-server?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/@perplexity-ai/mcp-server) + The official MCP server implementation for the Perplexity API Platform, providing AI assistants with real-time web search, reasoning, and research capabilities through Sonar models and the Search API. Please refer to the official [DeepWiki page](https://deepwiki.com/ppl-ai/modelcontextprotocol) for assistance with implementation. @@ -76,9 +82,9 @@ Or add to your `claude.json`: } ``` -### Cursor +### Cursor / VS Code -Add to your `mcp.json`: +Add to your `mcp.json` (Cursor) or `.vscode/mcp.json` (VS Code): ```json { @@ -95,6 +101,8 @@ Add to your `mcp.json`: } ``` +Or use the one-click install badges at the top of this README. + ### Codex Run in your terminal: @@ -167,7 +175,7 @@ If you'd rather use the standard variables, we support `HTTPS_PROXY` and `HTTP_P - **Connection Errors**: Check your internet connection and API key validity - **Tool Not Found**: Make sure the package is installed and the command path is correct - **Timeout Errors**: For very long research queries, set `PERPLEXITY_TIMEOUT_MS` to a higher value -- **Proxy Issues**: Verify your `PERPLEXITY_PROXY` or `HTTPS_PROXY` setup and ensure `api.perplexity.ai` isn’t blocked by your firewall. +- **Proxy Issues**: Verify your `PERPLEXITY_PROXY` or `HTTPS_PROXY` setup and ensure `api.perplexity.ai` isn't blocked by your firewall. For support, visit [community.perplexity.ai](https://community.perplexity.ai) or [file an issue](https://github.com/perplexityai/modelcontextprotocol/issues). From b64c433e34369ed4bba3962b4c217291d5efb27e Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 9 Nov 2025 02:21:43 +0000 Subject: [PATCH 31/84] bump version --- .claude-plugin/marketplace.json | 4 ++-- index.ts | 2 +- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 96e98de..2414b5c 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.4.0" + "version": "0.4.1" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.4.0", + "version": "0.4.1", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/index.ts b/index.ts index dc91973..25c333c 100644 --- a/index.ts +++ b/index.ts @@ -477,7 +477,7 @@ export async function performSearch( const server = new Server( { name: "io.github.perplexityai/mcp-server", - version: "0.4.0", + version: "0.4.1", }, { capabilities: { diff --git a/package-lock.json b/package-lock.json index c0686e0..dbb4b92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.4.0", + "version": "0.4.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.4.0", + "version": "0.4.1", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 0fe9045..d6b8ed5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.4.0", + "version": "0.4.1", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 1dd85f2..bf13ca5 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.4.0", + "version": "0.4.1", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.4.0", + "version": "0.4.1", "transport": { "type": "stdio" } From f3d333b13df255ab9a947fe1a12e016dc1547101 Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 9 Nov 2025 12:41:58 +0000 Subject: [PATCH 32/84] Remove unused dependency --- package-lock.json | 13 ------------- package.json | 1 - 2 files changed, 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index dbb4b92..1949fab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", - "dotenv": "^16.6.1", "undici": "^6.20.0" }, "bin": { @@ -1382,18 +1381,6 @@ "node": ">= 0.8" } }, - "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", diff --git a/package.json b/package.json index d6b8ed5..881f525 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,6 @@ }, "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", - "dotenv": "^16.6.1", "undici": "^6.20.0" }, "devDependencies": { From 3c1fcd36c5084f82391eb81482cd2dc1f4995937 Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 9 Nov 2025 12:42:10 +0000 Subject: [PATCH 33/84] Remove deepwiki --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 1ed4d7e..32cf50c 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,6 @@ The official MCP server implementation for the Perplexity API Platform, providing AI assistants with real-time web search, reasoning, and research capabilities through Sonar models and the Search API. -Please refer to the official [DeepWiki page](https://deepwiki.com/ppl-ai/modelcontextprotocol) for assistance with implementation. - ## Available Tools ### **perplexity_search** From 65bfe0373a37bec8c7c9e4af25b32bdad9a85553 Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 9 Nov 2025 12:47:06 +0000 Subject: [PATCH 34/84] Dockerfile improved build process --- .dockerignore | 19 ++++++++++ DOCKER.md | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 11 ++++-- 3 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 .dockerignore create mode 100644 DOCKER.md diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0fee275 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,19 @@ +node_modules +dist +coverage +.git +.gitignore +*.md +!README.md +.vscode +.idea +*.log +.env +.env.local +*.test.ts +*.test.js +vitest.config.ts +vitest.config.js +Dockerfile +.dockerignore + diff --git a/DOCKER.md b/DOCKER.md new file mode 100644 index 0000000..f935499 --- /dev/null +++ b/DOCKER.md @@ -0,0 +1,97 @@ +# Docker Setup + +This document explains how to build and run the Perplexity MCP Server using Docker. + +## Prerequisites + +- Docker installed on your system +- A Perplexity API key from the [API Portal](https://www.perplexity.ai/account/api/group) + +## Building the Docker Image + +Build the Docker image from the project root: + +```bash +docker build -t perplexity-mcp-server . +``` + +## Running the Container + +### Basic Usage + +Run the container with your API key: + +```bash +docker run --rm -e PERPLEXITY_API_KEY=your_key_here perplexity-mcp-server +``` + +### With Custom Timeout + +Set a custom timeout for requests (default is 5 minutes): + +```bash +docker run --rm \ + -e PERPLEXITY_API_KEY=your_key_here \ + -e PERPLEXITY_TIMEOUT_MS=600000 \ + perplexity-mcp-server +``` + +### With Proxy Support + +If you're behind a corporate proxy, configure it: + +```bash +docker run --rm \ + -e PERPLEXITY_API_KEY=your_key_here \ + -e PERPLEXITY_PROXY=https://your-proxy-host:8080 \ + perplexity-mcp-server +``` + +Or with authentication: + +```bash +docker run --rm \ + -e PERPLEXITY_API_KEY=your_key_here \ + -e PERPLEXITY_PROXY=https://username:password@your-proxy-host:8080 \ + perplexity-mcp-server +``` + +### Using Environment File + +Create a `.env` file: + +```bash +PERPLEXITY_API_KEY=your_key_here +PERPLEXITY_TIMEOUT_MS=600000 +PERPLEXITY_PROXY=https://your-proxy-host:8080 +``` + +Then run: + +```bash +docker run --rm --env-file .env perplexity-mcp-server +``` + +## Integration with MCP Clients + +When using Docker with MCP clients, configure them to run the Docker container. For example, in Cursor/VS Code's `mcp.json`: + +```json +{ + "mcpServers": { + "perplexity": { + "command": "docker", + "args": [ + "run", + "--rm", + "-i", + "-e", "PERPLEXITY_API_KEY=your_key_here", + "perplexity-mcp-server" + ] + } + } +} +``` + +> **Note**: Docker-based MCP server configuration may have limitations compared to direct `npx` usage. For most use cases, the `npx` method documented in the main README is recommended. + diff --git a/Dockerfile b/Dockerfile index bf44767..836d223 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,15 @@ FROM node:22.12-alpine AS builder -COPY . /app - WORKDIR /app -RUN --mount=type=cache,target=/root/.npm npm install +COPY package*.json ./ +COPY tsconfig.json ./ + +RUN --mount=type=cache,target=/root/.npm npm install --ignore-scripts + +COPY . . + +RUN npm run build FROM node:22-alpine AS release From b28bd145d52e70fbaca72da262d41b860d323fd1 Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 9 Nov 2025 14:41:51 +0000 Subject: [PATCH 35/84] feat: add HTTP transport support with McpServer API - Migrate from Server class to modern McpServer - Add StreamableHTTP transport with session management and SSE support - Maintain backward compatibility for existing STDIO users - Preserve all tool annotations --- .claude-plugin/marketplace.json | 4 +- .github/workflows/test.yml | 2 + DOCKER.md | 40 +- Dockerfile | 6 +- README.md | 25 + index.ts | 611 ------------------- package-lock.json | 904 ++++++++++++++++++++++------- package.json | 18 +- server.json | 11 +- smithery.yaml | 7 + src/http.ts | 136 +++++ index.test.ts => src/index.test.ts | 2 +- src/index.ts | 34 ++ src/server.ts | 449 ++++++++++++++ src/transport.test.ts | 366 ++++++++++++ tsconfig.json | 6 +- 16 files changed, 1775 insertions(+), 846 deletions(-) delete mode 100644 index.ts create mode 100644 smithery.yaml create mode 100644 src/http.ts rename index.test.ts => src/index.test.ts (99%) create mode 100644 src/index.ts create mode 100644 src/server.ts create mode 100644 src/transport.test.ts diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 2414b5c..00815ab 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.4.1" + "version": "0.5.0" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.4.1", + "version": "0.5.0", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 59d1a50..db4c2cd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,4 +22,6 @@ jobs: run: npm ci - name: Run tests + env: + PERPLEXITY_API_KEY: test-api-key run: npm test diff --git a/DOCKER.md b/DOCKER.md index f935499..358463f 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -17,20 +17,22 @@ docker build -t perplexity-mcp-server . ## Running the Container -### Basic Usage +### HTTP Mode (Default) -Run the container with your API key: +The Docker container runs in HTTP mode by default, making it accessible via HTTP requests: ```bash -docker run --rm -e PERPLEXITY_API_KEY=your_key_here perplexity-mcp-server +docker run --rm -p 8080:8080 -e PERPLEXITY_API_KEY=your_key_here perplexity-mcp-server ``` +The server will be accessible at `http://localhost:8080/mcp` + ### With Custom Timeout Set a custom timeout for requests (default is 5 minutes): ```bash -docker run --rm \ +docker run --rm -p 8080:8080 \ -e PERPLEXITY_API_KEY=your_key_here \ -e PERPLEXITY_TIMEOUT_MS=600000 \ perplexity-mcp-server @@ -41,7 +43,7 @@ docker run --rm \ If you're behind a corporate proxy, configure it: ```bash -docker run --rm \ +docker run --rm -p 8080:8080 \ -e PERPLEXITY_API_KEY=your_key_here \ -e PERPLEXITY_PROXY=https://your-proxy-host:8080 \ perplexity-mcp-server @@ -50,7 +52,7 @@ docker run --rm \ Or with authentication: ```bash -docker run --rm \ +docker run --rm -p 8080:8080 \ -e PERPLEXITY_API_KEY=your_key_here \ -e PERPLEXITY_PROXY=https://username:password@your-proxy-host:8080 \ perplexity-mcp-server @@ -64,34 +66,38 @@ Create a `.env` file: PERPLEXITY_API_KEY=your_key_here PERPLEXITY_TIMEOUT_MS=600000 PERPLEXITY_PROXY=https://your-proxy-host:8080 +PORT=8080 ``` Then run: ```bash -docker run --rm --env-file .env perplexity-mcp-server +docker run --rm -p 8080:8080 --env-file .env perplexity-mcp-server ``` ## Integration with MCP Clients -When using Docker with MCP clients, configure them to run the Docker container. For example, in Cursor/VS Code's `mcp.json`: +When using the HTTP Docker server, configure your MCP client to connect to the HTTP endpoint: ```json { "mcpServers": { "perplexity": { - "command": "docker", - "args": [ - "run", - "--rm", - "-i", - "-e", "PERPLEXITY_API_KEY=your_key_here", - "perplexity-mcp-server" - ] + "url": "http://localhost:8080/mcp" } } } ``` -> **Note**: Docker-based MCP server configuration may have limitations compared to direct `npx` usage. For most use cases, the `npx` method documented in the main README is recommended. +## STDIO Mode (Local Development) + +For local development with STDIO transport, you can still run the server locally without Docker: + +```bash +npm install +npm run build +PERPLEXITY_API_KEY=your_key_here npm start +``` + +> **Note**: The Docker image is optimized for HTTP mode deployment. For local STDIO usage, the `npx` method documented in the main README is recommended. diff --git a/Dockerfile b/Dockerfile index 836d223..a29dbf9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ COPY tsconfig.json ./ RUN --mount=type=cache,target=/root/.npm npm install --ignore-scripts -COPY . . +COPY src/ ./src/ RUN npm run build @@ -23,4 +23,6 @@ ENV NODE_ENV=production RUN npm ci --ignore-scripts --omit-dev -ENTRYPOINT ["node", "dist/index.js"] +EXPOSE 8080 + +ENTRYPOINT ["node", "dist/http.js"] diff --git a/README.md b/README.md index 32cf50c..53891b0 100644 --- a/README.md +++ b/README.md @@ -167,6 +167,31 @@ If you'd rather use the standard variables, we support `HTTPS_PROXY` and `HTTP_P > The server checks proxy settings in this order: `PERPLEXITY_PROXY` → `HTTPS_PROXY` → `HTTP_PROXY`. If none are set, it connects directly to the internet. > URLs must include `https://`. Typical ports are `8080`, `3128`, and `80`. + +### HTTP Server Deployment + +For cloud or shared deployments, you can run the server in HTTP mode: + +#### Using Docker + +```bash +docker build -t perplexity-mcp-server . +docker run -p 8080:8080 -e PERPLEXITY_API_KEY=your_key_here perplexity-mcp-server +``` + +The server will be accessible at `http://localhost:8080/mcp` + +#### Using Node.js Directly + +```bash +npm install +npm run build +PORT=8080 npm run start:http +``` + +Connect your MCP client to: `http://localhost:8080/mcp` + + ## Troubleshooting - **API Key Issues**: Ensure `PERPLEXITY_API_KEY` is set correctly diff --git a/index.ts b/index.ts deleted file mode 100644 index 25c333c..0000000 --- a/index.ts +++ /dev/null @@ -1,611 +0,0 @@ -#!/usr/bin/env node - -import { Server } from "@modelcontextprotocol/sdk/server/index.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; -import { - CallToolRequestSchema, - ListToolsRequestSchema, - Tool, -} from "@modelcontextprotocol/sdk/types.js"; -import { fetch as undiciFetch, ProxyAgent } from "undici"; - -/** - * Definition of the Perplexity Ask Tool. - * This tool accepts an array of messages and returns a chat completion response - * from the Perplexity API, with citations appended to the message if provided. - */ -const PERPLEXITY_ASK_TOOL: Tool = { - name: "perplexity_ask", - title: "Ask Perplexity", - description: - "Engages in a conversation using the Sonar API. " + - "Accepts an array of messages (each with a role and content) " + - "and returns a ask completion response from the Perplexity model.", - inputSchema: { - type: "object", - properties: { - messages: { - type: "array", - items: { - type: "object", - properties: { - role: { - type: "string", - description: "Role of the message (e.g., system, user, assistant)", - }, - content: { - type: "string", - description: "The content of the message", - }, - }, - required: ["role", "content"], - }, - description: "Array of conversation messages", - }, - }, - required: ["messages"], - }, - annotations: { - readOnlyHint: true, - openWorldHint: true, - }, -}; - -/** - * Definition of the Perplexity Research Tool. - * This tool performs deep research queries using the Perplexity API. - */ -const PERPLEXITY_RESEARCH_TOOL: Tool = { - name: "perplexity_research", - title: "Deep Research", - description: - "Performs deep research using the Perplexity API. " + - "Accepts an array of messages (each with a role and content) " + - "and returns a comprehensive research response with citations.", - inputSchema: { - type: "object", - properties: { - messages: { - type: "array", - items: { - type: "object", - properties: { - role: { - type: "string", - description: "Role of the message (e.g., system, user, assistant)", - }, - content: { - type: "string", - description: "The content of the message", - }, - }, - required: ["role", "content"], - }, - description: "Array of conversation messages", - }, - strip_thinking: { - type: "boolean", - description: "If true, removes ... tags and their content from the response to save context tokens. Default is false.", - }, - }, - required: ["messages"], - }, - annotations: { - readOnlyHint: true, - openWorldHint: true, - }, -}; - -/** - * Definition of the Perplexity Reason Tool. - * This tool performs reasoning queries using the Perplexity API. - */ -const PERPLEXITY_REASON_TOOL: Tool = { - name: "perplexity_reason", - title: "Advanced Reasoning", - description: - "Performs reasoning tasks using the Perplexity API. " + - "Accepts an array of messages (each with a role and content) " + - "and returns a well-reasoned response using the sonar-reasoning-pro model.", - inputSchema: { - type: "object", - properties: { - messages: { - type: "array", - items: { - type: "object", - properties: { - role: { - type: "string", - description: "Role of the message (e.g., system, user, assistant)", - }, - content: { - type: "string", - description: "The content of the message", - }, - }, - required: ["role", "content"], - }, - description: "Array of conversation messages", - }, - strip_thinking: { - type: "boolean", - description: "If true, removes ... tags and their content from the response to save context tokens. Default is false.", - }, - }, - required: ["messages"], - }, - annotations: { - readOnlyHint: true, - openWorldHint: true, - }, -}; - -/** - * Definition of the Perplexity Search Tool. - * This tool performs web search using the Perplexity Search API. - */ -const PERPLEXITY_SEARCH_TOOL: Tool = { - name: "perplexity_search", - title: "Search the Web", - description: - "Performs web search using the Perplexity Search API. " + - "Returns ranked search results with titles, URLs, snippets, and metadata. " + - "Perfect for finding up-to-date facts, news, or specific information.", - inputSchema: { - type: "object", - properties: { - query: { - type: "string", - description: "Search query string", - }, - max_results: { - type: "number", - description: "Maximum number of results to return (1-20, default: 10)", - minimum: 1, - maximum: 20, - }, - max_tokens_per_page: { - type: "number", - description: "Maximum tokens to extract per webpage (default: 1024)", - minimum: 256, - maximum: 2048, - }, - country: { - type: "string", - description: "ISO 3166-1 alpha-2 country code for regional results (e.g., 'US', 'GB')", - }, - }, - required: ["query"], - }, - annotations: { - readOnlyHint: true, - openWorldHint: true, - }, -}; - -// Retrieve the Perplexity API key from environment variables -const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; -if (!PERPLEXITY_API_KEY) { - console.error("Error: PERPLEXITY_API_KEY environment variable is required"); - process.exit(1); -} - -/** - * Gets the proxy URL from environment variables. - * Checks PERPLEXITY_PROXY, HTTPS_PROXY, HTTP_PROXY in order. - * - * @returns {string | undefined} The proxy URL if configured, undefined otherwise - */ -function getProxyUrl(): string | undefined { - return process.env.PERPLEXITY_PROXY || - process.env.HTTPS_PROXY || - process.env.HTTP_PROXY || - undefined; -} - -/** - * Creates a proxy-aware fetch function. - * Uses undici with ProxyAgent when a proxy is configured, otherwise uses native fetch. - * - * @param {string} url - The URL to fetch - * @param {RequestInit} options - Fetch options - * @returns {Promise} The fetch response - */ -async function proxyAwareFetch(url: string, options: RequestInit = {}): Promise { - const proxyUrl = getProxyUrl(); - - if (proxyUrl) { - // Use undici with ProxyAgent when proxy is configured - const proxyAgent = new ProxyAgent(proxyUrl); - const response = await undiciFetch(url, { - ...options, - dispatcher: proxyAgent, - } as any); - // Cast to native Response type for compatibility - return response as unknown as Response; - } else { - // Use native fetch when no proxy is configured - return fetch(url, options); - } -} - -/** - * Validates an array of message objects for chat completion tools. - * Ensures each message has a valid role and content field. - * - * @param {any} messages - The messages to validate - * @param {string} toolName - The name of the tool calling this validation (for error messages) - * @throws {Error} If messages is not an array or if any message is invalid - */ -function validateMessages(messages: any, toolName: string): void { - if (!Array.isArray(messages)) { - throw new Error(`Invalid arguments for ${toolName}: 'messages' must be an array`); - } - - for (let i = 0; i < messages.length; i++) { - const msg = messages[i]; - if (!msg || typeof msg !== 'object') { - throw new Error(`Invalid message at index ${i}: must be an object`); - } - if (!msg.role || typeof msg.role !== 'string') { - throw new Error(`Invalid message at index ${i}: 'role' must be a string`); - } - if (msg.content === undefined || msg.content === null || typeof msg.content !== 'string') { - throw new Error(`Invalid message at index ${i}: 'content' must be a string`); - } - } -} - -/** - * Strips thinking tokens (content within ... tags) from the response. - * This helps reduce context usage when the thinking process is not needed. - * - * @param {string} content - The content to process - * @returns {string} The content with thinking tokens removed - */ -function stripThinkingTokens(content: string): string { - return content.replace(/[\s\S]*?<\/think>/g, '').trim(); -} - -/** - * Performs a chat completion by sending a request to the Perplexity API. - * Appends citations to the returned message content if they exist. - * - * @param {Array<{ role: string; content: string }>} messages - An array of message objects. - * @param {string} model - The model to use for the completion. - * @param {boolean} stripThinking - If true, removes ... tags from the response. - * @returns {Promise} The chat completion result with appended citations. - * @throws Will throw an error if the API request fails. - */ -export async function performChatCompletion( - messages: Array<{ role: string; content: string }>, - model: string = "sonar-pro", - stripThinking: boolean = false -): Promise { - // Read timeout fresh each time to respect env var changes - const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); - - // Construct the API endpoint URL and request body - const url = new URL("https://api.perplexity.ai/chat/completions"); - const body = { - model: model, // Model identifier passed as parameter - messages: messages, - // Additional parameters can be added here if required (e.g., max_tokens, temperature, etc.) - // See the Sonar API documentation for more details: - // https://docs.perplexity.ai/api-reference/chat-completions - }; - - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); - - let response; - try { - response = await proxyAwareFetch(url.toString(), { - method: "POST", - headers: { - "Content-Type": "application/json", - "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, - }, - body: JSON.stringify(body), - signal: controller.signal, - }); - clearTimeout(timeoutId); - } catch (error) { - clearTimeout(timeoutId); - if (error instanceof Error && error.name === "AbortError") { - throw new Error(`Request timeout: Perplexity API did not respond within ${TIMEOUT_MS}ms. Consider increasing PERPLEXITY_TIMEOUT_MS.`); - } - throw new Error(`Network error while calling Perplexity API: ${error}`); - } - - // Check for non-successful HTTP status - if (!response.ok) { - let errorText; - try { - errorText = await response.text(); - } catch (parseError) { - errorText = "Unable to parse error response"; - } - throw new Error( - `Perplexity API error: ${response.status} ${response.statusText}\n${errorText}` - ); - } - - // Attempt to parse the JSON response from the API - let data; - try { - data = await response.json(); - } catch (jsonError) { - throw new Error(`Failed to parse JSON response from Perplexity API: ${jsonError}`); - } - - // Validate response structure - if (!data.choices || !Array.isArray(data.choices) || data.choices.length === 0) { - throw new Error("Invalid API response: missing or empty choices array"); - } - - const firstChoice = data.choices[0]; - if (!firstChoice.message || typeof firstChoice.message.content !== 'string') { - throw new Error("Invalid API response: missing message content"); - } - - // Directly retrieve the main message content from the response - let messageContent = firstChoice.message.content; - - // Strip thinking tokens if requested - if (stripThinking) { - messageContent = stripThinkingTokens(messageContent); - } - - // If citations are provided, append them to the message content - if (data.citations && Array.isArray(data.citations) && data.citations.length > 0) { - messageContent += "\n\nCitations:\n"; - data.citations.forEach((citation: string, index: number) => { - messageContent += `[${index + 1}] ${citation}\n`; - }); - } - - return messageContent; -} - -/** - * Formats search results from the Perplexity Search API into a readable string. - * - * @param {any} data - The search response data from the API. - * @returns {string} Formatted search results. - */ -export function formatSearchResults(data: any): string { - if (!data.results || !Array.isArray(data.results)) { - return "No search results found."; - } - - let formattedResults = `Found ${data.results.length} search results:\n\n`; - - data.results.forEach((result: any, index: number) => { - formattedResults += `${index + 1}. **${result.title}**\n`; - formattedResults += ` URL: ${result.url}\n`; - if (result.snippet) { - formattedResults += ` ${result.snippet}\n`; - } - if (result.date) { - formattedResults += ` Date: ${result.date}\n`; - } - formattedResults += `\n`; - }); - - return formattedResults; -} - -/** - * Performs a web search using the Perplexity Search API. - * - * @param {string} query - The search query string. - * @param {number} maxResults - Maximum number of results to return (1-20). - * @param {number} maxTokensPerPage - Maximum tokens to extract per webpage. - * @param {string} country - Optional ISO country code for regional results. - * @returns {Promise} The formatted search results. - * @throws Will throw an error if the API request fails. - */ -export async function performSearch( - query: string, - maxResults: number = 10, - maxTokensPerPage: number = 1024, - country?: string -): Promise { - // Read timeout fresh each time to respect env var changes - const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); - - const url = new URL("https://api.perplexity.ai/search"); - const body: any = { - query: query, - max_results: maxResults, - max_tokens_per_page: maxTokensPerPage, - }; - - if (country) { - body.country = country; - } - - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); - - let response; - try { - response = await proxyAwareFetch(url.toString(), { - method: "POST", - headers: { - "Content-Type": "application/json", - "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, - }, - body: JSON.stringify(body), - signal: controller.signal, - }); - clearTimeout(timeoutId); - } catch (error) { - clearTimeout(timeoutId); - if (error instanceof Error && error.name === "AbortError") { - throw new Error(`Request timeout: Perplexity Search API did not respond within ${TIMEOUT_MS}ms. Consider increasing PERPLEXITY_TIMEOUT_MS.`); - } - throw new Error(`Network error while calling Perplexity Search API: ${error}`); - } - - // Check for non-successful HTTP status - if (!response.ok) { - let errorText; - try { - errorText = await response.text(); - } catch (parseError) { - errorText = "Unable to parse error response"; - } - throw new Error( - `Perplexity Search API error: ${response.status} ${response.statusText}\n${errorText}` - ); - } - - let data; - try { - data = await response.json(); - } catch (jsonError) { - throw new Error(`Failed to parse JSON response from Perplexity Search API: ${jsonError}`); - } - - return formatSearchResults(data); -} - -// Initialize the server with tool metadata and capabilities -const server = new Server( - { - name: "io.github.perplexityai/mcp-server", - version: "0.4.1", - }, - { - capabilities: { - tools: {}, - }, - instructions: `You are the Perplexity MCP Server. Use these tools appropriately: - -- perplexity_search: For quick web searches when you need current information or facts. Returns ranked search results. - -- perplexity_ask: For general questions and conversational queries with real-time web search using the sonar-pro model. - -- perplexity_research: For deep, comprehensive research requiring thorough analysis using the sonar-deep-research model. Use this for complex topics that require detailed investigation. - -- perplexity_reason: For complex analytical tasks requiring advanced reasoning using the sonar-reasoning-pro model. Use this for logical problems, analysis, and decision-making. - -When using perplexity_research or perplexity_reason, consider setting strip_thinking=true to save context tokens if the reasoning process isn't needed in the final output.`, - } -); - -/** - * Registers a handler for listing available tools. - * When the client requests a list of tools, this handler returns all available Perplexity tools. - */ -server.setRequestHandler(ListToolsRequestSchema, async () => ({ - tools: [PERPLEXITY_ASK_TOOL, PERPLEXITY_RESEARCH_TOOL, PERPLEXITY_REASON_TOOL, PERPLEXITY_SEARCH_TOOL], -})); - -/** - * Registers a handler for calling a specific tool. - * Processes requests by validating input and invoking the appropriate tool. - * - * @param {object} request - The incoming tool call request. - * @returns {Promise} The response containing the tool's result or an error. - */ -server.setRequestHandler(CallToolRequestSchema, async (request) => { - try { - const { name, arguments: args } = request.params; - if (!args) { - throw new Error("No arguments provided"); - } - switch (name) { - case "perplexity_ask": { - validateMessages(args.messages, "perplexity_ask"); - const messages = args.messages as Array<{ role: string; content: string }>; - const result = await performChatCompletion(messages, "sonar-pro"); - return { - content: [{ type: "text", text: result }], - isError: false, - }; - } - case "perplexity_research": { - validateMessages(args.messages, "perplexity_research"); - const messages = args.messages as Array<{ role: string; content: string }>; - const stripThinking = typeof args.strip_thinking === "boolean" ? args.strip_thinking : false; - const result = await performChatCompletion(messages, "sonar-deep-research", stripThinking); - return { - content: [{ type: "text", text: result }], - isError: false, - }; - } - case "perplexity_reason": { - validateMessages(args.messages, "perplexity_reason"); - const messages = args.messages as Array<{ role: string; content: string }>; - const stripThinking = typeof args.strip_thinking === "boolean" ? args.strip_thinking : false; - const result = await performChatCompletion(messages, "sonar-reasoning-pro", stripThinking); - return { - content: [{ type: "text", text: result }], - isError: false, - }; - } - case "perplexity_search": { - if (typeof args.query !== "string") { - throw new Error("Invalid arguments for perplexity_search: 'query' must be a string"); - } - const { query, max_results, max_tokens_per_page, country } = args; - const maxResults = typeof max_results === "number" ? max_results : undefined; - const maxTokensPerPage = typeof max_tokens_per_page === "number" ? max_tokens_per_page : undefined; - const countryCode = typeof country === "string" ? country : undefined; - - const result = await performSearch( - query, - maxResults, - maxTokensPerPage, - countryCode - ); - return { - content: [{ type: "text", text: result }], - isError: false, - }; - } - default: - // Respond with an error if an unknown tool is requested - return { - content: [{ type: "text", text: `Unknown tool: ${name}` }], - isError: true, - }; - } - } catch (error) { - // Return error details in the response - return { - content: [ - { - type: "text", - text: `Error: ${error instanceof Error ? error.message : String(error)}`, - }, - ], - isError: true, - }; - } -}); - -/** - * Initializes and runs the server using standard I/O for communication. - * Logs an error and exits if the server fails to start. - */ -async function runServer() { - try { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error("Perplexity MCP Server running on stdio with Ask, Research, Reason, and Search tools"); - } catch (error) { - console.error("Fatal error running server:", error); - process.exit(1); - } -} - -// Start the server and catch any startup errors -runServer().catch((error) => { - console.error("Fatal error running server:", error); - process.exit(1); -}); diff --git a/package-lock.json b/package-lock.json index 1949fab..81e18d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24 +1,30 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.4.1", + "version": "0.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.4.1", + "version": "0.5.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", - "undici": "^6.20.0" + "cors": "^2.8.5", + "express": "^4.21.2", + "undici": "^6.20.0", + "zod": "^3.25.46" }, "bin": { "perplexity-mcp": "dist/index.js" }, "devDependencies": { + "@types/cors": "^2.8.17", + "@types/express": "^5.0.0", "@types/node": "^20", "@vitest/coverage-v8": "^4.0.5", "shx": "^0.4.0", + "tsx": "^4.19.4", "typescript": "^5.9.3", "vitest": "^4.0.5" }, @@ -588,6 +594,245 @@ } } }, + "node_modules/@modelcontextprotocol/sdk/node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -941,6 +1186,17 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, "node_modules/@types/chai": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", @@ -952,6 +1208,26 @@ "assertion-error": "^2.0.1" } }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/deep-eql": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", @@ -966,6 +1242,45 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/express": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.5.tgz", + "integrity": "sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", + "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.19.17", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.17.tgz", @@ -976,6 +1291,53 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, "node_modules/@vitest/coverage-v8": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.5.tgz", @@ -1120,34 +1482,13 @@ } }, "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -1186,6 +1527,12 @@ } } }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -1209,23 +1556,69 @@ } }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { - "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", - "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=18" + "node": ">= 0.8" } }, "node_modules/braces": { @@ -1290,9 +1683,9 @@ } }, "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -1311,22 +1704,19 @@ } }, "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", @@ -1381,6 +1771,16 @@ "node": ">= 0.8" } }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -1638,41 +2038,45 @@ } }, "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.0", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 18" + "node": ">= 0.10.0" }, "funding": { "type": "opencollective", @@ -1694,27 +2098,21 @@ "express": ">= 4.11" } }, - "node_modules/express/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">= 0.6" + "ms": "2.0.0" } }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1778,22 +2176,38 @@ } }, "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1804,12 +2218,12 @@ } }, "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/fsevents": { @@ -1886,6 +2300,19 @@ "node": ">=6" } }, + "node_modules/get-tsconfig": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -2204,22 +2631,19 @@ } }, "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.6" } }, "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", - "engines": { - "node": ">=18" - }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -2234,6 +2658,15 @@ "node": ">= 8" } }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -2248,6 +2681,39 @@ "node": ">=8.6" } }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -2284,9 +2750,9 @@ } }, "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -2400,14 +2866,10 @@ "license": "MIT" }, "node_modules/path-to-regexp": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" }, "node_modules/pathe": { "version": "2.0.3", @@ -2499,12 +2961,12 @@ } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -2600,6 +3062,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/reusify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", @@ -2669,6 +3141,16 @@ "node": ">= 18" } }, + "node_modules/router/node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -2730,61 +3212,66 @@ } }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { - "debug": "^4.3.5", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": ">= 18" + "node": ">= 0.8.0" } }, - "node_modules/send/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", - "engines": { - "node": ">= 0.6" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/send/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { - "node": ">= 18" + "node": ">= 0.8.0" } }, "node_modules/setprototypeof": { @@ -3099,36 +3586,34 @@ "node": ">=0.6" } }, - "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "node_modules/tsx": { + "version": "4.20.6", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", + "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", + "dev": true, "license": "MIT", "dependencies": { - "content-type": "^1.0.5", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" } }, - "node_modules/type-is/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "license": "MIT", "dependencies": { - "mime-db": "^1.54.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { "node": ">= 0.6" @@ -3173,6 +3658,15 @@ "node": ">= 0.8" } }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -3418,9 +3912,9 @@ "license": "ISC" }, "node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/package.json b/package.json index 881f525..69f8956 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.4.1", + "version": "0.5.0", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ @@ -28,7 +28,9 @@ "perplexity-mcp": "dist/index.js" }, "files": [ - "dist", + "dist/*.js", + "!dist/*.test.js", + "!dist/vitest.config.js", "README.md", ".claude-plugin" ], @@ -36,18 +38,28 @@ "build": "tsc && shx chmod +x dist/*.js", "prepare": "npm run build", "watch": "tsc --watch", + "start": "node dist/index.js", + "start:http": "PORT=8080 node dist/http.js", + "dev": "tsx src/index.ts", + "dev:http": "PORT=8080 tsx src/http.ts", "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage" }, "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", - "undici": "^6.20.0" + "cors": "^2.8.5", + "express": "^4.21.2", + "undici": "^6.20.0", + "zod": "^3.25.46" }, "devDependencies": { + "@types/cors": "^2.8.17", + "@types/express": "^5.0.0", "@types/node": "^20", "@vitest/coverage-v8": "^4.0.5", "shx": "^0.4.0", + "tsx": "^4.19.4", "typescript": "^5.9.3", "vitest": "^4.0.5" }, diff --git a/server.json b/server.json index bf13ca5..6a0b815 100644 --- a/server.json +++ b/server.json @@ -3,16 +3,23 @@ "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.4.1", + "version": "0.5.0", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.4.1", + "version": "0.5.0", "transport": { "type": "stdio" } } + ], + "remotes": [ + { + "type": "streamable-http", + "url": "https://mcp.perplexity.ai/mcp", + "description": "Hosted Perplexity MCP server with HTTP transport. Set PERPLEXITY_API_KEY environment variable." + } ] } diff --git a/smithery.yaml b/smithery.yaml new file mode 100644 index 0000000..9582cde --- /dev/null +++ b/smithery.yaml @@ -0,0 +1,7 @@ +runtime: "container" +build: + dockerfile: "Dockerfile" + dockerBuildPath: "." +startCommand: + type: "http" + diff --git a/src/http.ts b/src/http.ts new file mode 100644 index 0000000..0d2430e --- /dev/null +++ b/src/http.ts @@ -0,0 +1,136 @@ +#!/usr/bin/env node + +import express from "express"; +import cors from "cors"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import { createPerplexityServer } from "./server.js"; + +// Check for required API key +const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; +if (!PERPLEXITY_API_KEY) { + console.error("Error: PERPLEXITY_API_KEY environment variable is required"); + process.exit(1); +} + +const app = express(); +const PORT = parseInt(process.env.PORT || "8080", 10); + +// CORS configuration for browser-based MCP clients +app.use(cors({ + origin: "*", + exposedHeaders: ["Mcp-Session-Id", "mcp-protocol-version"], + allowedHeaders: ["Content-Type", "mcp-session-id"], +})); + +app.use(express.json()); + +// Create the MCP server once (reusable across requests) +const mcpServer = createPerplexityServer(); + +/** + * Map to store transports by session ID + */ +const transports = new Map(); + +/** + * MCP POST endpoint handler + * Handles client-to-server messages (requests, responses, notifications) + */ +app.post("/mcp", async (req, res) => { + try { + const sessionId = req.headers['mcp-session-id'] as string | undefined; + let transport: StreamableHTTPServerTransport; + + if (sessionId && transports.has(sessionId)) { + // Reuse existing transport for this session + transport = transports.get(sessionId)!; + } else { + // Create new transport with session support + transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: () => { + // Generate unique session ID + return `session-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`; + }, + enableJsonResponse: true, + onsessioninitialized: (newSessionId: string) => { + // Store transport when session is initialized + transports.set(newSessionId, transport); + console.error(`Session initialized: ${newSessionId}`); + }, + }); + + // Clean up when transport closes + transport.onclose = () => { + if (transport.sessionId) { + transports.delete(transport.sessionId); + console.error(`Session closed: ${transport.sessionId}`); + } + }; + + // Connect server to transport + await mcpServer.connect(transport); + } + + // Handle the request + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("Error handling MCP POST request:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } +}); + +/** + * MCP GET endpoint handler + * Opens SSE stream for server-to-client messages (notifications, requests) + */ +app.get("/mcp", async (req, res) => { + try { + const sessionId = req.headers['mcp-session-id'] as string | undefined; + console.error(`GET /mcp request - Session ID: ${sessionId}, Available sessions: ${Array.from(transports.keys()).join(', ')}`); + + if (!sessionId) { + console.error("GET /mcp: Missing session ID"); + res.status(400).send("Missing mcp-session-id header"); + return; + } + + if (!transports.has(sessionId)) { + console.error(`GET /mcp: Session not found: ${sessionId}`); + res.status(400).send(`Session not found: ${sessionId}`); + return; + } + + const transport = transports.get(sessionId)!; + console.error(`GET /mcp: Opening SSE stream for session ${sessionId}`); + await transport.handleRequest(req, res); + } catch (error) { + console.error("Error handling MCP GET request:", error); + if (!res.headersSent) { + res.status(500).send("Internal server error"); + } + } +}); + +/** + * Health check endpoint + */ +app.get("/health", (req, res) => { + res.json({ status: "ok", service: "perplexity-mcp-server" }); +}); + +/** + * Start the HTTP server + */ +app.listen(PORT, () => { + console.log(`Perplexity MCP Server listening on http://localhost:${PORT}/mcp`); +}).on("error", (error) => { + console.error("Server error:", error); + process.exit(1); +}); + diff --git a/index.test.ts b/src/index.test.ts similarity index 99% rename from index.test.ts rename to src/index.test.ts index f7b98d8..45f3eb9 100644 --- a/index.test.ts +++ b/src/index.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; -import { formatSearchResults, performChatCompletion, performSearch } from "./index.js"; +import { formatSearchResults, performChatCompletion, performSearch } from "./server.js"; describe("Perplexity MCP Server", () => { let originalFetch: typeof global.fetch; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..cf9f9d4 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,34 @@ +#!/usr/bin/env node + +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { createPerplexityServer } from "./server.js"; + +// Check for required API key +const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; +if (!PERPLEXITY_API_KEY) { + console.error("Error: PERPLEXITY_API_KEY environment variable is required"); + process.exit(1); +} + +/** + * Initializes and runs the server using standard I/O for communication. + * Logs an error and exits if the server fails to start. + */ +async function main() { + try { + const server = createPerplexityServer(); + const transport = new StdioServerTransport(); + await server.connect(transport); + console.error("Perplexity MCP Server running on stdio with Ask, Research, Reason, and Search tools"); + } catch (error) { + console.error("Fatal error running server:", error); + process.exit(1); + } +} + +// Start the server and catch any startup errors +main().catch((error) => { + console.error("Fatal error running server:", error); + process.exit(1); +}); + diff --git a/src/server.ts b/src/server.ts new file mode 100644 index 0000000..2c91c58 --- /dev/null +++ b/src/server.ts @@ -0,0 +1,449 @@ +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { z } from "zod"; +import { fetch as undiciFetch, ProxyAgent } from "undici"; + +// Retrieve the Perplexity API key from environment variables +const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; + +/** + * Gets the proxy URL from environment variables. + * Checks PERPLEXITY_PROXY, HTTPS_PROXY, HTTP_PROXY in order. + * + * @returns {string | undefined} The proxy URL if configured, undefined otherwise + */ +function getProxyUrl(): string | undefined { + return process.env.PERPLEXITY_PROXY || + process.env.HTTPS_PROXY || + process.env.HTTP_PROXY || + undefined; +} + +/** + * Creates a proxy-aware fetch function. + * Uses undici with ProxyAgent when a proxy is configured, otherwise uses native fetch. + * + * @param {string} url - The URL to fetch + * @param {RequestInit} options - Fetch options + * @returns {Promise} The fetch response + */ +async function proxyAwareFetch(url: string, options: RequestInit = {}): Promise { + const proxyUrl = getProxyUrl(); + + if (proxyUrl) { + // Use undici with ProxyAgent when proxy is configured + const proxyAgent = new ProxyAgent(proxyUrl); + const response = await undiciFetch(url, { + ...options, + dispatcher: proxyAgent, + } as any); + // Cast to native Response type for compatibility + return response as unknown as Response; + } else { + // Use native fetch when no proxy is configured + return fetch(url, options); + } +} + +/** + * Validates an array of message objects for chat completion tools. + * Ensures each message has a valid role and content field. + * + * @param {any} messages - The messages to validate + * @param {string} toolName - The name of the tool calling this validation (for error messages) + * @throws {Error} If messages is not an array or if any message is invalid + */ +function validateMessages(messages: any, toolName: string): void { + if (!Array.isArray(messages)) { + throw new Error(`Invalid arguments for ${toolName}: 'messages' must be an array`); + } + + for (let i = 0; i < messages.length; i++) { + const msg = messages[i]; + if (!msg || typeof msg !== 'object') { + throw new Error(`Invalid message at index ${i}: must be an object`); + } + if (!msg.role || typeof msg.role !== 'string') { + throw new Error(`Invalid message at index ${i}: 'role' must be a string`); + } + if (msg.content === undefined || msg.content === null || typeof msg.content !== 'string') { + throw new Error(`Invalid message at index ${i}: 'content' must be a string`); + } + } +} + +/** + * Strips thinking tokens (content within ... tags) from the response. + * This helps reduce context usage when the thinking process is not needed. + * + * @param {string} content - The content to process + * @returns {string} The content with thinking tokens removed + */ +function stripThinkingTokens(content: string): string { + return content.replace(/[\s\S]*?<\/think>/g, '').trim(); +} + +/** + * Performs a chat completion by sending a request to the Perplexity API. + * Appends citations to the returned message content if they exist. + * + * @param {Array<{ role: string; content: string }>} messages - An array of message objects. + * @param {string} model - The model to use for the completion. + * @param {boolean} stripThinking - If true, removes ... tags from the response. + * @returns {Promise} The chat completion result with appended citations. + * @throws Will throw an error if the API request fails. + */ +export async function performChatCompletion( + messages: Array<{ role: string; content: string }>, + model: string = "sonar-pro", + stripThinking: boolean = false +): Promise { + if (!PERPLEXITY_API_KEY) { + throw new Error("PERPLEXITY_API_KEY environment variable is required"); + } + + // Read timeout fresh each time to respect env var changes + const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); + + // Construct the API endpoint URL and request body + const url = new URL("https://api.perplexity.ai/chat/completions"); + const body = { + model: model, + messages: messages, + }; + + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); + + let response; + try { + response = await proxyAwareFetch(url.toString(), { + method: "POST", + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, + }, + body: JSON.stringify(body), + signal: controller.signal, + }); + clearTimeout(timeoutId); + } catch (error) { + clearTimeout(timeoutId); + if (error instanceof Error && error.name === "AbortError") { + throw new Error(`Request timeout: Perplexity API did not respond within ${TIMEOUT_MS}ms. Consider increasing PERPLEXITY_TIMEOUT_MS.`); + } + throw new Error(`Network error while calling Perplexity API: ${error}`); + } + + // Check for non-successful HTTP status + if (!response.ok) { + let errorText; + try { + errorText = await response.text(); + } catch (parseError) { + errorText = "Unable to parse error response"; + } + throw new Error( + `Perplexity API error: ${response.status} ${response.statusText}\n${errorText}` + ); + } + + // Attempt to parse the JSON response from the API + let data; + try { + data = await response.json(); + } catch (jsonError) { + throw new Error(`Failed to parse JSON response from Perplexity API: ${jsonError}`); + } + + // Validate response structure + if (!data.choices || !Array.isArray(data.choices) || data.choices.length === 0) { + throw new Error("Invalid API response: missing or empty choices array"); + } + + const firstChoice = data.choices[0]; + if (!firstChoice.message || typeof firstChoice.message.content !== 'string') { + throw new Error("Invalid API response: missing message content"); + } + + // Directly retrieve the main message content from the response + let messageContent = firstChoice.message.content; + + // Strip thinking tokens if requested + if (stripThinking) { + messageContent = stripThinkingTokens(messageContent); + } + + // If citations are provided, append them to the message content + if (data.citations && Array.isArray(data.citations) && data.citations.length > 0) { + messageContent += "\n\nCitations:\n"; + data.citations.forEach((citation: string, index: number) => { + messageContent += `[${index + 1}] ${citation}\n`; + }); + } + + return messageContent; +} + +/** + * Formats search results from the Perplexity Search API into a readable string. + * + * @param {any} data - The search response data from the API. + * @returns {string} Formatted search results. + */ +export function formatSearchResults(data: any): string { + if (!data.results || !Array.isArray(data.results)) { + return "No search results found."; + } + + let formattedResults = `Found ${data.results.length} search results:\n\n`; + + data.results.forEach((result: any, index: number) => { + formattedResults += `${index + 1}. **${result.title}**\n`; + formattedResults += ` URL: ${result.url}\n`; + if (result.snippet) { + formattedResults += ` ${result.snippet}\n`; + } + if (result.date) { + formattedResults += ` Date: ${result.date}\n`; + } + formattedResults += `\n`; + }); + + return formattedResults; +} + +/** + * Performs a web search using the Perplexity Search API. + * + * @param {string} query - The search query string. + * @param {number} maxResults - Maximum number of results to return (1-20). + * @param {number} maxTokensPerPage - Maximum tokens to extract per webpage. + * @param {string} country - Optional ISO country code for regional results. + * @returns {Promise} The formatted search results. + * @throws Will throw an error if the API request fails. + */ +export async function performSearch( + query: string, + maxResults: number = 10, + maxTokensPerPage: number = 1024, + country?: string +): Promise { + if (!PERPLEXITY_API_KEY) { + throw new Error("PERPLEXITY_API_KEY environment variable is required"); + } + + // Read timeout fresh each time to respect env var changes + const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); + + const url = new URL("https://api.perplexity.ai/search"); + const body: any = { + query: query, + max_results: maxResults, + max_tokens_per_page: maxTokensPerPage, + }; + + if (country) { + body.country = country; + } + + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); + + let response; + try { + response = await proxyAwareFetch(url.toString(), { + method: "POST", + headers: { + "Content-Type": "application/json", + "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, + }, + body: JSON.stringify(body), + signal: controller.signal, + }); + clearTimeout(timeoutId); + } catch (error) { + clearTimeout(timeoutId); + if (error instanceof Error && error.name === "AbortError") { + throw new Error(`Request timeout: Perplexity Search API did not respond within ${TIMEOUT_MS}ms. Consider increasing PERPLEXITY_TIMEOUT_MS.`); + } + throw new Error(`Network error while calling Perplexity Search API: ${error}`); + } + + // Check for non-successful HTTP status + if (!response.ok) { + let errorText; + try { + errorText = await response.text(); + } catch (parseError) { + errorText = "Unable to parse error response"; + } + throw new Error( + `Perplexity Search API error: ${response.status} ${response.statusText}\n${errorText}` + ); + } + + let data; + try { + data = await response.json(); + } catch (jsonError) { + throw new Error(`Failed to parse JSON response from Perplexity Search API: ${jsonError}`); + } + + return formatSearchResults(data); +} + +/** + * Creates and configures the Perplexity MCP server with all tools. + * This factory function is transport-agnostic and returns a configured server instance. + * + * @returns The configured MCP server instance + */ +export function createPerplexityServer() { + const server = new McpServer({ + name: "io.github.perplexityai/mcp-server", + version: "0.5.0", + }); + + // Register perplexity_ask tool + server.registerTool( + "perplexity_ask", + { + title: "Ask Perplexity", + description: "Engages in a conversation using the Sonar API. " + + "Accepts an array of messages (each with a role and content) " + + "and returns a chat completion response from the Perplexity model.", + inputSchema: { + messages: z.array(z.object({ + role: z.string().describe("Role of the message (e.g., system, user, assistant)"), + content: z.string().describe("The content of the message"), + })).describe("Array of conversation messages"), + }, + outputSchema: { + response: z.string().describe("The chat completion response"), + }, + annotations: { + readOnlyHint: true, + openWorldHint: true, + }, + }, + async ({ messages }) => { + validateMessages(messages, "perplexity_ask"); + const result = await performChatCompletion(messages, "sonar-pro"); + return { + content: [{ type: "text", text: result }], + structuredContent: { response: result }, + }; + } + ); + + // Register perplexity_research tool + server.registerTool( + "perplexity_research", + { + title: "Deep Research", + description: "Performs deep research using the Perplexity API. " + + "Accepts an array of messages (each with a role and content) " + + "and returns a comprehensive research response with citations.", + inputSchema: { + messages: z.array(z.object({ + role: z.string().describe("Role of the message (e.g., system, user, assistant)"), + content: z.string().describe("The content of the message"), + })).describe("Array of conversation messages"), + strip_thinking: z.boolean().optional() + .describe("If true, removes ... tags and their content from the response to save context tokens. Default is false."), + }, + outputSchema: { + response: z.string().describe("The research response"), + }, + annotations: { + readOnlyHint: true, + openWorldHint: true, + }, + }, + async ({ messages, strip_thinking }) => { + validateMessages(messages, "perplexity_research"); + const stripThinking = typeof strip_thinking === "boolean" ? strip_thinking : false; + const result = await performChatCompletion(messages, "sonar-deep-research", stripThinking); + return { + content: [{ type: "text", text: result }], + structuredContent: { response: result }, + }; + } + ); + + // Register perplexity_reason tool + server.registerTool( + "perplexity_reason", + { + title: "Advanced Reasoning", + description: "Performs reasoning tasks using the Perplexity API. " + + "Accepts an array of messages (each with a role and content) " + + "and returns a well-reasoned response using the sonar-reasoning-pro model.", + inputSchema: { + messages: z.array(z.object({ + role: z.string().describe("Role of the message (e.g., system, user, assistant)"), + content: z.string().describe("The content of the message"), + })).describe("Array of conversation messages"), + strip_thinking: z.boolean().optional() + .describe("If true, removes ... tags and their content from the response to save context tokens. Default is false."), + }, + outputSchema: { + response: z.string().describe("The reasoning response"), + }, + annotations: { + readOnlyHint: true, + openWorldHint: true, + }, + }, + async ({ messages, strip_thinking }) => { + validateMessages(messages, "perplexity_reason"); + const stripThinking = typeof strip_thinking === "boolean" ? strip_thinking : false; + const result = await performChatCompletion(messages, "sonar-reasoning-pro", stripThinking); + return { + content: [{ type: "text", text: result }], + structuredContent: { response: result }, + }; + } + ); + + // Register perplexity_search tool + server.registerTool( + "perplexity_search", + { + title: "Search the Web", + description: "Performs web search using the Perplexity Search API. " + + "Returns ranked search results with titles, URLs, snippets, and metadata. " + + "Perfect for finding up-to-date facts, news, or specific information.", + inputSchema: { + query: z.string().describe("Search query string"), + max_results: z.number().min(1).max(20).optional() + .describe("Maximum number of results to return (1-20, default: 10)"), + max_tokens_per_page: z.number().min(256).max(2048).optional() + .describe("Maximum tokens to extract per webpage (default: 1024)"), + country: z.string().optional() + .describe("ISO 3166-1 alpha-2 country code for regional results (e.g., 'US', 'GB')"), + }, + outputSchema: { + results: z.string().describe("Formatted search results"), + }, + annotations: { + readOnlyHint: true, + openWorldHint: true, + }, + }, + async ({ query, max_results, max_tokens_per_page, country }) => { + const maxResults = typeof max_results === "number" ? max_results : 10; + const maxTokensPerPage = typeof max_tokens_per_page === "number" ? max_tokens_per_page : 1024; + const countryCode = typeof country === "string" ? country : undefined; + + const result = await performSearch(query, maxResults, maxTokensPerPage, countryCode); + return { + content: [{ type: "text", text: result }], + structuredContent: { results: result }, + }; + } + ); + + return server.server; +} + diff --git a/src/transport.test.ts b/src/transport.test.ts new file mode 100644 index 0000000..165d7f8 --- /dev/null +++ b/src/transport.test.ts @@ -0,0 +1,366 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; +import { createPerplexityServer } from "./server.js"; +import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; +import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; +import express from "express"; +import cors from "cors"; +import { Server } from "http"; + +describe("Transport Integration Tests", () => { + let originalFetch: typeof global.fetch; + let originalEnv: NodeJS.ProcessEnv; + + beforeEach(() => { + originalFetch = global.fetch; + originalEnv = { ...process.env }; + process.env.PERPLEXITY_API_KEY = "test-api-key"; + }); + + afterEach(() => { + global.fetch = originalFetch; + process.env = originalEnv; + vi.restoreAllMocks(); + }); + + describe("Server Factory", () => { + it("should create a server with all tools registered", () => { + const server = createPerplexityServer(); + + expect(server).toBeDefined(); + // The server should be the underlying Server instance from McpServer + expect(typeof server.connect).toBe("function"); + expect(typeof server.close).toBe("function"); + }); + + it("should fail if PERPLEXITY_API_KEY is not set", () => { + delete process.env.PERPLEXITY_API_KEY; + + // The server creation itself doesn't fail, but tool calls should fail + const server = createPerplexityServer(); + expect(server).toBeDefined(); + }); + }); + + describe("STDIO Transport", () => { + it("should connect successfully to STDIO transport", async () => { + const server = createPerplexityServer(); + const transport = new StdioServerTransport(); + + // Mock the transport connection + const connectSpy = vi.spyOn(transport, 'start').mockResolvedValue(undefined); + const closeSpy = vi.spyOn(transport, 'close').mockImplementation(() => Promise.resolve()); + + await server.connect(transport); + + expect(connectSpy).toHaveBeenCalled(); + + // Clean up + transport.close(); + server.close(); + }); + + it("should handle STDIO transport errors gracefully", async () => { + const server = createPerplexityServer(); + const transport = new StdioServerTransport(); + + // Mock transport to throw error + vi.spyOn(transport, 'start').mockRejectedValue(new Error("Transport error")); + + await expect(server.connect(transport)).rejects.toThrow("Transport error"); + + server.close(); + }); + }); + + describe("HTTP Transport", () => { + let httpServer: Server; + let app: express.Application; + + beforeEach(() => { + app = express(); + app.use(cors({ + origin: "*", + exposedHeaders: ["Mcp-Session-Id", "mcp-protocol-version"], + allowedHeaders: ["Content-Type", "mcp-session-id"], + })); + app.use(express.json()); + }); + + afterEach(async () => { + if (httpServer) { + await new Promise((resolve) => { + httpServer.close(() => resolve()); + }); + } + }); + + it("should handle HTTP MCP requests with real transport", async () => { + // Set up proper MCP endpoint with real transport + app.post("/mcp", async (req, res) => { + try { + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + enableJsonResponse: true, + }); + + res.on("close", () => { + transport.close(); + }); + + const server = createPerplexityServer(); + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("Error handling MCP request:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + httpServer = app.listen(0); + const address = httpServer.address(); + const port = typeof address === 'object' && address ? address.port : 3000; + + // Make a real MCP tools/list request + const response = await fetch(`http://localhost:${port}/mcp`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "Accept": "application/json, text/event-stream", + }, + body: JSON.stringify({ + jsonrpc: "2.0", + id: 1, + method: "tools/list", + params: {} + }), + }); + + expect(response.ok).toBe(true); + const data = await response.json(); + + // Verify proper MCP response structure + expect(data.jsonrpc).toBe("2.0"); + expect(data.id).toBe(1); + expect(data.result).toBeDefined(); + expect(data.result.tools).toBeDefined(); + expect(data.result.tools).toHaveLength(4); + + // Verify all four tools are present + const toolNames = data.result.tools.map((t: any) => t.name); + expect(toolNames).toContain("perplexity_ask"); + expect(toolNames).toContain("perplexity_research"); + expect(toolNames).toContain("perplexity_reason"); + expect(toolNames).toContain("perplexity_search"); + + // Verify tool schema structure + expect(data.result.tools[0].inputSchema).toBeDefined(); + expect(data.result.tools[0].description).toBeDefined(); + }); + + it("should handle tool calls via HTTP with real transport", async () => { + // This test verifies the HTTP transport layer works correctly + // Tool execution logic is already tested in index.test.ts + + // Set up proper MCP endpoint with real transport + app.post("/mcp", async (req, res) => { + try { + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + enableJsonResponse: true, + }); + + res.on("close", () => { + transport.close(); + }); + + const server = createPerplexityServer(); + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + console.error("Error handling tool call:", error); + if (!res.headersSent) { + res.status(500).json({ + jsonrpc: "2.0", + error: { code: -32603, message: "Internal server error" }, + id: null, + }); + } + } + }); + + httpServer = app.listen(0); + const address = httpServer.address(); + const port = typeof address === 'object' && address ? address.port : 3000; + + // Test with an invalid tool call to verify error handling + const response = await fetch(`http://localhost:${port}/mcp`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "Accept": "application/json, text/event-stream", + }, + body: JSON.stringify({ + jsonrpc: "2.0", + id: 2, + method: "tools/call", + params: { + name: "nonexistent_tool", + arguments: {} + } + }), + }); + + expect(response.ok).toBe(true); // MCP errors are 200 OK with error in body + const data = await response.json(); + + // Verify proper MCP error response structure + expect(data).toBeDefined(); + expect(data.jsonrpc).toBe("2.0"); + expect(data.id).toBe(2); + + // McpServer returns tool errors as result.isError, not top-level error + expect(data.result).toBeDefined(); + expect(data.result.isError).toBe(true); + expect(data.result.content[0].text).toContain("not found"); + }); + + it("should handle HTTP errors properly", async () => { + app.post("/mcp", async (req, res) => { + res.status(400).json({ + jsonrpc: "2.0", + error: { code: -32600, message: "Invalid Request" }, + id: null, + }); + }); + + httpServer = app.listen(0); + const address = httpServer.address(); + const port = typeof address === 'object' && address ? address.port : 3000; + + const response = await fetch(`http://localhost:${port}/mcp`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "Accept": "application/json, text/event-stream", + }, + body: JSON.stringify({ + jsonrpc: "2.0", + id: 1, + method: "invalid/method", + params: {} + }), + }); + + expect(response.status).toBe(400); + const data = await response.json(); + expect(data.error.message).toBe("Invalid Request"); + }); + + it("should require proper Accept headers", async () => { + app.post("/mcp", async (req, res) => { + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + enableJsonResponse: true, + }); + + try { + const server = createPerplexityServer(); + await server.connect(transport); + await transport.handleRequest(req, res, req.body); + } catch (error) { + res.status(406).json({ + jsonrpc: "2.0", + error: { code: -32000, message: "Not Acceptable" }, + id: null, + }); + } + }); + + httpServer = app.listen(0); + const address = httpServer.address(); + const port = typeof address === 'object' && address ? address.port : 3000; + + // Test without proper Accept header + const response = await fetch(`http://localhost:${port}/mcp`, { + method: "POST", + headers: { + "Content-Type": "application/json", + // Missing Accept header + }, + body: JSON.stringify({ + jsonrpc: "2.0", + id: 1, + method: "tools/list", + params: {} + }), + }); + + expect(response.status).toBe(406); + }); + }); + + describe("Transport Comparison", () => { + it("should produce identical results for both transports", async () => { + const mockResponse = { + choices: [{ message: { content: "Identical response" } }] + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + + // Test STDIO (we can't easily test the actual transport, but we can test the server) + const server1 = createPerplexityServer(); + const server2 = createPerplexityServer(); + + // Both should be identical server instances with same capabilities + expect(server1).toBeDefined(); + expect(server2).toBeDefined(); + + // Clean up + server1.close(); + server2.close(); + }); + }); + + describe("Health Check", () => { + let healthApp: express.Application; + let healthHttpServer: Server; + + beforeEach(() => { + healthApp = express(); + }); + + afterEach(async () => { + if (healthHttpServer) { + await new Promise((resolve) => { + healthHttpServer.close(() => resolve()); + }); + } + }); + + it("should provide health check endpoint for HTTP mode", async () => { + healthApp.get("/health", (req: express.Request, res: express.Response) => { + res.json({ status: "ok", service: "perplexity-mcp-server" }); + }); + + healthHttpServer = healthApp.listen(0); + const address = healthHttpServer.address(); + const port = typeof address === 'object' && address ? address.port : 3000; + + const response = await fetch(`http://localhost:${port}/health`); + expect(response.ok).toBe(true); + + const data = await response.json(); + expect(data.status).toBe("ok"); + expect(data.service).toBe("perplexity-mcp-server"); + }); + }); +}); diff --git a/tsconfig.json b/tsconfig.json index ba5c7b7..190e48e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,9 @@ { "compilerOptions": { - "target": "ES2015", + "target": "ES2020", "module": "ESNext", "outDir": "./dist", - "rootDir": ".", + "rootDir": "./src", "strict": true, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, @@ -11,6 +11,6 @@ "moduleResolution": "node" }, "include": [ - "./**/*.ts" + "src/**/*.ts" ] } From 6981365d1f2a29ced704e6425403dffc26bcff78 Mon Sep 17 00:00:00 2001 From: Kesku <62210496+kesku@users.noreply.github.com> Date: Mon, 10 Nov 2025 18:27:03 +0000 Subject: [PATCH 36/84] Update README Claude Code setup updated order --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 32cf50c..92aef85 100644 --- a/README.md +++ b/README.md @@ -38,9 +38,15 @@ Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Pe #### Option 1: Install via Plugin (Recommended) -The easiest way to get started with Perplexity in Claude Code: - +The easiest way to get started with Perplexity in Claude Code, set your API key: ```bash +export PERPLEXITY_API_KEY="your_key_here" +``` +Then: +```bash +# Open Claude Code +claude + # Add the Perplexity marketplace /plugin marketplace add perplexityai/modelcontextprotocol @@ -48,11 +54,6 @@ The easiest way to get started with Perplexity in Claude Code: /plugin install perplexity ``` -Then set your API key: -```bash -export PERPLEXITY_API_KEY="your_key_here" -``` - #### Option 2: Manual Configuration Run in your terminal: From d6e17608e8d3c7b415ed6600c8f26478a3205716 Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 19 Nov 2025 16:54:50 +0000 Subject: [PATCH 37/84] HTTP transport security per MCP spec --- README.md | 11 ++++++++++- package.json | 6 ++++-- src/http.ts | 24 +++++++++++++++++++++--- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 53891b0..2d3e8a2 100644 --- a/README.md +++ b/README.md @@ -172,6 +172,15 @@ If you'd rather use the standard variables, we support `HTTPS_PROXY` and `HTTP_P For cloud or shared deployments, you can run the server in HTTP mode: +#### Environment Variables + +The HTTP server supports these configuration options: + +- **`PORT`** - HTTP server port (default: `8080`) +- **`BIND_ADDRESS`** - Network interface to bind to (default: `127.0.0.1` for local, use `0.0.0.0` for hosted) +- **`ALLOWED_ORIGINS`** - Comma-separated list of allowed CORS origins (default: `http://localhost:3000,http://127.0.0.1:3000`, use `*` for public service) +- **`PERPLEXITY_API_KEY`** - Your Perplexity API key (required) + #### Using Docker ```bash @@ -186,7 +195,7 @@ The server will be accessible at `http://localhost:8080/mcp` ```bash npm install npm run build -PORT=8080 npm run start:http +npm run start:http ``` Connect your MCP client to: `http://localhost:8080/mcp` diff --git a/package.json b/package.json index 69f8956..08b1afb 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,11 @@ "prepare": "npm run build", "watch": "tsc --watch", "start": "node dist/index.js", - "start:http": "PORT=8080 node dist/http.js", + "start:http": "node dist/http.js", + "start:http:public": "BIND_ADDRESS=0.0.0.0 ALLOWED_ORIGINS=* node dist/http.js", "dev": "tsx src/index.ts", - "dev:http": "PORT=8080 tsx src/http.ts", + "dev:http": "tsx src/http.ts", + "dev:http:public": "BIND_ADDRESS=0.0.0.0 ALLOWED_ORIGINS=* tsx src/http.ts", "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage" diff --git a/src/http.ts b/src/http.ts index 0d2430e..986f024 100644 --- a/src/http.ts +++ b/src/http.ts @@ -14,10 +14,27 @@ if (!PERPLEXITY_API_KEY) { const app = express(); const PORT = parseInt(process.env.PORT || "8080", 10); +const BIND_ADDRESS = process.env.BIND_ADDRESS || "127.0.0.1"; +const ALLOWED_ORIGINS = process.env.ALLOWED_ORIGINS?.split(",") || [ + "http://localhost:3000", + "http://127.0.0.1:3000", +]; // CORS configuration for browser-based MCP clients app.use(cors({ - origin: "*", + origin: (origin, callback) => { + if (!origin) return callback(null, true); + + if (ALLOWED_ORIGINS.includes("*")) { + return callback(null, true); + } + + if (ALLOWED_ORIGINS.includes(origin)) { + callback(null, true); + } else { + callback(new Error(`Origin ${origin} not allowed by CORS`)); + } + }, exposedHeaders: ["Mcp-Session-Id", "mcp-protocol-version"], allowedHeaders: ["Content-Type", "mcp-session-id"], })); @@ -127,8 +144,9 @@ app.get("/health", (req, res) => { /** * Start the HTTP server */ -app.listen(PORT, () => { - console.log(`Perplexity MCP Server listening on http://localhost:${PORT}/mcp`); +app.listen(PORT, BIND_ADDRESS, () => { + console.log(`Perplexity MCP Server listening on http://${BIND_ADDRESS}:${PORT}/mcp`); + console.log(`Allowed origins: ${ALLOWED_ORIGINS.join(", ")}`); }).on("error", (error) => { console.error("Server error:", error); process.exit(1); From 31c148b98279af45098dd66789f8f1d5080e95ff Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 19 Nov 2025 17:43:53 +0000 Subject: [PATCH 38/84] Refactor endpoint handling with simplified session management --- src/http.ts | 87 ++++++++--------------------------------------------- 1 file changed, 13 insertions(+), 74 deletions(-) diff --git a/src/http.ts b/src/http.ts index 986f024..b759a2c 100644 --- a/src/http.ts +++ b/src/http.ts @@ -41,57 +41,28 @@ app.use(cors({ app.use(express.json()); -// Create the MCP server once (reusable across requests) const mcpServer = createPerplexityServer(); /** - * Map to store transports by session ID + * POST: client-to-server messages (requests, responses, notifications) + * GET: SSE stream for server-to-client messages (notifications, requests) */ -const transports = new Map(); - -/** - * MCP POST endpoint handler - * Handles client-to-server messages (requests, responses, notifications) - */ -app.post("/mcp", async (req, res) => { +app.all("/mcp", async (req, res) => { try { - const sessionId = req.headers['mcp-session-id'] as string | undefined; - let transport: StreamableHTTPServerTransport; - - if (sessionId && transports.has(sessionId)) { - // Reuse existing transport for this session - transport = transports.get(sessionId)!; - } else { - // Create new transport with session support - transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: () => { - // Generate unique session ID - return `session-${Date.now()}-${Math.random().toString(36).substring(2, 15)}`; - }, - enableJsonResponse: true, - onsessioninitialized: (newSessionId: string) => { - // Store transport when session is initialized - transports.set(newSessionId, transport); - console.error(`Session initialized: ${newSessionId}`); - }, - }); + const transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + enableJsonResponse: true, + }); - // Clean up when transport closes - transport.onclose = () => { - if (transport.sessionId) { - transports.delete(transport.sessionId); - console.error(`Session closed: ${transport.sessionId}`); - } - }; + res.on('close', () => { + transport.close(); + }); - // Connect server to transport - await mcpServer.connect(transport); - } - - // Handle the request + await mcpServer.connect(transport); + await transport.handleRequest(req, res, req.body); } catch (error) { - console.error("Error handling MCP POST request:", error); + console.error("Error handling MCP request:", error); if (!res.headersSent) { res.status(500).json({ jsonrpc: "2.0", @@ -102,38 +73,6 @@ app.post("/mcp", async (req, res) => { } }); -/** - * MCP GET endpoint handler - * Opens SSE stream for server-to-client messages (notifications, requests) - */ -app.get("/mcp", async (req, res) => { - try { - const sessionId = req.headers['mcp-session-id'] as string | undefined; - console.error(`GET /mcp request - Session ID: ${sessionId}, Available sessions: ${Array.from(transports.keys()).join(', ')}`); - - if (!sessionId) { - console.error("GET /mcp: Missing session ID"); - res.status(400).send("Missing mcp-session-id header"); - return; - } - - if (!transports.has(sessionId)) { - console.error(`GET /mcp: Session not found: ${sessionId}`); - res.status(400).send(`Session not found: ${sessionId}`); - return; - } - - const transport = transports.get(sessionId)!; - console.error(`GET /mcp: Opening SSE stream for session ${sessionId}`); - await transport.handleRequest(req, res); - } catch (error) { - console.error("Error handling MCP GET request:", error); - if (!res.headersSent) { - res.status(500).send("Internal server error"); - } - } -}); - /** * Health check endpoint */ From 69620607344883afd09dd5b5fd617d06da9f9d95 Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 21 Nov 2025 14:10:04 +0000 Subject: [PATCH 39/84] Remove console message from server startup --- src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index cf9f9d4..7bdc80c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -19,7 +19,6 @@ async function main() { const server = createPerplexityServer(); const transport = new StdioServerTransport(); await server.connect(transport); - console.error("Perplexity MCP Server running on stdio with Ask, Research, Reason, and Search tools"); } catch (error) { console.error("Fatal error running server:", error); process.exit(1); From af6b4757ab50266b471e9655a65919a3751db27a Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 21 Nov 2025 14:12:17 +0000 Subject: [PATCH 40/84] bump version --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/server.ts | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 00815ab..237b8e0 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.5.0" + "version": "0.5.1" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.5.0", + "version": "0.5.1", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index 81e18d4..67f1ce1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.5.0", + "version": "0.5.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.5.0", + "version": "0.5.1", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 08b1afb..4332777 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.5.0", + "version": "0.5.1", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 6a0b815..05f3c63 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.5.0", + "version": "0.5.1", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.5.0", + "version": "0.5.1", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index 2c91c58..23d13d3 100644 --- a/src/server.ts +++ b/src/server.ts @@ -301,7 +301,7 @@ export async function performSearch( export function createPerplexityServer() { const server = new McpServer({ name: "io.github.perplexityai/mcp-server", - version: "0.5.0", + version: "0.5.1", }); // Register perplexity_ask tool From 2af24c0f7d17be50a796f3a1eaa088953f06d2d6 Mon Sep 17 00:00:00 2001 From: Kesku <62210496+kesku@users.noreply.github.com> Date: Mon, 24 Nov 2025 19:51:02 +0000 Subject: [PATCH 41/84] Update installation links --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d86386e..ae7f104 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Perplexity API Platform MCP Server -[![Install in Cursor](https://custom-icon-badges.demolab.com/badge/Install_in_Cursor-000000?style=for-the-badge&logo=cursor-ai-white)](https://cursor.com/en/install-mcp?name=perplexity&config=eyJ0eXBlIjoic3RkaW8iLCJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBwZXJwbGV4aXR5LWFpL21jcC1zZXJ2ZXIiXX0=) +[![Install in Cursor](https://custom-icon-badges.demolab.com/badge/Install_in_Cursor-000000?style=for-the-badge&logo=cursor-ai-white)](https://cursor.com/en/install-mcp?name=perplexity&config=eyJ0eXBlIjoic3RkaW8iLCJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBwZXJwbGV4aXR5LWFpL21jcC1zZXJ2ZXIiXSwiZW52Ijp7IlBFUlBMRVhJVFlfQVBJX0tFWSI6IiJ9fQ==)   -[![Install in VS Code](https://custom-icon-badges.demolab.com/badge/Install_in_VS_Code-007ACC?style=for-the-badge&logo=vsc&logoColor=white)](https://vscode.dev/redirect/mcp/install?name=perplexity&config=%7B%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40perplexity-ai%2Fmcp-server%22%5D%7D) +[![Install in VS Code](https://custom-icon-badges.demolab.com/badge/Install_in_VS_Code-007ACC?style=for-the-badge&logo=vsc&logoColor=white)](vscode:mcp/install?%7B%22name%22%3A%22perplexity%22%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%20%40perplexity-ai%2Fmcp-server%22%5D%2C%22env%22%3A%7B%22PERPLEXITY_API_KEY%22%3A%22%22%7D%7D)   [![npm version](https://img.shields.io/npm/v/%40perplexity-ai%2Fmcp-server?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/@perplexity-ai/mcp-server) From 3fbcbc060a302a8501850c04f52d385c456ffcbe Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 24 Nov 2025 19:53:06 +0000 Subject: [PATCH 42/84] Update VS Code installation link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ae7f104..ca4db24 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Install in Cursor](https://custom-icon-badges.demolab.com/badge/Install_in_Cursor-000000?style=for-the-badge&logo=cursor-ai-white)](https://cursor.com/en/install-mcp?name=perplexity&config=eyJ0eXBlIjoic3RkaW8iLCJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBwZXJwbGV4aXR5LWFpL21jcC1zZXJ2ZXIiXSwiZW52Ijp7IlBFUlBMRVhJVFlfQVBJX0tFWSI6IiJ9fQ==)   -[![Install in VS Code](https://custom-icon-badges.demolab.com/badge/Install_in_VS_Code-007ACC?style=for-the-badge&logo=vsc&logoColor=white)](vscode:mcp/install?%7B%22name%22%3A%22perplexity%22%2C%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%20%40perplexity-ai%2Fmcp-server%22%5D%2C%22env%22%3A%7B%22PERPLEXITY_API_KEY%22%3A%22%22%7D%7D) +[![Install in VS Code](https://custom-icon-badges.demolab.com/badge/Install_in_VS_Code-007ACC?style=for-the-badge&logo=vsc&logoColor=white)](https://vscode.dev/redirect/mcp/install?name=perplexity&config=%7B%22type%22%3A%22stdio%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40perplexity-ai%2Fmcp-server%22%5D%2C%22env%22%3A%7B%22PERPLEXITY_API_KEY%22%3A%22%22%7D%7D)   [![npm version](https://img.shields.io/npm/v/%40perplexity-ai%2Fmcp-server?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/@perplexity-ai/mcp-server) From c016977a1843aa4dc3cf37ef6ac18085b355564e Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 24 Nov 2025 19:55:58 +0000 Subject: [PATCH 43/84] separate cursor and vscode installation instructions --- README.md | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ca4db24..1cd1f9b 100644 --- a/README.md +++ b/README.md @@ -81,9 +81,9 @@ Or add to your `claude.json`: } ``` -### Cursor / VS Code +### Cursor -Add to your `mcp.json` (Cursor) or `.vscode/mcp.json` (VS Code): +Add to your `mcp.json` (Cursor): ```json { @@ -92,14 +92,35 @@ Add to your `mcp.json` (Cursor) or `.vscode/mcp.json` (VS Code): "command": "npx", "args": ["-y", "@perplexity-ai/mcp-server"], "env": { - "PERPLEXITY_API_KEY": "your_key_here", - "PERPLEXITY_TIMEOUT_MS": "600000" + "PERPLEXITY_API_KEY": "your_key_here" } } } } ``` +### VS Code + +Add to your `.vscode/mcp.json` (VS Code): + +```json +{ + "servers": { + "perplexity": { + "type": "stdio", + "command": "npx", + "args": [ + "-y", + "@perplexity-ai/mcp-server" + ], + "env": { + "PERPLEXITY_API_KEY": "your_key_here" + } + } + } +} +``` + Or use the one-click install badges at the top of this README. ### Codex From b35b75337e1aa5d413a2437921212f1151301100 Mon Sep 17 00:00:00 2001 From: Ompragash Viswanathan Date: Thu, 27 Nov 2025 11:50:43 +0530 Subject: [PATCH 44/84] feat: improve TypeScript type safety and add structured logging --- README.md | 1 + src/http.ts | 11 +-- src/index.test.ts | 4 +- src/logger.ts | 85 +++++++++++++++++++ src/server.test.ts | 187 ++++++++++++++++++++++++++++++++++++++++++ src/server.ts | 58 +++++++------ src/transport.test.ts | 2 +- src/types.ts | 74 +++++++++++++++++ 8 files changed, 388 insertions(+), 34 deletions(-) create mode 100644 src/logger.ts create mode 100644 src/server.test.ts create mode 100644 src/types.ts diff --git a/README.md b/README.md index 1cd1f9b..41b7df2 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Pe 1. Get your Perplexity API Key from the [API Portal](https://www.perplexity.ai/account/api/group) 2. Set it as an environment variable: `PERPLEXITY_API_KEY=your_key_here` 3. (Optional) Set a timeout for requests: `PERPLEXITY_TIMEOUT_MS=600000`. The default is 5 minutes. +4. (Optional) Set log level for debugging: `PERPLEXITY_LOG_LEVEL=DEBUG|INFO|WARN|ERROR`. The default is ERROR. ### Claude Code diff --git a/src/http.ts b/src/http.ts index b759a2c..fb3a3f2 100644 --- a/src/http.ts +++ b/src/http.ts @@ -4,11 +4,12 @@ import express from "express"; import cors from "cors"; import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js"; import { createPerplexityServer } from "./server.js"; +import { logger } from "./logger.js"; // Check for required API key const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; if (!PERPLEXITY_API_KEY) { - console.error("Error: PERPLEXITY_API_KEY environment variable is required"); + logger.error("PERPLEXITY_API_KEY environment variable is required"); process.exit(1); } @@ -62,7 +63,7 @@ app.all("/mcp", async (req, res) => { await transport.handleRequest(req, res, req.body); } catch (error) { - console.error("Error handling MCP request:", error); + logger.error("Error handling MCP request", { error: String(error) }); if (!res.headersSent) { res.status(500).json({ jsonrpc: "2.0", @@ -84,10 +85,10 @@ app.get("/health", (req, res) => { * Start the HTTP server */ app.listen(PORT, BIND_ADDRESS, () => { - console.log(`Perplexity MCP Server listening on http://${BIND_ADDRESS}:${PORT}/mcp`); - console.log(`Allowed origins: ${ALLOWED_ORIGINS.join(", ")}`); + logger.info(`Perplexity MCP Server listening on http://${BIND_ADDRESS}:${PORT}/mcp`); + logger.info(`Allowed origins: ${ALLOWED_ORIGINS.join(", ")}`); }).on("error", (error) => { - console.error("Server error:", error); + logger.error("Server error", { error: String(error) }); process.exit(1); }); diff --git a/src/index.test.ts b/src/index.test.ts index 45f3eb9..31c6691 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -48,7 +48,7 @@ describe("Perplexity MCP Server", () => { }); it("should handle missing results array", () => { - const mockData = {}; + const mockData = {} as any; const formatted = formatSearchResults(mockData); expect(formatted).toBe("No search results found."); }); @@ -588,7 +588,7 @@ describe("Perplexity MCP Server", () => { { title: null, url: "https://example.com", snippet: undefined }, { title: "Valid", url: null, snippet: "snippet", date: undefined }, ], - }; + } as any; const formatted = formatSearchResults(mockData); diff --git a/src/logger.ts b/src/logger.ts new file mode 100644 index 0000000..a0ad805 --- /dev/null +++ b/src/logger.ts @@ -0,0 +1,85 @@ +/** + * Simple structured logger for the Perplexity MCP Server + * Outputs to stderr to avoid interfering with STDIO transport + */ + +export enum LogLevel { + DEBUG = 0, + INFO = 1, + WARN = 2, + ERROR = 3, +} + +const LOG_LEVEL_NAMES: Record = { + [LogLevel.DEBUG]: "DEBUG", + [LogLevel.INFO]: "INFO", + [LogLevel.WARN]: "WARN", + [LogLevel.ERROR]: "ERROR", +}; + +/** + * Gets the configured log level from environment variable + * Defaults to ERROR to minimize noise in production + */ +function getLogLevel(): LogLevel { + const level = process.env.PERPLEXITY_LOG_LEVEL?.toUpperCase(); + switch (level) { + case "DEBUG": + return LogLevel.DEBUG; + case "INFO": + return LogLevel.INFO; + case "WARN": + return LogLevel.WARN; + case "ERROR": + return LogLevel.ERROR; + default: + return LogLevel.ERROR; + } +} + +const currentLogLevel = getLogLevel(); + +/** + * Formats a log message with timestamp and level + */ +function formatMessage(level: LogLevel, message: string, meta?: Record): string { + const timestamp = new Date().toISOString(); + const levelName = LOG_LEVEL_NAMES[level]; + + if (meta && Object.keys(meta).length > 0) { + return `[${timestamp}] ${levelName}: ${message} ${JSON.stringify(meta)}`; + } + + return `[${timestamp}] ${levelName}: ${message}`; +} + +/** + * Logs a message if the configured log level allows it + */ +function log(level: LogLevel, message: string, meta?: Record): void { + if (level >= currentLogLevel) { + const formatted = formatMessage(level, message, meta); + console.error(formatted); // Use stderr to avoid interfering with STDIO + } +} + +/** + * Structured logger interface + */ +export const logger = { + debug(message: string, meta?: Record): void { + log(LogLevel.DEBUG, message, meta); + }, + + info(message: string, meta?: Record): void { + log(LogLevel.INFO, message, meta); + }, + + warn(message: string, meta?: Record): void { + log(LogLevel.WARN, message, meta); + }, + + error(message: string, meta?: Record): void { + log(LogLevel.ERROR, message, meta); + }, +}; diff --git a/src/server.test.ts b/src/server.test.ts new file mode 100644 index 0000000..3b6e052 --- /dev/null +++ b/src/server.test.ts @@ -0,0 +1,187 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; +import { stripThinkingTokens, getProxyUrl, proxyAwareFetch } from "./server.js"; + +describe("Server Utility Functions", () => { + describe("stripThinkingTokens", () => { + it("should remove thinking tokens from content", () => { + const content = "Hello This is internal thinking world!"; + const result = stripThinkingTokens(content); + expect(result).toBe("Hello world!"); + }); + + it("should handle multiple thinking tokens", () => { + const content = "First thought Hello Second thought world!"; + const result = stripThinkingTokens(content); + expect(result).toBe("Hello world!"); + }); + + it("should handle multiline thinking tokens", () => { + const content = "Start \nMultiple\nLines\nOf\nThinking\n End"; + const result = stripThinkingTokens(content); + expect(result).toBe("Start End"); + }); + + it("should handle content without thinking tokens", () => { + const content = "No thinking tokens here!"; + const result = stripThinkingTokens(content); + expect(result).toBe("No thinking tokens here!"); + }); + + it("should handle empty content", () => { + const result = stripThinkingTokens(""); + expect(result).toBe(""); + }); + + it("should handle nested angle brackets within thinking tokens", () => { + const content = "Test content result"; + const result = stripThinkingTokens(content); + expect(result).toBe("Test result"); + }); + + it("should trim the result", () => { + const content = " Remove me "; + const result = stripThinkingTokens(content); + expect(result).toBe(""); + }); + }); + + describe("getProxyUrl", () => { + let originalEnv: NodeJS.ProcessEnv; + + beforeEach(() => { + originalEnv = { ...process.env }; + }); + + afterEach(() => { + process.env = originalEnv; + }); + + it("should return PERPLEXITY_PROXY when set", () => { + process.env.PERPLEXITY_PROXY = "http://perplexity-proxy:8080"; + process.env.HTTPS_PROXY = "http://https-proxy:8080"; + process.env.HTTP_PROXY = "http://http-proxy:8080"; + + const result = getProxyUrl(); + expect(result).toBe("http://perplexity-proxy:8080"); + }); + + it("should return HTTPS_PROXY when PERPLEXITY_PROXY not set", () => { + delete process.env.PERPLEXITY_PROXY; + process.env.HTTPS_PROXY = "http://https-proxy:8080"; + process.env.HTTP_PROXY = "http://http-proxy:8080"; + + const result = getProxyUrl(); + expect(result).toBe("http://https-proxy:8080"); + }); + + it("should return HTTP_PROXY when PERPLEXITY_PROXY and HTTPS_PROXY not set", () => { + delete process.env.PERPLEXITY_PROXY; + delete process.env.HTTPS_PROXY; + process.env.HTTP_PROXY = "http://http-proxy:8080"; + + const result = getProxyUrl(); + expect(result).toBe("http://http-proxy:8080"); + }); + + it("should return undefined when no proxy set", () => { + delete process.env.PERPLEXITY_PROXY; + delete process.env.HTTPS_PROXY; + delete process.env.HTTP_PROXY; + + const result = getProxyUrl(); + expect(result).toBeUndefined(); + }); + + it("should prioritize PERPLEXITY_PROXY over others", () => { + process.env.PERPLEXITY_PROXY = "http://specific-proxy:8080"; + process.env.HTTPS_PROXY = "http://general-proxy:8080"; + + const result = getProxyUrl(); + expect(result).toBe("http://specific-proxy:8080"); + }); + }); + + describe("proxyAwareFetch", () => { + let originalEnv: NodeJS.ProcessEnv; + let originalFetch: typeof global.fetch; + + beforeEach(() => { + originalEnv = { ...process.env }; + originalFetch = global.fetch; + }); + + afterEach(() => { + process.env = originalEnv; + global.fetch = originalFetch; + }); + + it("should use native fetch when no proxy is configured", async () => { + delete process.env.PERPLEXITY_PROXY; + delete process.env.HTTPS_PROXY; + delete process.env.HTTP_PROXY; + + const mockResponse = new Response("test", { status: 200 }); + global.fetch = vi.fn().mockResolvedValue(mockResponse); + + const result = await proxyAwareFetch("https://api.example.com/test"); + + expect(global.fetch).toHaveBeenCalledWith( + "https://api.example.com/test", + {} + ); + expect(result).toBe(mockResponse); + }); + + it("should use undici with proxy when proxy is configured", async () => { + process.env.PERPLEXITY_PROXY = "http://proxy:8080"; + + const mockResponse = { + ok: true, + status: 200, + statusText: "OK", + json: async () => ({ data: "test" }), + }; + + // We can't easily mock undici's ProxyAgent, but we can verify the function works + // This test verifies the code path executes without error + // In a real scenario, you'd want to test with a real proxy server + + // For now, just verify the function signature works + expect(proxyAwareFetch).toBeDefined(); + expect(typeof proxyAwareFetch).toBe("function"); + }); + + it("should pass through request options to native fetch", async () => { + delete process.env.PERPLEXITY_PROXY; + delete process.env.HTTPS_PROXY; + delete process.env.HTTP_PROXY; + + const mockResponse = new Response("test", { status: 200 }); + global.fetch = vi.fn().mockResolvedValue(mockResponse); + + const options: RequestInit = { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ test: "data" }), + }; + + await proxyAwareFetch("https://api.example.com/test", options); + + expect(global.fetch).toHaveBeenCalledWith( + "https://api.example.com/test", + options + ); + }); + + it("should handle fetch errors properly", async () => { + delete process.env.PERPLEXITY_PROXY; + delete process.env.HTTPS_PROXY; + delete process.env.HTTP_PROXY; + + global.fetch = vi.fn().mockRejectedValue(new Error("Network error")); + + await expect(proxyAwareFetch("https://api.example.com/test")) + .rejects.toThrow("Network error"); + }); + }); +}); diff --git a/src/server.ts b/src/server.ts index 23d13d3..1ee56da 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,6 +1,14 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { z } from "zod"; import { fetch as undiciFetch, ProxyAgent } from "undici"; +import type { + Message, + ChatCompletionResponse, + SearchResponse, + SearchResult, + SearchRequestBody, + UndiciRequestOptions +} from "./types.js"; // Retrieve the Perplexity API key from environment variables const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; @@ -8,10 +16,10 @@ const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; /** * Gets the proxy URL from environment variables. * Checks PERPLEXITY_PROXY, HTTPS_PROXY, HTTP_PROXY in order. - * + * * @returns {string | undefined} The proxy URL if configured, undefined otherwise */ -function getProxyUrl(): string | undefined { +export function getProxyUrl(): string | undefined { return process.env.PERPLEXITY_PROXY || process.env.HTTPS_PROXY || process.env.HTTP_PROXY || @@ -21,21 +29,22 @@ function getProxyUrl(): string | undefined { /** * Creates a proxy-aware fetch function. * Uses undici with ProxyAgent when a proxy is configured, otherwise uses native fetch. - * + * * @param {string} url - The URL to fetch * @param {RequestInit} options - Fetch options * @returns {Promise} The fetch response */ -async function proxyAwareFetch(url: string, options: RequestInit = {}): Promise { +export async function proxyAwareFetch(url: string, options: RequestInit = {}): Promise { const proxyUrl = getProxyUrl(); - + if (proxyUrl) { // Use undici with ProxyAgent when proxy is configured const proxyAgent = new ProxyAgent(proxyUrl); - const response = await undiciFetch(url, { + const undiciOptions: UndiciRequestOptions = { ...options, dispatcher: proxyAgent, - } as any); + }; + const response = await undiciFetch(url, undiciOptions); // Cast to native Response type for compatibility return response as unknown as Response; } else { @@ -48,11 +57,11 @@ async function proxyAwareFetch(url: string, options: RequestInit = {}): Promise< * Validates an array of message objects for chat completion tools. * Ensures each message has a valid role and content field. * - * @param {any} messages - The messages to validate + * @param {unknown} messages - The messages to validate * @param {string} toolName - The name of the tool calling this validation (for error messages) * @throws {Error} If messages is not an array or if any message is invalid */ -function validateMessages(messages: any, toolName: string): void { +function validateMessages(messages: unknown, toolName: string): asserts messages is Message[] { if (!Array.isArray(messages)) { throw new Error(`Invalid arguments for ${toolName}: 'messages' must be an array`); } @@ -78,7 +87,7 @@ function validateMessages(messages: any, toolName: string): void { * @param {string} content - The content to process * @returns {string} The content with thinking tokens removed */ -function stripThinkingTokens(content: string): string { +export function stripThinkingTokens(content: string): string { return content.replace(/[\s\S]*?<\/think>/g, '').trim(); } @@ -86,14 +95,14 @@ function stripThinkingTokens(content: string): string { * Performs a chat completion by sending a request to the Perplexity API. * Appends citations to the returned message content if they exist. * - * @param {Array<{ role: string; content: string }>} messages - An array of message objects. + * @param {Message[]} messages - An array of message objects. * @param {string} model - The model to use for the completion. * @param {boolean} stripThinking - If true, removes ... tags from the response. * @returns {Promise} The chat completion result with appended citations. * @throws Will throw an error if the API request fails. */ export async function performChatCompletion( - messages: Array<{ role: string; content: string }>, + messages: Message[], model: string = "sonar-pro", stripThinking: boolean = false ): Promise { @@ -148,9 +157,9 @@ export async function performChatCompletion( } // Attempt to parse the JSON response from the API - let data; + let data: ChatCompletionResponse; try { - data = await response.json(); + data = await response.json() as ChatCompletionResponse; } catch (jsonError) { throw new Error(`Failed to parse JSON response from Perplexity API: ${jsonError}`); } @@ -176,7 +185,7 @@ export async function performChatCompletion( // If citations are provided, append them to the message content if (data.citations && Array.isArray(data.citations) && data.citations.length > 0) { messageContent += "\n\nCitations:\n"; - data.citations.forEach((citation: string, index: number) => { + data.citations.forEach((citation, index) => { messageContent += `[${index + 1}] ${citation}\n`; }); } @@ -187,17 +196,17 @@ export async function performChatCompletion( /** * Formats search results from the Perplexity Search API into a readable string. * - * @param {any} data - The search response data from the API. + * @param {SearchResponse} data - The search response data from the API. * @returns {string} Formatted search results. */ -export function formatSearchResults(data: any): string { +export function formatSearchResults(data: SearchResponse): string { if (!data.results || !Array.isArray(data.results)) { return "No search results found."; } let formattedResults = `Found ${data.results.length} search results:\n\n`; - - data.results.forEach((result: any, index: number) => { + + data.results.forEach((result, index) => { formattedResults += `${index + 1}. **${result.title}**\n`; formattedResults += ` URL: ${result.url}\n`; if (result.snippet) { @@ -236,16 +245,13 @@ export async function performSearch( const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); const url = new URL("https://api.perplexity.ai/search"); - const body: any = { + const body: SearchRequestBody = { query: query, max_results: maxResults, max_tokens_per_page: maxTokensPerPage, + ...(country && { country }), }; - if (country) { - body.country = country; - } - const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); @@ -282,9 +288,9 @@ export async function performSearch( ); } - let data; + let data: SearchResponse; try { - data = await response.json(); + data = await response.json() as SearchResponse; } catch (jsonError) { throw new Error(`Failed to parse JSON response from Perplexity Search API: ${jsonError}`); } diff --git a/src/transport.test.ts b/src/transport.test.ts index 165d7f8..6dfcf7e 100644 --- a/src/transport.test.ts +++ b/src/transport.test.ts @@ -152,7 +152,7 @@ describe("Transport Integration Tests", () => { expect(data.result.tools).toHaveLength(4); // Verify all four tools are present - const toolNames = data.result.tools.map((t: any) => t.name); + const toolNames = data.result.tools.map((t: { name: string }) => t.name); expect(toolNames).toContain("perplexity_ask"); expect(toolNames).toContain("perplexity_research"); expect(toolNames).toContain("perplexity_reason"); diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..4b7c4a0 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,74 @@ +/** + * Type definitions for the Perplexity MCP Server + */ + +/** + * Represents a single message in a conversation + */ +export interface Message { + role: string; + content: string; +} + +/** + * Response structure from Perplexity chat completion API + */ +export interface ChatCompletionResponse { + choices: Array<{ + message: { + content: string; + role?: string; + }; + finish_reason?: string; + index?: number; + }>; + citations?: string[]; + usage?: { + prompt_tokens?: number; + completion_tokens?: number; + total_tokens?: number; + }; + id?: string; + model?: string; + created?: number; +} + +/** + * A single search result from the Perplexity Search API + */ +export interface SearchResult { + title: string; + url: string; + snippet?: string; + date?: string; + score?: number; +} + +/** + * Response structure from Perplexity Search API + */ +export interface SearchResponse { + results: SearchResult[]; + query?: string; + usage?: { + tokens?: number; + }; +} + +/** + * Request body for Perplexity Search API + */ +export interface SearchRequestBody { + query: string; + max_results: number; + max_tokens_per_page: number; + country?: string; +} + +/** + * Options for undici fetch with proxy support + */ +export interface UndiciRequestOptions { + [key: string]: any; + dispatcher?: any; // ProxyAgent type from undici +} From 1316e82d164f141a61ed2ba6c5f12e4c4f149825 Mon Sep 17 00:00:00 2001 From: Ompragash Viswanathan Date: Thu, 27 Nov 2025 12:13:25 +0530 Subject: [PATCH 45/84] fixed type safety issues and extracted inline types for reusability --- src/index.test.ts | 20 ++++++++-------- src/logger.ts | 10 +++++++- src/server.ts | 33 ++++++++++--------------- src/types.ts | 61 ++++++++++++++++++++++------------------------- src/validation.ts | 45 ++++++++++++++++++++++++++++++++++ 5 files changed, 105 insertions(+), 64 deletions(-) create mode 100644 src/validation.ts diff --git a/src/index.test.ts b/src/index.test.ts index 31c6691..ac0a686 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -260,7 +260,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "missing or empty choices array" + "Invalid API response" ); }); @@ -273,7 +273,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "missing message content" + "Invalid API response" ); }); @@ -286,7 +286,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "missing or empty choices array" + "Invalid API response" ); }); @@ -299,7 +299,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "missing message content" + "Invalid API response" ); }); @@ -312,7 +312,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "missing or empty choices array" + "Invalid API response" ); }); @@ -325,7 +325,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "missing message content" + "Invalid API response" ); }); @@ -359,10 +359,10 @@ describe("Perplexity MCP Server", () => { } as Response); const messages = [{ role: "user", content: "test" }]; - const result = await performChatCompletion(messages); - expect(result).toBe("Response"); - expect(result).not.toContain("Citations:"); + await expect(performChatCompletion(messages)).rejects.toThrow( + "Invalid API response" + ); }); }); @@ -378,7 +378,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "Failed to parse JSON response" + "Invalid API response" ); }); diff --git a/src/logger.ts b/src/logger.ts index a0ad805..7c63535 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -39,6 +39,14 @@ function getLogLevel(): LogLevel { const currentLogLevel = getLogLevel(); +function safeStringify(obj: unknown): string { + try { + return JSON.stringify(obj); + } catch { + return "[Unstringifiable]"; + } +} + /** * Formats a log message with timestamp and level */ @@ -47,7 +55,7 @@ function formatMessage(level: LogLevel, message: string, meta?: Record 0) { - return `[${timestamp}] ${levelName}: ${message} ${JSON.stringify(meta)}`; + return `[${timestamp}] ${levelName}: ${message} ${safeStringify(meta)}`; } return `[${timestamp}] ${levelName}: ${message}`; diff --git a/src/server.ts b/src/server.ts index 1ee56da..b7a8072 100644 --- a/src/server.ts +++ b/src/server.ts @@ -5,10 +5,10 @@ import type { Message, ChatCompletionResponse, SearchResponse, - SearchResult, SearchRequestBody, UndiciRequestOptions } from "./types.js"; +import { ChatCompletionResponseSchema, SearchResponseSchema } from "./validation.js"; // Retrieve the Perplexity API key from environment variables const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; @@ -47,10 +47,10 @@ export async function proxyAwareFetch(url: string, options: RequestInit = {}): P const response = await undiciFetch(url, undiciOptions); // Cast to native Response type for compatibility return response as unknown as Response; - } else { - // Use native fetch when no proxy is configured - return fetch(url, options); } + + // Use native fetch when no proxy is configured + return fetch(url, options); } /** @@ -156,23 +156,15 @@ export async function performChatCompletion( ); } - // Attempt to parse the JSON response from the API let data: ChatCompletionResponse; try { - data = await response.json() as ChatCompletionResponse; - } catch (jsonError) { - throw new Error(`Failed to parse JSON response from Perplexity API: ${jsonError}`); - } - - // Validate response structure - if (!data.choices || !Array.isArray(data.choices) || data.choices.length === 0) { - throw new Error("Invalid API response: missing or empty choices array"); + const json = await response.json(); + data = ChatCompletionResponseSchema.parse(json); + } catch (error) { + throw new Error(`Invalid API response: ${error}`); } const firstChoice = data.choices[0]; - if (!firstChoice.message || typeof firstChoice.message.content !== 'string') { - throw new Error("Invalid API response: missing message content"); - } // Directly retrieve the main message content from the response let messageContent = firstChoice.message.content; @@ -290,9 +282,10 @@ export async function performSearch( let data: SearchResponse; try { - data = await response.json() as SearchResponse; - } catch (jsonError) { - throw new Error(`Failed to parse JSON response from Perplexity Search API: ${jsonError}`); + const json = await response.json(); + data = SearchResponseSchema.parse(json); + } catch (error) { + throw new Error(`Invalid API response: ${error}`); } return formatSearchResults(data); @@ -301,7 +294,7 @@ export async function performSearch( /** * Creates and configures the Perplexity MCP server with all tools. * This factory function is transport-agnostic and returns a configured server instance. - * + * * @returns The configured MCP server instance */ export function createPerplexityServer() { diff --git a/src/types.ts b/src/types.ts index 4b7c4a0..dc214c5 100644 --- a/src/types.ts +++ b/src/types.ts @@ -2,6 +2,8 @@ * Type definitions for the Perplexity MCP Server */ +import type { ProxyAgent } from "undici"; + /** * Represents a single message in a conversation */ @@ -10,32 +12,32 @@ export interface Message { content: string; } -/** - * Response structure from Perplexity chat completion API - */ +export interface ChatMessage { + content: string; + role?: string; +} + +export interface ChatChoice { + message: ChatMessage; + finish_reason?: string; + index?: number; +} + +export interface TokenUsage { + prompt_tokens?: number; + completion_tokens?: number; + total_tokens?: number; +} + export interface ChatCompletionResponse { - choices: Array<{ - message: { - content: string; - role?: string; - }; - finish_reason?: string; - index?: number; - }>; + choices: ChatChoice[]; citations?: string[]; - usage?: { - prompt_tokens?: number; - completion_tokens?: number; - total_tokens?: number; - }; + usage?: TokenUsage; id?: string; model?: string; created?: number; } -/** - * A single search result from the Perplexity Search API - */ export interface SearchResult { title: string; url: string; @@ -44,20 +46,16 @@ export interface SearchResult { score?: number; } -/** - * Response structure from Perplexity Search API - */ +export interface SearchUsage { + tokens?: number; +} + export interface SearchResponse { results: SearchResult[]; query?: string; - usage?: { - tokens?: number; - }; + usage?: SearchUsage; } -/** - * Request body for Perplexity Search API - */ export interface SearchRequestBody { query: string; max_results: number; @@ -65,10 +63,7 @@ export interface SearchRequestBody { country?: string; } -/** - * Options for undici fetch with proxy support - */ export interface UndiciRequestOptions { - [key: string]: any; - dispatcher?: any; // ProxyAgent type from undici + [key: string]: unknown; + dispatcher?: ProxyAgent; } diff --git a/src/validation.ts b/src/validation.ts new file mode 100644 index 0000000..537f33f --- /dev/null +++ b/src/validation.ts @@ -0,0 +1,45 @@ +import { z } from "zod"; + +export const ChatMessageSchema = z.object({ + content: z.string(), + role: z.string().optional(), +}); + +export const ChatChoiceSchema = z.object({ + message: ChatMessageSchema, + finish_reason: z.string().optional(), + index: z.number().optional(), +}); + +export const TokenUsageSchema = z.object({ + prompt_tokens: z.number().optional(), + completion_tokens: z.number().optional(), + total_tokens: z.number().optional(), +}); + +export const ChatCompletionResponseSchema = z.object({ + choices: z.array(ChatChoiceSchema).min(1), + citations: z.array(z.string()).optional(), + usage: TokenUsageSchema.optional(), + id: z.string().optional(), + model: z.string().optional(), + created: z.number().optional(), +}); + +export const SearchResultSchema = z.object({ + title: z.string(), + url: z.string(), + snippet: z.string().optional(), + date: z.string().optional(), + score: z.number().optional(), +}); + +export const SearchUsageSchema = z.object({ + tokens: z.number().optional(), +}); + +export const SearchResponseSchema = z.object({ + results: z.array(SearchResultSchema), + query: z.string().optional(), + usage: SearchUsageSchema.optional(), +}); From 2e8d5b4334935cfb58900bab38dc8e7b5cbd9286 Mon Sep 17 00:00:00 2001 From: Salman Muin Kayser Chishti <13schishti@gmail.com> Date: Tue, 16 Dec 2025 11:50:33 +0000 Subject: [PATCH 46/84] Upgrade GitHub Actions for Node 24 compatibility --- .github/workflows/publish-mcp.yml | 2 +- .github/workflows/publish.yml | 4 ++-- .github/workflows/test.yml | 4 ++-- .github/workflows/validate-plugin.yml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/publish-mcp.yml b/.github/workflows/publish-mcp.yml index 43f7ea4..752ba17 100644 --- a/.github/workflows/publish-mcp.yml +++ b/.github/workflows/publish-mcp.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Install MCP Publisher run: | diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index bc0714f..6656fd7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -17,10 +17,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: '20' registry-url: 'https://registry.npmjs.org' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index db4c2cd..e3466db 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,10 +11,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: '20' diff --git a/.github/workflows/validate-plugin.yml b/.github/workflows/validate-plugin.yml index b9e1e64..10733b5 100644 --- a/.github/workflows/validate-plugin.yml +++ b/.github/workflows/validate-plugin.yml @@ -17,10 +17,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: '20' From 7364dd41f667f4c75b34ab34123a553dae0d3da7 Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 17 Dec 2025 20:36:02 +0100 Subject: [PATCH 47/84] keep actions at v6 --- .github/workflows/publish-mcp.yml | 2 +- .github/workflows/publish.yml | 4 ++-- .github/workflows/test.yml | 4 ++-- .github/workflows/validate-plugin.yml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/publish-mcp.yml b/.github/workflows/publish-mcp.yml index 43f7ea4..752ba17 100644 --- a/.github/workflows/publish-mcp.yml +++ b/.github/workflows/publish-mcp.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Install MCP Publisher run: | diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index bc0714f..6656fd7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -17,10 +17,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: '20' registry-url: 'https://registry.npmjs.org' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index db4c2cd..e3466db 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,10 +11,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: '20' diff --git a/.github/workflows/validate-plugin.yml b/.github/workflows/validate-plugin.yml index b9e1e64..10733b5 100644 --- a/.github/workflows/validate-plugin.yml +++ b/.github/workflows/validate-plugin.yml @@ -17,10 +17,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Setup Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: '20' From fb0cc8f8d0a58888d2c0cb00ef8491b4e426c87b Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 17 Dec 2025 20:36:14 +0100 Subject: [PATCH 48/84] fix: preserve specific error messages with Zod validation --- src/index.test.ts | 16 ++++++++-------- src/server.ts | 13 +++++++++++-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/index.test.ts b/src/index.test.ts index ac0a686..b0e789a 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -260,7 +260,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "Invalid API response" + "missing or empty choices array" ); }); @@ -273,7 +273,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "Invalid API response" + "missing message content" ); }); @@ -286,7 +286,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "Invalid API response" + "missing or empty choices array" ); }); @@ -299,7 +299,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "Invalid API response" + "missing message content" ); }); @@ -312,7 +312,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "Invalid API response" + "missing or empty choices array" ); }); @@ -325,7 +325,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "Invalid API response" + "missing message content" ); }); @@ -361,7 +361,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "Invalid API response" + "Failed to parse JSON response" ); }); }); @@ -378,7 +378,7 @@ describe("Perplexity MCP Server", () => { const messages = [{ role: "user", content: "test" }]; await expect(performChatCompletion(messages)).rejects.toThrow( - "Invalid API response" + "Failed to parse JSON response" ); }); diff --git a/src/server.ts b/src/server.ts index b7a8072..a28ae88 100644 --- a/src/server.ts +++ b/src/server.ts @@ -161,7 +161,16 @@ export async function performChatCompletion( const json = await response.json(); data = ChatCompletionResponseSchema.parse(json); } catch (error) { - throw new Error(`Invalid API response: ${error}`); + if (error instanceof z.ZodError) { + const issues = error.issues; + if (issues.some(i => i.path.includes('message') || i.path.includes('content'))) { + throw new Error("Invalid API response: missing message content"); + } + if (issues.some(i => i.path.includes('choices'))) { + throw new Error("Invalid API response: missing or empty choices array"); + } + } + throw new Error(`Failed to parse JSON response from Perplexity API: ${error}`); } const firstChoice = data.choices[0]; @@ -285,7 +294,7 @@ export async function performSearch( const json = await response.json(); data = SearchResponseSchema.parse(json); } catch (error) { - throw new Error(`Invalid API response: ${error}`); + throw new Error(`Failed to parse JSON response from Perplexity Search API: ${error}`); } return formatSearchResults(data); From 8534da4aea64eef5d5eb6bf99f33584c11f2e784 Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 17 Dec 2025 20:46:14 +0100 Subject: [PATCH 49/84] fix placeholder proxyAwareFetch test --- src/server.test.ts | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/server.test.ts b/src/server.test.ts index 3b6e052..acee5ff 100644 --- a/src/server.test.ts +++ b/src/server.test.ts @@ -132,23 +132,18 @@ describe("Server Utility Functions", () => { expect(result).toBe(mockResponse); }); - it("should use undici with proxy when proxy is configured", async () => { + it("should NOT use native fetch when proxy is configured", async () => { process.env.PERPLEXITY_PROXY = "http://proxy:8080"; - const mockResponse = { - ok: true, - status: 200, - statusText: "OK", - json: async () => ({ data: "test" }), - }; + global.fetch = vi.fn().mockResolvedValue(new Response("test")); - // We can't easily mock undici's ProxyAgent, but we can verify the function works - // This test verifies the code path executes without error - // In a real scenario, you'd want to test with a real proxy server + try { + await proxyAwareFetch("https://api.example.com/test"); + } catch { + // Expected to fail - no proxy server is configured + } - // For now, just verify the function signature works - expect(proxyAwareFetch).toBeDefined(); - expect(typeof proxyAwareFetch).toBe("function"); + expect(global.fetch).not.toHaveBeenCalled(); }); it("should pass through request options to native fetch", async () => { From 352f2fc31d86fb7f9119f89457113bda9c8619ef Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 17 Dec 2025 20:46:46 +0100 Subject: [PATCH 50/84] test: add stripThinkingTokens edge cases for malformed tags --- src/server.test.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/server.test.ts b/src/server.test.ts index acee5ff..a5e4ff1 100644 --- a/src/server.test.ts +++ b/src/server.test.ts @@ -43,6 +43,18 @@ describe("Server Utility Functions", () => { const result = stripThinkingTokens(content); expect(result).toBe(""); }); + + it("should pass through unclosed think tag unchanged", () => { + const content = "Start unclosed content"; + const result = stripThinkingTokens(content); + expect(result).toBe("Start unclosed content"); + }); + + it("should pass through orphan closing tag unchanged", () => { + const content = "Some content here"; + const result = stripThinkingTokens(content); + expect(result).toBe("Some content here"); + }); }); describe("getProxyUrl", () => { From 31c2674f402d339020b274e12428e1db53e77a63 Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 17 Dec 2025 20:47:20 +0100 Subject: [PATCH 51/84] test: add performSearch timeout and network error tests --- src/index.test.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/index.test.ts b/src/index.test.ts index b0e789a..80332ca 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -248,6 +248,41 @@ describe("Perplexity MCP Server", () => { "Perplexity Search API error: 500 Internal Server Error" ); }); + + it("should handle search timeout errors", async () => { + process.env.PERPLEXITY_TIMEOUT_MS = "100"; + + global.fetch = vi.fn().mockImplementation((_url, options) => { + return new Promise((resolve, reject) => { + const signal = options?.signal as AbortSignal; + + if (signal) { + signal.addEventListener("abort", () => { + reject(new DOMException("The operation was aborted.", "AbortError")); + }); + } + + setTimeout(() => { + resolve({ + ok: true, + json: async () => ({ results: [] }), + } as Response); + }, 200); + }); + }); + + await expect(performSearch("test")).rejects.toThrow( + "Request timeout" + ); + }); + + it("should handle search network errors", async () => { + global.fetch = vi.fn().mockRejectedValue(new Error("Network failure")); + + await expect(performSearch("test")).rejects.toThrow( + "Network error while calling Perplexity Search API" + ); + }); }); describe("API Response Validation", () => { From e546489166235f8317c109e8ca95556b2c0e324a Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 17 Dec 2025 20:49:06 +0100 Subject: [PATCH 52/84] test: add validateMessages coverage --- src/server.test.ts | 64 +++++++++++++++++++++++++++++++++++++++++++++- src/server.ts | 2 +- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/server.test.ts b/src/server.test.ts index a5e4ff1..d1efb3f 100644 --- a/src/server.test.ts +++ b/src/server.test.ts @@ -1,5 +1,5 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; -import { stripThinkingTokens, getProxyUrl, proxyAwareFetch } from "./server.js"; +import { stripThinkingTokens, getProxyUrl, proxyAwareFetch, validateMessages } from "./server.js"; describe("Server Utility Functions", () => { describe("stripThinkingTokens", () => { @@ -191,4 +191,66 @@ describe("Server Utility Functions", () => { .rejects.toThrow("Network error"); }); }); + + describe("validateMessages", () => { + it("should throw if messages is not an array", () => { + expect(() => validateMessages("not-an-array", "test_tool")) + .toThrow("Invalid arguments for test_tool: 'messages' must be an array"); + }); + + it("should throw if messages is null", () => { + expect(() => validateMessages(null, "test_tool")) + .toThrow("'messages' must be an array"); + }); + + it("should throw if message is not an object", () => { + expect(() => validateMessages(["string"], "test_tool")) + .toThrow("Invalid message at index 0: must be an object"); + }); + + it("should throw if message is null", () => { + expect(() => validateMessages([null], "test_tool")) + .toThrow("Invalid message at index 0: must be an object"); + }); + + it("should throw if role is missing", () => { + expect(() => validateMessages([{ content: "test" }], "test_tool")) + .toThrow("Invalid message at index 0: 'role' must be a string"); + }); + + it("should throw if role is not a string", () => { + expect(() => validateMessages([{ role: 123, content: "test" }], "test_tool")) + .toThrow("Invalid message at index 0: 'role' must be a string"); + }); + + it("should throw if content is missing", () => { + expect(() => validateMessages([{ role: "user" }], "test_tool")) + .toThrow("Invalid message at index 0: 'content' must be a string"); + }); + + it("should throw if content is not a string", () => { + expect(() => validateMessages([{ role: "user", content: 123 }], "test_tool")) + .toThrow("Invalid message at index 0: 'content' must be a string"); + }); + + it("should throw if content is null", () => { + expect(() => validateMessages([{ role: "user", content: null }], "test_tool")) + .toThrow("Invalid message at index 0: 'content' must be a string"); + }); + + it("should pass for valid messages", () => { + expect(() => validateMessages([ + { role: "user", content: "Hello" }, + { role: "assistant", content: "Hi there" } + ], "test_tool")).not.toThrow(); + }); + + it("should report correct index for invalid message", () => { + expect(() => validateMessages([ + { role: "user", content: "valid" }, + { role: "assistant", content: "also valid" }, + { role: "user" } // no content + ], "test_tool")).toThrow("Invalid message at index 2: 'content' must be a string"); + }); + }); }); diff --git a/src/server.ts b/src/server.ts index a28ae88..4ae5dc2 100644 --- a/src/server.ts +++ b/src/server.ts @@ -61,7 +61,7 @@ export async function proxyAwareFetch(url: string, options: RequestInit = {}): P * @param {string} toolName - The name of the tool calling this validation (for error messages) * @throws {Error} If messages is not an array or if any message is invalid */ -function validateMessages(messages: unknown, toolName: string): asserts messages is Message[] { +export function validateMessages(messages: unknown, toolName: string): asserts messages is Message[] { if (!Array.isArray(messages)) { throw new Error(`Invalid arguments for ${toolName}: 'messages' must be an array`); } From ac919f05dad2190940bfb050c68d2dd25b71469c Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 17 Dec 2025 21:00:42 +0100 Subject: [PATCH 53/84] chore: bump version to 0.5.2 --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- server.json | 6 +++--- src/server.ts | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 237b8e0..060e133 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.5.1" + "version": "0.5.2" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.5.1", + "version": "0.5.2", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index 67f1ce1..45c07b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.5.1", + "version": "0.5.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.5.1", + "version": "0.5.2", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 4332777..86872d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.5.1", + "version": "0.5.2", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 05f3c63..2022ece 100644 --- a/server.json +++ b/server.json @@ -1,14 +1,14 @@ { - "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json", + "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.5.1", + "version": "0.5.2", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.5.1", + "version": "0.5.2", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index 4ae5dc2..5c09f0c 100644 --- a/src/server.ts +++ b/src/server.ts @@ -309,7 +309,7 @@ export async function performSearch( export function createPerplexityServer() { const server = new McpServer({ name: "io.github.perplexityai/mcp-server", - version: "0.5.1", + version: "0.5.2", }); // Register perplexity_ask tool From 50da90285ade8ff03525d01ba761f42fe3c7fb22 Mon Sep 17 00:00:00 2001 From: Kesku Date: Thu, 18 Dec 2025 15:14:55 +0100 Subject: [PATCH 54/84] feat: add smithery configuration schema for Perplexity API key and timeout settings --- smithery.yaml | 12 +++++++++++- src/http.ts | 7 ++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/smithery.yaml b/smithery.yaml index 9582cde..d5e02c6 100644 --- a/smithery.yaml +++ b/smithery.yaml @@ -4,4 +4,14 @@ build: dockerBuildPath: "." startCommand: type: "http" - +configSchema: + type: "object" + required: + - "PERPLEXITY_API_KEY" + properties: + PERPLEXITY_API_KEY: + type: "string" + description: "Your Perplexity API key from https://www.perplexity.ai/settings/api" + PERPLEXITY_TIMEOUT_MS: + type: "string" + description: "Request timeout in milliseconds (default: 300000)" \ No newline at end of file diff --git a/src/http.ts b/src/http.ts index fb3a3f2..1673189 100644 --- a/src/http.ts +++ b/src/http.ts @@ -15,11 +15,8 @@ if (!PERPLEXITY_API_KEY) { const app = express(); const PORT = parseInt(process.env.PORT || "8080", 10); -const BIND_ADDRESS = process.env.BIND_ADDRESS || "127.0.0.1"; -const ALLOWED_ORIGINS = process.env.ALLOWED_ORIGINS?.split(",") || [ - "http://localhost:3000", - "http://127.0.0.1:3000", -]; +const BIND_ADDRESS = process.env.BIND_ADDRESS || "0.0.0.0"; +const ALLOWED_ORIGINS = process.env.ALLOWED_ORIGINS?.split(",") || ["*"]; // CORS configuration for browser-based MCP clients app.use(cors({ From 5dc043e7e75403007cb1b768bae05ca554c42ac7 Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 19 Dec 2025 16:19:23 +0100 Subject: [PATCH 55/84] docs: Improved client setup details --- README.md | 115 +++++++++++++++--------------------------------------- 1 file changed, 31 insertions(+), 84 deletions(-) diff --git a/README.md b/README.md index 41b7df2..5375c7f 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ The official MCP server implementation for the Perplexity API Platform, providin ### **perplexity_search** Direct web search using the Perplexity Search API. Returns ranked search results with metadata, perfect for finding current information. -### **perplexity_ask** +### **perplexity_ask** General-purpose conversational AI with real-time web search using the `sonar-pro` model. Great for quick questions and everyday searches. ### **perplexity_research** @@ -30,61 +30,37 @@ Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Pe ## Configuration ### Get Your API Key + 1. Get your Perplexity API Key from the [API Portal](https://www.perplexity.ai/account/api/group) -2. Set it as an environment variable: `PERPLEXITY_API_KEY=your_key_here` -3. (Optional) Set a timeout for requests: `PERPLEXITY_TIMEOUT_MS=600000`. The default is 5 minutes. -4. (Optional) Set log level for debugging: `PERPLEXITY_LOG_LEVEL=DEBUG|INFO|WARN|ERROR`. The default is ERROR. +2. Replace `your_key_here` in the configurations below with your key +3. (Optional) Set timeout: `PERPLEXITY_TIMEOUT_MS=600000` (default: 5 minutes) +4. (Optional) Set log level: `PERPLEXITY_LOG_LEVEL=DEBUG|INFO|WARN|ERROR` (default: ERROR) ### Claude Code -#### Option 1: Install via Plugin (Recommended) - -The easiest way to get started with Perplexity in Claude Code, set your API key: ```bash -export PERPLEXITY_API_KEY="your_key_here" +claude mcp add perplexity --env PERPLEXITY_API_KEY=your_key_here -- npx -y @perplexity-ai/mcp-server ``` -Then: -```bash -# Open Claude Code -claude - -# Add the Perplexity marketplace -/plugin marketplace add perplexityai/modelcontextprotocol - -# Install the plugin -/plugin install perplexity -``` - -#### Option 2: Manual Configuration - -Run in your terminal: +Or install via plugin: ```bash -claude mcp add perplexity --transport stdio --env PERPLEXITY_API_KEY=your_key_here -- npx -y perplexity-mcp +export PERPLEXITY_API_KEY="your_key_here" +claude +# Then run: /plugin marketplace add perplexityai/modelcontextprotocol +# Then run: /plugin install perplexity ``` -Or add to your `claude.json`: +### Cursor, Claude Desktop & Windsurf -```json -"mcpServers": { - "perplexity": { - "type": "stdio", - "command": "npx", - "args": [ - "-y", - "perplexity-mcp" - ], - "env": { - "PERPLEXITY_API_KEY": "your_key_here", - "PERPLEXITY_TIMEOUT_MS": "600000" - } - } -} -``` +Use the one-click install badges at the top of this README for Cursor. -### Cursor +For manual setup, all these clients use the same `mcpServers` format: -Add to your `mcp.json` (Cursor): +| Client | Config File | +|--------|-------------| +| Cursor | `~/.cursor/mcp.json` | +| Claude Desktop | `claude_desktop_config.json` | +| Windsurf | `~/.codeium/windsurf/mcp_config.json` | ```json { @@ -100,65 +76,36 @@ Add to your `mcp.json` (Cursor): } ``` -### VS Code - -Add to your `.vscode/mcp.json` (VS Code): - -```json -{ - "servers": { - "perplexity": { - "type": "stdio", - "command": "npx", - "args": [ - "-y", - "@perplexity-ai/mcp-server" - ], - "env": { - "PERPLEXITY_API_KEY": "your_key_here" - } - } - } -} -``` - -Or use the one-click install badges at the top of this README. - -### Codex - -Run in your terminal: - -```bash -codex mcp add perplexity --env PERPLEXITY_API_KEY=your_key_here -- npx -y @perplexity-ai/mcp-server -``` - -### Claude Desktop +## VS Code -Add to your `claude_desktop_config.json`: +Use the one-click install badge at the top of this README for VS Code, for manual setup, add to `.vscode/mcp.json`: ```json { - "mcpServers": { + "servers": { "perplexity": { + "type": "stdio", "command": "npx", "args": ["-y", "@perplexity-ai/mcp-server"], "env": { - "PERPLEXITY_API_KEY": "your_key_here", - "PERPLEXITY_TIMEOUT_MS": "600000" + "PERPLEXITY_API_KEY": "your_key_here" } } } } ``` -### Other MCP Clients - -For any MCP-compatible client, use: +### Codex ```bash -npx @perplexity-ai/mcp-server +codex mcp add perplexity --env PERPLEXITY_API_KEY=your_key_here -- npx -y @perplexity-ai/mcp-server ``` +### Other MCP Clients + + +Most clients can be manually configured to use the `mcpServers` wrapper in their configuration file (like Cursor). If your client doesn't work, check its documentation for the correct wrapper format. + ### Proxy Setup (For Corporate Networks) If you are running this server at work—especially behind a company firewall or proxy—you may need to tell the program how to send its internet traffic through your network's proxy. Follow these steps: From 5b4685ff1f248a37d3db185dd210ba892c11f6a5 Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 19 Dec 2025 16:24:58 +0100 Subject: [PATCH 56/84] docs: update wording --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5375c7f..9a6f282 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ claude ### Cursor, Claude Desktop & Windsurf -Use the one-click install badges at the top of this README for Cursor. +We recommend using the one-click install badge at the top of this README for Cursor. For manual setup, all these clients use the same `mcpServers` format: @@ -78,7 +78,7 @@ For manual setup, all these clients use the same `mcpServers` format: ## VS Code -Use the one-click install badge at the top of this README for VS Code, for manual setup, add to `.vscode/mcp.json`: +We recommend using the one-click install badge at the top of this README for VS Code, or for manual setup, add to `.vscode/mcp.json`: ```json { From 55aba8c07b19fc5749ca1d32eeb5c820e1c89787 Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 19 Dec 2025 16:26:05 +0100 Subject: [PATCH 57/84] fix quotes --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9a6f282..b214be5 100644 --- a/README.md +++ b/README.md @@ -32,14 +32,14 @@ Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Pe ### Get Your API Key 1. Get your Perplexity API Key from the [API Portal](https://www.perplexity.ai/account/api/group) -2. Replace `your_key_here` in the configurations below with your key +2. Replace `your_key_here` in the configurations below with your API key 3. (Optional) Set timeout: `PERPLEXITY_TIMEOUT_MS=600000` (default: 5 minutes) 4. (Optional) Set log level: `PERPLEXITY_LOG_LEVEL=DEBUG|INFO|WARN|ERROR` (default: ERROR) ### Claude Code ```bash -claude mcp add perplexity --env PERPLEXITY_API_KEY=your_key_here -- npx -y @perplexity-ai/mcp-server +claude mcp add perplexity --env PERPLEXITY_API_KEY="your_key_here" -- npx -y @perplexity-ai/mcp-server ``` Or install via plugin: @@ -98,7 +98,7 @@ We recommend using the one-click install badge at the top of this README for VS ### Codex ```bash -codex mcp add perplexity --env PERPLEXITY_API_KEY=your_key_here -- npx -y @perplexity-ai/mcp-server +codex mcp add perplexity --env PERPLEXITY_API_KEY="your_key_here" -- npx -y @perplexity-ai/mcp-server ``` ### Other MCP Clients From bf65c9de9cce5cbb550a348106cc27ccfa34cc03 Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 19 Dec 2025 16:28:44 +0100 Subject: [PATCH 58/84] docs: formatting --- README.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/README.md b/README.md index b214be5..0c7b354 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ For manual setup, all these clients use the same `mcpServers` format: } ``` -## VS Code +### VS Code We recommend using the one-click install badge at the top of this README for VS Code, or for manual setup, add to `.vscode/mcp.json`: @@ -103,7 +103,6 @@ codex mcp add perplexity --env PERPLEXITY_API_KEY="your_key_here" -- npx -y @per ### Other MCP Clients - Most clients can be manually configured to use the `mcpServers` wrapper in their configuration file (like Cursor). If your client doesn't work, check its documentation for the correct wrapper format. ### Proxy Setup (For Corporate Networks) @@ -137,7 +136,6 @@ If you'd rather use the standard variables, we support `HTTPS_PROXY` and `HTTP_P > The server checks proxy settings in this order: `PERPLEXITY_PROXY` → `HTTPS_PROXY` → `HTTP_PROXY`. If none are set, it connects directly to the internet. > URLs must include `https://`. Typical ports are `8080`, `3128`, and `80`. - ### HTTP Server Deployment For cloud or shared deployments, you can run the server in HTTP mode: @@ -170,7 +168,6 @@ npm run start:http Connect your MCP client to: `http://localhost:8080/mcp` - ## Troubleshooting - **API Key Issues**: Ensure `PERPLEXITY_API_KEY` is set correctly From 3a81fe113b87191fb6f878223167427b16bb5a9e Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 19 Dec 2025 16:41:37 +0100 Subject: [PATCH 59/84] docs: add troubleshooting tip for EOF/Initialize errors in README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0c7b354..43ba903 100644 --- a/README.md +++ b/README.md @@ -175,6 +175,7 @@ Connect your MCP client to: `http://localhost:8080/mcp` - **Tool Not Found**: Make sure the package is installed and the command path is correct - **Timeout Errors**: For very long research queries, set `PERPLEXITY_TIMEOUT_MS` to a higher value - **Proxy Issues**: Verify your `PERPLEXITY_PROXY` or `HTTPS_PROXY` setup and ensure `api.perplexity.ai` isn't blocked by your firewall. +- **EOF / Initialize Errors**: Some strict MCP clients fail because `npx` writes installation messages to stdout. Use `npx -yq` instead of `npx -y` to suppress this output. For support, visit [community.perplexity.ai](https://community.perplexity.ai) or [file an issue](https://github.com/perplexityai/modelcontextprotocol/issues). From 3820f66cdd7ccc4ef649d965d6be9b9742920f71 Mon Sep 17 00:00:00 2001 From: Kesku Date: Sun, 4 Jan 2026 22:22:01 +0000 Subject: [PATCH 60/84] docs: update HTTP Server Deployment instructions --- README.md | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 43ba903..83e66b4 100644 --- a/README.md +++ b/README.md @@ -138,35 +138,32 @@ If you'd rather use the standard variables, we support `HTTPS_PROXY` and `HTTP_P ### HTTP Server Deployment -For cloud or shared deployments, you can run the server in HTTP mode: +For cloud or shared deployments, run the server in HTTP mode. #### Environment Variables -The HTTP server supports these configuration options: +| Variable | Description | Default | +|----------|-------------|---------| +| `PERPLEXITY_API_KEY` | Your Perplexity API key | *Required* | +| `PORT` | HTTP server port | `8080` | +| `BIND_ADDRESS` | Network interface to bind to | `0.0.0.0` | +| `ALLOWED_ORIGINS` | CORS origins (comma-separated) | `*` | -- **`PORT`** - HTTP server port (default: `8080`) -- **`BIND_ADDRESS`** - Network interface to bind to (default: `127.0.0.1` for local, use `0.0.0.0` for hosted) -- **`ALLOWED_ORIGINS`** - Comma-separated list of allowed CORS origins (default: `http://localhost:3000,http://127.0.0.1:3000`, use `*` for public service) -- **`PERPLEXITY_API_KEY`** - Your Perplexity API key (required) - -#### Using Docker +#### Docker ```bash docker build -t perplexity-mcp-server . docker run -p 8080:8080 -e PERPLEXITY_API_KEY=your_key_here perplexity-mcp-server ``` -The server will be accessible at `http://localhost:8080/mcp` - -#### Using Node.js Directly +#### Node.js ```bash -npm install -npm run build -npm run start:http +export PERPLEXITY_API_KEY=your_key_here +npm install && npm run build && npm run start:http ``` -Connect your MCP client to: `http://localhost:8080/mcp` +The server will be accessible at `http://localhost:8080/mcp` ## Troubleshooting From 9e8f22f4d2381a1bd1c5869dce858bcf5eb42d3b Mon Sep 17 00:00:00 2001 From: Kesku Date: Tue, 13 Jan 2026 16:54:47 +0000 Subject: [PATCH 61/84] pass serviceOrigin --- src/index.ts | 2 +- src/server.ts | 40 +++++++++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/src/index.ts b/src/index.ts index 7bdc80c..730e888 100644 --- a/src/index.ts +++ b/src/index.ts @@ -16,7 +16,7 @@ if (!PERPLEXITY_API_KEY) { */ async function main() { try { - const server = createPerplexityServer(); + const server = createPerplexityServer("local-mcp"); const transport = new StdioServerTransport(); await server.connect(transport); } catch (error) { diff --git a/src/server.ts b/src/server.ts index 5c09f0c..e8eaa0a 100644 --- a/src/server.ts +++ b/src/server.ts @@ -104,7 +104,8 @@ export function stripThinkingTokens(content: string): string { export async function performChatCompletion( messages: Message[], model: string = "sonar-pro", - stripThinking: boolean = false + stripThinking: boolean = false, + serviceOrigin?: string ): Promise { if (!PERPLEXITY_API_KEY) { throw new Error("PERPLEXITY_API_KEY environment variable is required"); @@ -125,12 +126,16 @@ export async function performChatCompletion( let response; try { + const headers: Record = { + "Content-Type": "application/json", + "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, + }; + if (serviceOrigin) { + headers["X-Service"] = serviceOrigin; + } response = await proxyAwareFetch(url.toString(), { method: "POST", - headers: { - "Content-Type": "application/json", - "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, - }, + headers, body: JSON.stringify(body), signal: controller.signal, }); @@ -236,7 +241,8 @@ export async function performSearch( query: string, maxResults: number = 10, maxTokensPerPage: number = 1024, - country?: string + country?: string, + serviceOrigin?: string ): Promise { if (!PERPLEXITY_API_KEY) { throw new Error("PERPLEXITY_API_KEY environment variable is required"); @@ -258,12 +264,16 @@ export async function performSearch( let response; try { + const headers: Record = { + "Content-Type": "application/json", + "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, + }; + if (serviceOrigin) { + headers["X-Service"] = serviceOrigin; + } response = await proxyAwareFetch(url.toString(), { method: "POST", - headers: { - "Content-Type": "application/json", - "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, - }, + headers, body: JSON.stringify(body), signal: controller.signal, }); @@ -306,7 +316,7 @@ export async function performSearch( * * @returns The configured MCP server instance */ -export function createPerplexityServer() { +export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer({ name: "io.github.perplexityai/mcp-server", version: "0.5.2", @@ -336,7 +346,7 @@ export function createPerplexityServer() { }, async ({ messages }) => { validateMessages(messages, "perplexity_ask"); - const result = await performChatCompletion(messages, "sonar-pro"); + const result = await performChatCompletion(messages, "sonar-pro", false, serviceOrigin); return { content: [{ type: "text", text: result }], structuredContent: { response: result }, @@ -371,7 +381,7 @@ export function createPerplexityServer() { async ({ messages, strip_thinking }) => { validateMessages(messages, "perplexity_research"); const stripThinking = typeof strip_thinking === "boolean" ? strip_thinking : false; - const result = await performChatCompletion(messages, "sonar-deep-research", stripThinking); + const result = await performChatCompletion(messages, "sonar-deep-research", stripThinking, serviceOrigin); return { content: [{ type: "text", text: result }], structuredContent: { response: result }, @@ -406,7 +416,7 @@ export function createPerplexityServer() { async ({ messages, strip_thinking }) => { validateMessages(messages, "perplexity_reason"); const stripThinking = typeof strip_thinking === "boolean" ? strip_thinking : false; - const result = await performChatCompletion(messages, "sonar-reasoning-pro", stripThinking); + const result = await performChatCompletion(messages, "sonar-reasoning-pro", stripThinking, serviceOrigin); return { content: [{ type: "text", text: result }], structuredContent: { response: result }, @@ -444,7 +454,7 @@ export function createPerplexityServer() { const maxTokensPerPage = typeof max_tokens_per_page === "number" ? max_tokens_per_page : 1024; const countryCode = typeof country === "string" ? country : undefined; - const result = await performSearch(query, maxResults, maxTokensPerPage, countryCode); + const result = await performSearch(query, maxResults, maxTokensPerPage, countryCode, serviceOrigin); return { content: [{ type: "text", text: result }], structuredContent: { results: result }, From 586f6ea3666f2a72fc01008947a0ac1446f39b60 Mon Sep 17 00:00:00 2001 From: Kesku Date: Tue, 13 Jan 2026 16:58:31 +0000 Subject: [PATCH 62/84] clean up comments --- src/http.ts | 11 -------- src/index.ts | 6 ----- src/server.ts | 75 --------------------------------------------------- src/types.ts | 7 ----- 4 files changed, 99 deletions(-) diff --git a/src/http.ts b/src/http.ts index 1673189..36b28aa 100644 --- a/src/http.ts +++ b/src/http.ts @@ -6,7 +6,6 @@ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/ import { createPerplexityServer } from "./server.js"; import { logger } from "./logger.js"; -// Check for required API key const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; if (!PERPLEXITY_API_KEY) { logger.error("PERPLEXITY_API_KEY environment variable is required"); @@ -41,10 +40,6 @@ app.use(express.json()); const mcpServer = createPerplexityServer(); -/** - * POST: client-to-server messages (requests, responses, notifications) - * GET: SSE stream for server-to-client messages (notifications, requests) - */ app.all("/mcp", async (req, res) => { try { const transport = new StreamableHTTPServerTransport({ @@ -71,16 +66,10 @@ app.all("/mcp", async (req, res) => { } }); -/** - * Health check endpoint - */ app.get("/health", (req, res) => { res.json({ status: "ok", service: "perplexity-mcp-server" }); }); -/** - * Start the HTTP server - */ app.listen(PORT, BIND_ADDRESS, () => { logger.info(`Perplexity MCP Server listening on http://${BIND_ADDRESS}:${PORT}/mcp`); logger.info(`Allowed origins: ${ALLOWED_ORIGINS.join(", ")}`); diff --git a/src/index.ts b/src/index.ts index 730e888..d2897f1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,17 +3,12 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { createPerplexityServer } from "./server.js"; -// Check for required API key const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; if (!PERPLEXITY_API_KEY) { console.error("Error: PERPLEXITY_API_KEY environment variable is required"); process.exit(1); } -/** - * Initializes and runs the server using standard I/O for communication. - * Logs an error and exits if the server fails to start. - */ async function main() { try { const server = createPerplexityServer("local-mcp"); @@ -25,7 +20,6 @@ async function main() { } } -// Start the server and catch any startup errors main().catch((error) => { console.error("Fatal error running server:", error); process.exit(1); diff --git a/src/server.ts b/src/server.ts index e8eaa0a..6490ccb 100644 --- a/src/server.ts +++ b/src/server.ts @@ -10,15 +10,8 @@ import type { } from "./types.js"; import { ChatCompletionResponseSchema, SearchResponseSchema } from "./validation.js"; -// Retrieve the Perplexity API key from environment variables const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; -/** - * Gets the proxy URL from environment variables. - * Checks PERPLEXITY_PROXY, HTTPS_PROXY, HTTP_PROXY in order. - * - * @returns {string | undefined} The proxy URL if configured, undefined otherwise - */ export function getProxyUrl(): string | undefined { return process.env.PERPLEXITY_PROXY || process.env.HTTPS_PROXY || @@ -26,41 +19,22 @@ export function getProxyUrl(): string | undefined { undefined; } -/** - * Creates a proxy-aware fetch function. - * Uses undici with ProxyAgent when a proxy is configured, otherwise uses native fetch. - * - * @param {string} url - The URL to fetch - * @param {RequestInit} options - Fetch options - * @returns {Promise} The fetch response - */ export async function proxyAwareFetch(url: string, options: RequestInit = {}): Promise { const proxyUrl = getProxyUrl(); if (proxyUrl) { - // Use undici with ProxyAgent when proxy is configured const proxyAgent = new ProxyAgent(proxyUrl); const undiciOptions: UndiciRequestOptions = { ...options, dispatcher: proxyAgent, }; const response = await undiciFetch(url, undiciOptions); - // Cast to native Response type for compatibility return response as unknown as Response; } - // Use native fetch when no proxy is configured return fetch(url, options); } -/** - * Validates an array of message objects for chat completion tools. - * Ensures each message has a valid role and content field. - * - * @param {unknown} messages - The messages to validate - * @param {string} toolName - The name of the tool calling this validation (for error messages) - * @throws {Error} If messages is not an array or if any message is invalid - */ export function validateMessages(messages: unknown, toolName: string): asserts messages is Message[] { if (!Array.isArray(messages)) { throw new Error(`Invalid arguments for ${toolName}: 'messages' must be an array`); @@ -80,27 +54,10 @@ export function validateMessages(messages: unknown, toolName: string): asserts m } } -/** - * Strips thinking tokens (content within ... tags) from the response. - * This helps reduce context usage when the thinking process is not needed. - * - * @param {string} content - The content to process - * @returns {string} The content with thinking tokens removed - */ export function stripThinkingTokens(content: string): string { return content.replace(/[\s\S]*?<\/think>/g, '').trim(); } -/** - * Performs a chat completion by sending a request to the Perplexity API. - * Appends citations to the returned message content if they exist. - * - * @param {Message[]} messages - An array of message objects. - * @param {string} model - The model to use for the completion. - * @param {boolean} stripThinking - If true, removes ... tags from the response. - * @returns {Promise} The chat completion result with appended citations. - * @throws Will throw an error if the API request fails. - */ export async function performChatCompletion( messages: Message[], model: string = "sonar-pro", @@ -114,7 +71,6 @@ export async function performChatCompletion( // Read timeout fresh each time to respect env var changes const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); - // Construct the API endpoint URL and request body const url = new URL("https://api.perplexity.ai/chat/completions"); const body = { model: model, @@ -148,7 +104,6 @@ export async function performChatCompletion( throw new Error(`Network error while calling Perplexity API: ${error}`); } - // Check for non-successful HTTP status if (!response.ok) { let errorText; try { @@ -180,15 +135,12 @@ export async function performChatCompletion( const firstChoice = data.choices[0]; - // Directly retrieve the main message content from the response let messageContent = firstChoice.message.content; - // Strip thinking tokens if requested if (stripThinking) { messageContent = stripThinkingTokens(messageContent); } - // If citations are provided, append them to the message content if (data.citations && Array.isArray(data.citations) && data.citations.length > 0) { messageContent += "\n\nCitations:\n"; data.citations.forEach((citation, index) => { @@ -199,12 +151,6 @@ export async function performChatCompletion( return messageContent; } -/** - * Formats search results from the Perplexity Search API into a readable string. - * - * @param {SearchResponse} data - The search response data from the API. - * @returns {string} Formatted search results. - */ export function formatSearchResults(data: SearchResponse): string { if (!data.results || !Array.isArray(data.results)) { return "No search results found."; @@ -227,16 +173,6 @@ export function formatSearchResults(data: SearchResponse): string { return formattedResults; } -/** - * Performs a web search using the Perplexity Search API. - * - * @param {string} query - The search query string. - * @param {number} maxResults - Maximum number of results to return (1-20). - * @param {number} maxTokensPerPage - Maximum tokens to extract per webpage. - * @param {string} country - Optional ISO country code for regional results. - * @returns {Promise} The formatted search results. - * @throws Will throw an error if the API request fails. - */ export async function performSearch( query: string, maxResults: number = 10, @@ -286,7 +222,6 @@ export async function performSearch( throw new Error(`Network error while calling Perplexity Search API: ${error}`); } - // Check for non-successful HTTP status if (!response.ok) { let errorText; try { @@ -310,19 +245,12 @@ export async function performSearch( return formatSearchResults(data); } -/** - * Creates and configures the Perplexity MCP server with all tools. - * This factory function is transport-agnostic and returns a configured server instance. - * - * @returns The configured MCP server instance - */ export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer({ name: "io.github.perplexityai/mcp-server", version: "0.5.2", }); - // Register perplexity_ask tool server.registerTool( "perplexity_ask", { @@ -354,7 +282,6 @@ export function createPerplexityServer(serviceOrigin?: string) { } ); - // Register perplexity_research tool server.registerTool( "perplexity_research", { @@ -389,7 +316,6 @@ export function createPerplexityServer(serviceOrigin?: string) { } ); - // Register perplexity_reason tool server.registerTool( "perplexity_reason", { @@ -424,7 +350,6 @@ export function createPerplexityServer(serviceOrigin?: string) { } ); - // Register perplexity_search tool server.registerTool( "perplexity_search", { diff --git a/src/types.ts b/src/types.ts index dc214c5..2721242 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,12 +1,5 @@ -/** - * Type definitions for the Perplexity MCP Server - */ - import type { ProxyAgent } from "undici"; -/** - * Represents a single message in a conversation - */ export interface Message { role: string; content: string; From 1d12a0e7b868023fc6d22a5bbfe33f01237f4f94 Mon Sep 17 00:00:00 2001 From: Kesku Date: Tue, 13 Jan 2026 17:01:51 +0000 Subject: [PATCH 63/84] bump version to 0.6.0 --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/server.ts | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 060e133..72152cf 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.5.2" + "version": "0.6.0" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.5.2", + "version": "0.6.0", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index 45c07b5..0be5827 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.5.2", + "version": "0.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.5.2", + "version": "0.6.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 86872d7..eb23409 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.5.2", + "version": "0.6.0", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 2022ece..3110399 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.5.2", + "version": "0.6.0", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.5.2", + "version": "0.6.0", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index 6490ccb..386b81f 100644 --- a/src/server.ts +++ b/src/server.ts @@ -248,7 +248,7 @@ export async function performSearch( export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer({ name: "io.github.perplexityai/mcp-server", - version: "0.5.2", + version: "0.6.0", }); server.registerTool( From 44d843ca66fcd7c5cd57fdc38ae55bde7a2a6de7 Mon Sep 17 00:00:00 2001 From: Kesku Date: Tue, 13 Jan 2026 17:34:08 +0000 Subject: [PATCH 64/84] patch dependency vulnerabilities, fix type inference issues from sdk, version bump --- .claude-plugin/marketplace.json | 4 +- package-lock.json | 1296 ++++++++++++++++--------------- package.json | 2 +- server.json | 4 +- src/server.ts | 110 +-- 5 files changed, 748 insertions(+), 668 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 72152cf..3f08bc2 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.6.0" + "version": "0.6.1" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.6.0", + "version": "0.6.1", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index 0be5827..dca8a8c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.6.0", + "version": "0.6.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.6.0", + "version": "0.6.1", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", @@ -53,13 +53,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", + "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.5" + "@babel/types": "^7.28.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -69,9 +69,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", + "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", "dev": true, "license": "MIT", "dependencies": { @@ -93,9 +93,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", - "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", "cpu": [ "ppc64" ], @@ -110,9 +110,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", - "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", "cpu": [ "arm" ], @@ -127,9 +127,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", - "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", "cpu": [ "arm64" ], @@ -144,9 +144,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", - "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", "cpu": [ "x64" ], @@ -161,9 +161,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", - "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", "cpu": [ "arm64" ], @@ -178,9 +178,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", - "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", "cpu": [ "x64" ], @@ -195,9 +195,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", - "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", "cpu": [ "arm64" ], @@ -212,9 +212,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", - "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", "cpu": [ "x64" ], @@ -229,9 +229,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", - "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", "cpu": [ "arm" ], @@ -246,9 +246,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", - "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", "cpu": [ "arm64" ], @@ -263,9 +263,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", - "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", "cpu": [ "ia32" ], @@ -280,9 +280,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", - "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", "cpu": [ "loong64" ], @@ -297,9 +297,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", - "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", "cpu": [ "mips64el" ], @@ -314,9 +314,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", - "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", "cpu": [ "ppc64" ], @@ -331,9 +331,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", - "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", "cpu": [ "riscv64" ], @@ -348,9 +348,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", - "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", "cpu": [ "s390x" ], @@ -365,9 +365,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", - "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", "cpu": [ "x64" ], @@ -382,9 +382,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", - "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", "cpu": [ "arm64" ], @@ -399,9 +399,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", - "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", "cpu": [ "x64" ], @@ -416,9 +416,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", - "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", "cpu": [ "arm64" ], @@ -433,9 +433,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", - "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", "cpu": [ "x64" ], @@ -450,9 +450,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", - "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", "cpu": [ "arm64" ], @@ -467,9 +467,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", - "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", "cpu": [ "x64" ], @@ -484,9 +484,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", - "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", "cpu": [ "arm64" ], @@ -501,9 +501,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", - "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", "cpu": [ "ia32" ], @@ -518,9 +518,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", - "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", "cpu": [ "x64" ], @@ -534,6 +534,18 @@ "node": ">=18" } }, + "node_modules/@hono/node-server": { + "version": "1.19.8", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.8.tgz", + "integrity": "sha512-0/g2lIOPzX8f3vzW1ggQgvG5mjtFBDBHFAzI5SFAi2DzSqS9luJwqg9T6O/gKYLi+inS7eNxBeIFkkghIPvrMA==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -563,11 +575,12 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.21.1.tgz", - "integrity": "sha512-UyLFcJLDvUuZbGnaQqXFT32CpPpGj7VS19roLut6gkQVhb439xUzYWbsUvdI3ZPL+2hnFosuugtYWE0Mcs1rmQ==", + "version": "1.25.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", + "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", "license": "MIT", "dependencies": { + "@hono/node-server": "^1.19.7", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", @@ -577,20 +590,26 @@ "eventsource-parser": "^3.0.0", "express": "^5.0.1", "express-rate-limit": "^7.5.0", + "jose": "^6.1.1", + "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "@cfworker/json-schema": "^4.1.1" + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { "@cfworker/json-schema": { "optional": true + }, + "zod": { + "optional": false } } }, @@ -608,35 +627,40 @@ } }, "node_modules/@modelcontextprotocol/sdk/node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/@modelcontextprotocol/sdk/node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/@modelcontextprotocol/sdk/node_modules/cookie-signature": { @@ -648,19 +672,37 @@ "node": ">=6.6.0" } }, + "node_modules/@modelcontextprotocol/sdk/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/@modelcontextprotocol/sdk/node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.2.0", + "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", + "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", @@ -691,9 +733,9 @@ } }, "node_modules/@modelcontextprotocol/sdk/node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -704,7 +746,11 @@ "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/@modelcontextprotocol/sdk/node_modules/fresh": { @@ -716,6 +762,22 @@ "node": ">= 0.8" } }, + "node_modules/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/@modelcontextprotocol/sdk/node_modules/media-typer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", @@ -747,17 +809,27 @@ } }, "node_modules/@modelcontextprotocol/sdk/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/@modelcontextprotocol/sdk/node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -767,47 +839,36 @@ "node": ">= 0.6" } }, - "node_modules/@modelcontextprotocol/sdk/node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@modelcontextprotocol/sdk/node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "^4.3.5", + "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "statuses": "^2.0.2" }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -817,6 +878,10 @@ }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { @@ -872,9 +937,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", - "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", "cpu": [ "arm" ], @@ -886,9 +951,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", - "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", "cpu": [ "arm64" ], @@ -900,9 +965,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", - "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", "cpu": [ "arm64" ], @@ -914,9 +979,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", - "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", "cpu": [ "x64" ], @@ -928,9 +993,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", - "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", "cpu": [ "arm64" ], @@ -942,9 +1007,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", - "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", "cpu": [ "x64" ], @@ -956,9 +1021,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", - "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", "cpu": [ "arm" ], @@ -970,9 +1035,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", - "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", "cpu": [ "arm" ], @@ -984,9 +1049,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", - "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", "cpu": [ "arm64" ], @@ -998,9 +1063,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", - "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", "cpu": [ "arm64" ], @@ -1012,9 +1077,23 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", - "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", "cpu": [ "loong64" ], @@ -1026,9 +1105,23 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", - "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", "cpu": [ "ppc64" ], @@ -1040,9 +1133,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", - "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", "cpu": [ "riscv64" ], @@ -1054,9 +1147,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", - "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", "cpu": [ "riscv64" ], @@ -1068,9 +1161,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", - "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", "cpu": [ "s390x" ], @@ -1082,9 +1175,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", - "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", "cpu": [ "x64" ], @@ -1096,9 +1189,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", - "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", "cpu": [ "x64" ], @@ -1109,10 +1202,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", - "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", "cpu": [ "arm64" ], @@ -1124,9 +1231,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", - "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", "cpu": [ "arm64" ], @@ -1138,9 +1245,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", - "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", "cpu": [ "ia32" ], @@ -1152,9 +1259,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", - "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", "cpu": [ "x64" ], @@ -1166,9 +1273,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", - "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", "cpu": [ "x64" ], @@ -1180,9 +1287,9 @@ ] }, "node_modules/@standard-schema/spec": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", - "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, "license": "MIT" }, @@ -1243,21 +1350,21 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.5.tgz", - "integrity": "sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz", + "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==", "dev": true, "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", - "@types/serve-static": "^1" + "@types/serve-static": "^2" } }, "node_modules/@types/express-serve-static-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", - "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1274,17 +1381,10 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/node": { - "version": "20.19.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.17.tgz", - "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", + "version": "20.19.29", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.29.tgz", + "integrity": "sha512-YrT9ArrGaHForBaCNwFjoqJWmn8G1Pr7+BH/vwyLHciA9qT/wSiuOhxGCT50JA5xLvFBd6PIiGkE3afxcPE1nw==", "dev": true, "license": "MIT", "dependencies": { @@ -1316,53 +1416,40 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", - "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==", "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "<1" - } - }, - "node_modules/@types/serve-static/node_modules/@types/send": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", - "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@vitest/coverage-v8": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.5.tgz", - "integrity": "sha512-Yn5Dx0UVvllE3uatQw+ftObWtM/TjAOdbd8WvygaR04iyFXdNmtvZ/nJ2/JndyzfPQtbAWw0F+GJY5+lgM/7qg==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.17.tgz", + "integrity": "sha512-/6zU2FLGg0jsd+ePZcwHRy3+WpNTBBhDY56P4JTRqUN/Dp6CvOEa9HrikcQ4KfV2b2kAHUFB4dl1SuocWXSFEw==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.0.5", - "ast-v8-to-istanbul": "^0.3.5", - "debug": "^4.4.3", + "@vitest/utils": "4.0.17", + "ast-v8-to-istanbul": "^0.3.10", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.2.0", - "magicast": "^0.3.5", - "std-env": "^3.9.0", + "magicast": "^0.5.1", + "obug": "^2.1.1", + "std-env": "^3.10.0", "tinyrainbow": "^3.0.3" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "4.0.5", - "vitest": "4.0.5" + "@vitest/browser": "4.0.17", + "vitest": "4.0.17" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -1371,17 +1458,17 @@ } }, "node_modules/@vitest/expect": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.5.tgz", - "integrity": "sha512-DJctLVlKoddvP/G389oGmKWNG6GD9frm2FPXARziU80Rjo7SIYxQzb2YFzmQ4fVD3Q5utUYY8nUmWrqsuIlIXQ==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.17.tgz", + "integrity": "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.5", - "@vitest/utils": "4.0.5", - "chai": "^6.0.1", + "@vitest/spy": "4.0.17", + "@vitest/utils": "4.0.17", + "chai": "^6.2.1", "tinyrainbow": "^3.0.3" }, "funding": { @@ -1389,15 +1476,15 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.5.tgz", - "integrity": "sha512-iYHIy72LfbK+mL5W8zXROp6oOcJKXWeKcNjcPPsqoa18qIEDrhB6/Z08o0wRajTd6SSSDNw8NCSIHVNOMpz0mw==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.17.tgz", + "integrity": "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.5", + "@vitest/spy": "4.0.17", "estree-walker": "^3.0.3", - "magic-string": "^0.30.19" + "magic-string": "^0.30.21" }, "funding": { "url": "https://opencollective.com/vitest" @@ -1416,9 +1503,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.5.tgz", - "integrity": "sha512-t1T/sSdsYyNc5AZl0EMeD0jW9cpJe2cODP0R++ZQe1kTkpgrwEfxGFR/yCG4w8ZybizbXRTHU7lE8sTDD/QsGw==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.17.tgz", + "integrity": "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==", "dev": true, "license": "MIT", "dependencies": { @@ -1429,13 +1516,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.5.tgz", - "integrity": "sha512-CQVVe+YEeKSiFBD5gBAmRDQglm4PnMBYzeTmt06t5iWtsUN9StQeeKhYCea/oaqBYilf8sARG6fSctUcEL/UmQ==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.17.tgz", + "integrity": "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.5", + "@vitest/utils": "4.0.17", "pathe": "^2.0.3" }, "funding": { @@ -1443,14 +1530,14 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.5.tgz", - "integrity": "sha512-jfmSAeR6xYNEvcD+/RxFGA1bzpqHtkVhgxo2cxXia+Q3xX7m6GpZij07rz+WyQcA/xEGn4eIS1OItkMyWsGBmQ==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.17.tgz", + "integrity": "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.5", - "magic-string": "^0.30.19", + "@vitest/pretty-format": "4.0.17", + "magic-string": "^0.30.21", "pathe": "^2.0.3" }, "funding": { @@ -1458,9 +1545,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.5.tgz", - "integrity": "sha512-TUmVQpAQign7r8+EnZsgTF3vY9BdGofTUge1rGNbnHn2IN3FChiQoT9lrPz7A7AVUZJU2LAZXl4v66HhsNMhoA==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.17.tgz", + "integrity": "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==", "dev": true, "license": "MIT", "funding": { @@ -1468,13 +1555,13 @@ } }, "node_modules/@vitest/utils": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.5.tgz", - "integrity": "sha512-V5RndUgCB5/AfNvK9zxGCrRs99IrPYtMTIdUzJMMFs9nrmE5JXExIEfjVtUteyTRiLfCm+dCRMHf/Uu7Mm8/dg==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.17.tgz", + "integrity": "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.5", + "@vitest/pretty-format": "4.0.17", "tinyrainbow": "^3.0.3" }, "funding": { @@ -1544,9 +1631,9 @@ } }, "node_modules/ast-v8-to-istanbul": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.8.tgz", - "integrity": "sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==", + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.10.tgz", + "integrity": "sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1556,66 +1643,39 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/body-parser/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -1673,9 +1733,9 @@ } }, "node_modules/chai": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.0.tgz", - "integrity": "sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", "engines": { @@ -1704,18 +1764,18 @@ } }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "license": "MIT" }, "node_modules/cors": { @@ -1746,20 +1806,12 @@ } }, "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "ms": "2.0.0" } }, "node_modules/depd": { @@ -1858,9 +1910,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", - "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1871,32 +1923,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.11", - "@esbuild/android-arm": "0.25.11", - "@esbuild/android-arm64": "0.25.11", - "@esbuild/android-x64": "0.25.11", - "@esbuild/darwin-arm64": "0.25.11", - "@esbuild/darwin-x64": "0.25.11", - "@esbuild/freebsd-arm64": "0.25.11", - "@esbuild/freebsd-x64": "0.25.11", - "@esbuild/linux-arm": "0.25.11", - "@esbuild/linux-arm64": "0.25.11", - "@esbuild/linux-ia32": "0.25.11", - "@esbuild/linux-loong64": "0.25.11", - "@esbuild/linux-mips64el": "0.25.11", - "@esbuild/linux-ppc64": "0.25.11", - "@esbuild/linux-riscv64": "0.25.11", - "@esbuild/linux-s390x": "0.25.11", - "@esbuild/linux-x64": "0.25.11", - "@esbuild/netbsd-arm64": "0.25.11", - "@esbuild/netbsd-x64": "0.25.11", - "@esbuild/openbsd-arm64": "0.25.11", - "@esbuild/openbsd-x64": "0.25.11", - "@esbuild/openharmony-arm64": "0.25.11", - "@esbuild/sunos-x64": "0.25.11", - "@esbuild/win32-arm64": "0.25.11", - "@esbuild/win32-ia32": "0.25.11", - "@esbuild/win32-x64": "0.25.11" + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" } }, "node_modules/escape-html": { @@ -1991,6 +2043,16 @@ "node": ">=4" } }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/execa/node_modules/shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -2028,9 +2090,9 @@ } }, "node_modules/expect-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", - "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2038,39 +2100,39 @@ } }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -2098,21 +2160,6 @@ "express": ">= 4.11" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -2153,9 +2200,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { @@ -2176,38 +2223,23 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -2372,6 +2404,16 @@ "node": ">= 0.4" } }, + "node_modules/hono": { + "version": "4.11.4", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", + "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -2380,28 +2422,32 @@ "license": "MIT" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" @@ -2528,21 +2574,6 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/istanbul-reports": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", @@ -2557,6 +2588,15 @@ "node": ">=8" } }, + "node_modules/jose": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", + "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", @@ -2570,6 +2610,12 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, "node_modules/magic-string": { "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", @@ -2581,15 +2627,15 @@ } }, "node_modules/magicast": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", - "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", + "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.25.4", - "@babel/types": "^7.25.4", - "source-map-js": "^1.2.0" + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "source-map-js": "^1.2.1" } }, "node_modules/make-dir": { @@ -2608,19 +2654,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -2725,9 +2758,9 @@ } }, "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/nanoid": { @@ -2809,6 +2842,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -2899,9 +2943,9 @@ } }, "node_modules/pkce-challenge": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", - "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "license": "MIT", "engines": { "node": ">=16.20.0" @@ -2961,12 +3005,12 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -3006,18 +3050,34 @@ } }, "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/rechoir": { @@ -3084,9 +3144,9 @@ } }, "node_modules/rollup": { - "version": "4.52.5", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", - "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", + "version": "4.55.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", "dev": true, "license": "MIT", "dependencies": { @@ -3100,28 +3160,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.5", - "@rollup/rollup-android-arm64": "4.52.5", - "@rollup/rollup-darwin-arm64": "4.52.5", - "@rollup/rollup-darwin-x64": "4.52.5", - "@rollup/rollup-freebsd-arm64": "4.52.5", - "@rollup/rollup-freebsd-x64": "4.52.5", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", - "@rollup/rollup-linux-arm-musleabihf": "4.52.5", - "@rollup/rollup-linux-arm64-gnu": "4.52.5", - "@rollup/rollup-linux-arm64-musl": "4.52.5", - "@rollup/rollup-linux-loong64-gnu": "4.52.5", - "@rollup/rollup-linux-ppc64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-gnu": "4.52.5", - "@rollup/rollup-linux-riscv64-musl": "4.52.5", - "@rollup/rollup-linux-s390x-gnu": "4.52.5", - "@rollup/rollup-linux-x64-gnu": "4.52.5", - "@rollup/rollup-linux-x64-musl": "4.52.5", - "@rollup/rollup-openharmony-arm64": "4.52.5", - "@rollup/rollup-win32-arm64-msvc": "4.52.5", - "@rollup/rollup-win32-ia32-msvc": "4.52.5", - "@rollup/rollup-win32-x64-gnu": "4.52.5", - "@rollup/rollup-win32-x64-msvc": "4.52.5", + "@rollup/rollup-android-arm-eabi": "4.55.1", + "@rollup/rollup-android-arm64": "4.55.1", + "@rollup/rollup-darwin-arm64": "4.55.1", + "@rollup/rollup-darwin-x64": "4.55.1", + "@rollup/rollup-freebsd-arm64": "4.55.1", + "@rollup/rollup-freebsd-x64": "4.55.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", + "@rollup/rollup-linux-arm64-gnu": "4.55.1", + "@rollup/rollup-linux-arm64-musl": "4.55.1", + "@rollup/rollup-linux-loong64-gnu": "4.55.1", + "@rollup/rollup-linux-loong64-musl": "4.55.1", + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", + "@rollup/rollup-linux-ppc64-musl": "4.55.1", + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", + "@rollup/rollup-linux-riscv64-musl": "4.55.1", + "@rollup/rollup-linux-s390x-gnu": "4.55.1", + "@rollup/rollup-linux-x64-gnu": "4.55.1", + "@rollup/rollup-linux-x64-musl": "4.55.1", + "@rollup/rollup-openbsd-x64": "4.55.1", + "@rollup/rollup-openharmony-arm64": "4.55.1", + "@rollup/rollup-win32-arm64-msvc": "4.55.1", + "@rollup/rollup-win32-ia32-msvc": "4.55.1", + "@rollup/rollup-win32-x64-gnu": "4.55.1", + "@rollup/rollup-win32-x64-msvc": "4.55.1", "fsevents": "~2.3.2" } }, @@ -3141,6 +3204,29 @@ "node": ">= 18" } }, + "node_modules/router/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/router/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/router/node_modules/path-to-regexp": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", @@ -3202,73 +3288,58 @@ "license": "MIT" }, "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" @@ -3441,9 +3512,9 @@ "license": "MIT" }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -3500,11 +3571,14 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/tinyglobby": { "version": "0.2.15", @@ -3587,13 +3661,13 @@ } }, "node_modules/tsx": { - "version": "4.20.6", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", - "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "~0.25.0", + "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" }, "bin": { @@ -3634,9 +3708,9 @@ } }, "node_modules/undici": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.22.0.tgz", - "integrity": "sha512-hU/10obOIu62MGYjdskASR3CUAiYaFTtC9Pa6vHyf//mAipSvSQg6od2CnJswq7fvzNS3zJhxoRkgNVaHurWKw==", + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", + "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", "license": "MIT", "engines": { "node": ">=18.17" @@ -3677,13 +3751,13 @@ } }, "node_modules/vite": { - "version": "7.1.12", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", - "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", @@ -3783,28 +3857,28 @@ } }, "node_modules/vitest": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.5.tgz", - "integrity": "sha512-4H+J28MI5oeYgGg3h5BFSkQ1g/2GKK1IR8oorH3a6EQQbb7CwjbnyBjH4PGxw9/6vpwAPNzaeUMp4Js4WJmdXQ==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.17.tgz", + "integrity": "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.5", - "@vitest/mocker": "4.0.5", - "@vitest/pretty-format": "4.0.5", - "@vitest/runner": "4.0.5", - "@vitest/snapshot": "4.0.5", - "@vitest/spy": "4.0.5", - "@vitest/utils": "4.0.5", - "debug": "^4.4.3", + "@vitest/expect": "4.0.17", + "@vitest/mocker": "4.0.17", + "@vitest/pretty-format": "4.0.17", + "@vitest/runner": "4.0.17", + "@vitest/snapshot": "4.0.17", + "@vitest/spy": "4.0.17", + "@vitest/utils": "4.0.17", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", - "magic-string": "^0.30.19", + "magic-string": "^0.30.21", + "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", - "std-env": "^3.9.0", + "std-env": "^3.10.0", "tinybench": "^2.9.0", - "tinyexec": "^0.3.2", + "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.0.3", "vite": "^6.0.0 || ^7.0.0", @@ -3821,12 +3895,12 @@ }, "peerDependencies": { "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", + "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.5", - "@vitest/browser-preview": "4.0.5", - "@vitest/browser-webdriverio": "4.0.5", - "@vitest/ui": "4.0.5", + "@vitest/browser-playwright": "4.0.17", + "@vitest/browser-preview": "4.0.17", + "@vitest/browser-webdriverio": "4.0.17", + "@vitest/ui": "4.0.17", "happy-dom": "*", "jsdom": "*" }, @@ -3834,7 +3908,7 @@ "@edge-runtime/vm": { "optional": true }, - "@types/debug": { + "@opentelemetry/api": { "optional": true }, "@types/node": { @@ -3921,12 +3995,12 @@ } }, "node_modules/zod-to-json-schema": { - "version": "3.24.6", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", - "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", + "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", "license": "ISC", "peerDependencies": { - "zod": "^3.24.1" + "zod": "^3.25 || ^4" } } } diff --git a/package.json b/package.json index eb23409..18aabfc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.6.0", + "version": "0.6.1", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 3110399..4404dcc 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.6.0", + "version": "0.6.1", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.6.0", + "version": "0.6.1", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index 386b81f..afdced9 100644 --- a/src/server.ts +++ b/src/server.ts @@ -248,9 +248,27 @@ export async function performSearch( export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer({ name: "io.github.perplexityai/mcp-server", - version: "0.6.0", + version: "0.6.1", }); + const messageSchema = z.object({ + role: z.string().describe("Role of the message (e.g., system, user, assistant)"), + content: z.string().describe("The content of the message"), + }); + + const messagesField = z.array(messageSchema).describe("Array of conversation messages"); + + const stripThinkingField = z.boolean().optional() + .describe("If true, removes ... tags and their content from the response to save context tokens. Default is false."); + + const responseOutputSchema = { + response: z.string().describe("The response from Perplexity"), + }; + + // Input schemas + const messagesOnlyInputSchema = { messages: messagesField }; + const messagesWithStripThinkingInputSchema = { messages: messagesField, strip_thinking: stripThinkingField }; + server.registerTool( "perplexity_ask", { @@ -258,25 +276,19 @@ export function createPerplexityServer(serviceOrigin?: string) { description: "Engages in a conversation using the Sonar API. " + "Accepts an array of messages (each with a role and content) " + "and returns a chat completion response from the Perplexity model.", - inputSchema: { - messages: z.array(z.object({ - role: z.string().describe("Role of the message (e.g., system, user, assistant)"), - content: z.string().describe("The content of the message"), - })).describe("Array of conversation messages"), - }, - outputSchema: { - response: z.string().describe("The chat completion response"), - }, + inputSchema: messagesOnlyInputSchema as any, + outputSchema: responseOutputSchema as any, annotations: { readOnlyHint: true, openWorldHint: true, }, }, - async ({ messages }) => { + async (args: any) => { + const { messages } = args as { messages: Message[] }; validateMessages(messages, "perplexity_ask"); const result = await performChatCompletion(messages, "sonar-pro", false, serviceOrigin); return { - content: [{ type: "text", text: result }], + content: [{ type: "text" as const, text: result }], structuredContent: { response: result }, }; } @@ -289,28 +301,20 @@ export function createPerplexityServer(serviceOrigin?: string) { description: "Performs deep research using the Perplexity API. " + "Accepts an array of messages (each with a role and content) " + "and returns a comprehensive research response with citations.", - inputSchema: { - messages: z.array(z.object({ - role: z.string().describe("Role of the message (e.g., system, user, assistant)"), - content: z.string().describe("The content of the message"), - })).describe("Array of conversation messages"), - strip_thinking: z.boolean().optional() - .describe("If true, removes ... tags and their content from the response to save context tokens. Default is false."), - }, - outputSchema: { - response: z.string().describe("The research response"), - }, + inputSchema: messagesWithStripThinkingInputSchema as any, + outputSchema: responseOutputSchema as any, annotations: { readOnlyHint: true, openWorldHint: true, }, }, - async ({ messages, strip_thinking }) => { + async (args: any) => { + const { messages, strip_thinking } = args as { messages: Message[]; strip_thinking?: boolean }; validateMessages(messages, "perplexity_research"); const stripThinking = typeof strip_thinking === "boolean" ? strip_thinking : false; const result = await performChatCompletion(messages, "sonar-deep-research", stripThinking, serviceOrigin); return { - content: [{ type: "text", text: result }], + content: [{ type: "text" as const, text: result }], structuredContent: { response: result }, }; } @@ -323,33 +327,39 @@ export function createPerplexityServer(serviceOrigin?: string) { description: "Performs reasoning tasks using the Perplexity API. " + "Accepts an array of messages (each with a role and content) " + "and returns a well-reasoned response using the sonar-reasoning-pro model.", - inputSchema: { - messages: z.array(z.object({ - role: z.string().describe("Role of the message (e.g., system, user, assistant)"), - content: z.string().describe("The content of the message"), - })).describe("Array of conversation messages"), - strip_thinking: z.boolean().optional() - .describe("If true, removes ... tags and their content from the response to save context tokens. Default is false."), - }, - outputSchema: { - response: z.string().describe("The reasoning response"), - }, + inputSchema: messagesWithStripThinkingInputSchema as any, + outputSchema: responseOutputSchema as any, annotations: { readOnlyHint: true, openWorldHint: true, }, }, - async ({ messages, strip_thinking }) => { + async (args: any) => { + const { messages, strip_thinking } = args as { messages: Message[]; strip_thinking?: boolean }; validateMessages(messages, "perplexity_reason"); const stripThinking = typeof strip_thinking === "boolean" ? strip_thinking : false; const result = await performChatCompletion(messages, "sonar-reasoning-pro", stripThinking, serviceOrigin); return { - content: [{ type: "text", text: result }], + content: [{ type: "text" as const, text: result }], structuredContent: { response: result }, }; } ); + const searchInputSchema = { + query: z.string().describe("Search query string"), + max_results: z.number().min(1).max(20).optional() + .describe("Maximum number of results to return (1-20, default: 10)"), + max_tokens_per_page: z.number().min(256).max(2048).optional() + .describe("Maximum tokens to extract per webpage (default: 1024)"), + country: z.string().optional() + .describe("ISO 3166-1 alpha-2 country code for regional results (e.g., 'US', 'GB')"), + }; + + const searchOutputSchema = { + results: z.string().describe("Formatted search results"), + }; + server.registerTool( "perplexity_search", { @@ -357,31 +367,27 @@ export function createPerplexityServer(serviceOrigin?: string) { description: "Performs web search using the Perplexity Search API. " + "Returns ranked search results with titles, URLs, snippets, and metadata. " + "Perfect for finding up-to-date facts, news, or specific information.", - inputSchema: { - query: z.string().describe("Search query string"), - max_results: z.number().min(1).max(20).optional() - .describe("Maximum number of results to return (1-20, default: 10)"), - max_tokens_per_page: z.number().min(256).max(2048).optional() - .describe("Maximum tokens to extract per webpage (default: 1024)"), - country: z.string().optional() - .describe("ISO 3166-1 alpha-2 country code for regional results (e.g., 'US', 'GB')"), - }, - outputSchema: { - results: z.string().describe("Formatted search results"), - }, + inputSchema: searchInputSchema as any, + outputSchema: searchOutputSchema as any, annotations: { readOnlyHint: true, openWorldHint: true, }, }, - async ({ query, max_results, max_tokens_per_page, country }) => { + async (args: any) => { + const { query, max_results, max_tokens_per_page, country } = args as { + query: string; + max_results?: number; + max_tokens_per_page?: number; + country?: string; + }; const maxResults = typeof max_results === "number" ? max_results : 10; const maxTokensPerPage = typeof max_tokens_per_page === "number" ? max_tokens_per_page : 1024; const countryCode = typeof country === "string" ? country : undefined; const result = await performSearch(query, maxResults, maxTokensPerPage, countryCode, serviceOrigin); return { - content: [{ type: "text", text: result }], + content: [{ type: "text" as const, text: result }], structuredContent: { results: result }, }; } From b7aba08a76b2b9084d6ce7f16ae439ef0a190332 Mon Sep 17 00:00:00 2001 From: Mirhan Date: Thu, 22 Jan 2026 11:15:05 +0300 Subject: [PATCH 65/84] feat: add configurable base URL via PERPLEXITY_BASE_URL env var Allow users to override the default Perplexity API base URL by setting the PERPLEXITY_BASE_URL environment variable. Defaults to https://api.perplexity.ai if not set. Co-Authored-By: Claude --- README.md | 4 +++- src/server.ts | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 83e66b4..18a4d84 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,8 @@ Advanced reasoning and problem-solving using the `sonar-reasoning-pro` model. Pe 1. Get your Perplexity API Key from the [API Portal](https://www.perplexity.ai/account/api/group) 2. Replace `your_key_here` in the configurations below with your API key 3. (Optional) Set timeout: `PERPLEXITY_TIMEOUT_MS=600000` (default: 5 minutes) -4. (Optional) Set log level: `PERPLEXITY_LOG_LEVEL=DEBUG|INFO|WARN|ERROR` (default: ERROR) +4. (Optional) Set custom base URL: `PERPLEXITY_BASE_URL=https://your-custom-url.com` (default: https://api.perplexity.ai) +5. (Optional) Set log level: `PERPLEXITY_LOG_LEVEL=DEBUG|INFO|WARN|ERROR` (default: ERROR) ### Claude Code @@ -145,6 +146,7 @@ For cloud or shared deployments, run the server in HTTP mode. | Variable | Description | Default | |----------|-------------|---------| | `PERPLEXITY_API_KEY` | Your Perplexity API key | *Required* | +| `PERPLEXITY_BASE_URL` | Custom base URL for API requests | `https://api.perplexity.ai` | | `PORT` | HTTP server port | `8080` | | `BIND_ADDRESS` | Network interface to bind to | `0.0.0.0` | | `ALLOWED_ORIGINS` | CORS origins (comma-separated) | `*` | diff --git a/src/server.ts b/src/server.ts index afdced9..508000e 100644 --- a/src/server.ts +++ b/src/server.ts @@ -11,6 +11,7 @@ import type { import { ChatCompletionResponseSchema, SearchResponseSchema } from "./validation.js"; const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; +const PERPLEXITY_BASE_URL = process.env.PERPLEXITY_BASE_URL || "https://api.perplexity.ai"; export function getProxyUrl(): string | undefined { return process.env.PERPLEXITY_PROXY || @@ -71,7 +72,7 @@ export async function performChatCompletion( // Read timeout fresh each time to respect env var changes const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); - const url = new URL("https://api.perplexity.ai/chat/completions"); + const url = new URL(`${PERPLEXITY_BASE_URL}/chat/completions`); const body = { model: model, messages: messages, @@ -187,7 +188,7 @@ export async function performSearch( // Read timeout fresh each time to respect env var changes const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); - const url = new URL("https://api.perplexity.ai/search"); + const url = new URL(`${PERPLEXITY_BASE_URL}/search`); const body: SearchRequestBody = { query: query, max_results: maxResults, From 3f15235fb04698bff33bff673d4725842371cc1d Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 28 Jan 2026 10:50:41 -0800 Subject: [PATCH 66/84] bump version to 0.6.2 --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/server.ts | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 3f08bc2..9471d81 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.6.1" + "version": "0.6.2" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.6.1", + "version": "0.6.2", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index dca8a8c..d6ea685 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.6.1", + "version": "0.6.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.6.1", + "version": "0.6.2", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 18aabfc..0489e85 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.6.1", + "version": "0.6.2", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 4404dcc..9dc549a 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.6.1", + "version": "0.6.2", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.6.1", + "version": "0.6.2", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index 508000e..a2a6f1f 100644 --- a/src/server.ts +++ b/src/server.ts @@ -249,7 +249,7 @@ export async function performSearch( export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer({ name: "io.github.perplexityai/mcp-server", - version: "0.6.1", + version: "0.6.2", }); const messageSchema = z.object({ From 5a5e7157680226542712a982d22bcf038598b429 Mon Sep 17 00:00:00 2001 From: Bobby Hyam Date: Fri, 13 Feb 2026 21:42:02 +0000 Subject: [PATCH 67/84] feat: improve agent ergonomics with better tool descriptions and disambiguation Rewrite tool descriptions to be action-first with clear use-case guidance, add server-level instructions, constrain role to enum, add idempotentHint, and improve output schema descriptions. Co-Authored-By: Claude Opus 4.6 --- src/server.ts | 61 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/src/server.ts b/src/server.ts index a2a6f1f..ff2285a 100644 --- a/src/server.ts +++ b/src/server.ts @@ -247,13 +247,24 @@ export async function performSearch( } export function createPerplexityServer(serviceOrigin?: string) { - const server = new McpServer({ - name: "io.github.perplexityai/mcp-server", - version: "0.6.2", - }); + const server = new McpServer( + { + name: "io.github.perplexityai/mcp-server", + version: "0.6.2", + }, + { + instructions: + "Perplexity AI server for web-grounded search, research, and reasoning. " + + "Use perplexity_search for finding URLs, facts, and recent news. " + + "Use perplexity_ask for quick AI-answered questions with citations. " + + "Use perplexity_research for in-depth multi-source investigation (slow, 30s+). " + + "Use perplexity_reason for complex analysis requiring step-by-step logic. " + + "All tools are read-only and access live web data.", + } + ); const messageSchema = z.object({ - role: z.string().describe("Role of the message (e.g., system, user, assistant)"), + role: z.enum(["system", "user", "assistant"]).describe("Role of the message sender"), content: z.string().describe("The content of the message"), }); @@ -263,7 +274,7 @@ export function createPerplexityServer(serviceOrigin?: string) { .describe("If true, removes ... tags and their content from the response to save context tokens. Default is false."); const responseOutputSchema = { - response: z.string().describe("The response from Perplexity"), + response: z.string().describe("AI-generated text response with numbered citation references"), }; // Input schemas @@ -274,14 +285,17 @@ export function createPerplexityServer(serviceOrigin?: string) { "perplexity_ask", { title: "Ask Perplexity", - description: "Engages in a conversation using the Sonar API. " + - "Accepts an array of messages (each with a role and content) " + - "and returns a chat completion response from the Perplexity model.", + description: "Answer a question using web-grounded AI (Sonar Pro model). " + + "Best for: quick factual questions, summaries, explanations, and general Q&A. " + + "Returns a text response with numbered citations. Fastest and cheapest option. " + + "For in-depth multi-source research, use perplexity_research instead. " + + "For step-by-step reasoning and analysis, use perplexity_reason instead.", inputSchema: messagesOnlyInputSchema as any, outputSchema: responseOutputSchema as any, annotations: { readOnlyHint: true, openWorldHint: true, + idempotentHint: true, }, }, async (args: any) => { @@ -299,14 +313,18 @@ export function createPerplexityServer(serviceOrigin?: string) { "perplexity_research", { title: "Deep Research", - description: "Performs deep research using the Perplexity API. " + - "Accepts an array of messages (each with a role and content) " + - "and returns a comprehensive research response with citations.", + description: "Conduct deep, multi-source research on a topic (Sonar Deep Research model). " + + "Best for: literature reviews, comprehensive overviews, investigative queries needing " + + "many sources. Returns a detailed response with numbered citations. " + + "Significantly slower than other tools (30+ seconds). " + + "For quick factual questions, use perplexity_ask instead. " + + "For logical analysis and reasoning, use perplexity_reason instead.", inputSchema: messagesWithStripThinkingInputSchema as any, outputSchema: responseOutputSchema as any, annotations: { readOnlyHint: true, openWorldHint: true, + idempotentHint: true, }, }, async (args: any) => { @@ -325,14 +343,17 @@ export function createPerplexityServer(serviceOrigin?: string) { "perplexity_reason", { title: "Advanced Reasoning", - description: "Performs reasoning tasks using the Perplexity API. " + - "Accepts an array of messages (each with a role and content) " + - "and returns a well-reasoned response using the sonar-reasoning-pro model.", + description: "Analyze a question using step-by-step reasoning with web grounding (Sonar Reasoning Pro model). " + + "Best for: math, logic, comparisons, complex arguments, and tasks requiring chain-of-thought. " + + "Returns a reasoned response with numbered citations. " + + "For quick factual questions, use perplexity_ask instead. " + + "For comprehensive multi-source research, use perplexity_research instead.", inputSchema: messagesWithStripThinkingInputSchema as any, outputSchema: responseOutputSchema as any, annotations: { readOnlyHint: true, openWorldHint: true, + idempotentHint: true, }, }, async (args: any) => { @@ -358,21 +379,23 @@ export function createPerplexityServer(serviceOrigin?: string) { }; const searchOutputSchema = { - results: z.string().describe("Formatted search results"), + results: z.string().describe("Formatted search results, each with title, URL, snippet, and date"), }; server.registerTool( "perplexity_search", { title: "Search the Web", - description: "Performs web search using the Perplexity Search API. " + - "Returns ranked search results with titles, URLs, snippets, and metadata. " + - "Perfect for finding up-to-date facts, news, or specific information.", + description: "Search the web and return a ranked list of results with titles, URLs, snippets, and dates. " + + "Best for: finding specific URLs, checking recent news, verifying facts, discovering sources. " + + "Returns formatted results (title, URL, snippet, date) — no AI synthesis. " + + "For AI-generated answers with citations, use perplexity_ask instead.", inputSchema: searchInputSchema as any, outputSchema: searchOutputSchema as any, annotations: { readOnlyHint: true, openWorldHint: true, + idempotentHint: true, }, }, async (args: any) => { From 69c73e1aafdc21c5f3c60cd390aec1a2c16571c3 Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 16 Feb 2026 00:09:13 +0000 Subject: [PATCH 68/84] feat: add ChatCompletionOptions and thread API parameters --- src/server.ts | 10 ++++++++-- src/types.ts | 7 +++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/server.ts b/src/server.ts index ff2285a..9b8b6b9 100644 --- a/src/server.ts +++ b/src/server.ts @@ -4,6 +4,7 @@ import { fetch as undiciFetch, ProxyAgent } from "undici"; import type { Message, ChatCompletionResponse, + ChatCompletionOptions, SearchResponse, SearchRequestBody, UndiciRequestOptions @@ -63,7 +64,8 @@ export async function performChatCompletion( messages: Message[], model: string = "sonar-pro", stripThinking: boolean = false, - serviceOrigin?: string + serviceOrigin?: string, + options?: ChatCompletionOptions ): Promise { if (!PERPLEXITY_API_KEY) { throw new Error("PERPLEXITY_API_KEY environment variable is required"); @@ -73,9 +75,13 @@ export async function performChatCompletion( const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); const url = new URL(`${PERPLEXITY_BASE_URL}/chat/completions`); - const body = { + const body: Record = { model: model, messages: messages, + ...(options?.search_recency_filter && { search_recency_filter: options.search_recency_filter }), + ...(options?.search_domain_filter && { search_domain_filter: options.search_domain_filter }), + ...(options?.search_context_size && { web_search_options: { search_context_size: options.search_context_size } }), + ...(options?.reasoning_effort && { reasoning_effort: options.reasoning_effort }), }; const controller = new AbortController(); diff --git a/src/types.ts b/src/types.ts index 2721242..f7d6fb9 100644 --- a/src/types.ts +++ b/src/types.ts @@ -56,6 +56,13 @@ export interface SearchRequestBody { country?: string; } +export interface ChatCompletionOptions { + search_recency_filter?: "hour" | "day" | "week" | "month" | "year"; + search_domain_filter?: string[]; + search_context_size?: "low" | "medium" | "high"; + reasoning_effort?: "minimal" | "low" | "medium" | "high"; +} + export interface UndiciRequestOptions { [key: string]: unknown; dispatcher?: ProxyAgent; From 9cec29affe4f3b3ebfb19e6b7397cb31eb524040 Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 16 Feb 2026 00:14:14 +0000 Subject: [PATCH 69/84] new input options and improved tool descriptions --- src/server.ts | 82 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 70 insertions(+), 12 deletions(-) diff --git a/src/server.ts b/src/server.ts index 9b8b6b9..2d6daa5 100644 --- a/src/server.ts +++ b/src/server.ts @@ -262,9 +262,9 @@ export function createPerplexityServer(serviceOrigin?: string) { instructions: "Perplexity AI server for web-grounded search, research, and reasoning. " + "Use perplexity_search for finding URLs, facts, and recent news. " + - "Use perplexity_ask for quick AI-answered questions with citations. " + - "Use perplexity_research for in-depth multi-source investigation (slow, 30s+). " + - "Use perplexity_reason for complex analysis requiring step-by-step logic. " + + "Use perplexity_ask for quick AI-answered questions with citations. Supports recency filters, domain restrictions, and search context size control. " + + "Use perplexity_research for in-depth multi-source investigation (slow, 30s+). Supports reasoning_effort parameter to control depth. " + + "Use perplexity_reason for complex analysis requiring step-by-step logic. Supports recency filters, domain restrictions, and search context size control. " + "All tools are read-only and access live web data.", } ); @@ -279,13 +279,41 @@ export function createPerplexityServer(serviceOrigin?: string) { const stripThinkingField = z.boolean().optional() .describe("If true, removes ... tags and their content from the response to save context tokens. Default is false."); + const searchRecencyFilterField = z.enum(["hour", "day", "week", "month", "year"]).optional() + .describe("Filter search results by recency. Use 'hour' for very recent news, 'day' for today's updates, 'week' for this week, etc."); + + const searchDomainFilterField = z.array(z.string()).optional() + .describe("Restrict search results to specific domains (e.g., ['wikipedia.org', 'arxiv.org']). Use '-' prefix for exclusion (e.g., ['-reddit.com'])."); + + const searchContextSizeField = z.enum(["low", "medium", "high"]).optional() + .describe("Controls how much web context is retrieved. 'low' (default) is fastest, 'high' provides more comprehensive results."); + + const reasoningEffortField = z.enum(["minimal", "low", "medium", "high"]).optional() + .describe("Controls depth of deep research reasoning. Higher values produce more thorough analysis."); + const responseOutputSchema = { response: z.string().describe("AI-generated text response with numbered citation references"), }; // Input schemas - const messagesOnlyInputSchema = { messages: messagesField }; - const messagesWithStripThinkingInputSchema = { messages: messagesField, strip_thinking: stripThinkingField }; + const messagesOnlyInputSchema = { + messages: messagesField, + search_recency_filter: searchRecencyFilterField, + search_domain_filter: searchDomainFilterField, + search_context_size: searchContextSizeField, + }; + const messagesWithStripThinkingInputSchema = { + messages: messagesField, + strip_thinking: stripThinkingField, + search_recency_filter: searchRecencyFilterField, + search_domain_filter: searchDomainFilterField, + search_context_size: searchContextSizeField, + }; + const researchInputSchema = { + messages: messagesField, + strip_thinking: stripThinkingField, + reasoning_effort: reasoningEffortField, + }; server.registerTool( "perplexity_ask", @@ -294,6 +322,7 @@ export function createPerplexityServer(serviceOrigin?: string) { description: "Answer a question using web-grounded AI (Sonar Pro model). " + "Best for: quick factual questions, summaries, explanations, and general Q&A. " + "Returns a text response with numbered citations. Fastest and cheapest option. " + + "Supports filtering by recency (hour/day/week/month/year), domain restrictions, and search context size. " + "For in-depth multi-source research, use perplexity_research instead. " + "For step-by-step reasoning and analysis, use perplexity_reason instead.", inputSchema: messagesOnlyInputSchema as any, @@ -305,9 +334,19 @@ export function createPerplexityServer(serviceOrigin?: string) { }, }, async (args: any) => { - const { messages } = args as { messages: Message[] }; + const { messages, search_recency_filter, search_domain_filter, search_context_size } = args as { + messages: Message[]; + search_recency_filter?: "hour" | "day" | "week" | "month" | "year"; + search_domain_filter?: string[]; + search_context_size?: "low" | "medium" | "high"; + }; validateMessages(messages, "perplexity_ask"); - const result = await performChatCompletion(messages, "sonar-pro", false, serviceOrigin); + const options = { + ...(search_recency_filter && { search_recency_filter }), + ...(search_domain_filter && { search_domain_filter }), + ...(search_context_size && { search_context_size }), + }; + const result = await performChatCompletion(messages, "sonar-pro", false, serviceOrigin, Object.keys(options).length > 0 ? options : undefined); return { content: [{ type: "text" as const, text: result }], structuredContent: { response: result }, @@ -325,7 +364,7 @@ export function createPerplexityServer(serviceOrigin?: string) { "Significantly slower than other tools (30+ seconds). " + "For quick factual questions, use perplexity_ask instead. " + "For logical analysis and reasoning, use perplexity_reason instead.", - inputSchema: messagesWithStripThinkingInputSchema as any, + inputSchema: researchInputSchema as any, outputSchema: responseOutputSchema as any, annotations: { readOnlyHint: true, @@ -334,10 +373,17 @@ export function createPerplexityServer(serviceOrigin?: string) { }, }, async (args: any) => { - const { messages, strip_thinking } = args as { messages: Message[]; strip_thinking?: boolean }; + const { messages, strip_thinking, reasoning_effort } = args as { + messages: Message[]; + strip_thinking?: boolean; + reasoning_effort?: "minimal" | "low" | "medium" | "high"; + }; validateMessages(messages, "perplexity_research"); const stripThinking = typeof strip_thinking === "boolean" ? strip_thinking : false; - const result = await performChatCompletion(messages, "sonar-deep-research", stripThinking, serviceOrigin); + const options = { + ...(reasoning_effort && { reasoning_effort }), + }; + const result = await performChatCompletion(messages, "sonar-deep-research", stripThinking, serviceOrigin, Object.keys(options).length > 0 ? options : undefined); return { content: [{ type: "text" as const, text: result }], structuredContent: { response: result }, @@ -352,6 +398,7 @@ export function createPerplexityServer(serviceOrigin?: string) { description: "Analyze a question using step-by-step reasoning with web grounding (Sonar Reasoning Pro model). " + "Best for: math, logic, comparisons, complex arguments, and tasks requiring chain-of-thought. " + "Returns a reasoned response with numbered citations. " + + "Supports filtering by recency (hour/day/week/month/year), domain restrictions, and search context size. " + "For quick factual questions, use perplexity_ask instead. " + "For comprehensive multi-source research, use perplexity_research instead.", inputSchema: messagesWithStripThinkingInputSchema as any, @@ -363,10 +410,21 @@ export function createPerplexityServer(serviceOrigin?: string) { }, }, async (args: any) => { - const { messages, strip_thinking } = args as { messages: Message[]; strip_thinking?: boolean }; + const { messages, strip_thinking, search_recency_filter, search_domain_filter, search_context_size } = args as { + messages: Message[]; + strip_thinking?: boolean; + search_recency_filter?: "hour" | "day" | "week" | "month" | "year"; + search_domain_filter?: string[]; + search_context_size?: "low" | "medium" | "high"; + }; validateMessages(messages, "perplexity_reason"); const stripThinking = typeof strip_thinking === "boolean" ? strip_thinking : false; - const result = await performChatCompletion(messages, "sonar-reasoning-pro", stripThinking, serviceOrigin); + const options = { + ...(search_recency_filter && { search_recency_filter }), + ...(search_domain_filter && { search_domain_filter }), + ...(search_context_size && { search_context_size }), + }; + const result = await performChatCompletion(messages, "sonar-reasoning-pro", stripThinking, serviceOrigin, Object.keys(options).length > 0 ? options : undefined); return { content: [{ type: "text" as const, text: result }], structuredContent: { response: result }, From 9b4218e9dae71c4404bcbe48f2257ecd0ed1a813 Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 16 Feb 2026 00:47:19 +0000 Subject: [PATCH 70/84] chore: bump version to 0.7.0 --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/server.ts | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 9471d81..2365de0 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.6.2" + "version": "0.7.0" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.6.2", + "version": "0.7.0", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index d6ea685..1763136 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.6.2", + "version": "0.7.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.6.2", + "version": "0.7.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 0489e85..e6668f4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.6.2", + "version": "0.7.0", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 9dc549a..71fc2db 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.6.2", + "version": "0.7.0", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.6.2", + "version": "0.7.0", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index 2d6daa5..f280959 100644 --- a/src/server.ts +++ b/src/server.ts @@ -256,7 +256,7 @@ export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer( { name: "io.github.perplexityai/mcp-server", - version: "0.6.2", + version: "0.7.0", }, { instructions: From 7c44810470f4083a515ae8781e0606fcc355c8a8 Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 16 Feb 2026 01:12:51 +0000 Subject: [PATCH 71/84] fix: enable streaming for sonar-deep-research --- src/index.test.ts | 37 ++++++++++++++++----- src/server.ts | 82 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 109 insertions(+), 10 deletions(-) diff --git a/src/index.test.ts b/src/index.test.ts index 80332ca..62defac 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -473,14 +473,35 @@ describe("Perplexity MCP Server", () => { const models = ["sonar-pro", "sonar-deep-research", "sonar-reasoning-pro"]; for (const model of models) { - const mockResponse = { - choices: [{ message: { content: `Response from ${model}` } }], - }; - - global.fetch = vi.fn().mockResolvedValue({ - ok: true, - json: async () => mockResponse, - } as Response); + if (model === "sonar-deep-research") { + // sonar-deep-research uses streaming, so provide an SSE mock + const sseData = [ + `data: ${JSON.stringify({ choices: [{ delta: { content: "Response " } }] })}\n\n`, + `data: ${JSON.stringify({ choices: [{ delta: { content: `from ${model}` } }] })}\n\n`, + `data: [DONE]\n\n`, + ].join(""); + + const stream = new ReadableStream({ + start(controller) { + controller.enqueue(new TextEncoder().encode(sseData)); + controller.close(); + }, + }); + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + body: stream, + } as unknown as Response); + } else { + const mockResponse = { + choices: [{ message: { content: `Response from ${model}` } }], + }; + + global.fetch = vi.fn().mockResolvedValue({ + ok: true, + json: async () => mockResponse, + } as Response); + } const messages = [{ role: "user", content: "test" }]; const result = await performChatCompletion(messages, model); diff --git a/src/server.ts b/src/server.ts index f280959..fc7aa95 100644 --- a/src/server.ts +++ b/src/server.ts @@ -60,6 +60,77 @@ export function stripThinkingTokens(content: string): string { return content.replace(/[\s\S]*?<\/think>/g, '').trim(); } +export async function consumeSSEStream(response: Response): Promise { + const body = response.body; + if (!body) { + throw new Error("Response body is null"); + } + + const reader = (body as ReadableStream).getReader(); + const decoder = new TextDecoder(); + + let contentParts: string[] = []; + let citations: string[] | undefined; + let usage: ChatCompletionResponse["usage"] | undefined; + let id: string | undefined; + let model: string | undefined; + let created: number | undefined; + let buffer = ""; + + while (true) { + const { done, value } = await reader.read(); + if (done) break; + + buffer += decoder.decode(value, { stream: true }); + + const lines = buffer.split("\n"); + // Keep the last potentially incomplete line in the buffer + buffer = lines.pop() || ""; + + for (const line of lines) { + const trimmed = line.trim(); + if (!trimmed || !trimmed.startsWith("data:")) continue; + + const data = trimmed.slice("data:".length).trim(); + if (data === "[DONE]") continue; + + try { + const parsed = JSON.parse(data); + + if (parsed.id) id = parsed.id; + if (parsed.model) model = parsed.model; + if (parsed.created) created = parsed.created; + if (parsed.citations) citations = parsed.citations; + if (parsed.usage) usage = parsed.usage; + + const delta = parsed.choices?.[0]?.delta; + if (delta?.content) { + contentParts.push(delta.content); + } + } catch { + // Skip malformed JSON chunks (e.g. keep-alive pings) + } + } + } + + const assembled: ChatCompletionResponse = { + choices: [ + { + message: { content: contentParts.join("") }, + finish_reason: "stop", + index: 0, + }, + ], + ...(citations && { citations }), + ...(usage && { usage }), + ...(id && { id }), + ...(model && { model }), + ...(created && { created }), + }; + + return ChatCompletionResponseSchema.parse(assembled); +} + export async function performChatCompletion( messages: Message[], model: string = "sonar-pro", @@ -74,10 +145,13 @@ export async function performChatCompletion( // Read timeout fresh each time to respect env var changes const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); + const useStreaming = model === "sonar-deep-research"; + const url = new URL(`${PERPLEXITY_BASE_URL}/chat/completions`); const body: Record = { model: model, messages: messages, + ...(useStreaming && { stream: true }), ...(options?.search_recency_filter && { search_recency_filter: options.search_recency_filter }), ...(options?.search_domain_filter && { search_domain_filter: options.search_domain_filter }), ...(options?.search_context_size && { web_search_options: { search_context_size: options.search_context_size } }), @@ -125,8 +199,12 @@ export async function performChatCompletion( let data: ChatCompletionResponse; try { - const json = await response.json(); - data = ChatCompletionResponseSchema.parse(json); + if (useStreaming) { + data = await consumeSSEStream(response); + } else { + const json = await response.json(); + data = ChatCompletionResponseSchema.parse(json); + } } catch (error) { if (error instanceof z.ZodError) { const issues = error.issues; From e123d95556ce61850c0d54e7f25c0acb2e1daa6e Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 16 Feb 2026 13:55:48 +0000 Subject: [PATCH 72/84] chore: bump version to 0.7.1 --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/server.ts | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 2365de0..5f526ee 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.7.0" + "version": "0.7.1" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.7.0", + "version": "0.7.1", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index 1763136..2386f10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.7.0", + "version": "0.7.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.7.0", + "version": "0.7.1", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index e6668f4..368a09c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.7.0", + "version": "0.7.1", "mcpName": "io.github.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 71fc2db..83845b3 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "io.github.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.7.0", + "version": "0.7.1", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.7.0", + "version": "0.7.1", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index fc7aa95..37707cb 100644 --- a/src/server.ts +++ b/src/server.ts @@ -334,7 +334,7 @@ export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer( { name: "io.github.perplexityai/mcp-server", - version: "0.7.0", + version: "0.7.1", }, { instructions: From f8ab44d25c8ae477846b6545b06282ae346772a7 Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 16 Feb 2026 14:05:57 +0000 Subject: [PATCH 73/84] update MCP registry login method to use private key --- .github/workflows/publish-mcp.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish-mcp.yml b/.github/workflows/publish-mcp.yml index 752ba17..0ecdec4 100644 --- a/.github/workflows/publish-mcp.yml +++ b/.github/workflows/publish-mcp.yml @@ -13,7 +13,6 @@ jobs: name: production permissions: contents: read - id-token: write steps: - name: Checkout code @@ -24,7 +23,10 @@ jobs: curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher - name: Login to MCP Registry - run: ./mcp-publisher login github-oidc + run: | + echo "${{ secrets.MCP_REGISTRY_PRIVATE_KEY }}" > key.pem + ./mcp-publisher login dns --domain perplexity.ai --private-key "$(openssl pkey -in key.pem -noout -text | grep -A3 'priv:' | tail -n +2 | tr -d ' :\n')" + rm key.pem - name: Publish to MCP Registry run: ./mcp-publisher publish From bcc902e2fa4d9b903ee3868959243e4e6d5a3b0a Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 16 Feb 2026 14:06:39 +0000 Subject: [PATCH 74/84] chore: bump version to 0.8.0 and update package namespace --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 4 ++-- server.json | 6 +++--- src/server.ts | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 5f526ee..454967b 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.7.1" + "version": "0.8.0" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.7.1", + "version": "0.8.0", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index 2386f10..948d11c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.7.1", + "version": "0.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.7.1", + "version": "0.8.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 368a09c..21690cb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.7.1", - "mcpName": "io.github.perplexityai/mcp-server", + "version": "0.8.0", + "mcpName": "ai.perplexityai/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ "ai", diff --git a/server.json b/server.json index 83845b3..caf4844 100644 --- a/server.json +++ b/server.json @@ -1,14 +1,14 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", - "name": "io.github.perplexityai/mcp-server", + "name": "ai.perplexityai/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.7.1", + "version": "0.8.0", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.7.1", + "version": "0.8.0", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index 37707cb..c3fde54 100644 --- a/src/server.ts +++ b/src/server.ts @@ -334,7 +334,7 @@ export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer( { name: "io.github.perplexityai/mcp-server", - version: "0.7.1", + version: "0.8.0", }, { instructions: From fb2bd67de291bcd9e37c9cdc27158c7c7c42816d Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 16 Feb 2026 14:35:16 +0000 Subject: [PATCH 75/84] chore: migrate MCP registry namespace to ai.perplexity/mcp-server - Update namespace from ai.perplexityai to ai.perplexity (matches DNS) - Switch auth from github-oidc to DNS-based domain verification - Bump version to 0.8.2 --- .claude-plugin/marketplace.json | 4 ++-- .gitignore | 5 +++++ package-lock.json | 4 ++-- package.json | 4 ++-- server.json | 13 +++---------- src/server.ts | 4 ++-- 6 files changed, 16 insertions(+), 18 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 454967b..3228898 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.8.0" + "version": "0.8.2" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.8.0", + "version": "0.8.2", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/.gitignore b/.gitignore index 7c3379c..6101699 100644 --- a/.gitignore +++ b/.gitignore @@ -54,3 +54,8 @@ Desktop.ini # Ignore MCP registry authentication tokens .mcpregistry_* + +# Ignore private keys and migration artifacts +*.pem +mcp-publisher +migrate-namespace.sh diff --git a/package-lock.json b/package-lock.json index 948d11c..6e2aeb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.8.0", + "version": "0.8.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.8.0", + "version": "0.8.2", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 21690cb..90fd546 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.8.0", - "mcpName": "ai.perplexityai/mcp-server", + "version": "0.8.2", + "mcpName": "ai.perplexity/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ "ai", diff --git a/server.json b/server.json index caf4844..54847e7 100644 --- a/server.json +++ b/server.json @@ -1,25 +1,18 @@ { "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json", - "name": "ai.perplexityai/mcp-server", + "name": "ai.perplexity/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.8.0", + "version": "0.8.2", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.8.0", + "version": "0.8.2", "transport": { "type": "stdio" } } - ], - "remotes": [ - { - "type": "streamable-http", - "url": "https://mcp.perplexity.ai/mcp", - "description": "Hosted Perplexity MCP server with HTTP transport. Set PERPLEXITY_API_KEY environment variable." - } ] } diff --git a/src/server.ts b/src/server.ts index c3fde54..0084a53 100644 --- a/src/server.ts +++ b/src/server.ts @@ -333,8 +333,8 @@ export async function performSearch( export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer( { - name: "io.github.perplexityai/mcp-server", - version: "0.8.0", + name: "ai.perplexity/mcp-server", + version: "0.8.2", }, { instructions: From 6beba41ddbff76c8552406263ef22e8add897a07 Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 25 Feb 2026 14:55:46 +0000 Subject: [PATCH 76/84] chore: extract makeApiRequest to eliminate duplicate fetch logic --- src/index.test.ts | 4 +- src/server.ts | 151 ++++++++++++++++++---------------------------- 2 files changed, 60 insertions(+), 95 deletions(-) diff --git a/src/index.test.ts b/src/index.test.ts index 62defac..70499a7 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -245,7 +245,7 @@ describe("Perplexity MCP Server", () => { } as Response); await expect(performSearch("test")).rejects.toThrow( - "Perplexity Search API error: 500 Internal Server Error" + "Perplexity API error: 500 Internal Server Error" ); }); @@ -280,7 +280,7 @@ describe("Perplexity MCP Server", () => { global.fetch = vi.fn().mockRejectedValue(new Error("Network failure")); await expect(performSearch("test")).rejects.toThrow( - "Network error while calling Perplexity Search API" + "Network error while calling Perplexity API" ); }); }); diff --git a/src/server.ts b/src/server.ts index 0084a53..26a253f 100644 --- a/src/server.ts +++ b/src/server.ts @@ -60,6 +60,61 @@ export function stripThinkingTokens(content: string): string { return content.replace(/[\s\S]*?<\/think>/g, '').trim(); } +async function makeApiRequest( + endpoint: string, + body: Record, + serviceOrigin: string | undefined, +): Promise { + if (!PERPLEXITY_API_KEY) { + throw new Error("PERPLEXITY_API_KEY environment variable is required"); + } + + // Read timeout fresh each time to respect env var changes + const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); + + const url = new URL(`${PERPLEXITY_BASE_URL}/${endpoint}`); + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); + + let response; + try { + const headers: Record = { + "Content-Type": "application/json", + "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, + }; + if (serviceOrigin) { + headers["X-Service"] = serviceOrigin; + } + response = await proxyAwareFetch(url.toString(), { + method: "POST", + headers, + body: JSON.stringify(body), + signal: controller.signal, + }); + } catch (error) { + clearTimeout(timeoutId); + if (error instanceof Error && error.name === "AbortError") { + throw new Error(`Request timeout: Perplexity API did not respond within ${TIMEOUT_MS}ms. Consider increasing PERPLEXITY_TIMEOUT_MS.`); + } + throw new Error(`Network error while calling Perplexity API: ${error}`); + } + clearTimeout(timeoutId); + + if (!response.ok) { + let errorText; + try { + errorText = await response.text(); + } catch (parseError) { + errorText = "Unable to parse error response"; + } + throw new Error( + `Perplexity API error: ${response.status} ${response.statusText}\n${errorText}` + ); + } + + return response; +} + export async function consumeSSEStream(response: Response): Promise { const body = response.body; if (!body) { @@ -138,16 +193,8 @@ export async function performChatCompletion( serviceOrigin?: string, options?: ChatCompletionOptions ): Promise { - if (!PERPLEXITY_API_KEY) { - throw new Error("PERPLEXITY_API_KEY environment variable is required"); - } - - // Read timeout fresh each time to respect env var changes - const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); - const useStreaming = model === "sonar-deep-research"; - const url = new URL(`${PERPLEXITY_BASE_URL}/chat/completions`); const body: Record = { model: model, messages: messages, @@ -158,44 +205,7 @@ export async function performChatCompletion( ...(options?.reasoning_effort && { reasoning_effort: options.reasoning_effort }), }; - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); - - let response; - try { - const headers: Record = { - "Content-Type": "application/json", - "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, - }; - if (serviceOrigin) { - headers["X-Service"] = serviceOrigin; - } - response = await proxyAwareFetch(url.toString(), { - method: "POST", - headers, - body: JSON.stringify(body), - signal: controller.signal, - }); - clearTimeout(timeoutId); - } catch (error) { - clearTimeout(timeoutId); - if (error instanceof Error && error.name === "AbortError") { - throw new Error(`Request timeout: Perplexity API did not respond within ${TIMEOUT_MS}ms. Consider increasing PERPLEXITY_TIMEOUT_MS.`); - } - throw new Error(`Network error while calling Perplexity API: ${error}`); - } - - if (!response.ok) { - let errorText; - try { - errorText = await response.text(); - } catch (parseError) { - errorText = "Unable to parse error response"; - } - throw new Error( - `Perplexity API error: ${response.status} ${response.statusText}\n${errorText}` - ); - } + const response = await makeApiRequest("chat/completions", body, serviceOrigin); let data: ChatCompletionResponse; try { @@ -265,59 +275,14 @@ export async function performSearch( country?: string, serviceOrigin?: string ): Promise { - if (!PERPLEXITY_API_KEY) { - throw new Error("PERPLEXITY_API_KEY environment variable is required"); - } - - // Read timeout fresh each time to respect env var changes - const TIMEOUT_MS = parseInt(process.env.PERPLEXITY_TIMEOUT_MS || "300000", 10); - - const url = new URL(`${PERPLEXITY_BASE_URL}/search`); - const body: SearchRequestBody = { + const body: Record = { query: query, max_results: maxResults, max_tokens_per_page: maxTokensPerPage, ...(country && { country }), }; - const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS); - - let response; - try { - const headers: Record = { - "Content-Type": "application/json", - "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, - }; - if (serviceOrigin) { - headers["X-Service"] = serviceOrigin; - } - response = await proxyAwareFetch(url.toString(), { - method: "POST", - headers, - body: JSON.stringify(body), - signal: controller.signal, - }); - clearTimeout(timeoutId); - } catch (error) { - clearTimeout(timeoutId); - if (error instanceof Error && error.name === "AbortError") { - throw new Error(`Request timeout: Perplexity Search API did not respond within ${TIMEOUT_MS}ms. Consider increasing PERPLEXITY_TIMEOUT_MS.`); - } - throw new Error(`Network error while calling Perplexity Search API: ${error}`); - } - - if (!response.ok) { - let errorText; - try { - errorText = await response.text(); - } catch (parseError) { - errorText = "Unable to parse error response"; - } - throw new Error( - `Perplexity Search API error: ${response.status} ${response.statusText}\n${errorText}` - ); - } + const response = await makeApiRequest("search", body, serviceOrigin); let data: SearchResponse; try { From ae4a12bd774a48a602346cd36212ebde2ff3b953 Mon Sep 17 00:00:00 2001 From: Kesku Date: Wed, 25 Feb 2026 15:00:33 +0000 Subject: [PATCH 77/84] fix: correct tool annotations (destructiveHint, idempotentHint) --- src/server.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/server.ts b/src/server.ts index 26a253f..0ca808e 100644 --- a/src/server.ts +++ b/src/server.ts @@ -373,7 +373,8 @@ export function createPerplexityServer(serviceOrigin?: string) { annotations: { readOnlyHint: true, openWorldHint: true, - idempotentHint: true, + idempotentHint: false, + destructiveHint: false, }, }, async (args: any) => { @@ -412,7 +413,8 @@ export function createPerplexityServer(serviceOrigin?: string) { annotations: { readOnlyHint: true, openWorldHint: true, - idempotentHint: true, + idempotentHint: false, + destructiveHint: false, }, }, async (args: any) => { @@ -449,7 +451,8 @@ export function createPerplexityServer(serviceOrigin?: string) { annotations: { readOnlyHint: true, openWorldHint: true, - idempotentHint: true, + idempotentHint: false, + destructiveHint: false, }, }, async (args: any) => { @@ -502,7 +505,8 @@ export function createPerplexityServer(serviceOrigin?: string) { annotations: { readOnlyHint: true, openWorldHint: true, - idempotentHint: true, + idempotentHint: false, + destructiveHint: false, }, }, async (args: any) => { From 4b32fdc1baa90c278028d60bd833ce77aafdfac3 Mon Sep 17 00:00:00 2001 From: Kesku Date: Thu, 26 Feb 2026 16:51:49 +0000 Subject: [PATCH 78/84] chore: update dependencies in package-lock.json --- package-lock.json | 266 ++++++++++++++++++++++++---------------------- 1 file changed, 139 insertions(+), 127 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6e2aeb0..78e2a91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -535,9 +535,9 @@ } }, "node_modules/@hono/node-server": { - "version": "1.19.8", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.8.tgz", - "integrity": "sha512-0/g2lIOPzX8f3vzW1ggQgvG5mjtFBDBHFAzI5SFAi2DzSqS9luJwqg9T6O/gKYLi+inS7eNxBeIFkkghIPvrMA==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", + "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", "license": "MIT", "engines": { "node": ">=18.14.1" @@ -575,12 +575,12 @@ } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", - "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", + "version": "1.27.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.27.1.tgz", + "integrity": "sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==", "license": "MIT", "dependencies": { - "@hono/node-server": "^1.19.7", + "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", @@ -588,14 +588,15 @@ "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "jose": "^6.1.1", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.0" + "zod-to-json-schema": "^3.25.1" }, "engines": { "node": ">=18" @@ -937,9 +938,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", - "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], @@ -951,9 +952,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", - "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], @@ -965,9 +966,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", - "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], @@ -979,9 +980,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", - "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], @@ -993,9 +994,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", - "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", "cpu": [ "arm64" ], @@ -1007,9 +1008,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", - "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", "cpu": [ "x64" ], @@ -1021,9 +1022,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", - "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", "cpu": [ "arm" ], @@ -1035,9 +1036,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", - "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], @@ -1049,9 +1050,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", - "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], @@ -1063,9 +1064,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", - "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], @@ -1077,9 +1078,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", - "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", "cpu": [ "loong64" ], @@ -1091,9 +1092,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", - "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", "cpu": [ "loong64" ], @@ -1105,9 +1106,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", - "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", "cpu": [ "ppc64" ], @@ -1119,9 +1120,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", - "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", "cpu": [ "ppc64" ], @@ -1133,9 +1134,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", - "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", "cpu": [ "riscv64" ], @@ -1147,9 +1148,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", - "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], @@ -1161,9 +1162,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", - "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", "cpu": [ "s390x" ], @@ -1175,9 +1176,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", - "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], @@ -1189,9 +1190,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", - "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], @@ -1203,9 +1204,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", - "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", "cpu": [ "x64" ], @@ -1217,9 +1218,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", - "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", "cpu": [ "arm64" ], @@ -1231,9 +1232,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", - "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], @@ -1245,9 +1246,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", - "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], @@ -1259,9 +1260,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", - "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", "cpu": [ "x64" ], @@ -1273,9 +1274,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", - "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], @@ -1582,9 +1583,9 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -2146,10 +2147,13 @@ } }, "node_modules/express-rate-limit": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.2.1.tgz", + "integrity": "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==", "license": "MIT", + "dependencies": { + "ip-address": "10.0.1" + }, "engines": { "node": ">= 16" }, @@ -2405,11 +2409,10 @@ } }, "node_modules/hono": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", - "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.3.tgz", + "integrity": "sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==", "license": "MIT", - "peer": true, "engines": { "node": ">=16.9.0" } @@ -2469,6 +2472,15 @@ "node": ">= 0.10" } }, + "node_modules/ip-address": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", + "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -3005,9 +3017,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -3144,9 +3156,9 @@ } }, "node_modules/rollup": { - "version": "4.55.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", - "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, "license": "MIT", "dependencies": { @@ -3160,31 +3172,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.55.1", - "@rollup/rollup-android-arm64": "4.55.1", - "@rollup/rollup-darwin-arm64": "4.55.1", - "@rollup/rollup-darwin-x64": "4.55.1", - "@rollup/rollup-freebsd-arm64": "4.55.1", - "@rollup/rollup-freebsd-x64": "4.55.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", - "@rollup/rollup-linux-arm-musleabihf": "4.55.1", - "@rollup/rollup-linux-arm64-gnu": "4.55.1", - "@rollup/rollup-linux-arm64-musl": "4.55.1", - "@rollup/rollup-linux-loong64-gnu": "4.55.1", - "@rollup/rollup-linux-loong64-musl": "4.55.1", - "@rollup/rollup-linux-ppc64-gnu": "4.55.1", - "@rollup/rollup-linux-ppc64-musl": "4.55.1", - "@rollup/rollup-linux-riscv64-gnu": "4.55.1", - "@rollup/rollup-linux-riscv64-musl": "4.55.1", - "@rollup/rollup-linux-s390x-gnu": "4.55.1", - "@rollup/rollup-linux-x64-gnu": "4.55.1", - "@rollup/rollup-linux-x64-musl": "4.55.1", - "@rollup/rollup-openbsd-x64": "4.55.1", - "@rollup/rollup-openharmony-arm64": "4.55.1", - "@rollup/rollup-win32-arm64-msvc": "4.55.1", - "@rollup/rollup-win32-ia32-msvc": "4.55.1", - "@rollup/rollup-win32-x64-gnu": "4.55.1", - "@rollup/rollup-win32-x64-msvc": "4.55.1", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, From 95c7a8e9307bc067cbbcf8cbc4290e3ca670eea4 Mon Sep 17 00:00:00 2001 From: Kesku Date: Thu, 26 Feb 2026 16:53:51 +0000 Subject: [PATCH 79/84] chore: bump version to 0.8.3 --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/server.ts | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 3228898..0f7e2e3 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.8.2" + "version": "0.8.3" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.8.2", + "version": "0.8.3", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index 78e2a91..38b20cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.8.2", + "version": "0.8.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.8.2", + "version": "0.8.3", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 90fd546..68c3502 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.8.2", + "version": "0.8.3", "mcpName": "ai.perplexity/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 54847e7..2e825e9 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "ai.perplexity/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.8.2", + "version": "0.8.3", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.8.2", + "version": "0.8.3", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index 0ca808e..f99f95f 100644 --- a/src/server.ts +++ b/src/server.ts @@ -299,7 +299,7 @@ export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer( { name: "ai.perplexity/mcp-server", - version: "0.8.2", + version: "0.8.3", }, { instructions: From 21a3f524444a00b520a2e655f8240fc819aac14f Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 20 Mar 2026 14:16:19 +0000 Subject: [PATCH 80/84] chore: resolve security alerts --- package-lock.json | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 38b20cd..101fa14 100644 --- a/package-lock.json +++ b/package-lock.json @@ -535,9 +535,9 @@ } }, "node_modules/@hono/node-server": { - "version": "1.19.9", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", + "version": "1.19.11", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz", + "integrity": "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==", "license": "MIT", "engines": { "node": ">=18.14.1" @@ -2147,12 +2147,12 @@ } }, "node_modules/express-rate-limit": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.2.1.tgz", - "integrity": "sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==", + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.1.tgz", + "integrity": "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==", "license": "MIT", "dependencies": { - "ip-address": "10.0.1" + "ip-address": "10.1.0" }, "engines": { "node": ">= 16" @@ -2409,9 +2409,9 @@ } }, "node_modules/hono": { - "version": "4.12.3", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.3.tgz", - "integrity": "sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==", + "version": "4.12.8", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.8.tgz", + "integrity": "sha512-VJCEvtrezO1IAR+kqEYnxUOoStaQPGrCmX3j4wDTNOcD1uRPFpGlwQUIW8niPuvHXaTUxeOUl5MMDGrl+tmO9A==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -2473,9 +2473,9 @@ } }, "node_modules/ip-address": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.0.1.tgz", - "integrity": "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "license": "MIT", "engines": { "node": ">= 12" @@ -3720,9 +3720,9 @@ } }, "node_modules/undici": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", - "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.24.1.tgz", + "integrity": "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==", "license": "MIT", "engines": { "node": ">=18.17" From 8c31448682df546ab39fd7bfee98330eb31e8ff5 Mon Sep 17 00:00:00 2001 From: Kesku Date: Fri, 20 Mar 2026 14:18:00 +0000 Subject: [PATCH 81/84] chore: bump version to 0.8.4 --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/server.ts | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 0f7e2e3..685204c 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.8.3" + "version": "0.8.4" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.8.3", + "version": "0.8.4", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index 101fa14..3c198dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.8.3", + "version": "0.8.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.8.3", + "version": "0.8.4", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 68c3502..e0a69fd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.8.3", + "version": "0.8.4", "mcpName": "ai.perplexity/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 2e825e9..4764650 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "ai.perplexity/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.8.3", + "version": "0.8.4", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.8.3", + "version": "0.8.4", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index f99f95f..c8954a7 100644 --- a/src/server.ts +++ b/src/server.ts @@ -299,7 +299,7 @@ export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer( { name: "ai.perplexity/mcp-server", - version: "0.8.3", + version: "0.8.4", }, { instructions: From fc4705678d00b2df245b03e1cb4da4743de9bbd7 Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 23 Mar 2026 19:35:01 +0000 Subject: [PATCH 82/84] Make VERSION a const, add source headers --- src/server.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/server.ts b/src/server.ts index c8954a7..af9be58 100644 --- a/src/server.ts +++ b/src/server.ts @@ -13,6 +13,7 @@ import { ChatCompletionResponseSchema, SearchResponseSchema } from "./validation const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; const PERPLEXITY_BASE_URL = process.env.PERPLEXITY_BASE_URL || "https://api.perplexity.ai"; +const VERSION = "0.8.4"; export function getProxyUrl(): string | undefined { return process.env.PERPLEXITY_PROXY || @@ -81,6 +82,8 @@ async function makeApiRequest( const headers: Record = { "Content-Type": "application/json", "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, + "User-Agent": `perplexity-mcp/${VERSION}`, + "X-Source": "mcp-server", }; if (serviceOrigin) { headers["X-Service"] = serviceOrigin; @@ -299,7 +302,7 @@ export function createPerplexityServer(serviceOrigin?: string) { const server = new McpServer( { name: "ai.perplexity/mcp-server", - version: "0.8.4", + version: VERSION, }, { instructions: From a55a930796072774e7020c28f23cc48047654654 Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 23 Mar 2026 19:36:28 +0000 Subject: [PATCH 83/84] bump version to 0.8.5 --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/server.ts | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 685204c..35d96be 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.8.4" + "version": "0.8.5" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.8.4", + "version": "0.8.5", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index 3c198dd..6ae1d38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.8.4", + "version": "0.8.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.8.4", + "version": "0.8.5", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index e0a69fd..2c9c98c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.8.4", + "version": "0.8.5", "mcpName": "ai.perplexity/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 4764650..67534c8 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "ai.perplexity/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.8.4", + "version": "0.8.5", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.8.4", + "version": "0.8.5", "transport": { "type": "stdio" } diff --git a/src/server.ts b/src/server.ts index af9be58..587e6a3 100644 --- a/src/server.ts +++ b/src/server.ts @@ -13,7 +13,7 @@ import { ChatCompletionResponseSchema, SearchResponseSchema } from "./validation const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; const PERPLEXITY_BASE_URL = process.env.PERPLEXITY_BASE_URL || "https://api.perplexity.ai"; -const VERSION = "0.8.4"; +const VERSION = "0.8.5"; export function getProxyUrl(): string | undefined { return process.env.PERPLEXITY_PROXY || From 79ce21c5798f6993af7cac81da8067a6dc81e20d Mon Sep 17 00:00:00 2001 From: Kesku Date: Mon, 23 Mar 2026 19:38:54 +0000 Subject: [PATCH 84/84] fix test, bump to 0.9 --- .claude-plugin/marketplace.json | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- server.json | 4 ++-- src/index.test.ts | 9 +++++---- src/server.ts | 4 ++-- 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 35d96be..d54c2b8 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -6,14 +6,14 @@ }, "metadata": { "description": "Official Perplexity AI plugin providing real-time web search, reasoning, and research capabilities", - "version": "0.8.5" + "version": "0.9.0" }, "plugins": [ { "name": "perplexity", "source": "./", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.8.5", + "version": "0.9.0", "author": { "name": "Perplexity AI", "email": "api@perplexity.ai" diff --git a/package-lock.json b/package-lock.json index 6ae1d38..c5096c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.8.5", + "version": "0.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@perplexity-ai/mcp-server", - "version": "0.8.5", + "version": "0.9.0", "license": "MIT", "dependencies": { "@modelcontextprotocol/sdk": "^1.21.1", diff --git a/package.json b/package.json index 2c9c98c..c34f6d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@perplexity-ai/mcp-server", - "version": "0.8.5", + "version": "0.9.0", "mcpName": "ai.perplexity/mcp-server", "description": "Real-time web search, reasoning, and research through Perplexity's API", "keywords": [ diff --git a/server.json b/server.json index 67534c8..0ebc5cd 100644 --- a/server.json +++ b/server.json @@ -3,12 +3,12 @@ "name": "ai.perplexity/mcp-server", "title": "Perplexity API Platform", "description": "Real-time web search, reasoning, and research through Perplexity's API", - "version": "0.8.5", + "version": "0.9.0", "packages": [ { "registryType": "npm", "identifier": "@perplexity-ai/mcp-server", - "version": "0.8.5", + "version": "0.9.0", "transport": { "type": "stdio" } diff --git a/src/index.test.ts b/src/index.test.ts index 70499a7..21897b8 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -79,10 +79,11 @@ describe("Perplexity MCP Server", () => { "https://api.perplexity.ai/chat/completions", expect.objectContaining({ method: "POST", - headers: { + headers: expect.objectContaining({ "Content-Type": "application/json", Authorization: "Bearer test-api-key", - }, + "X-Source": "pplx-mcp-server", + }), body: JSON.stringify({ model: "sonar-pro", messages, @@ -200,10 +201,10 @@ describe("Perplexity MCP Server", () => { "https://api.perplexity.ai/search", expect.objectContaining({ method: "POST", - headers: { + headers: expect.objectContaining({ "Content-Type": "application/json", Authorization: "Bearer test-api-key", - }, + }), body: JSON.stringify({ query: "test query", max_results: 10, diff --git a/src/server.ts b/src/server.ts index 587e6a3..d649ccb 100644 --- a/src/server.ts +++ b/src/server.ts @@ -13,7 +13,7 @@ import { ChatCompletionResponseSchema, SearchResponseSchema } from "./validation const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; const PERPLEXITY_BASE_URL = process.env.PERPLEXITY_BASE_URL || "https://api.perplexity.ai"; -const VERSION = "0.8.5"; +const VERSION = "0.9.0"; export function getProxyUrl(): string | undefined { return process.env.PERPLEXITY_PROXY || @@ -83,7 +83,7 @@ async function makeApiRequest( "Content-Type": "application/json", "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, "User-Agent": `perplexity-mcp/${VERSION}`, - "X-Source": "mcp-server", + "X-Source": "pplx-mcp-server", }; if (serviceOrigin) { headers["X-Service"] = serviceOrigin;