@helium/helium-admin-cli 0.0.49-price.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.
Files changed (136) hide show
  1. package/README.md +91 -0
  2. package/bin/helium-admin.js +13 -0
  3. package/lib/cjs/cli-distribute-rewards.js +96 -0
  4. package/lib/cjs/cli-distribute-rewards.js.map +1 -0
  5. package/lib/cjs/create-active-device-aggregator.js +112 -0
  6. package/lib/cjs/create-active-device-aggregator.js.map +1 -0
  7. package/lib/cjs/create-dao.js +384 -0
  8. package/lib/cjs/create-dao.js.map +1 -0
  9. package/lib/cjs/create-maker.js +323 -0
  10. package/lib/cjs/create-maker.js.map +1 -0
  11. package/lib/cjs/create-price-oracle.js +121 -0
  12. package/lib/cjs/create-price-oracle.js.map +1 -0
  13. package/lib/cjs/create-subdao.js +496 -0
  14. package/lib/cjs/create-subdao.js.map +1 -0
  15. package/lib/cjs/distribute-hst.js +94 -0
  16. package/lib/cjs/distribute-hst.js.map +1 -0
  17. package/lib/cjs/ecc-gen.js +17 -0
  18. package/lib/cjs/ecc-gen.js.map +1 -0
  19. package/lib/cjs/end-epoch.js +144 -0
  20. package/lib/cjs/end-epoch.js.map +1 -0
  21. package/lib/cjs/log-hotspot.js +80 -0
  22. package/lib/cjs/log-hotspot.js.map +1 -0
  23. package/lib/cjs/mint-dc.js +112 -0
  24. package/lib/cjs/mint-dc.js.map +1 -0
  25. package/lib/cjs/reset-clockwork.js +141 -0
  26. package/lib/cjs/reset-clockwork.js.map +1 -0
  27. package/lib/cjs/reset-vsr-max-voter-record.js +142 -0
  28. package/lib/cjs/reset-vsr-max-voter-record.js.map +1 -0
  29. package/lib/cjs/reset-vsr-voting-mint.js +179 -0
  30. package/lib/cjs/reset-vsr-voting-mint.js.map +1 -0
  31. package/lib/cjs/setup-hst.js +243 -0
  32. package/lib/cjs/setup-hst.js.map +1 -0
  33. package/lib/cjs/submit-price.js +158 -0
  34. package/lib/cjs/submit-price.js.map +1 -0
  35. package/lib/cjs/update-account-circuit-breaker.js +127 -0
  36. package/lib/cjs/update-account-circuit-breaker.js.map +1 -0
  37. package/lib/cjs/update-dao.js +146 -0
  38. package/lib/cjs/update-dao.js.map +1 -0
  39. package/lib/cjs/update-mint-circuit-breaker.js +129 -0
  40. package/lib/cjs/update-mint-circuit-breaker.js.map +1 -0
  41. package/lib/cjs/update-rewardable-entity-config.js +143 -0
  42. package/lib/cjs/update-rewardable-entity-config.js.map +1 -0
  43. package/lib/cjs/update-subdao.js +228 -0
  44. package/lib/cjs/update-subdao.js.map +1 -0
  45. package/lib/cjs/utils.js +366 -0
  46. package/lib/cjs/utils.js.map +1 -0
  47. package/lib/esm/src/cli-distribute-rewards.js +55 -0
  48. package/lib/esm/src/cli-distribute-rewards.js.map +1 -0
  49. package/lib/esm/src/create-active-device-aggregator.js +71 -0
  50. package/lib/esm/src/create-active-device-aggregator.js.map +1 -0
  51. package/lib/esm/src/create-dao.js +341 -0
  52. package/lib/esm/src/create-dao.js.map +1 -0
  53. package/lib/esm/src/create-maker.js +282 -0
  54. package/lib/esm/src/create-maker.js.map +1 -0
  55. package/lib/esm/src/create-price-oracle.js +80 -0
  56. package/lib/esm/src/create-price-oracle.js.map +1 -0
  57. package/lib/esm/src/create-subdao.js +455 -0
  58. package/lib/esm/src/create-subdao.js.map +1 -0
  59. package/lib/esm/src/distribute-hst.js +53 -0
  60. package/lib/esm/src/distribute-hst.js.map +1 -0
  61. package/lib/esm/src/ecc-gen.js +6 -0
  62. package/lib/esm/src/ecc-gen.js.map +1 -0
  63. package/lib/esm/src/end-epoch.js +103 -0
  64. package/lib/esm/src/end-epoch.js.map +1 -0
  65. package/lib/esm/src/log-hotspot.js +39 -0
  66. package/lib/esm/src/log-hotspot.js.map +1 -0
  67. package/lib/esm/src/mint-dc.js +71 -0
  68. package/lib/esm/src/mint-dc.js.map +1 -0
  69. package/lib/esm/src/reset-clockwork.js +100 -0
  70. package/lib/esm/src/reset-clockwork.js.map +1 -0
  71. package/lib/esm/src/reset-vsr-max-voter-record.js +101 -0
  72. package/lib/esm/src/reset-vsr-max-voter-record.js.map +1 -0
  73. package/lib/esm/src/reset-vsr-voting-mint.js +138 -0
  74. package/lib/esm/src/reset-vsr-voting-mint.js.map +1 -0
  75. package/lib/esm/src/setup-hst.js +201 -0
  76. package/lib/esm/src/setup-hst.js.map +1 -0
  77. package/lib/esm/src/submit-price.js +113 -0
  78. package/lib/esm/src/submit-price.js.map +1 -0
  79. package/lib/esm/src/update-account-circuit-breaker.js +86 -0
  80. package/lib/esm/src/update-account-circuit-breaker.js.map +1 -0
  81. package/lib/esm/src/update-dao.js +105 -0
  82. package/lib/esm/src/update-dao.js.map +1 -0
  83. package/lib/esm/src/update-mint-circuit-breaker.js +88 -0
  84. package/lib/esm/src/update-mint-circuit-breaker.js.map +1 -0
  85. package/lib/esm/src/update-rewardable-entity-config.js +102 -0
  86. package/lib/esm/src/update-rewardable-entity-config.js.map +1 -0
  87. package/lib/esm/src/update-subdao.js +187 -0
  88. package/lib/esm/src/update-subdao.js.map +1 -0
  89. package/lib/esm/src/utils.js +309 -0
  90. package/lib/esm/src/utils.js.map +1 -0
  91. package/lib/esm/tsconfig.esm.tsbuildinfo +1 -0
  92. package/lib/types/src/cli-distribute-rewards.d.ts +2 -0
  93. package/lib/types/src/cli-distribute-rewards.d.ts.map +1 -0
  94. package/lib/types/src/create-active-device-aggregator.d.ts +2 -0
  95. package/lib/types/src/create-active-device-aggregator.d.ts.map +1 -0
  96. package/lib/types/src/create-dao.d.ts +2 -0
  97. package/lib/types/src/create-dao.d.ts.map +1 -0
  98. package/lib/types/src/create-maker.d.ts +2 -0
  99. package/lib/types/src/create-maker.d.ts.map +1 -0
  100. package/lib/types/src/create-price-oracle.d.ts +2 -0
  101. package/lib/types/src/create-price-oracle.d.ts.map +1 -0
  102. package/lib/types/src/create-subdao.d.ts +2 -0
  103. package/lib/types/src/create-subdao.d.ts.map +1 -0
  104. package/lib/types/src/distribute-hst.d.ts +2 -0
  105. package/lib/types/src/distribute-hst.d.ts.map +1 -0
  106. package/lib/types/src/ecc-gen.d.ts +2 -0
  107. package/lib/types/src/ecc-gen.d.ts.map +1 -0
  108. package/lib/types/src/end-epoch.d.ts +2 -0
  109. package/lib/types/src/end-epoch.d.ts.map +1 -0
  110. package/lib/types/src/log-hotspot.d.ts +2 -0
  111. package/lib/types/src/log-hotspot.d.ts.map +1 -0
  112. package/lib/types/src/mint-dc.d.ts +2 -0
  113. package/lib/types/src/mint-dc.d.ts.map +1 -0
  114. package/lib/types/src/reset-clockwork.d.ts +2 -0
  115. package/lib/types/src/reset-clockwork.d.ts.map +1 -0
  116. package/lib/types/src/reset-vsr-max-voter-record.d.ts +2 -0
  117. package/lib/types/src/reset-vsr-max-voter-record.d.ts.map +1 -0
  118. package/lib/types/src/reset-vsr-voting-mint.d.ts +2 -0
  119. package/lib/types/src/reset-vsr-voting-mint.d.ts.map +1 -0
  120. package/lib/types/src/setup-hst.d.ts +4 -0
  121. package/lib/types/src/setup-hst.d.ts.map +1 -0
  122. package/lib/types/src/submit-price.d.ts +2 -0
  123. package/lib/types/src/submit-price.d.ts.map +1 -0
  124. package/lib/types/src/update-account-circuit-breaker.d.ts +2 -0
  125. package/lib/types/src/update-account-circuit-breaker.d.ts.map +1 -0
  126. package/lib/types/src/update-dao.d.ts +2 -0
  127. package/lib/types/src/update-dao.d.ts.map +1 -0
  128. package/lib/types/src/update-mint-circuit-breaker.d.ts +2 -0
  129. package/lib/types/src/update-mint-circuit-breaker.d.ts.map +1 -0
  130. package/lib/types/src/update-rewardable-entity-config.d.ts +2 -0
  131. package/lib/types/src/update-rewardable-entity-config.d.ts.map +1 -0
  132. package/lib/types/src/update-subdao.d.ts +2 -0
  133. package/lib/types/src/update-subdao.d.ts.map +1 -0
  134. package/lib/types/src/utils.d.ts +55 -0
  135. package/lib/types/src/utils.d.ts.map +1 -0
  136. package/package.json +77 -0
@@ -0,0 +1,55 @@
1
+ import * as client from "@helium/distributor-oracle";
2
+ import { getCurrentRewards } from "@helium/distributor-oracle";
3
+ import { init as initDao, subDaoKey } from "@helium/helium-sub-daos-sdk";
4
+ import { PROGRAM_ID } from "@helium/helium-entity-manager-sdk";
5
+ import { init as initLazy, lazyDistributorKey } from "@helium/lazy-distributor-sdk";
6
+ import { sendAndConfirmWithRetry } from "@helium/spl-utils";
7
+ import Address from "@helium/address";
8
+ import * as anchor from "@coral-xyz/anchor";
9
+ import { PublicKey } from "@solana/web3.js";
10
+ import os from "os";
11
+ import yargs from "yargs/yargs";
12
+ import { loadKeypair } from "./utils";
13
+ export async function run(args = process.argv) {
14
+ const argv = await yargs(args).options({
15
+ wallet: {
16
+ alias: "k",
17
+ describe: "Anchor wallet keypair",
18
+ default: `${os.homedir()}/.config/solana/id.json`,
19
+ },
20
+ url: {
21
+ alias: "u",
22
+ default: "http://127.0.0.1:8899",
23
+ describe: "The solana url",
24
+ },
25
+ mobileKeypair: {
26
+ type: "string",
27
+ describe: "Keypair of the Mobile token",
28
+ default: "./keypairs/mobile.json",
29
+ },
30
+ }).argv;
31
+ process.env.ANCHOR_WALLET = argv.wallet;
32
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
33
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
34
+ const provider = anchor.getProvider();
35
+ const heliumSubDaosProgram = await initDao(provider);
36
+ const lazyDistributorProgram = await initLazy(provider);
37
+ const mobileKeypair = await loadKeypair(argv.mobileKeypair);
38
+ const mobileSubdao = (await subDaoKey(mobileKeypair.publicKey))[0];
39
+ const hotspotEcc = "11wsqKcoXGesnSbEwKTY8QkoqdFsG7oafcyPn8jBnzRK4sfCSw8";
40
+ const eccCompact = Address.fromB58(hotspotEcc).publicKey;
41
+ const mobileSubdaoAcc = await heliumSubDaosProgram.account.subDaoV0.fetch(mobileSubdao);
42
+ const [lazyDistributor] = await lazyDistributorKey(mobileSubdaoAcc.dntMint);
43
+ const [hotspot] = await PublicKey.findProgramAddressSync([Buffer.from("hotspot", "utf-8"), eccCompact], PROGRAM_ID);
44
+ const rewards = await getCurrentRewards(lazyDistributorProgram, lazyDistributor, hotspot);
45
+ const tx = await client.formTransaction({
46
+ program: lazyDistributorProgram,
47
+ provider,
48
+ rewards,
49
+ hotspot,
50
+ lazyDistributor,
51
+ });
52
+ const signed = await provider.wallet.signTransaction(tx);
53
+ await sendAndConfirmWithRetry(provider.connection, signed.serialize(), { skipPreflight: true }, "confirmed");
54
+ }
55
+ //# sourceMappingURL=cli-distribute-rewards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-distribute-rewards.js","sourceRoot":"","sources":["../../../src/cli-distribute-rewards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { PublicKey } from "@solana/web3.js";
3
+ import os from "os";
4
+ import yargs from "yargs/yargs";
5
+ import { createSwitchboardAggregator } from "./utils";
6
+ import { loadKeypair } from "./utils";
7
+ export async function run(args = process.argv) {
8
+ const yarg = yargs(args).options({
9
+ wallet: {
10
+ alias: "k",
11
+ describe: "Anchor wallet keypair",
12
+ default: `${os.homedir()}/.config/solana/id.json`,
13
+ },
14
+ url: {
15
+ alias: "u",
16
+ default: "http://127.0.0.1:8899",
17
+ describe: "The solana url",
18
+ },
19
+ executeTransaction: {
20
+ type: "boolean",
21
+ },
22
+ aggregatorKeypair: {
23
+ type: "string",
24
+ describe: "Keypair of the aggregtor",
25
+ },
26
+ activeDeviceOracleUrl: {
27
+ alias: "ao",
28
+ type: "string",
29
+ describe: "The active device oracle URL",
30
+ default: "http://localhost:8081",
31
+ },
32
+ queue: {
33
+ type: "string",
34
+ describe: "Switchbaord oracle queue",
35
+ default: "F8ce7MsckeZAbAGmxjJNetxYXQa9mKr9nnrC3qKubyYy",
36
+ },
37
+ crank: {
38
+ type: "string",
39
+ describe: "Switchboard crank",
40
+ default: "GN9jjCy2THzZxhYqZETmPM3my8vg4R5JyNkgULddUMa5",
41
+ },
42
+ switchboardNetwork: {
43
+ type: "string",
44
+ describe: "The switchboard network",
45
+ default: "devnet",
46
+ },
47
+ authority: {
48
+ type: "string",
49
+ },
50
+ });
51
+ const argv = await yarg.argv;
52
+ console.log(argv.url);
53
+ process.env.ANCHOR_WALLET = argv.wallet;
54
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
55
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
56
+ const provider = anchor.getProvider();
57
+ const wallet = loadKeypair(argv.wallet);
58
+ const aggKeypair = await loadKeypair(argv.aggregatorKeypair);
59
+ console.log("Initializing switchboard oracle");
60
+ await createSwitchboardAggregator({
61
+ crank: new PublicKey(argv.crank),
62
+ queue: new PublicKey(argv.queue),
63
+ wallet,
64
+ provider,
65
+ aggKeypair,
66
+ url: argv.activeDeviceOracleUrl,
67
+ switchboardNetwork: argv.switchboardNetwork,
68
+ authority: argv.authority ? new PublicKey(argv.authority) : wallet.publicKey,
69
+ });
70
+ }
71
+ //# sourceMappingURL=create-active-device-aggregator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-active-device-aggregator.js","sourceRoot":"","sources":["../../../src/create-active-device-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAY,OAAO,CAAC,IAAI;IAChD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QAC/B,MAAM,EAAE;YACN,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,uBAAuB;YACjC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,yBAAyB;SAClD;QACD,GAAG,EAAE;YACH,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,uBAAuB;YAChC,QAAQ,EAAE,gBAAgB;SAC3B;QACD,kBAAkB,EAAE;YAClB,IAAI,EAAE,SAAS;SAChB;QACD,iBAAiB,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,0BAA0B;SACrC;QACD,qBAAqB,EAAE;YACrB,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,8BAA8B;YACxC,OAAO,EAAE,uBAAuB;SACjC;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,0BAA0B;YACpC,OAAO,EAAE,8CAA8C;SACxD;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,8CAA8C;SACxD;QACD,kBAAkB,EAAE;YAClB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,yBAAyB;YACnC,OAAO,EAAE,QAAQ;SAClB;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;SACf;KACF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAA2B,CAAC;IAE/D,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,MAAM,2BAA2B,CAAC;QAChC,KAAK,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,KAAK,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,MAAM;QACN,QAAQ;QACR,UAAU;QACV,GAAG,EAAE,IAAI,CAAC,qBAAqB;QAC/B,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS;KAC7E,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,341 @@
1
+ import * as anchor from "@coral-xyz/anchor";
2
+ import { ThresholdType } from "@helium/circuit-breaker-sdk";
3
+ import { dataCreditsKey, init as initDc, PROGRAM_ID, accountPayerKey, } from "@helium/data-credits-sdk";
4
+ import { fanoutKey } from "@helium/fanout-sdk";
5
+ import { daoKey, init as initDao, threadKey, } from "@helium/helium-sub-daos-sdk";
6
+ import { sendInstructions, toBN } from "@helium/spl-utils";
7
+ import { init as initVsr, registrarKey, } from "@helium/voter-stake-registry-sdk";
8
+ import { getGovernanceProgramVersion, GoverningTokenConfigAccountArgs, GoverningTokenType, MintMaxVoteWeightSource, SetRealmAuthorityAction, withCreateRealm, withSetRealmAuthority, } from "@solana/spl-governance";
9
+ import { getAssociatedTokenAddressSync } from "@solana/spl-token";
10
+ import { ComputeBudgetProgram, LAMPORTS_PER_SOL, PublicKey, SystemProgram, Transaction, } from "@solana/web3.js";
11
+ import Squads from "@sqds/sdk";
12
+ import os from "os";
13
+ import yargs from "yargs/yargs";
14
+ import { createAndMint, getTimestampFromDays, getUnixTimestamp, isLocalhost, loadKeypair, parseEmissionsSchedule, sendInstructionsOrSquads, } from "./utils";
15
+ const { hideBin } = require("yargs/helpers");
16
+ const HNT_EPOCH_REWARDS = 10000000000;
17
+ const SECS_PER_DAY = 86400;
18
+ const SECS_PER_YEAR = 365 * SECS_PER_DAY;
19
+ const MAX_LOCKUP = 4 * SECS_PER_YEAR;
20
+ const BASELINE = 0;
21
+ const SCALE = 100;
22
+ const GENESIS_MULTIPLIER = 3;
23
+ async function exists(connection, account) {
24
+ return Boolean(await connection.getAccountInfo(account));
25
+ }
26
+ export async function run(args = process.argv) {
27
+ const yarg = yargs(args).options({
28
+ wallet: {
29
+ alias: "k",
30
+ describe: "Anchor wallet keypair",
31
+ default: `${os.homedir()}/.config/solana/id.json`,
32
+ },
33
+ url: {
34
+ alias: "u",
35
+ default: "http://127.0.0.1:8899",
36
+ describe: "The solana url",
37
+ },
38
+ hntKeypair: {
39
+ type: "string",
40
+ describe: "Keypair of the HNT token",
41
+ default: `${__dirname}/../keypairs/hnt.json`,
42
+ },
43
+ dcKeypair: {
44
+ type: "string",
45
+ describe: "Keypair of the Data Credit token",
46
+ default: `${__dirname}/../keypairs/dc.json`,
47
+ },
48
+ numHnt: {
49
+ type: "number",
50
+ describe: "Number of HNT tokens to pre mint before assigning authority to lazy distributor",
51
+ default: 0,
52
+ },
53
+ numDc: {
54
+ type: "number",
55
+ describe: "Number of DC tokens to pre mint before assigning authority to lazy distributor",
56
+ default: 1000,
57
+ },
58
+ bucket: {
59
+ type: "string",
60
+ describe: "Bucket URL prefix holding all of the metadata jsons",
61
+ default: "https://shdw-drive.genesysgo.net/CsDkETHRRR1EcueeN346MJoqzymkkr7RFjMqGpZMzAib",
62
+ },
63
+ emissionSchedulePath: {
64
+ required: true,
65
+ describe: "Path to file that contains the hnt emissions schedule",
66
+ type: "string",
67
+ default: `${__dirname}/../emissions/hnt.json`,
68
+ },
69
+ hstEmissionSchedulePath: {
70
+ required: true,
71
+ describe: "Path to file that contains the hst emissions schedule",
72
+ type: "string",
73
+ default: `${__dirname}/../emissions/hst.json`,
74
+ },
75
+ govProgramId: {
76
+ type: "string",
77
+ describe: "Pubkey of the GOV program",
78
+ default: "hgovkRU6Ghe1Qoyb54HdSLdqN7VtxaifBzRmh9jtd3S",
79
+ },
80
+ realmName: {
81
+ type: "string",
82
+ describe: "Name of the realm to be generated",
83
+ default: "Helium",
84
+ },
85
+ councilKeypair: {
86
+ type: "string",
87
+ describe: "Keypair of gov council token",
88
+ default: `${__dirname}/../keypairs/council.json`,
89
+ },
90
+ councilWallet: {
91
+ type: "string",
92
+ describe: "Pubkey for holding/distributing council tokens",
93
+ default: await loadKeypair(`${os.homedir()}/.config/solana/id.json`).publicKey.toBase58(),
94
+ },
95
+ numCouncil: {
96
+ type: "number",
97
+ describe: "Number of Gov Council tokens to pre mint before assigning authority to dao",
98
+ default: 10,
99
+ },
100
+ multisig: {
101
+ type: "string",
102
+ describe: "Address of the squads multisig to control the dao. If not provided, your wallet will be the authority",
103
+ },
104
+ authorityIndex: {
105
+ type: "number",
106
+ describe: "Authority index for squads. Defaults to 1",
107
+ default: 1,
108
+ },
109
+ pythHntPriceFeed: {
110
+ type: "string",
111
+ default: "7moA1i5vQUpfDwSpK6Pw9s56ahB7WFGidtbL2ujWrVvm",
112
+ },
113
+ hstKeypair: {
114
+ type: "string",
115
+ describe: "Keypair of the HST token",
116
+ default: `${__dirname}/../keypairs/hst.json`,
117
+ },
118
+ numHst: {
119
+ type: "number",
120
+ describe: "Number of HST tokens to pre mint before assigning authority to lazy distributor",
121
+ default: 0,
122
+ },
123
+ });
124
+ const argv = await yarg.argv;
125
+ process.env.ANCHOR_WALLET = argv.wallet;
126
+ process.env.ANCHOR_PROVIDER_URL = argv.url;
127
+ anchor.setProvider(anchor.AnchorProvider.local(argv.url));
128
+ const provider = anchor.getProvider();
129
+ const dataCreditsProgram = await initDc(provider);
130
+ const heliumSubDaosProgram = await initDao(provider);
131
+ const heliumVsrProgram = await initVsr(provider);
132
+ const govProgramId = new PublicKey(argv.govProgramId);
133
+ const councilKeypair = await loadKeypair(argv.councilKeypair);
134
+ const councilWallet = new PublicKey(argv.councilWallet);
135
+ const hntKeypair = loadKeypair(argv.hntKeypair);
136
+ const dcKeypair = loadKeypair(argv.dcKeypair);
137
+ const hstKeypair = loadKeypair(argv.hstKeypair);
138
+ const me = provider.wallet.publicKey;
139
+ const dao = daoKey(hntKeypair.publicKey)[0];
140
+ console.log("HNT", hntKeypair.publicKey.toBase58());
141
+ console.log("DC", dcKeypair.publicKey.toBase58());
142
+ console.log("GOV PID", govProgramId.toBase58());
143
+ console.log("COUNCIL", councilKeypair.publicKey.toBase58());
144
+ console.log("COUNCIL WALLET", councilWallet.toBase58());
145
+ const thread = threadKey(dao, "issue_hst")[0];
146
+ console.log("DAO", dao.toString());
147
+ console.log("THREAD", thread.toString());
148
+ const conn = provider.connection;
149
+ const squads = Squads.endpoint(process.env.ANCHOR_PROVIDER_URL, provider.wallet);
150
+ let authority = provider.wallet.publicKey;
151
+ let multisig = argv.multisig ? new PublicKey(argv.multisig) : null;
152
+ if (multisig) {
153
+ authority = squads.getAuthorityPDA(multisig, argv.authorityIndex);
154
+ }
155
+ await createAndMint({
156
+ provider,
157
+ mintKeypair: hntKeypair,
158
+ amount: argv.numHnt,
159
+ metadataUrl: `${argv.bucket}/hnt.json`,
160
+ });
161
+ await createAndMint({
162
+ provider,
163
+ mintKeypair: dcKeypair,
164
+ amount: argv.numDc,
165
+ decimals: 0,
166
+ metadataUrl: `${argv.bucket}/dc.json`,
167
+ });
168
+ await createAndMint({
169
+ provider,
170
+ mintKeypair: councilKeypair,
171
+ amount: argv.numCouncil,
172
+ decimals: 0,
173
+ metadataUrl: `${argv.bucket}/council.json`,
174
+ to: councilWallet,
175
+ });
176
+ await createAndMint({
177
+ provider,
178
+ mintKeypair: hstKeypair,
179
+ amount: argv.numHst,
180
+ metadataUrl: `${argv.bucket}/hst.json`,
181
+ });
182
+ let instructions = [];
183
+ const govProgramVersion = await getGovernanceProgramVersion(conn, govProgramId, isLocalhost(provider) ? "localnet" : undefined);
184
+ const realmName = argv.realmName;
185
+ const realm = await PublicKey.findProgramAddressSync([Buffer.from("governance", "utf-8"), Buffer.from(realmName, "utf-8")], govProgramId)[0];
186
+ console.log("Realm, ", realm.toBase58());
187
+ if (!(await exists(conn, realm))) {
188
+ console.log("Initializing Realm");
189
+ await withCreateRealm(instructions, govProgramId, govProgramVersion, realmName, provider.wallet.publicKey, // realmAuthorityPk
190
+ hntKeypair.publicKey, // communityMintPk
191
+ provider.wallet.publicKey, // payer
192
+ councilKeypair.publicKey, // councilMintPk
193
+ MintMaxVoteWeightSource.FULL_SUPPLY_FRACTION, new anchor.BN(100000000000000), // TODO: 1mm vehnt to create governance
194
+ new GoverningTokenConfigAccountArgs({
195
+ // community token config
196
+ voterWeightAddin: heliumVsrProgram.programId,
197
+ maxVoterWeightAddin: heliumVsrProgram.programId,
198
+ tokenType: GoverningTokenType.Liquid,
199
+ }), new GoverningTokenConfigAccountArgs({
200
+ // council token config
201
+ voterWeightAddin: undefined,
202
+ maxVoterWeightAddin: undefined,
203
+ tokenType: GoverningTokenType.Liquid,
204
+ }));
205
+ await sendInstructions(provider, instructions, []);
206
+ instructions = [];
207
+ }
208
+ const registrar = (await registrarKey(realm, hntKeypair.publicKey))[0];
209
+ if (!(await exists(conn, registrar))) {
210
+ console.log("Initializing VSR Registrar");
211
+ instructions.push(await heliumVsrProgram.methods
212
+ .initializeRegistrarV0({
213
+ positionUpdateAuthority: (await daoKey(hntKeypair.publicKey))[0],
214
+ })
215
+ .preInstructions([
216
+ ComputeBudgetProgram.setComputeUnitLimit({ units: 500000 }),
217
+ ])
218
+ .accounts({
219
+ realm,
220
+ realmGoverningTokenMint: hntKeypair.publicKey,
221
+ })
222
+ .instruction());
223
+ await sendInstructions(provider, instructions, []);
224
+ instructions = [];
225
+ }
226
+ console.log("Configuring VSR voting mint at [0]");
227
+ instructions.push(await heliumVsrProgram.methods
228
+ .configureVotingMintV0({
229
+ idx: 0,
230
+ digitShift: 0,
231
+ baselineVoteWeightScaledFactor: new anchor.BN(BASELINE * 1e9),
232
+ maxExtraLockupVoteWeightScaledFactor: new anchor.BN(SCALE * 1e9),
233
+ genesisVotePowerMultiplier: GENESIS_MULTIPLIER,
234
+ genesisVotePowerMultiplierExpirationTs: new anchor.BN(Number(await getUnixTimestamp(provider)) + getTimestampFromDays(7)),
235
+ lockupSaturationSecs: new anchor.BN(MAX_LOCKUP),
236
+ })
237
+ .accounts({
238
+ registrar,
239
+ mint: hntKeypair.publicKey,
240
+ })
241
+ .remainingAccounts([
242
+ {
243
+ pubkey: hntKeypair.publicKey,
244
+ isSigner: false,
245
+ isWritable: false,
246
+ },
247
+ ])
248
+ .instruction());
249
+ await sendInstructions(provider, instructions, []);
250
+ instructions = [];
251
+ console.log("Creating max voter record");
252
+ instructions.push(await heliumVsrProgram.methods
253
+ .updateMaxVoterWeightV0()
254
+ .accounts({
255
+ registrar,
256
+ realmGoverningTokenMint: hntKeypair.publicKey,
257
+ })
258
+ .instruction());
259
+ console.log(registrar.toString());
260
+ await sendInstructions(provider, instructions, []);
261
+ instructions = [];
262
+ if (!authority.equals(me)) {
263
+ withSetRealmAuthority(instructions, govProgramId, govProgramVersion, realm, provider.wallet.publicKey, authority, SetRealmAuthorityAction.SetChecked);
264
+ }
265
+ await sendInstructions(provider, instructions, []);
266
+ instructions = [];
267
+ const dcKey = (await dataCreditsKey(dcKeypair.publicKey))[0];
268
+ console.log("dcpid", PROGRAM_ID.toBase58());
269
+ if (!(await exists(conn, dcKey))) {
270
+ await dataCreditsProgram.methods
271
+ .initializeDataCreditsV0({
272
+ authority,
273
+ config: {
274
+ windowSizeSeconds: new anchor.BN(60 * 60),
275
+ thresholdType: ThresholdType.Absolute,
276
+ threshold: new anchor.BN("1000000000000"),
277
+ },
278
+ })
279
+ .accounts({
280
+ hntMint: hntKeypair.publicKey,
281
+ dcMint: dcKeypair.publicKey,
282
+ hntPriceOracle: new PublicKey(argv.pythHntPriceFeed),
283
+ })
284
+ .rpc({ skipPreflight: true });
285
+ let tx = new Transaction();
286
+ tx.add(SystemProgram.transfer({
287
+ fromPubkey: provider.wallet.publicKey,
288
+ toPubkey: accountPayerKey()[0],
289
+ lamports: 5 * LAMPORTS_PER_SOL,
290
+ }));
291
+ tx.recentBlockhash = (await provider.connection.getLatestBlockhash()).blockhash;
292
+ tx.feePayer = provider.wallet.publicKey;
293
+ }
294
+ if (!(await exists(conn, dao))) {
295
+ console.log("Initializing DAO");
296
+ const hstEmission = await parseEmissionsSchedule(argv.hstEmissionSchedulePath);
297
+ const hntEmission = await parseEmissionsSchedule(argv.emissionSchedulePath);
298
+ const currentHstEmission = hstEmission[0];
299
+ const currentHntEmission = hntEmission[0];
300
+ await heliumSubDaosProgram.methods
301
+ .initializeDaoV0({
302
+ registrar: registrar,
303
+ authority,
304
+ netEmissionsCap: toBN(34.24, 8),
305
+ // Tx too large to do in initialize dao, so do it with update
306
+ hstEmissionSchedule: [currentHstEmission],
307
+ emissionSchedule: [currentHntEmission],
308
+ })
309
+ .accounts({
310
+ dcMint: dcKeypair.publicKey,
311
+ hntMint: hntKeypair.publicKey,
312
+ thread,
313
+ // TODO: Create actual HST pool
314
+ hstPool: getAssociatedTokenAddressSync(hntKeypair.publicKey, fanoutKey("HST")[0], true),
315
+ })
316
+ .rpc({ skipPreflight: true });
317
+ await sendInstructionsOrSquads({
318
+ provider,
319
+ instructions: [
320
+ await heliumSubDaosProgram.methods
321
+ .updateDaoV0({
322
+ authority,
323
+ emissionSchedule: hntEmission,
324
+ hstEmissionSchedule: hstEmission,
325
+ hstPool: null
326
+ })
327
+ .accounts({
328
+ dao,
329
+ authority: authority,
330
+ })
331
+ .instruction(),
332
+ ],
333
+ executeTransaction: true,
334
+ squads,
335
+ multisig: argv.multisig ? new PublicKey(argv.multisig) : undefined,
336
+ authorityIndex: argv.authorityIndex,
337
+ signers: [],
338
+ });
339
+ }
340
+ }
341
+ //# sourceMappingURL=create-dao.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-dao.js","sourceRoot":"","sources":["../../../src/create-dao.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,cAAc,EACd,IAAI,IAAI,MAAM,EACd,UAAU,EACV,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,MAAM,EACN,IAAI,IAAI,OAAO,EACf,SAAS,GACV,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EACL,IAAI,IAAI,OAAO,EACf,YAAY,GACb,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAA6B,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EACL,oBAAoB,EAEpB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,WAAW,GAEZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,aAAa,CAAC;AAChC,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,SAAS,CAAC;AAEjB,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAE7C,MAAM,iBAAiB,GAAG,WAAW,CAAC;AACtC,MAAM,YAAY,GAAG,KAAK,CAAC;AAC3B,MAAM,aAAa,GAAG,GAAG,GAAG,YAAY,CAAC;AACzC,MAAM,UAAU,GAAG,CAAC,GAAG,aAAa,CAAC;AACrC,MAAM,QAAQ,GAAG,CAAC,CAAC;AACnB,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,KAAK,UAAU,MAAM,CACnB,UAAsB,EACtB,OAAkB;IAElB,OAAO,OAAO,CAAC,MAAM,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAY,OAAO,CAAC,IAAI;IAChD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;QAC/B,MAAM,EAAE;YACN,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,uBAAuB;YACjC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,yBAAyB;SAClD;QACD,GAAG,EAAE;YACH,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,uBAAuB;YAChC,QAAQ,EAAE,gBAAgB;SAC3B;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,0BAA0B;YACpC,OAAO,EAAE,GAAG,SAAS,uBAAuB;SAC7C;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,kCAAkC;YAC5C,OAAO,EAAE,GAAG,SAAS,sBAAsB;SAC5C;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,iFAAiF;YACnF,OAAO,EAAE,CAAC;SACX;QACD,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,gFAAgF;YAClF,OAAO,EAAE,IAAI;SACd;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,qDAAqD;YAC/D,OAAO,EACL,+EAA+E;SAClF;QACD,oBAAoB,EAAE;YACpB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,uDAAuD;YACjE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,GAAG,SAAS,wBAAwB;SAC9C;QACD,uBAAuB,EAAE;YACvB,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,uDAAuD;YACjE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,GAAG,SAAS,wBAAwB;SAC9C;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,2BAA2B;YACrC,OAAO,EAAE,6CAA6C;SACvD;QACD,SAAS,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,mCAAmC;YAC7C,OAAO,EAAE,QAAQ;SAClB;QACD,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,8BAA8B;YACxC,OAAO,EAAE,GAAG,SAAS,2BAA2B;SACjD;QACD,aAAa,EAAE;YACb,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,gDAAgD;YAC1D,OAAO,EAAE,MAAM,WAAW,CACxB,GAAG,EAAE,CAAC,OAAO,EAAE,yBAAyB,CACzC,CAAC,SAAS,CAAC,QAAQ,EAAE;SACvB;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,4EAA4E;YAC9E,OAAO,EAAE,EAAE;SACZ;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,uGAAuG;SAC1G;QACD,cAAc,EAAE;YACd,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,2CAA2C;YACrD,OAAO,EAAE,CAAC;SACX;QACD,gBAAgB,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,8CAA8C;SACxD;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,0BAA0B;YACpC,OAAO,EAAE,GAAG,SAAS,uBAAuB;SAC7C;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,QAAQ,EACN,iFAAiF;YACnF,OAAO,EAAE,CAAC;SACX;KACF,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC;IAC3C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE1D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAA2B,CAAC;IAC/D,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,oBAAoB,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjD,MAAM,YAAY,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEzC,MAAM,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC;IAEjC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAC5B,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAC/B,QAAQ,CAAC,MAAM,CAChB,CAAC;IACF,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;IAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnE,IAAI,QAAQ,EAAE;QACZ,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;KACnE;IAED,MAAM,aAAa,CAAC;QAClB,QAAQ;QACR,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,WAAW;KACvC,CAAC,CAAC;IAEH,MAAM,aAAa,CAAC;QAClB,QAAQ;QACR,WAAW,EAAE,SAAS;QACtB,MAAM,EAAE,IAAI,CAAC,KAAK;QAClB,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,UAAU;KACtC,CAAC,CAAC;IAEH,MAAM,aAAa,CAAC;QAClB,QAAQ;QACR,WAAW,EAAE,cAAc;QAC3B,MAAM,EAAE,IAAI,CAAC,UAAU;QACvB,QAAQ,EAAE,CAAC;QACX,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,eAAe;QAC1C,EAAE,EAAE,aAAa;KAClB,CAAC,CAAC;IAEH,MAAM,aAAa,CAAC;QAClB,QAAQ;QACR,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,WAAW;KACvC,CAAC,CAAC;IAGH,IAAI,YAAY,GAA6B,EAAE,CAAC;IAChD,MAAM,iBAAiB,GAAG,MAAM,2BAA2B,CACzD,IAAI,EACJ,YAAY,EACZ,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAC/C,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,sBAAsB,CAClD,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,EACrE,YAAY,CACb,CAAC,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;QAChC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAClC,MAAM,eAAe,CACnB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,SAAS,EACT,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB;QAC9C,UAAU,CAAC,SAAS,EAAE,kBAAkB;QACxC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ;QACnC,cAAc,CAAC,SAAS,EAAE,gBAAgB;QAC1C,uBAAuB,CAAC,oBAAoB,EAC5C,IAAI,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,uCAAuC;QACvE,IAAI,+BAA+B,CAAC;YAClC,yBAAyB;YACzB,gBAAgB,EAAE,gBAAgB,CAAC,SAAS;YAC5C,mBAAmB,EAAE,gBAAgB,CAAC,SAAS;YAC/C,SAAS,EAAE,kBAAkB,CAAC,MAAM;SACrC,CAAC,EACF,IAAI,+BAA+B,CAAC;YAClC,uBAAuB;YACvB,gBAAgB,EAAE,SAAS;YAC3B,mBAAmB,EAAE,SAAS;YAC9B,SAAS,EAAE,kBAAkB,CAAC,MAAM;SACrC,CAAC,CACH,CAAC;QACF,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QACnD,YAAY,GAAG,EAAE,CAAC;KACnB;IAED,MAAM,SAAS,GAAG,CAAC,MAAM,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE;QACpC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,YAAY,CAAC,IAAI,CACf,MAAM,gBAAgB,CAAC,OAAO;aAC3B,qBAAqB,CAAC;YACrB,uBAAuB,EAAE,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACjE,CAAC;aACD,eAAe,CAAC;YACf,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SAC5D,CAAC;aACD,QAAQ,CAAC;YACR,KAAK;YACL,uBAAuB,EAAE,UAAU,CAAC,SAAS;SAC9C,CAAC;aACD,WAAW,EAAE,CACjB,CAAC;QACF,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;QACnD,YAAY,GAAG,EAAE,CAAC;KACnB;IAED,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,YAAY,CAAC,IAAI,CACf,MAAM,gBAAgB,CAAC,OAAO;SAC3B,qBAAqB,CAAC;QACrB,GAAG,EAAE,CAAC;QACN,UAAU,EAAE,CAAC;QACb,8BAA8B,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC7D,oCAAoC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC;QAChE,0BAA0B,EAAE,kBAAkB;QAC9C,sCAAsC,EAAE,IAAI,MAAM,CAAC,EAAE,CACnD,MAAM,CAAC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CACnE;QACD,oBAAoB,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC;KAChD,CAAC;SACD,QAAQ,CAAC;QACR,SAAS;QACT,IAAI,EAAE,UAAU,CAAC,SAAS;KAC3B,CAAC;SACD,iBAAiB,CAAC;QACjB;YACE,MAAM,EAAE,UAAU,CAAC,SAAS;YAC5B,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;SAClB;KACF,CAAC;SACD,WAAW,EAAE,CACjB,CAAC;IACF,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IACnD,YAAY,GAAG,EAAE,CAAC;IAElB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,YAAY,CAAC,IAAI,CACf,MAAM,gBAAgB,CAAC,OAAO;SAC3B,sBAAsB,EAAE;SACxB,QAAQ,CAAC;QACR,SAAS;QACT,uBAAuB,EAAE,UAAU,CAAC,SAAS;KAC9C,CAAC;SACD,WAAW,EAAE,CACjB,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClC,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IACnD,YAAY,GAAG,EAAE,CAAC;IAElB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;QACzB,qBAAqB,CACnB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,KAAK,EACL,QAAQ,CAAC,MAAM,CAAC,SAAS,EACzB,SAAS,EACT,uBAAuB,CAAC,UAAU,CACnC,CAAC;KACH;IACD,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IACnD,YAAY,GAAG,EAAE,CAAC;IAElB,MAAM,KAAK,GAAG,CAAC,MAAM,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;QAChC,MAAM,kBAAkB,CAAC,OAAO;aAC7B,uBAAuB,CAAC;YACvB,SAAS;YACT,MAAM,EAAE;gBACN,iBAAiB,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;gBACzC,aAAa,EAAE,aAAa,CAAC,QAAiB;gBAC9C,SAAS,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC;aAC1C;SACF,CAAC;aACD,QAAQ,CAAC;YACR,OAAO,EAAE,UAAU,CAAC,SAAS;YAC7B,MAAM,EAAE,SAAS,CAAC,SAAS;YAC3B,cAAc,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC;SACrD,CAAC;aACD,GAAG,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhC,IAAI,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC;QAC3B,EAAE,CAAC,GAAG,CACJ,aAAa,CAAC,QAAQ,CAAC;YACrB,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS;YACrC,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC;YAC9B,QAAQ,EAAE,CAAC,GAAG,gBAAgB;SAC/B,CAAC,CACH,CAAC;QACF,EAAE,CAAC,eAAe,GAAG,CACnB,MAAM,QAAQ,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAC/C,CAAC,SAAS,CAAC;QACZ,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;KACzC;IAED,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;QAC9B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAC9C,IAAI,CAAC,uBAAuB,CAC7B,CAAC;QACF,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAC9C,IAAI,CAAC,oBAAoB,CAC1B,CAAC;QACF,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM,oBAAoB,CAAC,OAAO;aAC/B,eAAe,CAAC;YACf,SAAS,EAAE,SAAS;YACpB,SAAS;YACT,eAAe,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/B,6DAA6D;YAC7D,mBAAmB,EAAE,CAAC,kBAAkB,CAAC;YACzC,gBAAgB,EAAE,CAAC,kBAAkB,CAAC;SACvC,CAAC;aACD,QAAQ,CAAC;YACR,MAAM,EAAE,SAAS,CAAC,SAAS;YAC3B,OAAO,EAAE,UAAU,CAAC,SAAS;YAC7B,MAAM;YACN,+BAA+B;YAC/B,OAAO,EAAE,6BAA6B,CACpC,UAAU,CAAC,SAAS,EACpB,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACnB,IAAI,CACL;SACF,CAAC;aACD,GAAG,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhC,MAAM,wBAAwB,CAAC;YAC7B,QAAQ;YACR,YAAY,EAAE;gBACZ,MAAM,oBAAoB,CAAC,OAAO;qBAC/B,WAAW,CAAC;oBACX,SAAS;oBACT,gBAAgB,EAAE,WAAW;oBAC7B,mBAAmB,EAAE,WAAW;oBAChC,OAAO,EAAE,IAAI;iBACd,CAAC;qBACD,QAAQ,CAAC;oBACR,GAAG;oBACH,SAAS,EAAE,SAAS;iBACrB,CAAC;qBACD,WAAW,EAAE;aACjB;YACD,kBAAkB,EAAE,IAAI;YACxB,MAAM;YACN,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YAClE,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;KACJ;AACH,CAAC"}