@baozi.bet/mcp-server 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +294 -0
- package/dist/__tests__/full-test.d.ts +1 -0
- package/dist/__tests__/full-test.js +291 -0
- package/dist/builders/affiliate-transaction.d.ts +41 -0
- package/dist/builders/affiliate-transaction.js +123 -0
- package/dist/builders/bet-transaction.d.ts +70 -0
- package/dist/builders/bet-transaction.js +323 -0
- package/dist/builders/claim-transaction.d.ts +57 -0
- package/dist/builders/claim-transaction.js +196 -0
- package/dist/builders/creator-transaction.d.ts +49 -0
- package/dist/builders/creator-transaction.js +177 -0
- package/dist/builders/dispute-transaction.d.ts +81 -0
- package/dist/builders/dispute-transaction.js +215 -0
- package/dist/builders/index.d.ts +14 -0
- package/dist/builders/index.js +15 -0
- package/dist/builders/market-creation-tx.d.ts +65 -0
- package/dist/builders/market-creation-tx.js +362 -0
- package/dist/builders/market-management-transaction.d.ts +85 -0
- package/dist/builders/market-management-transaction.js +239 -0
- package/dist/builders/race-transaction.d.ts +67 -0
- package/dist/builders/race-transaction.js +242 -0
- package/dist/builders/resolution-transaction.d.ts +108 -0
- package/dist/builders/resolution-transaction.js +250 -0
- package/dist/builders/whitelist-transaction.d.ts +72 -0
- package/dist/builders/whitelist-transaction.js +179 -0
- package/dist/config.d.ts +138 -0
- package/dist/config.js +307 -0
- package/dist/handlers/agent-network.d.ts +81 -0
- package/dist/handlers/agent-network.js +332 -0
- package/dist/handlers/claims.d.ts +47 -0
- package/dist/handlers/claims.js +218 -0
- package/dist/handlers/market-creation.d.ts +154 -0
- package/dist/handlers/market-creation.js +290 -0
- package/dist/handlers/markets.d.ts +41 -0
- package/dist/handlers/markets.js +319 -0
- package/dist/handlers/positions.d.ts +40 -0
- package/dist/handlers/positions.js +244 -0
- package/dist/handlers/quote.d.ts +33 -0
- package/dist/handlers/quote.js +144 -0
- package/dist/handlers/race-markets.d.ts +54 -0
- package/dist/handlers/race-markets.js +308 -0
- package/dist/handlers/resolution.d.ts +43 -0
- package/dist/handlers/resolution.js +194 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +109 -0
- package/dist/resources.d.ts +13 -0
- package/dist/resources.js +336 -0
- package/dist/tools.d.ts +3109 -0
- package/dist/tools.js +1956 -0
- package/dist/validation/bet-rules.d.ts +82 -0
- package/dist/validation/bet-rules.js +276 -0
- package/dist/validation/creation-rules.d.ts +69 -0
- package/dist/validation/creation-rules.js +302 -0
- package/dist/validation/index.d.ts +6 -0
- package/dist/validation/index.js +7 -0
- package/dist/validation/market-rules.d.ts +60 -0
- package/dist/validation/market-rules.js +237 -0
- package/dist/validation/parimutuel-rules.d.ts +117 -0
- package/dist/validation/parimutuel-rules.js +270 -0
- package/package.json +52 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Baozi MCP Server V2.0.0
|
|
4
|
+
*
|
|
5
|
+
* Model Context Protocol server for Baozi prediction markets on Solana.
|
|
6
|
+
* Now with mainnet support and transaction building capabilities.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Read markets, positions, quotes
|
|
10
|
+
* - Validate market timing (v6.2 rules)
|
|
11
|
+
* - Build unsigned bet transactions
|
|
12
|
+
* - Simulate transactions before signing
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* npx @baozi/mcp-server
|
|
16
|
+
*
|
|
17
|
+
* Or add to Claude Desktop config:
|
|
18
|
+
* {
|
|
19
|
+
* "mcpServers": {
|
|
20
|
+
* "baozi": {
|
|
21
|
+
* "command": "npx",
|
|
22
|
+
* "args": ["@baozi/mcp-server"]
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* Environment Variables:
|
|
28
|
+
* HELIUS_RPC_URL - Helius RPC endpoint (recommended)
|
|
29
|
+
* SOLANA_RPC_URL - Alternative RPC endpoint
|
|
30
|
+
* SOLANA_NETWORK - Network: 'mainnet-beta' (default) or 'devnet'
|
|
31
|
+
* BAOZI_PROGRAM_ID - Override program ID (default: V4.7.6 mainnet)
|
|
32
|
+
*/
|
|
33
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
34
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
35
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
36
|
+
import { TOOLS, handleTool } from './tools.js';
|
|
37
|
+
import { RESOURCES, handleResource } from './resources.js';
|
|
38
|
+
import { PROGRAM_ID, NETWORK, IS_MAINNET, RPC_ENDPOINT } from './config.js';
|
|
39
|
+
const VERSION = '2.0.0';
|
|
40
|
+
// Create MCP server
|
|
41
|
+
const server = new Server({
|
|
42
|
+
name: 'baozi-mcp',
|
|
43
|
+
version: VERSION,
|
|
44
|
+
}, {
|
|
45
|
+
capabilities: {
|
|
46
|
+
tools: {},
|
|
47
|
+
resources: {},
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
// List available tools
|
|
51
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
52
|
+
return { tools: TOOLS };
|
|
53
|
+
});
|
|
54
|
+
// Handle tool calls
|
|
55
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
56
|
+
const { name, arguments: args } = request.params;
|
|
57
|
+
return handleTool(name, args || {});
|
|
58
|
+
});
|
|
59
|
+
// List available resources
|
|
60
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
61
|
+
return { resources: RESOURCES };
|
|
62
|
+
});
|
|
63
|
+
// Read resource content
|
|
64
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
65
|
+
const { uri } = request.params;
|
|
66
|
+
return handleResource(uri);
|
|
67
|
+
});
|
|
68
|
+
// Start server
|
|
69
|
+
async function main() {
|
|
70
|
+
const transport = new StdioServerTransport();
|
|
71
|
+
await server.connect(transport);
|
|
72
|
+
// Log startup info to stderr (stdout is for MCP protocol)
|
|
73
|
+
console.error('');
|
|
74
|
+
console.error('='.repeat(60));
|
|
75
|
+
console.error(`Baozi MCP Server v${VERSION}`);
|
|
76
|
+
console.error('='.repeat(60));
|
|
77
|
+
console.error('');
|
|
78
|
+
console.error(`Network: ${IS_MAINNET ? 'MAINNET' : 'Devnet'} (${NETWORK})`);
|
|
79
|
+
console.error(`Program ID: ${PROGRAM_ID.toBase58()}`);
|
|
80
|
+
console.error(`RPC: ${RPC_ENDPOINT.substring(0, 50)}...`);
|
|
81
|
+
console.error('');
|
|
82
|
+
console.error('Available Tools:');
|
|
83
|
+
console.error('-'.repeat(40));
|
|
84
|
+
TOOLS.forEach(tool => {
|
|
85
|
+
console.error(` ${tool.name}`);
|
|
86
|
+
console.error(` ${tool.description.substring(0, 70)}...`);
|
|
87
|
+
});
|
|
88
|
+
console.error('');
|
|
89
|
+
console.error('Available Resources:');
|
|
90
|
+
console.error('-'.repeat(40));
|
|
91
|
+
RESOURCES.forEach(resource => {
|
|
92
|
+
console.error(` ${resource.uri}`);
|
|
93
|
+
console.error(` ${resource.description}`);
|
|
94
|
+
});
|
|
95
|
+
console.error('');
|
|
96
|
+
console.error('Dynamic Resources:');
|
|
97
|
+
console.error('-'.repeat(40));
|
|
98
|
+
console.error(' baozi://portfolio/{wallet}');
|
|
99
|
+
console.error(' User portfolio with positions and statistics');
|
|
100
|
+
console.error('');
|
|
101
|
+
console.error('='.repeat(60));
|
|
102
|
+
console.error('Ready for connections...');
|
|
103
|
+
console.error('');
|
|
104
|
+
}
|
|
105
|
+
main().catch((error) => {
|
|
106
|
+
console.error('Fatal error:', error);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsMEJBQTBCLEVBQzFCLHlCQUF5QixHQUMxQixNQUFNLG9DQUFvQyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1RSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFFeEIsb0JBQW9CO0FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUN2QjtJQUNFLElBQUksRUFBRSxXQUFXO0lBQ2pCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLEVBQ0Q7SUFDRSxZQUFZLEVBQUU7UUFDWixLQUFLLEVBQUUsRUFBRTtRQUNULFNBQVMsRUFBRSxFQUFFO0tBQ2Q7Q0FDRixDQUNGLENBQUM7QUFFRix1QkFBdUI7QUFDdkIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUIsQ0FBQyxDQUFDLENBQUM7QUFFSCxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFB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L0MsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDOUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDOUIsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG4vKipcbiAqIEJhb3ppIE1DUCBTZXJ2ZXIgVjIuMC4wXG4gKlxuICogTW9kZWwgQ29udGV4dCBQcm90b2NvbCBzZXJ2ZXIgZm9yIEJhb3ppIHByZWRpY3Rpb24gbWFya2V0cyBvbiBTb2xhbmEuXG4gKiBOb3cgd2l0aCBtYWlubmV0IHN1cHBvcnQgYW5kIHRyYW5zYWN0aW9uIGJ1aWxkaW5nIGNhcGFiaWxpdGllcy5cbiAqXG4gKiBGZWF0dXJlczpcbiAqIC0gUmVhZCBtYXJrZXRzLCBwb3NpdGlvbnMsIHF1b3Rlc1xuICogLSBWYWxpZGF0ZSBtYXJrZXQgdGltaW5nICh2Ni4yIHJ1bGVzKVxuICogLSBCdWlsZCB1bnNpZ25lZCBiZXQgdHJhbnNhY3Rpb25zXG4gKiAtIFNpbXVsYXRlIHRyYW5zYWN0aW9ucyBiZWZvcmUgc2lnbmluZ1xuICpcbiAqIFVzYWdlOlxuICogICBucHggQGJhb3ppL21jcC1zZXJ2ZXJcbiAqXG4gKiBPciBhZGQgdG8gQ2xhdWRlIERlc2t0b3AgY29uZmlnOlxuICogICB7XG4gKiAgICAgXCJtY3BTZXJ2ZXJzXCI6IHtcbiAqICAgICAgIFwiYmFvemlcIjoge1xuICogICAgICAgICBcImNvbW1hbmRcIjogXCJucHhcIixcbiAqICAgICAgICAgXCJhcmdzXCI6IFtcIkBiYW96aS9tY3Atc2VydmVyXCJdXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9XG4gKlxuICogRW52aXJvbm1lbnQgVmFyaWFibGVzOlxuICogICBIRUxJVVNfUlBDX1VSTCAgICAtIEhlbGl1cyBSUEMgZW5kcG9pbnQgKHJlY29tbWVuZGVkKVxuICogICBTT0xBTkFfUlBDX1VSTCAgICAtIEFsdGVybmF0aXZlIFJQQyBlbmRwb2ludFxuICogICBTT0xBTkFfTkVUV09SSyAgICAtIE5ldHdvcms6ICdtYWlubmV0LWJldGEnIChkZWZhdWx0KSBvciAnZGV2bmV0J1xuICogICBCQU9aSV9QUk9HUkFNX0lEICAtIE92ZXJyaWRlIHByb2dyYW0gSUQgKGRlZmF1bHQ6IFY0LjcuNiBtYWlubmV0KVxuICovXG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qcyc7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3N0ZGlvLmpzJztcbmltcG9ydCB7XG4gIENhbGxUb29sUmVxdWVzdFNjaGVtYSxcbiAgTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSxcbiAgTGlzdFJlc291cmNlc1JlcXVlc3RTY2hlbWEsXG4gIFJlYWRSZXNvdXJjZVJlcXVlc3RTY2hlbWEsXG59IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvdHlwZXMuanMnO1xuXG5pbXBvcnQgeyBUT09MUywgaGFuZGxlVG9vbCB9IGZyb20gJy4vdG9vbHMuanMnO1xuaW1wb3J0IHsgUkVTT1VSQ0VTLCBoYW5kbGVSZXNvdXJjZSB9IGZyb20gJy4vcmVzb3VyY2VzLmpzJztcbmltcG9ydCB7IFBST0dSQU1fSUQsIE5FVFdPUkssIElTX01BSU5ORVQsIFJQQ19FTkRQT0lOVCB9IGZyb20gJy4vY29uZmlnLmpzJztcblxuY29uc3QgVkVSU0lPTiA9ICcyLjAuMCc7XG5cbi8vIENyZWF0ZSBNQ1Agc2VydmVyXG5jb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKFxuICB7XG4gICAgbmFtZTogJ2Jhb3ppLW1jcCcsXG4gICAgdmVyc2lvbjogVkVSU0lPTixcbiAgfSxcbiAge1xuICAgIGNhcGFiaWxpdGllczoge1xuICAgICAgdG9vbHM6IHt9LFxuICAgICAgcmVzb3VyY2VzOiB7fSxcbiAgICB9LFxuICB9XG4pO1xuXG4vLyBMaXN0IGF2YWlsYWJsZSB0b29sc1xuc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKExpc3RUb29sc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+IHtcbiAgcmV0dXJuIHsgdG9vbHM6IFRPT0xTIH07XG59KTtcblxuLy8gSGFuZGxlIHRvb2wgY2FsbHNcbnNlcnZlci5zZXRSZXF1ZXN0SGFuZGxlcihDYWxsVG9vbFJlcXVlc3RTY2hlbWEsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IHsgbmFtZSwgYXJndW1lbnRzOiBhcmdzIH0gPSByZXF1ZXN0LnBhcmFtcztcbiAgcmV0dXJuIGhhbmRsZVRvb2wobmFtZSwgYXJncyB8fCB7fSk7XG59KTtcblxuLy8gTGlzdCBhdmFpbGFibGUgcmVzb3VyY2VzXG5zZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoTGlzdFJlc291cmNlc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+IHtcbiAgcmV0dXJuIHsgcmVzb3VyY2VzOiBSRVNPVVJDRVMgfTtcbn0pO1xuXG4vLyBSZWFkIHJlc291cmNlIGNvbnRlbnRcbnNlcnZlci5zZXRSZXF1ZXN0SGFuZGxlcihSZWFkUmVzb3VyY2VSZXF1ZXN0U2NoZW1hLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICBjb25zdCB7IHVyaSB9ID0gcmVxdWVzdC5wYXJhbXM7XG4gIHJldHVybiBoYW5kbGVSZXNvdXJjZSh1cmkpO1xufSk7XG5cbi8vIFN0YXJ0IHNlcnZlclxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFN0ZGlvU2VydmVyVHJhbnNwb3J0KCk7XG4gIGF3YWl0IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG5cbiAgLy8gTG9nIHN0YXJ0dXAgaW5mbyB0byBzdGRlcnIgKHN0ZG91dCBpcyBmb3IgTUNQIHByb3RvY29sKVxuICBjb25zb2xlLmVycm9yKCcnKTtcbiAgY29uc29sZS5lcnJvcignPScucmVwZWF0KDYwKSk7XG4gIGNvbnNvbGUuZXJyb3IoYEJhb3ppIE1DUCBTZXJ2ZXIgdiR7VkVSU0lPTn1gKTtcbiAgY29uc29sZS5lcnJvcignPScucmVwZWF0KDYwKSk7XG4gIGNvbnNvbGUuZXJyb3IoJycpO1xuICBjb25zb2xlLmVycm9yKGBOZXR3b3JrOiAke0lTX01BSU5ORVQgPyAnTUFJTk5FVCcgOiAnRGV2bmV0J30gKCR7TkVUV09SS30pYCk7XG4gIGNvbnNvbGUuZXJyb3IoYFByb2dyYW0gSUQ6ICR7UFJPR1JBTV9JRC50b0Jhc2U1OCgpfWApO1xuICBjb25zb2xlLmVycm9yKGBSUEM6ICR7UlBDX0VORFBPSU5ULnN1YnN0cmluZygwLCA1MCl9Li4uYCk7XG4gIGNvbnNvbGUuZXJyb3IoJycpO1xuICBjb25zb2xlLmVycm9yKCdBdmFpbGFibGUgVG9vbHM6Jyk7XG4gIGNvbnNvbGUuZXJyb3IoJy0nLnJlcGVhdCg0MCkpO1xuICBUT09MUy5mb3JFYWNoKHRvb2wgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoYCAgJHt0b29sLm5hbWV9YCk7XG4gICAgY29uc29sZS5lcnJvcihgICAgICR7dG9vbC5kZXNjcmlwdGlvbi5zdWJzdHJpbmcoMCwgNzApfS4uLmApO1xuICB9KTtcbiAgY29uc29sZS5lcnJvcignJyk7XG4gIGNvbnNvbGUuZXJyb3IoJ0F2YWlsYWJsZSBSZXNvdXJjZXM6Jyk7XG4gIGNvbnNvbGUuZXJyb3IoJy0nLnJlcGVhdCg0MCkpO1xuICBSRVNPVVJDRVMuZm9yRWFjaChyZXNvdXJjZSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihgICAke3Jlc291cmNlLnVyaX1gKTtcbiAgICBjb25zb2xlLmVycm9yKGAgICAgJHtyZXNvdXJjZS5kZXNjcmlwdGlvbn1gKTtcbiAgfSk7XG4gIGNvbnNvbGUuZXJyb3IoJycpO1xuICBjb25zb2xlLmVycm9yKCdEeW5hbWljIFJlc291cmNlczonKTtcbiAgY29uc29sZS5lcnJvcignLScucmVwZWF0KDQwKSk7XG4gIGNvbnNvbGUuZXJyb3IoJyAgYmFvemk6Ly9wb3J0Zm9saW8ve3dhbGxldH0nKTtcbiAgY29uc29sZS5lcnJvcignICAgIFVzZXIgcG9ydGZvbGlvIHdpdGggcG9zaXRpb25zIGFuZCBzdGF0aXN0aWNzJyk7XG4gIGNvbnNvbGUuZXJyb3IoJycpO1xuICBjb25zb2xlLmVycm9yKCc9Jy5yZXBlYXQoNjApKTtcbiAgY29uc29sZS5lcnJvcignUmVhZHkgZm9yIGNvbm5lY3Rpb25zLi4uJyk7XG4gIGNvbnNvbGUuZXJyb3IoJycpO1xufVxuXG5tYWluKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gIGNvbnNvbGUuZXJyb3IoJ0ZhdGFsIGVycm9yOicsIGVycm9yKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const RESOURCES: {
|
|
2
|
+
uri: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
mimeType: string;
|
|
6
|
+
}[];
|
|
7
|
+
export declare function handleResource(uri: string): Promise<{
|
|
8
|
+
contents: Array<{
|
|
9
|
+
uri: string;
|
|
10
|
+
mimeType: string;
|
|
11
|
+
text: string;
|
|
12
|
+
}>;
|
|
13
|
+
}>;
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Resource Definitions for Baozi Markets
|
|
3
|
+
* V2.0.0 - Mainnet + Extended Resources
|
|
4
|
+
*
|
|
5
|
+
* Resources provide read-only data that can be fetched by URI.
|
|
6
|
+
*/
|
|
7
|
+
import { listMarkets } from './handlers/markets.js';
|
|
8
|
+
import { getPositionsSummary } from './handlers/positions.js';
|
|
9
|
+
import { PROGRAM_ID, FEES, BET_LIMITS, TIMING, MARKET_STATUS_NAMES, MARKET_LAYER_NAMES, IS_MAINNET, NETWORK, } from './config.js';
|
|
10
|
+
// =============================================================================
|
|
11
|
+
// V6.2 MARKET RULES DOCUMENT
|
|
12
|
+
// =============================================================================
|
|
13
|
+
const MARKET_RULES_V6_2 = `
|
|
14
|
+
# Baozi Market Creation Rules (v6.2)
|
|
15
|
+
|
|
16
|
+
## Overview
|
|
17
|
+
Markets must follow timing rules to ensure fair betting and accurate resolution.
|
|
18
|
+
|
|
19
|
+
## Rule A: Event-Based Markets
|
|
20
|
+
For markets based on a single point-in-time event (e.g., "Will X win the election?"):
|
|
21
|
+
|
|
22
|
+
1. **Betting Close Buffer**: Betting must close AT LEAST 12 hours before the event
|
|
23
|
+
2. **Recommended Buffer**: 18-24 hours provides safety margin for timezone issues
|
|
24
|
+
3. **Resolution**: After event occurs, market is resolved based on outcome
|
|
25
|
+
|
|
26
|
+
### Example (Rule A)
|
|
27
|
+
- Event: "Super Bowl kickoff at 2025-02-09 18:30:00 UTC"
|
|
28
|
+
- Question: "Will the Chiefs win Super Bowl LIX?"
|
|
29
|
+
- Recommended betting close: 2025-02-08 18:30:00 UTC (24h before)
|
|
30
|
+
- Latest acceptable close: 2025-02-09 06:30:00 UTC (12h before)
|
|
31
|
+
|
|
32
|
+
## Rule B: Measurement-Period Markets
|
|
33
|
+
For markets based on outcomes over a time period (e.g., "Will BTC reach $100k in January?"):
|
|
34
|
+
|
|
35
|
+
1. **CRITICAL**: Betting must close BEFORE measurement period starts
|
|
36
|
+
2. **No Overlap**: Zero tolerance for betting during measurement period
|
|
37
|
+
3. **Information Advantage**: Allowing bets during measurement enables unfair advantage
|
|
38
|
+
4. **Period Length**: Prefer 2-7 days for optimal user experience
|
|
39
|
+
|
|
40
|
+
### Example (Rule B)
|
|
41
|
+
- Question: "Will ETH be above $4000 on Feb 1st 2025?"
|
|
42
|
+
- Measurement period: Feb 1st 00:00 - 23:59 UTC
|
|
43
|
+
- Betting must close: Before Feb 1st 00:00 UTC
|
|
44
|
+
- Recommended close: Jan 31st 22:00 UTC (2h buffer)
|
|
45
|
+
|
|
46
|
+
## Common Timing Mistakes
|
|
47
|
+
|
|
48
|
+
### INVALID Configurations:
|
|
49
|
+
- Betting closes AFTER event starts (Rule A violation)
|
|
50
|
+
- Betting overlaps with measurement period (Rule B violation)
|
|
51
|
+
- Buffer < 12 hours for event markets (too risky)
|
|
52
|
+
|
|
53
|
+
### WARNING Configurations:
|
|
54
|
+
- Buffer 12-18 hours (acceptable but tight)
|
|
55
|
+
- Measurement period > 7 days (poor UX)
|
|
56
|
+
- Very short buffer < 2 hours for measurement (risk of late bets)
|
|
57
|
+
|
|
58
|
+
## Validation Endpoint
|
|
59
|
+
Use the \`validate_market_params\` tool to check your market parameters before creation.
|
|
60
|
+
`;
|
|
61
|
+
// =============================================================================
|
|
62
|
+
// MARKET TEMPLATES
|
|
63
|
+
// =============================================================================
|
|
64
|
+
const EVENT_MARKET_TEMPLATE = {
|
|
65
|
+
type: 'event',
|
|
66
|
+
description: 'Template for event-based prediction markets (single point in time)',
|
|
67
|
+
example: {
|
|
68
|
+
question: 'Will [Team A] win the [Event Name]?',
|
|
69
|
+
closing_time: 'YYYY-MM-DDTHH:MM:SSZ (24 hours before event)',
|
|
70
|
+
event_time: 'YYYY-MM-DDTHH:MM:SSZ (when event occurs)',
|
|
71
|
+
market_type: 'event',
|
|
72
|
+
layer: 'Lab',
|
|
73
|
+
},
|
|
74
|
+
rules: [
|
|
75
|
+
'Question must be answerable with YES or NO',
|
|
76
|
+
'Event time must be after closing time',
|
|
77
|
+
'Minimum 12 hour buffer between close and event',
|
|
78
|
+
'Question max 200 characters',
|
|
79
|
+
],
|
|
80
|
+
examples: [
|
|
81
|
+
'Will the Chiefs win Super Bowl LIX?',
|
|
82
|
+
'Will Bitcoin reach $100,000 before March 2025?',
|
|
83
|
+
'Will SpaceX successfully launch Starship on [date]?',
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
const MEASUREMENT_MARKET_TEMPLATE = {
|
|
87
|
+
type: 'measurement',
|
|
88
|
+
description: 'Template for measurement-period prediction markets (outcome over time range)',
|
|
89
|
+
example: {
|
|
90
|
+
question: 'Will [Metric] be above [Value] on [Date]?',
|
|
91
|
+
closing_time: 'YYYY-MM-DDTHH:MM:SSZ (before measurement starts)',
|
|
92
|
+
measurement_start: 'YYYY-MM-DDTHH:MM:SSZ (when measurement period begins)',
|
|
93
|
+
measurement_end: 'YYYY-MM-DDTHH:MM:SSZ (when measurement period ends)',
|
|
94
|
+
market_type: 'measurement',
|
|
95
|
+
layer: 'Lab',
|
|
96
|
+
},
|
|
97
|
+
rules: [
|
|
98
|
+
'Betting MUST close before measurement period starts',
|
|
99
|
+
'Measurement period should be well-defined',
|
|
100
|
+
'Prefer 2-7 day periods for optimal UX',
|
|
101
|
+
'Data source for resolution must be clear',
|
|
102
|
+
],
|
|
103
|
+
examples: [
|
|
104
|
+
'Will ETH be above $4000 on Feb 1st 2025?',
|
|
105
|
+
'Will US inflation be below 3% in January 2025?',
|
|
106
|
+
'Will AAPL close above $200 on earnings day?',
|
|
107
|
+
],
|
|
108
|
+
};
|
|
109
|
+
// =============================================================================
|
|
110
|
+
// RESOURCE DEFINITIONS
|
|
111
|
+
// =============================================================================
|
|
112
|
+
export const RESOURCES = [
|
|
113
|
+
{
|
|
114
|
+
uri: 'baozi://markets/open',
|
|
115
|
+
name: 'Open Markets',
|
|
116
|
+
description: 'List of currently open prediction markets accepting bets on Solana mainnet',
|
|
117
|
+
mimeType: 'application/json',
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
uri: 'baozi://markets/all',
|
|
121
|
+
name: 'All Markets',
|
|
122
|
+
description: 'List of all prediction markets (open, closed, resolved) on Solana mainnet',
|
|
123
|
+
mimeType: 'application/json',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
uri: 'baozi://config',
|
|
127
|
+
name: 'Program Config',
|
|
128
|
+
description: 'Baozi V4.7.6 program configuration, fees, and limits',
|
|
129
|
+
mimeType: 'application/json',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
uri: 'baozi://rules',
|
|
133
|
+
name: 'Market Rules v6.2',
|
|
134
|
+
description: 'Documentation of market timing rules and validation requirements',
|
|
135
|
+
mimeType: 'text/markdown',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
uri: 'baozi://templates/event',
|
|
139
|
+
name: 'Event Market Template',
|
|
140
|
+
description: 'Template for creating event-based prediction markets',
|
|
141
|
+
mimeType: 'application/json',
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
uri: 'baozi://templates/measurement',
|
|
145
|
+
name: 'Measurement Market Template',
|
|
146
|
+
description: 'Template for creating measurement-period prediction markets',
|
|
147
|
+
mimeType: 'application/json',
|
|
148
|
+
},
|
|
149
|
+
];
|
|
150
|
+
// =============================================================================
|
|
151
|
+
// RESOURCE HANDLERS
|
|
152
|
+
// =============================================================================
|
|
153
|
+
export async function handleResource(uri) {
|
|
154
|
+
try {
|
|
155
|
+
// Handle portfolio requests with wallet parameter
|
|
156
|
+
if (uri.startsWith('baozi://portfolio/')) {
|
|
157
|
+
const wallet = uri.replace('baozi://portfolio/', '');
|
|
158
|
+
const summary = await getPositionsSummary(wallet);
|
|
159
|
+
return {
|
|
160
|
+
contents: [
|
|
161
|
+
{
|
|
162
|
+
uri,
|
|
163
|
+
mimeType: 'application/json',
|
|
164
|
+
text: JSON.stringify({
|
|
165
|
+
type: 'portfolio',
|
|
166
|
+
network: NETWORK,
|
|
167
|
+
...summary,
|
|
168
|
+
fetchedAt: new Date().toISOString(),
|
|
169
|
+
}, null, 2),
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
switch (uri) {
|
|
175
|
+
case 'baozi://markets/open': {
|
|
176
|
+
const markets = await listMarkets('Active');
|
|
177
|
+
return {
|
|
178
|
+
contents: [
|
|
179
|
+
{
|
|
180
|
+
uri,
|
|
181
|
+
mimeType: 'application/json',
|
|
182
|
+
text: JSON.stringify({
|
|
183
|
+
type: 'open_markets',
|
|
184
|
+
network: NETWORK,
|
|
185
|
+
programId: PROGRAM_ID.toBase58(),
|
|
186
|
+
count: markets.length,
|
|
187
|
+
markets: markets.map(m => ({
|
|
188
|
+
publicKey: m.publicKey,
|
|
189
|
+
marketId: m.marketId,
|
|
190
|
+
question: m.question,
|
|
191
|
+
layer: m.layer,
|
|
192
|
+
yesPercent: m.yesPercent,
|
|
193
|
+
noPercent: m.noPercent,
|
|
194
|
+
totalPoolSol: m.totalPoolSol,
|
|
195
|
+
closingTime: m.closingTime,
|
|
196
|
+
isBettingOpen: m.isBettingOpen,
|
|
197
|
+
})),
|
|
198
|
+
fetchedAt: new Date().toISOString(),
|
|
199
|
+
}, null, 2),
|
|
200
|
+
},
|
|
201
|
+
],
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
case 'baozi://markets/all': {
|
|
205
|
+
const markets = await listMarkets();
|
|
206
|
+
const byStatus = {};
|
|
207
|
+
const byLayer = {};
|
|
208
|
+
for (const m of markets) {
|
|
209
|
+
byStatus[m.status] = (byStatus[m.status] || 0) + 1;
|
|
210
|
+
byLayer[m.layer] = (byLayer[m.layer] || 0) + 1;
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
contents: [
|
|
214
|
+
{
|
|
215
|
+
uri,
|
|
216
|
+
mimeType: 'application/json',
|
|
217
|
+
text: JSON.stringify({
|
|
218
|
+
type: 'all_markets',
|
|
219
|
+
network: NETWORK,
|
|
220
|
+
programId: PROGRAM_ID.toBase58(),
|
|
221
|
+
count: markets.length,
|
|
222
|
+
byStatus,
|
|
223
|
+
byLayer,
|
|
224
|
+
markets: markets.map(m => ({
|
|
225
|
+
publicKey: m.publicKey,
|
|
226
|
+
marketId: m.marketId,
|
|
227
|
+
question: m.question,
|
|
228
|
+
status: m.status,
|
|
229
|
+
layer: m.layer,
|
|
230
|
+
winningOutcome: m.winningOutcome,
|
|
231
|
+
totalPoolSol: m.totalPoolSol,
|
|
232
|
+
})),
|
|
233
|
+
fetchedAt: new Date().toISOString(),
|
|
234
|
+
}, null, 2),
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
case 'baozi://config': {
|
|
240
|
+
return {
|
|
241
|
+
contents: [
|
|
242
|
+
{
|
|
243
|
+
uri,
|
|
244
|
+
mimeType: 'application/json',
|
|
245
|
+
text: JSON.stringify({
|
|
246
|
+
type: 'program_config',
|
|
247
|
+
program: {
|
|
248
|
+
id: PROGRAM_ID.toBase58(),
|
|
249
|
+
network: NETWORK,
|
|
250
|
+
version: '4.7.6',
|
|
251
|
+
isMainnet: IS_MAINNET,
|
|
252
|
+
},
|
|
253
|
+
fees: {
|
|
254
|
+
official: {
|
|
255
|
+
platformFeeBps: FEES.OFFICIAL_PLATFORM_FEE_BPS,
|
|
256
|
+
platformFeePercent: `${FEES.OFFICIAL_PLATFORM_FEE_BPS / 100}%`,
|
|
257
|
+
creationFeeSol: FEES.OFFICIAL_CREATION_FEE / 1e9,
|
|
258
|
+
},
|
|
259
|
+
lab: {
|
|
260
|
+
platformFeeBps: FEES.LAB_PLATFORM_FEE_BPS,
|
|
261
|
+
platformFeePercent: `${FEES.LAB_PLATFORM_FEE_BPS / 100}%`,
|
|
262
|
+
creationFeeSol: FEES.LAB_CREATION_FEE / 1e9,
|
|
263
|
+
},
|
|
264
|
+
private: {
|
|
265
|
+
platformFeeBps: FEES.PRIVATE_PLATFORM_FEE_BPS,
|
|
266
|
+
platformFeePercent: `${FEES.PRIVATE_PLATFORM_FEE_BPS / 100}%`,
|
|
267
|
+
creationFeeSol: FEES.PRIVATE_CREATION_FEE / 1e9,
|
|
268
|
+
},
|
|
269
|
+
affiliateFeeBps: FEES.AFFILIATE_FEE_BPS,
|
|
270
|
+
creatorFeeBps: FEES.CREATOR_FEE_BPS,
|
|
271
|
+
},
|
|
272
|
+
limits: {
|
|
273
|
+
minBetSol: BET_LIMITS.MIN_BET_SOL,
|
|
274
|
+
maxBetSol: BET_LIMITS.MAX_BET_SOL,
|
|
275
|
+
},
|
|
276
|
+
timing: {
|
|
277
|
+
bettingFreezeSeconds: TIMING.BETTING_FREEZE_SECONDS,
|
|
278
|
+
minEventBufferHours: TIMING.MIN_EVENT_BUFFER_HOURS,
|
|
279
|
+
recommendedEventBufferHours: TIMING.RECOMMENDED_EVENT_BUFFER_HOURS,
|
|
280
|
+
disputeWindowSeconds: TIMING.DISPUTE_WINDOW_SECONDS,
|
|
281
|
+
},
|
|
282
|
+
marketStatuses: MARKET_STATUS_NAMES,
|
|
283
|
+
marketLayers: MARKET_LAYER_NAMES,
|
|
284
|
+
links: {
|
|
285
|
+
website: 'https://baozi.bet',
|
|
286
|
+
api: 'https://baozi.ooo/api/v4',
|
|
287
|
+
explorer: `https://solscan.io/account/${PROGRAM_ID.toBase58()}${IS_MAINNET ? '' : '?cluster=devnet'}`,
|
|
288
|
+
},
|
|
289
|
+
fetchedAt: new Date().toISOString(),
|
|
290
|
+
}, null, 2),
|
|
291
|
+
},
|
|
292
|
+
],
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
case 'baozi://rules': {
|
|
296
|
+
return {
|
|
297
|
+
contents: [
|
|
298
|
+
{
|
|
299
|
+
uri,
|
|
300
|
+
mimeType: 'text/markdown',
|
|
301
|
+
text: MARKET_RULES_V6_2,
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
case 'baozi://templates/event': {
|
|
307
|
+
return {
|
|
308
|
+
contents: [
|
|
309
|
+
{
|
|
310
|
+
uri,
|
|
311
|
+
mimeType: 'application/json',
|
|
312
|
+
text: JSON.stringify(EVENT_MARKET_TEMPLATE, null, 2),
|
|
313
|
+
},
|
|
314
|
+
],
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
case 'baozi://templates/measurement': {
|
|
318
|
+
return {
|
|
319
|
+
contents: [
|
|
320
|
+
{
|
|
321
|
+
uri,
|
|
322
|
+
mimeType: 'application/json',
|
|
323
|
+
text: JSON.stringify(MEASUREMENT_MARKET_TEMPLATE, null, 2),
|
|
324
|
+
},
|
|
325
|
+
],
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
default:
|
|
329
|
+
throw new Error(`Unknown resource: ${uri}`);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
throw error;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jlc291cmNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUNILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsVUFBVSxFQUNWLElBQUksRUFDSixVQUFVLEVBQ1YsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLE9BQU8sR0FDUixNQUFNLGFBQWEsQ0FBQztBQUVyQixnRkFBZ0Y7QUFDaEYsNkJBQTZCO0FBQzdCLGdGQUFnRjtBQUVoRixNQUFNLGlCQUFpQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQStDekIsQ0FBQztBQUVGLGdGQUFnRjtBQUNoRixtQkFBbUI7QUFDbkIsZ0ZBQWdGO0FBRWhGLE1BQU0scUJBQXFCLEdBQUc7SUFDNUIsSUFBSSxFQUFFLE9BQU87SUFDYixXQUFXLEVBQUUsb0VBQW9FO0lBQ2pGLE9BQU8sRUFBRTtRQUNQLFFBQVEsRUFBRSxxQ0FBcUM7UUFDL0MsWUFBWSxFQUFFLDhDQUE4QztRQUM1RCxVQUFVLEVBQUUsMENBQTBDO1FBQ3RELFdBQVcsRUFBRSxPQUFPO1FBQ3BCLEtBQUssRUFBRSxLQUFLO0tBQ2I7SUFDRCxLQUFLLEVBQUU7UUFDTCw0Q0FBNEM7UUFDNUMsdUNBQXVDO1FBQ3ZDLGdEQUFnRDtRQUNoRCw2QkFBNkI7S0FDOUI7SUFDRCxRQUFRLEVBQUU7UUFDUixxQ0FBcUM7UUFDckMsZ0RBQWdEO1FBQ2hELHFEQUFxRDtLQUN0RDtDQUNGLENBQUM7QUFFRixNQUFNLDJCQUEyQixHQUFHO0lBQ2xDLElBQUksRUFBRSxhQUFhO0lBQ25CLFdBQVcsRUFBRSw4RUFBOEU7SUFDM0YsT0FBTyxF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Q0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNQ1AgUmVzb3VyY2UgRGVmaW5pdGlvbnMgZm9yIEJhb3ppIE1hcmtldHNcbiAqIFYyLjAuMCAtIE1haW5uZXQgKyBFeHRlbmRlZCBSZXNvdXJjZXNcbiAqXG4gKiBSZXNvdXJjZXMgcHJvdmlkZSByZWFkLW9ubHkgZGF0YSB0aGF0IGNhbiBiZSBmZXRjaGVkIGJ5IFVSSS5cbiAqL1xuaW1wb3J0IHsgbGlzdE1hcmtldHMgfSBmcm9tICcuL2hhbmRsZXJzL21hcmtldHMuanMnO1xuaW1wb3J0IHsgZ2V0UG9zaXRpb25zU3VtbWFyeSB9IGZyb20gJy4vaGFuZGxlcnMvcG9zaXRpb25zLmpzJztcbmltcG9ydCB7XG4gIFBST0dSQU1fSUQsXG4gIEZFRVMsXG4gIEJFVF9MSU1JVFMsXG4gIFRJTUlORyxcbiAgTUFSS0VUX1NUQVRVU19OQU1FUyxcbiAgTUFSS0VUX0xBWUVSX05BTUVTLFxuICBJU19NQUlOTkVULFxuICBORVRXT1JLLFxufSBmcm9tICcuL2NvbmZpZy5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBWNi4yIE1BUktFVCBSVUxFUyBET0NVTUVOVFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgTUFSS0VUX1JVTEVTX1Y2XzIgPSBgXG4jIEJhb3ppIE1hcmtldCBDcmVhdGlvbiBSdWxlcyAodjYuMilcblxuIyMgT3ZlcnZpZXdcbk1hcmtldHMgbXVzdCBmb2xsb3cgdGltaW5nIHJ1bGVzIHRvIGVuc3VyZSBmYWlyIGJldHRpbmcgYW5kIGFjY3VyYXRlIHJlc29sdXRpb24uXG5cbiMjIFJ1bGUgQTogRXZlbnQtQmFzZWQgTWFya2V0c1xuRm9yIG1hcmtldHMgYmFzZWQgb24gYSBzaW5nbGUgcG9pbnQtaW4tdGltZSBldmVudCAoZS5nLiwgXCJXaWxsIFggd2luIHRoZSBlbGVjdGlvbj9cIik6XG5cbjEuICoqQmV0dGluZyBDbG9zZSBCdWZmZXIqKjogQmV0dGluZyBtdXN0IGNsb3NlIEFUIExFQVNUIDEyIGhvdXJzIGJlZm9yZSB0aGUgZXZlbnRcbjIuICoqUmVjb21tZW5kZWQgQnVmZmVyKio6IDE4LTI0IGhvdXJzIHByb3ZpZGVzIHNhZmV0eSBtYXJnaW4gZm9yIHRpbWV6b25lIGlzc3Vlc1xuMy4gKipSZXNvbHV0aW9uKio6IEFmdGVyIGV2ZW50IG9jY3VycywgbWFya2V0IGlzIHJlc29sdmVkIGJhc2VkIG9uIG91dGNvbWVcblxuIyMjIEV4YW1wbGUgKFJ1bGUgQSlcbi0gRXZlbnQ6IFwiU3VwZXIgQm93bCBraWNrb2ZmIGF0IDIwMjUtMDItMDkgMTg6MzA6MDAgVVRDXCJcbi0gUXVlc3Rpb246IFwiV2lsbCB0aGUgQ2hpZWZzIHdpbiBTdXBlciBCb3dsIExJWD9cIlxuLSBSZWNvbW1lbmRlZCBiZXR0aW5nIGNsb3NlOiAyMDI1LTAyLTA4IDE4OjMwOjAwIFVUQyAoMjRoIGJlZm9yZSlcbi0gTGF0ZXN0IGFjY2VwdGFibGUgY2xvc2U6IDIwMjUtMDItMDkgMDY6MzA6MDAgVVRDICgxMmggYmVmb3JlKVxuXG4jIyBSdWxlIEI6IE1lYXN1cmVtZW50LVBlcmlvZCBNYXJrZXRzXG5Gb3IgbWFya2V0cyBiYXNlZCBvbiBvdXRjb21lcyBvdmVyIGEgdGltZSBwZXJpb2QgKGUuZy4sIFwiV2lsbCBCVEMgcmVhY2ggJDEwMGsgaW4gSmFudWFyeT9cIik6XG5cbjEuICoqQ1JJVElDQUwqKjogQmV0dGluZyBtdXN0IGNsb3NlIEJFRk9SRSBtZWFzdXJlbWVudCBwZXJpb2Qgc3RhcnRzXG4yLiAqKk5vIE92ZXJsYXAqKjogWmVybyB0b2xlcmFuY2UgZm9yIGJldHRpbmcgZHVyaW5nIG1lYXN1cmVtZW50IHBlcmlvZFxuMy4gKipJbmZvcm1hdGlvbiBBZHZhbnRhZ2UqKjogQWxsb3dpbmcgYmV0cyBkdXJpbmcgbWVhc3VyZW1lbnQgZW5hYmxlcyB1bmZhaXIgYWR2YW50YWdlXG40LiAqKlBlcmlvZCBMZW5ndGgqKjogUHJlZmVyIDItNyBkYXlzIGZvciBvcHRpbWFsIHVzZXIgZXhwZXJpZW5jZVxuXG4jIyMgRXhhbXBsZSAoUnVsZSBCKVxuLSBRdWVzdGlvbjogXCJXaWxsIEVUSCBiZSBhYm92ZSAkNDAwMCBvbiBGZWIgMXN0IDIwMjU/XCJcbi0gTWVhc3VyZW1lbnQgcGVyaW9kOiBGZWIgMXN0IDAwOjAwIC0gMjM6NTkgVVRDXG4tIEJldHRpbmcgbXVzdCBjbG9zZTogQmVmb3JlIEZlYiAxc3QgMDA6MDAgVVRDXG4tIFJlY29tbWVuZGVkIGNsb3NlOiBKYW4gMzFzdCAyMjowMCBVVEMgKDJoIGJ1ZmZlcilcblxuIyMgQ29tbW9uIFRpbWluZyBNaXN0YWtlc1xuXG4jIyMgSU5WQUxJRCBDb25maWd1cmF0aW9uczpcbi0gQmV0dGluZyBjbG9zZXMgQUZURVIgZXZlbnQgc3RhcnRzIChSdWxlIEEgdmlvbGF0aW9uKVxuLSBCZXR0aW5nIG92ZXJsYXBzIHdpdGggbWVhc3VyZW1lbnQgcGVyaW9kIChSdWxlIEIgdmlvbGF0aW9uKVxuLSBCdWZmZXIgPCAxMiBob3VycyBmb3IgZXZlbnQgbWFya2V0cyAodG9vIHJpc2t5KVxuXG4jIyMgV0FSTklORyBDb25maWd1cmF0aW9uczpcbi0gQnVmZmVyIDEyLTE4IGhvdXJzIChhY2NlcHRhYmxlIGJ1dCB0aWdodClcbi0gTWVhc3VyZW1lbnQgcGVyaW9kID4gNyBkYXlzIChwb29yIFVYKVxuLSBWZXJ5IHNob3J0IGJ1ZmZlciA8IDIgaG91cnMgZm9yIG1lYXN1cmVtZW50IChyaXNrIG9mIGxhdGUgYmV0cylcblxuIyMgVmFsaWRhdGlvbiBFbmRwb2ludFxuVXNlIHRoZSBcXGB2YWxpZGF0ZV9tYXJrZXRfcGFyYW1zXFxgIHRvb2wgdG8gY2hlY2sgeW91ciBtYXJrZXQgcGFyYW1ldGVycyBiZWZvcmUgY3JlYXRpb24uXG5gO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTUFSS0VUIFRFTVBMQVRFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgRVZFTlRfTUFSS0VUX1RFTVBMQVRFID0ge1xuICB0eXBlOiAnZXZlbnQnLFxuICBkZXNjcmlwdGlvbjogJ1RlbXBsYXRlIGZvciBldmVudC1iYXNlZCBwcmVkaWN0aW9uIG1hcmtldHMgKHNpbmdsZSBwb2ludCBpbiB0aW1lKScsXG4gIGV4YW1wbGU6IHtcbiAgICBxdWVzdGlvbjogJ1dpbGwgW1RlYW0gQV0gd2luIHRoZSBbRXZlbnQgTmFtZV0/JyxcbiAgICBjbG9zaW5nX3RpbWU6ICdZWVlZLU1NLUREVEhIOk1NOlNTWiAoMjQgaG91cnMgYmVmb3JlIGV2ZW50KScsXG4gICAgZXZlbnRfdGltZTogJ1lZWVktTU0tRERUSEg6TU06U1NaICh3aGVuIGV2ZW50IG9jY3VycyknLFxuICAgIG1hcmtldF90eXBlOiAnZXZlbnQnLFxuICAgIGxheWVyOiAnTGFiJyxcbiAgfSxcbiAgcnVsZXM6IFtcbiAgICAnUXVlc3Rpb24gbXVzdCBiZSBhbnN3ZXJhYmxlIHdpdGggWUVTIG9yIE5PJyxcbiAgICAnRXZlbnQgdGltZSBtdXN0IGJlIGFmdGVyIGNsb3NpbmcgdGltZScsXG4gICAgJ01pbmltdW0gMTIgaG91ciBidWZmZXIgYmV0d2VlbiBjbG9zZSBhbmQgZXZlbnQnLFxuICAgICdRdWVzdGlvbiBtYXggMjAwIGNoYXJhY3RlcnMnLFxuICBdLFxuICBleGFtcGxlczogW1xuICAgICdXaWxsIHRoZSBDaGllZnMgd2luIFN1cGVyIEJvd2wgTElYPycsXG4gICAgJ1dpbGwgQml0Y29pbiByZWFjaCAkMTAwLDAwMCBiZWZvcmUgTWFyY2ggMjAyNT8nLFxuICAgICdXaWxsIFNwYWNlWCBzdWNjZXNzZnVsbHkgbGF1bmNoIFN0YXJzaGlwIG9uIFtkYXRlXT8nLFxuICBdLFxufTtcblxuY29uc3QgTUVBU1VSRU1FTlRfTUFSS0VUX1RFTVBMQVRFID0ge1xuICB0eXBlOiAnbWVhc3VyZW1lbnQnLFxuICBkZXNjcmlwdGlvbjogJ1RlbXBsYXRlIGZvciBtZWFzdXJlbWVudC1wZXJpb2QgcHJlZGljdGlvbiBtYXJrZXRzIChvdXRjb21lIG92ZXIgdGltZSByYW5nZSknLFxuICBleGFtcGxlOiB7XG4gICAgcXVlc3Rpb246ICdXaWxsIFtNZXRyaWNdIGJlIGFib3ZlIFtWYWx1ZV0gb24gW0RhdGVdPycsXG4gICAgY2xvc2luZ190aW1lOiAnWVlZWS1NTS1ERFRISDpNTTpTU1ogKGJlZm9yZSBtZWFzdXJlbWVudCBzdGFydHMpJyxcbiAgICBtZWFzdXJlbWVudF9zdGFydDogJ1lZWVktTU0tRERUSEg6TU06U1NaICh3aGVuIG1lYXN1cmVtZW50IHBlcmlvZCBiZWdpbnMpJyxcbiAgICBtZWFzdXJlbWVudF9lbmQ6ICdZWVlZLU1NLUREVEhIOk1NOlNTWiAod2hlbiBtZWFzdXJlbWVudCBwZXJpb2QgZW5kcyknLFxuICAgIG1hcmtldF90eXBlOiAnbWVhc3VyZW1lbnQnLFxuICAgIGxheWVyOiAnTGFiJyxcbiAgfSxcbiAgcnVsZXM6IFtcbiAgICAnQmV0dGluZyBNVVNUIGNsb3NlIGJlZm9yZSBtZWFzdXJlbWVudCBwZXJpb2Qgc3RhcnRzJyxcbiAgICAnTWVhc3VyZW1lbnQgcGVyaW9kIHNob3VsZCBiZSB3ZWxsLWRlZmluZWQnLFxuICAgICdQcmVmZXIgMi03IGRheSBwZXJpb2RzIGZvciBvcHRpbWFsIFVYJyxcbiAgICAnRGF0YSBzb3VyY2UgZm9yIHJlc29sdXRpb24gbXVzdCBiZSBjbGVhcicsXG4gIF0sXG4gIGV4YW1wbGVzOiBbXG4gICAgJ1dpbGwgRVRIIGJlIGFib3ZlICQ0MDAwIG9uIEZlYiAxc3QgMjAyNT8nLFxuICAgICdXaWxsIFVTIGluZmxhdGlvbiBiZSBiZWxvdyAzJSBpbiBKYW51YXJ5IDIwMjU/JyxcbiAgICAnV2lsbCBBQVBMIGNsb3NlIGFib3ZlICQyMDAgb24gZWFybmluZ3MgZGF5PycsXG4gIF0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUkVTT1VSQ0UgREVGSU5JVElPTlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBjb25zdCBSRVNPVVJDRVMgPSBbXG4gIHtcbiAgICB1cmk6ICdiYW96aTovL21hcmtldHMvb3BlbicsXG4gICAgbmFtZTogJ09wZW4gTWFya2V0cycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IG9mIGN1cnJlbnRseSBvcGVuIHByZWRpY3Rpb24gbWFya2V0cyBhY2NlcHRpbmcgYmV0cyBvbiBTb2xhbmEgbWFpbm5ldCcsXG4gICAgbWltZVR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgfSxcbiAge1xuICAgIHVyaTogJ2Jhb3ppOi8vbWFya2V0cy9hbGwnLFxuICAgIG5hbWU6ICdBbGwgTWFya2V0cycsXG4gICAgZGVzY3JpcHRpb246ICdMaXN0IG9mIGFsbCBwcmVkaWN0aW9uIG1hcmtldHMgKG9wZW4sIGNsb3NlZCwgcmVzb2x2ZWQpIG9uIFNvbGFuYSBtYWlubmV0JyxcbiAgICBtaW1lVHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICB9LFxuICB7XG4gICAgdXJpOiAnYmFvemk6Ly9jb25maWcnLFxuICAgIG5hbWU6ICdQcm9ncmFtIENvbmZpZycsXG4gICAgZGVzY3JpcHRpb246ICdCYW96aSBWNC43LjYgcHJvZ3JhbSBjb25maWd1cmF0aW9uLCBmZWVzLCBhbmQgbGltaXRzJyxcbiAgICBtaW1lVHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICB9LFxuICB7XG4gICAgdXJpOiAnYmFvemk6Ly9ydWxlcycsXG4gICAgbmFtZTogJ01hcmtldCBSdWxlcyB2Ni4yJyxcbiAgICBkZXNjcmlwdGlvbjogJ0RvY3VtZW50YXRpb24gb2YgbWFya2V0IHRpbWluZyBydWxlcyBhbmQgdmFsaWRhdGlvbiByZXF1aXJlbWVudHMnLFxuICAgIG1pbWVUeXBlOiAndGV4dC9tYXJrZG93bicsXG4gIH0sXG4gIHtcbiAgICB1cmk6ICdiYW96aTovL3RlbXBsYXRlcy9ldmVudCcsXG4gICAgbmFtZTogJ0V2ZW50IE1hcmtldCBUZW1wbGF0ZScsXG4gICAgZGVzY3JpcHRpb246ICdUZW1wbGF0ZSBmb3IgY3JlYXRpbmcgZXZlbnQtYmFzZWQgcHJlZGljdGlvbiBtYXJrZXRzJyxcbiAgICBtaW1lVHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICB9LFxuICB7XG4gICAgdXJpOiAnYmFvemk6Ly90ZW1wbGF0ZXMvbWVhc3VyZW1lbnQnLFxuICAgIG5hbWU6ICdNZWFzdXJlbWVudCBNYXJrZXQgVGVtcGxhdGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnVGVtcGxhdGUgZm9yIGNyZWF0aW5nIG1lYXN1cmVtZW50LXBlcmlvZCBwcmVkaWN0aW9uIG1hcmtldHMnLFxuICAgIG1pbWVUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gIH0sXG5dO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUkVTT1VSQ0UgSEFORExFUlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVSZXNvdXJjZSh1cmk6IHN0cmluZyk6IFByb21pc2U8e1xuICBjb250ZW50czogQXJyYXk8eyB1cmk6IHN0cmluZzsgbWltZVR5cGU6IHN0cmluZzsgdGV4dDogc3RyaW5nIH0+O1xufT4ge1xuICB0cnkge1xuICAgIC8vIEhhbmRsZSBwb3J0Zm9saW8gcmVxdWVzdHMgd2l0aCB3YWxsZXQgcGFyYW1ldGVyXG4gICAgaWYgKHVyaS5zdGFydHNXaXRoKCdiYW96aTovL3BvcnRmb2xpby8nKSkge1xuICAgICAgY29uc3Qgd2FsbGV0ID0gdXJpLnJlcGxhY2UoJ2Jhb3ppOi8vcG9ydGZvbGlvLycsICcnKTtcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSBhd2FpdCBnZXRQb3NpdGlvbnNTdW1tYXJ5KHdhbGxldCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgIG1pbWVUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdwb3J0Zm9saW8nLFxuICAgICAgICAgICAgICBuZXR3b3JrOiBORVRXT1JLLFxuICAgICAgICAgICAgICAuLi5zdW1tYXJ5LFxuICAgICAgICAgICAgICBmZXRjaGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgIH0sIG51bGwsIDIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHN3aXRjaCAodXJpKSB7XG4gICAgICBjYXNlICdiYW96aTovL21hcmtldHMvb3Blbic6IHtcbiAgICAgICAgY29uc3QgbWFya2V0cyA9IGF3YWl0IGxpc3RNYXJrZXRzKCdBY3RpdmUnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB1cmksXG4gICAgICAgICAgICAgIG1pbWVUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb3Blbl9tYXJrZXRzJyxcbiAgICAgICAgICAgICAgICBuZXR3b3JrOiBORVRXT1JLLFxuICAgICAgICAgICAgICAgIHByb2dyYW1JZDogUFJPR1JBTV9JRC50b0Jhc2U1OCgpLFxuICAgICAgICAgICAgICAgIGNvdW50OiBtYXJrZXRzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBtYXJrZXRzOiBtYXJrZXRzLm1hcChtID0+ICh7XG4gICAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IG0ucHVibGljS2V5LFxuICAgICAgICAgICAgICAgICAgbWFya2V0SWQ6IG0ubWFya2V0SWQsXG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbjogbS5xdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgIGxheWVyOiBtLmxheWVyLFxuICAgICAgICAgICAgICAgICAgeWVzUGVyY2VudDogbS55ZXNQZXJjZW50LFxuICAgICAgICAgICAgICAgICAgbm9QZXJjZW50OiBtLm5vUGVyY2VudCxcbiAgICAgICAgICAgICAgICAgIHRvdGFsUG9vbFNvbDogbS50b3RhbFBvb2xTb2wsXG4gICAgICAgICAgICAgICAgICBjbG9zaW5nVGltZTogbS5jbG9zaW5nVGltZSxcbiAgICAgICAgICAgICAgICAgIGlzQmV0dGluZ09wZW46IG0uaXNCZXR0aW5nT3BlbixcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgZmV0Y2hlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgIH0sIG51bGwsIDIpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlICdiYW96aTovL21hcmtldHMvYWxsJzoge1xuICAgICAgICBjb25zdCBtYXJrZXRzID0gYXdhaXQgbGlzdE1hcmtldHMoKTtcbiAgICAgICAgY29uc3QgYnlTdGF0dXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbiAgICAgICAgY29uc3QgYnlMYXllcjogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgbSBvZiBtYXJrZXRzKSB7XG4gICAgICAgICAgYnlTdGF0dXNbbS5zdGF0dXNdID0gKGJ5U3RhdHVzW20uc3RhdHVzXSB8fCAwKSArIDE7XG4gICAgICAgICAgYnlMYXllclttLmxheWVyXSA9IChieUxheWVyW20ubGF5ZXJdIHx8IDApICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdXJpLFxuICAgICAgICAgICAgICBtaW1lVHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICB0ZXh0OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2FsbF9tYXJrZXRzJyxcbiAgICAgICAgICAgICAgICBuZXR3b3JrOiBORVRXT1JLLFxuICAgICAgICAgICAgICAgIHByb2dyYW1JZDogUFJPR1JBTV9JRC50b0Jhc2U1OCgpLFxuICAgICAgICAgICAgICAgIGNvdW50OiBtYXJrZXRzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBieVN0YXR1cyxcbiAgICAgICAgICAgICAgICBieUxheWVyLFxuICAgICAgICAgICAgICAgIG1hcmtldHM6IG1hcmtldHMubWFwKG0gPT4gKHtcbiAgICAgICAgICAgICAgICAgIHB1YmxpY0tleTogbS5wdWJsaWNLZXksXG4gICAgICAgICAgICAgICAgICBtYXJrZXRJZDogbS5tYXJrZXRJZCxcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uOiBtLnF1ZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgc3RhdHVzOiBtLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgIGxheWVyOiBtLmxheWVyLFxuICAgICAgICAgICAgICAgICAgd2lubmluZ091dGNvbWU6IG0ud2lubmluZ091dGNvbWUsXG4gICAgICAgICAgICAgICAgICB0b3RhbFBvb2xTb2w6IG0udG90YWxQb29sU29sLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICBmZXRjaGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgfSwgbnVsbCwgMiksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2Jhb3ppOi8vY29uZmlnJzoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgICAgbWltZVR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdwcm9ncmFtX2NvbmZpZycsXG4gICAgICAgICAgICAgICAgcHJvZ3JhbToge1xuICAgICAgICAgICAgICAgICAgaWQ6IFBST0dSQU1fSUQudG9CYXNlNTgoKSxcbiAgICAgICAgICAgICAgICAgIG5ldHdvcms6IE5FVFdPUkssXG4gICAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnNC43LjYnLFxuICAgICAgICAgICAgICAgICAgaXNNYWlubmV0OiBJU19NQUlOTkVULFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZmVlczoge1xuICAgICAgICAgICAgICAgICAgb2ZmaWNpYWw6IHtcbiAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1GZWVCcHM6IEZFRVMuT0ZGSUNJQUxfUExBVEZPUk1fRkVFX0JQUyxcbiAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1GZWVQZXJjZW50OiBgJHtGRUVTLk9GRklDSUFMX1BMQVRGT1JNX0ZFRV9CUFMgLyAxMDB9JWAsXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uRmVlU29sOiBGRUVTLk9GRklDSUFMX0NSRUFUSU9OX0ZFRSAvIDFlOSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBsYWI6IHtcbiAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1GZWVCcHM6IEZFRVMuTEFCX1BMQVRGT1JNX0ZFRV9CUFMsXG4gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtRmVlUGVyY2VudDogYCR7RkVFUy5MQUJfUExBVEZPUk1fRkVFX0JQUyAvIDEwMH0lYCxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRpb25GZWVTb2w6IEZFRVMuTEFCX0NSRUFUSU9OX0ZFRSAvIDFlOSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBwcml2YXRlOiB7XG4gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtRmVlQnBzOiBGRUVTLlBSSVZBVEVfUExBVEZPUk1fRkVFX0JQUyxcbiAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1GZWVQZXJjZW50OiBgJHtGRUVTLlBSSVZBVEVfUExBVEZPUk1fRkVFX0JQUyAvIDEwMH0lYCxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRpb25GZWVTb2w6IEZFRVMuUFJJVkFURV9DUkVBVElPTl9GRUUgLyAxZTksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYWZmaWxpYXRlRmVlQnBzOiBGRUVTLkFGRklMSUFURV9GRUVfQlBTLFxuICAgICAgICAgICAgICAgICAgY3JlYXRvckZlZUJwczogRkVFUy5DUkVBVE9SX0ZFRV9CUFMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICAgICAgICAgIG1pbkJldFNvbDogQkVUX0xJTUlUUy5NSU5fQkVUX1NPTCxcbiAgICAgICAgICAgICAgICAgIG1heEJldFNvbDogQkVUX0xJTUlUUy5NQVhfQkVUX1NPTCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRpbWluZzoge1xuICAgICAgICAgICAgICAgICAgYmV0dGluZ0ZyZWV6ZVNlY29uZHM6IFRJTUlORy5CRVRUSU5HX0ZSRUVaRV9TRUNPTkRTLFxuICAgICAgICAgICAgICAgICAgbWluRXZlbnRCdWZmZXJIb3VyczogVElNSU5HLk1JTl9FVkVOVF9CVUZGRVJfSE9VUlMsXG4gICAgICAgICAgICAgICAgICByZWNvbW1lbmRlZEV2ZW50QnVmZmVySG91cnM6IFRJTUlORy5SRUNPTU1FTkRFRF9FVkVOVF9CVUZGRVJfSE9VUlMsXG4gICAgICAgICAgICAgICAgICBkaXNwdXRlV2luZG93U2Vjb25kczogVElNSU5HLkRJU1BVVEVfV0lORE9XX1NFQ09ORFMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtYXJrZXRTdGF0dXNlczogTUFSS0VUX1NUQVRVU19OQU1FUyxcbiAgICAgICAgICAgICAgICBtYXJrZXRMYXllcnM6IE1BUktFVF9MQVlFUl9OQU1FUyxcbiAgICAgICAgICAgICAgICBsaW5rczoge1xuICAgICAgICAgICAgICAgICAgd2Vic2l0ZTogJ2h0dHBzOi8vYmFvemkuYmV0JyxcbiAgICAgICAgICAgICAgICAgIGFwaTogJ2h0dHBzOi8vYmFvemkub29vL2FwaS92NCcsXG4gICAgICAgICAgICAgICAgICBleHBsb3JlcjogYGh0dHBzOi8vc29sc2Nhbi5pby9hY2NvdW50LyR7UFJPR1JBTV9JRC50b0Jhc2U1OCgpfSR7SVNfTUFJTk5FVCA/ICcnIDogJz9jbHVzdGVyPWRldm5ldCd9YCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZldGNoZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgICAgICB9LCBudWxsLCAyKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYmFvemk6Ly9ydWxlcyc6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB1cmksXG4gICAgICAgICAgICAgIG1pbWVUeXBlOiAndGV4dC9tYXJrZG93bicsXG4gICAgICAgICAgICAgIHRleHQ6IE1BUktFVF9SVUxFU19WNl8yLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlICdiYW96aTovL3RlbXBsYXRlcy9ldmVudCc6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB1cmksXG4gICAgICAgICAgICAgIG1pbWVUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgIHRleHQ6IEpTT04uc3RyaW5naWZ5KEVWRU5UX01BUktFVF9URU1QTEFURSwgbnVsbCwgMiksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2Jhb3ppOi8vdGVtcGxhdGVzL21lYXN1cmVtZW50Jzoge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHVyaSxcbiAgICAgICAgICAgICAgbWltZVR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgdGV4dDogSlNPTi5zdHJpbmdpZnkoTUVBU1VSRU1FTlRfTUFSS0VUX1RFTVBMQVRFLCBudWxsLCAyKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlc291cmNlOiAke3VyaX1gKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiJdfQ==
|