portkeeper 1.1.0 → 1.1.1
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 +10 -12
- package/dist/cli/commands/gui.d.ts.map +1 -1
- package/dist/cli/commands/gui.js +73 -150
- package/dist/cli/commands/gui.js.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -28,8 +28,12 @@ A comprehensive port management tool for developers that helps reserve, monitor,
|
|
|
28
28
|
|
|
29
29
|
### Via npm
|
|
30
30
|
```bash
|
|
31
|
+
# CLI only (lightweight)
|
|
31
32
|
npm install -g portkeeper
|
|
32
33
|
|
|
34
|
+
# CLI + GUI (includes Electron)
|
|
35
|
+
npm install -g portkeeper --include=optional
|
|
36
|
+
|
|
33
37
|
# Verify installation
|
|
34
38
|
portman --version
|
|
35
39
|
```
|
|
@@ -45,20 +49,17 @@ npm link
|
|
|
45
49
|
```
|
|
46
50
|
|
|
47
51
|
### GUI Application
|
|
48
|
-
The GUI
|
|
52
|
+
The GUI is included with Port Keeper:
|
|
49
53
|
|
|
50
54
|
```bash
|
|
51
|
-
#
|
|
52
|
-
portman gui --install
|
|
53
|
-
|
|
54
|
-
# Or install separately
|
|
55
|
-
portman gui install
|
|
56
|
-
|
|
57
|
-
# Then launch anytime with
|
|
55
|
+
# Launch the GUI (requires --include=optional during install)
|
|
58
56
|
portman gui
|
|
57
|
+
|
|
58
|
+
# If GUI not found, install with:
|
|
59
|
+
npm install -g portkeeper --include=optional
|
|
59
60
|
```
|
|
60
61
|
|
|
61
|
-
The GUI
|
|
62
|
+
Note: The GUI requires Electron (~100MB). Install with `--include=optional` to get GUI support.
|
|
62
63
|
|
|
63
64
|
## Quick Start
|
|
64
65
|
|
|
@@ -95,9 +96,6 @@ portman export team-ports.json
|
|
|
95
96
|
```bash
|
|
96
97
|
# Launch the GUI application
|
|
97
98
|
portman gui
|
|
98
|
-
|
|
99
|
-
# First time? Install with:
|
|
100
|
-
portman gui --install
|
|
101
99
|
```
|
|
102
100
|
|
|
103
101
|
In the GUI:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gui.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/gui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"gui.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/gui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0DpC,eAAO,MAAM,UAAU,SA4DnB,CAAC"}
|
package/dist/cli/commands/gui.js
CHANGED
|
@@ -3,178 +3,101 @@ import chalk from 'chalk';
|
|
|
3
3
|
import { spawn } from 'child_process';
|
|
4
4
|
import { existsSync } from 'fs';
|
|
5
5
|
import { join, dirname } from 'path';
|
|
6
|
-
import { homedir } from 'os';
|
|
7
|
-
import { mkdir } from 'fs/promises';
|
|
8
|
-
import { createWriteStream } from 'fs';
|
|
9
|
-
import { get } from 'https';
|
|
10
|
-
import { promisify } from 'util';
|
|
11
|
-
import { exec as execCallback } from 'child_process';
|
|
12
|
-
import { chmod } from 'fs/promises';
|
|
13
6
|
import { fileURLToPath } from 'url';
|
|
7
|
+
import { homedir } from 'os';
|
|
14
8
|
const __filename = fileURLToPath(import.meta.url);
|
|
15
9
|
const __dirname = dirname(__filename);
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const arch = process.arch;
|
|
33
|
-
const baseUrl = 'https://github.com/ahmadzein/portkeeper/releases/latest/download/';
|
|
34
|
-
if (platform === 'darwin') {
|
|
35
|
-
return arch === 'arm64'
|
|
36
|
-
? baseUrl + 'Port-Keeper-mac-arm64.dmg'
|
|
37
|
-
: baseUrl + 'Port-Keeper-mac-x64.dmg';
|
|
38
|
-
}
|
|
39
|
-
else if (platform === 'win32') {
|
|
40
|
-
return baseUrl + 'Port-Keeper-Setup.exe';
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
return baseUrl + 'Port-Keeper-linux-x86_64.AppImage';
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
const downloadFile = (url, dest) => {
|
|
47
|
-
return new Promise((resolve, reject) => {
|
|
48
|
-
const file = createWriteStream(dest);
|
|
49
|
-
get(url, (response) => {
|
|
50
|
-
if (response.statusCode === 302 || response.statusCode === 301) {
|
|
51
|
-
downloadFile(response.headers.location, dest).then(resolve).catch(reject);
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (response.statusCode !== 200) {
|
|
55
|
-
reject(new Error(`Failed to download: ${response.statusCode}`));
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
const totalSize = parseInt(response.headers['content-length'] || '0', 10);
|
|
59
|
-
let downloadedSize = 0;
|
|
60
|
-
response.on('data', (chunk) => {
|
|
61
|
-
downloadedSize += chunk.length;
|
|
62
|
-
const percent = Math.round((downloadedSize / totalSize) * 100);
|
|
63
|
-
process.stdout.write(`\rDownloading... ${percent}%`);
|
|
64
|
-
});
|
|
65
|
-
response.pipe(file);
|
|
66
|
-
file.on('finish', () => {
|
|
67
|
-
file.close();
|
|
68
|
-
console.log('\n');
|
|
69
|
-
resolve();
|
|
70
|
-
});
|
|
71
|
-
}).on('error', reject);
|
|
72
|
-
});
|
|
73
|
-
};
|
|
74
|
-
const installGui = async () => {
|
|
75
|
-
const guiDir = join(homedir(), '.portkeeper', 'gui');
|
|
76
|
-
await mkdir(guiDir, { recursive: true });
|
|
77
|
-
console.log(chalk.blue('🚀 Installing Port Keeper GUI...\n'));
|
|
78
|
-
const downloadUrl = getDownloadUrl();
|
|
79
|
-
const platform = process.platform;
|
|
80
|
-
if (platform === 'darwin') {
|
|
81
|
-
const dmgPath = join(guiDir, 'Port-Keeper.dmg');
|
|
82
|
-
console.log(chalk.gray('Downloading macOS app...'));
|
|
83
|
-
await downloadFile(downloadUrl, dmgPath);
|
|
84
|
-
console.log(chalk.gray('Mounting DMG...'));
|
|
85
|
-
await exec(`hdiutil attach "${dmgPath}" -nobrowse -quiet`);
|
|
86
|
-
console.log(chalk.gray('Copying app...'));
|
|
87
|
-
await exec(`cp -R "/Volumes/Port Keeper/Port Keeper.app" "${guiDir}/"`);
|
|
88
|
-
console.log(chalk.gray('Unmounting DMG...'));
|
|
89
|
-
await exec('hdiutil detach "/Volumes/Port Keeper" -quiet');
|
|
90
|
-
console.log(chalk.gray('Cleaning up...'));
|
|
91
|
-
await exec(`rm "${dmgPath}"`);
|
|
92
|
-
}
|
|
93
|
-
else if (platform === 'win32') {
|
|
94
|
-
const exePath = join(guiDir, 'Port Keeper.exe');
|
|
95
|
-
console.log(chalk.gray('Downloading Windows app...'));
|
|
96
|
-
await downloadFile(downloadUrl, exePath);
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
const appImagePath = join(guiDir, 'port-keeper.AppImage');
|
|
100
|
-
console.log(chalk.gray('Downloading Linux AppImage...'));
|
|
101
|
-
await downloadFile(downloadUrl, appImagePath);
|
|
102
|
-
await chmod(appImagePath, 0o755);
|
|
10
|
+
const findElectronExecutable = () => {
|
|
11
|
+
const possiblePaths = [
|
|
12
|
+
join(__dirname, '..', '..', '..', 'node_modules', 'electron', 'dist', 'Electron.app', 'Contents', 'MacOS', 'Electron'),
|
|
13
|
+
join(__dirname, '..', '..', '..', 'node_modules', 'electron', 'dist', 'electron.exe'),
|
|
14
|
+
join(__dirname, '..', '..', '..', 'node_modules', 'electron', 'dist', 'electron'),
|
|
15
|
+
join(__dirname, '..', '..', '..', '..', 'node_modules', 'electron', 'dist', 'Electron.app', 'Contents', 'MacOS', 'Electron'),
|
|
16
|
+
join(__dirname, '..', '..', '..', '..', 'node_modules', 'electron', 'dist', 'electron.exe'),
|
|
17
|
+
join(__dirname, '..', '..', '..', '..', 'node_modules', 'electron', 'dist', 'electron'),
|
|
18
|
+
join(homedir(), '.npm-global', 'lib', 'node_modules', 'electron', 'dist', 'Electron.app', 'Contents', 'MacOS', 'Electron'),
|
|
19
|
+
join(homedir(), '.npm-global', 'lib', 'node_modules', 'electron', 'dist', 'electron.exe'),
|
|
20
|
+
join(homedir(), '.npm-global', 'lib', 'node_modules', 'electron', 'dist', 'electron'),
|
|
21
|
+
];
|
|
22
|
+
for (const path of possiblePaths) {
|
|
23
|
+
if (existsSync(path)) {
|
|
24
|
+
return path;
|
|
25
|
+
}
|
|
103
26
|
}
|
|
104
|
-
|
|
105
|
-
};
|
|
106
|
-
const launchGui = () => {
|
|
107
|
-
const guiPath = getGuiPath();
|
|
108
|
-
console.log(chalk.blue('🚀 Launching Port Keeper GUI...\n'));
|
|
109
|
-
const child = spawn(guiPath, [], {
|
|
110
|
-
detached: true,
|
|
111
|
-
stdio: 'ignore'
|
|
112
|
-
});
|
|
113
|
-
child.unref();
|
|
114
|
-
console.log(chalk.green('✅ GUI launched!'));
|
|
115
|
-
console.log(chalk.gray('\nThe Port Keeper GUI is now running.'));
|
|
116
|
-
console.log(chalk.gray('You can close this terminal window.\n'));
|
|
27
|
+
return null;
|
|
117
28
|
};
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
env: { ...process.env, ELECTRON_IS_DEV: '0' }
|
|
129
|
-
});
|
|
130
|
-
child.unref();
|
|
131
|
-
console.log(chalk.green('✅ GUI launched!'));
|
|
132
|
-
console.log(chalk.gray('\nThe Port Keeper GUI is now running.'));
|
|
133
|
-
console.log(chalk.gray('You can close this terminal window.\n'));
|
|
134
|
-
return true;
|
|
29
|
+
const findGuiEntry = () => {
|
|
30
|
+
const possiblePaths = [
|
|
31
|
+
join(__dirname, '..', '..', 'electron', 'main', 'index.js'),
|
|
32
|
+
join(__dirname, '..', '..', 'gui', 'main', 'index.js'),
|
|
33
|
+
join(__dirname, '..', '..', '..', 'dist', 'electron', 'main', 'index.js'),
|
|
34
|
+
join(__dirname, '..', '..', '..', 'dist', 'gui', 'main', 'index.js'),
|
|
35
|
+
];
|
|
36
|
+
for (const path of possiblePaths) {
|
|
37
|
+
if (existsSync(path)) {
|
|
38
|
+
return path;
|
|
135
39
|
}
|
|
136
40
|
}
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
return false;
|
|
41
|
+
return null;
|
|
140
42
|
};
|
|
141
43
|
export const guiCommand = new Command('gui')
|
|
142
44
|
.description('Launch the Port Keeper GUI application')
|
|
143
|
-
.option('--
|
|
144
|
-
.
|
|
145
|
-
.action(async (options) => {
|
|
45
|
+
.option('--dev', 'Run in development mode')
|
|
46
|
+
.action((options) => {
|
|
146
47
|
try {
|
|
147
|
-
|
|
48
|
+
const electronPath = findElectronExecutable();
|
|
49
|
+
const guiEntry = findGuiEntry();
|
|
50
|
+
if (!electronPath || !guiEntry) {
|
|
51
|
+
console.log(chalk.yellow('\n⚠️ GUI components not found.\n'));
|
|
52
|
+
if (!electronPath) {
|
|
53
|
+
console.log(chalk.red('Electron is not installed.'));
|
|
54
|
+
}
|
|
55
|
+
if (!guiEntry) {
|
|
56
|
+
console.log(chalk.red('GUI files are missing.'));
|
|
57
|
+
}
|
|
58
|
+
console.log(chalk.cyan('\nTo use the GUI, you have two options:\n'));
|
|
59
|
+
console.log(chalk.white('Option 1: Install from source'));
|
|
60
|
+
console.log(chalk.gray(' git clone https://github.com/ahmadzein/portkeeper.git'));
|
|
61
|
+
console.log(chalk.gray(' cd portkeeper'));
|
|
62
|
+
console.log(chalk.gray(' npm install'));
|
|
63
|
+
console.log(chalk.gray(' npm run dev:gui\n'));
|
|
64
|
+
console.log(chalk.white('Option 2: Reinstall portkeeper with optional dependencies'));
|
|
65
|
+
console.log(chalk.gray(' npm uninstall -g portkeeper'));
|
|
66
|
+
console.log(chalk.gray(' npm install -g portkeeper --include=optional\n'));
|
|
67
|
+
console.log(chalk.yellow('Note: The GUI requires Electron which is a large dependency (~100MB).'));
|
|
68
|
+
console.log(chalk.yellow('It is marked as optional to keep the CLI lightweight.\n'));
|
|
148
69
|
return;
|
|
149
70
|
}
|
|
150
|
-
|
|
151
|
-
const
|
|
152
|
-
if (options.
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
if (!existsSync(guiPath)) {
|
|
156
|
-
console.log(chalk.yellow('\n⚠️ Port Keeper GUI is not installed.\n'));
|
|
157
|
-
console.log(chalk.cyan('Run one of these commands to install it:\n'));
|
|
158
|
-
console.log(chalk.white(' portman gui --install # Install and launch'));
|
|
159
|
-
console.log(chalk.white(' portman gui install # Just install\n'));
|
|
160
|
-
console.log(chalk.gray('The GUI will be downloaded and installed to:'));
|
|
161
|
-
console.log(chalk.gray(` ${join(homedir(), '.portkeeper', 'gui')}\n`));
|
|
162
|
-
return;
|
|
71
|
+
console.log(chalk.blue('🚀 Launching Port Keeper GUI...\n'));
|
|
72
|
+
const env = { ...process.env };
|
|
73
|
+
if (options.dev) {
|
|
74
|
+
env.ELECTRON_IS_DEV = '1';
|
|
163
75
|
}
|
|
164
|
-
|
|
76
|
+
const child = spawn(electronPath, [guiEntry], {
|
|
77
|
+
detached: true,
|
|
78
|
+
stdio: 'ignore',
|
|
79
|
+
env
|
|
80
|
+
});
|
|
81
|
+
child.unref();
|
|
82
|
+
console.log(chalk.green('✅ GUI launched!'));
|
|
83
|
+
console.log(chalk.gray('\nThe Port Keeper GUI is now running.'));
|
|
84
|
+
console.log(chalk.gray('You can close this terminal window.\n'));
|
|
165
85
|
}
|
|
166
86
|
catch (error) {
|
|
167
|
-
console.error(chalk.red('\n❌ Error:'), error instanceof Error ? error.message : String(error));
|
|
168
|
-
console.error(chalk.gray('\
|
|
87
|
+
console.error(chalk.red('\n❌ Error launching GUI:'), error instanceof Error ? error.message : String(error));
|
|
88
|
+
console.error(chalk.gray('\nPlease try reinstalling with: npm install -g portkeeper --include=optional'));
|
|
169
89
|
}
|
|
170
90
|
});
|
|
171
91
|
guiCommand
|
|
172
92
|
.command('install')
|
|
173
|
-
.description('Install
|
|
93
|
+
.description('Install GUI dependencies (Electron)')
|
|
174
94
|
.action(async () => {
|
|
175
95
|
try {
|
|
176
|
-
|
|
177
|
-
console.log(chalk.
|
|
96
|
+
console.log(chalk.blue('📦 Installing GUI dependencies...\n'));
|
|
97
|
+
console.log(chalk.yellow('This will install Electron (~100MB) as an optional dependency.\n'));
|
|
98
|
+
console.log(chalk.cyan('Please run:'));
|
|
99
|
+
console.log(chalk.white(' npm install -g portkeeper --include=optional\n'));
|
|
100
|
+
console.log(chalk.gray('This ensures Electron is properly installed for the GUI.'));
|
|
178
101
|
}
|
|
179
102
|
catch (error) {
|
|
180
103
|
console.error(chalk.red('\n❌ Installation failed:'), error instanceof Error ? error.message : String(error));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gui.js","sourceRoot":"","sources":["../../../src/cli/commands/gui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"gui.js","sourceRoot":"","sources":["../../../src/cli/commands/gui.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -15,8 +15,8 @@ import { aiCommand } from './commands/ai.js';
|
|
|
15
15
|
const program = new Command();
|
|
16
16
|
program
|
|
17
17
|
.name('portman')
|
|
18
|
-
.description('Port
|
|
19
|
-
.version('1.
|
|
18
|
+
.description('Port Keeper - Manage your local development ports')
|
|
19
|
+
.version('1.1.1');
|
|
20
20
|
program.addCommand(checkCommand);
|
|
21
21
|
program.addCommand(reserveCommand);
|
|
22
22
|
program.addCommand(listCommand);
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,mDAAmD,CAAC;KAChE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC/B,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAE9B,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC"}
|