@certik/skynet 0.20.2 → 0.22.0

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 (91) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/abi.ts +2 -4
  3. package/api.ts +7 -7
  4. package/app.ts +6 -12
  5. package/availability.ts +37 -7
  6. package/bun.lockb +0 -0
  7. package/const.ts +1 -1
  8. package/date.ts +1 -1
  9. package/deploy.ts +4 -4
  10. package/dist/abi.d.ts +112 -0
  11. package/dist/abi.d.ts.map +1 -0
  12. package/dist/abi.js +616 -0
  13. package/dist/address.d.ts +3 -0
  14. package/dist/address.d.ts.map +1 -0
  15. package/dist/address.js +69 -0
  16. package/dist/api.d.ts +32 -0
  17. package/dist/api.d.ts.map +1 -0
  18. package/dist/api.js +35174 -0
  19. package/dist/app.d.ts +102 -0
  20. package/dist/app.d.ts.map +1 -0
  21. package/dist/app.js +71714 -0
  22. package/dist/availability.d.ts +24 -0
  23. package/dist/availability.d.ts.map +1 -0
  24. package/dist/availability.js +926 -0
  25. package/dist/cli.d.ts +6 -0
  26. package/dist/cli.d.ts.map +1 -0
  27. package/dist/cli.js +86 -0
  28. package/dist/const.d.ts +35 -0
  29. package/dist/const.d.ts.map +1 -0
  30. package/dist/const.js +207 -0
  31. package/dist/databricks.d.ts +4 -0
  32. package/dist/databricks.d.ts.map +1 -0
  33. package/dist/databricks.js +84920 -0
  34. package/dist/date.d.ts +6 -0
  35. package/dist/date.d.ts.map +1 -0
  36. package/dist/date.js +101 -0
  37. package/dist/deploy.d.ts +76 -0
  38. package/dist/deploy.d.ts.map +1 -0
  39. package/dist/deploy.js +17506 -0
  40. package/dist/dynamodb.d.ts +17 -0
  41. package/dist/dynamodb.d.ts.map +1 -0
  42. package/dist/dynamodb.js +27365 -0
  43. package/dist/env.d.ts +7 -0
  44. package/dist/env.d.ts.map +1 -0
  45. package/dist/env.js +71 -0
  46. package/dist/graphql.d.ts +6 -0
  47. package/dist/graphql.d.ts.map +1 -0
  48. package/dist/graphql.js +73 -0
  49. package/dist/indexer.d.ts +70 -0
  50. package/dist/indexer.d.ts.map +1 -0
  51. package/dist/indexer.js +36979 -0
  52. package/dist/log.d.ts +14 -0
  53. package/dist/log.d.ts.map +1 -0
  54. package/dist/log.js +108 -0
  55. package/dist/object-hash.d.ts +2 -0
  56. package/dist/object-hash.d.ts.map +1 -0
  57. package/dist/object-hash.js +446 -0
  58. package/dist/opsgenie.d.ts +21 -0
  59. package/dist/opsgenie.d.ts.map +1 -0
  60. package/dist/opsgenie.js +320 -0
  61. package/dist/por.d.ts +38 -0
  62. package/dist/por.d.ts.map +1 -0
  63. package/dist/por.js +164 -0
  64. package/dist/s3.d.ts +21 -0
  65. package/dist/s3.d.ts.map +1 -0
  66. package/dist/s3.js +28878 -0
  67. package/dist/search.d.ts +6 -0
  68. package/dist/search.d.ts.map +1 -0
  69. package/dist/search.js +37754 -0
  70. package/dist/selector.d.ts +18 -0
  71. package/dist/selector.d.ts.map +1 -0
  72. package/dist/selector.js +89 -0
  73. package/dist/slack.d.ts +9 -0
  74. package/dist/slack.d.ts.map +1 -0
  75. package/dist/slack.js +16844 -0
  76. package/dist/util.d.ts +5 -0
  77. package/dist/util.d.ts.map +1 -0
  78. package/dist/util.js +72 -0
  79. package/dist/xxhash.win32-x64-msvc-hrdz34v7.node +0 -0
  80. package/examples/api.ts +1 -1
  81. package/examples/indexer.ts +1 -1
  82. package/examples/mode-indexer.ts +1 -1
  83. package/indexer.ts +11 -11
  84. package/log.ts +22 -4
  85. package/object-hash.ts +66 -0
  86. package/package.json +102 -4
  87. package/por.ts +181 -0
  88. package/search.ts +2 -2
  89. package/tsconfig.build.json +24 -0
  90. package/tsconfig.json +5 -5
  91. package/web3.ts +0 -41
package/dist/cli.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ declare function getBinaryName(): string;
2
+ declare function detectSkynetDirectory(): string;
3
+ declare function detectWorkingDirectory(): string;
4
+ declare function detectBin(): string;
5
+ export { getBinaryName, detectSkynetDirectory, detectWorkingDirectory, detectBin };
6
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"AAGA,iBAAS,aAAa,WAKrB;AAED,iBAAS,qBAAqB,WAE7B;AAED,iBAAS,sBAAsB,WAK9B;AAsBD,iBAAS,SAAS,WAIjB;AAED,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,SAAS,EAAE,CAAC"}
package/dist/cli.js ADDED
@@ -0,0 +1,86 @@
1
+ // @bun
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __toESM = (mod, isNodeMode, target) => {
9
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
10
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
11
+ for (let key of __getOwnPropNames(mod))
12
+ if (!__hasOwnProp.call(to, key))
13
+ __defProp(to, key, {
14
+ get: () => mod[key],
15
+ enumerable: true
16
+ });
17
+ return to;
18
+ };
19
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
20
+ var __toCommonJS = (from) => {
21
+ var entry = __moduleCache.get(from), desc;
22
+ if (entry)
23
+ return entry;
24
+ entry = __defProp({}, "__esModule", { value: true });
25
+ if (from && typeof from === "object" || typeof from === "function")
26
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
27
+ get: () => from[key],
28
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
29
+ }));
30
+ __moduleCache.set(from, entry);
31
+ return entry;
32
+ };
33
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
34
+ var __export = (target, all) => {
35
+ for (var name in all)
36
+ __defProp(target, name, {
37
+ get: all[name],
38
+ enumerable: true,
39
+ configurable: true,
40
+ set: (newValue) => all[name] = () => newValue
41
+ });
42
+ };
43
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
44
+ var __require = import.meta.require;
45
+
46
+ // cli.ts
47
+ import path from "path";
48
+ import fs from "fs";
49
+ function getBinaryName() {
50
+ const binaryNameParts = process.argv[1].split(path.sep);
51
+ const binaryName = binaryNameParts[binaryNameParts.length - 1];
52
+ return binaryName;
53
+ }
54
+ function detectSkynetDirectory() {
55
+ return detectDirectory(process.argv[1], "SkynetAPIDefinitions.yml");
56
+ }
57
+ function detectWorkingDirectory() {
58
+ const wd = detectDirectory(process.argv[1], "package.json");
59
+ const skynetd = detectDirectory(process.argv[1], "SkynetAPIDefinitions.yml");
60
+ return wd.slice(skynetd.length + path.sep.length).replace(path.sep, "/");
61
+ }
62
+ function detectDirectory(fullBinPath, sentinel = "package.json") {
63
+ let parentFolder = path.dirname(fullBinPath);
64
+ while (parentFolder) {
65
+ const sentinelPath = path.join(parentFolder, sentinel);
66
+ if (fs.existsSync(sentinelPath)) {
67
+ return parentFolder;
68
+ }
69
+ const newParentFolder = path.dirname(parentFolder);
70
+ if (newParentFolder === parentFolder) {
71
+ break;
72
+ }
73
+ parentFolder = newParentFolder;
74
+ }
75
+ throw new Error("Cannot detect current working directory");
76
+ }
77
+ function detectBin() {
78
+ const wd = detectDirectory(process.argv[1], "package.json");
79
+ return process.argv[1].slice(wd.length + path.sep.length).replace(path.sep, "/");
80
+ }
81
+ export {
82
+ getBinaryName,
83
+ detectWorkingDirectory,
84
+ detectSkynetDirectory,
85
+ detectBin
86
+ };
@@ -0,0 +1,35 @@
1
+ type Protocol = {
2
+ nativeTokenName: string;
3
+ nativeTokenSymbol: string;
4
+ nativeTokenDecimals: number;
5
+ nativeTokenAddress: string;
6
+ nativeTokenLogo?: string;
7
+ nativeTokenCoinGeckoId?: string;
8
+ nativeTokenCmcId?: number;
9
+ endpoint: string;
10
+ backupEndpoint?: string;
11
+ archiveEndpoint?: string;
12
+ tokenStandard: string;
13
+ scanApi?: {
14
+ endpoint: string;
15
+ key?: string;
16
+ };
17
+ multiCallProvider?: string;
18
+ scanUrl?: string;
19
+ chainId: number;
20
+ };
21
+ type TimeIntervals = {
22
+ SECOND: number;
23
+ MINUTE: number;
24
+ HOUR: number;
25
+ DAY: number;
26
+ WEEK: number;
27
+ YEAR: number;
28
+ };
29
+ declare const PROTOCOLS: Record<string, Protocol>;
30
+ declare const TIME: {
31
+ BY_MS: TimeIntervals;
32
+ BY_S: TimeIntervals;
33
+ };
34
+ export { PROTOCOLS, TIME };
35
+ //# sourceMappingURL=const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../const.ts"],"names":[],"mappings":"AAEA,KAAK,QAAQ,GAAG;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE;QACR,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAOF,QAAA,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAoHvC,CAAC;AAEF,QAAA,MAAM,IAAI,EAAE;IACV,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,aAAa,CAAC;CAkBrB,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC"}
package/dist/const.js ADDED
@@ -0,0 +1,207 @@
1
+ // @bun
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __toESM = (mod, isNodeMode, target) => {
9
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
10
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
11
+ for (let key of __getOwnPropNames(mod))
12
+ if (!__hasOwnProp.call(to, key))
13
+ __defProp(to, key, {
14
+ get: () => mod[key],
15
+ enumerable: true
16
+ });
17
+ return to;
18
+ };
19
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
20
+ var __toCommonJS = (from) => {
21
+ var entry = __moduleCache.get(from), desc;
22
+ if (entry)
23
+ return entry;
24
+ entry = __defProp({}, "__esModule", { value: true });
25
+ if (from && typeof from === "object" || typeof from === "function")
26
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
27
+ get: () => from[key],
28
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
29
+ }));
30
+ __moduleCache.set(from, entry);
31
+ return entry;
32
+ };
33
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
34
+ var __export = (target, all) => {
35
+ for (var name in all)
36
+ __defProp(target, name, {
37
+ get: all[name],
38
+ enumerable: true,
39
+ configurable: true,
40
+ set: (newValue) => all[name] = () => newValue
41
+ });
42
+ };
43
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
44
+ var __require = import.meta.require;
45
+
46
+ // env.ts
47
+ function ensureAndGet(envName, defaultValue) {
48
+ return process.env[envName] || defaultValue;
49
+ }
50
+ function getEnvironment() {
51
+ return ensureAndGet("SKYNET_ENVIRONMENT", "dev");
52
+ }
53
+ function getEnvOrThrow(envName) {
54
+ if (!process.env[envName]) {
55
+ throw new Error(`Must set environment variable ${envName}`);
56
+ }
57
+ return process.env[envName];
58
+ }
59
+ function isProduction() {
60
+ return getEnvironment() === "prd";
61
+ }
62
+ function isDev() {
63
+ return getEnvironment() === "dev";
64
+ }
65
+ // const.ts
66
+ function getNodeRealApiKey(identifier) {
67
+ return ensureAndGet(`SKYNET_NODEREAL_API_${identifier.toUpperCase()}_KEY`) ?? ensureAndGet("SKYNET_NODEREAL_API_KEY");
68
+ }
69
+ var PROTOCOLS = {
70
+ eth: {
71
+ nativeTokenName: "Ethereum",
72
+ nativeTokenSymbol: "ETH",
73
+ nativeTokenDecimals: 18,
74
+ nativeTokenAddress: "eth:0x0000000000000000000000000000000000000000",
75
+ nativeTokenLogo: `https://d1w63vqp8iwj2x.cloudfront.net/eth:0x0000000000000000000000000000000000000000.png`,
76
+ nativeTokenCoinGeckoId: "ethereum",
77
+ nativeTokenCmcId: 1027,
78
+ endpoint: `https://eth-mainnet.nodereal.io/v1/${getNodeRealApiKey("ETH")}`,
79
+ archiveEndpoint: `https://eth-mainnet.nodereal.io/v1/${getNodeRealApiKey("ETH")}`,
80
+ tokenStandard: "ERC20",
81
+ scanApi: {
82
+ endpoint: "https://api.etherscan.io/api",
83
+ key: ensureAndGet("SKYNET_ETHER_SCAN_API_KEY")
84
+ },
85
+ multiCallProvider: "0xCa731e0f33Afbcfa9363d6F7449d1f5447d10C80",
86
+ scanUrl: "https://etherscan.io/",
87
+ chainId: 1
88
+ },
89
+ bsc: {
90
+ nativeTokenName: "Binance Coin",
91
+ nativeTokenSymbol: "BNB",
92
+ nativeTokenDecimals: 18,
93
+ nativeTokenAddress: "bsc:0x0000000000000000000000000000000000000000",
94
+ nativeTokenLogo: `https://d1w63vqp8iwj2x.cloudfront.net/bsc:0x0000000000000000000000000000000000000000.png`,
95
+ nativeTokenCoinGeckoId: "binance-coin",
96
+ nativeTokenCmcId: 1839,
97
+ endpoint: `https://bsc-mainnet.nodereal.io/v1/${getNodeRealApiKey("BSC")}`,
98
+ archiveEndpoint: `https://bsc-mainnet.nodereal.io/v1/${getNodeRealApiKey("BSC")}`,
99
+ tokenStandard: "BEP20",
100
+ scanApi: {
101
+ endpoint: "https://api.bscscan.com/api",
102
+ key: ensureAndGet("SKYNET_BSC_SCAN_API_KEY")
103
+ },
104
+ multiCallProvider: "0xe7144e57d832c9005D252f415d205b4b8D78228e",
105
+ scanUrl: "https://bscscan.com/",
106
+ chainId: 56
107
+ },
108
+ polygon: {
109
+ nativeTokenName: "Polygon",
110
+ nativeTokenSymbol: "MATIC",
111
+ nativeTokenDecimals: 18,
112
+ nativeTokenAddress: "polygon:0x0000000000000000000000000000000000000000",
113
+ nativeTokenLogo: `https://d1w63vqp8iwj2x.cloudfront.net/polygon:0x0000000000000000000000000000000000000000.png`,
114
+ nativeTokenCoinGeckoId: "matic-network",
115
+ nativeTokenCmcId: 3890,
116
+ endpoint: `https://polygon-mainnet.nodereal.io/v1/${getNodeRealApiKey("POLYGON")}`,
117
+ archiveEndpoint: `https://polygon-mainnet.nodereal.io/v1/${getNodeRealApiKey("POLYGON")}`,
118
+ backupEndpoint: `https://polygon-mainnet.nodereal.io/v1/${getNodeRealApiKey("POLYGON")}`,
119
+ tokenStandard: "ERC20",
120
+ scanApi: {
121
+ endpoint: "https://api.polygonscan.com/api",
122
+ key: ensureAndGet("SKYNET_POLYGON_SCAN_API_KEY")
123
+ },
124
+ multiCallProvider: "0x8eC86392e0aDB57d00fDffbA39b8870e107c0757",
125
+ scanUrl: "https://polygonscan.com/",
126
+ chainId: 137
127
+ },
128
+ heco: {
129
+ nativeTokenName: "Heco",
130
+ nativeTokenSymbol: "HT",
131
+ nativeTokenDecimals: 18,
132
+ nativeTokenAddress: "heco:0x0000000000000000000000000000000000000000",
133
+ endpoint: `https://http-mainnet.hecochain.com`,
134
+ tokenStandard: "HRC20",
135
+ multiCallProvider: "0xe7144e57d832c9005d252f415d205b4b8d78228e",
136
+ scanUrl: "https://hecoinfo.com/",
137
+ chainId: 128
138
+ },
139
+ avax: {
140
+ nativeTokenName: "Avalanche",
141
+ nativeTokenSymbol: "AVAX",
142
+ nativeTokenDecimals: 18,
143
+ nativeTokenAddress: "avax:0x0000000000000000000000000000000000000000",
144
+ nativeTokenLogo: `https://d1w63vqp8iwj2x.cloudfront.net/avax:0x0000000000000000000000000000000000000000.png`,
145
+ nativeTokenCoinGeckoId: "avalanche-2",
146
+ nativeTokenCmcId: 5805,
147
+ endpoint: `https://api.avax.network/ext/bc/C/rpc`,
148
+ tokenStandard: "ARC20",
149
+ scanApi: {
150
+ endpoint: "https://api.snowtrace.io/api",
151
+ key: ensureAndGet("SKYNET_AVASCAN_API_KEY")
152
+ },
153
+ scanUrl: "https://snowtrace.io/",
154
+ chainId: 43114
155
+ },
156
+ ftm: {
157
+ nativeTokenName: "Fantom",
158
+ nativeTokenSymbol: "FTM",
159
+ nativeTokenDecimals: 18,
160
+ nativeTokenAddress: "ftm:0x0000000000000000000000000000000000000000",
161
+ nativeTokenLogo: `https://d1w63vqp8iwj2x.cloudfront.net/ftm:0x0000000000000000000000000000000000000000.png`,
162
+ nativeTokenCoinGeckoId: "fantom",
163
+ nativeTokenCmcId: 3513,
164
+ endpoint: `https://rpcapi.fantom.network`,
165
+ tokenStandard: "ERC20",
166
+ scanApi: {
167
+ endpoint: "https://api.ftmscan.com/api",
168
+ key: ensureAndGet("SKYNET_FTMSCAN_API_KEY")
169
+ },
170
+ scanUrl: "https://ftmscan.com/",
171
+ chainId: 250
172
+ },
173
+ algo: {
174
+ nativeTokenName: "Algorand",
175
+ nativeTokenSymbol: "ALGO",
176
+ nativeTokenDecimals: 6,
177
+ nativeTokenAddress: "algo:native",
178
+ nativeTokenLogo: `https://d1w63vqp8iwj2x.cloudfront.net/algo:native.png`,
179
+ nativeTokenCoinGeckoId: "algorand",
180
+ nativeTokenCmcId: 4030,
181
+ endpoint: "https://algo-node.certik-skynet.com/",
182
+ tokenStandard: "ASA",
183
+ chainId: 1300
184
+ }
185
+ };
186
+ var TIME = {
187
+ BY_MS: {
188
+ SECOND: 1000,
189
+ MINUTE: 1000 * 60,
190
+ HOUR: 1000 * 60 * 60,
191
+ DAY: 1000 * 60 * 60 * 24,
192
+ WEEK: 1000 * 60 * 60 * 24 * 7,
193
+ YEAR: 1000 * 60 * 60 * 24 * 365
194
+ },
195
+ BY_S: {
196
+ SECOND: 1,
197
+ MINUTE: 60,
198
+ HOUR: 60 * 60,
199
+ DAY: 60 * 60 * 24,
200
+ WEEK: 60 * 60 * 24 * 7,
201
+ YEAR: 60 * 60 * 24 * 365
202
+ }
203
+ };
204
+ export {
205
+ TIME,
206
+ PROTOCOLS
207
+ };
@@ -0,0 +1,4 @@
1
+ import type { DBSQLParameterValue } from "@databricks/sql/dist/DBSQLParameter.js";
2
+ declare function executeSql<T>(sql: string, bindings: Record<string, DBSQLParameterValue>): Promise<T[]>;
3
+ export { executeSql };
4
+ //# sourceMappingURL=databricks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"databricks.d.ts","sourceRoot":"","sources":["../databricks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAqBlF,iBAAe,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,gBAuCtF;AAiBD,OAAO,EAAE,UAAU,EAAE,CAAC"}