@bitgo-beta/sdk-coin-flrp 1.0.0-alpha.39 → 1.0.0-alpha.40

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 (131) hide show
  1. package/dist/src/flrp.d.ts +9 -16
  2. package/dist/src/flrp.d.ts.map +1 -1
  3. package/dist/src/flrp.js +49 -75
  4. package/dist/src/index.d.ts +0 -1
  5. package/dist/src/index.d.ts.map +1 -1
  6. package/dist/src/index.js +1 -2
  7. package/dist/src/lib/ExportInCTxBuilder.d.ts +51 -0
  8. package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -0
  9. package/dist/src/lib/ExportInCTxBuilder.js +188 -0
  10. package/dist/src/lib/ExportInPTxBuilder.d.ts +47 -0
  11. package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/ExportInPTxBuilder.js +273 -0
  13. package/dist/src/lib/ImportInCTxBuilder.d.ts +48 -0
  14. package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/ImportInCTxBuilder.js +215 -0
  16. package/dist/src/lib/ImportInPTxBuilder.d.ts +33 -0
  17. package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/ImportInPTxBuilder.js +180 -0
  19. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +18 -16
  20. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  21. package/dist/src/lib/atomicInCTransactionBuilder.js +38 -36
  22. package/dist/src/lib/atomicTransactionBuilder.d.ts +42 -79
  23. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/atomicTransactionBuilder.js +138 -281
  25. package/dist/src/lib/iface.d.ts +38 -61
  26. package/dist/src/lib/iface.d.ts.map +1 -1
  27. package/dist/src/lib/iface.js +13 -14
  28. package/dist/src/lib/index.d.ts +3 -3
  29. package/dist/src/lib/index.d.ts.map +1 -1
  30. package/dist/src/lib/index.js +8 -7
  31. package/dist/src/lib/keyPair.d.ts +1 -1
  32. package/dist/src/lib/keyPair.d.ts.map +1 -1
  33. package/dist/src/lib/keyPair.js +9 -5
  34. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +29 -67
  35. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -1
  36. package/dist/src/lib/permissionlessValidatorTxBuilder.js +89 -205
  37. package/dist/src/lib/transaction.d.ts +11 -71
  38. package/dist/src/lib/transaction.d.ts.map +1 -1
  39. package/dist/src/lib/transaction.js +255 -204
  40. package/dist/src/lib/transactionBuilder.d.ts +56 -34
  41. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  42. package/dist/src/lib/transactionBuilder.js +113 -70
  43. package/dist/src/lib/transactionBuilderFactory.d.ts +50 -30
  44. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  45. package/dist/src/lib/transactionBuilderFactory.js +129 -72
  46. package/dist/src/lib/utils.d.ts +67 -153
  47. package/dist/src/lib/utils.d.ts.map +1 -1
  48. package/dist/src/lib/utils.js +178 -397
  49. package/dist/test/resources/account.d.ts +2 -0
  50. package/dist/test/resources/account.d.ts.map +1 -1
  51. package/dist/test/resources/account.js +3 -1
  52. package/dist/test/resources/transactionData/exportInC.d.ts +20 -0
  53. package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -0
  54. package/dist/test/resources/transactionData/exportInC.js +34 -0
  55. package/dist/test/resources/transactionData/exportInP.d.ts +69 -0
  56. package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -0
  57. package/dist/test/resources/transactionData/exportInP.js +140 -0
  58. package/dist/test/resources/transactionData/importInC.d.ts +27 -0
  59. package/dist/test/resources/transactionData/importInC.d.ts.map +1 -0
  60. package/dist/test/resources/transactionData/importInC.js +44 -0
  61. package/dist/test/resources/transactionData/importInP.d.ts +35 -0
  62. package/dist/test/resources/transactionData/importInP.d.ts.map +1 -0
  63. package/dist/test/resources/transactionData/importInP.js +58 -0
  64. package/dist/test/unit/flrp.js +449 -68
  65. package/dist/test/unit/lib/exportInCTxBuilder.js +95 -513
  66. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +1 -1
  67. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -1
  68. package/dist/test/unit/lib/exportInPTxBuilder.js +110 -366
  69. package/dist/test/unit/lib/importInCTxBuilder.d.ts +1 -1
  70. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -1
  71. package/dist/test/unit/lib/importInCTxBuilder.js +40 -251
  72. package/dist/test/unit/lib/importInPTxBuilder.d.ts +1 -1
  73. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -1
  74. package/dist/test/unit/lib/importInPTxBuilder.js +61 -489
  75. package/dist/test/unit/lib/signFlowTestSuit.d.ts +20 -0
  76. package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -0
  77. package/dist/test/unit/lib/signFlowTestSuit.js +89 -0
  78. package/dist/test/unit/lib/utils.js +367 -279
  79. package/dist/tsconfig.tsbuildinfo +1 -1
  80. package/package.json +12 -9
  81. package/dist/src/iface.d.ts +0 -25
  82. package/dist/src/iface.d.ts.map +0 -1
  83. package/dist/src/iface.js +0 -3
  84. package/dist/src/lib/constants.d.ts +0 -170
  85. package/dist/src/lib/constants.d.ts.map +0 -1
  86. package/dist/src/lib/constants.js +0 -227
  87. package/dist/src/lib/delegatorTxBuilder.d.ts +0 -58
  88. package/dist/src/lib/delegatorTxBuilder.d.ts.map +0 -1
  89. package/dist/src/lib/delegatorTxBuilder.js +0 -224
  90. package/dist/src/lib/errors.d.ts +0 -8
  91. package/dist/src/lib/errors.d.ts.map +0 -1
  92. package/dist/src/lib/errors.js +0 -19
  93. package/dist/src/lib/exportInCTxBuilder.d.ts +0 -77
  94. package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
  95. package/dist/src/lib/exportInCTxBuilder.js +0 -199
  96. package/dist/src/lib/exportInPTxBuilder.d.ts +0 -30
  97. package/dist/src/lib/exportInPTxBuilder.d.ts.map +0 -1
  98. package/dist/src/lib/exportInPTxBuilder.js +0 -120
  99. package/dist/src/lib/importInCTxBuilder.d.ts +0 -67
  100. package/dist/src/lib/importInCTxBuilder.d.ts.map +0 -1
  101. package/dist/src/lib/importInCTxBuilder.js +0 -403
  102. package/dist/src/lib/importInPTxBuilder.d.ts +0 -73
  103. package/dist/src/lib/importInPTxBuilder.d.ts.map +0 -1
  104. package/dist/src/lib/importInPTxBuilder.js +0 -464
  105. package/dist/src/lib/types.d.ts +0 -78
  106. package/dist/src/lib/types.d.ts.map +0 -1
  107. package/dist/src/lib/types.js +0 -5
  108. package/dist/src/lib/validatorTxBuilder.d.ts +0 -40
  109. package/dist/src/lib/validatorTxBuilder.d.ts.map +0 -1
  110. package/dist/src/lib/validatorTxBuilder.js +0 -180
  111. package/dist/test/unit/delegatorTxBuilder.test.d.ts +0 -2
  112. package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +0 -1
  113. package/dist/test/unit/delegatorTxBuilder.test.js +0 -233
  114. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts +0 -2
  115. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts.map +0 -1
  116. package/dist/test/unit/lib/atomicTransactionBuilder.js +0 -222
  117. package/dist/test/unit/lib/transaction.d.ts +0 -2
  118. package/dist/test/unit/lib/transaction.d.ts.map +0 -1
  119. package/dist/test/unit/lib/transaction.js +0 -460
  120. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +0 -2
  121. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +0 -1
  122. package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +0 -271
  123. package/dist/test/unit/smoke.d.ts +0 -2
  124. package/dist/test/unit/smoke.d.ts.map +0 -1
  125. package/dist/test/unit/smoke.js +0 -23
  126. package/dist/test/unit/transactionBuilder.test.d.ts +0 -2
  127. package/dist/test/unit/transactionBuilder.test.d.ts.map +0 -1
  128. package/dist/test/unit/transactionBuilder.test.js +0 -114
  129. package/dist/test/unit/validatorTxBuilder.test.d.ts +0 -2
  130. package/dist/test/unit/validatorTxBuilder.test.d.ts.map +0 -1
  131. package/dist/test/unit/validatorTxBuilder.test.js +0 -293
@@ -1,2 +1,2 @@
1
- export {};
1
+ import 'should';
2
2
  //# sourceMappingURL=exportInPTxBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exportInPTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/exportInPTxBuilder.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"exportInPTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/exportInPTxBuilder.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}
@@ -1,377 +1,121 @@
1
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
- })();
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
35
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ require("should");
8
+ const exportInP_1 = require("../../resources/transactionData/exportInP");
9
+ const lib_1 = require("../../../src/lib");
36
10
  const statics_1 = require("@bitgo-beta/statics");
37
- const assert = __importStar(require("assert"));
38
- const exportInPTxBuilder_1 = require("../../../src/lib/exportInPTxBuilder");
39
- describe('ExportInPTxBuilder', function () {
40
- const coinConfig = statics_1.coins.get('tflrp');
41
- let builder;
42
- beforeEach(function () {
43
- builder = new exportInPTxBuilder_1.ExportInPTxBuilder(coinConfig);
44
- });
45
- describe('Constructor', function () {
46
- it('should initialize with coin config', function () {
47
- assert.ok(builder);
48
- assert.ok(builder instanceof exportInPTxBuilder_1.ExportInPTxBuilder);
49
- });
50
- it('should extend AtomicTransactionBuilder', function () {
51
- // Test inheritance
52
- assert.ok(builder);
53
- });
54
- it('should initialize with default amount', function () {
55
- // Default amount should be 0n
56
- assert.ok(builder);
11
+ const signFlowTestSuit_1 = __importDefault(require("./signFlowTestSuit"));
12
+ describe('Flrp Export In P Tx Builder', () => {
13
+ const factory = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp'));
14
+ describe('validate txBuilder fields', () => {
15
+ const txBuilder = factory.getExportInPBuilder();
16
+ it('should fail amount low than zero', () => {
17
+ assert_1.default.throws(() => {
18
+ txBuilder.amount('-1');
19
+ }, (e) => e.message === 'Amount must be greater than 0');
20
+ });
21
+ it('should fail target chain id length incorrect', () => {
22
+ assert_1.default.throws(() => {
23
+ txBuilder.externalChainId(Buffer.from(exportInP_1.EXPORT_IN_P.INVALID_CHAIN_ID.slice(2)));
24
+ }, (e) => e.message === 'Chain id are 32 byte size');
25
+ });
26
+ it('should fail target chain id not a valid base58 string', () => {
27
+ assert_1.default.throws(() => {
28
+ txBuilder.externalChainId(exportInP_1.EXPORT_IN_P.INVALID_CHAIN_ID);
29
+ }, (e) => e.message === 'Non-base58 character');
30
+ });
31
+ it('should fail target chain id cb58 invalid checksum', () => {
32
+ assert_1.default.throws(() => {
33
+ txBuilder.externalChainId(exportInP_1.EXPORT_IN_P.VALID_C_CHAIN_ID.slice(2));
34
+ }, (e) => e.message === 'Invalid checksum');
35
+ });
36
+ it('should fail validate Utxos empty string', () => {
37
+ assert_1.default.throws(() => {
38
+ txBuilder.validateUtxos([]);
39
+ }, (e) => e.message === 'UTXOs array cannot be empty');
40
+ });
41
+ it('should fail validate Utxos without amount field', () => {
42
+ assert_1.default.throws(() => {
43
+ txBuilder.validateUtxos([{ outputID: '' }]);
44
+ }, (e) => e.message === 'UTXO missing required field: amount');
57
45
  });
58
46
  });
59
- describe('Amount Management', function () {
60
- it('should set valid bigint amounts', function () {
61
- const validAmounts = [1000n, 1000000000000000000n, 999999999999999999n]; // Removed 0n
62
- validAmounts.forEach((amount) => {
63
- assert.doesNotThrow(() => {
64
- builder.amount(amount);
65
- }, `Should accept bigint amount: ${amount}`);
66
- });
67
- });
68
- it('should set string amounts', function () {
69
- const stringAmounts = ['1000', '1000000000000000000', '999999999999999999']; // Removed '0'
70
- stringAmounts.forEach((amount) => {
71
- assert.doesNotThrow(() => {
72
- builder.amount(amount);
73
- }, `Should accept string amount: ${amount}`);
74
- });
75
- });
76
- it('should set numeric amounts', function () {
77
- const numericAmounts = [1000, 2000000, 999999999]; // Removed 0
78
- numericAmounts.forEach((amount) => {
79
- assert.doesNotThrow(() => {
80
- builder.amount(amount);
81
- }, `Should accept numeric amount: ${amount}`);
82
- });
83
- });
84
- it('should reject zero amount', function () {
85
- assert.throws(() => {
86
- builder.amount(0n);
87
- }, /Amount must be positive/);
88
- assert.throws(() => {
89
- builder.amount('0');
90
- }, /Amount must be positive/);
91
- assert.throws(() => {
92
- builder.amount(0);
93
- }, /Amount must be positive/);
94
- });
95
- it('should handle large amounts', function () {
96
- const largeAmounts = [
97
- '100000000000000000000000', // Very large amount
98
- '18446744073709551615', // Near uint64 max
99
- BigInt('999999999999999999999999999999'),
100
- 999999999999999999n,
101
- ];
102
- largeAmounts.forEach((amount) => {
103
- assert.doesNotThrow(() => {
104
- builder.amount(amount);
105
- }, `Should handle large amount: ${amount}`);
106
- });
107
- });
108
- it('should reject negative amounts', function () {
109
- const negativeAmounts = ['-1000', '-1'];
110
- negativeAmounts.forEach((amount) => {
111
- assert.throws(() => {
112
- builder.amount(amount);
113
- }, Error, // validateAmount should throw error for negative amounts
114
- `Should reject negative amount: ${amount}`);
115
- });
116
- });
117
- it('should reject negative bigint amounts', function () {
118
- const negativeBigints = [-1n, -1000n, -999999999999n];
119
- negativeBigints.forEach((amount) => {
120
- assert.throws(() => {
121
- builder.amount(amount);
122
- }, Error, `Should reject negative bigint amount: ${amount}`);
123
- });
124
- });
125
- it('should chain amount setting with other methods', function () {
126
- const amount = 1000000000000000000n; // 1 FLR
127
- assert.doesNotThrow(() => {
128
- builder.amount(amount);
129
- });
130
- });
47
+ (0, signFlowTestSuit_1.default)({
48
+ transactionType: 'Export P2C with changeoutput',
49
+ newTxFactory: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')),
50
+ newTxBuilder: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp'))
51
+ .getExportInPBuilder()
52
+ .threshold(exportInP_1.EXPORT_IN_P.threshold)
53
+ .locktime(exportInP_1.EXPORT_IN_P.locktime)
54
+ .fromPubKey(exportInP_1.EXPORT_IN_P.pAddresses)
55
+ .amount(exportInP_1.EXPORT_IN_P.amount)
56
+ .externalChainId(exportInP_1.EXPORT_IN_P.sourceChainId)
57
+ .fee(exportInP_1.EXPORT_IN_P.fee)
58
+ .utxos(exportInP_1.EXPORT_IN_P.outputs),
59
+ unsignedTxHex: exportInP_1.EXPORT_IN_P.unsignedHex,
60
+ halfSignedTxHex: exportInP_1.EXPORT_IN_P.halfSigntxHex,
61
+ fullSignedTxHex: exportInP_1.EXPORT_IN_P.fullSigntxHex,
62
+ privateKey: {
63
+ prv1: exportInP_1.EXPORT_IN_P.privateKeys[0],
64
+ prv2: exportInP_1.EXPORT_IN_P.privateKeys[1],
65
+ },
66
+ txHash: exportInP_1.EXPORT_IN_P.txhash,
131
67
  });
132
- describe('Transaction Type', function () {
133
- it('should return Export transaction type', function () {
134
- // Can't access protected method directly, but test doesn't throw
135
- assert.ok(builder);
136
- });
68
+ (0, signFlowTestSuit_1.default)({
69
+ transactionType: 'Export P2C with 2 UTXOs',
70
+ newTxFactory: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')),
71
+ newTxBuilder: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp'))
72
+ .getExportInPBuilder()
73
+ .threshold(exportInP_1.EXPORT_IN_P_TWO_UTXOS.threshold)
74
+ .locktime(exportInP_1.EXPORT_IN_P_TWO_UTXOS.locktime)
75
+ .fromPubKey(exportInP_1.EXPORT_IN_P_TWO_UTXOS.pAddresses)
76
+ .amount(exportInP_1.EXPORT_IN_P_TWO_UTXOS.amount)
77
+ .externalChainId(exportInP_1.EXPORT_IN_P_TWO_UTXOS.sourceChainId)
78
+ .fee(exportInP_1.EXPORT_IN_P_TWO_UTXOS.fee)
79
+ .utxos(exportInP_1.EXPORT_IN_P_TWO_UTXOS.outputs),
80
+ unsignedTxHex: exportInP_1.EXPORT_IN_P_TWO_UTXOS.unsignedHex,
81
+ halfSignedTxHex: exportInP_1.EXPORT_IN_P_TWO_UTXOS.halfSigntxHex,
82
+ fullSignedTxHex: exportInP_1.EXPORT_IN_P_TWO_UTXOS.fullSigntxHex,
83
+ privateKey: {
84
+ prv1: exportInP_1.EXPORT_IN_P_TWO_UTXOS.privateKeys[0],
85
+ prv2: exportInP_1.EXPORT_IN_P_TWO_UTXOS.privateKeys[1],
86
+ },
87
+ txHash: exportInP_1.EXPORT_IN_P_TWO_UTXOS.txhash,
137
88
  });
138
- describe('Transaction Initialization', function () {
139
- it('should initialize builder from transaction', function () {
140
- const mockTx = { type: 'export', data: 'placeholder' };
141
- assert.doesNotThrow(() => {
142
- builder.initBuilder(mockTx);
143
- });
144
- });
145
- it('should handle null transaction initialization', function () {
146
- assert.doesNotThrow(() => {
147
- builder.initBuilder(null);
148
- });
149
- });
150
- it('should handle undefined transaction initialization', function () {
151
- assert.doesNotThrow(() => {
152
- builder.initBuilder(undefined);
153
- });
154
- });
155
- it('should handle object transaction initialization', function () {
156
- const mockTx = {
157
- id: 'test-tx',
158
- type: 'export',
159
- amount: '1000000000000000000',
160
- from: 'P-flare1source',
161
- to: 'C-flare1dest',
162
- };
163
- assert.doesNotThrow(() => {
164
- builder.initBuilder(mockTx);
165
- });
166
- });
167
- });
168
- describe('Transaction Type Verification', function () {
169
- it('should verify transaction type (returns false - not implemented)', function () {
170
- const mockTx = { type: 'export' };
171
- const result = exportInPTxBuilder_1.ExportInPTxBuilder.verifyTxType(mockTx);
172
- assert.strictEqual(result, false); // Not implemented yet
173
- });
174
- it('should handle different transaction objects', function () {
175
- const testCases = [{}, null, undefined, { type: 'import' }, { data: 'test' }];
176
- testCases.forEach((testCase, index) => {
177
- const result = exportInPTxBuilder_1.ExportInPTxBuilder.verifyTxType(testCase);
178
- assert.strictEqual(result, false, `Test case ${index} should return false (not implemented)`);
179
- });
180
- });
181
- it('should verify via instance method', function () {
182
- const mockTx = { type: 'export' };
183
- const result = builder.verifyTxType(mockTx);
184
- assert.strictEqual(result, false); // Not implemented
185
- });
186
- it('should verify static and instance methods return same result', function () {
187
- const mockTx = { type: 'export' };
188
- const staticResult = exportInPTxBuilder_1.ExportInPTxBuilder.verifyTxType(mockTx);
189
- const instanceResult = builder.verifyTxType(mockTx);
190
- assert.strictEqual(staticResult, instanceResult);
191
- });
192
- });
193
- describe('Transaction Building', function () {
194
- it('should throw error when building (not implemented)', function () {
195
- builder.amount(1000000000000000000n);
196
- assert.throws(() => {
197
- // Access protected method for testing
198
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
199
- builder.buildFlareTransaction();
200
- }, Error);
201
- });
202
- it('should throw specific error message', function () {
203
- assert.throws(() => {
204
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
205
- builder.buildFlareTransaction();
206
- }, /Flare P-chain export transaction build not implemented/);
207
- });
89
+ (0, signFlowTestSuit_1.default)({
90
+ transactionType: 'Export P2C with no change output',
91
+ newTxFactory: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')),
92
+ newTxBuilder: () => new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp'))
93
+ .getExportInPBuilder()
94
+ .threshold(exportInP_1.EXPORT_IN_P_NO_CHANGE.threshold)
95
+ .locktime(exportInP_1.EXPORT_IN_P_NO_CHANGE.locktime)
96
+ .fromPubKey(exportInP_1.EXPORT_IN_P_NO_CHANGE.pAddresses)
97
+ .amount(exportInP_1.EXPORT_IN_P_NO_CHANGE.amount)
98
+ .externalChainId(exportInP_1.EXPORT_IN_P_NO_CHANGE.sourceChainId)
99
+ .fee(exportInP_1.EXPORT_IN_P_NO_CHANGE.fee)
100
+ .utxos(exportInP_1.EXPORT_IN_P_NO_CHANGE.outputs),
101
+ unsignedTxHex: exportInP_1.EXPORT_IN_P_NO_CHANGE.unsignedHex,
102
+ halfSignedTxHex: exportInP_1.EXPORT_IN_P_NO_CHANGE.halfSigntxHex,
103
+ fullSignedTxHex: exportInP_1.EXPORT_IN_P_NO_CHANGE.fullSigntxHex,
104
+ privateKey: {
105
+ prv1: exportInP_1.EXPORT_IN_P_NO_CHANGE.privateKeys[0],
106
+ prv2: exportInP_1.EXPORT_IN_P_NO_CHANGE.privateKeys[1],
107
+ },
108
+ txHash: exportInP_1.EXPORT_IN_P_NO_CHANGE.txhash,
208
109
  });
209
- describe('Exported Outputs', function () {
210
- it('should return empty array for exported outputs', function () {
211
- // Access protected method for testing
212
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
213
- const result = builder.exportedOutputs();
214
- assert.ok(Array.isArray(result));
215
- assert.strictEqual(result.length, 0);
216
- });
217
- it('should consistently return empty array', function () {
218
- // Call multiple times to ensure consistency
219
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
220
- const result1 = builder.exportedOutputs();
221
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
222
- const result2 = builder.exportedOutputs();
223
- assert.deepStrictEqual(result1, result2);
224
- });
225
- });
226
- describe('Amount Validation', function () {
227
- it('should validate positive amounts', function () {
228
- const positiveAmounts = [1n, 1000n, 1000000000000000000n];
229
- positiveAmounts.forEach((amount) => {
230
- assert.doesNotThrow(() => {
231
- builder.amount(amount);
232
- }, `Should validate positive amount: ${amount}`);
233
- });
234
- });
235
- it('should reject zero amount', function () {
236
- assert.throws(() => {
237
- builder.amount(0n);
238
- }, /Amount must be positive/);
239
- });
240
- it('should validate large amounts', function () {
241
- const largeAmounts = [
242
- BigInt('18446744073709551615'), // Max uint64
243
- BigInt('999999999999999999999999999999'), // Very large
244
- ];
245
- largeAmounts.forEach((amount) => {
246
- assert.doesNotThrow(() => {
247
- builder.amount(amount);
248
- }, `Should validate large amount: ${amount}`);
249
- });
250
- });
251
- });
252
- describe('Integration Tests', function () {
253
- it('should handle basic P-chain export setup', function () {
254
- const amount = 5000000000000000000n; // 5 FLR
255
- // Basic setup
256
- builder.amount(amount);
257
- // Should not throw during setup
258
- assert.ok(true);
259
- });
260
- it('should handle amount conversion from different types', function () {
261
- // Test conversion from string
262
- builder.amount('1000000000000000000');
263
- // Test conversion from number
264
- builder.amount(1000000);
265
- // Test direct bigint
266
- builder.amount(2000000000000000000n);
267
- // All conversions should work
268
- assert.ok(true);
269
- });
270
- it('should maintain state across operations', function () {
271
- // Set amount
272
- builder.amount(1000000000000000000n);
273
- // Initialize with transaction
274
- const mockTx = { type: 'export' };
275
- builder.initBuilder(mockTx);
276
- // State should be maintained
277
- assert.ok(true);
278
- });
279
- it('should handle sequential amount updates', function () {
280
- // Update amount multiple times
281
- builder.amount(1000n);
282
- builder.amount(2000n);
283
- builder.amount(3000n);
284
- // Should handle updates without issues
285
- assert.ok(true);
286
- });
287
- });
288
- describe('Error Handling', function () {
289
- it('should handle invalid amount types gracefully', function () {
290
- const invalidAmounts = [null, undefined, {}, [], 'invalid'];
291
- invalidAmounts.forEach((amount) => {
292
- assert.throws(() => {
293
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
294
- builder.amount(amount);
295
- }, `Should throw for invalid amount: ${amount}`);
296
- });
297
- });
298
- it('should handle edge case string amounts', function () {
299
- const edgeCaseAmounts = ['', ' ', 'abc', '1.5', 'infinity', 'NaN'];
300
- edgeCaseAmounts.forEach((amount) => {
301
- assert.throws(() => {
302
- builder.amount(amount);
303
- }, `Should throw for edge case amount: ${amount}`);
304
- });
305
- });
306
- });
307
- describe('Inheritance Tests', function () {
308
- it('should inherit from AtomicTransactionBuilder', function () {
309
- // Test that builder has expected inherited functionality
310
- assert.ok(builder);
311
- // Should have initBuilder method
312
- assert.ok(typeof builder.initBuilder === 'function');
313
- // Should have verifyTxType method
314
- assert.ok(typeof builder.verifyTxType === 'function');
315
- });
316
- it('should have access to inherited UTXO methods', function () {
317
- // Should inherit utxos method from parent
318
- assert.ok(typeof builder.utxos === 'function');
319
- });
320
- });
321
- describe('Edge Cases', function () {
322
- it('should handle rapid consecutive operations', function () {
323
- // Rapid amount changes (start from 1 since 0 is not valid)
324
- for (let i = 1; i <= 100; i++) {
325
- builder.amount(BigInt(i * 1000));
326
- }
327
- // Should handle rapid operations
328
- assert.ok(true);
329
- });
330
- it('should handle maximum bigint values', function () {
331
- const maxValues = [
332
- BigInt(Number.MAX_SAFE_INTEGER),
333
- BigInt('18446744073709551615'), // Max uint64
334
- ];
335
- maxValues.forEach((value) => {
336
- assert.doesNotThrow(() => {
337
- builder.amount(value);
338
- }, `Should handle max value: ${value}`);
339
- });
340
- });
341
- it('should handle minimum valid values', function () {
342
- const minValues = [1n]; // Removed 0n since it's not valid
343
- minValues.forEach((value) => {
344
- assert.doesNotThrow(() => {
345
- builder.amount(value);
346
- }, `Should handle min value: ${value}`);
347
- });
348
- });
349
- });
350
- describe('Future Implementation Readiness', function () {
351
- it('should be ready for future buildFlareTransaction implementation', function () {
352
- // Setup valid state
353
- builder.amount(1000000000000000000n);
354
- // Current implementation throws, but structure is in place
355
- assert.throws(() => {
356
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
357
- builder.buildFlareTransaction();
358
- }, /not implemented/);
359
- });
360
- it('should be ready for future verifyTxType implementation', function () {
361
- // Current implementation returns false
362
- const result = builder.verifyTxType({ type: 'export' });
363
- assert.strictEqual(result, false);
364
- // But method signature is ready for implementation
365
- assert.ok(typeof builder.verifyTxType === 'function');
366
- });
367
- it('should be ready for future exportedOutputs implementation', function () {
368
- // Current implementation returns empty array
369
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
370
- const result = builder.exportedOutputs();
371
- assert.ok(Array.isArray(result));
372
- // But method exists and is ready for implementation
373
- assert.strictEqual(result.length, 0);
110
+ it('Should full sign a export tx from unsigned raw tx', () => {
111
+ const txBuilder = new lib_1.TransactionBuilderFactory(statics_1.coins.get('tflrp')).from(exportInP_1.EXPORT_IN_P.unsignedHex);
112
+ txBuilder.sign({ key: exportInP_1.EXPORT_IN_P.privateKeys[0] });
113
+ txBuilder
114
+ .build()
115
+ .then(() => assert_1.default.fail('it can sign'))
116
+ .catch((err) => {
117
+ err.message.should.be.equal('Private key cannot sign the transaction');
374
118
  });
375
119
  });
376
120
  });
377
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9leHBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBNEM7QUFDNUMsK0NBQWlDO0FBQ2pDLDRFQUF5RTtBQUV6RSxRQUFRLENBQUMsb0JBQW9CLEVBQUU7SUFDN0IsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxJQUFJLE9BQTJCLENBQUM7SUFFaEMsVUFBVSxDQUFDO1FBQ1QsT0FBTyxHQUFHLElBQUksdUNBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtZQUN2QyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLHVDQUFrQixDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0NBQXdDLEVBQUU7WUFDM0MsbUJBQW1CO1lBQ25CLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUU7WUFDMUMsOEJBQThCO1lBQzlCLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtRQUM1QixFQUFFLENBQUMsaUNBQWlDLEVBQUU7WUFDcEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEVB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LENBQUMsQ0FBQztZQUVsQyxtREFBbUQ7WUFDbkQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxZQUFZLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUU7WUFDOUQsNkNBQTZDO1lBQzdDLDhEQUE4RDtZQUM5RCxNQUFNLE1BQU0sR0FBSSxPQUFlLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFFakMsb0RBQW9EO1lBQ3BELE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBFeHBvcnRJblBUeEJ1aWxkZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2V4cG9ydEluUFR4QnVpbGRlcic7XG5cbmRlc2NyaWJlKCdFeHBvcnRJblBUeEJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQoJ3RmbHJwJyk7XG4gIGxldCBidWlsZGVyOiBFeHBvcnRJblBUeEJ1aWxkZXI7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgYnVpbGRlciA9IG5ldyBFeHBvcnRJblBUeEJ1aWxkZXIoY29pbkNvbmZpZyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgd2l0aCBjb2luIGNvbmZpZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5vayhidWlsZGVyKTtcbiAgICAgIGFzc2VydC5vayhidWlsZGVyIGluc3RhbmNlb2YgRXhwb3J0SW5QVHhCdWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXh0ZW5kIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRlc3QgaW5oZXJpdGFuY2VcbiAgICAgIGFzc2VydC5vayhidWlsZGVyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHQgYW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRGVmYXVsdCBhbW91bnQgc2hvdWxkIGJlIDBuXG4gICAgICBhc3NlcnQub2soYnVpbGRlcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBbW91bnQgTWFuYWdlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNldCB2YWxpZCBiaWdpbnQgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbGlkQW1vdW50cyA9IFsxMDAwbiwgMTAwMDAwMDAwMDAwMDAwMDAwMG4sIDk5OTk5OTk5OTk5OTk5OTk5OW5dOyAvLyBSZW1vdmVkIDBuXG5cbiAgICAgIHZhbGlkQW1vdW50cy5mb3JFYWNoKChhbW91bnQpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICAgICAgfSwgYFNob3VsZCBhY2NlcHQgYmlnaW50IGFtb3VudDogJHthbW91bnR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2V0IHN0cmluZyBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3RyaW5nQW1vdW50cyA9IFsnMTAwMCcsICcxMDAwMDAwMDAwMDAwMDAwMDAwJywgJzk5OTk5OTk5OTk5OTk5OTk5OSddOyAvLyBSZW1vdmVkICcwJ1xuXG4gICAgICBzdHJpbmdBbW91bnRzLmZvckVhY2goKGFtb3VudCkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmFtb3VudChhbW91bnQpO1xuICAgICAgICB9LCBgU2hvdWxkIGFjY2VwdCBzdHJpbmcgYW1vdW50OiAke2Ftb3VudH1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzZXQgbnVtZXJpYyBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbnVtZXJpY0Ftb3VudHMgPSBbMTAwMCwgMjAwMDAwMCwgOTk5OTk5OTk5XTsgLy8gUmVtb3ZlZCAwXG5cbiAgICAgIG51bWVyaWNBbW91bnRzLmZvckVhY2goKGFtb3VudCkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmFtb3VudChhbW91bnQpO1xuICAgICAgICB9LCBgU2hvdWxkIGFjY2VwdCBudW1lcmljIGFtb3VudDogJHthbW91bnR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHplcm8gYW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuYW1vdW50KDBuKTtcbiAgICAgIH0sIC9BbW91bnQgbXVzdCBiZSBwb3NpdGl2ZS8pO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5hbW91bnQoJzAnKTtcbiAgICAgIH0sIC9BbW91bnQgbXVzdCBiZSBwb3NpdGl2ZS8pO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5hbW91bnQoMCk7XG4gICAgICB9LCAvQW1vdW50IG11c3QgYmUgcG9zaXRpdmUvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGxhcmdlIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBsYXJnZUFtb3VudHMgPSBbXG4gICAgICAgICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLCAvLyBWZXJ5IGxhcmdlIGFtb3VudFxuICAgICAgICAnMTg0NDY3NDQwNzM3MDk1NTE2MTUnLCAvLyBOZWFyIHVpbnQ2NCBtYXhcbiAgICAgICAgQmlnSW50KCc5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknKSxcbiAgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5bixcbiAgICAgIF07XG5cbiAgICAgIGxhcmdlQW1vdW50cy5mb3JFYWNoKChhbW91bnQpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICAgICAgfSwgYFNob3VsZCBoYW5kbGUgbGFyZ2UgYW1vdW50OiAke2Ftb3VudH1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgbmVnYXRpdmUgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5lZ2F0aXZlQW1vdW50cyA9IFsnLTEwMDAnLCAnLTEnXTtcblxuICAgICAgbmVnYXRpdmVBbW91bnRzLmZvckVhY2goKGFtb3VudCkgPT4ge1xuICAgICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBFcnJvciwgLy8gdmFsaWRhdGVBbW91bnQgc2hvdWxkIHRocm93IGVycm9yIGZvciBuZWdhdGl2ZSBhbW91bnRzXG4gICAgICAgICAgYFNob3VsZCByZWplY3QgbmVnYXRpdmUgYW1vdW50OiAke2Ftb3VudH1gXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG5lZ2F0aXZlIGJpZ2ludCBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbmVnYXRpdmVCaWdpbnRzID0gWy0xbiwgLTEwMDBuLCAtOTk5OTk5OTk5OTk5bl07XG5cbiAgICAgIG5lZ2F0aXZlQmlnaW50cy5mb3JFYWNoKChhbW91bnQpID0+IHtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBidWlsZGVyLmFtb3VudChhbW91bnQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgRXJyb3IsXG4gICAgICAgICAgYFNob3VsZCByZWplY3QgbmVnYXRpdmUgYmlnaW50IGFtb3VudDogJHthbW91bnR9YFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNoYWluIGFtb3VudCBzZXR0aW5nIHdpdGggb3RoZXIgbWV0aG9kcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFtb3VudCA9IDEwMDAwMDAwMDAwMDAwMDAwMDBuOyAvLyAxIEZMUlxuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gVHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBFeHBvcnQgdHJhbnNhY3Rpb24gdHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIENhbid0IGFjY2VzcyBwcm90ZWN0ZWQgbWV0aG9kIGRpcmVjdGx5LCBidXQgdGVzdCBkb2Vzbid0IHRocm93XG4gICAgICBhc3NlcnQub2soYnVpbGRlcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBJbml0aWFsaXphdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgYnVpbGRlciBmcm9tIHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja1R4ID0geyB0eXBlOiAnZXhwb3J0JywgZGF0YTogJ3BsYWNlaG9sZGVyJyB9O1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5pbml0QnVpbGRlcihtb2NrVHgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBudWxsIHRyYW5zYWN0aW9uIGluaXRpYWxpemF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIobnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHVuZGVmaW5lZCB0cmFuc2FjdGlvbiBpbml0aWFsaXphdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHVuZGVmaW5lZCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG9iamVjdCB0cmFuc2FjdGlvbiBpbml0aWFsaXphdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUeCA9IHtcbiAgICAgICAgaWQ6ICd0ZXN0LXR4JyxcbiAgICAgICAgdHlwZTogJ2V4cG9ydCcsXG4gICAgICAgIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICBmcm9tOiAnUC1mbGFyZTFzb3VyY2UnLFxuICAgICAgICB0bzogJ0MtZmxhcmUxZGVzdCcsXG4gICAgICB9O1xuXG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5pbml0QnVpbGRlcihtb2NrVHgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdUcmFuc2FjdGlvbiBUeXBlIFZlcmlmaWNhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB0cmFuc2FjdGlvbiB0eXBlIChyZXR1cm5zIGZhbHNlIC0gbm90IGltcGxlbWVudGVkKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUeCA9IHsgdHlwZTogJ2V4cG9ydCcgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IEV4cG9ydEluUFR4QnVpbGRlci52ZXJpZnlUeFR5cGUobW9ja1R4KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGZhbHNlKTsgLy8gTm90IGltcGxlbWVudGVkIHlldFxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZGlmZmVyZW50IHRyYW5zYWN0aW9uIG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0ZXN0Q2FzZXMgPSBbe30sIG51bGwsIHVuZGVmaW5lZCwgeyB0eXBlOiAnaW1wb3J0JyB9LCB7IGRhdGE6ICd0ZXN0JyB9XTtcblxuICAgICAgdGVzdENhc2VzLmZvckVhY2goKHRlc3RDYXNlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBFeHBvcnRJblBUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHRlc3RDYXNlKTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdCwgZmFsc2UsIGBUZXN0IGNhc2UgJHtpbmRleH0gc2hvdWxkIHJldHVybiBmYWxzZSAobm90IGltcGxlbWVudGVkKWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSB2aWEgaW5zdGFuY2UgbWV0aG9kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja1R4ID0geyB0eXBlOiAnZXhwb3J0JyB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlci52ZXJpZnlUeFR5cGUobW9ja1R4KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGZhbHNlKTsgLy8gTm90IGltcGxlbWVudGVkXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBzdGF0aWMgYW5kIGluc3RhbmNlIG1ldGhvZHMgcmV0dXJuIHNhbWUgcmVzdWx0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbW9ja1R4ID0geyB0eXBlOiAnZXhwb3J0JyB9O1xuICAgICAgY29uc3Qgc3RhdGljUmVzdWx0ID0gRXhwb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZShtb2NrVHgpO1xuICAgICAgY29uc3QgaW5zdGFuY2VSZXN1bHQgPSBidWlsZGVyLnZlcmlmeVR4VHlwZShtb2NrVHgpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXRpY1Jlc3VsdCwgaW5zdGFuY2VSZXN1bHQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gQnVpbGRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvciB3aGVuIGJ1aWxkaW5nIChub3QgaW1wbGVtZW50ZWQpJywgZnVuY3Rpb24gKCkge1xuICAgICAgYnVpbGRlci5hbW91bnQoMTAwMDAwMDAwMDAwMDAwMDAwMG4pO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgLy8gQWNjZXNzIHByb3RlY3RlZCBtZXRob2QgZm9yIHRlc3RpbmdcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgKGJ1aWxkZXIgYXMgYW55KS5idWlsZEZsYXJlVHJhbnNhY3Rpb24oKTtcbiAgICAgIH0sIEVycm9yKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAoYnVpbGRlciBhcyBhbnkpLmJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpO1xuICAgICAgfSwgL0ZsYXJlIFAtY2hhaW4gZXhwb3J0IHRyYW5zYWN0aW9uIGJ1aWxkIG5vdCBpbXBsZW1lbnRlZC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRXhwb3J0ZWQgT3V0cHV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBhcnJheSBmb3IgZXhwb3J0ZWQgb3V0cHV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEFjY2VzcyBwcm90ZWN0ZWQgbWV0aG9kIGZvciB0ZXN0aW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgY29uc3QgcmVzdWx0ID0gKGJ1aWxkZXIgYXMgYW55KS5leHBvcnRlZE91dHB1dHMoKTtcblxuICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkocmVzdWx0KSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnNpc3RlbnRseSByZXR1cm4gZW1wdHkgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDYWxsIG11bHRpcGxlIHRpbWVzIHRvIGVuc3VyZSBjb25zaXN0ZW5jeVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IHJlc3VsdDEgPSAoYnVpbGRlciBhcyBhbnkpLmV4cG9ydGVkT3V0cHV0cygpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IHJlc3VsdDIgPSAoYnVpbGRlciBhcyBhbnkpLmV4cG9ydGVkT3V0cHV0cygpO1xuXG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlc3VsdDEsIHJlc3VsdDIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQW1vdW50IFZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBwb3NpdGl2ZSBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcG9zaXRpdmVBbW91bnRzID0gWzFuLCAxMDAwbiwgMTAwMDAwMDAwMDAwMDAwMDAwMG5dO1xuXG4gICAgICBwb3NpdGl2ZUFtb3VudHMuZm9yRWFjaCgoYW1vdW50KSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgICAgIH0sIGBTaG91bGQgdmFsaWRhdGUgcG9zaXRpdmUgYW1vdW50OiAke2Ftb3VudH1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgemVybyBhbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5hbW91bnQoMG4pO1xuICAgICAgfSwgL0Ftb3VudCBtdXN0IGJlIHBvc2l0aXZlLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZhbGlkYXRlIGxhcmdlIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBsYXJnZUFtb3VudHMgPSBbXG4gICAgICAgIEJpZ0ludCgnMTg0NDY3NDQwNzM3MDk1NTE2MTUnKSwgLy8gTWF4IHVpbnQ2NFxuICAgICAgICBCaWdJbnQoJzk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScpLCAvLyBWZXJ5IGxhcmdlXG4gICAgICBdO1xuXG4gICAgICBsYXJnZUFtb3VudHMuZm9yRWFjaCgoYW1vdW50KSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgICAgIH0sIGBTaG91bGQgdmFsaWRhdGUgbGFyZ2UgYW1vdW50OiAke2Ftb3VudH1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnSW50ZWdyYXRpb24gVGVzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgYmFzaWMgUC1jaGFpbiBleHBvcnQgc2V0dXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhbW91bnQgPSA1MDAwMDAwMDAwMDAwMDAwMDAwbjsgLy8gNSBGTFJcblxuICAgICAgLy8gQmFzaWMgc2V0dXBcbiAgICAgIGJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3cgZHVyaW5nIHNldHVwXG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBhbW91bnQgY29udmVyc2lvbiBmcm9tIGRpZmZlcmVudCB0eXBlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRlc3QgY29udmVyc2lvbiBmcm9tIHN0cmluZ1xuICAgICAgYnVpbGRlci5hbW91bnQoJzEwMDAwMDAwMDAwMDAwMDAwMDAnKTtcblxuICAgICAgLy8gVGVzdCBjb252ZXJzaW9uIGZyb20gbnVtYmVyXG4gICAgICBidWlsZGVyLmFtb3VudCgxMDAwMDAwKTtcblxuICAgICAgLy8gVGVzdCBkaXJlY3QgYmlnaW50XG4gICAgICBidWlsZGVyLmFtb3VudCgyMDAwMDAwMDAwMDAwMDAwMDAwbik7XG5cbiAgICAgIC8vIEFsbCBjb252ZXJzaW9ucyBzaG91bGQgd29ya1xuICAgICAgYXNzZXJ0Lm9rKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBtYWludGFpbiBzdGF0ZSBhY3Jvc3Mgb3BlcmF0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNldCBhbW91bnRcbiAgICAgIGJ1aWxkZXIuYW1vdW50KDEwMDAwMDAwMDAwMDAwMDAwMDBuKTtcblxuICAgICAgLy8gSW5pdGlhbGl6ZSB3aXRoIHRyYW5zYWN0aW9uXG4gICAgICBjb25zdCBtb2NrVHggPSB7IHR5cGU6ICdleHBvcnQnIH07XG4gICAgICBidWlsZGVyLmluaXRCdWlsZGVyKG1vY2tUeCk7XG5cbiAgICAgIC8vIFN0YXRlIHNob3VsZCBiZSBtYWludGFpbmVkXG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBzZXF1ZW50aWFsIGFtb3VudCB1cGRhdGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVXBkYXRlIGFtb3VudCBtdWx0aXBsZSB0aW1lc1xuICAgICAgYnVpbGRlci5hbW91bnQoMTAwMG4pO1xuICAgICAgYnVpbGRlci5hbW91bnQoMjAwMG4pO1xuICAgICAgYnVpbGRlci5hbW91bnQoMzAwMG4pO1xuXG4gICAgICAvLyBTaG91bGQgaGFuZGxlIHVwZGF0ZXMgd2l0aG91dCBpc3N1ZXNcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Vycm9yIEhhbmRsaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgaGFuZGxlIGludmFsaWQgYW1vdW50IHR5cGVzIGdyYWNlZnVsbHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpbnZhbGlkQW1vdW50cyA9IFtudWxsLCB1bmRlZmluZWQsIHt9LCBbXSwgJ2ludmFsaWQnXTtcblxuICAgICAgaW52YWxpZEFtb3VudHMuZm9yRWFjaCgoYW1vdW50KSA9PiB7XG4gICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgYnVpbGRlci5hbW91bnQoYW1vdW50IGFzIGFueSk7XG4gICAgICAgIH0sIGBTaG91bGQgdGhyb3cgZm9yIGludmFsaWQgYW1vdW50OiAke2Ftb3VudH1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZWRnZSBjYXNlIHN0cmluZyBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZWRnZUNhc2VBbW91bnRzID0gWycnLCAnICAnLCAnYWJjJywgJzEuNScsICdpbmZpbml0eScsICdOYU4nXTtcblxuICAgICAgZWRnZUNhc2VBbW91bnRzLmZvckVhY2goKGFtb3VudCkgPT4ge1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmFtb3VudChhbW91bnQpO1xuICAgICAgICB9LCBgU2hvdWxkIHRocm93IGZvciBlZGdlIGNhc2UgYW1vdW50OiAke2Ftb3VudH1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnSW5oZXJpdGFuY2UgVGVzdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBpbmhlcml0IGZyb20gQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGVzdCB0aGF0IGJ1aWxkZXIgaGFzIGV4cGVjdGVkIGluaGVyaXRlZCBmdW5jdGlvbmFsaXR5XG4gICAgICBhc3NlcnQub2soYnVpbGRlcik7XG5cbiAgICAgIC8vIFNob3VsZCBoYXZlIGluaXRCdWlsZGVyIG1ldGhvZFxuICAgICAgYXNzZXJ0Lm9rKHR5cGVvZiBidWlsZGVyLmluaXRCdWlsZGVyID09PSAnZnVuY3Rpb24nKTtcblxuICAgICAgLy8gU2hvdWxkIGhhdmUgdmVyaWZ5VHhUeXBlIG1ldGhvZFxuICAgICAgYXNzZXJ0Lm9rKHR5cGVvZiBidWlsZGVyLnZlcmlmeVR4VHlwZSA9PT0gJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgYWNjZXNzIHRvIGluaGVyaXRlZCBVVFhPIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTaG91bGQgaW5oZXJpdCB1dHhvcyBtZXRob2QgZnJvbSBwYXJlbnRcbiAgICAgIGFzc2VydC5vayh0eXBlb2YgYnVpbGRlci51dHhvcyA9PT0gJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFZGdlIENhc2VzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgaGFuZGxlIHJhcGlkIGNvbnNlY3V0aXZlIG9wZXJhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBSYXBpZCBhbW91bnQgY2hhbmdlcyAoc3RhcnQgZnJvbSAxIHNpbmNlIDAgaXMgbm90IHZhbGlkKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTAwOyBpKyspIHtcbiAgICAgICAgYnVpbGRlci5hbW91bnQoQmlnSW50KGkgKiAxMDAwKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNob3VsZCBoYW5kbGUgcmFwaWQgb3BlcmF0aW9uc1xuICAgICAgYXNzZXJ0Lm9rKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgbWF4aW11bSBiaWdpbnQgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWF4VmFsdWVzID0gW1xuICAgICAgICBCaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLFxuICAgICAgICBCaWdJbnQoJzE4NDQ2NzQ0MDczNzA5NTUxNjE1JyksIC8vIE1heCB1aW50NjRcbiAgICAgIF07XG5cbiAgICAgIG1heFZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmFtb3VudCh2YWx1ZSk7XG4gICAgICAgIH0sIGBTaG91bGQgaGFuZGxlIG1heCB2YWx1ZTogJHt2YWx1ZX1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgbWluaW11bSB2YWxpZCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtaW5WYWx1ZXMgPSBbMW5dOyAvLyBSZW1vdmVkIDBuIHNpbmNlIGl0J3Mgbm90IHZhbGlkXG5cbiAgICAgIG1pblZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmFtb3VudCh2YWx1ZSk7XG4gICAgICAgIH0sIGBTaG91bGQgaGFuZGxlIG1pbiB2YWx1ZTogJHt2YWx1ZX1gKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRnV0dXJlIEltcGxlbWVudGF0aW9uIFJlYWRpbmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGJlIHJlYWR5IGZvciBmdXR1cmUgYnVpbGRGbGFyZVRyYW5zYWN0aW9uIGltcGxlbWVudGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2V0dXAgdmFsaWQgc3RhdGVcbiAgICAgIGJ1aWxkZXIuYW1vdW50KDEwMDAwMDAwMDAwMDAwMDAwMDBuKTtcblxuICAgICAgLy8gQ3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aHJvd3MsIGJ1dCBzdHJ1Y3R1cmUgaXMgaW4gcGxhY2VcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAoYnVpbGRlciBhcyBhbnkpLmJ1aWxkRmxhcmVUcmFuc2FjdGlvbigpO1xuICAgICAgfSwgL25vdCBpbXBsZW1lbnRlZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSByZWFkeSBmb3IgZnV0dXJlIHZlcmlmeVR4VHlwZSBpbXBsZW1lbnRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBmYWxzZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYnVpbGRlci52ZXJpZnlUeFR5cGUoeyB0eXBlOiAnZXhwb3J0JyB9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGZhbHNlKTtcblxuICAgICAgLy8gQnV0IG1ldGhvZCBzaWduYXR1cmUgaXMgcmVhZHkgZm9yIGltcGxlbWVudGF0aW9uXG4gICAgICBhc3NlcnQub2sodHlwZW9mIGJ1aWxkZXIudmVyaWZ5VHhUeXBlID09PSAnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgcmVhZHkgZm9yIGZ1dHVyZSBleHBvcnRlZE91dHB1dHMgaW1wbGVtZW50YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDdXJyZW50IGltcGxlbWVudGF0aW9uIHJldHVybnMgZW1wdHkgYXJyYXlcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBjb25zdCByZXN1bHQgPSAoYnVpbGRlciBhcyBhbnkpLmV4cG9ydGVkT3V0cHV0cygpO1xuICAgICAgYXNzZXJ0Lm9rKEFycmF5LmlzQXJyYXkocmVzdWx0KSk7XG5cbiAgICAgIC8vIEJ1dCBtZXRob2QgZXhpc3RzIGFuZCBpcyByZWFkeSBmb3IgaW1wbGVtZW50YXRpb25cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQubGVuZ3RoLCAwKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9leHBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsa0JBQWdCO0FBQ2hCLHlFQUltRDtBQUNuRCwwQ0FBNkU7QUFDN0UsaURBQTRDO0FBQzVDLDBFQUE4QztBQUU5QyxRQUFRLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxFQUFFO0lBQzNDLE1BQU0sT0FBTyxHQUFHLElBQUksK0JBQXlCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRWxFLFFBQVEsQ0FBQywyQkFBMkIsRUFBRSxHQUFHLEVBQUU7UUFDekMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDaEQsRUFBRSxDQUFDLGtDQUFrQyxFQUFFLEdBQUcsRUFBRTtZQUMxQyxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUU7Z0JBQ0gsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixDQUFDLEVBQ0QsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssK0JBQStCLENBQzFELENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7WUFDdEQsZ0JBQU0sQ0FBQyxNQUFNLENBQ1gsR0FBRyxFQUFFO2dCQUNILFNBQVMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsQ0FBQyxFQUNELENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLDJCQUEyQixDQUN0RCxDQUFD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QUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgJ3Nob3VsZCc7XG5pbXBvcnQge1xuICBFWFBPUlRfSU5fUCBhcyB0ZXN0RGF0YSxcbiAgRVhQT1JUX0lOX1BfVFdPX1VUWE9TIGFzIHR3b1V0eG9UZXN0RGF0YSxcbiAgRVhQT1JUX0lOX1BfTk9fQ0hBTkdFIGFzIG5vQ2hhbmdlVGVzdERhdGEsXG59IGZyb20gJy4uLy4uL3Jlc291cmNlcy90cmFuc2FjdGlvbkRhdGEvZXhwb3J0SW5QJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnksIERlY29kZWRVdHhvT2JqIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYic7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHNpZ25GbG93VGVzdCBmcm9tICcuL3NpZ25GbG93VGVzdFN1aXQnO1xuXG5kZXNjcmliZSgnRmxycCBFeHBvcnQgSW4gUCBUeCBCdWlsZGVyJywgKCkgPT4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKTtcblxuICBkZXNjcmliZSgndmFsaWRhdGUgdHhCdWlsZGVyIGZpZWxkcycsICgpID0+IHtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEV4cG9ydEluUEJ1aWxkZXIoKTtcbiAgICBpdCgnc2hvdWxkIGZhaWwgYW1vdW50IGxvdyB0aGFuIHplcm8nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmFtb3VudCgnLTEnKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnQW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnXG4gICAgICApO1xuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgZmFpbCB0YXJnZXQgY2hhaW4gaWQgbGVuZ3RoIGluY29ycmVjdCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIuZXh0ZXJuYWxDaGFpbklkKEJ1ZmZlci5mcm9tKHRlc3REYXRhLklOVkFMSURfQ0hBSU5fSUQuc2xpY2UoMikpKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnQ2hhaW4gaWQgYXJlIDMyIGJ5dGUgc2l6ZSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdGFyZ2V0IGNoYWluIGlkIG5vdCBhIHZhbGlkIGJhc2U1OCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5JTlZBTElEX0NIQUlOX0lEKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnTm9uLWJhc2U1OCBjaGFyYWN0ZXInXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRhcmdldCBjaGFpbiBpZCBjYjU4IGludmFsaWQgY2hlY2tzdW0nLCAoKSA9PiB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdHhCdWlsZGVyLmV4dGVybmFsQ2hhaW5JZCh0ZXN0RGF0YS5WQUxJRF9DX0NIQUlOX0lELnNsaWNlKDIpKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnSW52YWxpZCBjaGVja3N1bSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdmFsaWRhdGUgVXR4b3MgZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHR4QnVpbGRlci52YWxpZGF0ZVV0eG9zKFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnVVRYT3MgYXJyYXkgY2Fubm90IGJlIGVtcHR5J1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB2YWxpZGF0ZSBVdHhvcyB3aXRob3V0IGFtb3VudCBmaWVsZCcsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0eEJ1aWxkZXIudmFsaWRhdGVVdHhvcyhbeyBvdXRwdXRJRDogJycgfSBhcyBhbnkgYXMgRGVjb2RlZFV0eG9PYmpdKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlID09PSAnVVRYTyBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkOiBhbW91bnQnXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBzaWduRmxvd1Rlc3Qoe1xuICAgIHRyYW5zYWN0aW9uVHlwZTogJ0V4cG9ydCBQMkMgd2l0aCBjaGFuZ2VvdXRwdXQnLFxuICAgIG5ld1R4RmFjdG9yeTogKCkgPT4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KCd0ZmxycCcpKSxcbiAgICBuZXdUeEJ1aWxkZXI6ICgpID0+XG4gICAgICBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpXG4gICAgICAgIC5nZXRFeHBvcnRJblBCdWlsZGVyKClcbiAgICAgICAgLnRocmVzaG9sZCh0ZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0ZXN0RGF0YS5sb2NrdGltZSlcbiAgICAgICAgLmZyb21QdWJLZXkodGVzdERhdGEucEFkZHJlc3NlcylcbiAgICAgICAgLmFtb3VudCh0ZXN0RGF0YS5hbW91bnQpXG4gICAgICAgIC5leHRlcm5hbENoYWluSWQodGVzdERhdGEuc291cmNlQ2hhaW5JZClcbiAgICAgICAgLmZlZSh0ZXN0RGF0YS5mZWUpXG4gICAgICAgIC51dHhvcyh0ZXN0RGF0YS5vdXRwdXRzKSxcbiAgICB1bnNpZ25lZFR4SGV4OiB0ZXN0RGF0YS51bnNpZ25lZEhleCxcbiAgICBoYWxmU2lnbmVkVHhIZXg6IHRlc3REYXRhLmhhbGZTaWdudHhIZXgsXG4gICAgZnVsbFNpZ25lZFR4SGV4OiB0ZXN0RGF0YS5mdWxsU2lnbnR4SGV4LFxuICAgIHByaXZhdGVLZXk6IHtcbiAgICAgIHBydjE6IHRlc3REYXRhLnByaXZhdGVLZXlzWzBdLFxuICAgICAgcHJ2MjogdGVzdERhdGEucHJpdmF0ZUtleXNbMV0sXG4gICAgfSxcbiAgICB0eEhhc2g6IHRlc3REYXRhLnR4aGFzaCxcbiAgfSk7XG5cbiAgc2lnbkZsb3dUZXN0KHtcbiAgICB0cmFuc2FjdGlvblR5cGU6ICdFeHBvcnQgUDJDIHdpdGggMiBVVFhPcycsXG4gICAgbmV3VHhGYWN0b3J5OiAoKSA9PiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpLFxuICAgIG5ld1R4QnVpbGRlcjogKCkgPT5cbiAgICAgIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSlcbiAgICAgICAgLmdldEV4cG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKHR3b1V0eG9UZXN0RGF0YS50aHJlc2hvbGQpXG4gICAgICAgIC5sb2NrdGltZSh0d29VdHhvVGVzdERhdGEubG9ja3RpbWUpXG4gICAgICAgIC5mcm9tUHViS2V5KHR3b1V0eG9UZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuYW1vdW50KHR3b1V0eG9UZXN0RGF0YS5hbW91bnQpXG4gICAgICAgIC5leHRlcm5hbENoYWluSWQodHdvVXR4b1Rlc3REYXRhLnNvdXJjZUNoYWluSWQpXG4gICAgICAgIC5mZWUodHdvVXR4b1Rlc3REYXRhLmZlZSlcbiAgICAgICAgLnV0eG9zKHR3b1V0eG9UZXN0RGF0YS5vdXRwdXRzKSxcbiAgICB1bnNpZ25lZFR4SGV4OiB0d29VdHhvVGVzdERhdGEudW5zaWduZWRIZXgsXG4gICAgaGFsZlNpZ25lZFR4SGV4OiB0d29VdHhvVGVzdERhdGEuaGFsZlNpZ250eEhleCxcbiAgICBmdWxsU2lnbmVkVHhIZXg6IHR3b1V0eG9UZXN0RGF0YS5mdWxsU2lnbnR4SGV4LFxuICAgIHByaXZhdGVLZXk6IHtcbiAgICAgIHBydjE6IHR3b1V0eG9UZXN0RGF0YS5wcml2YXRlS2V5c1swXSxcbiAgICAgIHBydjI6IHR3b1V0eG9UZXN0RGF0YS5wcml2YXRlS2V5c1sxXSxcbiAgICB9LFxuICAgIHR4SGFzaDogdHdvVXR4b1Rlc3REYXRhLnR4aGFzaCxcbiAgfSk7XG5cbiAgc2lnbkZsb3dUZXN0KHtcbiAgICB0cmFuc2FjdGlvblR5cGU6ICdFeHBvcnQgUDJDIHdpdGggbm8gY2hhbmdlIG91dHB1dCcsXG4gICAgbmV3VHhGYWN0b3J5OiAoKSA9PiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQoJ3RmbHJwJykpLFxuICAgIG5ld1R4QnVpbGRlcjogKCkgPT5cbiAgICAgIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSlcbiAgICAgICAgLmdldEV4cG9ydEluUEJ1aWxkZXIoKVxuICAgICAgICAudGhyZXNob2xkKG5vQ2hhbmdlVGVzdERhdGEudGhyZXNob2xkKVxuICAgICAgICAubG9ja3RpbWUobm9DaGFuZ2VUZXN0RGF0YS5sb2NrdGltZSlcbiAgICAgICAgLmZyb21QdWJLZXkobm9DaGFuZ2VUZXN0RGF0YS5wQWRkcmVzc2VzKVxuICAgICAgICAuYW1vdW50KG5vQ2hhbmdlVGVzdERhdGEuYW1vdW50KVxuICAgICAgICAuZXh0ZXJuYWxDaGFpbklkKG5vQ2hhbmdlVGVzdERhdGEuc291cmNlQ2hhaW5JZClcbiAgICAgICAgLmZlZShub0NoYW5nZVRlc3REYXRhLmZlZSlcbiAgICAgICAgLnV0eG9zKG5vQ2hhbmdlVGVzdERhdGEub3V0cHV0cyksXG4gICAgdW5zaWduZWRUeEhleDogbm9DaGFuZ2VUZXN0RGF0YS51bnNpZ25lZEhleCxcbiAgICBoYWxmU2lnbmVkVHhIZXg6IG5vQ2hhbmdlVGVzdERhdGEuaGFsZlNpZ250eEhleCxcbiAgICBmdWxsU2lnbmVkVHhIZXg6IG5vQ2hhbmdlVGVzdERhdGEuZnVsbFNpZ250eEhleCxcbiAgICBwcml2YXRlS2V5OiB7XG4gICAgICBwcnYxOiBub0NoYW5nZVRlc3REYXRhLnByaXZhdGVLZXlzWzBdLFxuICAgICAgcHJ2Mjogbm9DaGFuZ2VUZXN0RGF0YS5wcml2YXRlS2V5c1sxXSxcbiAgICB9LFxuICAgIHR4SGFzaDogbm9DaGFuZ2VUZXN0RGF0YS50eGhhc2gsXG4gIH0pO1xuXG4gIGl0KCdTaG91bGQgZnVsbCBzaWduIGEgZXhwb3J0IHR4IGZyb20gdW5zaWduZWQgcmF3IHR4JywgKCkgPT4ge1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCgndGZscnAnKSkuZnJvbSh0ZXN0RGF0YS51bnNpZ25lZEhleCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHRlc3REYXRhLnByaXZhdGVLZXlzWzBdIH0pO1xuICAgIHR4QnVpbGRlclxuICAgICAgLmJ1aWxkKClcbiAgICAgIC50aGVuKCgpID0+IGFzc2VydC5mYWlsKCdpdCBjYW4gc2lnbicpKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgZXJyLm1lc3NhZ2Uuc2hvdWxkLmJlLmVxdWFsKCdQcml2YXRlIGtleSBjYW5ub3Qgc2lnbiB0aGUgdHJhbnNhY3Rpb24nKTtcbiAgICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
@@ -1,2 +1,2 @@
1
- export {};
1
+ import 'should';
2
2
  //# sourceMappingURL=importInCTxBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"importInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/importInCTxBuilder.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"importInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/importInCTxBuilder.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,CAAC"}