@sidhujag/sysweb3-keyring 1.0.491
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/README.md +201 -0
- package/cjs/errorUtils.js +75 -0
- package/cjs/errorUtils.js.map +1 -0
- package/cjs/hardware-wallet-manager.js +462 -0
- package/cjs/hardware-wallet-manager.js.map +1 -0
- package/cjs/index.js +31 -0
- package/cjs/index.js.map +1 -0
- package/cjs/initial-state.js +105 -0
- package/cjs/initial-state.js.map +1 -0
- package/cjs/keyring-manager.js +1687 -0
- package/cjs/keyring-manager.js.map +1 -0
- package/cjs/ledger/bitcoin_client/index.js +47 -0
- package/cjs/ledger/bitcoin_client/index.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/appClient.js +408 -0
- package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/bip32.js +61 -0
- package/cjs/ledger/bitcoin_client/lib/bip32.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/buffertools.js +126 -0
- package/cjs/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/clientCommands.js +270 -0
- package/cjs/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/constants.js +16 -0
- package/cjs/ledger/bitcoin_client/lib/constants.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/merkelizedPsbt.js +54 -0
- package/cjs/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/merkle.js +109 -0
- package/cjs/ledger/bitcoin_client/lib/merkle.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/merkleMap.js +46 -0
- package/cjs/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/policy.js +66 -0
- package/cjs/ledger/bitcoin_client/lib/policy.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/psbtv2.js +640 -0
- package/cjs/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
- package/cjs/ledger/bitcoin_client/lib/varint.js +113 -0
- package/cjs/ledger/bitcoin_client/lib/varint.js.map +1 -0
- package/cjs/ledger/consts.js +7 -0
- package/cjs/ledger/consts.js.map +1 -0
- package/cjs/ledger/index.js +319 -0
- package/cjs/ledger/index.js.map +1 -0
- package/cjs/ledger/types.js +3 -0
- package/cjs/ledger/types.js.map +1 -0
- package/cjs/network-utils.js +76 -0
- package/cjs/network-utils.js.map +1 -0
- package/cjs/providers.js +270 -0
- package/cjs/providers.js.map +1 -0
- package/cjs/signers.js +64 -0
- package/cjs/signers.js.map +1 -0
- package/cjs/storage.js +30 -0
- package/cjs/storage.js.map +1 -0
- package/cjs/transactions/__tests__/integration.test.js +237 -0
- package/cjs/transactions/__tests__/integration.test.js.map +1 -0
- package/cjs/transactions/__tests__/syscoin.test.js +361 -0
- package/cjs/transactions/__tests__/syscoin.test.js.map +1 -0
- package/cjs/transactions/ethereum.js +1577 -0
- package/cjs/transactions/ethereum.js.map +1 -0
- package/cjs/transactions/index.js +19 -0
- package/cjs/transactions/index.js.map +1 -0
- package/cjs/transactions/syscoin.js +328 -0
- package/cjs/transactions/syscoin.js.map +1 -0
- package/cjs/trezor/index.js +718 -0
- package/cjs/trezor/index.js.map +1 -0
- package/cjs/types.js +12 -0
- package/cjs/types.js.map +1 -0
- package/cjs/utils/derivation-paths.js +99 -0
- package/cjs/utils/derivation-paths.js.map +1 -0
- package/cjs/utils/psbt.js +60 -0
- package/cjs/utils/psbt.js.map +1 -0
- package/cjs/utils.js +130 -0
- package/cjs/utils.js.map +1 -0
- package/package.json +46 -0
- package/types/errorUtils.d.ts +1 -0
- package/types/hardware-wallet-manager.d.ts +110 -0
- package/types/index.d.ts +12 -0
- package/types/initial-state.d.ts +79 -0
- package/types/keyring-manager.d.ts +184 -0
- package/types/ledger/bitcoin_client/index.d.ts +5 -0
- package/types/ledger/bitcoin_client/lib/appClient.d.ts +106 -0
- package/types/ledger/bitcoin_client/lib/bip32.d.ts +11 -0
- package/types/ledger/bitcoin_client/lib/buffertools.d.ts +28 -0
- package/types/ledger/bitcoin_client/lib/clientCommands.d.ts +77 -0
- package/types/ledger/bitcoin_client/lib/constants.d.ts +12 -0
- package/types/ledger/bitcoin_client/lib/merkelizedPsbt.d.ts +24 -0
- package/types/ledger/bitcoin_client/lib/merkle.d.ts +32 -0
- package/types/ledger/bitcoin_client/lib/merkleMap.d.ts +23 -0
- package/types/ledger/bitcoin_client/lib/policy.d.ts +36 -0
- package/types/ledger/bitcoin_client/lib/psbtv2.d.ts +167 -0
- package/types/ledger/bitcoin_client/lib/varint.d.ts +23 -0
- package/types/ledger/consts.d.ts +3 -0
- package/types/ledger/index.d.ts +51 -0
- package/types/ledger/types.d.ts +48 -0
- package/types/network-utils.d.ts +14 -0
- package/types/providers.d.ts +47 -0
- package/types/signers.d.ts +95 -0
- package/types/storage.d.ts +2 -0
- package/types/transactions/__tests__/integration.test.d.ts +1 -0
- package/types/transactions/__tests__/syscoin.test.d.ts +1 -0
- package/types/transactions/ethereum.d.ts +80 -0
- package/types/transactions/index.d.ts +2 -0
- package/types/transactions/syscoin.d.ts +61 -0
- package/types/trezor/index.d.ts +170 -0
- package/types/types.d.ts +294 -0
- package/types/utils/derivation-paths.d.ts +35 -0
- package/types/utils/psbt.d.ts +17 -0
- package/types/utils.d.ts +4 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Merkle = void 0;
|
|
4
|
+
exports.hashLeaf = hashLeaf;
|
|
5
|
+
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
6
|
+
/**
|
|
7
|
+
* This class implements the merkle tree used by Ledger Bitcoin app v2+,
|
|
8
|
+
* which is documented at
|
|
9
|
+
* https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/merkle.md
|
|
10
|
+
*/
|
|
11
|
+
class Merkle {
|
|
12
|
+
constructor(leaves, hasher = bitcoinjs_lib_1.crypto.sha256) {
|
|
13
|
+
this.leaves = leaves;
|
|
14
|
+
this.h = hasher;
|
|
15
|
+
const nodes = this.calculateRoot(leaves);
|
|
16
|
+
this.rootNode = nodes.root;
|
|
17
|
+
this.leafNodes = nodes.leaves;
|
|
18
|
+
}
|
|
19
|
+
getRoot() {
|
|
20
|
+
return this.rootNode.hash;
|
|
21
|
+
}
|
|
22
|
+
size() {
|
|
23
|
+
return this.leaves.length;
|
|
24
|
+
}
|
|
25
|
+
getLeaves() {
|
|
26
|
+
return this.leaves;
|
|
27
|
+
}
|
|
28
|
+
getLeafHash(index) {
|
|
29
|
+
return this.leafNodes[index].hash;
|
|
30
|
+
}
|
|
31
|
+
getProof(index) {
|
|
32
|
+
if (index >= this.leaves.length)
|
|
33
|
+
throw Error('Index out of bounds');
|
|
34
|
+
return proveNode(this.leafNodes[index]);
|
|
35
|
+
}
|
|
36
|
+
calculateRoot(leaves) {
|
|
37
|
+
const n = leaves.length;
|
|
38
|
+
if (n == 0) {
|
|
39
|
+
return {
|
|
40
|
+
root: new Node(undefined, undefined, Buffer.alloc(32, 0)),
|
|
41
|
+
leaves: [],
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
if (n == 1) {
|
|
45
|
+
const newNode = new Node(undefined, undefined, leaves[0]);
|
|
46
|
+
return { root: newNode, leaves: [newNode] };
|
|
47
|
+
}
|
|
48
|
+
const leftCount = highestPowerOf2LessThan(n);
|
|
49
|
+
const leftBranch = this.calculateRoot(leaves.slice(0, leftCount));
|
|
50
|
+
const rightBranch = this.calculateRoot(leaves.slice(leftCount));
|
|
51
|
+
const leftChild = leftBranch.root;
|
|
52
|
+
const rightChild = rightBranch.root;
|
|
53
|
+
const hash = this.hashNode(leftChild.hash, rightChild.hash);
|
|
54
|
+
const node = new Node(leftChild, rightChild, hash);
|
|
55
|
+
leftChild.parent = node;
|
|
56
|
+
rightChild.parent = node;
|
|
57
|
+
return { root: node, leaves: leftBranch.leaves.concat(rightBranch.leaves) };
|
|
58
|
+
}
|
|
59
|
+
hashNode(left, right) {
|
|
60
|
+
return this.h(Buffer.concat([Buffer.from([1]), left, right]));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.Merkle = Merkle;
|
|
64
|
+
function hashLeaf(buf, hashFunction = bitcoinjs_lib_1.crypto.sha256) {
|
|
65
|
+
return hashConcat(Buffer.from([0]), buf, hashFunction);
|
|
66
|
+
}
|
|
67
|
+
function hashConcat(bufA, bufB, hashFunction) {
|
|
68
|
+
return hashFunction(Buffer.concat([bufA, bufB]));
|
|
69
|
+
}
|
|
70
|
+
class Node {
|
|
71
|
+
constructor(left, right, hash) {
|
|
72
|
+
this.leftChild = left;
|
|
73
|
+
this.rightChild = right;
|
|
74
|
+
this.hash = hash;
|
|
75
|
+
}
|
|
76
|
+
isLeaf() {
|
|
77
|
+
return this.leftChild == undefined;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function proveNode(node) {
|
|
81
|
+
if (!node.parent) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
if (node.parent.leftChild == node) {
|
|
85
|
+
if (!node.parent.rightChild) {
|
|
86
|
+
throw new Error('Expected right child to exist');
|
|
87
|
+
}
|
|
88
|
+
return [node.parent.rightChild.hash, ...proveNode(node.parent)];
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
if (!node.parent.leftChild) {
|
|
92
|
+
throw new Error('Expected left child to exist');
|
|
93
|
+
}
|
|
94
|
+
return [node.parent.leftChild.hash, ...proveNode(node.parent)];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function highestPowerOf2LessThan(n) {
|
|
98
|
+
if (n < 2) {
|
|
99
|
+
throw Error('Expected n >= 2');
|
|
100
|
+
}
|
|
101
|
+
if (isPowerOf2(n)) {
|
|
102
|
+
return n / 2;
|
|
103
|
+
}
|
|
104
|
+
return 1 << Math.floor(Math.log2(n));
|
|
105
|
+
}
|
|
106
|
+
function isPowerOf2(n) {
|
|
107
|
+
return (n & (n - 1)) == 0;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=merkle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/merkle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MerkleMap = void 0;
|
|
4
|
+
const merkle_1 = require("./merkle");
|
|
5
|
+
const varint_1 = require("./varint");
|
|
6
|
+
/**
|
|
7
|
+
* This implements "Merkelized Maps", documented at
|
|
8
|
+
* https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/merkle.md#merkleized-maps
|
|
9
|
+
*
|
|
10
|
+
* A merkelized map consist of two merkle trees, one for the keys of
|
|
11
|
+
* a map and one for the values of the same map, thus the two merkle
|
|
12
|
+
* trees have the same shape. The commitment is the number elements
|
|
13
|
+
* in the map followed by the keys' merkle root followed by the
|
|
14
|
+
* values' merkle root.
|
|
15
|
+
*/
|
|
16
|
+
class MerkleMap {
|
|
17
|
+
/**
|
|
18
|
+
* @param keys Sorted list of (unhashed) keys
|
|
19
|
+
* @param values values, in corresponding order as the keys, and of equal length
|
|
20
|
+
*/
|
|
21
|
+
constructor(keys, values) {
|
|
22
|
+
if (keys.length != values.length) {
|
|
23
|
+
throw new Error('keys and values should have the same length');
|
|
24
|
+
}
|
|
25
|
+
// Sanity check: verify that keys are actually sorted and with no duplicates
|
|
26
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
27
|
+
if (keys[i].toString('hex') >= keys[i + 1].toString('hex')) {
|
|
28
|
+
throw new Error('keys must be in strictly increasing order');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
this.keys = keys;
|
|
32
|
+
this.keysTree = new merkle_1.Merkle(keys.map((k) => (0, merkle_1.hashLeaf)(k)));
|
|
33
|
+
this.values = values;
|
|
34
|
+
this.valuesTree = new merkle_1.Merkle(values.map((v) => (0, merkle_1.hashLeaf)(v)));
|
|
35
|
+
}
|
|
36
|
+
commitment() {
|
|
37
|
+
// returns a buffer between 65 and 73 (included) bytes long
|
|
38
|
+
return Buffer.concat([
|
|
39
|
+
(0, varint_1.createVarint)(this.keys.length),
|
|
40
|
+
this.keysTree.getRoot(),
|
|
41
|
+
this.valuesTree.getRoot(),
|
|
42
|
+
]);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.MerkleMap = MerkleMap;
|
|
46
|
+
//# sourceMappingURL=merkleMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merkleMap.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/merkleMap.ts"],"names":[],"mappings":";;;AAAA,qCAA4C;AAC5C,qCAAwC;AAExC;;;;;;;;;GASG;AACH,MAAa,SAAS;IAKpB;;;OAGG;IACH,YAAY,IAAuB,EAAE,MAAyB;QAC5D,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,4EAA4E;QAC5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,iBAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,eAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,iBAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,UAAU;QACR,2DAA2D;QAC3D,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,IAAA,qBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;YACvB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;SAC1B,CAAC,CAAC;IACL,CAAC;CACF;AAnCD,8BAmCC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultWalletPolicy = exports.WalletPolicy = void 0;
|
|
4
|
+
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
|
5
|
+
const buffertools_1 = require("./buffertools");
|
|
6
|
+
const merkle_1 = require("./merkle");
|
|
7
|
+
const WALLET_POLICY_V2 = 2;
|
|
8
|
+
/**
|
|
9
|
+
* The Bitcon hardware app uses a descriptors-like thing to describe
|
|
10
|
+
* how to construct output scripts from keys. A "Wallet Policy" consists
|
|
11
|
+
* of a "Descriptor Template" and a list of "keys". A key is basically
|
|
12
|
+
* a serialized BIP32 extended public key with some added derivation path
|
|
13
|
+
* information. This is documented at
|
|
14
|
+
* https://github.com/LedgerHQ/app-bitcoin-new/blob/master/doc/wallet.md
|
|
15
|
+
*/
|
|
16
|
+
class WalletPolicy {
|
|
17
|
+
/**
|
|
18
|
+
* Creates and instance of a wallet policy.
|
|
19
|
+
* @param name an ascii string, up to 16 bytes long; it must be an empty string for default wallet policies
|
|
20
|
+
* @param descriptorTemplate the wallet policy template
|
|
21
|
+
* @param keys and array of the keys, with the key derivation information
|
|
22
|
+
*/
|
|
23
|
+
constructor(name, descriptorTemplate, keys) {
|
|
24
|
+
this.name = name;
|
|
25
|
+
this.descriptorTemplate = descriptorTemplate;
|
|
26
|
+
this.keys = keys;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Returns the unique 32-bytes id of this wallet policy.
|
|
30
|
+
*/
|
|
31
|
+
getId() {
|
|
32
|
+
return bitcoinjs_lib_1.crypto.sha256(this.serialize());
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Serializes the wallet policy for transmission via the hardware wallet protocol.
|
|
36
|
+
* @returns the serialized wallet policy
|
|
37
|
+
*/
|
|
38
|
+
serialize() {
|
|
39
|
+
const keyBuffers = this.keys.map((k) => Buffer.from(k, 'ascii'));
|
|
40
|
+
const m = new merkle_1.Merkle(keyBuffers.map((k) => (0, merkle_1.hashLeaf)(k)));
|
|
41
|
+
const buf = new buffertools_1.BufferWriter();
|
|
42
|
+
buf.writeUInt8(WALLET_POLICY_V2); // wallet version
|
|
43
|
+
// length of wallet name, and wallet name
|
|
44
|
+
buf.writeVarSlice(Buffer.from(this.name, 'ascii'));
|
|
45
|
+
// length of descriptor template
|
|
46
|
+
buf.writeVarInt(this.descriptorTemplate.length);
|
|
47
|
+
// sha256 hash of descriptor template
|
|
48
|
+
buf.writeSlice(bitcoinjs_lib_1.crypto.sha256(Buffer.from(this.descriptorTemplate)));
|
|
49
|
+
// number of keys
|
|
50
|
+
buf.writeVarInt(this.keys.length);
|
|
51
|
+
// root of Merkle tree of keys
|
|
52
|
+
buf.writeSlice(m.getRoot());
|
|
53
|
+
return buf.buffer();
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.WalletPolicy = WalletPolicy;
|
|
57
|
+
/**
|
|
58
|
+
* Simplified class to handle default wallet policies that can be used without policy registration.
|
|
59
|
+
*/
|
|
60
|
+
class DefaultWalletPolicy extends WalletPolicy {
|
|
61
|
+
constructor(descriptorTemplate, key) {
|
|
62
|
+
super('', descriptorTemplate, [key]);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.DefaultWalletPolicy = DefaultWalletPolicy;
|
|
66
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../../src/ledger/bitcoin_client/lib/policy.ts"],"names":[],"mappings":";;;AAAA,iDAAuC;AAEvC,+CAA6C;AAC7C,qCAA4C;AAE5C,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAa,YAAY;IAIvB;;;;;OAKG;IACH,YACE,IAAY,EACZ,kBAA0B,EAC1B,IAAuB;QAEvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,sBAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,IAAI,eAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,iBAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,IAAI,0BAAY,EAAE,CAAC;QAC/B,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB;QAEnD,yCAAyC;QACzC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAEnD,gCAAgC;QAChC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAChD,qCAAqC;QACrC,GAAG,CAAC,UAAU,CAAC,sBAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;QAEpE,iBAAiB;QACjB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,8BAA8B;QAC9B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;CACF;AApDD,oCAoDC;AAQD;;GAEG;AACH,MAAa,mBAAoB,SAAQ,YAAY;IACnD,YAAY,kBAA6C,EAAE,GAAW;QACpE,KAAK,CAAC,EAAE,EAAE,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,CAAC;CACF;AAJD,kDAIC"}
|