@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.36 → 8.2.1-alpha.360
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/CHANGELOG.md +519 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +25 -6
- package/dist/src/curves/constant.d.ts +0 -2
- package/dist/src/curves/constant.d.ts.map +0 -1
- package/dist/src/curves/constant.js +0 -6
- package/dist/src/curves/ed25519.d.ts +0 -21
- package/dist/src/curves/ed25519.d.ts.map +0 -1
- package/dist/src/curves/ed25519.js +0 -72
- package/dist/src/curves/ed25519Bip32HdTree.d.ts +0 -10
- package/dist/src/curves/ed25519Bip32HdTree.d.ts.map +0 -1
- package/dist/src/curves/ed25519Bip32HdTree.js +0 -85
- package/dist/src/curves/index.d.ts +0 -8
- package/dist/src/curves/index.d.ts.map +0 -1
- package/dist/src/curves/index.js +0 -20
- package/dist/src/curves/secp256k1.d.ts +0 -19
- package/dist/src/curves/secp256k1.d.ts.map +0 -1
- package/dist/src/curves/secp256k1.js +0 -77
- package/dist/src/curves/secp256k1Bip32HdTree.d.ts +0 -8
- package/dist/src/curves/secp256k1Bip32HdTree.d.ts.map +0 -1
- package/dist/src/curves/secp256k1Bip32HdTree.js +0 -54
- package/dist/src/curves/types.d.ts +0 -36
- package/dist/src/curves/types.d.ts.map +0 -1
- package/dist/src/curves/types.js +0 -3
- package/dist/src/curves/util.d.ts +0 -2
- package/dist/src/curves/util.d.ts.map +0 -1
- package/dist/src/curves/util.js +0 -11
- package/dist/src/hashCommitment.d.ts +0 -17
- package/dist/src/hashCommitment.d.ts.map +0 -1
- package/dist/src/hashCommitment.js +0 -45
- package/dist/src/index.d.ts +0 -9
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -34
- package/dist/src/openssl/index.d.ts +0 -2
- package/dist/src/openssl/index.d.ts.map +0 -1
- package/dist/src/openssl/index.js +0 -14
- package/dist/src/openssl/openssl.d.ts +0 -9
- package/dist/src/openssl/openssl.d.ts.map +0 -1
- package/dist/src/openssl/openssl.js +0 -45
- package/dist/src/openssl/opensslbytes.d.ts +0 -4
- package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
- package/dist/src/openssl/opensslbytes.js +0 -20
- package/dist/src/schnorrProof.d.ts +0 -22
- package/dist/src/schnorrProof.d.ts.map +0 -1
- package/dist/src/schnorrProof.js +0 -62
- package/dist/src/shamir/index.d.ts +0 -3
- package/dist/src/shamir/index.d.ts.map +0 -1
- package/dist/src/shamir/index.js +0 -15
- package/dist/src/shamir/shamir.d.ts +0 -38
- package/dist/src/shamir/shamir.d.ts.map +0 -1
- package/dist/src/shamir/shamir.js +0 -136
- package/dist/src/shamir/types.d.ts +0 -5
- package/dist/src/shamir/types.d.ts.map +0 -1
- package/dist/src/shamir/types.js +0 -3
- package/dist/src/tss/ecdsa/generatePaillierKey.d.ts +0 -6
- package/dist/src/tss/ecdsa/generatePaillierKey.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/generatePaillierKey.js +0 -52
- package/dist/src/tss/ecdsa/index.d.ts +0 -8
- package/dist/src/tss/ecdsa/index.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/index.js +0 -33
- package/dist/src/tss/ecdsa/noSmallFactorsProof.d.ts +0 -24
- package/dist/src/tss/ecdsa/noSmallFactorsProof.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/noSmallFactorsProof.js +0 -157
- package/dist/src/tss/ecdsa/paillierBlumProof.d.ts +0 -16
- package/dist/src/tss/ecdsa/paillierBlumProof.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/paillierBlumProof.js +0 -148
- package/dist/src/tss/ecdsa/paillierProof.d.ts +0 -24
- package/dist/src/tss/ecdsa/paillierProof.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/paillierProof.js +0 -86
- package/dist/src/tss/ecdsa/primes.d.ts +0 -2
- package/dist/src/tss/ecdsa/primes.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/primes.js +0 -1846
- package/dist/src/tss/ecdsa/rangeProof.d.ts +0 -80
- package/dist/src/tss/ecdsa/rangeProof.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/rangeProof.js +0 -404
- package/dist/src/tss/ecdsa/types.d.ts +0 -182
- package/dist/src/tss/ecdsa/types.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/types.js +0 -197
- package/dist/src/tss/ecdsa/zkVProof.d.ts +0 -25
- package/dist/src/tss/ecdsa/zkVProof.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/zkVProof.js +0 -71
- package/dist/src/tss/index.d.ts +0 -2
- package/dist/src/tss/index.d.ts.map +0 -1
- package/dist/src/tss/index.js +0 -14
- package/dist/src/types.d.ts +0 -14
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -3
- package/dist/src/util.d.ts +0 -61
- package/dist/src/util.d.ts.map +0 -1
- package/dist/src/util.js +0 -208
package/dist/src/index.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
16
|
-
};
|
|
17
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
18
|
-
if (mod && mod.__esModule) return mod;
|
|
19
|
-
var result = {};
|
|
20
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
21
|
-
__setModuleDefault(result, mod);
|
|
22
|
-
return result;
|
|
23
|
-
};
|
|
24
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.Schnorr = exports.HashCommitment = void 0;
|
|
26
|
-
__exportStar(require("./curves"), exports);
|
|
27
|
-
__exportStar(require("./openssl"), exports);
|
|
28
|
-
__exportStar(require("./shamir"), exports);
|
|
29
|
-
__exportStar(require("./tss"), exports);
|
|
30
|
-
exports.HashCommitment = __importStar(require("./hashCommitment"));
|
|
31
|
-
exports.Schnorr = __importStar(require("./schnorrProof"));
|
|
32
|
-
__exportStar(require("./types"), exports);
|
|
33
|
-
__exportStar(require("./util"), exports);
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QjtBQUN6Qiw0Q0FBMEI7QUFDMUIsMkNBQXlCO0FBQ3pCLHdDQUFzQjtBQUV0QixtRUFBbUQ7QUFDbkQsMERBQTBDO0FBQzFDLDBDQUF3QjtBQUN4Qix5Q0FBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2N1cnZlcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZW5zc2wnO1xuZXhwb3J0ICogZnJvbSAnLi9zaGFtaXInO1xuZXhwb3J0ICogZnJvbSAnLi90c3MnO1xuXG5leHBvcnQgKiBhcyBIYXNoQ29tbWl0bWVudCBmcm9tICcuL2hhc2hDb21taXRtZW50JztcbmV4cG9ydCAqIGFzIFNjaG5vcnIgZnJvbSAnLi9zY2hub3JyUHJvb2YnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWwnO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/openssl/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
-
};
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./openssl"), exports);
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvb3BlbnNzbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL29wZW5zc2wnO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openssl.d.ts","sourceRoot":"","sources":["../../../src/openssl/openssl.ts"],"names":[],"mappings":"AAGA,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAAS;IAExB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAI7C,UAAU;YAmBV,YAAY;CAO3B"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OpenSSL = void 0;
|
|
4
|
-
const wasi_1 = require("@wasmer/wasi");
|
|
5
|
-
const opensslbytes_1 = require("./opensslbytes");
|
|
6
|
-
class OpenSSL {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.isInitialized = false;
|
|
9
|
-
}
|
|
10
|
-
async init() {
|
|
11
|
-
await wasi_1.init();
|
|
12
|
-
this.waModule = await WebAssembly.compile(await this.getWasmBytes());
|
|
13
|
-
this.isInitialized = true;
|
|
14
|
-
}
|
|
15
|
-
async generateSafePrime(bitLength) {
|
|
16
|
-
const bigIntString = await this.runCommand(`prime -bits ${bitLength} -generate -safe`);
|
|
17
|
-
return BigInt(bigIntString);
|
|
18
|
-
}
|
|
19
|
-
async runCommand(openSslCommand) {
|
|
20
|
-
if (!this.isInitialized) {
|
|
21
|
-
throw new Error('The OpenSSl class is not initialized! Please call OpenSSL.init().');
|
|
22
|
-
}
|
|
23
|
-
const command = Array.isArray(openSslCommand) ? openSslCommand : openSslCommand.split(/[\s]{1,}/g).filter(Boolean);
|
|
24
|
-
const wasi = new wasi_1.WASI({
|
|
25
|
-
args: command,
|
|
26
|
-
});
|
|
27
|
-
// Instantiate the WASI module
|
|
28
|
-
// cannot use wasi.instantiate(module, {}); due to the size of the module
|
|
29
|
-
const instance = await WebAssembly.instantiate(this.waModule, {
|
|
30
|
-
...wasi.getImports(this.waModule),
|
|
31
|
-
});
|
|
32
|
-
// Run the start function
|
|
33
|
-
wasi.start(instance);
|
|
34
|
-
return wasi.getStdoutString();
|
|
35
|
-
}
|
|
36
|
-
async getWasmBytes() {
|
|
37
|
-
const waBuffer = opensslbytes_1.loadWebAssembly();
|
|
38
|
-
if (!waBuffer) {
|
|
39
|
-
throw new Error('Cannot load openssl web-assembly!');
|
|
40
|
-
}
|
|
41
|
-
return waBuffer.buffer;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
exports.OpenSSL = OpenSSL;
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnNzbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vcGVuc3NsL29wZW5zc2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUNBQTBDO0FBQzFDLGlEQUFpRDtBQUVqRCxNQUFhLE9BQU87SUFBcEI7UUFFVSxrQkFBYSxHQUFHLEtBQUssQ0FBQztJQXNDaEMsQ0FBQztJQXBDQyxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sV0FBSSxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsU0FBaUI7UUFDdkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsU0FBUyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDTyxLQUFLLENBQUMsVUFBVSxDQUFDLGNBQWlDO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUVBQW1FLENBQUMsQ0FBQztTQUN0RjtRQUNELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkgsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFJLENBQUM7WUFDcEIsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDLENBQUM7UUFFSCw4QkFBOEI7UUFDOUIseUVBQXlFO1FBQ3pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzVELEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2xDLENBQUMsQ0FBQztRQUNILHlCQUF5QjtRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWTtRQUN4QixNQUFNLFFBQVEsR0FBRyw4QkFBZSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztTQUN0RDtRQUNELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUF4Q0QsMEJBd0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5pdCwgV0FTSSB9IGZyb20gJ0B3YXNtZXIvd2FzaSc7XG5pbXBvcnQgeyBsb2FkV2ViQXNzZW1ibHkgfSBmcm9tICcuL29wZW5zc2xieXRlcyc7XG5cbmV4cG9ydCBjbGFzcyBPcGVuU1NMIHtcbiAgcHJpdmF0ZSB3YU1vZHVsZTogV2ViQXNzZW1ibHkuTW9kdWxlO1xuICBwcml2YXRlIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBhc3luYyBpbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IGluaXQoKTtcbiAgICB0aGlzLndhTW9kdWxlID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShhd2FpdCB0aGlzLmdldFdhc21CeXRlcygpKTtcbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGVTYWZlUHJpbWUoYml0TGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPGJpZ2ludD4ge1xuICAgIGNvbnN0IGJpZ0ludFN0cmluZyA9IGF3YWl0IHRoaXMucnVuQ29tbWFuZChgcHJpbWUgLWJpdHMgJHtiaXRMZW5ndGh9IC1nZW5lcmF0ZSAtc2FmZWApO1xuICAgIHJldHVybiBCaWdJbnQoYmlnSW50U3RyaW5nKTtcbiAgfVxuICBwcml2YXRlIGFzeW5jIHJ1bkNvbW1hbmQob3BlblNzbENvbW1hbmQ6IHN0cmluZyB8IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgT3BlblNTbCBjbGFzcyBpcyBub3QgaW5pdGlhbGl6ZWQhIFBsZWFzZSBjYWxsIE9wZW5TU0wuaW5pdCgpLicpO1xuICAgIH1cbiAgICBjb25zdCBjb21tYW5kID0gQXJyYXkuaXNBcnJheShvcGVuU3NsQ29tbWFuZCkgPyBvcGVuU3NsQ29tbWFuZCA6IG9wZW5Tc2xDb21tYW5kLnNwbGl0KC9bXFxzXXsxLH0vZykuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IHdhc2kgPSBuZXcgV0FTSSh7XG4gICAgICBhcmdzOiBjb21tYW5kLFxuICAgIH0pO1xuXG4gICAgLy8gSW5zdGFudGlhdGUgdGhlIFdBU0kgbW9kdWxlXG4gICAgLy8gY2Fubm90IHVzZSB3YXNpLmluc3RhbnRpYXRlKG1vZHVsZSwge30pOyBkdWUgdG8gdGhlIHNpemUgb2YgdGhlIG1vZHVsZVxuICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodGhpcy53YU1vZHVsZSwge1xuICAgICAgLi4ud2FzaS5nZXRJbXBvcnRzKHRoaXMud2FNb2R1bGUpLFxuICAgIH0pO1xuICAgIC8vIFJ1biB0aGUgc3RhcnQgZnVuY3Rpb25cbiAgICB3YXNpLnN0YXJ0KGluc3RhbmNlKTtcbiAgICByZXR1cm4gd2FzaS5nZXRTdGRvdXRTdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0V2FzbUJ5dGVzKCk6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgIGNvbnN0IHdhQnVmZmVyID0gbG9hZFdlYkFzc2VtYmx5KCk7XG4gICAgaWYgKCF3YUJ1ZmZlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9hZCBvcGVuc3NsIHdlYi1hc3NlbWJseSEnKTtcbiAgICB9XG4gICAgcmV0dXJuIHdhQnVmZmVyLmJ1ZmZlcjtcbiAgfVxufVxuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opensslbytes.d.ts","sourceRoot":"","sources":["../../../src/openssl/opensslbytes.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,IAAI;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,GAAG,IAAI,CAU/D"}
|