ninedeploy 0.18.26 → 0.18.27
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/dist/commands/databaseUpgrade.d.ts +25 -0
- package/dist/commands/databaseUpgrade.d.ts.map +1 -0
- package/dist/commands/databaseUpgrade.js +136 -0
- package/dist/commands/databaseUpgrade.js.map +1 -0
- package/dist/commands/importApply.d.ts +114 -0
- package/dist/commands/importApply.d.ts.map +1 -0
- package/dist/commands/importApply.js +403 -0
- package/dist/commands/importApply.js.map +1 -0
- package/dist/commands/importCutover.d.ts +95 -0
- package/dist/commands/importCutover.d.ts.map +1 -0
- package/dist/commands/importCutover.js +293 -0
- package/dist/commands/importCutover.js.map +1 -0
- package/dist/commands/importData.d.ts +60 -0
- package/dist/commands/importData.d.ts.map +1 -0
- package/dist/commands/importData.js +286 -0
- package/dist/commands/importData.js.map +1 -0
- package/dist/commands/importPlan.d.ts +32 -0
- package/dist/commands/importPlan.d.ts.map +1 -0
- package/dist/commands/importPlan.js +138 -0
- package/dist/commands/importPlan.js.map +1 -0
- package/dist/commands/importVolumes.d.ts +38 -0
- package/dist/commands/importVolumes.d.ts.map +1 -0
- package/dist/commands/importVolumes.js +161 -0
- package/dist/commands/importVolumes.js.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/importers/caprover.d.ts +13 -0
- package/dist/lib/importers/caprover.d.ts.map +1 -0
- package/dist/lib/importers/caprover.js +150 -0
- package/dist/lib/importers/caprover.js.map +1 -0
- package/dist/lib/importers/connections.d.ts +39 -0
- package/dist/lib/importers/connections.d.ts.map +1 -0
- package/dist/lib/importers/connections.js +119 -0
- package/dist/lib/importers/connections.js.map +1 -0
- package/dist/lib/importers/coolify.d.ts +10 -0
- package/dist/lib/importers/coolify.d.ts.map +1 -0
- package/dist/lib/importers/coolify.js +174 -0
- package/dist/lib/importers/coolify.js.map +1 -0
- package/dist/lib/importers/dokploy.d.ts +13 -0
- package/dist/lib/importers/dokploy.d.ts.map +1 -0
- package/dist/lib/importers/dokploy.js +183 -0
- package/dist/lib/importers/dokploy.js.map +1 -0
- package/dist/lib/importers/heroku.d.ts +50 -0
- package/dist/lib/importers/heroku.d.ts.map +1 -0
- package/dist/lib/importers/heroku.js +159 -0
- package/dist/lib/importers/heroku.js.map +1 -0
- package/dist/lib/importers/plan.d.ts +137 -0
- package/dist/lib/importers/plan.d.ts.map +1 -0
- package/dist/lib/importers/plan.js +110 -0
- package/dist/lib/importers/plan.js.map +1 -0
- package/dist/lib/importers/shell.d.ts +24 -0
- package/dist/lib/importers/shell.d.ts.map +1 -0
- package/dist/lib/importers/shell.js +45 -0
- package/dist/lib/importers/shell.js.map +1 -0
- package/dist/lib/importers/sources.d.ts +26 -0
- package/dist/lib/importers/sources.d.ts.map +1 -0
- package/dist/lib/importers/sources.js +100 -0
- package/dist/lib/importers/sources.js.map +1 -0
- package/package.json +3 -3
- package/src/commands/databaseUpgrade.ts +124 -0
- package/src/commands/importApply.ts +445 -0
- package/src/commands/importCutover.ts +329 -0
- package/src/commands/importData.ts +302 -0
- package/src/commands/importPlan.ts +143 -0
- package/src/commands/importVolumes.ts +168 -0
- package/src/index.ts +61 -0
- package/src/lib/importers/caprover.ts +141 -0
- package/src/lib/importers/connections.ts +133 -0
- package/src/lib/importers/coolify.ts +164 -0
- package/src/lib/importers/dokploy.ts +167 -0
- package/src/lib/importers/heroku.ts +168 -0
- package/src/lib/importers/plan.ts +209 -0
- package/src/lib/importers/shell.ts +56 -0
- package/src/lib/importers/sources.ts +96 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ninedeploy databases upgrade …` — O2 major-version upgrades (PostgreSQL on
|
|
3
|
+
* the panel host).
|
|
4
|
+
*
|
|
5
|
+
* status <dbId> current major, targets, and the upgrade history
|
|
6
|
+
* start <dbId> --to <major> [--yes] [--no-wait]
|
|
7
|
+
* stop, dump, restore into a new volume, compare, switch
|
|
8
|
+
* rollback <dbId> <upgradeId> [--yes] point the database back at the previous volume
|
|
9
|
+
* finalize <dbId> <upgradeId> [--yes] delete the volume the database no longer uses
|
|
10
|
+
*/
|
|
11
|
+
import type { NineDeployClient } from '../client.js';
|
|
12
|
+
export declare function upgradeStatus(client: NineDeployClient, dbIdStr: string): Promise<void>;
|
|
13
|
+
export declare function upgradeStart(client: NineDeployClient, dbIdStr: string, opts?: {
|
|
14
|
+
to?: string;
|
|
15
|
+
yes?: boolean;
|
|
16
|
+
wait?: boolean;
|
|
17
|
+
pollMs?: number;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
export declare function upgradeRollback(client: NineDeployClient, dbIdStr: string, upgradeIdStr: string, opts?: {
|
|
20
|
+
yes?: boolean;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
export declare function upgradeFinalize(client: NineDeployClient, dbIdStr: string, upgradeIdStr: string, opts?: {
|
|
23
|
+
yes?: boolean;
|
|
24
|
+
}): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=databaseUpgrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"databaseUpgrade.d.ts","sourceRoot":"","sources":["../../src/commands/databaseUpgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAwCrD,wBAAsB,aAAa,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB5F;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACzE,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAYlJ;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAWlJ"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { prompt } from '../prompts.js';
|
|
2
|
+
import { c, error, header, info, kv, spinner, success, table } from '../lib/format.js';
|
|
3
|
+
const num = (v, usage) => {
|
|
4
|
+
const n = Number(v);
|
|
5
|
+
if (!Number.isInteger(n) || n <= 0) {
|
|
6
|
+
error(usage);
|
|
7
|
+
process.exitCode = 1;
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
return n;
|
|
11
|
+
};
|
|
12
|
+
const fail = (err) => {
|
|
13
|
+
error(err instanceof Error ? err.message : String(err));
|
|
14
|
+
process.exitCode = 1;
|
|
15
|
+
};
|
|
16
|
+
const confirm = async (word, question) => {
|
|
17
|
+
const answer = await prompt(`${question} Type "${word}" to continue`, '');
|
|
18
|
+
if (answer.trim() !== word) {
|
|
19
|
+
info('Aborted.');
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
};
|
|
24
|
+
function describeOutcome(u, dbId) {
|
|
25
|
+
if (u.status === 'completed') {
|
|
26
|
+
success(`Upgraded to PostgreSQL ${u.toMajor}.`);
|
|
27
|
+
if (u.verification)
|
|
28
|
+
info(`Compared before the switch: ${u.verification.tables} table(s), ${u.verification.rows} row(s), ${u.verification.sequences} sequence(s).`);
|
|
29
|
+
info(`The previous volume ${u.previousVolume} is kept. Check your services, then: ninedeploy databases upgrade finalize ${dbId} ${u.id}`);
|
|
30
|
+
info(`To go back to PostgreSQL ${u.fromMajor}: ninedeploy databases upgrade rollback ${dbId} ${u.id}`);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
error(`The upgrade ${u.status === 'failed' ? 'failed' : `ended ${u.status}`}: ${u.error ?? 'no reason recorded'}`);
|
|
34
|
+
process.exitCode = 1;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function upgradeStatus(client, dbIdStr) {
|
|
38
|
+
const id = num(dbIdStr, 'Usage: ninedeploy databases upgrade status <dbId>');
|
|
39
|
+
if (id === null)
|
|
40
|
+
return;
|
|
41
|
+
let options;
|
|
42
|
+
let history;
|
|
43
|
+
try {
|
|
44
|
+
[options, history] = await spinner('Reading the cluster', () => Promise.all([client.databases.upgrades.options(id), client.databases.upgrades.list(id)]));
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
fail(err);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
header('Major upgrade');
|
|
51
|
+
kv('Running', options.currentMajor != null ? `PostgreSQL ${options.currentMajor}` : c.dim('unknown'));
|
|
52
|
+
if (options.refusal)
|
|
53
|
+
info(options.refusal.message);
|
|
54
|
+
else
|
|
55
|
+
kv('Can move to', options.targets.map((m) => `PostgreSQL ${m}`).join(', '));
|
|
56
|
+
if (history.length) {
|
|
57
|
+
table(history.map((u) => ({
|
|
58
|
+
id: u.id,
|
|
59
|
+
upgrade: `${u.fromMajor} → ${u.toMajor}`,
|
|
60
|
+
status: u.status === 'running' ? `running (${u.phase ?? '…'})` : u.status,
|
|
61
|
+
started: u.createdAt,
|
|
62
|
+
kept: u.status === 'completed' ? u.previousVolume : u.status === 'rolled_back' ? u.targetVolume : '',
|
|
63
|
+
error: u.error ?? '',
|
|
64
|
+
})));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function upgradeStart(client, dbIdStr, opts = {}) {
|
|
68
|
+
const usage = 'Usage: ninedeploy databases upgrade start <dbId> --to <major> [--yes] [--no-wait]';
|
|
69
|
+
const id = num(dbIdStr, usage);
|
|
70
|
+
if (id === null)
|
|
71
|
+
return;
|
|
72
|
+
const toMajor = num(opts.to, `--to must be a PostgreSQL major, e.g. --to 18. ${usage}`);
|
|
73
|
+
if (toMajor === null)
|
|
74
|
+
return;
|
|
75
|
+
if (!opts.yes && !(await confirm('upgrade', `The database stops for the whole upgrade (dump, restore into PostgreSQL ${toMajor}, compare). Attached services lose their connection until it is back.`)))
|
|
76
|
+
return;
|
|
77
|
+
let admitted;
|
|
78
|
+
try {
|
|
79
|
+
admitted = await spinner('Checking the cluster', () => client.databases.upgrades.start(id, { toMajor }));
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
fail(err);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (opts.wait === false) {
|
|
86
|
+
success(`Upgrade #${admitted.id} to PostgreSQL ${toMajor} is running. Follow it with: ninedeploy databases upgrade status ${id}`);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
let done;
|
|
90
|
+
try {
|
|
91
|
+
done = await spinner(`Upgrading to PostgreSQL ${toMajor}`, () => client.databases.upgrades.wait(id, admitted.id, opts.pollMs ? { intervalMs: opts.pollMs } : {}));
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
fail(err);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
describeOutcome(done, id);
|
|
98
|
+
}
|
|
99
|
+
export async function upgradeRollback(client, dbIdStr, upgradeIdStr, opts = {}) {
|
|
100
|
+
const usage = 'Usage: ninedeploy databases upgrade rollback <dbId> <upgradeId> [--yes]';
|
|
101
|
+
const id = num(dbIdStr, usage);
|
|
102
|
+
if (id === null)
|
|
103
|
+
return;
|
|
104
|
+
const upgradeId = num(upgradeIdStr, usage);
|
|
105
|
+
if (upgradeId === null)
|
|
106
|
+
return;
|
|
107
|
+
if (!opts.yes && !(await confirm('rollback', 'The database restarts on its previous volume. Writes made since the upgrade stay on the upgraded volume and are NOT carried back.')))
|
|
108
|
+
return;
|
|
109
|
+
try {
|
|
110
|
+
const u = await spinner('Rolling back', () => client.databases.upgrades.rollback(id, upgradeId));
|
|
111
|
+
success(`The database runs on PostgreSQL ${u.fromMajor} again (${u.previousVolume}).`);
|
|
112
|
+
info(`The upgraded volume ${u.targetVolume} is kept. Delete it with: ninedeploy databases upgrade finalize ${id} ${u.id}`);
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
fail(err);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export async function upgradeFinalize(client, dbIdStr, upgradeIdStr, opts = {}) {
|
|
119
|
+
const usage = 'Usage: ninedeploy databases upgrade finalize <dbId> <upgradeId> [--yes]';
|
|
120
|
+
const id = num(dbIdStr, usage);
|
|
121
|
+
if (id === null)
|
|
122
|
+
return;
|
|
123
|
+
const upgradeId = num(upgradeIdStr, usage);
|
|
124
|
+
if (upgradeId === null)
|
|
125
|
+
return;
|
|
126
|
+
if (!opts.yes && !(await confirm('finalize', 'The volume the database no longer uses is DELETED; after this there is no rollback.')))
|
|
127
|
+
return;
|
|
128
|
+
try {
|
|
129
|
+
const u = await spinner('Finalizing', () => client.databases.upgrades.finalize(id, upgradeId));
|
|
130
|
+
success(`Deleted ${u.removedVolume}.`);
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
fail(err);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=databaseUpgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"databaseUpgrade.js","sourceRoot":"","sources":["../../src/commands/databaseUpgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { type NineDeployClient } from '../client.js';
|
|
2
|
+
import type { ImportPlan, PlanEngine } from '../lib/importers/plan.js';
|
|
3
|
+
type CreateServiceInput = Parameters<NineDeployClient['services']['create']>[0];
|
|
4
|
+
type CreateDatabaseInput = Parameters<NineDeployClient['databases']['create']>[0];
|
|
5
|
+
/** The panel calls apply makes; NineDeployClient satisfies it. */
|
|
6
|
+
export interface ApplyClient {
|
|
7
|
+
services: {
|
|
8
|
+
create: (input: CreateServiceInput) => Promise<{
|
|
9
|
+
id: number;
|
|
10
|
+
}>;
|
|
11
|
+
/** Settings set right after create (the plan's `settings`, e.g. a worker's `running` health check). */
|
|
12
|
+
update: (id: number, input: {
|
|
13
|
+
healthCheck?: 'running';
|
|
14
|
+
}) => Promise<unknown>;
|
|
15
|
+
};
|
|
16
|
+
databases: {
|
|
17
|
+
create: (input: CreateDatabaseInput) => Promise<{
|
|
18
|
+
id: number;
|
|
19
|
+
}>;
|
|
20
|
+
};
|
|
21
|
+
env: {
|
|
22
|
+
import: (serviceId: number, content: string) => Promise<{
|
|
23
|
+
imported: number;
|
|
24
|
+
skipped: number;
|
|
25
|
+
errors: Array<{
|
|
26
|
+
line: number;
|
|
27
|
+
message: string;
|
|
28
|
+
}>;
|
|
29
|
+
}>;
|
|
30
|
+
};
|
|
31
|
+
attachments: {
|
|
32
|
+
list: (serviceId: number) => Promise<Array<{
|
|
33
|
+
id: number;
|
|
34
|
+
databaseId: number;
|
|
35
|
+
envAlias: string;
|
|
36
|
+
}>>;
|
|
37
|
+
create: (serviceId: number, input: {
|
|
38
|
+
databaseId: number;
|
|
39
|
+
envAlias?: string;
|
|
40
|
+
reuseExisting?: boolean;
|
|
41
|
+
}) => Promise<{
|
|
42
|
+
id: number;
|
|
43
|
+
databaseId: number;
|
|
44
|
+
envAlias: string;
|
|
45
|
+
}>;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export type ReceiptState = 'pending' | 'done' | 'skipped' | 'failed';
|
|
49
|
+
export interface ReceiptItem {
|
|
50
|
+
kind: 'service' | 'database' | 'env' | 'data' | 'domain' | 'attach' | 'volume';
|
|
51
|
+
ref: string;
|
|
52
|
+
name: string;
|
|
53
|
+
state: ReceiptState;
|
|
54
|
+
/** The NineDeploy id (the service's for an env item, the database's for a data item, the domain's for a domain item). */
|
|
55
|
+
id?: number;
|
|
56
|
+
/** Data and volume items (`import data`): the panel's import id, and the file's sha256 and size. */
|
|
57
|
+
importId?: number;
|
|
58
|
+
sha256?: string;
|
|
59
|
+
bytes?: number;
|
|
60
|
+
at: string;
|
|
61
|
+
notes: string[];
|
|
62
|
+
}
|
|
63
|
+
export interface ImportReceipt {
|
|
64
|
+
receiptVersion: 1;
|
|
65
|
+
panel: string;
|
|
66
|
+
source: {
|
|
67
|
+
kind: string;
|
|
68
|
+
url: string;
|
|
69
|
+
};
|
|
70
|
+
items: Record<string, ReceiptItem>;
|
|
71
|
+
}
|
|
72
|
+
export interface ApplyOptions {
|
|
73
|
+
/** Tag every created service and database with this project. */
|
|
74
|
+
project?: number;
|
|
75
|
+
/** Service name → .env file content. */
|
|
76
|
+
envFiles?: Record<string, string>;
|
|
77
|
+
}
|
|
78
|
+
export interface ApplyDeps {
|
|
79
|
+
client: ApplyClient;
|
|
80
|
+
panel: string;
|
|
81
|
+
receipt: ImportReceipt | null;
|
|
82
|
+
save: (receipt: ImportReceipt) => void;
|
|
83
|
+
now?: () => Date;
|
|
84
|
+
}
|
|
85
|
+
/** Accept only a plan this CLI wrote (planVersion 1) with the parts apply reads. */
|
|
86
|
+
export declare function validatePlan(raw: unknown): ImportPlan;
|
|
87
|
+
/**
|
|
88
|
+
* The source's version, when its image is the same repository NineDeploy runs
|
|
89
|
+
* and the tag is a version (starts with a digit). Otherwise undefined, and
|
|
90
|
+
* the panel picks its default.
|
|
91
|
+
*/
|
|
92
|
+
export declare function databaseVersion(engine: PlanEngine, image: string | null): string | undefined;
|
|
93
|
+
/** Variable names a .env file defines (values are never looked at). */
|
|
94
|
+
export declare function envFileKeys(content: string): string[];
|
|
95
|
+
/** Create what the plan describes, recording every step in the receipt. */
|
|
96
|
+
export declare function applyPlan(plan: ImportPlan, opts: ApplyOptions, deps: ApplyDeps): Promise<ImportReceipt>;
|
|
97
|
+
/** The receipt, item by item, in plan order. */
|
|
98
|
+
export declare function renderReceipt(receipt: ImportReceipt): string;
|
|
99
|
+
/** What --yes would do, without calling the panel. */
|
|
100
|
+
export declare function renderApplyPreview(plan: ImportPlan, receipt: ImportReceipt | null, envFiles: Record<string, string>): string;
|
|
101
|
+
/** Write the receipt atomically (temp file, then rename). */
|
|
102
|
+
export declare function writeReceipt(path: string, receipt: ImportReceipt): void;
|
|
103
|
+
export interface ImportApplyOpts {
|
|
104
|
+
receipt?: string;
|
|
105
|
+
project?: string;
|
|
106
|
+
dotenv?: string[];
|
|
107
|
+
yes?: boolean;
|
|
108
|
+
}
|
|
109
|
+
export declare function importApplyAction(planPath: string, opts: ImportApplyOpts, deps?: {
|
|
110
|
+
client?: ApplyClient;
|
|
111
|
+
panel?: string;
|
|
112
|
+
}): Promise<void>;
|
|
113
|
+
export {};
|
|
114
|
+
//# sourceMappingURL=importApply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importApply.d.ts","sourceRoot":"","sources":["../../src/commands/importApply.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAa,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIhE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAA0B,MAAM,0BAA0B,CAAC;AAE/F,KAAK,kBAAkB,GAAG,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,KAAK,mBAAmB,GAAG,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAElF,kEAAkE;AAClE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE;QACR,MAAM,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/D,uGAAuG;QACvG,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;YAAE,WAAW,CAAC,EAAE,SAAS,CAAA;SAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;KAC9E,CAAC;IACF,SAAS,EAAE;QAAE,MAAM,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAC/E,GAAG,EAAE;QAAE,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAC1J,WAAW,EAAE;QACX,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAC;QAClG,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,aAAa,CAAC,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACzK,CAAC;CACH;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AACrE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC/E,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,CAAC;IACpB,yHAAyH;IACzH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AACD,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,CAAC,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AACD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IACvC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAmBrD;AAQD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAS5F;AAED,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAOrD;AAgBD,2EAA2E;AAC3E,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,CAoL7G;AAID,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAS5D;AAED,sDAAsD;AACtD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAmC5H;AAED,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAIvE;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCnJ"}
|