@bitgo-beta/abstract-eth 1.2.3-alpha.403 → 1.2.3-alpha.405
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/package.json +7 -7
- package/dist/src/abstractEthLikeCoin.d.ts +0 -95
- package/dist/src/abstractEthLikeCoin.d.ts.map +0 -1
- package/dist/src/abstractEthLikeCoin.js +0 -160
- package/dist/src/abstractEthLikeNewCoins.d.ts +0 -749
- package/dist/src/abstractEthLikeNewCoins.d.ts.map +0 -1
- package/dist/src/abstractEthLikeNewCoins.js +0 -2229
- package/dist/src/ethLikeToken.d.ts +0 -70
- package/dist/src/ethLikeToken.d.ts.map +0 -1
- package/dist/src/ethLikeToken.js +0 -360
- package/dist/src/index.d.ts +0 -5
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -21
- package/dist/src/lib/contractCall.d.ts +0 -8
- package/dist/src/lib/contractCall.d.ts.map +0 -1
- package/dist/src/lib/contractCall.js +0 -17
- package/dist/src/lib/iface.d.ts +0 -133
- package/dist/src/lib/iface.d.ts.map +0 -1
- package/dist/src/lib/iface.js +0 -8
- package/dist/src/lib/index.d.ts +0 -16
- package/dist/src/lib/index.d.ts.map +0 -1
- package/dist/src/lib/index.js +0 -57
- package/dist/src/lib/keyPair.d.ts +0 -26
- package/dist/src/lib/keyPair.d.ts.map +0 -1
- package/dist/src/lib/keyPair.js +0 -65
- package/dist/src/lib/messages/eip191/eip191Message.d.ts +0 -12
- package/dist/src/lib/messages/eip191/eip191Message.d.ts.map +0 -1
- package/dist/src/lib/messages/eip191/eip191Message.js +0 -25
- package/dist/src/lib/messages/eip191/eip191MessageBuilder.d.ts +0 -19
- package/dist/src/lib/messages/eip191/eip191MessageBuilder.d.ts.map +0 -1
- package/dist/src/lib/messages/eip191/eip191MessageBuilder.js +0 -27
- package/dist/src/lib/messages/eip191/index.d.ts +0 -3
- package/dist/src/lib/messages/eip191/index.d.ts.map +0 -1
- package/dist/src/lib/messages/eip191/index.js +0 -19
- package/dist/src/lib/messages/eip712/eip712Message.d.ts +0 -6
- package/dist/src/lib/messages/eip712/eip712Message.d.ts.map +0 -1
- package/dist/src/lib/messages/eip712/eip712Message.js +0 -27
- package/dist/src/lib/messages/eip712/eip712MessageBuilder.d.ts +0 -7
- package/dist/src/lib/messages/eip712/eip712MessageBuilder.d.ts.map +0 -1
- package/dist/src/lib/messages/eip712/eip712MessageBuilder.js +0 -15
- package/dist/src/lib/messages/eip712/index.d.ts +0 -3
- package/dist/src/lib/messages/eip712/index.d.ts.map +0 -1
- package/dist/src/lib/messages/eip712/index.js +0 -19
- package/dist/src/lib/messages/index.d.ts +0 -4
- package/dist/src/lib/messages/index.d.ts.map +0 -1
- package/dist/src/lib/messages/index.js +0 -20
- package/dist/src/lib/messages/messageBuilderFactory.d.ts +0 -7
- package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +0 -1
- package/dist/src/lib/messages/messageBuilderFactory.js +0 -23
- package/dist/src/lib/transaction.d.ts +0 -67
- package/dist/src/lib/transaction.d.ts.map +0 -1
- package/dist/src/lib/transaction.js +0 -142
- package/dist/src/lib/transactionBuilder.d.ts +0 -270
- package/dist/src/lib/transactionBuilder.d.ts.map +0 -1
- package/dist/src/lib/transactionBuilder.js +0 -822
- package/dist/src/lib/transferBuilder.d.ts +0 -76
- package/dist/src/lib/transferBuilder.d.ts.map +0 -1
- package/dist/src/lib/transferBuilder.js +0 -307
- package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts +0 -54
- package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.d.ts.map +0 -1
- package/dist/src/lib/transferBuilders/baseNFTTransferBuilder.js +0 -120
- package/dist/src/lib/transferBuilders/index.d.ts +0 -4
- package/dist/src/lib/transferBuilders/index.d.ts.map +0 -1
- package/dist/src/lib/transferBuilders/index.js +0 -20
- package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts +0 -17
- package/dist/src/lib/transferBuilders/transferBuilderERC1155.d.ts.map +0 -1
- package/dist/src/lib/transferBuilders/transferBuilderERC1155.js +0 -96
- package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts +0 -16
- package/dist/src/lib/transferBuilders/transferBuilderERC721.d.ts.map +0 -1
- package/dist/src/lib/transferBuilders/transferBuilderERC721.js +0 -81
- package/dist/src/lib/types.d.ts +0 -39
- package/dist/src/lib/types.d.ts.map +0 -1
- package/dist/src/lib/types.js +0 -137
- package/dist/src/lib/utils.d.ts +0 -310
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/lib/utils.js +0 -829
- package/dist/src/lib/walletUtil.d.ts +0 -40
- package/dist/src/lib/walletUtil.d.ts.map +0 -1
- package/dist/src/lib/walletUtil.js +0 -43
- package/dist/src/types.d.ts +0 -9
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -3
- package/dist/test/index.d.ts +0 -2
- package/dist/test/index.d.ts.map +0 -1
- package/dist/test/index.js +0 -18
- package/dist/test/unit/coin.d.ts +0 -8
- package/dist/test/unit/coin.d.ts.map +0 -1
- package/dist/test/unit/coin.js +0 -577
- package/dist/test/unit/index.d.ts +0 -6
- package/dist/test/unit/index.d.ts.map +0 -1
- package/dist/test/unit/index.js +0 -22
- package/dist/test/unit/messages/abstractEthMessageBuilderTests.d.ts +0 -3
- package/dist/test/unit/messages/abstractEthMessageBuilderTests.d.ts.map +0 -1
- package/dist/test/unit/messages/abstractEthMessageBuilderTests.js +0 -110
- package/dist/test/unit/messages/abstractEthMessageTestTypes.d.ts +0 -43
- package/dist/test/unit/messages/abstractEthMessageTestTypes.d.ts.map +0 -1
- package/dist/test/unit/messages/abstractEthMessageTestTypes.js +0 -3
- package/dist/test/unit/messages/abstractEthMessagesTests.d.ts +0 -3
- package/dist/test/unit/messages/abstractEthMessagesTests.d.ts.map +0 -1
- package/dist/test/unit/messages/abstractEthMessagesTests.js +0 -129
- package/dist/test/unit/messages/eip191/eip191Message.d.ts +0 -2
- package/dist/test/unit/messages/eip191/eip191Message.d.ts.map +0 -1
- package/dist/test/unit/messages/eip191/eip191Message.js +0 -15
- package/dist/test/unit/messages/eip191/eip191MessageBuilder.d.ts +0 -2
- package/dist/test/unit/messages/eip191/eip191MessageBuilder.d.ts.map +0 -1
- package/dist/test/unit/messages/eip191/eip191MessageBuilder.js +0 -16
- package/dist/test/unit/messages/eip191/fixtures.d.ts +0 -109
- package/dist/test/unit/messages/eip191/fixtures.d.ts.map +0 -1
- package/dist/test/unit/messages/eip191/fixtures.js +0 -63
- package/dist/test/unit/messages/eip712/eip712Message.d.ts +0 -2
- package/dist/test/unit/messages/eip712/eip712Message.d.ts.map +0 -1
- package/dist/test/unit/messages/eip712/eip712Message.js +0 -15
- package/dist/test/unit/messages/eip712/eip712MessageBuilder.d.ts +0 -2
- package/dist/test/unit/messages/eip712/eip712MessageBuilder.d.ts.map +0 -1
- package/dist/test/unit/messages/eip712/eip712MessageBuilder.js +0 -16
- package/dist/test/unit/messages/eip712/fixtures.d.ts +0 -76
- package/dist/test/unit/messages/eip712/fixtures.d.ts.map +0 -1
- package/dist/test/unit/messages/eip712/fixtures.js +0 -120
- package/dist/test/unit/messages/index.d.ts +0 -4
- package/dist/test/unit/messages/index.d.ts.map +0 -1
- package/dist/test/unit/messages/index.js +0 -20
- package/dist/test/unit/messages/messageBuilderFactory.d.ts +0 -2
- package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +0 -1
- package/dist/test/unit/messages/messageBuilderFactory.js +0 -52
- package/dist/test/unit/token.d.ts +0 -2
- package/dist/test/unit/token.d.ts.map +0 -1
- package/dist/test/unit/token.js +0 -37
- package/dist/test/unit/transaction.d.ts +0 -3
- package/dist/test/unit/transaction.d.ts.map +0 -1
- package/dist/test/unit/transaction.js +0 -60
- package/dist/test/unit/transactionBuilder/addressInitialization.d.ts +0 -8
- package/dist/test/unit/transactionBuilder/addressInitialization.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/addressInitialization.js +0 -95
- package/dist/test/unit/transactionBuilder/flushNft.d.ts +0 -2
- package/dist/test/unit/transactionBuilder/flushNft.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/flushNft.js +0 -381
- package/dist/test/unit/transactionBuilder/index.d.ts +0 -5
- package/dist/test/unit/transactionBuilder/index.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/index.js +0 -21
- package/dist/test/unit/transactionBuilder/send.d.ts +0 -3
- package/dist/test/unit/transactionBuilder/send.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/send.js +0 -197
- package/dist/test/unit/transactionBuilder/walletInitialization.d.ts +0 -10
- package/dist/test/unit/transactionBuilder/walletInitialization.d.ts.map +0 -1
- package/dist/test/unit/transactionBuilder/walletInitialization.js +0 -124
- package/dist/test/unit/transferBuilder.d.ts +0 -2
- package/dist/test/unit/transferBuilder.d.ts.map +0 -1
- package/dist/test/unit/transferBuilder.js +0 -76
- package/dist/test/unit/utils.d.ts +0 -2
- package/dist/test/unit/utils.d.ts.map +0 -1
- package/dist/test/unit/utils.js +0 -184
package/dist/test/unit/utils.js
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const should_1 = __importDefault(require("should"));
|
|
7
|
-
const utils_1 = require("../../src/lib/utils");
|
|
8
|
-
describe('Abstract ETH Utils', () => {
|
|
9
|
-
describe('ERC721 Flush Functions', () => {
|
|
10
|
-
it('should encode flush ERC721 data correctly for v0-v3', () => {
|
|
11
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
12
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
13
|
-
const tokenId = '12345';
|
|
14
|
-
const forwarderVersion = 0;
|
|
15
|
-
const encoded = (0, utils_1.flushERC721TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
16
|
-
should_1.default.exist(encoded);
|
|
17
|
-
encoded.should.startWith('0x5a953d0a'); // flushERC721ForwarderTokens method ID
|
|
18
|
-
encoded.should.be.a.String();
|
|
19
|
-
encoded.length.should.be.greaterThan(10); // method ID + parameters
|
|
20
|
-
});
|
|
21
|
-
it('should encode flush ERC721 data correctly for v4+', () => {
|
|
22
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
23
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
24
|
-
const tokenId = '12345';
|
|
25
|
-
const forwarderVersion = 4;
|
|
26
|
-
const encoded = (0, utils_1.flushERC721TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
27
|
-
should_1.default.exist(encoded);
|
|
28
|
-
encoded.should.startWith('0x159e44d7'); // flushERC721Token method ID (v5)
|
|
29
|
-
encoded.should.be.a.String();
|
|
30
|
-
});
|
|
31
|
-
it('should decode flush ERC721 data correctly for v0-v3', () => {
|
|
32
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
33
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
34
|
-
const tokenId = '12345';
|
|
35
|
-
const forwarderVersion = 2;
|
|
36
|
-
const encoded = (0, utils_1.flushERC721TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
37
|
-
const decoded = (0, utils_1.decodeFlushERC721TokensData)(encoded);
|
|
38
|
-
should_1.default.exist(decoded);
|
|
39
|
-
decoded.forwarderAddress.toLowerCase().should.equal(forwarderAddress.toLowerCase());
|
|
40
|
-
decoded.tokenAddress.toLowerCase().should.equal(tokenAddress.toLowerCase());
|
|
41
|
-
decoded.tokenId.should.equal(tokenId);
|
|
42
|
-
should_1.default.not.exist(decoded.forwarderVersion);
|
|
43
|
-
});
|
|
44
|
-
it('should decode flush ERC721 data correctly for v4+', () => {
|
|
45
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
46
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
47
|
-
const tokenId = '12345';
|
|
48
|
-
const forwarderVersion = 4;
|
|
49
|
-
const encoded = (0, utils_1.flushERC721TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
50
|
-
const decoded = (0, utils_1.decodeFlushERC721TokensData)(encoded, forwarderAddress);
|
|
51
|
-
should_1.default.exist(decoded);
|
|
52
|
-
decoded.forwarderAddress.toLowerCase().should.equal(forwarderAddress.toLowerCase());
|
|
53
|
-
decoded.tokenAddress.toLowerCase().should.equal(tokenAddress.toLowerCase());
|
|
54
|
-
decoded.tokenId.should.equal(tokenId);
|
|
55
|
-
should_1.default.exist(decoded.forwarderVersion);
|
|
56
|
-
should_1.default.equal(decoded.forwarderVersion, 4);
|
|
57
|
-
});
|
|
58
|
-
it('should handle large token IDs for ERC721', () => {
|
|
59
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
60
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
61
|
-
const tokenId = '115792089237316195423570985008687907853269984665640564039457584007913129639935'; // max uint256
|
|
62
|
-
const forwarderVersion = 0;
|
|
63
|
-
const encoded = (0, utils_1.flushERC721TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
64
|
-
const decoded = (0, utils_1.decodeFlushERC721TokensData)(encoded);
|
|
65
|
-
decoded.tokenId.should.equal(tokenId);
|
|
66
|
-
});
|
|
67
|
-
it('should throw error for invalid flush ERC721 data', () => {
|
|
68
|
-
const invalidData = '0x12345678'; // Wrong method ID
|
|
69
|
-
should_1.default.throws(() => {
|
|
70
|
-
(0, utils_1.decodeFlushERC721TokensData)(invalidData);
|
|
71
|
-
}, /Invalid flush ERC721 bytecode/);
|
|
72
|
-
});
|
|
73
|
-
it('should throw error for missing to address in v4+ decode', () => {
|
|
74
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
75
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
76
|
-
const tokenId = '12345';
|
|
77
|
-
const forwarderVersion = 4;
|
|
78
|
-
const encoded = (0, utils_1.flushERC721TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
79
|
-
should_1.default.throws(() => {
|
|
80
|
-
(0, utils_1.decodeFlushERC721TokensData)(encoded); // Missing 'to' parameter
|
|
81
|
-
}, /Missing to address/);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe('ERC1155 Flush Functions', () => {
|
|
85
|
-
it('should encode flush ERC1155 data correctly for v0-v3', () => {
|
|
86
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
87
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
88
|
-
const tokenId = '99999';
|
|
89
|
-
const forwarderVersion = 0;
|
|
90
|
-
const encoded = (0, utils_1.flushERC1155TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
91
|
-
should_1.default.exist(encoded);
|
|
92
|
-
encoded.should.startWith('0xe6bd0aa4'); // flushERC1155ForwarderTokens method ID
|
|
93
|
-
encoded.should.be.a.String();
|
|
94
|
-
encoded.length.should.be.greaterThan(10); // method ID + parameters
|
|
95
|
-
});
|
|
96
|
-
it('should encode flush ERC1155 data correctly for v4+', () => {
|
|
97
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
98
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
99
|
-
const tokenId = '99999';
|
|
100
|
-
const forwarderVersion = 4;
|
|
101
|
-
const encoded = (0, utils_1.flushERC1155TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
102
|
-
should_1.default.exist(encoded);
|
|
103
|
-
encoded.should.startWith('0x8972c17c'); // flushERC1155Tokens method ID (v5)
|
|
104
|
-
encoded.should.be.a.String();
|
|
105
|
-
});
|
|
106
|
-
it('should decode flush ERC1155 data correctly for v0-v3', () => {
|
|
107
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
108
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
109
|
-
const tokenId = '99999';
|
|
110
|
-
const forwarderVersion = 2;
|
|
111
|
-
const encoded = (0, utils_1.flushERC1155TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
112
|
-
const decoded = (0, utils_1.decodeFlushERC1155TokensData)(encoded);
|
|
113
|
-
should_1.default.exist(decoded);
|
|
114
|
-
decoded.forwarderAddress.toLowerCase().should.equal(forwarderAddress.toLowerCase());
|
|
115
|
-
decoded.tokenAddress.toLowerCase().should.equal(tokenAddress.toLowerCase());
|
|
116
|
-
decoded.tokenId.should.equal(tokenId);
|
|
117
|
-
should_1.default.not.exist(decoded.forwarderVersion);
|
|
118
|
-
});
|
|
119
|
-
it('should decode flush ERC1155 data correctly for v4+', () => {
|
|
120
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
121
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
122
|
-
const tokenId = '99999';
|
|
123
|
-
const forwarderVersion = 4;
|
|
124
|
-
const encoded = (0, utils_1.flushERC1155TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
125
|
-
const decoded = (0, utils_1.decodeFlushERC1155TokensData)(encoded, forwarderAddress);
|
|
126
|
-
should_1.default.exist(decoded);
|
|
127
|
-
decoded.forwarderAddress.toLowerCase().should.equal(forwarderAddress.toLowerCase());
|
|
128
|
-
decoded.tokenAddress.toLowerCase().should.equal(tokenAddress.toLowerCase());
|
|
129
|
-
decoded.tokenId.should.equal(tokenId);
|
|
130
|
-
should_1.default.exist(decoded.forwarderVersion);
|
|
131
|
-
should_1.default.equal(decoded.forwarderVersion, 4);
|
|
132
|
-
});
|
|
133
|
-
it('should handle token ID 0 for ERC1155', () => {
|
|
134
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
135
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
136
|
-
const tokenId = '0';
|
|
137
|
-
const forwarderVersion = 0;
|
|
138
|
-
const encoded = (0, utils_1.flushERC1155TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
139
|
-
const decoded = (0, utils_1.decodeFlushERC1155TokensData)(encoded);
|
|
140
|
-
decoded.tokenId.should.equal(tokenId);
|
|
141
|
-
});
|
|
142
|
-
it('should handle large token IDs for ERC1155', () => {
|
|
143
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
144
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
145
|
-
const tokenId = '115792089237316195423570985008687907853269984665640564039457584007913129639935'; // max uint256
|
|
146
|
-
const forwarderVersion = 0;
|
|
147
|
-
const encoded = (0, utils_1.flushERC1155TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
148
|
-
const decoded = (0, utils_1.decodeFlushERC1155TokensData)(encoded);
|
|
149
|
-
decoded.tokenId.should.equal(tokenId);
|
|
150
|
-
});
|
|
151
|
-
it('should throw error for invalid flush ERC1155 data', () => {
|
|
152
|
-
const invalidData = '0x87654321'; // Wrong method ID
|
|
153
|
-
should_1.default.throws(() => {
|
|
154
|
-
(0, utils_1.decodeFlushERC1155TokensData)(invalidData);
|
|
155
|
-
}, /Invalid flush ERC1155 bytecode/);
|
|
156
|
-
});
|
|
157
|
-
it('should throw error for missing to address in v4+ decode', () => {
|
|
158
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
159
|
-
const tokenAddress = '0xdf7decb1baa8f529f0c8982cbb4be50357195299';
|
|
160
|
-
const tokenId = '99999';
|
|
161
|
-
const forwarderVersion = 4;
|
|
162
|
-
const encoded = (0, utils_1.flushERC1155TokensData)(forwarderAddress, tokenAddress, tokenId, forwarderVersion);
|
|
163
|
-
should_1.default.throws(() => {
|
|
164
|
-
(0, utils_1.decodeFlushERC1155TokensData)(encoded); // Missing 'to' parameter
|
|
165
|
-
}, /Missing to address/);
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
describe('Token Address Validation', () => {
|
|
169
|
-
it('should preserve address format in encoding/decoding', () => {
|
|
170
|
-
const forwarderAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
|
|
171
|
-
const tokenAddressChecksum = '0xDf7DECb1bAa8F529F0C8982cBB4Be50357195299'; // With checksum
|
|
172
|
-
const tokenId = '12345';
|
|
173
|
-
const forwarderVersion = 0;
|
|
174
|
-
const encoded721 = (0, utils_1.flushERC721TokensData)(forwarderAddress, tokenAddressChecksum, tokenId, forwarderVersion);
|
|
175
|
-
const decoded721 = (0, utils_1.decodeFlushERC721TokensData)(encoded721);
|
|
176
|
-
// Should preserve the address (though may lowercase it)
|
|
177
|
-
decoded721.tokenAddress.toLowerCase().should.equal(tokenAddressChecksum.toLowerCase());
|
|
178
|
-
const encoded1155 = (0, utils_1.flushERC1155TokensData)(forwarderAddress, tokenAddressChecksum, tokenId, forwarderVersion);
|
|
179
|
-
const decoded1155 = (0, utils_1.decodeFlushERC1155TokensData)(encoded1155);
|
|
180
|
-
decoded1155.tokenAddress.toLowerCase().should.equal(tokenAddressChecksum.toLowerCase());
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsK0NBSzZCO0FBRTdCLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7SUFDbEMsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtRQUN0QyxFQUFFLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1lBQzdELE1BQU0sZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7WUFDdEUsTUFBTSxZQUFZLEdBQUcsNENBQTRDLENBQUM7WUFDbEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1lBRTNCLE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQXFCLEVBQUMsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRWpHLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsdUNBQXVDO1lBQy9FLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM3QixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMseUJBQXlCO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtZQUMzRCxNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO1lBQ3RFLE1BQU0sWUFBWSxHQUFHLDRDQUE0QyxDQUFDO1lBQ2xFLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN4QixNQUFNLGdCQUFnQixH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NEIsRUFBQyxXQUFXLENBQUMsQ0FBQztZQUU5RCxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUMxRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQge1xuICBmbHVzaEVSQzcyMVRva2Vuc0RhdGEsXG4gIGZsdXNoRVJDMTE1NVRva2Vuc0RhdGEsXG4gIGRlY29kZUZsdXNoRVJDNzIxVG9rZW5zRGF0YSxcbiAgZGVjb2RlRmx1c2hFUkMxMTU1VG9rZW5zRGF0YSxcbn0gZnJvbSAnLi4vLi4vc3JjL2xpYi91dGlscyc7XG5cbmRlc2NyaWJlKCdBYnN0cmFjdCBFVEggVXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdFUkM3MjEgRmx1c2ggRnVuY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZW5jb2RlIGZsdXNoIEVSQzcyMSBkYXRhIGNvcnJlY3RseSBmb3IgdjAtdjMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgIGNvbnN0IHRva2VuSWQgPSAnMTIzNDUnO1xuICAgICAgY29uc3QgZm9yd2FyZGVyVmVyc2lvbiA9IDA7XG5cbiAgICAgIGNvbnN0IGVuY29kZWQgPSBmbHVzaEVSQzcyMVRva2Vuc0RhdGEoZm9yd2FyZGVyQWRkcmVzcywgdG9rZW5BZGRyZXNzLCB0b2tlbklkLCBmb3J3YXJkZXJWZXJzaW9uKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGVuY29kZWQpO1xuICAgICAgZW5jb2RlZC5zaG91bGQuc3RhcnRXaXRoKCcweDVhOTUzZDBhJyk7IC8vIGZsdXNoRVJDNzIxRm9yd2FyZGVyVG9rZW5zIG1ldGhvZCBJRFxuICAgICAgZW5jb2RlZC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGVuY29kZWQubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigxMCk7IC8vIG1ldGhvZCBJRCArIHBhcmFtZXRlcnNcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZW5jb2RlIGZsdXNoIEVSQzcyMSBkYXRhIGNvcnJlY3RseSBmb3IgdjQrJywgKCkgPT4ge1xuICAgICAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJzB4ZGY3ZGVjYjFiYWE4ZjUyOWYwYzg5ODJjYmI0YmU1MDM1NzE5NTI5OSc7XG4gICAgICBjb25zdCB0b2tlbklkID0gJzEyMzQ1JztcbiAgICAgIGNvbnN0IGZvcndhcmRlclZlcnNpb24gPSA0O1xuXG4gICAgICBjb25zdCBlbmNvZGVkID0gZmx1c2hFUkM3MjFUb2tlbnNEYXRhKGZvcndhcmRlckFkZHJlc3MsIHRva2VuQWRkcmVzcywgdG9rZW5JZCwgZm9yd2FyZGVyVmVyc2lvbik7XG5cbiAgICAgIHNob3VsZC5leGlzdChlbmNvZGVkKTtcbiAgICAgIGVuY29kZWQuc2hvdWxkLnN0YXJ0V2l0aCgnMHgxNTllNDRkNycpOyAvLyBmbHVzaEVSQzcyMVRva2VuIG1ldGhvZCBJRCAodjUpXG4gICAgICBlbmNvZGVkLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWNvZGUgZmx1c2ggRVJDNzIxIGRhdGEgY29ycmVjdGx5IGZvciB2MC12MycsICgpID0+IHtcbiAgICAgIGNvbnN0IGZvcndhcmRlckFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcbiAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuICAgICAgY29uc3QgdG9rZW5JZCA9ICcxMjM0NSc7XG4gICAgICBjb25zdCBmb3J3YXJkZXJWZXJzaW9uID0gMjtcblxuICAgICAgY29uc3QgZW5jb2RlZCA9IGZsdXNoRVJDNzIxVG9rZW5zRGF0YShmb3J3YXJkZXJBZGRyZXNzLCB0b2tlbkFkZHJlc3MsIHRva2VuSWQsIGZvcndhcmRlclZlcnNpb24pO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUZsdXNoRVJDNzIxVG9rZW5zRGF0YShlbmNvZGVkKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQpO1xuICAgICAgZGVjb2RlZC5mb3J3YXJkZXJBZGRyZXNzLnRvTG93ZXJDYXNlKCkuc2hvdWxkLmVxdWFsKGZvcndhcmRlckFkZHJlc3MudG9Mb3dlckNhc2UoKSk7XG4gICAgICBkZWNvZGVkLnRva2VuQWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbCh0b2tlbkFkZHJlc3MudG9Mb3dlckNhc2UoKSk7XG4gICAgICBkZWNvZGVkLnRva2VuSWQuc2hvdWxkLmVxdWFsKHRva2VuSWQpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChkZWNvZGVkLmZvcndhcmRlclZlcnNpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWNvZGUgZmx1c2ggRVJDNzIxIGRhdGEgY29ycmVjdGx5IGZvciB2NCsnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgIGNvbnN0IHRva2VuSWQgPSAnMTIzNDUnO1xuICAgICAgY29uc3QgZm9yd2FyZGVyVmVyc2lvbiA9IDQ7XG5cbiAgICAgIGNvbnN0IGVuY29kZWQgPSBmbHVzaEVSQzcyMVRva2Vuc0RhdGEoZm9yd2FyZGVyQWRkcmVzcywgdG9rZW5BZGRyZXNzLCB0b2tlbklkLCBmb3J3YXJkZXJWZXJzaW9uKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVGbHVzaEVSQzcyMVRva2Vuc0RhdGEoZW5jb2RlZCwgZm9yd2FyZGVyQWRkcmVzcyk7XG5cbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkKTtcbiAgICAgIGRlY29kZWQuZm9yd2FyZGVyQWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChmb3J3YXJkZXJBZGRyZXNzLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgZGVjb2RlZC50b2tlbkFkZHJlc3MudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwodG9rZW5BZGRyZXNzLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgZGVjb2RlZC50b2tlbklkLnNob3VsZC5lcXVhbCh0b2tlbklkKTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLmZvcndhcmRlclZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKGRlY29kZWQuZm9yd2FyZGVyVmVyc2lvbiwgNCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBsYXJnZSB0b2tlbiBJRHMgZm9yIEVSQzcyMScsICgpID0+IHtcbiAgICAgIGNvbnN0IGZvcndhcmRlckFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcbiAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuICAgICAgY29uc3QgdG9rZW5JZCA9ICcxMTU3OTIwODkyMzczMTYxOTU0MjM1NzA5ODUwMDg2ODc5MDc4NTMyNjk5ODQ2NjU2NDA1NjQwMzk0NTc1ODQwMDc5MTMxMjk2Mzk5MzUnOyAvLyBtYXggdWludDI1NlxuICAgICAgY29uc3QgZm9yd2FyZGVyVmVyc2lvbiA9IDA7XG5cbiAgICAgIGNvbnN0IGVuY29kZWQgPSBmbHVzaEVSQzcyMVRva2Vuc0RhdGEoZm9yd2FyZGVyQWRkcmVzcywgdG9rZW5BZGRyZXNzLCB0b2tlbklkLCBmb3J3YXJkZXJWZXJzaW9uKTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVGbHVzaEVSQzcyMVRva2Vuc0RhdGEoZW5jb2RlZCk7XG5cbiAgICAgIGRlY29kZWQudG9rZW5JZC5zaG91bGQuZXF1YWwodG9rZW5JZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBpbnZhbGlkIGZsdXNoIEVSQzcyMSBkYXRhJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZERhdGEgPSAnMHgxMjM0NTY3OCc7IC8vIFdyb25nIG1ldGhvZCBJRFxuXG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgZGVjb2RlRmx1c2hFUkM3MjFUb2tlbnNEYXRhKGludmFsaWREYXRhKTtcbiAgICAgIH0sIC9JbnZhbGlkIGZsdXNoIEVSQzcyMSBieXRlY29kZS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciBmb3IgbWlzc2luZyB0byBhZGRyZXNzIGluIHY0KyBkZWNvZGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgIGNvbnN0IHRva2VuSWQgPSAnMTIzNDUnO1xuICAgICAgY29uc3QgZm9yd2FyZGVyVmVyc2lvbiA9IDQ7XG5cbiAgICAgIGNvbnN0IGVuY29kZWQgPSBmbHVzaEVSQzcyMVRva2Vuc0RhdGEoZm9yd2FyZGVyQWRkcmVzcywgdG9rZW5BZGRyZXNzLCB0b2tlbklkLCBmb3J3YXJkZXJWZXJzaW9uKTtcblxuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAgIGRlY29kZUZsdXNoRVJDNzIxVG9rZW5zRGF0YShlbmNvZGVkKTsgLy8gTWlzc2luZyAndG8nIHBhcmFtZXRlclxuICAgICAgfSwgL01pc3NpbmcgdG8gYWRkcmVzcy8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRVJDMTE1NSBGbHVzaCBGdW5jdGlvbnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgZmx1c2ggRVJDMTE1NSBkYXRhIGNvcnJlY3RseSBmb3IgdjAtdjMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgIGNvbnN0IHRva2VuSWQgPSAnOTk5OTknO1xuICAgICAgY29uc3QgZm9yd2FyZGVyVmVyc2lvbiA9IDA7XG5cbiAgICAgIGNvbnN0IGVuY29kZWQgPSBmbHVzaEVSQzExNTVUb2tlbnNEYXRhKGZvcndhcmRlckFkZHJlc3MsIHRva2VuQWRkcmVzcywgdG9rZW5JZCwgZm9yd2FyZGVyVmVyc2lvbik7XG5cbiAgICAgIHNob3VsZC5leGlzdChlbmNvZGVkKTtcbiAgICAgIGVuY29kZWQuc2hvdWxkLnN0YXJ0V2l0aCgnMHhlNmJkMGFhNCcpOyAvLyBmbHVzaEVSQzExNTVGb3J3YXJkZXJUb2tlbnMgbWV0aG9kIElEXG4gICAgICBlbmNvZGVkLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgICAgZW5jb2RlZC5sZW5ndGguc2hvdWxkLmJlLmdyZWF0ZXJUaGFuKDEwKTsgLy8gbWV0aG9kIElEICsgcGFyYW1ldGVyc1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgZmx1c2ggRVJDMTE1NSBkYXRhIGNvcnJlY3RseSBmb3IgdjQrJywgKCkgPT4ge1xuICAgICAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJzB4ZGY3ZGVjYjFiYWE4ZjUyOWYwYzg5ODJjYmI0YmU1MDM1NzE5NTI5OSc7XG4gICAgICBjb25zdCB0b2tlbklkID0gJzk5OTk5JztcbiAgICAgIGNvbnN0IGZvcndhcmRlclZlcnNpb24gPSA0O1xuXG4gICAgICBjb25zdCBlbmNvZGVkID0gZmx1c2hFUkMxMTU1VG9rZW5zRGF0YShmb3J3YXJkZXJBZGRyZXNzLCB0b2tlbkFkZHJlc3MsIHRva2VuSWQsIGZvcndhcmRlclZlcnNpb24pO1xuXG4gICAgICBzaG91bGQuZXhpc3QoZW5jb2RlZCk7XG4gICAgICBlbmNvZGVkLnNob3VsZC5zdGFydFdpdGgoJzB4ODk3MmMxN2MnKTsgLy8gZmx1c2hFUkMxMTU1VG9rZW5zIG1ldGhvZCBJRCAodjUpXG4gICAgICBlbmNvZGVkLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWNvZGUgZmx1c2ggRVJDMTE1NSBkYXRhIGNvcnJlY3RseSBmb3IgdjAtdjMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBmb3J3YXJkZXJBZGRyZXNzID0gJzB4OGY5NzdlOTEyZWY1MDA1NDhhMGMzYmU2ZGRkZTk4OTlmMTE5OWI4MSc7XG4gICAgICBjb25zdCB0b2tlbkFkZHJlc3MgPSAnMHhkZjdkZWNiMWJhYThmNTI5ZjBjODk4MmNiYjRiZTUwMzU3MTk1Mjk5JztcbiAgICAgIGNvbnN0IHRva2VuSWQgPSAnOTk5OTknO1xuICAgICAgY29uc3QgZm9yd2FyZGVyVmVyc2lvbiA9IDI7XG5cbiAgICAgIGNvbnN0IGVuY29kZWQgPSBmbHVzaEVSQzExNTVUb2tlbnNEYXRhKGZvcndhcmRlckFkZHJlc3MsIHRva2VuQWRkcmVzcywgdG9rZW5JZCwgZm9yd2FyZGVyVmVyc2lvbik7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlRmx1c2hFUkMxMTU1VG9rZW5zRGF0YShlbmNvZGVkKTtcblxuICAgICAgc2hvdWxkLmV4aXN0KGRlY29kZWQpO1xuICAgICAgZGVjb2RlZC5mb3J3YXJkZXJBZGRyZXNzLnRvTG93ZXJDYXNlKCkuc2hvdWxkLmVxdWFsKGZvcndhcmRlckFkZHJlc3MudG9Mb3dlckNhc2UoKSk7XG4gICAgICBkZWNvZGVkLnRva2VuQWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbCh0b2tlbkFkZHJlc3MudG9Mb3dlckNhc2UoKSk7XG4gICAgICBkZWNvZGVkLnRva2VuSWQuc2hvdWxkLmVxdWFsKHRva2VuSWQpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChkZWNvZGVkLmZvcndhcmRlclZlcnNpb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBkZWNvZGUgZmx1c2ggRVJDMTE1NSBkYXRhIGNvcnJlY3RseSBmb3IgdjQrJywgKCkgPT4ge1xuICAgICAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJzB4ZGY3ZGVjYjFiYWE4ZjUyOWYwYzg5ODJjYmI0YmU1MDM1NzE5NTI5OSc7XG4gICAgICBjb25zdCB0b2tlbklkID0gJzk5OTk5JztcbiAgICAgIGNvbnN0IGZvcndhcmRlclZlcnNpb24gPSA0O1xuXG4gICAgICBjb25zdCBlbmNvZGVkID0gZmx1c2hFUkMxMTU1VG9rZW5zRGF0YShmb3J3YXJkZXJBZGRyZXNzLCB0b2tlbkFkZHJlc3MsIHRva2VuSWQsIGZvcndhcmRlclZlcnNpb24pO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZUZsdXNoRVJDMTE1NVRva2Vuc0RhdGEoZW5jb2RlZCwgZm9yd2FyZGVyQWRkcmVzcyk7XG5cbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkKTtcbiAgICAgIGRlY29kZWQuZm9yd2FyZGVyQWRkcmVzcy50b0xvd2VyQ2FzZSgpLnNob3VsZC5lcXVhbChmb3J3YXJkZXJBZGRyZXNzLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgZGVjb2RlZC50b2tlbkFkZHJlc3MudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwodG9rZW5BZGRyZXNzLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgZGVjb2RlZC50b2tlbklkLnNob3VsZC5lcXVhbCh0b2tlbklkKTtcbiAgICAgIHNob3VsZC5leGlzdChkZWNvZGVkLmZvcndhcmRlclZlcnNpb24pO1xuICAgICAgc2hvdWxkLmVxdWFsKGRlY29kZWQuZm9yd2FyZGVyVmVyc2lvbiwgNCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB0b2tlbiBJRCAwIGZvciBFUkMxMTU1JywgKCkgPT4ge1xuICAgICAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgY29uc3QgdG9rZW5BZGRyZXNzID0gJzB4ZGY3ZGVjYjFiYWE4ZjUyOWYwYzg5ODJjYmI0YmU1MDM1NzE5NTI5OSc7XG4gICAgICBjb25zdCB0b2tlbklkID0gJzAnO1xuICAgICAgY29uc3QgZm9yd2FyZGVyVmVyc2lvbiA9IDA7XG5cbiAgICAgIGNvbnN0IGVuY29kZWQgPSBmbHVzaEVSQzExNTVUb2tlbnNEYXRhKGZvcndhcmRlckFkZHJlc3MsIHRva2VuQWRkcmVzcywgdG9rZW5JZCwgZm9yd2FyZGVyVmVyc2lvbik7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlRmx1c2hFUkMxMTU1VG9rZW5zRGF0YShlbmNvZGVkKTtcblxuICAgICAgZGVjb2RlZC50b2tlbklkLnNob3VsZC5lcXVhbCh0b2tlbklkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGxhcmdlIHRva2VuIElEcyBmb3IgRVJDMTE1NScsICgpID0+IHtcbiAgICAgIGNvbnN0IGZvcndhcmRlckFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcbiAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuICAgICAgY29uc3QgdG9rZW5JZCA9ICcxMTU3OTIwODkyMzczMTYxOTU0MjM1NzA5ODUwMDg2ODc5MDc4NTMyNjk5ODQ2NjU2NDA1NjQwMzk0NTc1ODQwMDc5MTMxMjk2Mzk5MzUnOyAvLyBtYXggdWludDI1NlxuICAgICAgY29uc3QgZm9yd2FyZGVyVmVyc2lvbiA9IDA7XG5cbiAgICAgIGNvbnN0IGVuY29kZWQgPSBmbHVzaEVSQzExNTVUb2tlbnNEYXRhKGZvcndhcmRlckFkZHJlc3MsIHRva2VuQWRkcmVzcywgdG9rZW5JZCwgZm9yd2FyZGVyVmVyc2lvbik7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlRmx1c2hFUkMxMTU1VG9rZW5zRGF0YShlbmNvZGVkKTtcblxuICAgICAgZGVjb2RlZC50b2tlbklkLnNob3VsZC5lcXVhbCh0b2tlbklkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgZm9yIGludmFsaWQgZmx1c2ggRVJDMTE1NSBkYXRhJywgKCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZERhdGEgPSAnMHg4NzY1NDMyMSc7IC8vIFdyb25nIG1ldGhvZCBJRFxuXG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgZGVjb2RlRmx1c2hFUkMxMTU1VG9rZW5zRGF0YShpbnZhbGlkRGF0YSk7XG4gICAgICB9LCAvSW52YWxpZCBmbHVzaCBFUkMxMTU1IGJ5dGVjb2RlLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yIGZvciBtaXNzaW5nIHRvIGFkZHJlc3MgaW4gdjQrIGRlY29kZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGZvcndhcmRlckFkZHJlc3MgPSAnMHg4Zjk3N2U5MTJlZjUwMDU0OGEwYzNiZTZkZGRlOTg5OWYxMTk5YjgxJztcbiAgICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9ICcweGRmN2RlY2IxYmFhOGY1MjlmMGM4OTgyY2JiNGJlNTAzNTcxOTUyOTknO1xuICAgICAgY29uc3QgdG9rZW5JZCA9ICc5OTk5OSc7XG4gICAgICBjb25zdCBmb3J3YXJkZXJWZXJzaW9uID0gNDtcblxuICAgICAgY29uc3QgZW5jb2RlZCA9IGZsdXNoRVJDMTE1NVRva2Vuc0RhdGEoZm9yd2FyZGVyQWRkcmVzcywgdG9rZW5BZGRyZXNzLCB0b2tlbklkLCBmb3J3YXJkZXJWZXJzaW9uKTtcblxuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiB7XG4gICAgICAgIGRlY29kZUZsdXNoRVJDMTE1NVRva2Vuc0RhdGEoZW5jb2RlZCk7IC8vIE1pc3NpbmcgJ3RvJyBwYXJhbWV0ZXJcbiAgICAgIH0sIC9NaXNzaW5nIHRvIGFkZHJlc3MvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1Rva2VuIEFkZHJlc3MgVmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIGFkZHJlc3MgZm9ybWF0IGluIGVuY29kaW5nL2RlY29kaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgZm9yd2FyZGVyQWRkcmVzcyA9ICcweDhmOTc3ZTkxMmVmNTAwNTQ4YTBjM2JlNmRkZGU5ODk5ZjExOTliODEnO1xuICAgICAgY29uc3QgdG9rZW5BZGRyZXNzQ2hlY2tzdW0gPSAnMHhEZjdERUNiMWJBYThGNTI5RjBDODk4MmNCQjRCZTUwMzU3MTk1Mjk5JzsgLy8gV2l0aCBjaGVja3N1bVxuICAgICAgY29uc3QgdG9rZW5JZCA9ICcxMjM0NSc7XG4gICAgICBjb25zdCBmb3J3YXJkZXJWZXJzaW9uID0gMDtcblxuICAgICAgY29uc3QgZW5jb2RlZDcyMSA9IGZsdXNoRVJDNzIxVG9rZW5zRGF0YShmb3J3YXJkZXJBZGRyZXNzLCB0b2tlbkFkZHJlc3NDaGVja3N1bSwgdG9rZW5JZCwgZm9yd2FyZGVyVmVyc2lvbik7XG4gICAgICBjb25zdCBkZWNvZGVkNzIxID0gZGVjb2RlRmx1c2hFUkM3MjFUb2tlbnNEYXRhKGVuY29kZWQ3MjEpO1xuXG4gICAgICAvLyBTaG91bGQgcHJlc2VydmUgdGhlIGFkZHJlc3MgKHRob3VnaCBtYXkgbG93ZXJjYXNlIGl0KVxuICAgICAgZGVjb2RlZDcyMS50b2tlbkFkZHJlc3MudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwodG9rZW5BZGRyZXNzQ2hlY2tzdW0udG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgIGNvbnN0IGVuY29kZWQxMTU1ID0gZmx1c2hFUkMxMTU1VG9rZW5zRGF0YShmb3J3YXJkZXJBZGRyZXNzLCB0b2tlbkFkZHJlc3NDaGVja3N1bSwgdG9rZW5JZCwgZm9yd2FyZGVyVmVyc2lvbik7XG4gICAgICBjb25zdCBkZWNvZGVkMTE1NSA9IGRlY29kZUZsdXNoRVJDMTE1NVRva2Vuc0RhdGEoZW5jb2RlZDExNTUpO1xuXG4gICAgICBkZWNvZGVkMTE1NS50b2tlbkFkZHJlc3MudG9Mb3dlckNhc2UoKS5zaG91bGQuZXF1YWwodG9rZW5BZGRyZXNzQ2hlY2tzdW0udG9Mb3dlckNhc2UoKSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|