@helium/helium-admin-cli 0.7.11 → 0.7.13

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.
@@ -0,0 +1,323 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.run = void 0;
39
+ const address_1 = __importDefault(require("@helium/address"));
40
+ const KeyTypes_1 = require("@helium/address/build/KeyTypes");
41
+ const helium_entity_manager_sdk_1 = require("@helium/helium-entity-manager-sdk");
42
+ const helium_sub_daos_sdk_1 = require("@helium/helium-sub-daos-sdk");
43
+ const voter_stake_registry_sdk_1 = require("@helium/voter-stake-registry-sdk");
44
+ const spl_utils_1 = require("@helium/spl-utils");
45
+ const anchor = __importStar(require("@coral-xyz/anchor"));
46
+ const spl_account_compression_1 = require("@solana/spl-account-compression");
47
+ const web3_js_1 = require("@solana/web3.js");
48
+ const fs_1 = __importDefault(require("fs"));
49
+ const os_1 = __importDefault(require("os"));
50
+ const yargs_1 = __importDefault(require("yargs/yargs"));
51
+ const utils_1 = require("./utils");
52
+ const sdk_1 = __importDefault(require("@sqds/sdk"));
53
+ function run(args = process.argv) {
54
+ return __awaiter(this, void 0, void 0, function* () {
55
+ const yarg = (0, yargs_1.default)(args).options({
56
+ wallet: {
57
+ alias: 'k',
58
+ describe: 'Anchor wallet keypair',
59
+ default: `${os_1.default.homedir()}/.config/solana/id.json`,
60
+ },
61
+ executeTransaction: {
62
+ type: 'boolean',
63
+ },
64
+ url: {
65
+ alias: 'u',
66
+ default: 'http://127.0.0.1:8899',
67
+ describe: 'The solana url',
68
+ },
69
+ subdaoMint: {
70
+ required: true,
71
+ describe: 'Public Key of the subdao mint',
72
+ type: 'string',
73
+ },
74
+ govProgramId: {
75
+ type: 'string',
76
+ describe: 'Pubkey of the GOV program',
77
+ default: 'hgovkRU6Ghe1Qoyb54HdSLdqN7VtxaifBzRmh9jtd3S',
78
+ },
79
+ fromFile: {
80
+ describe: 'Load makers from a json file and create in bulk',
81
+ required: false,
82
+ type: 'string',
83
+ },
84
+ name: {
85
+ alias: 'n',
86
+ type: 'string',
87
+ required: false,
88
+ describe: 'The name of the maker',
89
+ },
90
+ makerKey: {
91
+ alias: 'm',
92
+ type: 'string',
93
+ describe: '*Helium* Public Key of a maker',
94
+ required: false,
95
+ },
96
+ makerCount: {
97
+ alias: 'c',
98
+ type: 'number',
99
+ describe: 'Estimated number of hotspots this maker will have',
100
+ required: false,
101
+ },
102
+ merkleBasePath: {
103
+ type: 'string',
104
+ describe: 'Base path for merkle keypairs',
105
+ default: `${__dirname}/../keypairs`,
106
+ },
107
+ symbol: {
108
+ alias: 's',
109
+ type: 'string',
110
+ required: true,
111
+ describe: 'The symbol of the entity config',
112
+ },
113
+ multisig: {
114
+ type: 'string',
115
+ describe: 'Address of the squads multisig to be authority. If not provided, your wallet will be the authority',
116
+ },
117
+ authorityIndex: {
118
+ type: 'number',
119
+ describe: 'Authority index for squads. Defaults to 1',
120
+ default: 1,
121
+ },
122
+ });
123
+ const argv = yield yarg.argv;
124
+ process.env.ANCHOR_WALLET = argv.wallet;
125
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
126
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
127
+ const provider = anchor.getProvider();
128
+ const wallet = new anchor.Wallet((0, utils_1.loadKeypair)(argv.wallet));
129
+ const name = argv.name;
130
+ const symbol = argv.symbol;
131
+ let makers = [
132
+ {
133
+ name,
134
+ address: argv.makerKey,
135
+ count: argv.makerCount || 300000,
136
+ staked: true,
137
+ },
138
+ ];
139
+ if (argv.fromFile) {
140
+ makers = JSON.parse(fs_1.default.readFileSync(argv.fromFile, 'utf-8'));
141
+ // Append a special fallthrough maker for hotspots that don't have a maker
142
+ const solAddr = provider.wallet.publicKey;
143
+ const helAddr = new address_1.default(0, 0, KeyTypes_1.ED25519_KEY_TYPE, solAddr.toBuffer());
144
+ makers.push({
145
+ name: 'Migrated Helium Hotspot',
146
+ address: helAddr.b58,
147
+ count: 50000,
148
+ staked: true,
149
+ });
150
+ }
151
+ const hemProgram = yield (0, helium_entity_manager_sdk_1.init)(provider);
152
+ const hsdProgram = yield (0, helium_sub_daos_sdk_1.init)(provider);
153
+ const vsrProgram = yield (0, voter_stake_registry_sdk_1.init)(provider);
154
+ const conn = provider.connection;
155
+ const subdaoMint = new web3_js_1.PublicKey(argv.subdaoMint);
156
+ const subdao = (yield (0, helium_sub_daos_sdk_1.subDaoKey)(subdaoMint))[0];
157
+ const entityConfigKey = (yield (0, helium_entity_manager_sdk_1.rewardableEntityConfigKey)(subdao, symbol.toUpperCase()))[0];
158
+ const subdaoAcc = yield hsdProgram.account.subDaoV0.fetch(subdao);
159
+ const dao = yield hsdProgram.account.daoV0.fetch(subdaoAcc.dao);
160
+ let subdaoPayer = provider.wallet.publicKey;
161
+ let daoPayer = provider.wallet.publicKey;
162
+ const squads = sdk_1.default.endpoint(process.env.ANCHOR_PROVIDER_URL, wallet, {
163
+ commitmentOrConfig: 'finalized',
164
+ });
165
+ let authority = provider.wallet.publicKey;
166
+ let multisig = argv.multisig ? new web3_js_1.PublicKey(argv.multisig) : null;
167
+ if (multisig) {
168
+ authority = squads.getAuthorityPDA(multisig, argv.authorityIndex);
169
+ subdaoPayer = authority;
170
+ daoPayer = authority;
171
+ console.log('SQUAD AUTH', authority.toBase58());
172
+ }
173
+ const createInstructions = [];
174
+ const approveInstructions = [];
175
+ const updateAuthority = dao.authority;
176
+ let totalSol = 0;
177
+ for (const { name, address, count, staked } of makers) {
178
+ const innerCreateInstrs = [];
179
+ const makerAuthority = new web3_js_1.PublicKey(address_1.default.fromB58(address).publicKey);
180
+ const [size, buffer, canopy] = utils_1.merkleSizes.find(([height]) => Math.pow(2, height) > count * 2);
181
+ const space = (0, spl_account_compression_1.getConcurrentMerkleTreeAccountSize)(size, buffer, canopy);
182
+ const maker = yield (0, helium_entity_manager_sdk_1.makerKey)(subdaoAcc.dao, name)[0];
183
+ const rent = yield provider.connection.getMinimumBalanceForRentExemption(space);
184
+ totalSol += rent;
185
+ let merkle;
186
+ const merklePath = `${argv.merkleBasePath}/merkle-${address}.json`;
187
+ if (fs_1.default.existsSync(merklePath)) {
188
+ merkle = (0, utils_1.loadKeypair)(merklePath);
189
+ }
190
+ else {
191
+ merkle = web3_js_1.Keypair.generate();
192
+ fs_1.default.writeFileSync(merklePath, JSON.stringify(Array.from(merkle.secretKey)));
193
+ }
194
+ if (!(yield (0, utils_1.exists)(conn, maker))) {
195
+ console.log(`
196
+ Creating maker with helium addr: ${address}.
197
+ Solana addr: ${makerAuthority.toBase58()}.
198
+ Size: ${size}, buffer: ${buffer}, canopy: ${canopy}.
199
+ Space: ${space} bytes
200
+ Cost: ~${(0, spl_utils_1.humanReadable)(new anchor.BN(rent), 9)} Sol
201
+ `);
202
+ if (space > 10000000) {
203
+ throw new Error(`Space ${space} more than 10mb for tree ${size}, ${buffer}, ${canopy}}`);
204
+ }
205
+ const create = yield hemProgram.methods
206
+ .initializeMakerV0({
207
+ name: name,
208
+ metadataUrl: 'todo',
209
+ issuingAuthority: makerAuthority,
210
+ updateAuthority,
211
+ })
212
+ .accounts({
213
+ maker,
214
+ payer: daoPayer,
215
+ dao: subdaoAcc.dao,
216
+ })
217
+ .instruction();
218
+ const setTree = yield hemProgram.methods
219
+ .setMakerTreeV0({
220
+ maxDepth: size,
221
+ maxBufferSize: buffer,
222
+ })
223
+ .accounts({
224
+ maker,
225
+ merkleTree: merkle.publicKey,
226
+ payer: daoPayer,
227
+ updateAuthority,
228
+ })
229
+ .instruction();
230
+ if (!(yield (0, utils_1.exists)(conn, merkle.publicKey))) {
231
+ yield (0, spl_utils_1.sendInstructions)(provider, [
232
+ web3_js_1.SystemProgram.createAccount({
233
+ fromPubkey: provider.wallet.publicKey,
234
+ newAccountPubkey: merkle.publicKey,
235
+ lamports: yield provider.connection.getMinimumBalanceForRentExemption(space),
236
+ space: space,
237
+ programId: spl_account_compression_1.SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
238
+ }),
239
+ ], [merkle]);
240
+ }
241
+ innerCreateInstrs.push(...[create, setTree].filter(spl_utils_1.truthy));
242
+ }
243
+ else {
244
+ const makerAcc = yield hemProgram.account.makerV0.fetch(maker);
245
+ innerCreateInstrs.push(yield hemProgram.methods
246
+ .updateMakerV0({
247
+ issuingAuthority: makerAuthority,
248
+ updateAuthority,
249
+ })
250
+ .accounts({ maker, updateAuthority: makerAcc.updateAuthority })
251
+ .instruction());
252
+ if (makerAcc.merkleTree.equals(web3_js_1.SystemProgram.programId)) {
253
+ const setTree = yield hemProgram.methods
254
+ .setMakerTreeV0({
255
+ maxDepth: size,
256
+ maxBufferSize: buffer,
257
+ })
258
+ .accounts({
259
+ maker,
260
+ merkleTree: merkle.publicKey,
261
+ payer: daoPayer,
262
+ updateAuthority,
263
+ })
264
+ .instruction();
265
+ if (!(yield (0, utils_1.exists)(conn, merkle.publicKey))) {
266
+ yield (0, spl_utils_1.sendInstructions)(provider, [
267
+ web3_js_1.SystemProgram.createAccount({
268
+ fromPubkey: provider.wallet.publicKey,
269
+ newAccountPubkey: merkle.publicKey,
270
+ lamports: yield provider.connection.getMinimumBalanceForRentExemption(space),
271
+ space: space,
272
+ programId: spl_account_compression_1.SPL_ACCOUNT_COMPRESSION_PROGRAM_ID,
273
+ }),
274
+ ], [merkle]);
275
+ }
276
+ innerCreateInstrs.push(setTree);
277
+ }
278
+ }
279
+ createInstructions.push(innerCreateInstrs);
280
+ const innerApproveInstrs = [];
281
+ let approve;
282
+ if (staked &&
283
+ !(yield (0, utils_1.exists)(conn, (0, helium_entity_manager_sdk_1.makerApprovalKey)(entityConfigKey, maker)[0]))) {
284
+ const authority = (yield hemProgram.account.rewardableEntityConfigV0.fetch(entityConfigKey)).authority;
285
+ approve = yield hemProgram.methods
286
+ .approveMakerV0()
287
+ .accounts({
288
+ maker,
289
+ rewardableEntityConfig: entityConfigKey,
290
+ authority,
291
+ payer: subdaoPayer,
292
+ })
293
+ .instruction();
294
+ innerApproveInstrs.push(approve);
295
+ }
296
+ approveInstructions.push(innerApproveInstrs);
297
+ }
298
+ console.log('Total sol needed: ', (0, spl_utils_1.humanReadable)(new anchor.BN(totalSol), 9));
299
+ if (multisig) {
300
+ // Approve instructions must execute after ALL create instructions
301
+ const instrs = createInstructions.flat().filter(spl_utils_1.truthy);
302
+ const approveInstrs = approveInstructions.flat().filter(spl_utils_1.truthy);
303
+ for (const chunk of (0, spl_utils_1.chunks)([...instrs, ...approveInstrs], 3)) {
304
+ yield (0, utils_1.sendInstructionsOrSquads)({
305
+ provider,
306
+ instructions: chunk,
307
+ signers: [],
308
+ executeTransaction: argv.executeTransaction,
309
+ squads,
310
+ multisig,
311
+ authorityIndex: argv.authorityIndex,
312
+ });
313
+ }
314
+ }
315
+ else {
316
+ for (const instrs of [...createInstructions, ...approveInstructions]) {
317
+ yield (0, spl_utils_1.sendInstructions)(provider, instrs, []);
318
+ }
319
+ }
320
+ });
321
+ }
322
+ exports.run = run;
323
+ //# sourceMappingURL=create-and-approve-makers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-and-approve-makers.js","sourceRoot":"","sources":["../../src/create-and-approve-makers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAsC;AACtC,6DAAkE;AAClE,iFAK2C;AAC3C,qEAAyE;AACzE,+EAAmE;AACnE,iDAK2B;AAC3B,0DAA4C;AAC5C,6EAGyC;AACzC,6CAKyB;AACzB,4CAAoB;AACpB,4CAAoB;AACpB,wDAAgC;AAChC,mCAKiB;AACjB,oDAA+B;AAE/B,SAAsB,GAAG,CAAC,OAAY,OAAO,CAAC,IAAI;;QAChD,MAAM,IAAI,GAAG,IAAA,eAAK,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE;gBACN,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,uBAAuB;gBACjC,OAAO,EAAE,GAAG,YAAE,CAAC,OAAO,EAAE,yBAAyB;aAClD;YACD,kBAAkB,EAAE;gBAClB,IAAI,EAAE,SAAS;aAChB;YACD,GAAG,EAAE;gBACH,KAAK,EAAE,GAAG;gBACV,OAAO,EAAE,uBAAuB;gBAChC,QAAQ,EAAE,gBAAgB;aAC3B;YACD,UAAU,EAAE;gBACV,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,+BAA+B;gBACzC,IAAI,EAAE,QAAQ;aACf;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,2BAA2B;gBACrC,OAAO,EAAE,6CAA6C;aACvD;YACD,QAAQ,EAAE;gBACR,QAAQ,EAAE,iDAAiD;gBAC3D,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,QAAQ;aACf;YACD,IAAI,EAAE;gBACJ,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,uBAAuB;aAClC;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,gCAAgC;gBAC1C,QAAQ,EAAE,KAAK;aAChB;YACD,UAAU,EAAE;gBACV,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,mDAAmD;gBAC7D,QAAQ,EAAE,KAAK;aAChB;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,+BAA+B;gBACzC,OAAO,EAAE,GAAG,SAAS,cAAc;aACpC;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,GAAG;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,QAAQ,EAAE,iCAAiC;aAC5C;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,QAAQ,EACN,oGAAoG;aACvG;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,2CAA2C;gBACrD,OAAO,EAAE,CAAC;aACX;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAA2B,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAE3D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,IAAI,MAAM,GAAG;YACX;gBACE,IAAI;gBACJ,OAAO,EAAE,IAAI,CAAC,QAAQ;gBACtB,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,MAAM;gBAChC,MAAM,EAAE,IAAI;aACb;SACF,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,0EAA0E;YAC1E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,CAAC,EAAE,CAAC,EAAE,2BAAgB,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,yBAAyB;gBAC/B,OAAO,EAAE,OAAO,CAAC,GAAG;gBACpB,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,IAAI;aACb,CAAC,CAAC;SACJ;QAED,MAAM,UAAU,GAAG,MAAM,IAAA,gCAAO,EAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,MAAM,IAAA,0BAAO,EAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,MAAM,IAAA,+BAAO,EAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,mBAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAA,+BAAS,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,CACtB,MAAM,IAAA,qDAAyB,EAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAC9D,CAAC,CAAC,CAAC,CAAC;QAEL,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC5C,IAAI,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QACzC,MAAM,MAAM,GAAG,aAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,MAAM,EAAE;YACtE,kBAAkB,EAAE,WAAW;SAChC,CAAC,CAAC;QACH,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,mBAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnE,IAAI,QAAQ,EAAE;YACZ,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAClE,WAAW,GAAG,SAAS,CAAC;YACxB,QAAQ,GAAG,SAAS,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;SACjD;QAED,MAAM,kBAAkB,GAA+B,EAAE,CAAC;QAC1D,MAAM,mBAAmB,GAA+B,EAAE,CAAC;QAC3D,MAAM,eAAe,GAAG,GAAG,CAAC,SAAS,CAAC;QACtC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,MAAM,EAAE;YACrD,MAAM,iBAAiB,GAA6B,EAAE,CAAC;YACvD,MAAM,cAAc,GAAG,IAAI,mBAAS,CAAC,iBAAO,CAAC,OAAO,CAAC,OAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;YAC1E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,mBAAW,CAAC,IAAI,CAC7C,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,CAC7C,CAAC;YACH,MAAM,KAAK,GAAG,IAAA,4DAAkC,EAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACvE,MAAM,KAAK,GAAG,MAAM,IAAA,oCAAQ,EAAC,SAAS,CAAC,GAAG,EAAE,IAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,iCAAiC,CACtE,KAAK,CACN,CAAC;YACF,QAAQ,IAAI,IAAI,CAAC;YAEjB,IAAI,MAAe,CAAC;YACpB,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,cAAc,WAAW,OAAO,OAAO,CAAC;YACnE,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;gBAC7B,MAAM,GAAG,IAAA,mBAAW,EAAC,UAAU,CAAC,CAAC;aAClC;iBAAM;gBACL,MAAM,GAAG,iBAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5B,YAAE,CAAC,aAAa,CACd,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAC7C,CAAC;aACH;YAED,IAAI,CAAC,CAAC,MAAM,IAAA,cAAM,EAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;gBAChC,OAAO,CAAC,GAAG,CACT;+CACuC,OAAO;2BAC3B,cAAc,CAAC,QAAQ,EAAE;oBAChC,IAAI,aAAa,MAAM,aAAa,MAAM;qBACzC,KAAK;qBACL,IAAA,yBAAa,EAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC7C,CACN,CAAC;gBAEF,IAAI,KAAK,GAAG,QAAQ,EAAE;oBACpB,MAAM,IAAI,KAAK,CACb,SAAS,KAAK,4BAA4B,IAAI,KAAK,MAAM,KAAK,MAAM,GAAG,CACxE,CAAC;iBACH;gBAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO;qBACpC,iBAAiB,CAAC;oBACjB,IAAI,EAAE,IAAK;oBACX,WAAW,EAAE,MAAM;oBACnB,gBAAgB,EAAE,cAAc;oBAChC,eAAe;iBAChB,CAAC;qBACD,QAAQ,CAAC;oBACR,KAAK;oBACL,KAAK,EAAE,QAAQ;oBACf,GAAG,EAAE,SAAS,CAAC,GAAG;iBACnB,CAAC;qBACD,WAAW,EAAE,CAAC;gBAEjB,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO;qBACrC,cAAc,CAAC;oBACd,QAAQ,EAAE,IAAI;oBACd,aAAa,EAAE,MAAM;iBACtB,CAAC;qBACD,QAAQ,CAAC;oBACR,KAAK;oBACL,UAAU,EAAE,MAAM,CAAC,SAAS;oBAC5B,KAAK,EAAE,QAAQ;oBACf,eAAe;iBAChB,CAAC;qBACD,WAAW,EAAE,CAAC;gBAEjB,IAAI,CAAC,CAAC,MAAM,IAAA,cAAM,EAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE;oBAC3C,MAAM,IAAA,4BAAgB,EACpB,QAAQ,EACR;wBACE,uBAAa,CAAC,aAAa,CAAC;4BAC1B,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;4BACrC,gBAAgB,EAAE,MAAM,CAAC,SAAS;4BAClC,QAAQ,EACN,MAAM,QAAQ,CAAC,UAAU,CAAC,iCAAiC,CACzD,KAAK,CACN;4BACH,KAAK,EAAE,KAAK;4BACZ,SAAS,EAAE,4DAAkC;yBAC9C,CAAC;qBACH,EACD,CAAC,MAAM,CAAC,CACT,CAAC;iBACH;gBACD,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,kBAAM,CAAC,CAAC,CAAC;aAC7D;iBAAM;gBACL,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC/D,iBAAiB,CAAC,IAAI,CACpB,MAAM,UAAU,CAAC,OAAO;qBACrB,aAAa,CAAC;oBACb,gBAAgB,EAAE,cAAc;oBAChC,eAAe;iBAChB,CAAC;qBACD,QAAQ,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC;qBAC9D,WAAW,EAAE,CACjB,CAAC;gBAEF,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,uBAAa,CAAC,SAAS,CAAC,EAAE;oBACvD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO;yBACrC,cAAc,CAAC;wBACd,QAAQ,EAAE,IAAI;wBACd,aAAa,EAAE,MAAM;qBACtB,CAAC;yBACD,QAAQ,CAAC;wBACR,KAAK;wBACL,UAAU,EAAE,MAAM,CAAC,SAAS;wBAC5B,KAAK,EAAE,QAAQ;wBACf,eAAe;qBAChB,CAAC;yBACD,WAAW,EAAE,CAAC;oBACjB,IAAI,CAAC,CAAC,MAAM,IAAA,cAAM,EAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE;wBAC3C,MAAM,IAAA,4BAAgB,EACpB,QAAQ,EACR;4BACE,uBAAa,CAAC,aAAa,CAAC;gCAC1B,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;gCACrC,gBAAgB,EAAE,MAAM,CAAC,SAAS;gCAClC,QAAQ,EACN,MAAM,QAAQ,CAAC,UAAU,CAAC,iCAAiC,CACzD,KAAK,CACN;gCACH,KAAK,EAAE,KAAK;gCACZ,SAAS,EAAE,4DAAkC;6BAC9C,CAAC;yBACH,EACD,CAAC,MAAM,CAAC,CACT,CAAC;qBACH;oBACD,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACjC;aACF;YACD,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAE3C,MAAM,kBAAkB,GAA6B,EAAE,CAAC;YACxD,IAAI,OAA+B,CAAC;YACpC,IACE,MAAM;gBACN,CAAC,CAAC,MAAM,IAAA,cAAM,EAAC,IAAI,EAAE,IAAA,4CAAgB,EAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAClE;gBACA,MAAM,SAAS,GAAG,CAChB,MAAM,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC,KAAK,CAAC,eAAe,CAAC,CACzE,CAAC,SAAS,CAAC;gBACZ,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO;qBAC/B,cAAc,EAAE;qBAChB,QAAQ,CAAC;oBACR,KAAK;oBACL,sBAAsB,EAAE,eAAe;oBACvC,SAAS;oBACT,KAAK,EAAE,WAAW;iBACnB,CAAC;qBACD,WAAW,EAAE,CAAC;gBACjB,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAClC;YAED,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAC9C;QAED,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAA,yBAAa,EAAC,IAAI,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7E,IAAI,QAAQ,EAAE;YACZ,kEAAkE;YAClE,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,kBAAM,CAAC,CAAC;YACxD,MAAM,aAAa,GAAG,mBAAmB,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,kBAAM,CAAC,CAAC;YAChE,KAAK,MAAM,KAAK,IAAI,IAAA,kBAAM,EAAC,CAAC,GAAG,MAAM,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE;gBAC5D,MAAM,IAAA,gCAAwB,EAAC;oBAC7B,QAAQ;oBACR,YAAY,EAAE,KAAK;oBACnB,OAAO,EAAE,EAAE;oBACX,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;oBAC3C,MAAM;oBACN,QAAQ;oBACR,cAAc,EAAE,IAAI,CAAC,cAAc;iBACpC,CAAC,CAAC;aACJ;SACF;aAAM;YACL,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,kBAAkB,EAAE,GAAG,mBAAmB,CAAC,EAAE;gBACpE,MAAM,IAAA,4BAAgB,EAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;aAC9C;SACF;IACH,CAAC;CAAA;AA3TD,kBA2TC"}