@aptos-labs/aptos-cli 1.0.2 → 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 +74 -2
- package/bin/aptos.ts +3 -1
- package/bin/tasks/run.ts +6 -2
- package/bin/tasks/update.ts +1 -1
- package/bin/utils/parseCommandOptions.ts +4 -4
- package/dist/aptos.js +3 -1
- package/dist/aptos.js.map +1 -1
- package/dist/tasks/run.d.ts +1 -1
- package/dist/tasks/run.js +6 -2
- package/dist/tasks/run.js.map +1 -1
- package/dist/tasks/update.d.ts +1 -1
- package/dist/tasks/update.js +1 -1
- package/dist/tasks/update.js.map +1 -1
- package/dist/utils/parseCommandOptions.d.ts +1 -0
- package/dist/utils/parseCommandOptions.js +3 -3
- package/dist/utils/parseCommandOptions.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,75 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Aptos CLI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The `@aptos-labs/aptos-cli` package allows you to use the Aptos CLI from inside a `Nodejs` project.
|
|
4
|
+
|
|
5
|
+
## Download
|
|
6
|
+
|
|
7
|
+
To install the Aptos CLI, you need to have Node.js and npm installed on your system. Then, you can install it using:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @aptos-labs/aptos-cli
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
That command will download the Aptos CLI and create a Node bin file, making it available to use in a Node environment.
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
Once you have the package installed and the Node bin file, you can run the following command, in your project environment, to install the Aptos CLI in your project:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npx aptos --install
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Alternatively, you can simply run the cli using the `npx aptos` command. That will install the Aptos CLI in your project if it's not already installed.
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npx aptos
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Usage
|
|
30
|
+
|
|
31
|
+
To use the Aptos CLI, in your project environment, run the `npx aptos` command, to see the available commands.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npx aptos
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Using a Custom Binary
|
|
38
|
+
|
|
39
|
+
If you already have the Aptos CLI binary installed on your system, you can specify its path to use it directly:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npx aptos --binary-path /path/to/aptos <command>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Updating the Aptos CLI
|
|
46
|
+
|
|
47
|
+
To update the Aptos CLI, you can run the following command within your project environment:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx aptos --update
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Development
|
|
54
|
+
|
|
55
|
+
To set up the project for development:
|
|
56
|
+
|
|
57
|
+
1. Clone the repository
|
|
58
|
+
2. Install dependencies:
|
|
59
|
+
```bash
|
|
60
|
+
npm install
|
|
61
|
+
```
|
|
62
|
+
3. Run the development server:
|
|
63
|
+
```bash
|
|
64
|
+
npm run dev
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
This will build the project and run the CLI.
|
|
68
|
+
|
|
69
|
+
## Building
|
|
70
|
+
|
|
71
|
+
To build the project:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
npm run build
|
|
75
|
+
```
|
package/bin/aptos.ts
CHANGED
|
@@ -19,6 +19,7 @@ program
|
|
|
19
19
|
.helpOption(false)
|
|
20
20
|
.option("-i, --install", "install the latest version of the CLI")
|
|
21
21
|
.option("-u, --update", "update the CLI to the latest version")
|
|
22
|
+
.option("-b, --binary-path <path>", "path to an existing Aptos CLI binary")
|
|
22
23
|
.allowUnknownOption();
|
|
23
24
|
|
|
24
25
|
program.parse(process.argv);
|
|
@@ -27,13 +28,14 @@ const main = async () => {
|
|
|
27
28
|
const options = {
|
|
28
29
|
install: program.opts().install,
|
|
29
30
|
update: program.opts().update,
|
|
31
|
+
binaryPath: program.opts().binaryPath,
|
|
30
32
|
};
|
|
31
33
|
const unknownOptions = program.args;
|
|
32
34
|
|
|
33
35
|
// Manually check for `--help` and handle the CLI `--help`
|
|
34
36
|
if (process.argv.includes("--help")) {
|
|
35
37
|
// Forward to the CLI
|
|
36
|
-
return runCLI(unknownOptions);
|
|
38
|
+
return runCLI(unknownOptions, options.binaryPath);
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
await parseCommandOptions(options, unknownOptions);
|
package/bin/tasks/run.ts
CHANGED
|
@@ -4,9 +4,13 @@ import { existsSync } from "fs";
|
|
|
4
4
|
import { getOS } from "../utils/getUserOs.js";
|
|
5
5
|
import { getLocalBinPath } from "../utils/getLocalBinPath.js";
|
|
6
6
|
|
|
7
|
-
export const runCLI = async (args: string[] = []) => {
|
|
8
|
-
const path = getLocalBinPath();
|
|
7
|
+
export const runCLI = async (args: string[] = [], binaryPath?: string) => {
|
|
8
|
+
const path = binaryPath || getLocalBinPath();
|
|
9
9
|
if (!existsSync(path)) {
|
|
10
|
+
if (binaryPath) {
|
|
11
|
+
console.error(`Error: Binary not found at specified path: ${binaryPath}`);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
10
14
|
console.log(
|
|
11
15
|
"Aptos CLI not installed, run `npx aptos --install` to install"
|
|
12
16
|
);
|
package/bin/tasks/update.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { updateCli } from "../tasks/update.js";
|
|
|
5
5
|
import { getLocalBinPath } from "./getLocalBinPath.js";
|
|
6
6
|
|
|
7
7
|
export const parseCommandOptions = async (
|
|
8
|
-
options: { install: boolean; update: boolean },
|
|
8
|
+
options: { install: boolean; update: boolean; binaryPath?: string },
|
|
9
9
|
unknownOptions: string[]
|
|
10
10
|
) => {
|
|
11
11
|
// if `--install` flag is set, only install the cli and dont run it
|
|
@@ -20,9 +20,9 @@ export const parseCommandOptions = async (
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
// if no flags are set, install and run the cli
|
|
23
|
-
const path = getLocalBinPath();
|
|
24
|
-
if (!existsSync(path)) {
|
|
23
|
+
const path = options.binaryPath || getLocalBinPath();
|
|
24
|
+
if (!options.binaryPath && !existsSync(path)) {
|
|
25
25
|
await installCli();
|
|
26
26
|
}
|
|
27
|
-
await runCLI(unknownOptions);
|
|
27
|
+
await runCLI(unknownOptions, options.binaryPath);
|
|
28
28
|
};
|
package/dist/aptos.js
CHANGED
|
@@ -7,16 +7,18 @@ program
|
|
|
7
7
|
.helpOption(false)
|
|
8
8
|
.option("-i, --install", "install the latest version of the CLI")
|
|
9
9
|
.option("-u, --update", "update the CLI to the latest version")
|
|
10
|
+
.option("-b, --binary-path <path>", "path to an existing Aptos CLI binary")
|
|
10
11
|
.allowUnknownOption();
|
|
11
12
|
program.parse(process.argv);
|
|
12
13
|
const main = async () => {
|
|
13
14
|
const options = {
|
|
14
15
|
install: program.opts().install,
|
|
15
16
|
update: program.opts().update,
|
|
17
|
+
binaryPath: program.opts().binaryPath,
|
|
16
18
|
};
|
|
17
19
|
const unknownOptions = program.args;
|
|
18
20
|
if (process.argv.includes("--help")) {
|
|
19
|
-
return runCLI(unknownOptions);
|
|
21
|
+
return runCLI(unknownOptions, options.binaryPath);
|
|
20
22
|
}
|
|
21
23
|
await parseCommandOptions(options, unknownOptions);
|
|
22
24
|
};
|
package/dist/aptos.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aptos.js","sourceRoot":"","sources":["../bin/aptos.ts"],"names":[],"mappings":";AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,UAAU,CAAC,KAAK,CAAC;KACjB,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;KAChE,MAAM,CAAC,cAAc,EAAE,sCAAsC,CAAC;KAC9D,kBAAkB,EAAE,CAAC;AAExB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACtB,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO;QAC/B,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"aptos.js","sourceRoot":"","sources":["../bin/aptos.ts"],"names":[],"mappings":";AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,UAAU,CAAC,KAAK,CAAC;KACjB,MAAM,CAAC,eAAe,EAAE,uCAAuC,CAAC;KAChE,MAAM,CAAC,cAAc,EAAE,sCAAsC,CAAC;KAC9D,MAAM,CAAC,0BAA0B,EAAE,sCAAsC,CAAC;KAC1E,kBAAkB,EAAE,CAAC;AAExB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACtB,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO;QAC/B,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM;QAC7B,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU;KACtC,CAAC;IACF,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAGpC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAEpC,OAAO,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
package/dist/tasks/run.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const runCLI: (args?: string[]) => Promise<void>;
|
|
1
|
+
export declare const runCLI: (args?: string[], binaryPath?: string) => Promise<void>;
|
package/dist/tasks/run.js
CHANGED
|
@@ -2,9 +2,13 @@ import { spawn } from "child_process";
|
|
|
2
2
|
import { existsSync } from "fs";
|
|
3
3
|
import { getOS } from "../utils/getUserOs.js";
|
|
4
4
|
import { getLocalBinPath } from "../utils/getLocalBinPath.js";
|
|
5
|
-
export const runCLI = async (args = []) => {
|
|
6
|
-
const path = getLocalBinPath();
|
|
5
|
+
export const runCLI = async (args = [], binaryPath) => {
|
|
6
|
+
const path = binaryPath || getLocalBinPath();
|
|
7
7
|
if (!existsSync(path)) {
|
|
8
|
+
if (binaryPath) {
|
|
9
|
+
console.error(`Error: Binary not found at specified path: ${binaryPath}`);
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
8
12
|
console.log("Aptos CLI not installed, run `npx aptos --install` to install");
|
|
9
13
|
return;
|
|
10
14
|
}
|
package/dist/tasks/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../bin/tasks/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,OAAiB,EAAE,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../bin/tasks/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,EAAE,OAAiB,EAAE,EAAE,UAAmB,EAAE,EAAE;IACvE,MAAM,IAAI,GAAG,UAAU,IAAI,eAAe,EAAE,CAAC;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8CAA8C,UAAU,EAAE,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CACT,+DAA+D,CAChE,CAAC;QACF,OAAO;IACT,CAAC;IACD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IAInB,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;QAChB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,EAAE,KAAK,SAAS;KACxB,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/dist/tasks/update.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const updateCli: () => Promise<
|
|
1
|
+
export declare const updateCli: () => Promise<NonSharedBuffer | undefined>;
|
package/dist/tasks/update.js
CHANGED
|
@@ -23,7 +23,7 @@ export const updateCli = async () => {
|
|
|
23
23
|
.split(" ")[1];
|
|
24
24
|
if (currentVersion !== latestVersion) {
|
|
25
25
|
console.log(`A newer version of the CLI is available: ${latestVersion}, installing...`);
|
|
26
|
-
installCli();
|
|
26
|
+
await installCli();
|
|
27
27
|
}
|
|
28
28
|
else {
|
|
29
29
|
console.log(`CLI is up to date`);
|
package/dist/tasks/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../bin/tasks/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;IAClC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAE/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACT,+DAA+D,CAChE,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC;QAExB,OAAO,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAEjD,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,IAAI,YAAY,EAAE;YACxD,QAAQ,EAAE,MAAM;SACjB,CAAC;aACC,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjB,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CACT,4CAA4C,aAAa,iBAAiB,CAC3E,CAAC;YACF,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../bin/tasks/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;IAClC,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAE/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CACT,+DAA+D,CAChE,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,KAAK,EAAE,KAAK,OAAO,EAAE,CAAC;QAExB,OAAO,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,aAAa,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAEjD,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,IAAI,YAAY,EAAE;YACxD,QAAQ,EAAE,MAAM;SACjB,CAAC;aACC,IAAI,EAAE;aACN,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjB,IAAI,cAAc,KAAK,aAAa,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CACT,4CAA4C,aAAa,iBAAiB,CAC3E,CAAC;YACF,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -12,10 +12,10 @@ export const parseCommandOptions = async (options, unknownOptions) => {
|
|
|
12
12
|
await updateCli();
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
|
-
const path = getLocalBinPath();
|
|
16
|
-
if (!existsSync(path)) {
|
|
15
|
+
const path = options.binaryPath || getLocalBinPath();
|
|
16
|
+
if (!options.binaryPath && !existsSync(path)) {
|
|
17
17
|
await installCli();
|
|
18
18
|
}
|
|
19
|
-
await runCLI(unknownOptions);
|
|
19
|
+
await runCLI(unknownOptions, options.binaryPath);
|
|
20
20
|
};
|
|
21
21
|
//# sourceMappingURL=parseCommandOptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseCommandOptions.js","sourceRoot":"","sources":["../../bin/utils/parseCommandOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,
|
|
1
|
+
{"version":3,"file":"parseCommandOptions.js","sourceRoot":"","sources":["../../bin/utils/parseCommandOptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,OAAmE,EACnE,cAAwB,EACxB,EAAE;IAEF,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,UAAU,EAAE,CAAC;QACnB,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,SAAS,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAGD,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,IAAI,eAAe,EAAE,CAAC;IACrD,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,UAAU,EAAE,CAAC;IACrB,CAAC;IACD,MAAM,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AACnD,CAAC,CAAC"}
|