mcp-perforce-server 2.0.0 โ 2.1.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/MCP_CONFIG_EXAMPLES.md +18 -0
- package/README.md +105 -15
- package/dist/p4/config.d.ts +2 -0
- package/dist/p4/config.d.ts.map +1 -1
- package/dist/p4/config.js +29 -11
- package/dist/p4/config.js.map +1 -1
- package/dist/p4/parse.d.ts +28 -28
- package/dist/p4/parse.d.ts.map +1 -1
- package/dist/p4/parse.js +121 -0
- package/dist/p4/parse.js.map +1 -1
- package/dist/p4/runner.d.ts +3 -0
- package/dist/p4/runner.d.ts.map +1 -1
- package/dist/p4/runner.js +53 -25
- package/dist/p4/runner.js.map +1 -1
- package/dist/p4/security.d.ts +2 -0
- package/dist/p4/security.d.ts.map +1 -1
- package/dist/p4/security.js +50 -28
- package/dist/p4/security.js.map +1 -1
- package/dist/performance.d.ts +47 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +67 -0
- package/dist/performance.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +18 -7
- package/dist/server.js.map +1 -1
- package/dist/tools/advanced.js +13 -13
- package/dist/tools/advanced.js.map +1 -1
- package/dist/tools/basic.d.ts.map +1 -1
- package/dist/tools/basic.js +186 -55
- package/dist/tools/basic.js.map +1 -1
- package/dist/tools/changelist.d.ts.map +1 -1
- package/dist/tools/changelist.js +167 -105
- package/dist/tools/changelist.js.map +1 -1
- package/dist/tools/index.d.ts +2 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/utils.d.ts +0 -7
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +23 -26
- package/dist/tools/utils.js.map +1 -1
- package/package.json +2 -1
package/MCP_CONFIG_EXAMPLES.md
CHANGED
|
@@ -9,6 +9,22 @@ To prevent VS Code from asking for approval on every command and to hide termina
|
|
|
9
9
|
- `"LOG_LEVEL": "error"` - Minimize console output (only show errors)
|
|
10
10
|
- `"disabled": false` - Ensure server is enabled
|
|
11
11
|
|
|
12
|
+
## Authentication Configuration
|
|
13
|
+
|
|
14
|
+
**Important:** Configure your Perforce credentials using one of these methods:
|
|
15
|
+
|
|
16
|
+
1. **`.p4config` file** (Recommended) - Create in project root:
|
|
17
|
+
```
|
|
18
|
+
P4PORT=perforce-server:1666
|
|
19
|
+
P4USER=your-username
|
|
20
|
+
P4CLIENT=your-workspace-name
|
|
21
|
+
P4PASSWD=your-password
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
2. **Environment variables** in MCP config (see examples below)
|
|
25
|
+
|
|
26
|
+
The server automatically detects and uses these credentials. Passwords are masked in logs for security.
|
|
27
|
+
|
|
12
28
|
## VS Code with Claude Dev/Cline
|
|
13
29
|
|
|
14
30
|
### Option 1: Using .p4config file (Recommended)
|
|
@@ -42,6 +58,7 @@ Create a `.p4config` file in your project root, then:
|
|
|
42
58
|
"P4PORT": "perforce-server:1666",
|
|
43
59
|
"P4USER": "your-username",
|
|
44
60
|
"P4CLIENT": "your-workspace-name",
|
|
61
|
+
"P4PASSWD": "your-password",
|
|
45
62
|
"P4CHARSET": "utf8",
|
|
46
63
|
"P4_READONLY_MODE": "false",
|
|
47
64
|
"P4_DISABLE_DELETE": "true",
|
|
@@ -88,6 +105,7 @@ Create a `.p4config` file in your project root, then:
|
|
|
88
105
|
"P4PORT": "perforce-server:1666",
|
|
89
106
|
"P4USER": "your-username",
|
|
90
107
|
"P4CLIENT": "your-workspace-name",
|
|
108
|
+
"P4PASSWD": "your-password",
|
|
91
109
|
"P4_READONLY_MODE": "false",
|
|
92
110
|
"P4_DISABLE_DELETE": "true",
|
|
93
111
|
"LOG_LEVEL": "error"
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
Enterprise-grade MCP (Model Context Protocol) server providing secure, non-interactive Perforce operations for AI-assisted development workflows with Claude, ChatGPT, VS Code, and Cursor IDE.
|
|
9
9
|
|
|
10
|
-
> **Created
|
|
10
|
+
> **Created using vibe coding to solve real-world Perforce automation challenges. Open source, community-driven, and ready for customization!
|
|
11
11
|
|
|
12
12
|
## Overview
|
|
13
13
|
|
|
@@ -20,13 +20,14 @@ Production-ready server that exposes **37+ Perforce VCS operations** through the
|
|
|
20
20
|
- ๐งน **Input Sanitization** - Regex validation and path traversal protection
|
|
21
21
|
- ๐พ **Memory Management** - Process monitoring with automatic GC and limits
|
|
22
22
|
- ๐ **Audit Logging** - Complete operation tracking with retention policies
|
|
23
|
+
- โก **Performance Optimized** - Fast/Balanced/Secure modes with configurable timeouts and caching
|
|
23
24
|
- ๐ **Cross-platform Support** - Windows, macOS, Linux compatibility
|
|
24
25
|
- ๐ค **AI Integration** - Works with Claude, ChatGPT, VS Code, Cursor, and other AI assistants
|
|
25
|
-
-
|
|
26
|
+
- ๐ **Non-interactive Operations** - Automated Perforce commands with comprehensive error handling
|
|
26
27
|
- ๐ **Multi-project Support** - Automatic `.p4config` detection with upward directory search
|
|
27
28
|
- ๐ก๏ธ **Production Ready** - Structured JSON responses with standardized error codes
|
|
28
29
|
- ๐ง **Developer Friendly** - TypeScript support with comprehensive documentation
|
|
29
|
-
-
|
|
30
|
+
- ๐ฏ **Zero Configuration** - Works out-of-the-box with sensible defaults
|
|
30
31
|
|
|
31
32
|
## Core Capabilities
|
|
32
33
|
|
|
@@ -116,15 +117,6 @@ Production-ready server that exposes **37+ Perforce VCS operations** through the
|
|
|
116
117
|
- **Open source** with community contributions and transparent development
|
|
117
118
|
- **Active maintenance** with regular updates and security patches
|
|
118
119
|
|
|
119
|
-
## Origin Story
|
|
120
|
-
|
|
121
|
-
This project was born from a real need! I was facing challenges integrating Perforce with AI development tools and decided to solve it using **vibe coding** - building something that just works, feels right, and solves real problems.
|
|
122
|
-
|
|
123
|
-
**๐ค Community Welcome**
|
|
124
|
-
- โ
**Use freely** - This is open source, use it however you need
|
|
125
|
-
- ๐ **Report issues** - Found a bug? Please let me know!
|
|
126
|
-
- ๐ง **Customize** - Fork it, modify it, make it yours
|
|
127
|
-
- ๐ก **Contribute** - Ideas, PRs, and feedback are always welcome
|
|
128
120
|
|
|
129
121
|
## Installation
|
|
130
122
|
|
|
@@ -143,6 +135,7 @@ npm install -g mcp-perforce-server
|
|
|
143
135
|
P4PORT=your-perforce-server:1666
|
|
144
136
|
P4USER=your-username
|
|
145
137
|
P4CLIENT=your-workspace-name
|
|
138
|
+
P4PASSWD=your-password
|
|
146
139
|
```
|
|
147
140
|
|
|
148
141
|
**Method B: MCP Environment Variables**
|
|
@@ -154,18 +147,60 @@ npm install -g mcp-perforce-server
|
|
|
154
147
|
"env": {
|
|
155
148
|
"P4PORT": "your-perforce-server:1666",
|
|
156
149
|
"P4USER": "your-username",
|
|
157
|
-
"P4CLIENT": "your-workspace-name"
|
|
150
|
+
"P4CLIENT": "your-workspace-name",
|
|
151
|
+
"P4PASSWD": "your-password"
|
|
158
152
|
}
|
|
159
153
|
}
|
|
160
154
|
}
|
|
161
155
|
}
|
|
162
156
|
```
|
|
163
157
|
|
|
164
|
-
3. **
|
|
158
|
+
3. **Performance (Optional):** For faster responses in development:
|
|
159
|
+
```bash
|
|
160
|
+
export P4_PERFORMANCE_MODE=fast
|
|
161
|
+
export P4_TIMEOUT_MS=5000
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
4. **Verification:**
|
|
165
165
|
```bash
|
|
166
166
|
mcp-perforce-server --help
|
|
167
167
|
```
|
|
168
168
|
|
|
169
|
+
## Authentication Configuration
|
|
170
|
+
|
|
171
|
+
The server supports multiple methods for providing Perforce credentials, prioritized in this order:
|
|
172
|
+
|
|
173
|
+
### 1. **Environment Variables** (Highest Priority)
|
|
174
|
+
Set `P4PASSWD` along with other Perforce environment variables:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
export P4PORT=perforce-server:1666
|
|
178
|
+
export P4USER=your-username
|
|
179
|
+
export P4CLIENT=your-workspace-name
|
|
180
|
+
export P4PASSWD=your-password
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### 2. **`.p4config` File** (Recommended)
|
|
184
|
+
Create a `.p4config` file in your project root:
|
|
185
|
+
|
|
186
|
+
```ini
|
|
187
|
+
P4PORT=perforce-server:1666
|
|
188
|
+
P4USER=your-username
|
|
189
|
+
P4CLIENT=your-workspace-name
|
|
190
|
+
P4PASSWD=your-password
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
The server automatically searches upward from the current directory to find this file.
|
|
194
|
+
|
|
195
|
+
### 3. **MCP Configuration**
|
|
196
|
+
Include credentials in your MCP server configuration (see examples above).
|
|
197
|
+
|
|
198
|
+
**Security Notes:**
|
|
199
|
+
- Passwords are **masked** (`***masked***`) in all logs
|
|
200
|
+
- The system operates **non-interactively** - no password prompts
|
|
201
|
+
- Authentication failures return `P4_AUTH_FAILED` error code
|
|
202
|
+
- For production, prefer `.p4config` files or secure environment variables
|
|
203
|
+
|
|
169
204
|
## Security Configuration
|
|
170
205
|
|
|
171
206
|
**Default Security Posture:**
|
|
@@ -184,6 +219,61 @@ P4_READONLY_MODE=false P4_DISABLE_DELETE=true
|
|
|
184
219
|
P4_READONLY_MODE=false P4_DISABLE_DELETE=false
|
|
185
220
|
```
|
|
186
221
|
|
|
222
|
+
## Performance Configuration
|
|
223
|
+
|
|
224
|
+
**Performance Optimization:**
|
|
225
|
+
The MCP server includes multiple performance modes to balance speed with security features:
|
|
226
|
+
|
|
227
|
+
**Development (Fastest Response):**
|
|
228
|
+
```bash
|
|
229
|
+
# Fast Mode - Optimized for development speed
|
|
230
|
+
export P4_PERFORMANCE_MODE=fast
|
|
231
|
+
export P4_TIMEOUT_MS=5000 # 5 second timeout
|
|
232
|
+
export P4_ENABLE_RATE_LIMITING=false # Disable rate limiting overhead
|
|
233
|
+
export P4_ENABLE_MEMORY_LIMITS=false # Disable memory monitoring overhead
|
|
234
|
+
export P4_ENABLE_AUDIT_LOGGING=false # Disable audit logging overhead
|
|
235
|
+
export P4_CONFIG_CACHE_TTL=600000 # Cache config for 10 minutes
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Balanced (Recommended):**
|
|
239
|
+
```bash
|
|
240
|
+
# Balanced Mode - Good performance with essential monitoring
|
|
241
|
+
export P4_PERFORMANCE_MODE=balanced
|
|
242
|
+
export P4_TIMEOUT_MS=10000 # 10 second timeout
|
|
243
|
+
export P4_ENABLE_RATE_LIMITING=false # Rate limiting disabled
|
|
244
|
+
export P4_ENABLE_MEMORY_LIMITS=true # Memory monitoring enabled
|
|
245
|
+
export P4_ENABLE_AUDIT_LOGGING=false # Audit logging disabled
|
|
246
|
+
export P4_CONFIG_CACHE_TTL=300000 # Cache config for 5 minutes
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
**Production (Secure):**
|
|
250
|
+
```bash
|
|
251
|
+
# Secure Mode - Full security features enabled
|
|
252
|
+
export P4_PERFORMANCE_MODE=secure
|
|
253
|
+
export P4_TIMEOUT_MS=15000 # 15 second timeout
|
|
254
|
+
export P4_ENABLE_RATE_LIMITING=true # Rate limiting enabled
|
|
255
|
+
export P4_ENABLE_MEMORY_LIMITS=true # Memory monitoring enabled
|
|
256
|
+
export P4_ENABLE_AUDIT_LOGGING=true # Audit logging enabled
|
|
257
|
+
export P4_CONFIG_CACHE_TTL=300000 # Cache config for 5 minutes
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Performance Features:**
|
|
261
|
+
- โก **Fast Command Timeouts** - Configurable 5-60+ second timeouts vs default 60s
|
|
262
|
+
- ๐๏ธ **Configuration Caching** - Cache .p4config lookups for 5-10 minutes
|
|
263
|
+
- ๐ง **Optimized Memory Checks** - Periodic vs per-operation memory monitoring
|
|
264
|
+
- ๐ฆ **Smart Rate Limiting** - Disabled in development, optimized algorithms in production
|
|
265
|
+
- ๐ **Selective Audit Logging** - Minimal overhead with configurable detail levels
|
|
266
|
+
- ๐ฏ **Automatic Mode Detection** - Development vs production environment detection
|
|
267
|
+
|
|
268
|
+
**Custom Tuning:**
|
|
269
|
+
```bash
|
|
270
|
+
# Fine-tune individual components
|
|
271
|
+
P4_TIMEOUT_MS=8000 # Custom timeout in milliseconds
|
|
272
|
+
P4_CONFIG_CACHE_TTL=420000 # Custom cache TTL (7 minutes)
|
|
273
|
+
P4_MAX_MEMORY_MB=1024 # Memory limit in MB
|
|
274
|
+
NODE_ENV=development # Triggers automatic performance optimizations
|
|
275
|
+
```
|
|
276
|
+
|
|
187
277
|
## Compliance & Security Features
|
|
188
278
|
|
|
189
279
|
**Enterprise-Grade Security Suite:**
|
|
@@ -475,4 +565,4 @@ This project follows security best practices:
|
|
|
475
565
|
|
|
476
566
|
MIT License - Feel free to use, modify, and distribute as needed. See [LICENSE](LICENSE) for details.
|
|
477
567
|
|
|
478
|
-
**TL;DR:** Use it however you want, just keep the license notice. Built for the community! ๐
|
|
568
|
+
**TL;DR:** Use it however you want, just keep the license notice. Built for the community! ๐
|
package/dist/p4/config.d.ts
CHANGED
package/dist/p4/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/p4/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAe;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/p4/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAe;IAC1D,OAAO,CAAC,WAAW,CAAoE;IACvF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyD;IAEnF;;OAEG;IACG,UAAU,CAAC,SAAS,GAAE,MAAsB,GAAG,OAAO,CAAC,cAAc,CAAC;IA+C5E;;OAEG;YACW,YAAY;IAgC1B;;OAEG;YACW,eAAe;IA4B7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACG,cAAc,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW7D;;OAEG;IACG,eAAe,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACrD,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5B,YAAY,EAAE,cAAc,CAAC;KAC9B,CAAC;IAgBF;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,cAAc,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IA4BvF;;OAEG;IACH,eAAe,IAAI,cAAc;IAOjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,OAAO,GAAE;QAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KACb,GAAG,MAAM;CAyBhB"}
|
package/dist/p4/config.js
CHANGED
|
@@ -37,36 +37,54 @@ exports.P4Config = void 0;
|
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
class P4Config {
|
|
40
|
+
constructor() {
|
|
41
|
+
this.configCache = new Map();
|
|
42
|
+
this.CACHE_TTL = parseInt(process.env.P4_CONFIG_CACHE_TTL || '300000'); // 5 minutes default
|
|
43
|
+
}
|
|
40
44
|
/**
|
|
41
45
|
* Find .p4config file by searching upward from the given directory
|
|
42
46
|
*/
|
|
43
47
|
async findConfig(startPath = process.cwd()) {
|
|
44
48
|
const configName = process.env.P4CONFIG || P4Config.DEFAULT_CONFIG_NAME;
|
|
49
|
+
const cacheKey = `${startPath}:${configName}`;
|
|
50
|
+
// Check cache first for performance
|
|
51
|
+
const cached = this.configCache.get(cacheKey);
|
|
52
|
+
if (cached && (Date.now() - cached.timestamp) < this.CACHE_TTL) {
|
|
53
|
+
return cached.result;
|
|
54
|
+
}
|
|
45
55
|
try {
|
|
46
56
|
const { configPath, projectRoot } = await this.searchUpward(startPath, configName);
|
|
57
|
+
let result;
|
|
47
58
|
if (!configPath || !projectRoot) {
|
|
48
|
-
|
|
59
|
+
result = {
|
|
49
60
|
found: false,
|
|
50
61
|
config: {},
|
|
51
62
|
environment: { P4CONFIG: configName },
|
|
52
63
|
};
|
|
53
64
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
65
|
+
else {
|
|
66
|
+
const config = await this.parseConfigFile(configPath);
|
|
67
|
+
const environment = this.buildEnvironment(config, configName);
|
|
68
|
+
result = {
|
|
69
|
+
found: true,
|
|
70
|
+
configPath,
|
|
71
|
+
projectRoot,
|
|
72
|
+
config,
|
|
73
|
+
environment,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// Cache the result for future use
|
|
77
|
+
this.configCache.set(cacheKey, { result, timestamp: Date.now() });
|
|
78
|
+
return result;
|
|
63
79
|
}
|
|
64
80
|
catch (error) {
|
|
65
|
-
|
|
81
|
+
const result = {
|
|
66
82
|
found: false,
|
|
67
83
|
config: {},
|
|
68
84
|
environment: { P4CONFIG: configName },
|
|
69
85
|
};
|
|
86
|
+
this.configCache.set(cacheKey, { result, timestamp: Date.now() });
|
|
87
|
+
return result;
|
|
70
88
|
}
|
|
71
89
|
}
|
|
72
90
|
/**
|
package/dist/p4/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/p4/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAe7B,MAAa,QAAQ;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/p4/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAe7B,MAAa,QAAQ;IAArB;QAEU,gBAAW,GAAG,IAAI,GAAG,EAAyD,CAAC;QACtE,cAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,QAAQ,CAAC,CAAC,CAAC,oBAAoB;IA4R1G,CAAC;IA1RC;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,YAAoB,OAAO,CAAC,GAAG,EAAE;QAChD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,mBAAmB,CAAC;QACxE,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,UAAU,EAAE,CAAC;QAE9C,oCAAoC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/D,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAEnF,IAAI,MAAsB,CAAC;YAC3B,IAAI,CAAC,UAAU,IAAI,CAAC,WAAW,EAAE,CAAC;gBAChC,MAAM,GAAG;oBACP,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,EAAE;oBACV,WAAW,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;iBACtC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;gBACtD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;gBAE9D,MAAM,GAAG;oBACP,KAAK,EAAE,IAAI;oBACX,UAAU;oBACV,WAAW;oBACX,MAAM;oBACN,WAAW;iBACZ,CAAC;YACJ,CAAC;YAED,kCAAkC;YAClC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG;gBACb,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,EAAE;gBACV,WAAW,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE;aACtC,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAClE,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CACxB,SAAiB,EACjB,UAAkB;QAElB,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;QAE1C,OAAO,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;YAEtD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACxD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,yCAAyC;YAC3C,CAAC;YAED,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,+BAA+B;QAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB;QACrB,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,UAAkB;QAC9C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,gCAAgC;YAChC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnE,SAAS;YACX,CAAC;YAED,wBAAwB;YACxB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAEvD,2BAA2B;gBAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;gBACzD,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,MAA8B,EAC9B,UAAkB;QAElB,MAAM,GAAG,GAA2B;YAClC,QAAQ,EAAE,UAAU;SACrB,CAAC;QAEF,kDAAkD;QAClD,MAAM,UAAU,GAA2B;YACzC,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,UAAU;YACpB,SAAS,EAAE,WAAW;YACtB,QAAQ,EAAE,UAAU;YACpB,gBAAgB,EAAE,kBAAkB;YACpC,UAAU,EAAE,YAAY;YACxB,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,UAAU;SACrB,CAAC;QAEF,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtB,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,aAAsB;QACzC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAErD,OAAO,YAAY,CAAC,WAAW,IAAI,QAAQ,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,aAAsB;QAK1C,MAAM,SAAS,GAAG,aAAa,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAEtD,qFAAqF;QACrF,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,IAAI,SAAS,CAAC;QAElD,sEAAsE;QACtE,MAAM,GAAG,GAAG;YACV,GAAG,YAAY,CAAC,WAAW;YAC3B,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,mCAAmC;SACjE,CAAC;QAEF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,YAA4B;QAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,6CAA6C;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACxC,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAE1E,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEzC,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO;YACL,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,OAAO,EAAE,gBAAgB;YACxE,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,OAAO,EAAE,gBAAgB;SAC3E,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,8EAA8E;QAC9E,MAAM,MAAM,GAAG;YACb,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU;YACvD,kBAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU;SAClE,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,UAKlB,EAAE;QACJ,MAAM,QAAQ,GAAG;;;;SAIZ,OAAO,CAAC,IAAI,IAAI,2BAA2B;;;SAG3C,OAAO,CAAC,IAAI,IAAI,eAAe;;;WAG7B,OAAO,CAAC,MAAM,IAAI,kBAAkB;;;EAG7C,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,kBAAkB;;;;;;;CAOtE,CAAC;QAEE,OAAO,QAAQ,CAAC;IAClB,CAAC;;AA9RH,4BA+RC;AA9RyB,4BAAmB,GAAG,WAAW,AAAd,CAAe"}
|
package/dist/p4/parse.d.ts
CHANGED
|
@@ -7,113 +7,113 @@ export interface ParsedRecord {
|
|
|
7
7
|
/**
|
|
8
8
|
* Parse p4 -ztag output into structured data
|
|
9
9
|
*/
|
|
10
|
-
export declare function parseZtagOutput(output: string): ParsedRecord[];
|
|
10
|
+
export declare function parseZtagOutput(output: string | any): ParsedRecord[];
|
|
11
11
|
/**
|
|
12
12
|
* Parse p4 info output into key-value pairs
|
|
13
13
|
*/
|
|
14
|
-
export declare function parseInfoOutput(output: string): ParsedRecord;
|
|
14
|
+
export declare function parseInfoOutput(output: string | any): ParsedRecord;
|
|
15
15
|
/**
|
|
16
16
|
* Parse p4 opened output into file records
|
|
17
17
|
*/
|
|
18
|
-
export declare function parseOpenedOutput(output: string): ParsedRecord[];
|
|
18
|
+
export declare function parseOpenedOutput(output: string | any): ParsedRecord[];
|
|
19
19
|
/**
|
|
20
20
|
* Parse p4 changes output into changelist records
|
|
21
21
|
*/
|
|
22
|
-
export declare function parseChangesOutput(output: string): ParsedRecord[];
|
|
22
|
+
export declare function parseChangesOutput(output: string | any): ParsedRecord[];
|
|
23
23
|
/**
|
|
24
24
|
* Parse p4 filelog output into file history records
|
|
25
25
|
*/
|
|
26
|
-
export declare function parseFilelogOutput(output: string): ParsedRecord[];
|
|
26
|
+
export declare function parseFilelogOutput(output: string | any): ParsedRecord[];
|
|
27
27
|
/**
|
|
28
28
|
* Parse p4 clients output into client records
|
|
29
29
|
*/
|
|
30
|
-
export declare function parseClientsOutput(output: string): ParsedRecord[];
|
|
30
|
+
export declare function parseClientsOutput(output: string | any): ParsedRecord[];
|
|
31
31
|
/**
|
|
32
32
|
* Parse p4 diff output into structured diff information
|
|
33
33
|
*/
|
|
34
|
-
export declare function parseDiffOutput(output: string): ParsedRecord;
|
|
34
|
+
export declare function parseDiffOutput(output: string | any): ParsedRecord;
|
|
35
35
|
/**
|
|
36
36
|
* Parse p4 sync output into sync records
|
|
37
37
|
*/
|
|
38
|
-
export declare function parseSyncOutput(output: string): ParsedRecord[];
|
|
38
|
+
export declare function parseSyncOutput(output: string | any): ParsedRecord[];
|
|
39
39
|
/**
|
|
40
40
|
* Parse p4 resolve output into conflict resolution records
|
|
41
41
|
*/
|
|
42
|
-
export declare function parseResolveOutput(output: string): ParsedRecord[];
|
|
42
|
+
export declare function parseResolveOutput(output: string | any): ParsedRecord[];
|
|
43
43
|
/**
|
|
44
44
|
* Parse p4 shelve output into shelved changelist records
|
|
45
45
|
*/
|
|
46
|
-
export declare function parseShelveOutput(output: string): ParsedRecord[];
|
|
46
|
+
export declare function parseShelveOutput(output: string | any): ParsedRecord[];
|
|
47
47
|
/**
|
|
48
48
|
* Parse p4 unshelve output into unshelved records
|
|
49
49
|
*/
|
|
50
|
-
export declare function parseUnshelveOutput(output: string): ParsedRecord[];
|
|
50
|
+
export declare function parseUnshelveOutput(output: string | any): ParsedRecord[];
|
|
51
51
|
/**
|
|
52
52
|
* Parse p4 blame/annotate output into line-by-line attribution
|
|
53
53
|
*/
|
|
54
|
-
export declare function parseBlameOutput(output: string): ParsedRecord[];
|
|
54
|
+
export declare function parseBlameOutput(output: string | any): ParsedRecord[];
|
|
55
55
|
/**
|
|
56
56
|
* Parse p4 copy output into copied file records
|
|
57
57
|
*/
|
|
58
|
-
export declare function parseCopyOutput(output: string): ParsedRecord[];
|
|
58
|
+
export declare function parseCopyOutput(output: string | any): ParsedRecord[];
|
|
59
59
|
/**
|
|
60
60
|
* Parse p4 move output into moved file records
|
|
61
61
|
*/
|
|
62
|
-
export declare function parseMoveOutput(output: string): ParsedRecord[];
|
|
62
|
+
export declare function parseMoveOutput(output: string | any): ParsedRecord[];
|
|
63
63
|
/**
|
|
64
64
|
* Parse p4 grep output into search result records
|
|
65
65
|
*/
|
|
66
|
-
export declare function parseGrepOutput(output: string): ParsedRecord[];
|
|
66
|
+
export declare function parseGrepOutput(output: string | any): ParsedRecord[];
|
|
67
67
|
/**
|
|
68
68
|
* Parse p4 files output into file records
|
|
69
69
|
*/
|
|
70
|
-
export declare function parseFilesOutput(output: string): ParsedRecord[];
|
|
70
|
+
export declare function parseFilesOutput(output: string | any): ParsedRecord[];
|
|
71
71
|
/**
|
|
72
72
|
* Parse p4 dirs output into directory records
|
|
73
73
|
*/
|
|
74
|
-
export declare function parseDirsOutput(output: string): ParsedRecord[];
|
|
74
|
+
export declare function parseDirsOutput(output: string | any): ParsedRecord[];
|
|
75
75
|
/**
|
|
76
76
|
* Parse p4 users output into user records
|
|
77
77
|
*/
|
|
78
|
-
export declare function parseUsersOutput(output: string): ParsedRecord[];
|
|
78
|
+
export declare function parseUsersOutput(output: string | any): ParsedRecord[];
|
|
79
79
|
/**
|
|
80
80
|
* Parse p4 user output into user details
|
|
81
81
|
*/
|
|
82
|
-
export declare function parseUserOutput(output: string): ParsedRecord;
|
|
82
|
+
export declare function parseUserOutput(output: string | any): ParsedRecord;
|
|
83
83
|
/**
|
|
84
84
|
* Parse p4 client output into client details
|
|
85
85
|
*/
|
|
86
|
-
export declare function parseClientOutput(output: string): ParsedRecord;
|
|
86
|
+
export declare function parseClientOutput(output: string | any): ParsedRecord;
|
|
87
87
|
/**
|
|
88
88
|
* Parse p4 jobs output into job records
|
|
89
89
|
*/
|
|
90
|
-
export declare function parseJobsOutput(output: string): ParsedRecord[];
|
|
90
|
+
export declare function parseJobsOutput(output: string | any): ParsedRecord[];
|
|
91
91
|
/**
|
|
92
92
|
* Parse p4 job output into job details
|
|
93
93
|
*/
|
|
94
|
-
export declare function parseJobOutput(output: string): ParsedRecord;
|
|
94
|
+
export declare function parseJobOutput(output: string | any): ParsedRecord;
|
|
95
95
|
/**
|
|
96
96
|
* Parse p4 fixes output into fix records
|
|
97
97
|
*/
|
|
98
|
-
export declare function parseFixesOutput(output: string): ParsedRecord[];
|
|
98
|
+
export declare function parseFixesOutput(output: string | any): ParsedRecord[];
|
|
99
99
|
/**
|
|
100
100
|
* Parse p4 labels output into label records
|
|
101
101
|
*/
|
|
102
|
-
export declare function parseLabelsOutput(output: string): ParsedRecord[];
|
|
102
|
+
export declare function parseLabelsOutput(output: string | any): ParsedRecord[];
|
|
103
103
|
/**
|
|
104
104
|
* Parse p4 label output into label details
|
|
105
105
|
*/
|
|
106
|
-
export declare function parseLabelOutput(output: string): ParsedRecord;
|
|
106
|
+
export declare function parseLabelOutput(output: string | any): ParsedRecord;
|
|
107
107
|
/**
|
|
108
108
|
* Parse p4 sizes output into size statistics
|
|
109
109
|
*/
|
|
110
|
-
export declare function parseSizesOutput(output: string): ParsedRecord;
|
|
110
|
+
export declare function parseSizesOutput(output: string | any): ParsedRecord;
|
|
111
111
|
/**
|
|
112
112
|
* Parse p4 have output into synced file records
|
|
113
113
|
*/
|
|
114
|
-
export declare function parseHaveOutput(output: string): ParsedRecord[];
|
|
114
|
+
export declare function parseHaveOutput(output: string | any): ParsedRecord[];
|
|
115
115
|
/**
|
|
116
116
|
* Parse p4 where output into mapping records
|
|
117
117
|
*/
|
|
118
|
-
export declare function parseWhereOutput(output: string): ParsedRecord[];
|
|
118
|
+
export declare function parseWhereOutput(output: string | any): ParsedRecord[];
|
|
119
119
|
//# sourceMappingURL=parse.d.ts.map
|
package/dist/p4/parse.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/p4/parse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,EAAE,CAAC;CACvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/p4/parse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,EAAE,CAAC;CACvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAqCpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,CA0BlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAqCtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CA0BvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAsDvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAyBvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,CAmElE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CA2BpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAyBvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAuBtE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAwBxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CA0BrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CA0BpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CA0BpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAwBpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CA0BrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAoBpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAyBrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,CAoBlE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,CAoBpE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CA0BpE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,CAoBjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAyBrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAwBtE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,CAoBnE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,CAyBnE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAwBpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,CAuBrE"}
|