@bitgo/sdk-coin-algo 2.5.2 → 2.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/test/fixtures/algo.d.ts +101 -0
  2. package/dist/test/fixtures/algo.d.ts.map +1 -0
  3. package/dist/test/fixtures/algo.js +239 -0
  4. package/dist/test/fixtures/resources.d.ts +114 -0
  5. package/dist/test/fixtures/resources.d.ts.map +1 -0
  6. package/dist/test/fixtures/resources.js +123 -0
  7. package/dist/test/integration/algo.integration.d.ts +2 -0
  8. package/dist/test/integration/algo.integration.d.ts.map +1 -0
  9. package/dist/test/integration/algo.integration.js +71 -0
  10. package/dist/test/unit/algo.d.ts +2 -0
  11. package/dist/test/unit/algo.d.ts.map +1 -0
  12. package/dist/test/unit/algo.js +1096 -0
  13. package/dist/test/unit/algoIsWalletAddress.d.ts +2 -0
  14. package/dist/test/unit/algoIsWalletAddress.d.ts.map +1 -0
  15. package/dist/test/unit/algoIsWalletAddress.js +118 -0
  16. package/dist/test/unit/algoToken.d.ts +2 -0
  17. package/dist/test/unit/algoToken.d.ts.map +1 -0
  18. package/dist/test/unit/algoToken.js +79 -0
  19. package/dist/test/unit/fixtures/algoBackupKey.d.ts +4 -0
  20. package/dist/test/unit/fixtures/algoBackupKey.d.ts.map +1 -0
  21. package/dist/test/unit/fixtures/algoBackupKey.js +10 -0
  22. package/dist/test/unit/lib/keyPair.d.ts +2 -0
  23. package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
  24. package/dist/test/unit/lib/keyPair.js +110 -0
  25. package/dist/test/unit/lib/seedEncoding.d.ts +2 -0
  26. package/dist/test/unit/lib/seedEncoding.d.ts.map +1 -0
  27. package/dist/test/unit/lib/seedEncoding.js +59 -0
  28. package/dist/test/unit/lib/transaction.d.ts +2 -0
  29. package/dist/test/unit/lib/transaction.d.ts.map +1 -0
  30. package/dist/test/unit/lib/transaction.js +157 -0
  31. package/dist/test/unit/lib/transactionBuilder/assetTransferBuilder.d.ts +2 -0
  32. package/dist/test/unit/lib/transactionBuilder/assetTransferBuilder.d.ts.map +1 -0
  33. package/dist/test/unit/lib/transactionBuilder/assetTransferBuilder.js +300 -0
  34. package/dist/test/unit/lib/transactionBuilder/base.d.ts +2 -0
  35. package/dist/test/unit/lib/transactionBuilder/base.d.ts.map +1 -0
  36. package/dist/test/unit/lib/transactionBuilder/base.js +310 -0
  37. package/dist/test/unit/lib/transactionBuilder/keyRegistrationBuilder.d.ts +2 -0
  38. package/dist/test/unit/lib/transactionBuilder/keyRegistrationBuilder.d.ts.map +1 -0
  39. package/dist/test/unit/lib/transactionBuilder/keyRegistrationBuilder.js +473 -0
  40. package/dist/test/unit/lib/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  41. package/dist/test/unit/lib/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  42. package/dist/test/unit/lib/transactionBuilder/transactionBuilderFactory.js +138 -0
  43. package/dist/test/unit/lib/transactionBuilder/transferBuilder.d.ts +2 -0
  44. package/dist/test/unit/lib/transactionBuilder/transferBuilder.d.ts.map +1 -0
  45. package/dist/test/unit/lib/transactionBuilder/transferBuilder.js +290 -0
  46. package/dist/test/unit/lib/utils.d.ts +2 -0
  47. package/dist/test/unit/lib/utils.d.ts.map +1 -0
  48. package/dist/test/unit/lib/utils.js +307 -0
  49. package/dist/tsconfig.tsbuildinfo +1 -0
  50. package/package.json +9 -6
  51. package/.eslintignore +0 -5
  52. package/.mocharc.yml +0 -8
  53. package/CHANGELOG.md +0 -868
  54. package/types/index.d.ts +0 -60
@@ -0,0 +1,473 @@
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 statics_1 = require("@bitgo/statics");
40
+ const algosdk_1 = __importDefault(require("algosdk"));
41
+ const assert_1 = __importDefault(require("assert"));
42
+ const should_1 = __importDefault(require("should"));
43
+ const sinon_1 = __importStar(require("sinon"));
44
+ const keyRegistrationBuilder_1 = require("../../../../src/lib/keyRegistrationBuilder");
45
+ const AlgoResources = __importStar(require("../../../fixtures/resources"));
46
+ class StubTransactionBuilder extends keyRegistrationBuilder_1.KeyRegistrationBuilder {
47
+ getTransaction() {
48
+ return this._transaction;
49
+ }
50
+ }
51
+ describe('Algo KeyRegistration Builder', () => {
52
+ const { networks: { testnet }, } = AlgoResources;
53
+ const { genesisHash, genesisID } = testnet;
54
+ let builder;
55
+ const sender = AlgoResources.accounts.account1;
56
+ const { rawTx } = AlgoResources;
57
+ beforeEach(() => {
58
+ const config = statics_1.coins.get('algo');
59
+ builder = new StubTransactionBuilder(config);
60
+ });
61
+ describe('setter validation', () => {
62
+ it('should validate voteKey, is set and is a valid string', () => {
63
+ should_1.default.doesNotThrow(() => builder.voteKey(sender.voteKey));
64
+ });
65
+ it('should validate selection key, is set and is a valid string', () => {
66
+ should_1.default.doesNotThrow(() => builder.selectionKey(sender.selectionKey));
67
+ });
68
+ it('should validate voteFirst is gt than 0', () => {
69
+ const spy = sinon_1.default.spy(builder, 'validateValue');
70
+ assert_1.default.throws(() => builder.voteFirst(-1), (e) => e.message === 'Value cannot be less than zero');
71
+ should_1.default.doesNotThrow(() => builder.voteFirst(15));
72
+ sinon_1.assert.calledTwice(spy);
73
+ });
74
+ it('should validate voteLast is gt than 0', () => {
75
+ const validateValueSpy = sinon_1.default.spy(builder, 'validateValue');
76
+ builder.voteFirst(1);
77
+ assert_1.default.throws(() => builder.voteLast(-1), (e) => e.message === 'Value cannot be less than zero');
78
+ should_1.default.doesNotThrow(() => builder.voteLast(15));
79
+ sinon_1.assert.calledThrice(validateValueSpy);
80
+ });
81
+ it('should validate vote Key Dilution', () => {
82
+ const validateValueSpy = sinon_1.default.spy(builder, 'validateValue');
83
+ builder.voteFirst(5).voteLast(18);
84
+ should_1.default.doesNotThrow(() => builder.voteKeyDilution(2));
85
+ sinon_1.assert.calledThrice(validateValueSpy);
86
+ });
87
+ });
88
+ describe('transaction validation', () => {
89
+ beforeEach(() => {
90
+ builder.sender({ address: sender.address }).fee({ fee: '1000' }).firstRound(1).lastRound(100).testnet();
91
+ });
92
+ it('should validate an online transaction', () => {
93
+ builder.voteKey(sender.voteKey).selectionKey(sender.selectionKey).voteFirst(1).voteLast(100).voteKeyDilution(9);
94
+ should_1.default.doesNotThrow(() => builder.validateTransaction(builder.getTransaction()));
95
+ });
96
+ });
97
+ describe('build key registration transaction', () => {
98
+ const requiredFieldErrorRegEx = /Transaction validation failed: "(voteLast|voteKey|voteFirst|voteKeyDilution|selectionKey)" is required/;
99
+ it('should build an online key registration transaction without stateProof param', async () => {
100
+ builder
101
+ .sender({ address: sender.address })
102
+ .fee({ fee: '1000' })
103
+ .firstRound(1)
104
+ .lastRound(100)
105
+ .voteKey(sender.voteKey)
106
+ .selectionKey(sender.selectionKey)
107
+ .voteFirst(1)
108
+ .voteLast(100)
109
+ .voteKeyDilution(9)
110
+ .testnet()
111
+ .numberOfSigners(1);
112
+ builder.sign({ key: sender.prvKey });
113
+ const tx = await builder.build();
114
+ const txJson = tx.toJson();
115
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.voteKey }));
116
+ should_1.default.deepEqual(txJson.voteKey.toString('base64'), sender.voteKey);
117
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.selectionKey }));
118
+ should_1.default.deepEqual(txJson.selectionKey.toString('base64'), sender.selectionKey);
119
+ should_1.default.deepEqual(txJson.from, sender.address);
120
+ should_1.default.deepEqual(txJson.firstRound, 1);
121
+ should_1.default.deepEqual(txJson.lastRound, 100);
122
+ should_1.default.deepEqual(txJson.voteFirst, 1);
123
+ should_1.default.deepEqual(txJson.voteLast, 100);
124
+ should_1.default.deepEqual(txJson.voteKeyDilution, 9);
125
+ should_1.default.deepEqual(txJson.genesisID, genesisID.toString());
126
+ should_1.default.deepEqual(txJson.genesisHash.toString('base64'), genesisHash);
127
+ });
128
+ it('should build an online key registration transaction with stateProof Param', async () => {
129
+ builder
130
+ .sender({ address: sender.address })
131
+ .fee({ fee: '1000' })
132
+ .firstRound(1)
133
+ .lastRound(100)
134
+ .voteKey(sender.voteKey)
135
+ .selectionKey(sender.selectionKey)
136
+ .voteFirst(1)
137
+ .voteLast(100)
138
+ .voteKeyDilution(9)
139
+ .stateProofKey(sender.stateProofKey)
140
+ .testnet()
141
+ .numberOfSigners(1);
142
+ builder.sign({ key: sender.prvKey });
143
+ const tx = await builder.build();
144
+ const txJson = tx.toJson();
145
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.voteKey }));
146
+ should_1.default.deepEqual(txJson.voteKey.toString('base64'), sender.voteKey);
147
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.selectionKey }));
148
+ should_1.default.deepEqual(txJson.selectionKey.toString('base64'), sender.selectionKey);
149
+ should_1.default.deepEqual(txJson.from, sender.address);
150
+ should_1.default.deepEqual(txJson.firstRound, 1);
151
+ should_1.default.deepEqual(txJson.lastRound, 100);
152
+ should_1.default.deepEqual(txJson.voteFirst, 1);
153
+ should_1.default.deepEqual(txJson.voteLast, 100);
154
+ should_1.default.deepEqual(txJson.voteKeyDilution, 9);
155
+ should_1.default.deepEqual(txJson.genesisID, genesisID.toString());
156
+ should_1.default.deepEqual(txJson.genesisHash.toString('base64'), genesisHash);
157
+ should_1.default.deepEqual(txJson.stateProofKey.toString('base64'), sender.stateProofKey);
158
+ });
159
+ it('should build an online keyreg transaction with malformated stateProof Param', async () => {
160
+ const malformatedStateProofKey = '0x' + '0'.repeat(64);
161
+ builder
162
+ .sender({ address: sender.address })
163
+ .fee({ fee: '1000' })
164
+ .firstRound(1)
165
+ .lastRound(100)
166
+ .voteKey(sender.voteKey)
167
+ .selectionKey(sender.selectionKey)
168
+ .voteFirst(1)
169
+ .voteLast(100)
170
+ .voteKeyDilution(9);
171
+ assert_1.default.throws(() => builder.stateProofKey(malformatedStateProofKey), 'Error: Invalid base64 string');
172
+ });
173
+ it('should build an offline key registration transaction', async () => {
174
+ builder
175
+ .sender({ address: sender.address })
176
+ .fee({ fee: '1000' })
177
+ .firstRound(1)
178
+ .lastRound(100)
179
+ .testnet()
180
+ .numberOfSigners(1)
181
+ .nonParticipation(false);
182
+ builder.sign({ key: sender.prvKey });
183
+ const tx = await builder.build();
184
+ const txJson = tx.toJson();
185
+ should_1.default.deepEqual(txJson.voteKey, undefined);
186
+ should_1.default.deepEqual(txJson.selectionKey, undefined);
187
+ should_1.default.deepEqual(txJson.from, sender.address);
188
+ should_1.default.deepEqual(txJson.firstRound, 1);
189
+ should_1.default.deepEqual(txJson.lastRound, 100);
190
+ should_1.default.deepEqual(txJson.voteFirst, undefined);
191
+ should_1.default.deepEqual(txJson.voteLast, undefined);
192
+ should_1.default.deepEqual(txJson.voteKeyDilution, undefined);
193
+ should_1.default.deepEqual(txJson.nonParticipation, undefined);
194
+ should_1.default.deepEqual(txJson.genesisID, genesisID.toString());
195
+ should_1.default.deepEqual(txJson.genesisHash.toString('base64'), genesisHash);
196
+ });
197
+ it('should build a key registration transaction with non participation', async () => {
198
+ builder
199
+ .sender({ address: sender.address })
200
+ .fee({ fee: '1000' })
201
+ .firstRound(1)
202
+ .lastRound(100)
203
+ .testnet()
204
+ .numberOfSigners(1)
205
+ .nonParticipation(true);
206
+ builder.sign({ key: sender.prvKey });
207
+ const tx = await builder.build();
208
+ const txJson = tx.toJson();
209
+ should_1.default.deepEqual(txJson.voteKey, undefined);
210
+ should_1.default.deepEqual(txJson.selectionKey, undefined);
211
+ should_1.default.deepEqual(txJson.from, sender.address);
212
+ should_1.default.deepEqual(txJson.firstRound, 1);
213
+ should_1.default.deepEqual(txJson.lastRound, 100);
214
+ should_1.default.deepEqual(txJson.voteFirst, undefined);
215
+ should_1.default.deepEqual(txJson.voteLast, undefined);
216
+ should_1.default.deepEqual(txJson.voteKeyDilution, undefined);
217
+ should_1.default.deepEqual(txJson.nonParticipation, true);
218
+ should_1.default.deepEqual(txJson.genesisID, genesisID.toString());
219
+ should_1.default.deepEqual(txJson.genesisHash.toString('base64'), genesisHash);
220
+ });
221
+ it('build an offline key registration transaction should thrown an error when it hasfee', async () => {
222
+ builder.sender({ address: sender.address }).firstRound(1).lastRound(100).testnet().numberOfSigners(1);
223
+ builder.sign({ key: sender.prvKey });
224
+ await builder.build().should.be.rejectedWith('Transaction validation failed: "fee" is required');
225
+ });
226
+ it('build an offline key registration transaction should thrown an error when it has voteLast', async () => {
227
+ builder
228
+ .sender({ address: sender.address })
229
+ .fee({ fee: '1000' })
230
+ .firstRound(1)
231
+ .lastRound(100)
232
+ .voteLast(100)
233
+ .testnet()
234
+ .numberOfSigners(1);
235
+ builder.sign({ key: sender.prvKey });
236
+ await builder.build().should.be.rejectedWith(requiredFieldErrorRegEx);
237
+ });
238
+ it('build an offline key registration transaction should thrown an error when it has selectionKey', async () => {
239
+ builder
240
+ .sender({ address: sender.address })
241
+ .fee({ fee: '1000' })
242
+ .firstRound(1)
243
+ .lastRound(100)
244
+ .selectionKey(sender.selectionKey)
245
+ .testnet()
246
+ .numberOfSigners(1);
247
+ builder.sign({ key: sender.prvKey });
248
+ await builder.build().should.be.rejectedWith(requiredFieldErrorRegEx);
249
+ });
250
+ it('build an offline key registration transaction should thrown an error when it has voteKeyDilution', async () => {
251
+ builder
252
+ .sender({ address: sender.address })
253
+ .fee({ fee: '1000' })
254
+ .firstRound(1)
255
+ .lastRound(100)
256
+ .voteKeyDilution(9)
257
+ .testnet()
258
+ .numberOfSigners(1);
259
+ builder.sign({ key: sender.prvKey });
260
+ await builder.build().should.be.rejectedWith(requiredFieldErrorRegEx);
261
+ });
262
+ it('build an offline key registration transaction should thrown an error when it has voteFirst', async () => {
263
+ builder
264
+ .sender({ address: sender.address })
265
+ .fee({ fee: '1000' })
266
+ .firstRound(1)
267
+ .lastRound(100)
268
+ .voteFirst(1)
269
+ .testnet()
270
+ .numberOfSigners(1);
271
+ builder.sign({ key: sender.prvKey });
272
+ await builder.build().should.be.rejectedWith(requiredFieldErrorRegEx);
273
+ });
274
+ it('build an offline key registration transaction should thrown an error when it has voteKey', async () => {
275
+ builder
276
+ .sender({ address: sender.address })
277
+ .fee({ fee: '1000' })
278
+ .firstRound(1)
279
+ .lastRound(100)
280
+ .voteKey(sender.voteKey)
281
+ .testnet()
282
+ .numberOfSigners(1);
283
+ builder.sign({ key: sender.prvKey });
284
+ await builder.build().should.be.rejectedWith(requiredFieldErrorRegEx);
285
+ });
286
+ it('build an offline key registration transaction without non participation should thrown an error when it has not first round', async () => {
287
+ builder
288
+ .sender({ address: sender.address })
289
+ .fee({ fee: '1000' })
290
+ .lastRound(100)
291
+ .testnet()
292
+ .numberOfSigners(1)
293
+ .nonParticipation(false);
294
+ builder.sign({ key: sender.prvKey });
295
+ await builder.build().should.be.rejectedWith('Transaction validation failed: "firstRound" is required');
296
+ });
297
+ it('build an offline key registration transaction without non participation should thrown an error when it has not last round', async () => {
298
+ builder
299
+ .sender({ address: sender.address })
300
+ .fee({ fee: '1000' })
301
+ .firstRound(1)
302
+ .testnet()
303
+ .numberOfSigners(1)
304
+ .nonParticipation(false);
305
+ builder.sign({ key: sender.prvKey });
306
+ await builder.build().should.be.rejectedWith('Transaction validation failed: "lastRound" is required');
307
+ });
308
+ it('build an offline key registration transaction without non participation should thrown an error when it has not testnet set', async () => {
309
+ builder
310
+ .sender({ address: sender.address })
311
+ .fee({ fee: '1000' })
312
+ .firstRound(1)
313
+ .lastRound(100)
314
+ .numberOfSigners(1)
315
+ .nonParticipation(false);
316
+ builder.sign({ key: sender.prvKey });
317
+ await builder.build().should.be.rejectedWith('Transaction validation failed: "genesisHash" is required');
318
+ });
319
+ it('should build an unsigned offline key registration transaction', async () => {
320
+ builder.sender({ address: sender.address }).fee({ fee: '1000' }).firstRound(1).lastRound(100).testnet();
321
+ const tx = await builder.build();
322
+ const txJson = tx.toJson();
323
+ should_1.default.deepEqual(txJson.from, sender.address);
324
+ should_1.default.deepEqual(txJson.firstRound, 1);
325
+ should_1.default.deepEqual(txJson.lastRound, 100);
326
+ should_1.default.deepEqual(txJson.genesisID, genesisID.toString());
327
+ should_1.default.deepEqual(txJson.genesisHash.toString('base64'), genesisHash);
328
+ });
329
+ it('build a key registration transaction with non participation should thrown an error when it has not fee', async () => {
330
+ builder
331
+ .sender({ address: sender.address })
332
+ .firstRound(1)
333
+ .lastRound(100)
334
+ .testnet()
335
+ .numberOfSigners(1)
336
+ .nonParticipation(true);
337
+ builder.sign({ key: sender.prvKey });
338
+ await builder.build().should.be.rejectedWith('Transaction validation failed: "fee" is required');
339
+ });
340
+ it('build a key registration transaction with non participation should thrown an error when it has not first round', async () => {
341
+ builder
342
+ .sender({ address: sender.address })
343
+ .fee({ fee: '1000' })
344
+ .lastRound(100)
345
+ .testnet()
346
+ .numberOfSigners(1)
347
+ .nonParticipation(true);
348
+ builder.sign({ key: sender.prvKey });
349
+ await builder.build().should.be.rejectedWith('Transaction validation failed: "firstRound" is required');
350
+ });
351
+ it('build a key registration transaction with non participation should thrown an error when it has not last round', async () => {
352
+ builder
353
+ .sender({ address: sender.address })
354
+ .fee({ fee: '1000' })
355
+ .firstRound(1)
356
+ .testnet()
357
+ .numberOfSigners(1)
358
+ .nonParticipation(true);
359
+ builder.sign({ key: sender.prvKey });
360
+ await builder.build().should.be.rejectedWith('Transaction validation failed: "lastRound" is required');
361
+ });
362
+ it('build a key registration transaction with non participation should thrown an error when it has not testnet set', async () => {
363
+ builder
364
+ .sender({ address: sender.address })
365
+ .fee({ fee: '1000' })
366
+ .firstRound(1)
367
+ .lastRound(100)
368
+ .numberOfSigners(1)
369
+ .nonParticipation(true);
370
+ builder.sign({ key: sender.prvKey });
371
+ await builder.build().should.be.rejectedWith('Transaction validation failed: "genesisHash" is required');
372
+ });
373
+ it('should build an unsigned key registration transaction', async () => {
374
+ builder
375
+ .sender({ address: sender.address })
376
+ .fee({ fee: '1000' })
377
+ .firstRound(1)
378
+ .lastRound(100)
379
+ .voteKey(sender.voteKey)
380
+ .selectionKey(sender.selectionKey)
381
+ .voteFirst(1)
382
+ .voteLast(100)
383
+ .voteKeyDilution(9)
384
+ .testnet();
385
+ const tx = await builder.build();
386
+ const txJson = tx.toJson();
387
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.voteKey }));
388
+ should_1.default.deepEqual(txJson.voteKey.toString('base64'), sender.voteKey);
389
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.selectionKey }));
390
+ should_1.default.deepEqual(txJson.selectionKey.toString('base64'), sender.selectionKey);
391
+ should_1.default.deepEqual(txJson.from, sender.address);
392
+ should_1.default.deepEqual(txJson.firstRound, 1);
393
+ should_1.default.deepEqual(txJson.lastRound, 100);
394
+ should_1.default.deepEqual(txJson.voteFirst, 1);
395
+ should_1.default.deepEqual(txJson.voteLast, 100);
396
+ should_1.default.deepEqual(txJson.voteKeyDilution, 9);
397
+ should_1.default.deepEqual(txJson.genesisID, genesisID.toString());
398
+ should_1.default.deepEqual(txJson.genesisHash.toString('base64'), genesisHash);
399
+ });
400
+ it('should build a trx from an unsigned raw transaction', async () => {
401
+ builder.from(rawTx.keyReg.unsigned);
402
+ const tx = await builder.build();
403
+ const txJson = tx.toJson();
404
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.voteKey }));
405
+ should_1.default.deepEqual(txJson.voteKey.toString('base64'), sender.voteKey);
406
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.selectionKey }));
407
+ should_1.default.deepEqual(txJson.selectionKey.toString('base64'), sender.selectionKey);
408
+ should_1.default.deepEqual(txJson.from, sender.address);
409
+ should_1.default.deepEqual(txJson.firstRound, 1);
410
+ should_1.default.deepEqual(txJson.lastRound, 100);
411
+ should_1.default.deepEqual(txJson.voteFirst, 1);
412
+ should_1.default.deepEqual(txJson.voteLast, 100);
413
+ should_1.default.deepEqual(txJson.voteKeyDilution, 9);
414
+ });
415
+ it('should sign from raw unsigned tx', async () => {
416
+ builder.from(rawTx.keyReg.unsigned);
417
+ builder.numberOfSigners(1);
418
+ builder.sign({ key: sender.prvKey });
419
+ const tx = await builder.build();
420
+ should_1.default.deepEqual(Buffer.from(tx.toBroadcastFormat()).toString('hex'), AlgoResources.rawTx.keyReg.signed);
421
+ const txJson = tx.toJson();
422
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.voteKey }));
423
+ should_1.default.deepEqual(txJson.voteKey.toString('base64'), sender.voteKey);
424
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.selectionKey }));
425
+ should_1.default.deepEqual(txJson.selectionKey.toString('base64'), sender.selectionKey);
426
+ should_1.default.deepEqual(txJson.from, sender.address);
427
+ should_1.default.deepEqual(txJson.firstRound, 1);
428
+ should_1.default.deepEqual(txJson.lastRound, 100);
429
+ should_1.default.deepEqual(txJson.voteFirst, 1);
430
+ should_1.default.deepEqual(txJson.voteLast, 100);
431
+ should_1.default.deepEqual(txJson.voteKeyDilution, 9);
432
+ });
433
+ });
434
+ describe('build multi-sig key registration transaction', () => {
435
+ it('should build a msig registration transaction', async () => {
436
+ const msigAddress = algosdk_1.default.multisigAddress({
437
+ version: 1,
438
+ threshold: 2,
439
+ addrs: [AlgoResources.accounts.account1.address, AlgoResources.accounts.account3.address],
440
+ });
441
+ builder
442
+ .sender({ address: sender.address })
443
+ .fee({ fee: '1000' })
444
+ .firstRound(1)
445
+ .lastRound(100)
446
+ .voteKey(sender.voteKey)
447
+ .selectionKey(sender.selectionKey)
448
+ .voteFirst(1)
449
+ .voteLast(100)
450
+ .voteKeyDilution(9)
451
+ .testnet()
452
+ .numberOfSigners(2)
453
+ .setSigners([AlgoResources.accounts.account1.address, AlgoResources.accounts.account3.address])
454
+ .sign({ key: AlgoResources.accounts.account1.prvKey });
455
+ builder.sign({ key: AlgoResources.accounts.account3.prvKey });
456
+ const tx = await builder.build();
457
+ const txJson = tx.toJson();
458
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.voteKey }));
459
+ should_1.default.deepEqual(txJson.voteKey.toString('base64'), sender.voteKey);
460
+ should_1.default.doesNotThrow(() => builder.validateKey({ key: txJson.selectionKey }));
461
+ should_1.default.deepEqual(txJson.selectionKey.toString('base64'), sender.selectionKey);
462
+ should_1.default.deepEqual(txJson.from, msigAddress);
463
+ should_1.default.deepEqual(txJson.firstRound, 1);
464
+ should_1.default.deepEqual(txJson.lastRound, 100);
465
+ should_1.default.deepEqual(txJson.voteFirst, 1);
466
+ should_1.default.deepEqual(txJson.voteLast, 100);
467
+ should_1.default.deepEqual(txJson.voteKeyDilution, 9);
468
+ should_1.default.deepEqual(txJson.genesisID, genesisID.toString());
469
+ should_1.default.deepEqual(txJson.genesisHash.toString('base64'), genesisHash);
470
+ });
471
+ });
472
+ });
473
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UmVnaXN0cmF0aW9uQnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvdHJhbnNhY3Rpb25CdWlsZGVyL2tleVJlZ2lzdHJhdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBdUM7QUFDdkMsc0RBQThCO0FBQzlCLG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsK0NBQXFEO0FBRXJELHVGQUFvRjtBQUVwRiwyRUFBNkQ7QUFFN0QsTUFBTSxzQkFBdUIsU0FBUSwrQ0FBc0I7SUFDekQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO0lBQzVDLE1BQU0sRUFDSixRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FDdEIsR0FBRyxhQUFhLENBQUM7SUFDbEIsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDM0MsSUFBSSxPQUErQixDQUFDO0lBRXBDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQy9DLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxhQUFhLENBQUM7SUFFaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE1BQU0sTUFBTSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsT0FBTyxHQUFHLElBQUksc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO1FBQ2pDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7WUFDL0QsZ0JBQU0sQ0FBQyxZQUFZ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LFdBQVcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdFLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUM5RSxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN4QyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdkMsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1QyxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELGdCQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuaW1wb3J0IGFsZ29zZGsgZnJvbSAnYWxnb3Nkayc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgc2lub24sIHsgYXNzZXJ0IGFzIFNpbm9uQXNzZXJ0IH0gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvbGliJztcbmltcG9ydCB7IEtleVJlZ2lzdHJhdGlvbkJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMvbGliL2tleVJlZ2lzdHJhdGlvbkJ1aWxkZXInO1xuXG5pbXBvcnQgKiBhcyBBbGdvUmVzb3VyY2VzIGZyb20gJy4uLy4uLy4uL2ZpeHR1cmVzL3Jlc291cmNlcyc7XG5cbmNsYXNzIFN0dWJUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBLZXlSZWdpc3RyYXRpb25CdWlsZGVyIHtcbiAgZ2V0VHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxufVxuXG5kZXNjcmliZSgnQWxnbyBLZXlSZWdpc3RyYXRpb24gQnVpbGRlcicsICgpID0+IHtcbiAgY29uc3Qge1xuICAgIG5ldHdvcmtzOiB7IHRlc3RuZXQgfSxcbiAgfSA9IEFsZ29SZXNvdXJjZXM7XG4gIGNvbnN0IHsgZ2VuZXNpc0hhc2gsIGdlbmVzaXNJRCB9ID0gdGVzdG5ldDtcbiAgbGV0IGJ1aWxkZXI6IFN0dWJUcmFuc2FjdGlvbkJ1aWxkZXI7XG5cbiAgY29uc3Qgc2VuZGVyID0gQWxnb1Jlc291cmNlcy5hY2NvdW50cy5hY2NvdW50MTtcbiAgY29uc3QgeyByYXdUeCB9ID0gQWxnb1Jlc291cmNlcztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBjb2lucy5nZXQoJ2FsZ28nKTtcbiAgICBidWlsZGVyID0gbmV3IFN0dWJUcmFuc2FjdGlvbkJ1aWxkZXIoY29uZmlnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NldHRlciB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdm90ZUtleSwgaXMgc2V0IGFuZCBpcyBhIHZhbGlkIHN0cmluZycsICgpID0+IHtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci52b3RlS2V5KHNlbmRlci52b3RlS2V5KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIHNlbGVjdGlvbiBrZXksIGlzIHNldCBhbmQgaXMgYSB2YWxpZCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIuc2VsZWN0aW9uS2V5KHNlbmRlci5zZWxlY3Rpb25LZXkpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdm90ZUZpcnN0IGlzIGd0IHRoYW4gMCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHNweSA9IHNpbm9uLnNweShidWlsZGVyLCAndmFsaWRhdGVWYWx1ZScpO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci52b3RlRmlyc3QoLTEpLFxuICAgICAgICAoZTogRXJyb3IpID0+IGUubWVzc2FnZSA9PT0gJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybydcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudm90ZUZpcnN0KDE1KSk7XG4gICAgICBTaW5vbkFzc2VydC5jYWxsZWRUd2ljZShzcHkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB2b3RlTGFzdCBpcyBndCB0aGFuIDAnLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVZhbHVlU3B5ID0gc2lub24uc3B5KGJ1aWxkZXIsICd2YWxpZGF0ZVZhbHVlJyk7XG4gICAgICBidWlsZGVyLnZvdGVGaXJzdCgxKTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIudm90ZUxhc3QoLTEpLFxuICAgICAgICAoZTogRXJyb3IpID0+IGUubWVzc2FnZSA9PT0gJ1ZhbHVlIGNhbm5vdCBiZSBsZXNzIHRoYW4gemVybydcbiAgICAgICk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudm90ZUxhc3QoMTUpKTtcbiAgICAgIFNpbm9uQXNzZXJ0LmNhbGxlZFRocmljZSh2YWxpZGF0ZVZhbHVlU3B5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgdm90ZSBLZXkgRGlsdXRpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVZhbHVlU3B5ID0gc2lub24uc3B5KGJ1aWxkZXIsICd2YWxpZGF0ZVZhbHVlJyk7XG4gICAgICBidWlsZGVyLnZvdGVGaXJzdCg1KS52b3RlTGFzdCgxOCk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudm90ZUtleURpbHV0aW9uKDIpKTtcbiAgICAgIFNpbm9uQXNzZXJ0LmNhbGxlZFRocmljZSh2YWxpZGF0ZVZhbHVlU3B5KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RyYW5zYWN0aW9uIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBidWlsZGVyLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pLmZlZSh7IGZlZTogJzEwMDAnIH0pLmZpcnN0Um91bmQoMSkubGFzdFJvdW5kKDEwMCkudGVzdG5ldCgpO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYW4gb25saW5lIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgYnVpbGRlci52b3RlS2V5KHNlbmRlci52b3RlS2V5KS5zZWxlY3Rpb25LZXkoc2VuZGVyLnNlbGVjdGlvbktleSkudm90ZUZpcnN0KDEpLnZvdGVMYXN0KDEwMCkudm90ZUtleURpbHV0aW9uKDkpO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnZhbGlkYXRlVHJhbnNhY3Rpb24oYnVpbGRlci5nZXRUcmFuc2FjdGlvbigpKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZCBrZXkgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlcXVpcmVkRmllbGRFcnJvclJlZ0V4ID1cbiAgICAgIC9UcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogXCIodm90ZUxhc3R8dm90ZUtleXx2b3RlRmlyc3R8dm90ZUtleURpbHV0aW9ufHNlbGVjdGlvbktleSlcIiBpcyByZXF1aXJlZC87XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIG9ubGluZSBrZXkgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uIHdpdGhvdXQgc3RhdGVQcm9vZiBwYXJhbScsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC5mZWUoeyBmZWU6ICcxMDAwJyB9KVxuICAgICAgICAuZmlyc3RSb3VuZCgxKVxuICAgICAgICAubGFzdFJvdW5kKDEwMClcbiAgICAgICAgLnZvdGVLZXkoc2VuZGVyLnZvdGVLZXkpXG4gICAgICAgIC5zZWxlY3Rpb25LZXkoc2VuZGVyLnNlbGVjdGlvbktleSlcbiAgICAgICAgLnZvdGVGaXJzdCgxKVxuICAgICAgICAudm90ZUxhc3QoMTAwKVxuICAgICAgICAudm90ZUtleURpbHV0aW9uKDkpXG4gICAgICAgIC50ZXN0bmV0KClcbiAgICAgICAgLm51bWJlck9mU2lnbmVycygxKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogc2VuZGVyLnBydktleSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudmFsaWRhdGVLZXkoeyBrZXk6IHR4SnNvbi52b3RlS2V5IH0pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVLZXkudG9TdHJpbmcoJ2Jhc2U2NCcpLCBzZW5kZXIudm90ZUtleSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudmFsaWRhdGVLZXkoeyBrZXk6IHR4SnNvbi5zZWxlY3Rpb25LZXkgfSkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VsZWN0aW9uS2V5LnRvU3RyaW5nKCdiYXNlNjQnKSwgc2VuZGVyLnNlbGVjdGlvbktleSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mcm9tLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5maXJzdFJvdW5kLCAxKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmxhc3RSb3VuZCwgMTAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVGaXJzdCwgMSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi52b3RlTGFzdCwgMTAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVLZXlEaWx1dGlvbiwgOSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSUQsIGdlbmVzaXNJRC50b1N0cmluZygpKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLnRvU3RyaW5nKCdiYXNlNjQnKSwgZ2VuZXNpc0hhc2gpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhbiBvbmxpbmUga2V5IHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbiB3aXRoIHN0YXRlUHJvb2YgUGFyYW0nLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuZmVlKHsgZmVlOiAnMTAwMCcgfSlcbiAgICAgICAgLmZpcnN0Um91bmQoMSlcbiAgICAgICAgLmxhc3RSb3VuZCgxMDApXG4gICAgICAgIC52b3RlS2V5KHNlbmRlci52b3RlS2V5KVxuICAgICAgICAuc2VsZWN0aW9uS2V5KHNlbmRlci5zZWxlY3Rpb25LZXkpXG4gICAgICAgIC52b3RlRmlyc3QoMSlcbiAgICAgICAgLnZvdGVMYXN0KDEwMClcbiAgICAgICAgLnZvdGVLZXlEaWx1dGlvbig5KVxuICAgICAgICAuc3RhdGVQcm9vZktleShzZW5kZXIuc3RhdGVQcm9vZktleSlcbiAgICAgICAgLnRlc3RuZXQoKVxuICAgICAgICAubnVtYmVyT2ZTaWduZXJzKDEpO1xuICAgICAgYnVpbGRlci5zaWduKHsga2V5OiBzZW5kZXIucHJ2S2V5IH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci52YWxpZGF0ZUtleSh7IGtleTogdHhKc29uLnZvdGVLZXkgfSkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udm90ZUtleS50b1N0cmluZygnYmFzZTY0JyksIHNlbmRlci52b3RlS2V5KTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci52YWxpZGF0ZUtleSh7IGtleTogdHhKc29uLnNlbGVjdGlvbktleSB9KSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZWxlY3Rpb25LZXkudG9TdHJpbmcoJ2Jhc2U2NCcpLCBzZW5kZXIuc2VsZWN0aW9uS2V5KTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZyb20sIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZpcnN0Um91bmQsIDEpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubGFzdFJvdW5kLCAxMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udm90ZUZpcnN0LCAxKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVMYXN0LCAxMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udm90ZUtleURpbHV0aW9uLCA5KTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNJRCwgZ2VuZXNpc0lELnRvU3RyaW5nKCkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0hhc2gudG9TdHJpbmcoJ2Jhc2U2NCcpLCBnZW5lc2lzSGFzaCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zdGF0ZVByb29mS2V5LnRvU3RyaW5nKCdiYXNlNjQnKSwgc2VuZGVyLnN0YXRlUHJvb2ZLZXkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhbiBvbmxpbmUga2V5cmVnIHRyYW5zYWN0aW9uIHdpdGggbWFsZm9ybWF0ZWQgc3RhdGVQcm9vZiBQYXJhbScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IG1hbGZvcm1hdGVkU3RhdGVQcm9vZktleSA9ICcweCcgKyAnMCcucmVwZWF0KDY0KTtcblxuICAgICAgYnVpbGRlclxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmZlZSh7IGZlZTogJzEwMDAnIH0pXG4gICAgICAgIC5maXJzdFJvdW5kKDEpXG4gICAgICAgIC5sYXN0Um91bmQoMTAwKVxuICAgICAgICAudm90ZUtleShzZW5kZXIudm90ZUtleSlcbiAgICAgICAgLnNlbGVjdGlvbktleShzZW5kZXIuc2VsZWN0aW9uS2V5KVxuICAgICAgICAudm90ZUZpcnN0KDEpXG4gICAgICAgIC52b3RlTGFzdCgxMDApXG4gICAgICAgIC52b3RlS2V5RGlsdXRpb24oOSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGJ1aWxkZXIuc3RhdGVQcm9vZktleShtYWxmb3JtYXRlZFN0YXRlUHJvb2ZLZXkpLCAnRXJyb3I6IEludmFsaWQgYmFzZTY0IHN0cmluZycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhbiBvZmZsaW5lIGtleSByZWdpc3RyYXRpb24gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuZmVlKHsgZmVlOiAnMTAwMCcgfSlcbiAgICAgICAgLmZpcnN0Um91bmQoMSlcbiAgICAgICAgLmxhc3RSb3VuZCgxMDApXG4gICAgICAgIC50ZXN0bmV0KClcbiAgICAgICAgLm51bWJlck9mU2lnbmVycygxKVxuICAgICAgICAubm9uUGFydGljaXBhdGlvbihmYWxzZSk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHNlbmRlci5wcnZLZXkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udm90ZUtleSwgdW5kZWZpbmVkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbGVjdGlvbktleSwgdW5kZWZpbmVkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZyb20sIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZpcnN0Um91bmQsIDEpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubGFzdFJvdW5kLCAxMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udm90ZUZpcnN0LCB1bmRlZmluZWQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udm90ZUxhc3QsIHVuZGVmaW5lZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi52b3RlS2V5RGlsdXRpb24sIHVuZGVmaW5lZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5ub25QYXJ0aWNpcGF0aW9uLCB1bmRlZmluZWQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0lELCBnZW5lc2lzSUQudG9TdHJpbmcoKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaC50b1N0cmluZygnYmFzZTY0JyksIGdlbmVzaXNIYXNoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYnVpbGQgYSBrZXkgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uIHdpdGggbm9uIHBhcnRpY2lwYXRpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuZmVlKHsgZmVlOiAnMTAwMCcgfSlcbiAgICAgICAgLmZpcnN0Um91bmQoMSlcbiAgICAgICAgLmxhc3RSb3VuZCgxMDApXG4gICAgICAgIC50ZXN0bmV0KClcbiAgICAgICAgLm51bWJlck9mU2lnbmVycygxKVxuICAgICAgICAubm9uUGFydGljaXBhdGlvbih0cnVlKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogc2VuZGVyLnBydktleSB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi52b3RlS2V5LCB1bmRlZmluZWQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VsZWN0aW9uS2V5LCB1bmRlZmluZWQpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZnJvbSwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmlyc3RSb3VuZCwgMSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5sYXN0Um91bmQsIDEwMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi52b3RlRmlyc3QsIHVuZGVmaW5lZCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi52b3RlTGFzdCwgdW5kZWZpbmVkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVLZXlEaWx1dGlvbiwgdW5kZWZpbmVkKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLm5vblBhcnRpY2lwYXRpb24sIHRydWUpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0lELCBnZW5lc2lzSUQudG9TdHJpbmcoKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaC50b1N0cmluZygnYmFzZTY0JyksIGdlbmVzaXNIYXNoKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhbiBvZmZsaW5lIGtleSByZWdpc3RyYXRpb24gdHJhbnNhY3Rpb24gc2hvdWxkIHRocm93biBhbiBlcnJvciB3aGVuIGl0IGhhc2ZlZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSkuZmlyc3RSb3VuZCgxKS5sYXN0Um91bmQoMTAwKS50ZXN0bmV0KCkubnVtYmVyT2ZTaWduZXJzKDEpO1xuICAgICAgYnVpbGRlci5zaWduKHsga2V5OiBzZW5kZXIucHJ2S2V5IH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1RyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiBcImZlZVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYW4gb2ZmbGluZSBrZXkgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uIHNob3VsZCB0aHJvd24gYW4gZXJyb3Igd2hlbiBpdCBoYXMgdm90ZUxhc3QnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuZmVlKHsgZmVlOiAnMTAwMCcgfSlcbiAgICAgICAgLmZpcnN0Um91bmQoMSlcbiAgICAgICAgLmxhc3RSb3VuZCgxMDApXG4gICAgICAgIC52b3RlTGFzdCgxMDApXG4gICAgICAgIC50ZXN0bmV0KClcbiAgICAgICAgLm51bWJlck9mU2lnbmVycygxKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogc2VuZGVyLnBydktleSB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHJlcXVpcmVkRmllbGRFcnJvclJlZ0V4KTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhbiBvZmZsaW5lIGtleSByZWdpc3RyYXRpb24gdHJhbnNhY3Rpb24gc2hvdWxkIHRocm93biBhbiBlcnJvciB3aGVuIGl0IGhhcyBzZWxlY3Rpb25LZXknLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuZmVlKHsgZmVlOiAnMTAwMCcgfSlcbiAgICAgICAgLmZpcnN0Um91bmQoMSlcbiAgICAgICAgLmxhc3RSb3VuZCgxMDApXG4gICAgICAgIC5zZWxlY3Rpb25LZXkoc2VuZGVyLnNlbGVjdGlvbktleSlcbiAgICAgICAgLnRlc3RuZXQoKVxuICAgICAgICAubnVtYmVyT2ZTaWduZXJzKDEpO1xuICAgICAgYnVpbGRlci5zaWduKHsga2V5OiBzZW5kZXIucHJ2S2V5IH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgocmVxdWlyZWRGaWVsZEVycm9yUmVnRXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGFuIG9mZmxpbmUga2V5IHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbiBzaG91bGQgdGhyb3duIGFuIGVycm9yIHdoZW4gaXQgaGFzIHZvdGVLZXlEaWx1dGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC5mZWUoeyBmZWU6ICcxMDAwJyB9KVxuICAgICAgICAuZmlyc3RSb3VuZCgxKVxuICAgICAgICAubGFzdFJvdW5kKDEwMClcbiAgICAgICAgLnZvdGVLZXlEaWx1dGlvbig5KVxuICAgICAgICAudGVzdG5ldCgpXG4gICAgICAgIC5udW1iZXJPZlNpZ25lcnMoMSk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHNlbmRlci5wcnZLZXkgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aChyZXF1aXJlZEZpZWxkRXJyb3JSZWdFeCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYW4gb2ZmbGluZSBrZXkgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uIHNob3VsZCB0aHJvd24gYW4gZXJyb3Igd2hlbiBpdCBoYXMgdm90ZUZpcnN0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmZlZSh7IGZlZTogJzEwMDAnIH0pXG4gICAgICAgIC5maXJzdFJvdW5kKDEpXG4gICAgICAgIC5sYXN0Um91bmQoMTAwKVxuICAgICAgICAudm90ZUZpcnN0KDEpXG4gICAgICAgIC50ZXN0bmV0KClcbiAgICAgICAgLm51bWJlck9mU2lnbmVycygxKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogc2VuZGVyLnBydktleSB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKHJlcXVpcmVkRmllbGRFcnJvclJlZ0V4KTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhbiBvZmZsaW5lIGtleSByZWdpc3RyYXRpb24gdHJhbnNhY3Rpb24gc2hvdWxkIHRocm93biBhbiBlcnJvciB3aGVuIGl0IGhhcyB2b3RlS2V5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmZlZSh7IGZlZTogJzEwMDAnIH0pXG4gICAgICAgIC5maXJzdFJvdW5kKDEpXG4gICAgICAgIC5sYXN0Um91bmQoMTAwKVxuICAgICAgICAudm90ZUtleShzZW5kZXIudm90ZUtleSlcbiAgICAgICAgLnRlc3RuZXQoKVxuICAgICAgICAubnVtYmVyT2ZTaWduZXJzKDEpO1xuICAgICAgYnVpbGRlci5zaWduKHsga2V5OiBzZW5kZXIucHJ2S2V5IH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgocmVxdWlyZWRGaWVsZEVycm9yUmVnRXgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGFuIG9mZmxpbmUga2V5IHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbiB3aXRob3V0IG5vbiBwYXJ0aWNpcGF0aW9uIHNob3VsZCB0aHJvd24gYW4gZXJyb3Igd2hlbiBpdCBoYXMgbm90IGZpcnN0IHJvdW5kJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmZlZSh7IGZlZTogJzEwMDAnIH0pXG4gICAgICAgIC5sYXN0Um91bmQoMTAwKVxuICAgICAgICAudGVzdG5ldCgpXG4gICAgICAgIC5udW1iZXJPZlNpZ25lcnMoMSlcbiAgICAgICAgLm5vblBhcnRpY2lwYXRpb24oZmFsc2UpO1xuICAgICAgYnVpbGRlci5zaWduKHsga2V5OiBzZW5kZXIucHJ2S2V5IH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1RyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiBcImZpcnN0Um91bmRcIiBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGFuIG9mZmxpbmUga2V5IHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbiB3aXRob3V0IG5vbiBwYXJ0aWNpcGF0aW9uIHNob3VsZCB0aHJvd24gYW4gZXJyb3Igd2hlbiBpdCBoYXMgbm90IGxhc3Qgcm91bmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuZmVlKHsgZmVlOiAnMTAwMCcgfSlcbiAgICAgICAgLmZpcnN0Um91bmQoMSlcbiAgICAgICAgLnRlc3RuZXQoKVxuICAgICAgICAubnVtYmVyT2ZTaWduZXJzKDEpXG4gICAgICAgIC5ub25QYXJ0aWNpcGF0aW9uKGZhbHNlKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogc2VuZGVyLnBydktleSB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogXCJsYXN0Um91bmRcIiBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGFuIG9mZmxpbmUga2V5IHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbiB3aXRob3V0IG5vbiBwYXJ0aWNpcGF0aW9uIHNob3VsZCB0aHJvd24gYW4gZXJyb3Igd2hlbiBpdCBoYXMgbm90IHRlc3RuZXQgc2V0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmZlZSh7IGZlZTogJzEwMDAnIH0pXG4gICAgICAgIC5maXJzdFJvdW5kKDEpXG4gICAgICAgIC5sYXN0Um91bmQoMTAwKVxuICAgICAgICAubnVtYmVyT2ZTaWduZXJzKDEpXG4gICAgICAgIC5ub25QYXJ0aWNpcGF0aW9uKGZhbHNlKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogc2VuZGVyLnBydktleSB9KTtcbiAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUcmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxlZDogXCJnZW5lc2lzSGFzaFwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGFuIHVuc2lnbmVkIG9mZmxpbmUga2V5IHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSkuZmVlKHsgZmVlOiAnMTAwMCcgfSkuZmlyc3RSb3VuZCgxKS5sYXN0Um91bmQoMTAwKS50ZXN0bmV0KCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZnJvbSwgc2VuZGVyLmFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmlyc3RSb3VuZCwgMSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5sYXN0Um91bmQsIDEwMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSUQsIGdlbmVzaXNJRC50b1N0cmluZygpKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLnRvU3RyaW5nKCdiYXNlNjQnKSwgZ2VuZXNpc0hhc2gpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEga2V5IHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbiB3aXRoIG5vbiBwYXJ0aWNpcGF0aW9uIHNob3VsZCB0aHJvd24gYW4gZXJyb3Igd2hlbiBpdCBoYXMgbm90IGZlZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC5maXJzdFJvdW5kKDEpXG4gICAgICAgIC5sYXN0Um91bmQoMTAwKVxuICAgICAgICAudGVzdG5ldCgpXG4gICAgICAgIC5udW1iZXJPZlNpZ25lcnMoMSlcbiAgICAgICAgLm5vblBhcnRpY2lwYXRpb24odHJ1ZSk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHNlbmRlci5wcnZLZXkgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6IFwiZmVlXCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdidWlsZCBhIGtleSByZWdpc3RyYXRpb24gdHJhbnNhY3Rpb24gd2l0aCBub24gcGFydGljaXBhdGlvbiBzaG91bGQgdGhyb3duIGFuIGVycm9yIHdoZW4gaXQgaGFzIG5vdCBmaXJzdCByb3VuZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXJcbiAgICAgICAgLnNlbmRlcih7IGFkZHJlc3M6IHNlbmRlci5hZGRyZXNzIH0pXG4gICAgICAgIC5mZWUoeyBmZWU6ICcxMDAwJyB9KVxuICAgICAgICAubGFzdFJvdW5kKDEwMClcbiAgICAgICAgLnRlc3RuZXQoKVxuICAgICAgICAubnVtYmVyT2ZTaWduZXJzKDEpXG4gICAgICAgIC5ub25QYXJ0aWNpcGF0aW9uKHRydWUpO1xuICAgICAgYnVpbGRlci5zaWduKHsga2V5OiBzZW5kZXIucHJ2S2V5IH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1RyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiBcImZpcnN0Um91bmRcIiBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2J1aWxkIGEga2V5IHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbiB3aXRoIG5vbiBwYXJ0aWNpcGF0aW9uIHNob3VsZCB0aHJvd24gYW4gZXJyb3Igd2hlbiBpdCBoYXMgbm90IGxhc3Qgcm91bmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuZmVlKHsgZmVlOiAnMTAwMCcgfSlcbiAgICAgICAgLmZpcnN0Um91bmQoMSlcbiAgICAgICAgLnRlc3RuZXQoKVxuICAgICAgICAubnVtYmVyT2ZTaWduZXJzKDEpXG4gICAgICAgIC5ub25QYXJ0aWNpcGF0aW9uKHRydWUpO1xuICAgICAgYnVpbGRlci5zaWduKHsga2V5OiBzZW5kZXIucHJ2S2V5IH0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1RyYW5zYWN0aW9uIHZhbGlkYXRpb24gZmFpbGVkOiBcImxhc3RSb3VuZFwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnVpbGQgYSBrZXkgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uIHdpdGggbm9uIHBhcnRpY2lwYXRpb24gc2hvdWxkIHRocm93biBhbiBlcnJvciB3aGVuIGl0IGhhcyBub3QgdGVzdG5ldCBzZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBidWlsZGVyXG4gICAgICAgIC5zZW5kZXIoeyBhZGRyZXNzOiBzZW5kZXIuYWRkcmVzcyB9KVxuICAgICAgICAuZmVlKHsgZmVlOiAnMTAwMCcgfSlcbiAgICAgICAgLmZpcnN0Um91bmQoMSlcbiAgICAgICAgLmxhc3RSb3VuZCgxMDApXG4gICAgICAgIC5udW1iZXJPZlNpZ25lcnMoMSlcbiAgICAgICAgLm5vblBhcnRpY2lwYXRpb24odHJ1ZSk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHNlbmRlci5wcnZLZXkgfSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsZWQ6IFwiZ2VuZXNpc0hhc2hcIiBpcyByZXF1aXJlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhbiB1bnNpZ25lZCBrZXkgcmVnaXN0cmF0aW9uIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmZlZSh7IGZlZTogJzEwMDAnIH0pXG4gICAgICAgIC5maXJzdFJvdW5kKDEpXG4gICAgICAgIC5sYXN0Um91bmQoMTAwKVxuICAgICAgICAudm90ZUtleShzZW5kZXIudm90ZUtleSlcbiAgICAgICAgLnNlbGVjdGlvbktleShzZW5kZXIuc2VsZWN0aW9uS2V5KVxuICAgICAgICAudm90ZUZpcnN0KDEpXG4gICAgICAgIC52b3RlTGFzdCgxMDApXG4gICAgICAgIC52b3RlS2V5RGlsdXRpb24oOSlcbiAgICAgICAgLnRlc3RuZXQoKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudmFsaWRhdGVLZXkoeyBrZXk6IHR4SnNvbi52b3RlS2V5IH0pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVLZXkudG9TdHJpbmcoJ2Jhc2U2NCcpLCBzZW5kZXIudm90ZUtleSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudmFsaWRhdGVLZXkoeyBrZXk6IHR4SnNvbi5zZWxlY3Rpb25LZXkgfSkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VsZWN0aW9uS2V5LnRvU3RyaW5nKCdiYXNlNjQnKSwgc2VuZGVyLnNlbGVjdGlvbktleSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mcm9tLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5maXJzdFJvdW5kLCAxKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmxhc3RSb3VuZCwgMTAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVGaXJzdCwgMSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi52b3RlTGFzdCwgMTAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVLZXlEaWx1dGlvbiwgOSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSUQsIGdlbmVzaXNJRC50b1N0cmluZygpKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmdlbmVzaXNIYXNoLnRvU3RyaW5nKCdiYXNlNjQnKSwgZ2VuZXNpc0hhc2gpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBhIHRyeCBmcm9tIGFuIHVuc2lnbmVkIHJhdyB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC5rZXlSZWcudW5zaWduZWQpO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci52YWxpZGF0ZUtleSh7IGtleTogdHhKc29uLnZvdGVLZXkgfSkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udm90ZUtleS50b1N0cmluZygnYmFzZTY0JyksIHNlbmRlci52b3RlS2V5KTtcbiAgICAgIHNob3VsZC5kb2VzTm90VGhyb3coKCkgPT4gYnVpbGRlci52YWxpZGF0ZUtleSh7IGtleTogdHhKc29uLnNlbGVjdGlvbktleSB9KSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5zZWxlY3Rpb25LZXkudG9TdHJpbmcoJ2Jhc2U2NCcpLCBzZW5kZXIuc2VsZWN0aW9uS2V5KTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZyb20sIHNlbmRlci5hZGRyZXNzKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmZpcnN0Um91bmQsIDEpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24ubGFzdFJvdW5kLCAxMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udm90ZUZpcnN0LCAxKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVMYXN0LCAxMDApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udm90ZUtleURpbHV0aW9uLCA5KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2lnbiBmcm9tIHJhdyB1bnNpZ25lZCB0eCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGJ1aWxkZXIuZnJvbShyYXdUeC5rZXlSZWcudW5zaWduZWQpO1xuICAgICAgYnVpbGRlci5udW1iZXJPZlNpZ25lcnMoMSk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHNlbmRlci5wcnZLZXkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoQnVmZmVyLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSkudG9TdHJpbmcoJ2hleCcpLCBBbGdvUmVzb3VyY2VzLnJhd1R4LmtleVJlZy5zaWduZWQpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudmFsaWRhdGVLZXkoeyBrZXk6IHR4SnNvbi52b3RlS2V5IH0pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVLZXkudG9TdHJpbmcoJ2Jhc2U2NCcpLCBzZW5kZXIudm90ZUtleSk7XG4gICAgICBzaG91bGQuZG9lc05vdFRocm93KCgpID0+IGJ1aWxkZXIudmFsaWRhdGVLZXkoeyBrZXk6IHR4SnNvbi5zZWxlY3Rpb25LZXkgfSkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uc2VsZWN0aW9uS2V5LnRvU3RyaW5nKCdiYXNlNjQnKSwgc2VuZGVyLnNlbGVjdGlvbktleSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5mcm9tLCBzZW5kZXIuYWRkcmVzcyk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5maXJzdFJvdW5kLCAxKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLmxhc3RSb3VuZCwgMTAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVGaXJzdCwgMSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi52b3RlTGFzdCwgMTAwKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnZvdGVLZXlEaWx1dGlvbiwgOSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZCBtdWx0aS1zaWcga2V5IHJlZ2lzdHJhdGlvbiB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGJ1aWxkIGEgbXNpZyByZWdpc3RyYXRpb24gdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtc2lnQWRkcmVzcyA9IGFsZ29zZGsubXVsdGlzaWdBZGRyZXNzKHtcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgdGhyZXNob2xkOiAyLFxuICAgICAgICBhZGRyczogW0FsZ29SZXNvdXJjZXMuYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgQWxnb1Jlc291cmNlcy5hY2NvdW50cy5hY2NvdW50My5hZGRyZXNzXSxcbiAgICAgIH0pO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuc2VuZGVyKHsgYWRkcmVzczogc2VuZGVyLmFkZHJlc3MgfSlcbiAgICAgICAgLmZlZSh7IGZlZTogJzEwMDAnIH0pXG4gICAgICAgIC5maXJzdFJvdW5kKDEpXG4gICAgICAgIC5sYXN0Um91bmQoMTAwKVxuICAgICAgICAudm90ZUtleShzZW5kZXIudm90ZUtleSlcbiAgICAgICAgLnNlbGVjdGlvbktleShzZW5kZXIuc2VsZWN0aW9uS2V5KVxuICAgICAgICAudm90ZUZpcnN0KDEpXG4gICAgICAgIC52b3RlTGFzdCgxMDApXG4gICAgICAgIC52b3RlS2V5RGlsdXRpb24oOSlcbiAgICAgICAgLnRlc3RuZXQoKVxuICAgICAgICAubnVtYmVyT2ZTaWduZXJzKDIpXG4gICAgICAgIC5zZXRTaWduZXJzKFtBbGdvUmVzb3VyY2VzLmFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsIEFsZ29SZXNvdXJjZXMuYWNjb3VudHMuYWNjb3VudDMuYWRkcmVzc10pXG4gICAgICAgIC5zaWduKHsga2V5OiBBbGdvUmVzb3VyY2VzLmFjY291bnRzLmFjY291bnQxLnBydktleSB9KTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogQWxnb1Jlc291cmNlcy5hY2NvdW50cy5hY2NvdW50My5wcnZLZXkgfSk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnZhbGlkYXRlS2V5KHsga2V5OiB0eEpzb24udm90ZUtleSB9KSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi52b3RlS2V5LnRvU3RyaW5nKCdiYXNlNjQnKSwgc2VuZGVyLnZvdGVLZXkpO1xuICAgICAgc2hvdWxkLmRvZXNOb3RUaHJvdygoKSA9PiBidWlsZGVyLnZhbGlkYXRlS2V5KHsga2V5OiB0eEpzb24uc2VsZWN0aW9uS2V5IH0pKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwodHhKc29uLnNlbGVjdGlvbktleS50b1N0cmluZygnYmFzZTY0JyksIHNlbmRlci5zZWxlY3Rpb25LZXkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZnJvbSwgbXNpZ0FkZHJlc3MpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZmlyc3RSb3VuZCwgMSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5sYXN0Um91bmQsIDEwMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi52b3RlRmlyc3QsIDEpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24udm90ZUxhc3QsIDEwMCk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi52b3RlS2V5RGlsdXRpb24sIDkpO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbCh0eEpzb24uZ2VuZXNpc0lELCBnZW5lc2lzSUQudG9TdHJpbmcoKSk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKHR4SnNvbi5nZW5lc2lzSGFzaC50b1N0cmluZygnYmFzZTY0JyksIGdlbmVzaXNIYXNoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transactionBuilderFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../../../test/unit/lib/transactionBuilder/transactionBuilderFactory.ts"],"names":[],"mappings":""}