@bitgo-beta/sdk-coin-baby 1.0.1-beta.81 → 1.0.1-beta.811
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/dist/src/baby.d.ts +2 -1
- package/dist/src/baby.d.ts.map +1 -1
- package/dist/src/baby.js +3 -2
- package/dist/src/lib/BabylonTransaction.d.ts +9 -0
- package/dist/src/lib/BabylonTransaction.d.ts.map +1 -0
- package/dist/src/lib/BabylonTransaction.js +87 -0
- package/dist/src/lib/CustomTransactionBuilder.d.ts +14 -0
- package/dist/src/lib/CustomTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/CustomTransactionBuilder.js +37 -0
- package/dist/src/lib/EpochedStakingActivateBuilder.d.ts +7 -0
- package/dist/src/lib/EpochedStakingActivateBuilder.d.ts.map +1 -0
- package/dist/src/lib/EpochedStakingActivateBuilder.js +48 -0
- package/dist/src/lib/EpochedStakingDeactivateBuilder.d.ts +7 -0
- package/dist/src/lib/EpochedStakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/src/lib/EpochedStakingDeactivateBuilder.js +48 -0
- package/dist/src/lib/EpochedStakingRedelegateBuilder.d.ts +7 -0
- package/dist/src/lib/EpochedStakingRedelegateBuilder.d.ts.map +1 -0
- package/dist/src/lib/EpochedStakingRedelegateBuilder.js +48 -0
- package/dist/src/lib/constants.d.ts +6 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +11 -3
- package/dist/src/lib/iface.d.ts +10 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +3 -0
- package/dist/src/lib/index.d.ts +4 -1
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +10 -3
- package/dist/src/lib/transactionBuilderFactory.d.ts +10 -8
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +15 -5
- package/dist/src/lib/utils.d.ts +25 -2
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +155 -2
- package/dist/test/resources/baby.d.ts +397 -0
- package/dist/test/resources/baby.d.ts.map +1 -0
- package/dist/test/resources/baby.js +413 -0
- package/dist/test/unit/baby.d.ts +2 -0
- package/dist/test/unit/baby.d.ts.map +1 -0
- package/dist/test/unit/baby.js +259 -0
- package/dist/test/unit/getBuilderFactory.d.ts +3 -0
- package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/getBuilderFactory.js +10 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +93 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +143 -0
- package/dist/test/unit/transactionBuilder/CustomTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/CustomTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/CustomTransactionBuilder.js +124 -0
- package/dist/test/unit/transactionBuilder/StakingActivateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/StakingActivateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/StakingActivateBuilder.js +154 -0
- package/dist/test/unit/transactionBuilder/StakingDeactivateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/StakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/StakingDeactivateBuilder.js +153 -0
- package/dist/test/unit/transactionBuilder/StakingRedelegateBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/StakingRedelegateBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/StakingRedelegateBuilder.js +93 -0
- package/dist/test/unit/transactionBuilder/StakingWithdrawRewardsBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/StakingWithdrawRewardsBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/StakingWithdrawRewardsBuilder.js +154 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transactionBuilder.js +124 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder/transferBuilder.js +212 -0
- package/dist/test/unit/utils.d.ts +2 -0
- package/dist/test/unit/utils.d.ts.map +1 -0
- package/dist/test/unit/utils.js +84 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +16 -10
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -42
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
40
|
+
const encoding_1 = require("@cosmjs/encoding");
|
|
41
|
+
const should_1 = __importDefault(require("should"));
|
|
42
|
+
const testData = __importStar(require("../../resources/baby"));
|
|
43
|
+
const getBuilderFactory_1 = require("../getBuilderFactory");
|
|
44
|
+
describe('Baby Transfer Builder', () => {
|
|
45
|
+
const factory = (0, getBuilderFactory_1.getBuilderFactory)('tbaby');
|
|
46
|
+
const testTx = testData.TEST_SEND_TX;
|
|
47
|
+
const testTx2 = testData.TEST_SEND_TX2;
|
|
48
|
+
const testTxWithMemo = testData.TEST_TX_WITH_MEMO;
|
|
49
|
+
it('should build a Transfer tx with signature', async function () {
|
|
50
|
+
const txBuilder = factory.getTransferBuilder();
|
|
51
|
+
txBuilder.sequence(testTx.sequence);
|
|
52
|
+
txBuilder.gasBudget(testTx.gasBudget);
|
|
53
|
+
txBuilder.messages([testTx.sendMessage.value]);
|
|
54
|
+
txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
|
|
55
|
+
txBuilder.addSignature({ pub: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)) }, Buffer.from(testTx.signature, 'base64'));
|
|
56
|
+
const tx = await txBuilder.build();
|
|
57
|
+
const json = await (await txBuilder.build()).toJson();
|
|
58
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
59
|
+
should_1.default.deepEqual(json.gasBudget, testTx.gasBudget);
|
|
60
|
+
should_1.default.deepEqual(json.sendMessages, [testTx.sendMessage]);
|
|
61
|
+
should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
|
|
62
|
+
should_1.default.deepEqual(json.sequence, testTx.sequence);
|
|
63
|
+
const rawTx = tx.toBroadcastFormat();
|
|
64
|
+
should_1.default.equal(rawTx, testTx.signedTxBase64);
|
|
65
|
+
should_1.default.deepEqual(tx.inputs, [
|
|
66
|
+
{
|
|
67
|
+
address: testData.TEST_SEND_TX.sender,
|
|
68
|
+
value: testData.TEST_SEND_TX.sendMessage.value.amount[0].amount,
|
|
69
|
+
coin: 'tbaby',
|
|
70
|
+
},
|
|
71
|
+
]);
|
|
72
|
+
should_1.default.deepEqual(tx.outputs, [
|
|
73
|
+
{
|
|
74
|
+
address: testData.TEST_SEND_TX.sendMessage.value.toAddress,
|
|
75
|
+
value: testData.TEST_SEND_TX.sendMessage.value.amount[0].amount,
|
|
76
|
+
coin: 'tbaby',
|
|
77
|
+
},
|
|
78
|
+
]);
|
|
79
|
+
});
|
|
80
|
+
it('should build a Transfer tx with signature and memo', async function () {
|
|
81
|
+
const txBuilder = factory.getTransferBuilder();
|
|
82
|
+
txBuilder.sequence(testTxWithMemo.sequence);
|
|
83
|
+
txBuilder.gasBudget(testTxWithMemo.gasBudget);
|
|
84
|
+
txBuilder.messages([testTxWithMemo.sendMessage.value]);
|
|
85
|
+
txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTxWithMemo.pubKey)));
|
|
86
|
+
txBuilder.memo(testTxWithMemo.memo);
|
|
87
|
+
txBuilder.addSignature({ pub: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTxWithMemo.pubKey)) }, Buffer.from(testTxWithMemo.signature, 'base64'));
|
|
88
|
+
const tx = await txBuilder.build();
|
|
89
|
+
const json = await (await txBuilder.build()).toJson();
|
|
90
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
91
|
+
should_1.default.deepEqual(json.gasBudget, testTxWithMemo.gasBudget);
|
|
92
|
+
should_1.default.deepEqual(json.sendMessages, [testTxWithMemo.sendMessage]);
|
|
93
|
+
should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTxWithMemo.pubKey)));
|
|
94
|
+
should_1.default.deepEqual(json.sequence, testTxWithMemo.sequence);
|
|
95
|
+
should_1.default.equal(json.memo, testTxWithMemo.memo);
|
|
96
|
+
const rawTx = tx.toBroadcastFormat();
|
|
97
|
+
should_1.default.equal(rawTx, testTxWithMemo.signedTxBase64);
|
|
98
|
+
should_1.default.deepEqual(tx.inputs, [
|
|
99
|
+
{
|
|
100
|
+
address: testTxWithMemo.sendMessage.value.fromAddress,
|
|
101
|
+
value: testTxWithMemo.sendMessage.value.amount[0].amount,
|
|
102
|
+
coin: 'tbaby',
|
|
103
|
+
},
|
|
104
|
+
]);
|
|
105
|
+
should_1.default.deepEqual(tx.outputs, [
|
|
106
|
+
{
|
|
107
|
+
address: testTxWithMemo.sendMessage.value.toAddress,
|
|
108
|
+
value: testTxWithMemo.sendMessage.value.amount[0].amount,
|
|
109
|
+
coin: 'tbaby',
|
|
110
|
+
},
|
|
111
|
+
]);
|
|
112
|
+
});
|
|
113
|
+
it('should build a Transfer tx without signature', async function () {
|
|
114
|
+
const txBuilder = factory.getTransferBuilder();
|
|
115
|
+
txBuilder.sequence(testTx.sequence);
|
|
116
|
+
txBuilder.gasBudget(testTx.gasBudget);
|
|
117
|
+
txBuilder.messages([testTx.sendMessage.value]);
|
|
118
|
+
txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
|
|
119
|
+
const tx = await txBuilder.build();
|
|
120
|
+
const json = await (await txBuilder.build()).toJson();
|
|
121
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
122
|
+
should_1.default.deepEqual(json.gasBudget, testTx.gasBudget);
|
|
123
|
+
should_1.default.deepEqual(json.sendMessages, [testTx.sendMessage]);
|
|
124
|
+
should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx.pubKey)));
|
|
125
|
+
should_1.default.deepEqual(json.sequence, testTx.sequence);
|
|
126
|
+
tx.toBroadcastFormat();
|
|
127
|
+
should_1.default.deepEqual(tx.inputs, [
|
|
128
|
+
{
|
|
129
|
+
address: testData.TEST_SEND_TX.sender,
|
|
130
|
+
value: testData.TEST_SEND_TX.sendMessage.value.amount[0].amount,
|
|
131
|
+
coin: 'tbaby',
|
|
132
|
+
},
|
|
133
|
+
]);
|
|
134
|
+
should_1.default.deepEqual(tx.outputs, [
|
|
135
|
+
{
|
|
136
|
+
address: testData.TEST_SEND_TX.sendMessage.value.toAddress,
|
|
137
|
+
value: testData.TEST_SEND_TX.sendMessage.value.amount[0].amount,
|
|
138
|
+
coin: 'tbaby',
|
|
139
|
+
},
|
|
140
|
+
]);
|
|
141
|
+
});
|
|
142
|
+
it('should sign a Transfer tx', async function () {
|
|
143
|
+
const txBuilder = factory.getTransferBuilder();
|
|
144
|
+
txBuilder.sequence(testTx2.sequence);
|
|
145
|
+
txBuilder.gasBudget(testTx2.gasBudget);
|
|
146
|
+
txBuilder.messages([testTx2.sendMessage.value]);
|
|
147
|
+
txBuilder.accountNumber(testTx2.accountNumber);
|
|
148
|
+
txBuilder.chainId(testTx2.chainId);
|
|
149
|
+
txBuilder.sign({ key: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx2.privateKey)) });
|
|
150
|
+
const tx = await txBuilder.build();
|
|
151
|
+
const json = await (await txBuilder.build()).toJson();
|
|
152
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
153
|
+
should_1.default.deepEqual(json.gasBudget, testTx2.gasBudget);
|
|
154
|
+
should_1.default.deepEqual(json.sendMessages, [testTx2.sendMessage]);
|
|
155
|
+
should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx2.pubKey)));
|
|
156
|
+
should_1.default.deepEqual(json.sequence, testTx2.sequence);
|
|
157
|
+
const rawTx = tx.toBroadcastFormat();
|
|
158
|
+
should_1.default.equal(tx.signature[0], (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testTx2.signature)));
|
|
159
|
+
should_1.default.equal(rawTx, testTx2.signedTxBase64);
|
|
160
|
+
should_1.default.deepEqual(tx.inputs, [
|
|
161
|
+
{
|
|
162
|
+
address: testData.TEST_SEND_TX2.sender,
|
|
163
|
+
value: testData.TEST_SEND_TX2.sendMessage.value.amount[0].amount,
|
|
164
|
+
coin: 'tbaby',
|
|
165
|
+
},
|
|
166
|
+
]);
|
|
167
|
+
should_1.default.deepEqual(tx.outputs, [
|
|
168
|
+
{
|
|
169
|
+
address: testData.TEST_SEND_TX2.sendMessage.value.toAddress,
|
|
170
|
+
value: testData.TEST_SEND_TX2.sendMessage.value.amount[0].amount,
|
|
171
|
+
coin: 'tbaby',
|
|
172
|
+
},
|
|
173
|
+
]);
|
|
174
|
+
});
|
|
175
|
+
it('should build a sendMany Transfer tx', async function () {
|
|
176
|
+
const testSendManyTx = testData.TEST_SEND_MANY_TX;
|
|
177
|
+
const txBuilder = factory.getTransferBuilder();
|
|
178
|
+
txBuilder.sequence(testSendManyTx.sequence);
|
|
179
|
+
txBuilder.gasBudget(testSendManyTx.gasBudget);
|
|
180
|
+
txBuilder.messages(testSendManyTx.sendMessages.map((msg) => msg.value));
|
|
181
|
+
txBuilder.publicKey((0, encoding_1.toHex)((0, encoding_1.fromBase64)(testSendManyTx.pubKey)));
|
|
182
|
+
txBuilder.chainId(testSendManyTx.chainId);
|
|
183
|
+
txBuilder.accountNumber(testSendManyTx.accountNumber);
|
|
184
|
+
txBuilder.memo(testSendManyTx.memo);
|
|
185
|
+
txBuilder.addSignature({ pub: (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testSendManyTx.pubKey)) }, Buffer.from(testSendManyTx.signature, 'base64'));
|
|
186
|
+
const tx = await txBuilder.build();
|
|
187
|
+
const json = await (await txBuilder.build()).toJson();
|
|
188
|
+
should_1.default.equal(tx.type, sdk_core_1.TransactionType.Send);
|
|
189
|
+
should_1.default.deepEqual(json.gasBudget, testSendManyTx.gasBudget);
|
|
190
|
+
should_1.default.deepEqual(json.sendMessages, testSendManyTx.sendMessages);
|
|
191
|
+
should_1.default.deepEqual(json.publicKey, (0, encoding_1.toHex)((0, encoding_1.fromBase64)(testSendManyTx.pubKey)));
|
|
192
|
+
should_1.default.deepEqual(json.sequence, testSendManyTx.sequence);
|
|
193
|
+
should_1.default.deepEqual(tx.inputs, testSendManyTx.sendMessages.map((msg) => {
|
|
194
|
+
return {
|
|
195
|
+
address: msg.value.fromAddress,
|
|
196
|
+
value: msg.value.amount[0].amount,
|
|
197
|
+
coin: 'tbaby',
|
|
198
|
+
};
|
|
199
|
+
}));
|
|
200
|
+
should_1.default.deepEqual(tx.outputs, testSendManyTx.sendMessages.map((msg) => {
|
|
201
|
+
return {
|
|
202
|
+
address: msg.value.toAddress,
|
|
203
|
+
value: msg.value.amount[0].amount,
|
|
204
|
+
coin: 'tbaby',
|
|
205
|
+
};
|
|
206
|
+
}));
|
|
207
|
+
should_1.default.equal(tx.id, testSendManyTx.hash);
|
|
208
|
+
const rawTx = tx.toBroadcastFormat();
|
|
209
|
+
should_1.default.equal(rawTx, testSendManyTx.signedTxBase64);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmZXJCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L3RyYW5zYWN0aW9uQnVpbGRlci90cmFuc2ZlckJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBdUQ7QUFDdkQsK0NBQXFEO0FBQ3JELG9EQUE0QjtBQUM1QiwrREFBaUQ7QUFDakQsNERBQXlEO0FBRXpELFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUU7SUFDckMsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQ3JDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7SUFDdkMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDO0lBQ2xELEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxLQUFLO1FBQ25ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0MsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFBLGdCQUFLLEVBQUMsSUFBQSxxQkFBVSxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFBLGdCQUFLLEVBQUMsSUFBQSxxQkFBVSxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFM0csTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLGdCQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELGdCQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMxRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUEsZ0JBQUssRUFBQyxJQUFBLHFCQUFVLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNDLGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDMUI7Z0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTTtnQkFDckMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDL0QsSUFBSSxFQUFFLE9BQU87YUFDZDtTQUNGLENBQUMsQ0FBQztRQUNILGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDM0I7Z0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTO2dCQUMxRCxLQUFLLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO2dCQUMvRCxJQUFJLEVBQUUsT0FBTzthQUNkO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUUsS0FBSztRQUM1RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxTQUFTLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBQSxnQkFBSyxFQUFDLElBQUEscUJBQVUsRUFBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLFNBQVMsQ0FBQyxZQUFZLENBQ3BCLEVBQUUsR0FBRyxFQUFFLElBQUEsZ0JBQUssRUFBQyxJQUFBLHFCQUFVLEVBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFDakQsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUNoRCxDQUFDO1FBRUYsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLGdCQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNELGdCQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNsRSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUEsZ0JBQUssRUFBQyxJQUFBLHFCQUFVLEVBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDMUI7Z0JBQ0UsT0FBTyxFQUFFLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFdBQVc7Z0JBQ3JELEtBQUssRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDeEQsSUFBSSxFQUFFLE9BQU87YUFDZDtTQUNGLENBQUMsQ0FBQztRQUNILGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDM0I7Z0JBQ0UsT0FBTyxFQUFFLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVM7Z0JBQ25ELEtBQUssRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDeEQsSUFBSSxFQUFFLE9BQU87YUFDZDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEtBQUs7UUFDdEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUEsZ0JBQUssRUFBQyxJQUFBLHFCQUFVLEVBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzFELGdCQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBQSxnQkFBSyxFQUFDLElBQUEscUJBQVUsRUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25FLGdCQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3ZCLGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDMUI7Z0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsTUFBTTtnQkFDckMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDL0QsSUFBSSxFQUFFLE9BQU87YUFDZDtTQUNGLENBQUMsQ0FBQztRQUNILGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDM0I7Z0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTO2dCQUMxRCxLQUFLLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO2dCQUMvRCxJQUFJLEVBQUUsT0FBTzthQUNkO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkJBQTJCLEVBQUUsS0FBSztRQUNuQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hELFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBQSxnQkFBSyxFQUFDLElBQUEscUJBQVUsRUFBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0QsTUFBTSxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLGdCQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELGdCQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMzRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUEsZ0JBQUssRUFBQyxJQUFBLHFCQUFVLEVBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUEsZ0JBQUssRUFBQyxJQUFBLHFCQUFVLEVBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUU7WUFDMUI7Z0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTTtnQkFDdEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDaEUsSUFBSSxFQUFFLE9BQU87YUFDZDtTQUNGLENBQUMsQ0FBQztRQUNILGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDM0I7Z0JBQ0UsT0FBTyxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTO2dCQUMzRCxLQUFLLEVBQUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO2dCQUNoRSxJQUFJLEVBQUUsT0FBTzthQUNkO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscUNBQXFDLEVBQUUsS0FBSztRQUM3QyxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDeEUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFBLGdCQUFLLEVBQUMsSUFBQSxxQkFBVSxFQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsU0FBUyxDQUFDLFlBQVksQ0FDcEIsRUFBRSxHQUFHLEVBQUUsSUFBQSxnQkFBSyxFQUFDLElBQUEscUJBQVUsRUFBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNqRCxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQ2hELENBQUM7UUFFRixNQUFNLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLDBCQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakUsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFBLGdCQUFLLEVBQUMsSUFBQSxxQkFBVSxFQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsZ0JBQU0sQ0FBQyxTQUFTLENBQ2QsRUFBRSxDQUFDLE1BQU0sRUFDVCxjQUFjLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3RDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVztnQkFDOUIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQ2pDLElBQUksRUFBRSxPQUFPO2FBQ2QsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDRixnQkFBTSxDQUFDLFNBQVMsQ0FDZCxFQUFFLENBQUMsT0FBTyxFQUNWLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdEMsT0FBTztnQkFDTCxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTO2dCQUM1QixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtnQkFDakMsSUFBSSxFQUFFLE9BQU87YUFDZCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNGLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGZyb21CYXNlNjQsIHRvSGV4IH0gZnJvbSAnQGNvc21qcy9lbmNvZGluZyc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvYmFieSc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4uL2dldEJ1aWxkZXJGYWN0b3J5JztcblxuZGVzY3JpYmUoJ0JhYnkgVHJhbnNmZXIgQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCd0YmFieScpO1xuICBjb25zdCB0ZXN0VHggPSB0ZXN0RGF0YS5URVNUX1NFTkRfVFg7XG4gIGNvbnN0IHRlc3RUeDIgPSB0ZXN0RGF0YS5URVNUX1NFTkRfVFgyO1xuICBjb25zdCB0ZXN0VHhXaXRoTWVtbyA9IHRlc3REYXRhLlRFU1RfVFhfV0lUSF9NRU1PO1xuICBpdCgnc2hvdWxkIGJ1aWxkIGEgVHJhbnNmZXIgdHggd2l0aCBzaWduYXR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2UodGVzdFR4LnNlcXVlbmNlKTtcbiAgICB0eEJ1aWxkZXIuZ2FzQnVkZ2V0KHRlc3RUeC5nYXNCdWRnZXQpO1xuICAgIHR4QnVpbGRlci5tZXNzYWdlcyhbdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlXSk7XG4gICAgdHhCdWlsZGVyLnB1YmxpY0tleSh0b0hleChmcm9tQmFzZTY0KHRlc3RUeC5wdWJLZXkpKSk7XG4gICAgdHhCdWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHgucHViS2V5KSkgfSwgQnVmZmVyLmZyb20odGVzdFR4LnNpZ25hdHVyZSwgJ2Jhc2U2NCcpKTtcblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uZ2FzQnVkZ2V0LCB0ZXN0VHguZ2FzQnVkZ2V0KTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VuZE1lc3NhZ2VzLCBbdGVzdFR4LnNlbmRNZXNzYWdlXSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnB1YmxpY0tleSwgdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHgucHViS2V5KSkpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZXF1ZW5jZSwgdGVzdFR4LnNlcXVlbmNlKTtcbiAgICBjb25zdCByYXdUeCA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0VHguc2lnbmVkVHhCYXNlNjQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwodHguaW5wdXRzLCBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLlRFU1RfU0VORF9UWC5zZW5kZXIsXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5URVNUX1NFTkRfVFguc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgY29pbjogJ3RiYWJ5JyxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5vdXRwdXRzLCBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLlRFU1RfU0VORF9UWC5zZW5kTWVzc2FnZS52YWx1ZS50b0FkZHJlc3MsXG4gICAgICAgIHZhbHVlOiB0ZXN0RGF0YS5URVNUX1NFTkRfVFguc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgY29pbjogJ3RiYWJ5JyxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYnVpbGQgYSBUcmFuc2ZlciB0eCB3aXRoIHNpZ25hdHVyZSBhbmQgbWVtbycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldFRyYW5zZmVyQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5zZXF1ZW5jZSh0ZXN0VHhXaXRoTWVtby5zZXF1ZW5jZSk7XG4gICAgdHhCdWlsZGVyLmdhc0J1ZGdldCh0ZXN0VHhXaXRoTWVtby5nYXNCdWRnZXQpO1xuICAgIHR4QnVpbGRlci5tZXNzYWdlcyhbdGVzdFR4V2l0aE1lbW8uc2VuZE1lc3NhZ2UudmFsdWVdKTtcbiAgICB0eEJ1aWxkZXIucHVibGljS2V5KHRvSGV4KGZyb21CYXNlNjQodGVzdFR4V2l0aE1lbW8ucHViS2V5KSkpO1xuICAgIHR4QnVpbGRlci5tZW1vKHRlc3RUeFdpdGhNZW1vLm1lbW8pO1xuICAgIHR4QnVpbGRlci5hZGRTaWduYXR1cmUoXG4gICAgICB7IHB1YjogdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHhXaXRoTWVtby5wdWJLZXkpKSB9LFxuICAgICAgQnVmZmVyLmZyb20odGVzdFR4V2l0aE1lbW8uc2lnbmF0dXJlLCAnYmFzZTY0JylcbiAgICApO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5nYXNCdWRnZXQsIHRlc3RUeFdpdGhNZW1vLmdhc0J1ZGdldCk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnNlbmRNZXNzYWdlcywgW3Rlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlXSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnB1YmxpY0tleSwgdG9IZXgoZnJvbUJhc2U2NCh0ZXN0VHhXaXRoTWVtby5wdWJLZXkpKSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnNlcXVlbmNlLCB0ZXN0VHhXaXRoTWVtby5zZXF1ZW5jZSk7XG4gICAgc2hvdWxkLmVxdWFsKGpzb24ubWVtbywgdGVzdFR4V2l0aE1lbW8ubWVtbyk7XG4gICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHNob3VsZC5lcXVhbChyYXdUeCwgdGVzdFR4V2l0aE1lbW8uc2lnbmVkVHhCYXNlNjQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwodHguaW5wdXRzLCBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlLnZhbHVlLmZyb21BZGRyZXNzLFxuICAgICAgICB2YWx1ZTogdGVzdFR4V2l0aE1lbW8uc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgY29pbjogJ3RiYWJ5JyxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5vdXRwdXRzLCBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlLnZhbHVlLnRvQWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IHRlc3RUeFdpdGhNZW1vLnNlbmRNZXNzYWdlLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgIGNvaW46ICd0YmFieScsXG4gICAgICB9LFxuICAgIF0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGJ1aWxkIGEgVHJhbnNmZXIgdHggd2l0aG91dCBzaWduYXR1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2UodGVzdFR4LnNlcXVlbmNlKTtcbiAgICB0eEJ1aWxkZXIuZ2FzQnVkZ2V0KHRlc3RUeC5nYXNCdWRnZXQpO1xuICAgIHR4QnVpbGRlci5tZXNzYWdlcyhbdGVzdFR4LnNlbmRNZXNzYWdlLnZhbHVlXSk7XG4gICAgdHhCdWlsZGVyLnB1YmxpY0tleSh0b0hleChmcm9tQmFzZTY0KHRlc3RUeC5wdWJLZXkpKSk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5nYXNCdWRnZXQsIHRlc3RUeC5nYXNCdWRnZXQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZW5kTWVzc2FnZXMsIFt0ZXN0VHguc2VuZE1lc3NhZ2VdKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24ucHVibGljS2V5LCB0b0hleChmcm9tQmFzZTY0KHRlc3RUeC5wdWJLZXkpKSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnNlcXVlbmNlLCB0ZXN0VHguc2VxdWVuY2UpO1xuICAgIHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5pbnB1dHMsIFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGVzdERhdGEuVEVTVF9TRU5EX1RYLnNlbmRlcixcbiAgICAgICAgdmFsdWU6IHRlc3REYXRhLlRFU1RfU0VORF9UWC5zZW5kTWVzc2FnZS52YWx1ZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICBjb2luOiAndGJhYnknLFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKHR4Lm91dHB1dHMsIFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogdGVzdERhdGEuVEVTVF9TRU5EX1RYLnNlbmRNZXNzYWdlLnZhbHVlLnRvQWRkcmVzcyxcbiAgICAgICAgdmFsdWU6IHRlc3REYXRhLlRFU1RfU0VORF9UWC5zZW5kTWVzc2FnZS52YWx1ZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICBjb2luOiAndGJhYnknLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGEgVHJhbnNmZXIgdHgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2UodGVzdFR4Mi5zZXF1ZW5jZSk7XG4gICAgdHhCdWlsZGVyLmdhc0J1ZGdldCh0ZXN0VHgyLmdhc0J1ZGdldCk7XG4gICAgdHhCdWlsZGVyLm1lc3NhZ2VzKFt0ZXN0VHgyLnNlbmRNZXNzYWdlLnZhbHVlXSk7XG4gICAgdHhCdWlsZGVyLmFjY291bnROdW1iZXIodGVzdFR4Mi5hY2NvdW50TnVtYmVyKTtcbiAgICB0eEJ1aWxkZXIuY2hhaW5JZCh0ZXN0VHgyLmNoYWluSWQpO1xuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB0b0hleChmcm9tQmFzZTY0KHRlc3RUeDIucHJpdmF0ZUtleSkpIH0pO1xuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkudG9Kc29uKCk7XG4gICAgc2hvdWxkLmVxdWFsKHR4LnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uZ2FzQnVkZ2V0LCB0ZXN0VHgyLmdhc0J1ZGdldCk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnNlbmRNZXNzYWdlcywgW3Rlc3RUeDIuc2VuZE1lc3NhZ2VdKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24ucHVibGljS2V5LCB0b0hleChmcm9tQmFzZTY0KHRlc3RUeDIucHViS2V5KSkpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5zZXF1ZW5jZSwgdGVzdFR4Mi5zZXF1ZW5jZSk7XG4gICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHNob3VsZC5lcXVhbCh0eC5zaWduYXR1cmVbMF0sIHRvSGV4KGZyb21CYXNlNjQodGVzdFR4Mi5zaWduYXR1cmUpKSk7XG4gICAgc2hvdWxkLmVxdWFsKHJhd1R4LCB0ZXN0VHgyLnNpZ25lZFR4QmFzZTY0KTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKHR4LmlucHV0cywgW1xuICAgICAge1xuICAgICAgICBhZGRyZXNzOiB0ZXN0RGF0YS5URVNUX1NFTkRfVFgyLnNlbmRlcixcbiAgICAgICAgdmFsdWU6IHRlc3REYXRhLlRFU1RfU0VORF9UWDIuc2VuZE1lc3NhZ2UudmFsdWUuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgY29pbjogJ3RiYWJ5JyxcbiAgICAgIH0sXG4gICAgXSk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbCh0eC5vdXRwdXRzLCBbXG4gICAgICB7XG4gICAgICAgIGFkZHJlc3M6IHRlc3REYXRhLlRFU1RfU0VORF9UWDIuc2VuZE1lc3NhZ2UudmFsdWUudG9BZGRyZXNzLFxuICAgICAgICB2YWx1ZTogdGVzdERhdGEuVEVTVF9TRU5EX1RYMi5zZW5kTWVzc2FnZS52YWx1ZS5hbW91bnRbMF0uYW1vdW50LFxuICAgICAgICBjb2luOiAndGJhYnknLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBidWlsZCBhIHNlbmRNYW55IFRyYW5zZmVyIHR4JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHRlc3RTZW5kTWFueVR4ID0gdGVzdERhdGEuVEVTVF9TRU5EX01BTllfVFg7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuc2VxdWVuY2UodGVzdFNlbmRNYW55VHguc2VxdWVuY2UpO1xuICAgIHR4QnVpbGRlci5nYXNCdWRnZXQodGVzdFNlbmRNYW55VHguZ2FzQnVkZ2V0KTtcbiAgICB0eEJ1aWxkZXIubWVzc2FnZXModGVzdFNlbmRNYW55VHguc2VuZE1lc3NhZ2VzLm1hcCgobXNnKSA9PiBtc2cudmFsdWUpKTtcbiAgICB0eEJ1aWxkZXIucHVibGljS2V5KHRvSGV4KGZyb21CYXNlNjQodGVzdFNlbmRNYW55VHgucHViS2V5KSkpO1xuICAgIHR4QnVpbGRlci5jaGFpbklkKHRlc3RTZW5kTWFueVR4LmNoYWluSWQpO1xuICAgIHR4QnVpbGRlci5hY2NvdW50TnVtYmVyKHRlc3RTZW5kTWFueVR4LmFjY291bnROdW1iZXIpO1xuICAgIHR4QnVpbGRlci5tZW1vKHRlc3RTZW5kTWFueVR4Lm1lbW8pO1xuICAgIHR4QnVpbGRlci5hZGRTaWduYXR1cmUoXG4gICAgICB7IHB1YjogdG9IZXgoZnJvbUJhc2U2NCh0ZXN0U2VuZE1hbnlUeC5wdWJLZXkpKSB9LFxuICAgICAgQnVmZmVyLmZyb20odGVzdFNlbmRNYW55VHguc2lnbmF0dXJlLCAnYmFzZTY0JylcbiAgICApO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKS50b0pzb24oKTtcbiAgICBzaG91bGQuZXF1YWwodHgudHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoanNvbi5nYXNCdWRnZXQsIHRlc3RTZW5kTWFueVR4Lmdhc0J1ZGdldCk7XG4gICAgc2hvdWxkLmRlZXBFcXVhbChqc29uLnNlbmRNZXNzYWdlcywgdGVzdFNlbmRNYW55VHguc2VuZE1lc3NhZ2VzKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24ucHVibGljS2V5LCB0b0hleChmcm9tQmFzZTY0KHRlc3RTZW5kTWFueVR4LnB1YktleSkpKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKGpzb24uc2VxdWVuY2UsIHRlc3RTZW5kTWFueVR4LnNlcXVlbmNlKTtcbiAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgdHguaW5wdXRzLFxuICAgICAgdGVzdFNlbmRNYW55VHguc2VuZE1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkcmVzczogbXNnLnZhbHVlLmZyb21BZGRyZXNzLFxuICAgICAgICAgIHZhbHVlOiBtc2cudmFsdWUuYW1vdW50WzBdLmFtb3VudCxcbiAgICAgICAgICBjb2luOiAndGJhYnknLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICB0eC5vdXRwdXRzLFxuICAgICAgdGVzdFNlbmRNYW55VHguc2VuZE1lc3NhZ2VzLm1hcCgobXNnKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWRkcmVzczogbXNnLnZhbHVlLnRvQWRkcmVzcyxcbiAgICAgICAgICB2YWx1ZTogbXNnLnZhbHVlLmFtb3VudFswXS5hbW91bnQsXG4gICAgICAgICAgY29pbjogJ3RiYWJ5JyxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICBzaG91bGQuZXF1YWwodHguaWQsIHRlc3RTZW5kTWFueVR4Lmhhc2gpO1xuICAgIGNvbnN0IHJhd1R4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBzaG91bGQuZXF1YWwocmF3VHgsIHRlc3RTZW5kTWFueVR4LnNpZ25lZFR4QmFzZTY0KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../test/unit/utils.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const should_1 = __importDefault(require("should"));
|
|
40
|
+
const baby_1 = require("../resources/baby");
|
|
41
|
+
const testData = __importStar(require("../resources/baby"));
|
|
42
|
+
const utils_1 = __importDefault(require("../../src/lib/utils"));
|
|
43
|
+
describe('utils', () => {
|
|
44
|
+
it('should validate addresses correctly', () => {
|
|
45
|
+
should_1.default.equal(utils_1.default.isValidAddress(baby_1.address.address1), true);
|
|
46
|
+
should_1.default.equal(utils_1.default.isValidAddress(baby_1.address.address2), true);
|
|
47
|
+
should_1.default.equal(utils_1.default.isValidAddress(baby_1.address.address3), false);
|
|
48
|
+
should_1.default.equal(utils_1.default.isValidAddress(baby_1.address.address4), false);
|
|
49
|
+
should_1.default.equal(utils_1.default.isValidAddress('dfjk35y'), false);
|
|
50
|
+
should_1.default.equal(utils_1.default.isValidAddress(undefined), false);
|
|
51
|
+
should_1.default.equal(utils_1.default.isValidAddress(''), false);
|
|
52
|
+
});
|
|
53
|
+
it('should validate block hash correctly', () => {
|
|
54
|
+
should_1.default.equal(utils_1.default.isValidBlockId(baby_1.blockHash.hash1), true);
|
|
55
|
+
should_1.default.equal(utils_1.default.isValidBlockId(baby_1.blockHash.hash2), true);
|
|
56
|
+
should_1.default.equal(utils_1.default.isValidBlockId(undefined), false);
|
|
57
|
+
should_1.default.equal(utils_1.default.isValidBlockId(''), false);
|
|
58
|
+
});
|
|
59
|
+
it('should validate invalid block hash correctly', () => {
|
|
60
|
+
should_1.default.equal(utils_1.default.isValidBlockId(''), false);
|
|
61
|
+
should_1.default.equal(utils_1.default.isValidBlockId('0xade35465gfvdcsxsz24300'), false);
|
|
62
|
+
should_1.default.equal(utils_1.default.isValidBlockId(baby_1.blockHash.hash2 + 'ff'), false);
|
|
63
|
+
should_1.default.equal(utils_1.default.isValidBlockId('latest'), false);
|
|
64
|
+
});
|
|
65
|
+
it('should validate transaction id correctly', () => {
|
|
66
|
+
should_1.default.equal(utils_1.default.isValidTransactionId(baby_1.txIds.hash1), true);
|
|
67
|
+
should_1.default.equal(utils_1.default.isValidTransactionId(baby_1.txIds.hash2), true);
|
|
68
|
+
should_1.default.equal(utils_1.default.isValidTransactionId(baby_1.txIds.hash3), true);
|
|
69
|
+
});
|
|
70
|
+
it('should validate invalid transaction id correctly', () => {
|
|
71
|
+
should_1.default.equal(utils_1.default.isValidTransactionId(''), false);
|
|
72
|
+
should_1.default.equal(utils_1.default.isValidTransactionId(baby_1.txIds.hash1.slice(3)), false);
|
|
73
|
+
should_1.default.equal(utils_1.default.isValidTransactionId(baby_1.txIds.hash3 + '00'), false);
|
|
74
|
+
should_1.default.equal(utils_1.default.isValidTransactionId('dalij43ta0ga2dadda02'), false);
|
|
75
|
+
});
|
|
76
|
+
it('validateAmount', function () {
|
|
77
|
+
should_1.default.doesNotThrow(() => utils_1.default.validateAmountData([testData.coinAmounts.amount1]));
|
|
78
|
+
should_1.default.doesNotThrow(() => utils_1.default.validateAmountData([testData.coinAmounts.amount2]));
|
|
79
|
+
should_1.default.doesNotThrow(() => utils_1.default.validateAmountData([testData.coinAmounts.amount3]));
|
|
80
|
+
(0, should_1.default)(() => utils_1.default.validateAmountData([testData.coinAmounts.amount4])).throwError('transactionBuilder: validateAmount: Invalid amount: ' + testData.coinAmounts.amount4.amount);
|
|
81
|
+
(0, should_1.default)(() => utils_1.default.validateAmountData([testData.coinAmounts.amount5])).throwError('transactionBuilder: validateAmount: Invalid denom: ' + testData.coinAmounts.amount5.denom);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsNENBQThEO0FBQzlELDREQUE4QztBQUM5QyxnRUFBd0M7QUFFeEMsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7SUFDckIsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRTtRQUM3QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGNBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGNBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGNBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLGNBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JELGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsU0FBOEIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFFLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0NBQXNDLEVB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RSxDQUFDLGVBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQy9FLHNEQUFzRCxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDN0YsQ0FBQztRQUNGLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQy9FLHFEQUFxRCxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FDM0YsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBhZGRyZXNzLCBibG9ja0hhc2gsIHR4SWRzIH0gZnJvbSAnLi4vcmVzb3VyY2VzL2JhYnknO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vcmVzb3VyY2VzL2JhYnknO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuXG5kZXNjcmliZSgndXRpbHMnLCAoKSA9PiB7XG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgYWRkcmVzc2VzIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzMSksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzLmFkZHJlc3MyKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczMpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MuYWRkcmVzczQpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRBZGRyZXNzKCdkZmprMzV5JyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEFkZHJlc3ModW5kZWZpbmVkIGFzIHVua25vd24gYXMgc3RyaW5nKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQWRkcmVzcygnJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBibG9jayBoYXNoIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tIYXNoLmhhc2gxKSwgdHJ1ZSk7XG4gICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKGJsb2NrSGFzaC5oYXNoMiksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZCh1bmRlZmluZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKCcnKSwgZmFsc2UpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGludmFsaWQgYmxvY2sgaGFzaCBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRCbG9ja0lkKCcnKSwgZmFsc2UpO1xuICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkQmxvY2tJZCgnMHhhZGUzNTQ2NWdmdmRjc3hzejI0MzAwJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoYmxvY2tIYXNoLmhhc2gyICsgJ2ZmJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZEJsb2NrSWQoJ2xhdGVzdCcpLCBmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgdHJhbnNhY3Rpb24gaWQgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkcy5oYXNoMSksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkcy5oYXNoMiksIHRydWUpO1xuICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkcy5oYXNoMyksIHRydWUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGludmFsaWQgdHJhbnNhY3Rpb24gaWQgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIHNob3VsZC5lcXVhbCh1dGlscy5pc1ZhbGlkVHJhbnNhY3Rpb25JZCgnJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZHMuaGFzaDEuc2xpY2UoMykpLCBmYWxzZSk7XG4gICAgc2hvdWxkLmVxdWFsKHV0aWxzLmlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWRzLmhhc2gzICsgJzAwJyksIGZhbHNlKTtcbiAgICBzaG91bGQuZXF1YWwodXRpbHMuaXNWYWxpZFRyYW5zYWN0aW9uSWQoJ2RhbGlqNDN0YTBnYTJkYWRkYTAyJyksIGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3ZhbGlkYXRlQW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFt0ZXN0RGF0YS5jb2luQW1vdW50cy5hbW91bnQxXSkpO1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFt0ZXN0RGF0YS5jb2luQW1vdW50cy5hbW91bnQyXSkpO1xuICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFt0ZXN0RGF0YS5jb2luQW1vdW50cy5hbW91bnQzXSkpO1xuICAgIHNob3VsZCgoKSA9PiB1dGlscy52YWxpZGF0ZUFtb3VudERhdGEoW3Rlc3REYXRhLmNvaW5BbW91bnRzLmFtb3VudDRdKSkudGhyb3dFcnJvcihcbiAgICAgICd0cmFuc2FjdGlvbkJ1aWxkZXI6IHZhbGlkYXRlQW1vdW50OiBJbnZhbGlkIGFtb3VudDogJyArIHRlc3REYXRhLmNvaW5BbW91bnRzLmFtb3VudDQuYW1vdW50XG4gICAgKTtcbiAgICBzaG91bGQoKCkgPT4gdXRpbHMudmFsaWRhdGVBbW91bnREYXRhKFt0ZXN0RGF0YS5jb2luQW1vdW50cy5hbW91bnQ1XSkpLnRocm93RXJyb3IoXG4gICAgICAndHJhbnNhY3Rpb25CdWlsZGVyOiB2YWxpZGF0ZUFtb3VudDogSW52YWxpZCBkZW5vbTogJyArIHRlc3REYXRhLmNvaW5BbW91bnRzLmFtb3VudDUuZGVub21cbiAgICApO1xuICB9KTtcbn0pO1xuIl19
|