@bitgo-beta/sdk-coin-sol 2.4.3-beta.127 → 2.4.3-beta.1271

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 (170) hide show
  1. package/dist/src/bigint-buffer-guard.d.ts +1 -0
  2. package/dist/src/bigint-buffer-guard.d.ts.map +1 -0
  3. package/dist/src/bigint-buffer-guard.js +29 -0
  4. package/dist/src/config/token2022StaticConfig.d.ts +3 -0
  5. package/dist/src/config/token2022StaticConfig.d.ts.map +1 -0
  6. package/dist/src/config/token2022StaticConfig.js +50 -0
  7. package/dist/src/index.d.ts +1 -0
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +7 -2
  10. package/dist/src/lib/ataInitializationBuilder.d.ts.map +1 -1
  11. package/dist/src/lib/ataInitializationBuilder.js +60 -22
  12. package/dist/src/lib/closeAtaBuilder.d.ts +19 -0
  13. package/dist/src/lib/closeAtaBuilder.d.ts.map +1 -0
  14. package/dist/src/lib/closeAtaBuilder.js +69 -0
  15. package/dist/src/lib/constants.d.ts +63 -8
  16. package/dist/src/lib/constants.d.ts.map +1 -1
  17. package/dist/src/lib/constants.js +73 -10
  18. package/dist/src/lib/customInstructionBuilder.d.ts +72 -0
  19. package/dist/src/lib/customInstructionBuilder.d.ts.map +1 -0
  20. package/dist/src/lib/customInstructionBuilder.js +289 -0
  21. package/dist/src/lib/iface.d.ts +105 -5
  22. package/dist/src/lib/iface.d.ts.map +1 -1
  23. package/dist/src/lib/iface.js +1 -1
  24. package/dist/src/lib/index.d.ts +13 -10
  25. package/dist/src/lib/index.d.ts.map +1 -1
  26. package/dist/src/lib/index.js +48 -28
  27. package/dist/src/lib/instructionParamsFactory.d.ts +1 -1
  28. package/dist/src/lib/instructionParamsFactory.d.ts.map +1 -1
  29. package/dist/src/lib/instructionParamsFactory.js +521 -85
  30. package/dist/src/lib/jitoStakePoolOperations.d.ts +113 -0
  31. package/dist/src/lib/jitoStakePoolOperations.d.ts.map +1 -0
  32. package/dist/src/lib/jitoStakePoolOperations.js +200 -0
  33. package/dist/src/lib/keyPair.js +5 -5
  34. package/dist/src/lib/messages/index.d.ts +2 -0
  35. package/dist/src/lib/messages/index.d.ts.map +1 -0
  36. package/dist/src/lib/messages/index.js +18 -0
  37. package/dist/src/lib/messages/messageBuilderFactory.d.ts +7 -0
  38. package/dist/src/lib/messages/messageBuilderFactory.d.ts.map +1 -0
  39. package/dist/src/lib/messages/messageBuilderFactory.js +19 -0
  40. package/dist/src/lib/solInstructionFactory.d.ts.map +1 -1
  41. package/dist/src/lib/solInstructionFactory.js +363 -95
  42. package/dist/src/lib/stakingActivateBuilder.d.ts +18 -0
  43. package/dist/src/lib/stakingActivateBuilder.d.ts.map +1 -1
  44. package/dist/src/lib/stakingActivateBuilder.js +34 -8
  45. package/dist/src/lib/stakingAuthorizeBuilder.js +7 -7
  46. package/dist/src/lib/stakingDeactivateBuilder.d.ts +27 -1
  47. package/dist/src/lib/stakingDeactivateBuilder.d.ts.map +1 -1
  48. package/dist/src/lib/stakingDeactivateBuilder.js +82 -15
  49. package/dist/src/lib/stakingDelegateBuilder.js +9 -9
  50. package/dist/src/lib/stakingRawMsgAuthorizeBuilder.js +5 -5
  51. package/dist/src/lib/stakingWithdrawBuilder.js +6 -6
  52. package/dist/src/lib/token2022Config.d.ts +44 -0
  53. package/dist/src/lib/token2022Config.d.ts.map +1 -0
  54. package/dist/src/lib/token2022Config.js +27 -0
  55. package/dist/src/lib/tokenTransferBuilder.d.ts +4 -1
  56. package/dist/src/lib/tokenTransferBuilder.d.ts.map +1 -1
  57. package/dist/src/lib/tokenTransferBuilder.js +87 -23
  58. package/dist/src/lib/transaction.d.ts +42 -6
  59. package/dist/src/lib/transaction.d.ts.map +1 -1
  60. package/dist/src/lib/transaction.js +185 -67
  61. package/dist/src/lib/transactionBuilder.d.ts +20 -3
  62. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  63. package/dist/src/lib/transactionBuilder.js +106 -20
  64. package/dist/src/lib/transactionBuilderFactory.d.ts +19 -9
  65. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  66. package/dist/src/lib/transactionBuilderFactory.js +29 -10
  67. package/dist/src/lib/transferBuilder.js +4 -4
  68. package/dist/src/lib/transferBuilderV2.d.ts +14 -1
  69. package/dist/src/lib/transferBuilderV2.d.ts.map +1 -1
  70. package/dist/src/lib/transferBuilderV2.js +114 -11
  71. package/dist/src/lib/utils.d.ts +37 -6
  72. package/dist/src/lib/utils.d.ts.map +1 -1
  73. package/dist/src/lib/utils.js +194 -58
  74. package/dist/src/lib/walletInitializationBuilder.js +6 -6
  75. package/dist/src/sol.d.ts +67 -23
  76. package/dist/src/sol.d.ts.map +1 -1
  77. package/dist/src/sol.js +586 -90
  78. package/dist/src/solToken.d.ts +2 -1
  79. package/dist/src/solToken.d.ts.map +1 -1
  80. package/dist/src/solToken.js +6 -3
  81. package/dist/src/tsol.js +1 -1
  82. package/dist/test/fixtures/sol.d.ts +1152 -0
  83. package/dist/test/fixtures/sol.d.ts.map +1 -0
  84. package/dist/test/fixtures/sol.js +1433 -0
  85. package/dist/test/resources/sol.d.ts +238 -0
  86. package/dist/test/resources/sol.d.ts.map +1 -0
  87. package/dist/test/resources/sol.js +320 -0
  88. package/dist/test/unit/fixtures/solBackupKey.d.ts +5 -0
  89. package/dist/test/unit/fixtures/solBackupKey.d.ts.map +1 -0
  90. package/dist/test/unit/fixtures/solBackupKey.js +8 -0
  91. package/dist/test/unit/getBuilderFactory.d.ts +3 -0
  92. package/dist/test/unit/getBuilderFactory.d.ts.map +1 -0
  93. package/dist/test/unit/getBuilderFactory.js +10 -0
  94. package/dist/test/unit/instructionParamsFactory.d.ts +2 -0
  95. package/dist/test/unit/instructionParamsFactory.d.ts.map +1 -0
  96. package/dist/test/unit/instructionParamsFactory.js +412 -0
  97. package/dist/test/unit/instructionParamsFactory.staking.d.ts +2 -0
  98. package/dist/test/unit/instructionParamsFactory.staking.d.ts.map +1 -0
  99. package/dist/test/unit/instructionParamsFactory.staking.js +1059 -0
  100. package/dist/test/unit/keyPair.d.ts +2 -0
  101. package/dist/test/unit/keyPair.d.ts.map +1 -0
  102. package/dist/test/unit/keyPair.js +177 -0
  103. package/dist/test/unit/messages/messageBuilderFactory.d.ts +2 -0
  104. package/dist/test/unit/messages/messageBuilderFactory.d.ts.map +1 -0
  105. package/dist/test/unit/messages/messageBuilderFactory.js +118 -0
  106. package/dist/test/unit/messages/simpleMessageBuilder.d.ts +2 -0
  107. package/dist/test/unit/messages/simpleMessageBuilder.d.ts.map +1 -0
  108. package/dist/test/unit/messages/simpleMessageBuilder.js +194 -0
  109. package/dist/test/unit/sol.d.ts +2 -0
  110. package/dist/test/unit/sol.d.ts.map +1 -0
  111. package/dist/test/unit/sol.js +3065 -0
  112. package/dist/test/unit/solInstructionFactory.d.ts +2 -0
  113. package/dist/test/unit/solInstructionFactory.d.ts.map +1 -0
  114. package/dist/test/unit/solInstructionFactory.js +454 -0
  115. package/dist/test/unit/solToken.d.ts +2 -0
  116. package/dist/test/unit/solToken.d.ts.map +1 -0
  117. package/dist/test/unit/solToken.js +31 -0
  118. package/dist/test/unit/transaction.d.ts +2 -0
  119. package/dist/test/unit/transaction.d.ts.map +1 -0
  120. package/dist/test/unit/transaction.js +983 -0
  121. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts +2 -0
  122. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.d.ts.map +1 -0
  123. package/dist/test/unit/transactionBuilder/StakingWithdrawBuilder.js +202 -0
  124. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts +2 -0
  125. package/dist/test/unit/transactionBuilder/ataInitBuilder.d.ts.map +1 -0
  126. package/dist/test/unit/transactionBuilder/ataInitBuilder.js +471 -0
  127. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts +2 -0
  128. package/dist/test/unit/transactionBuilder/customInstructionBuilder.d.ts.map +1 -0
  129. package/dist/test/unit/transactionBuilder/customInstructionBuilder.js +413 -0
  130. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts +2 -0
  131. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.d.ts.map +1 -0
  132. package/dist/test/unit/transactionBuilder/stakingActivateBuilder.js +430 -0
  133. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts +2 -0
  134. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.d.ts.map +1 -0
  135. package/dist/test/unit/transactionBuilder/stakingAuthorizeBuilder.js +157 -0
  136. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts +2 -0
  137. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.d.ts.map +1 -0
  138. package/dist/test/unit/transactionBuilder/stakingDeactivateBuilder.js +384 -0
  139. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts +2 -0
  140. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.d.ts.map +1 -0
  141. package/dist/test/unit/transactionBuilder/stakingDelegateBuilder.js +224 -0
  142. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts +2 -0
  143. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.d.ts.map +1 -0
  144. package/dist/test/unit/transactionBuilder/stakingRawMsgAuthorizeBuilder.js +259 -0
  145. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts +2 -0
  146. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.d.ts.map +1 -0
  147. package/dist/test/unit/transactionBuilder/tokenTransferBuilder.js +787 -0
  148. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts +2 -0
  149. package/dist/test/unit/transactionBuilder/transactionBuilder.d.ts.map +1 -0
  150. package/dist/test/unit/transactionBuilder/transactionBuilder.js +495 -0
  151. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  152. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  153. package/dist/test/unit/transactionBuilder/transferBuilder.js +286 -0
  154. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts +2 -0
  155. package/dist/test/unit/transactionBuilder/transferBuilderV2.d.ts.map +1 -0
  156. package/dist/test/unit/transactionBuilder/transferBuilderV2.js +862 -0
  157. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts +2 -0
  158. package/dist/test/unit/transactionBuilder/walletInitBuilder.d.ts.map +1 -0
  159. package/dist/test/unit/transactionBuilder/walletInitBuilder.js +259 -0
  160. package/dist/test/unit/utils.d.ts +2 -0
  161. package/dist/test/unit/utils.d.ts.map +1 -0
  162. package/dist/test/unit/utils.js +459 -0
  163. package/dist/test/unit/versionedTransaction.d.ts +2 -0
  164. package/dist/test/unit/versionedTransaction.d.ts.map +1 -0
  165. package/dist/test/unit/versionedTransaction.js +205 -0
  166. package/dist/tsconfig.tsbuildinfo +1 -0
  167. package/package.json +16 -11
  168. package/.eslintignore +0 -5
  169. package/.mocharc.yml +0 -8
  170. package/CHANGELOG.md +0 -353
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const should_1 = __importDefault(require("should"));
40
+ const src_1 = require("../../src");
41
+ const testData = __importStar(require("../resources/sol"));
42
+ const getBuilderFactory_1 = require("./getBuilderFactory");
43
+ const bs58_1 = __importDefault(require("bs58"));
44
+ const { VersionedTransaction } = require('@solana/web3.js');
45
+ describe('Sol Jupiter Swap Transaction', () => {
46
+ const walletKeyPair = new src_1.KeyPair(testData.authAccount);
47
+ const wallet = walletKeyPair.getKeys();
48
+ it('should preserve instructions and ALTs when building and signing', async function () {
49
+ // Jupiter Swap Transaction (Versioned)
50
+ const versionedTransaction = 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAFDTWoM5DBCGn7cn5aV56fomo6mhD2K1c5XYhQIan41E6dG9t06ox6DMdvVuBnSEATyN/8qIq246iO5aDm1jm82x4wM40FR8Q7xSZUpUtB0lbvelaZ46oRQ2GM9hWGMukHG1EUsA1R9ZO55ClUvNMyw8IQOrfRmu3ONG50oNeluT4LgaOacN+I4d0HStcu+oh0no4XXgVUwjzk5+egiUaQDkCCjXAlSDAb46ahLAfWeKOqzO/HC/z2WgRk8RS1yc6heMZzBbR3SPDwrNvWlCZGaETaixiH9ufdOJ823Gv+MnxH1SOu6TCsX1+TMskj94D3NElDpado8okFQbUuzaijU9oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAEedVb8jHAbu50xW7OaBUH/bGy3qP0jlECsc2iVrwTjwbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCp+mGpF4I4ZrV12bapJ7p61Babt3ty7HYDUKtMso38OYgHCgAFAooyBAAKAAkDoQ4BAAAAAAAIAgAFDAIAAAAwKyIAAAAAAAsFBQAgDAgJk/F7ZPSErnb/CQYABwAdCAwBAQs/HgAFDg0HIB0MDBwLJg8mEBIODSAdESYeDAwkJgIDBgsmGyYWGQ4EICUaJh4MDCQmGBcBCyIjDCEeBA0VExQfMtGYU5N8/tjpC0ANAwAAAAAAWqwAAAAAAAAyAAAAAAADAAAAJiwaAAMm5AwAAgoQJwIDDAMFAAABCQQpv5UHKk+/BN9xdZPnOLzMIScoFcJHGoDZ+fVVsNSEJQI0IwUAKA4CFyo9SDjsPdfWXAdMF0mu2+xZbw9rbR6rzNAEeFkLmyKwBGBmYWUAMHCJ6Oi0A1Qjpjp1Yv3xP+sPLm2qJ//TKZd5Z9KzjvEDwb3CA77DwOtKd1MCu6h4XJjC42yc8TcL92nhzFUR6HLW3XrAIZOvBo6Ki5CRjQOMk5Q=';
51
+ const originalDeserialized = VersionedTransaction.deserialize(Buffer.from(versionedTransaction, 'base64'));
52
+ const versionedInstructions = originalDeserialized.message.compiledInstructions.map((ix) => ({
53
+ programIdIndex: ix.programIdIndex,
54
+ accountKeyIndexes: ix.accountKeyIndexes,
55
+ data: bs58_1.default.encode(ix.data),
56
+ }));
57
+ const addressLookupTables = originalDeserialized.message.addressTableLookups?.map((lookup) => ({
58
+ accountKey: lookup.accountKey.toBase58(),
59
+ writableIndexes: lookup.writableIndexes,
60
+ readonlyIndexes: lookup.readonlyIndexes,
61
+ })) || [];
62
+ const staticAccountKeys = originalDeserialized.message.staticAccountKeys.map((key) => key.toBase58());
63
+ staticAccountKeys[0] = testData.authAccount.pub; // Replace fee payer with our test account
64
+ const versionedTransactionData = {
65
+ versionedInstructions,
66
+ addressLookupTables,
67
+ staticAccountKeys,
68
+ messageHeader: originalDeserialized.message.header,
69
+ };
70
+ const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsol');
71
+ const txBuilder = factory.getCustomInstructionBuilder();
72
+ // Build transaction from versioned transaction data
73
+ txBuilder.fromVersionedTransactionData(versionedTransactionData);
74
+ txBuilder.nonce(testData.blockHashes.validBlockHashes[0]);
75
+ // Build unsigned transaction
76
+ const txUnsigned = (await txBuilder.build());
77
+ should_1.default.exist(txUnsigned);
78
+ txUnsigned.isVersionedTransaction().should.be.true();
79
+ should_1.default.exist(txUnsigned.toBroadcastFormat());
80
+ // Sign the transaction
81
+ txBuilder.sign({ key: wallet.prv });
82
+ const tx = (await txBuilder.build());
83
+ const rawTx = tx.toBroadcastFormat();
84
+ tx.isVersionedTransaction().should.be.true();
85
+ should_1.default.exist(rawTx);
86
+ const txBuilder2 = factory.getCustomInstructionBuilder();
87
+ txBuilder2.fromVersionedTransactionData(versionedTransactionData);
88
+ txBuilder2.nonce(testData.blockHashes.validBlockHashes[0]);
89
+ const tx2 = await txBuilder2.build();
90
+ should_1.default.equal(tx2.signablePayload.toString('hex'), txUnsigned.signablePayload.toString('hex'));
91
+ should_1.default.equal(tx2.type, txUnsigned.type);
92
+ // Verify we can add signature manually
93
+ const signed = tx.signature[0];
94
+ const txBuilder3 = factory.getCustomInstructionBuilder();
95
+ txBuilder3.fromVersionedTransactionData(versionedTransactionData);
96
+ txBuilder3.nonce(testData.blockHashes.validBlockHashes[0]);
97
+ await txBuilder3.addSignature({ pub: wallet.pub }, Buffer.from(bs58_1.default.decode(signed)));
98
+ const signedTx = await txBuilder3.build();
99
+ should_1.default.equal(signedTx.type, tx.type);
100
+ const rawSignedTx = signedTx.toBroadcastFormat();
101
+ should_1.default.equal(rawSignedTx, rawTx);
102
+ const signedDeserialized = VersionedTransaction.deserialize(Buffer.from(rawTx, 'base64'));
103
+ // Verify all instructions are preserved
104
+ const origInstructions = originalDeserialized.message.compiledInstructions;
105
+ const signedInstructions = signedDeserialized.message.compiledInstructions;
106
+ should_1.default.equal(origInstructions.length, signedInstructions.length, 'Number of instructions should match');
107
+ for (let i = 0; i < origInstructions.length; i++) {
108
+ should_1.default.equal(origInstructions[i].programIdIndex, signedInstructions[i].programIdIndex, `Instruction ${i}: programIdIndex should match`);
109
+ should_1.default.deepEqual(origInstructions[i].accountKeyIndexes, signedInstructions[i].accountKeyIndexes, `Instruction ${i}: accountKeyIndexes should match`);
110
+ should_1.default.equal(Buffer.from(origInstructions[i].data).toString('hex'), Buffer.from(signedInstructions[i].data).toString('hex'), `Instruction ${i}: data should match`);
111
+ }
112
+ // Verify all ALTs are preserved
113
+ const origALTs = originalDeserialized.message.addressTableLookups || [];
114
+ const signedALTs = signedDeserialized.message.addressTableLookups || [];
115
+ should_1.default.equal(origALTs.length, signedALTs.length, 'Number of ALTs should match');
116
+ for (let i = 0; i < origALTs.length; i++) {
117
+ should_1.default.equal(origALTs[i].accountKey.toBase58(), signedALTs[i].accountKey.toBase58(), `ALT ${i}: accountKey should match`);
118
+ should_1.default.deepEqual(origALTs[i].writableIndexes, signedALTs[i].writableIndexes, `ALT ${i}: writableIndexes should match`);
119
+ should_1.default.deepEqual(origALTs[i].readonlyIndexes, signedALTs[i].readonlyIndexes, `ALT ${i}: readonlyIndexes should match`);
120
+ }
121
+ });
122
+ it('should automatically inject nonce advance instruction when using durable nonce with versioned transactions', async function () {
123
+ // Simple transaction with one memo instruction
124
+ const versionedTransactionData = {
125
+ versionedInstructions: [
126
+ {
127
+ programIdIndex: 1,
128
+ accountKeyIndexes: [0],
129
+ data: bs58_1.default.encode(Buffer.from('Hello Versioned Tx', 'utf-8')),
130
+ },
131
+ ],
132
+ addressLookupTables: [],
133
+ staticAccountKeys: [testData.authAccount.pub, 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'],
134
+ messageHeader: {
135
+ numRequiredSignatures: 1,
136
+ numReadonlySignedAccounts: 0,
137
+ numReadonlyUnsignedAccounts: 0,
138
+ },
139
+ };
140
+ const durableNonceParams = {
141
+ walletNonceAddress: 'GHtXQBsoZHVnNFa9YevAzxNzQBz7CV5hj6bSe3u52W9n',
142
+ authWalletAddress: '8Y7RM6JfcX4ASSNBkrkrmScq3Z9UWV4CJBwtfSNgqTN2',
143
+ };
144
+ const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsol');
145
+ const txBuilder = factory.getCustomInstructionBuilder();
146
+ // Providing durableNonceParams triggers automatic nonce advance injection
147
+ txBuilder.nonce(testData.blockHashes.validBlockHashes[0], durableNonceParams);
148
+ txBuilder.fromVersionedTransactionData(versionedTransactionData);
149
+ const tx = (await txBuilder.build());
150
+ const builtData = tx.getVersionedTransactionData();
151
+ should_1.default.exist(builtData);
152
+ // Nonce advance instruction should be prepended
153
+ builtData.versionedInstructions.length.should.equal(2);
154
+ const nonceInstruction = builtData.versionedInstructions[0];
155
+ nonceInstruction.accountKeyIndexes.length.should.equal(3);
156
+ // numRequiredSignatures should be updated to include nonce authority
157
+ const numSigners = builtData.messageHeader.numRequiredSignatures;
158
+ numSigners.should.equal(2);
159
+ // Both fee payer and nonce authority should be in signer section
160
+ const signerKeys = builtData.staticAccountKeys.slice(0, numSigners);
161
+ signerKeys.should.containEql(testData.authAccount.pub);
162
+ signerKeys.should.containEql(durableNonceParams.authWalletAddress);
163
+ // Fee payer must remain at index 0
164
+ builtData.staticAccountKeys[0].should.equal(testData.authAccount.pub);
165
+ // Required accounts for nonce advance should be added
166
+ builtData.staticAccountKeys.should.containEql(durableNonceParams.walletNonceAddress);
167
+ builtData.staticAccountKeys.should.containEql('11111111111111111111111111111111');
168
+ builtData.staticAccountKeys.should.containEql('SysvarRecentB1ockHashes11111111111111111111');
169
+ // Original instruction indices should be remapped after account reordering
170
+ const originalInstruction = builtData.versionedInstructions[1];
171
+ originalInstruction.programIdIndex.should.equal(builtData.staticAccountKeys.indexOf('MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'));
172
+ originalInstruction.accountKeyIndexes[0].should.equal(builtData.staticAccountKeys.indexOf(testData.authAccount.pub));
173
+ });
174
+ it('should not inject nonce advance when using regular nonce (no durableNonceParams)', async function () {
175
+ const versionedTransactionData = {
176
+ versionedInstructions: [
177
+ {
178
+ programIdIndex: 1,
179
+ accountKeyIndexes: [0],
180
+ data: bs58_1.default.encode(Buffer.from('Hello', 'utf-8')),
181
+ },
182
+ ],
183
+ addressLookupTables: [],
184
+ staticAccountKeys: [testData.authAccount.pub, 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'],
185
+ messageHeader: {
186
+ numRequiredSignatures: 1,
187
+ numReadonlySignedAccounts: 0,
188
+ numReadonlyUnsignedAccounts: 0,
189
+ },
190
+ };
191
+ const factory = (0, getBuilderFactory_1.getBuilderFactory)('tsol');
192
+ const txBuilder = factory.getCustomInstructionBuilder();
193
+ // Regular nonce without durableNonceParams should not trigger injection
194
+ txBuilder.nonce(testData.blockHashes.validBlockHashes[0]);
195
+ txBuilder.fromVersionedTransactionData(versionedTransactionData);
196
+ const tx = (await txBuilder.build());
197
+ const builtData = tx.getVersionedTransactionData();
198
+ should_1.default.exist(builtData);
199
+ // Transaction should remain unchanged
200
+ builtData.versionedInstructions.length.should.equal(1);
201
+ builtData.messageHeader.numRequiredSignatures.should.equal(1);
202
+ builtData.staticAccountKeys.length.should.equal(2);
203
+ });
204
+ });
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbmVkVHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdmVyc2lvbmVkVHJhbnNhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsbUNBQWlEO0FBQ2pELDJEQUE2QztBQUM3QywyREFBd0Q7QUFDeEQsZ0RBQTBCO0FBQzFCLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBRTVELFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7SUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUV2QyxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSztRQUN6RSx1Q0FBdUM7UUFDdkMsTUFBTSxvQkFBb0IsR0FDeEIsMG9DQUEwb0MsQ0FBQztRQUU3b0MsTUFBTSxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRTNHLE1BQU0scUJBQXFCLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzRixjQUFjLEVBQUUsRUFBRSxDQUFDLGNBQWM7WUFDakMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLGlCQUFpQjtZQUN2QyxJQUFJLEVBQUUsY0FBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1NBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUosTUFBTSxtQkFBbUIsR0FDdkIsb0JBQW9C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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBLZXlQYWlyLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgKiBhcyB0ZXN0RGF0YSBmcm9tICcuLi9yZXNvdXJjZXMvc29sJztcbmltcG9ydCB7IGdldEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9nZXRCdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuY29uc3QgeyBWZXJzaW9uZWRUcmFuc2FjdGlvbiB9ID0gcmVxdWlyZSgnQHNvbGFuYS93ZWIzLmpzJyk7XG5cbmRlc2NyaWJlKCdTb2wgSnVwaXRlciBTd2FwIFRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICBjb25zdCB3YWxsZXRLZXlQYWlyID0gbmV3IEtleVBhaXIodGVzdERhdGEuYXV0aEFjY291bnQpO1xuICBjb25zdCB3YWxsZXQgPSB3YWxsZXRLZXlQYWlyLmdldEtleXMoKTtcblxuICBpdCgnc2hvdWxkIHByZXNlcnZlIGluc3RydWN0aW9ucyBhbmQgQUxUcyB3aGVuIGJ1aWxkaW5nIGFuZCBzaWduaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIC8vIEp1cGl0ZXIgU3dhcCBUcmFuc2FjdGlvbiAoVmVyc2lvbmVkKVxuICAgIGNvbnN0IHZlcnNpb25lZFRyYW5zYWN0aW9uID1cbiAgICAgICdBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBQVFBRkRUV29NNURCQ0duN2NuNWFWNTZmb21vNm1oRDJLMWM1WFloUUlhbjQxRTZkRzl0MDZveDZETWR2VnVCblNFQVR5Ti84cUlxMjQ2aU81YURtMWptODJ4NHdNNDBGUjhRN3hTWlVwVXRCMGxidmVsYVo0Nm9SUTJHTTloV0dNdWtIRzFFVXNBMVI5Wk81NUNsVXZOTXl3OElRT3JmUm11M09ORzUwb05lbHVUNExnYU9hY04rSTRkMEhTdGN1K29oMG5vNFhYZ1ZVd2p6azUrZWdpVWFRRGtDQ2pYQWxTREFiNDZhaExBZldlS09xek8vSEMvejJXZ1JrOFJTMXljNmhlTVp6QmJSM1NQRHdyTnZXbENaR2FFVGFpeGlIOXVmZE9KODIzR3YrTW54SDFTT3U2VENzWDErVE1za2o5NEQzTkVsRHBhZG84b2tGUWJVdXphaWpVOW9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJeVhKWTlPSklueHV6MFFLUlNPRFlNTFdoT1oydjhRaEFTT2U5amI2ZmhaQXdaR2IrVWhGekwvN0syNmNzT2I1N3lNNWJ2Rjl4SnJMRU9iT2tBQUFBQUVlZFZiOGpIQWJ1NTB4VzdPYUJVSC9iR3kzcVAwamxFQ3NjMmlWcndUandiZDl1SFhaYUdUMmN2aFJzN3JlYXdjdElYdFgxczNrVHFNOVlWKy93Q3ArbUdwRjRJNFpyVjEyYmFwSjdwNjFCYWJ0M3R5N0hZRFVLdE1zbzM4T1lnSENnQUZBb295QkFBS0FBa0RvUTRCQUFBQUFBQUlBZ0FGREFJQUFBQXdLeUlBQUFBQUFBc0ZCUUFnREFnSmsvRjdaUFNFcm5iL0NRWUFCd0FkQ0F3QkFRcy9IZ0FGRGcwSElCME1EQndMSmc4bUVCSU9EU0FkRVNZZURBd2tKZ0lEQmdzbUd5WVdHUTRFSUNVYUpoNE1EQ1FtR0JjQkN5SWpEQ0VlQkEwVkV4UWZNdEdZVTVOOC90anBDMEFOQXdBQUFBQUFXcXdBQUFBQUFBQXlBQUFBQUFBREFBQUFKaXdhQUFNbTVBd0FBZ29RSndJRERBTUZBQUFCQ1FRcHY1VUhLaysvQk45eGRaUG5PTHpNSVNjb0ZjSkhHb0RaK2ZWVnNOU0VKUUkwSXdVQUtBNENGeW85U0Rqc1BkZldYQWRNRjBtdTIreFpidzlyYlI2cnpOQUVlRmtMbXlLd0JHQm1ZV1VBTUhDSjZPaTBBMVFqcGpwMVl2M3hQK3NQTG0ycUovL1RLWmQ1WjlLemp2RUR3YjNDQTc3RHdPdEtkMU1DdTZoNFhKakM0MnljOFRjTDkybmh6RlVSNkhMVzNYckFJWk92Qm82S2k1Q1JqUU9NazVRPSc7XG5cbiAgICBjb25zdCBvcmlnaW5hbERlc2VyaWFsaXplZCA9IFZlcnNpb25lZFRyYW5zYWN0aW9uLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKHZlcnNpb25lZFRyYW5zYWN0aW9uLCAnYmFzZTY0JykpO1xuXG4gICAgY29uc3QgdmVyc2lvbmVkSW5zdHJ1Y3Rpb25zID0gb3JpZ2luYWxEZXNlcmlhbGl6ZWQubWVzc2FnZS5jb21waWxlZEluc3RydWN0aW9ucy5tYXAoKGl4KSA9PiAoe1xuICAgICAgcHJvZ3JhbUlkSW5kZXg6IGl4LnByb2dyYW1JZEluZGV4LFxuICAgICAgYWNjb3VudEtleUluZGV4ZXM6IGl4LmFjY291bnRLZXlJbmRleGVzLFxuICAgICAgZGF0YTogYmFzZTU4LmVuY29kZShpeC5kYXRhKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBhZGRyZXNzTG9va3VwVGFibGVzID1cbiAgICAgIG9yaWdpbmFsRGVzZXJpYWxpemVkLm1lc3NhZ2UuYWRkcmVzc1RhYmxlTG9va3Vwcz8ubWFwKChsb29rdXApID0+ICh7XG4gICAgICAgIGFjY291bnRLZXk6IGxvb2t1cC5hY2NvdW50S2V5LnRvQmFzZTU4KCksXG4gICAgICAgIHdyaXRhYmxlSW5kZXhlczogbG9va3VwLndyaXRhYmxlSW5kZXhlcyxcbiAgICAgICAgcmVhZG9ubHlJbmRleGVzOiBsb29rdXAucmVhZG9ubHlJbmRleGVzLFxuICAgICAgfSkpIHx8IFtdO1xuXG4gICAgY29uc3Qgc3RhdGljQWNjb3VudEtleXMgPSBvcmlnaW5hbERlc2VyaWFsaXplZC5tZXNzYWdlLnN0YXRpY0FjY291bnRLZXlzLm1hcCgoa2V5KSA9PiBrZXkudG9CYXNlNTgoKSk7XG4gICAgc3RhdGljQWNjb3VudEtleXNbMF0gPSB0ZXN0RGF0YS5hdXRoQWNjb3VudC5wdWI7IC8vIFJlcGxhY2UgZmVlIHBheWVyIHdpdGggb3VyIHRlc3QgYWNjb3VudFxuXG4gICAgY29uc3QgdmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0ge1xuICAgICAgdmVyc2lvbmVkSW5zdHJ1Y3Rpb25zLFxuICAgICAgYWRkcmVzc0xvb2t1cFRhYmxlcyxcbiAgICAgIHN0YXRpY0FjY291bnRLZXlzLFxuICAgICAgbWVzc2FnZUhlYWRlcjogb3JpZ2luYWxEZXNlcmlhbGl6ZWQubWVzc2FnZS5oZWFkZXIsXG4gICAgfTtcblxuICAgIGNvbnN0IGZhY3RvcnkgPSBnZXRCdWlsZGVyRmFjdG9yeSgndHNvbCcpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZ2V0Q3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyKCk7XG5cbiAgICAvLyBCdWlsZCB0cmFuc2FjdGlvbiBmcm9tIHZlcnNpb25lZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAgdHhCdWlsZGVyLmZyb21WZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEodmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UodGVzdERhdGEuYmxvY2tIYXNoZXMudmFsaWRCbG9ja0hhc2hlc1swXSk7XG5cbiAgICAvLyBCdWlsZCB1bnNpZ25lZCB0cmFuc2FjdGlvblxuICAgIGNvbnN0IHR4VW5zaWduZWQgPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgIHNob3VsZC5leGlzdCh0eFVuc2lnbmVkKTtcbiAgICB0eFVuc2lnbmVkLmlzVmVyc2lvbmVkVHJhbnNhY3Rpb24oKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIHNob3VsZC5leGlzdCh0eFVuc2lnbmVkLnRvQnJvYWRjYXN0Rm9ybWF0KCkpO1xuXG4gICAgLy8gU2lnbiB0aGUgdHJhbnNhY3Rpb25cbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogd2FsbGV0LnBydiB9KTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgY29uc3QgcmF3VHggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgIHR4LmlzVmVyc2lvbmVkVHJhbnNhY3Rpb24oKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIHNob3VsZC5leGlzdChyYXdUeCk7XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIyID0gZmFjdG9yeS5nZXRDdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIyLmZyb21WZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEodmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKTtcbiAgICB0eEJ1aWxkZXIyLm5vbmNlKHRlc3REYXRhLmJsb2NrSGFzaGVzLnZhbGlkQmxvY2tIYXNoZXNbMF0pO1xuICAgIGNvbnN0IHR4MiA9IGF3YWl0IHR4QnVpbGRlcjIuYnVpbGQoKTtcblxuICAgIHNob3VsZC5lcXVhbCh0eDIuc2lnbmFibGVQYXlsb2FkLnRvU3RyaW5nKCdoZXgnKSwgdHhVbnNpZ25lZC5zaWduYWJsZVBheWxvYWQudG9TdHJpbmcoJ2hleCcpKTtcbiAgICBzaG91bGQuZXF1YWwodHgyLnR5cGUsIHR4VW5zaWduZWQudHlwZSk7XG5cbiAgICAvLyBWZXJpZnkgd2UgY2FuIGFkZCBzaWduYXR1cmUgbWFudWFsbHlcbiAgICBjb25zdCBzaWduZWQgPSB0eC5zaWduYXR1cmVbMF07XG4gICAgY29uc3QgdHhCdWlsZGVyMyA9IGZhY3RvcnkuZ2V0Q3VzdG9tSW5zdHJ1Y3Rpb25CdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyMy5mcm9tVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKHZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSk7XG4gICAgdHhCdWlsZGVyMy5ub25jZSh0ZXN0RGF0YS5ibG9ja0hhc2hlcy52YWxpZEJsb2NrSGFzaGVzWzBdKTtcbiAgICBhd2FpdCB0eEJ1aWxkZXIzLmFkZFNpZ25hdHVyZSh7IHB1Yjogd2FsbGV0LnB1YiB9LCBCdWZmZXIuZnJvbShiYXNlNTguZGVjb2RlKHNpZ25lZCkpKTtcblxuICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyMy5idWlsZCgpO1xuICAgIHNob3VsZC5lcXVhbChzaWduZWRUeC50eXBlLCB0eC50eXBlKTtcblxuICAgIGNvbnN0IHJhd1NpZ25lZFR4ID0gc2lnbmVkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICBzaG91bGQuZXF1YWwocmF3U2lnbmVkVHgsIHJhd1R4KTtcblxuICAgIGNvbnN0IHNpZ25lZERlc2VyaWFsaXplZCA9IFZlcnNpb25lZFRyYW5zYWN0aW9uLmRlc2VyaWFsaXplKEJ1ZmZlci5mcm9tKHJhd1R4LCAnYmFzZTY0JykpO1xuXG4gICAgLy8gVmVyaWZ5IGFsbCBpbnN0cnVjdGlvbnMgYXJlIHByZXNlcnZlZFxuICAgIGNvbnN0IG9yaWdJbnN0cnVjdGlvbnMgPSBvcmlnaW5hbERlc2VyaWFsaXplZC5tZXNzYWdlLmNvbXBpbGVkSW5zdHJ1Y3Rpb25zO1xuICAgIGNvbnN0IHNpZ25lZEluc3RydWN0aW9ucyA9IHNpZ25lZERlc2VyaWFsaXplZC5tZXNzYWdlLmNvbXBpbGVkSW5zdHJ1Y3Rpb25zO1xuICAgIHNob3VsZC5lcXVhbChvcmlnSW5zdHJ1Y3Rpb25zLmxlbmd0aCwgc2lnbmVkSW5zdHJ1Y3Rpb25zLmxlbmd0aCwgJ051bWJlciBvZiBpbnN0cnVjdGlvbnMgc2hvdWxkIG1hdGNoJyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yaWdJbnN0cnVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgb3JpZ0luc3RydWN0aW9uc1tpXS5wcm9ncmFtSWRJbmRleCxcbiAgICAgICAgc2lnbmVkSW5zdHJ1Y3Rpb25zW2ldLnByb2dyYW1JZEluZGV4LFxuICAgICAgICBgSW5zdHJ1Y3Rpb24gJHtpfTogcHJvZ3JhbUlkSW5kZXggc2hvdWxkIG1hdGNoYFxuICAgICAgKTtcbiAgICAgIHNob3VsZC5kZWVwRXF1YWwoXG4gICAgICAgIG9yaWdJbnN0cnVjdGlvbnNbaV0uYWNjb3VudEtleUluZGV4ZXMsXG4gICAgICAgIHNpZ25lZEluc3RydWN0aW9uc1tpXS5hY2NvdW50S2V5SW5kZXhlcyxcbiAgICAgICAgYEluc3RydWN0aW9uICR7aX06IGFjY291bnRLZXlJbmRleGVzIHNob3VsZCBtYXRjaGBcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIEJ1ZmZlci5mcm9tKG9yaWdJbnN0cnVjdGlvbnNbaV0uZGF0YSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBCdWZmZXIuZnJvbShzaWduZWRJbnN0cnVjdGlvbnNbaV0uZGF0YSkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBgSW5zdHJ1Y3Rpb24gJHtpfTogZGF0YSBzaG91bGQgbWF0Y2hgXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSBhbGwgQUxUcyBhcmUgcHJlc2VydmVkXG4gICAgY29uc3Qgb3JpZ0FMVHMgPSBvcmlnaW5hbERlc2VyaWFsaXplZC5tZXNzYWdlLmFkZHJlc3NUYWJsZUxvb2t1cHMgfHwgW107XG4gICAgY29uc3Qgc2lnbmVkQUxUcyA9IHNpZ25lZERlc2VyaWFsaXplZC5tZXNzYWdlLmFkZHJlc3NUYWJsZUxvb2t1cHMgfHwgW107XG4gICAgc2hvdWxkLmVxdWFsKG9yaWdBTFRzLmxlbmd0aCwgc2lnbmVkQUxUcy5sZW5ndGgsICdOdW1iZXIgb2YgQUxUcyBzaG91bGQgbWF0Y2gnKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JpZ0FMVHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHNob3VsZC5lcXVhbChcbiAgICAgICAgb3JpZ0FMVHNbaV0uYWNjb3VudEtleS50b0Jhc2U1OCgpLFxuICAgICAgICBzaWduZWRBTFRzW2ldLmFjY291bnRLZXkudG9CYXNlNTgoKSxcbiAgICAgICAgYEFMVCAke2l9OiBhY2NvdW50S2V5IHNob3VsZCBtYXRjaGBcbiAgICAgICk7XG4gICAgICBzaG91bGQuZGVlcEVxdWFsKFxuICAgICAgICBvcmlnQUxUc1tpXS53cml0YWJsZUluZGV4ZXMsXG4gICAgICAgIHNpZ25lZEFMVHNbaV0ud3JpdGFibGVJbmRleGVzLFxuICAgICAgICBgQUxUICR7aX06IHdyaXRhYmxlSW5kZXhlcyBzaG91bGQgbWF0Y2hgXG4gICAgICApO1xuICAgICAgc2hvdWxkLmRlZXBFcXVhbChcbiAgICAgICAgb3JpZ0FMVHNbaV0ucmVhZG9ubHlJbmRleGVzLFxuICAgICAgICBzaWduZWRBTFRzW2ldLnJlYWRvbmx5SW5kZXhlcyxcbiAgICAgICAgYEFMVCAke2l9OiByZWFkb25seUluZGV4ZXMgc2hvdWxkIG1hdGNoYFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgYXV0b21hdGljYWxseSBpbmplY3Qgbm9uY2UgYWR2YW5jZSBpbnN0cnVjdGlvbiB3aGVuIHVzaW5nIGR1cmFibGUgbm9uY2Ugd2l0aCB2ZXJzaW9uZWQgdHJhbnNhY3Rpb25zJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIC8vIFNpbXBsZSB0cmFuc2FjdGlvbiB3aXRoIG9uZSBtZW1vIGluc3RydWN0aW9uXG4gICAgY29uc3QgdmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhID0ge1xuICAgICAgdmVyc2lvbmVkSW5zdHJ1Y3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm9ncmFtSWRJbmRleDogMSxcbiAgICAgICAgICBhY2NvdW50S2V5SW5kZXhlczogWzBdLFxuICAgICAgICAgIGRhdGE6IGJhc2U1OC5lbmNvZGUoQnVmZmVyLmZyb20oJ0hlbGxvIFZlcnNpb25lZCBUeCcsICd1dGYtOCcpKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBhZGRyZXNzTG9va3VwVGFibGVzOiBbXSxcbiAgICAgIHN0YXRpY0FjY291bnRLZXlzOiBbdGVzdERhdGEuYXV0aEFjY291bnQucHViLCAnTWVtb1NxNGdxQUJBWEtiOTZxbkg4VHlzTmNXeE15V0NxWGdETEdtZmNIciddLFxuICAgICAgbWVzc2FnZUhlYWRlcjoge1xuICAgICAgICBudW1SZXF1aXJlZFNpZ25hdHVyZXM6IDEsXG4gICAgICAgIG51bVJlYWRvbmx5U2lnbmVkQWNjb3VudHM6IDAsXG4gICAgICAgIG51bVJlYWRvbmx5VW5zaWduZWRBY2NvdW50czogMCxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGR1cmFibGVOb25jZVBhcmFtcyA9IHtcbiAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogJ0dIdFhRQnNvWkhWbk5GYTlZZXZBenhOelFCejdDVjVoajZiU2UzdTUyVzluJyxcbiAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiAnOFk3Uk02SmZjWDRBU1NOQmtya3JtU2NxM1o5VVdWNENKQnd0ZlNOZ3FUTjInLFxuICAgIH07XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoJ3Rzb2wnKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuXG4gICAgLy8gUHJvdmlkaW5nIGR1cmFibGVOb25jZVBhcmFtcyB0cmlnZ2VycyBhdXRvbWF0aWMgbm9uY2UgYWR2YW5jZSBpbmplY3Rpb25cbiAgICB0eEJ1aWxkZXIubm9uY2UodGVzdERhdGEuYmxvY2tIYXNoZXMudmFsaWRCbG9ja0hhc2hlc1swXSwgZHVyYWJsZU5vbmNlUGFyYW1zKTtcbiAgICB0eEJ1aWxkZXIuZnJvbVZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSh2ZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEpO1xuXG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IGJ1aWx0RGF0YSA9IHR4LmdldFZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSgpO1xuXG4gICAgc2hvdWxkLmV4aXN0KGJ1aWx0RGF0YSk7XG5cbiAgICAvLyBOb25jZSBhZHZhbmNlIGluc3RydWN0aW9uIHNob3VsZCBiZSBwcmVwZW5kZWRcbiAgICBidWlsdERhdGEhLnZlcnNpb25lZEluc3RydWN0aW9ucy5sZW5ndGguc2hvdWxkLmVxdWFsKDIpO1xuICAgIGNvbnN0IG5vbmNlSW5zdHJ1Y3Rpb24gPSBidWlsdERhdGEhLnZlcnNpb25lZEluc3RydWN0aW9uc1swXTtcbiAgICBub25jZUluc3RydWN0aW9uLmFjY291bnRLZXlJbmRleGVzLmxlbmd0aC5zaG91bGQuZXF1YWwoMyk7XG5cbiAgICAvLyBudW1SZXF1aXJlZFNpZ25hdHVyZXMgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gaW5jbHVkZSBub25jZSBhdXRob3JpdHlcbiAgICBjb25zdCBudW1TaWduZXJzID0gYnVpbHREYXRhIS5tZXNzYWdlSGVhZGVyLm51bVJlcXVpcmVkU2lnbmF0dXJlcztcbiAgICBudW1TaWduZXJzLnNob3VsZC5lcXVhbCgyKTtcblxuICAgIC8vIEJvdGggZmVlIHBheWVyIGFuZCBub25jZSBhdXRob3JpdHkgc2hvdWxkIGJlIGluIHNpZ25lciBzZWN0aW9uXG4gICAgY29uc3Qgc2lnbmVyS2V5cyA9IGJ1aWx0RGF0YSEuc3RhdGljQWNjb3VudEtleXMuc2xpY2UoMCwgbnVtU2lnbmVycyk7XG4gICAgc2lnbmVyS2V5cy5zaG91bGQuY29udGFpbkVxbCh0ZXN0RGF0YS5hdXRoQWNjb3VudC5wdWIpO1xuICAgIHNpZ25lcktleXMuc2hvdWxkLmNvbnRhaW5FcWwoZHVyYWJsZU5vbmNlUGFyYW1zLmF1dGhXYWxsZXRBZGRyZXNzKTtcblxuICAgIC8vIEZlZSBwYXllciBtdXN0IHJlbWFpbiBhdCBpbmRleCAwXG4gICAgYnVpbHREYXRhIS5zdGF0aWNBY2NvdW50S2V5c1swXS5zaG91bGQuZXF1YWwodGVzdERhdGEuYXV0aEFjY291bnQucHViKTtcblxuICAgIC8vIFJlcXVpcmVkIGFjY291bnRzIGZvciBub25jZSBhZHZhbmNlIHNob3VsZCBiZSBhZGRlZFxuICAgIGJ1aWx0RGF0YSEuc3RhdGljQWNjb3VudEtleXMuc2hvdWxkLmNvbnRhaW5FcWwoZHVyYWJsZU5vbmNlUGFyYW1zLndhbGxldE5vbmNlQWRkcmVzcyk7XG4gICAgYnVpbHREYXRhIS5zdGF0aWNBY2NvdW50S2V5cy5zaG91bGQuY29udGFpbkVxbCgnMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnKTtcbiAgICBidWlsdERhdGEhLnN0YXRpY0FjY291bnRLZXlzLnNob3VsZC5jb250YWluRXFsKCdTeXN2YXJSZWNlbnRCMW9ja0hhc2hlczExMTExMTExMTExMTExMTExMTExJyk7XG5cbiAgICAvLyBPcmlnaW5hbCBpbnN0cnVjdGlvbiBpbmRpY2VzIHNob3VsZCBiZSByZW1hcHBlZCBhZnRlciBhY2NvdW50IHJlb3JkZXJpbmdcbiAgICBjb25zdCBvcmlnaW5hbEluc3RydWN0aW9uID0gYnVpbHREYXRhIS52ZXJzaW9uZWRJbnN0cnVjdGlvbnNbMV07XG4gICAgb3JpZ2luYWxJbnN0cnVjdGlvbi5wcm9ncmFtSWRJbmRleC5zaG91bGQuZXF1YWwoXG4gICAgICBidWlsdERhdGEhLnN0YXRpY0FjY291bnRLZXlzLmluZGV4T2YoJ01lbW9TcTRncUFCQVhLYjk2cW5IOFR5c05jV3hNeVdDcVhnRExHbWZjSHInKVxuICAgICk7XG4gICAgb3JpZ2luYWxJbnN0cnVjdGlvbi5hY2NvdW50S2V5SW5kZXhlc1swXS5zaG91bGQuZXF1YWwoXG4gICAgICBidWlsdERhdGEhLnN0YXRpY0FjY291bnRLZXlzLmluZGV4T2YodGVzdERhdGEuYXV0aEFjY291bnQucHViKVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgbm90IGluamVjdCBub25jZSBhZHZhbmNlIHdoZW4gdXNpbmcgcmVndWxhciBub25jZSAobm8gZHVyYWJsZU5vbmNlUGFyYW1zKScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB2ZXJzaW9uZWRUcmFuc2FjdGlvbkRhdGEgPSB7XG4gICAgICB2ZXJzaW9uZWRJbnN0cnVjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb2dyYW1JZEluZGV4OiAxLFxuICAgICAgICAgIGFjY291bnRLZXlJbmRleGVzOiBbMF0sXG4gICAgICAgICAgZGF0YTogYmFzZTU4LmVuY29kZShCdWZmZXIuZnJvbSgnSGVsbG8nLCAndXRmLTgnKSksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYWRkcmVzc0xvb2t1cFRhYmxlczogW10sXG4gICAgICBzdGF0aWNBY2NvdW50S2V5czogW3Rlc3REYXRhLmF1dGhBY2NvdW50LnB1YiwgJ01lbW9TcTRncUFCQVhLYjk2cW5IOFR5c05jV3hNeVdDcVhnRExHbWZjSHInXSxcbiAgICAgIG1lc3NhZ2VIZWFkZXI6IHtcbiAgICAgICAgbnVtUmVxdWlyZWRTaWduYXR1cmVzOiAxLFxuICAgICAgICBudW1SZWFkb25seVNpZ25lZEFjY291bnRzOiAwLFxuICAgICAgICBudW1SZWFkb25seVVuc2lnbmVkQWNjb3VudHM6IDAsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gZ2V0QnVpbGRlckZhY3RvcnkoJ3Rzb2wnKTtcbiAgICBjb25zdCB0eEJ1aWxkZXIgPSBmYWN0b3J5LmdldEN1c3RvbUluc3RydWN0aW9uQnVpbGRlcigpO1xuXG4gICAgLy8gUmVndWxhciBub25jZSB3aXRob3V0IGR1cmFibGVOb25jZVBhcmFtcyBzaG91bGQgbm90IHRyaWdnZXIgaW5qZWN0aW9uXG4gICAgdHhCdWlsZGVyLm5vbmNlKHRlc3REYXRhLmJsb2NrSGFzaGVzLnZhbGlkQmxvY2tIYXNoZXNbMF0pO1xuICAgIHR4QnVpbGRlci5mcm9tVmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKHZlcnNpb25lZFRyYW5zYWN0aW9uRGF0YSk7XG5cbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgY29uc3QgYnVpbHREYXRhID0gdHguZ2V0VmVyc2lvbmVkVHJhbnNhY3Rpb25EYXRhKCk7XG5cbiAgICBzaG91bGQuZXhpc3QoYnVpbHREYXRhKTtcblxuICAgIC8vIFRyYW5zYWN0aW9uIHNob3VsZCByZW1haW4gdW5jaGFuZ2VkXG4gICAgYnVpbHREYXRhIS52ZXJzaW9uZWRJbnN0cnVjdGlvbnMubGVuZ3RoLnNob3VsZC5lcXVhbCgxKTtcbiAgICBidWlsdERhdGEhLm1lc3NhZ2VIZWFkZXIubnVtUmVxdWlyZWRTaWduYXR1cmVzLnNob3VsZC5lcXVhbCgxKTtcbiAgICBidWlsdERhdGEhLnN0YXRpY0FjY291bnRLZXlzLmxlbmd0aC5zaG91bGQuZXF1YWwoMik7XG4gIH0pO1xufSk7XG4iXX0=