lim 0.16.1 → 0.16.2
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/ios/create.js +1 -1
- package/dist/commands/ios/keychain/export.d.ts +3 -0
- package/dist/commands/ios/keychain/export.d.ts.map +1 -1
- package/dist/commands/ios/keychain/export.js +65 -16
- package/dist/commands/ios/keychain/export.js.map +1 -1
- package/dist/commands/ios/keychain/import.d.ts.map +1 -1
- package/dist/commands/ios/keychain/import.js +9 -5
- package/dist/commands/ios/keychain/import.js.map +1 -1
- package/dist/lib/keychain-encryption-key.d.ts +1 -0
- package/dist/lib/keychain-encryption-key.d.ts.map +1 -1
- package/dist/lib/keychain-encryption-key.js +2 -0
- package/dist/lib/keychain-encryption-key.js.map +1 -1
- package/package.json +1 -1
|
@@ -204,7 +204,7 @@ IosCreate.examples = [
|
|
|
204
204
|
'<%= config.bin %> ios create',
|
|
205
205
|
'<%= config.bin %> ios create --rm --model ipad',
|
|
206
206
|
'<%= config.bin %> ios create --region us-west --install-asset my-app.ipa',
|
|
207
|
-
'<%= config.bin %> ios create --keychain keychain/
|
|
207
|
+
'<%= config.bin %> ios create --keychain keychain/login.tar.gz --encryption-key-stdin < keychain.key',
|
|
208
208
|
'<%= config.bin %> ios create --keychain-url https://example.t3.storage.dev/... --encryption-key <key>',
|
|
209
209
|
'<%= config.bin %> ios create --install ./MyApp.ipa',
|
|
210
210
|
'<%= config.bin %> ios create --attach <xcode-instance-ID>',
|
|
@@ -12,6 +12,7 @@ export default class IosKeychainExport extends BaseCommand {
|
|
|
12
12
|
ttl: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
13
13
|
'encryption-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
14
14
|
'encryption-key-stdin': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
yes: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
16
|
'api-key': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
16
17
|
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
17
18
|
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
@@ -19,5 +20,7 @@ export default class IosKeychainExport extends BaseCommand {
|
|
|
19
20
|
workspace: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
20
21
|
};
|
|
21
22
|
run(): Promise<void>;
|
|
23
|
+
private listExistingKeychainAssets;
|
|
24
|
+
private confirmOverwrite;
|
|
22
25
|
}
|
|
23
26
|
//# sourceMappingURL=export.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../src/commands/ios/keychain/export.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../../src/commands/ios/keychain/export.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAcpD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;IACxD,MAAM,CAAC,OAAO,SAAgD;IAC9D,MAAM,CAAC,WAAW,SACuJ;IACzK,MAAM,CAAC,QAAQ,WAOb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;;MAwBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA8DZ,0BAA0B;YAO1B,gBAAgB;CAmB/B"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
const core_1 = require("@oclif/core");
|
|
7
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
4
8
|
const base_command_1 = require("../../../base-command");
|
|
5
9
|
const instance_client_factory_1 = require("../../../lib/instance-client-factory");
|
|
6
10
|
const keychain_encryption_key_1 = require("../../../lib/keychain-encryption-key");
|
|
@@ -8,22 +12,34 @@ class IosKeychainExport extends base_command_1.BaseCommand {
|
|
|
8
12
|
async run() {
|
|
9
13
|
const { args, flags } = await this.parse(IosKeychainExport);
|
|
10
14
|
this.setParsedFlags(flags);
|
|
11
|
-
const assetName = args.asset_name ?? flags['asset-name'];
|
|
12
|
-
if (!assetName) {
|
|
13
|
-
this.error('Provide a keychain asset name, e.g. `lim ios keychain export keychain/state.tar.gz`.');
|
|
14
|
-
}
|
|
15
|
+
const assetName = args.asset_name ?? flags['asset-name'] ?? keychain_encryption_key_1.DEFAULT_KEYCHAIN_ASSET_NAME;
|
|
15
16
|
let encryptionKey;
|
|
17
|
+
let generatedEncryptionKey = false;
|
|
16
18
|
try {
|
|
17
|
-
|
|
18
|
-
encryptionKey
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
if (flags['encryption-key'] !== undefined || flags['encryption-key-stdin']) {
|
|
20
|
+
encryptionKey = await (0, keychain_encryption_key_1.resolveKeychainEncryptionKey)({
|
|
21
|
+
encryptionKey: flags['encryption-key'],
|
|
22
|
+
encryptionKeyStdin: flags['encryption-key-stdin'],
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
encryptionKey = (0, keychain_encryption_key_1.generateKeychainEncryptionKey)();
|
|
27
|
+
generatedEncryptionKey = true;
|
|
28
|
+
}
|
|
21
29
|
}
|
|
22
30
|
catch (error) {
|
|
23
31
|
this.error(error.message);
|
|
24
32
|
}
|
|
25
33
|
await this.withAuth(async () => {
|
|
26
34
|
const resolvedInstance = this.resolveIosInstance(flags.id);
|
|
35
|
+
const existingAssets = await this.listExistingKeychainAssets(assetName);
|
|
36
|
+
if (existingAssets.length > 0) {
|
|
37
|
+
const shouldOverwrite = await this.confirmOverwrite(assetName, existingAssets, flags.yes);
|
|
38
|
+
if (!shouldOverwrite) {
|
|
39
|
+
this.info('Export cancelled.');
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
27
43
|
const asset = await this.client.assets.getOrCreate({
|
|
28
44
|
name: assetName,
|
|
29
45
|
kind: 'Keychain',
|
|
@@ -38,7 +54,7 @@ class IosKeychainExport extends base_command_1.BaseCommand {
|
|
|
38
54
|
disconnect();
|
|
39
55
|
}
|
|
40
56
|
if (flags.json) {
|
|
41
|
-
this.outputJson(asset);
|
|
57
|
+
this.outputJson(generatedEncryptionKey ? { ...asset, encryptionKey } : asset);
|
|
42
58
|
return;
|
|
43
59
|
}
|
|
44
60
|
this.output(`ID: ${asset.id}`);
|
|
@@ -46,20 +62,49 @@ class IosKeychainExport extends base_command_1.BaseCommand {
|
|
|
46
62
|
if (asset.expiresAt) {
|
|
47
63
|
this.output(`Expires At: ${asset.expiresAt}`);
|
|
48
64
|
}
|
|
65
|
+
if (generatedEncryptionKey) {
|
|
66
|
+
this.output(`Auto-generated the encryption key.`);
|
|
67
|
+
}
|
|
68
|
+
this.output(`You can import with the following command: \n\n$ lim ios keychain import ${asset.name} --encryption-key ${generatedEncryptionKey ? encryptionKey : '<key>'}`);
|
|
49
69
|
});
|
|
50
70
|
}
|
|
71
|
+
async listExistingKeychainAssets(assetName) {
|
|
72
|
+
return (await this.client.assets.list({
|
|
73
|
+
nameFilter: assetName,
|
|
74
|
+
kindFilter: 'Keychain',
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
async confirmOverwrite(assetName, existingAssets, yes) {
|
|
78
|
+
if (yes) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
if (!process.stdin.isTTY) {
|
|
82
|
+
this.error(`Keychain asset "${assetName}" already exists. Re-run with --yes to overwrite it.`);
|
|
83
|
+
}
|
|
84
|
+
const assetLabel = existingAssets.length === 1 ? 'A keychain asset' : `${existingAssets.length} keychain assets`;
|
|
85
|
+
const response = await (0, prompts_1.default)({
|
|
86
|
+
type: 'confirm',
|
|
87
|
+
name: 'overwrite',
|
|
88
|
+
message: `${assetLabel} named "${assetName}" already exists. Overwrite?`,
|
|
89
|
+
initial: false,
|
|
90
|
+
stdout: process.stderr,
|
|
91
|
+
});
|
|
92
|
+
return Boolean(response.overwrite);
|
|
93
|
+
}
|
|
51
94
|
}
|
|
52
95
|
IosKeychainExport.summary = 'Export iOS keychain state to asset storage';
|
|
53
|
-
IosKeychainExport.description = 'Create or
|
|
96
|
+
IosKeychainExport.description = 'Create a Keychain asset or confirm overwriting an existing one, ask the target iOS simulator to upload its keychain tar.gz to asset storage, and print the asset ID.';
|
|
54
97
|
IosKeychainExport.examples = [
|
|
55
|
-
'<%= config.bin %> ios keychain export
|
|
56
|
-
'<%= config.bin %> ios keychain export keychain/
|
|
98
|
+
'<%= config.bin %> ios keychain export',
|
|
99
|
+
'<%= config.bin %> ios keychain export keychain/login.tar.gz',
|
|
100
|
+
'<%= config.bin %> ios keychain export keychain/login.tar.gz --ttl 24h --json',
|
|
101
|
+
'<%= config.bin %> ios keychain export keychain/login.tar.gz --yes',
|
|
57
102
|
'<%= config.bin %> ios keychain generate-key > keychain.key',
|
|
58
|
-
'<%= config.bin %> ios keychain export keychain/
|
|
103
|
+
'<%= config.bin %> ios keychain export keychain/login.tar.gz --encryption-key-stdin < keychain.key',
|
|
59
104
|
];
|
|
60
105
|
IosKeychainExport.args = {
|
|
61
106
|
asset_name: core_1.Args.string({
|
|
62
|
-
description:
|
|
107
|
+
description: `Keychain asset name to store the exported keychain under. Defaults to ${keychain_encryption_key_1.DEFAULT_KEYCHAIN_ASSET_NAME}.`,
|
|
63
108
|
required: false,
|
|
64
109
|
}),
|
|
65
110
|
};
|
|
@@ -69,18 +114,22 @@ IosKeychainExport.flags = {
|
|
|
69
114
|
description: 'iOS instance ID to export from. Defaults to the last created iOS instance.',
|
|
70
115
|
}),
|
|
71
116
|
'asset-name': core_1.Flags.string({
|
|
72
|
-
description:
|
|
117
|
+
description: `Asset name to store the exported keychain under. Defaults to ${keychain_encryption_key_1.DEFAULT_KEYCHAIN_ASSET_NAME}. Prefer the positional <asset-name> argument.`,
|
|
73
118
|
}),
|
|
74
119
|
ttl: core_1.Flags.string({
|
|
75
120
|
description: 'Time-to-live as a Go duration (e.g. "24h", min 1m). Defaults to no expiry.',
|
|
76
121
|
}),
|
|
77
122
|
'encryption-key': core_1.Flags.string({
|
|
78
|
-
description: 'Base64/base64url 32-byte encryption key for the exported keychain archive.',
|
|
123
|
+
description: 'Base64/base64url 32-byte encryption key for the exported keychain archive. Generated and printed if omitted.',
|
|
79
124
|
}),
|
|
80
125
|
'encryption-key-stdin': core_1.Flags.boolean({
|
|
81
126
|
description: 'Read the base64/base64url 32-byte encryption key from stdin.',
|
|
82
127
|
default: false,
|
|
83
128
|
}),
|
|
129
|
+
yes: core_1.Flags.boolean({
|
|
130
|
+
description: 'Overwrite an existing keychain asset without prompting.',
|
|
131
|
+
default: false,
|
|
132
|
+
}),
|
|
84
133
|
};
|
|
85
134
|
exports.default = IosKeychainExport;
|
|
86
135
|
//# sourceMappingURL=export.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../../src/commands/ios/keychain/export.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../../src/commands/ios/keychain/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../../src/commands/ios/keychain/import.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../../src/commands/ios/keychain/import.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAcpD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW;IACxD,MAAM,CAAC,OAAO,SAAkD;IAChE,MAAM,CAAC,WAAW,SACuI;IACzJ,MAAM,CAAC,QAAQ,WAMb;IAEF,MAAM,CAAC,IAAI;;MAKT;IAEF,MAAM,CAAC,KAAK;;;;;;;;;;;MAkBV;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAmCZ,+BAA+B;CAsC9C"}
|
|
@@ -20,7 +20,8 @@ class IosKeychainImport extends base_command_1.BaseCommand {
|
|
|
20
20
|
}
|
|
21
21
|
await this.withAuth(async () => {
|
|
22
22
|
const resolvedInstance = this.resolveIosInstance(flags.id);
|
|
23
|
-
const
|
|
23
|
+
const assetName = args.asset_name ?? (!flags.url && !flags['asset-id'] ? keychain_encryption_key_1.DEFAULT_KEYCHAIN_ASSET_NAME : undefined);
|
|
24
|
+
const url = flags.url ?? (await this.resolveKeychainAssetDownloadUrl(assetName, flags['asset-id']));
|
|
24
25
|
const { client, disconnect } = await (0, instance_client_factory_1.getIosInstanceClient)(this.client, resolvedInstance);
|
|
25
26
|
try {
|
|
26
27
|
const result = await client.importKeychain({ url, encryptionKey });
|
|
@@ -77,14 +78,17 @@ class IosKeychainImport extends base_command_1.BaseCommand {
|
|
|
77
78
|
IosKeychainImport.summary = 'Import iOS keychain state from asset storage';
|
|
78
79
|
IosKeychainImport.description = 'Resolve a Keychain asset by name, then ask the target iOS simulator to download and apply the keychain tar.gz. Use --asset-id to import by asset ID.';
|
|
79
80
|
IosKeychainImport.examples = [
|
|
80
|
-
'<%= config.bin %> ios keychain import keychain/
|
|
81
|
-
'<%= config.bin %> ios keychain import keychain/
|
|
81
|
+
'<%= config.bin %> ios keychain import keychain/login.tar.gz',
|
|
82
|
+
'<%= config.bin %> ios keychain import keychain/login.tar.gz --id <instance-ID>',
|
|
82
83
|
'<%= config.bin %> ios keychain import --asset-id <asset-ID>',
|
|
83
84
|
'<%= config.bin %> ios keychain import --url https://example.t3.storage.dev/... --json',
|
|
84
|
-
'<%= config.bin %> ios keychain import keychain/
|
|
85
|
+
'<%= config.bin %> ios keychain import keychain/login.tar.gz --encryption-key-stdin < keychain.key',
|
|
85
86
|
];
|
|
86
87
|
IosKeychainImport.args = {
|
|
87
|
-
asset_name: core_1.Args.string({
|
|
88
|
+
asset_name: core_1.Args.string({
|
|
89
|
+
description: `Keychain asset name to import. Defaults to ${keychain_encryption_key_1.DEFAULT_KEYCHAIN_ASSET_NAME}.`,
|
|
90
|
+
required: false,
|
|
91
|
+
}),
|
|
88
92
|
};
|
|
89
93
|
IosKeychainImport.flags = {
|
|
90
94
|
...base_command_1.BaseCommand.baseFlags,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../../src/commands/ios/keychain/import.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,wDAAoD;AACpD,kFAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../../src/commands/ios/keychain/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain-encryption-key.d.ts","sourceRoot":"","sources":["../../src/lib/keychain-encryption-key.ts"],"names":[],"mappings":"AAEA,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AAED,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAAC,MAAM,CAAC,CAalB;AAED,wBAAsB,kCAAkC,IAAI,OAAO,CAAC,MAAM,CAAC,CAc1E;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAe/D"}
|
|
1
|
+
{"version":3,"file":"keychain-encryption-key.d.ts","sourceRoot":"","sources":["../../src/lib/keychain-encryption-key.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,2BAA2B,0BAA0B,CAAC;AAEnE,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AAED,wBAAsB,4BAA4B,CAAC,OAAO,EAAE;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAAC,MAAM,CAAC,CAalB;AAED,wBAAsB,kCAAkC,IAAI,OAAO,CAAC,MAAM,CAAC,CAc1E;AAED,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAe/D"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_KEYCHAIN_ASSET_NAME = void 0;
|
|
3
4
|
exports.generateKeychainEncryptionKey = generateKeychainEncryptionKey;
|
|
4
5
|
exports.resolveKeychainEncryptionKey = resolveKeychainEncryptionKey;
|
|
5
6
|
exports.readKeychainEncryptionKeyFromStdin = readKeychainEncryptionKeyFromStdin;
|
|
6
7
|
exports.validateKeychainEncryptionKey = validateKeychainEncryptionKey;
|
|
7
8
|
const crypto_1 = require("crypto");
|
|
9
|
+
exports.DEFAULT_KEYCHAIN_ASSET_NAME = 'keychain/login.tar.gz';
|
|
8
10
|
function generateKeychainEncryptionKey() {
|
|
9
11
|
return (0, crypto_1.randomBytes)(32).toString('base64');
|
|
10
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keychain-encryption-key.js","sourceRoot":"","sources":["../../src/lib/keychain-encryption-key.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"keychain-encryption-key.js","sourceRoot":"","sources":["../../src/lib/keychain-encryption-key.ts"],"names":[],"mappings":";;;AAIA,sEAEC;AAED,oEAgBC;AAED,gFAcC;AAED,sEAeC;AAzDD,mCAAqC;AAExB,QAAA,2BAA2B,GAAG,uBAAuB,CAAC;AAEnE,SAAgB,6BAA6B;IAC3C,OAAO,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAEM,KAAK,UAAU,4BAA4B,CAAC,OAGlD;IACC,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QACzC,6BAA6B,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,OAAO,kCAAkC,EAAE,CAAC;IAC9C,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;AACzE,CAAC;AAEM,KAAK,UAAU,kCAAkC;IACtD,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,6BAA6B,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAgB,6BAA6B,CAAC,GAAW;IACvD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClD,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC"}
|