@bitgo-beta/sdk-coin-flrp 1.0.1-beta.4 → 1.0.1-beta.400

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 (115) hide show
  1. package/dist/src/flrp.d.ts +75 -61
  2. package/dist/src/flrp.d.ts.map +1 -1
  3. package/dist/src/flrp.js +276 -134
  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 +43 -0
  8. package/dist/src/lib/ExportInCTxBuilder.d.ts.map +1 -0
  9. package/dist/src/lib/ExportInCTxBuilder.js +150 -0
  10. package/dist/src/lib/ExportInPTxBuilder.d.ts +28 -0
  11. package/dist/src/lib/ExportInPTxBuilder.d.ts.map +1 -0
  12. package/dist/src/lib/ExportInPTxBuilder.js +174 -0
  13. package/dist/src/lib/ImportInCTxBuilder.d.ts +34 -0
  14. package/dist/src/lib/ImportInCTxBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/ImportInCTxBuilder.js +175 -0
  16. package/dist/src/lib/ImportInPTxBuilder.d.ts +38 -0
  17. package/dist/src/lib/ImportInPTxBuilder.d.ts.map +1 -0
  18. package/dist/src/lib/ImportInPTxBuilder.js +208 -0
  19. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +12 -16
  20. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -1
  21. package/dist/src/lib/atomicInCTransactionBuilder.js +30 -41
  22. package/dist/src/lib/atomicTransactionBuilder.d.ts +112 -35
  23. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -1
  24. package/dist/src/lib/atomicTransactionBuilder.js +244 -34
  25. package/dist/src/lib/iface.d.ts +81 -22
  26. package/dist/src/lib/iface.d.ts.map +1 -1
  27. package/dist/src/lib/iface.js +20 -14
  28. package/dist/src/lib/index.d.ts +7 -0
  29. package/dist/src/lib/index.d.ts.map +1 -1
  30. package/dist/src/lib/index.js +16 -2
  31. package/dist/src/lib/keyPair.d.ts +5 -5
  32. package/dist/src/lib/keyPair.d.ts.map +1 -1
  33. package/dist/src/lib/keyPair.js +15 -9
  34. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +41 -0
  35. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
  36. package/dist/src/lib/permissionlessValidatorTxBuilder.js +126 -0
  37. package/dist/src/lib/transaction.d.ts +75 -0
  38. package/dist/src/lib/transaction.d.ts.map +1 -0
  39. package/dist/src/lib/transaction.js +460 -0
  40. package/dist/src/lib/transactionBuilder.d.ts +115 -0
  41. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  42. package/dist/src/lib/transactionBuilder.js +228 -0
  43. package/dist/src/lib/transactionBuilderFactory.d.ts +57 -0
  44. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  45. package/dist/src/lib/transactionBuilderFactory.js +148 -0
  46. package/dist/src/lib/utils.d.ts +138 -102
  47. package/dist/src/lib/utils.d.ts.map +1 -1
  48. package/dist/src/lib/utils.js +359 -245
  49. package/dist/test/resources/account.d.ts +81 -0
  50. package/dist/test/resources/account.d.ts.map +1 -0
  51. package/dist/test/resources/account.js +79 -0
  52. package/dist/test/resources/transactionData/exportInC.d.ts +50 -0
  53. package/dist/test/resources/transactionData/exportInC.d.ts.map +1 -0
  54. package/dist/test/resources/transactionData/exportInC.js +58 -0
  55. package/dist/test/resources/transactionData/exportInP.d.ts +60 -0
  56. package/dist/test/resources/transactionData/exportInP.d.ts.map +1 -0
  57. package/dist/test/resources/transactionData/exportInP.js +101 -0
  58. package/dist/test/resources/transactionData/importInC.d.ts +56 -0
  59. package/dist/test/resources/transactionData/importInC.d.ts.map +1 -0
  60. package/dist/test/resources/transactionData/importInC.js +120 -0
  61. package/dist/test/resources/transactionData/importInP.d.ts +66 -0
  62. package/dist/test/resources/transactionData/importInP.d.ts.map +1 -0
  63. package/dist/test/resources/transactionData/importInP.js +84 -0
  64. package/dist/test/unit/flrp.js +490 -20
  65. package/dist/test/unit/lib/exportInCTxBuilder.d.ts +2 -0
  66. package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +1 -0
  67. package/dist/test/unit/lib/exportInCTxBuilder.js +193 -0
  68. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +2 -0
  69. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -0
  70. package/dist/test/unit/lib/exportInPTxBuilder.js +296 -0
  71. package/dist/test/unit/lib/importInCTxBuilder.d.ts +2 -0
  72. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -0
  73. package/dist/test/unit/lib/importInCTxBuilder.js +309 -0
  74. package/dist/test/unit/lib/importInPTxBuilder.d.ts +2 -0
  75. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -0
  76. package/dist/test/unit/lib/importInPTxBuilder.js +490 -0
  77. package/dist/test/unit/lib/keyPair.d.ts +2 -0
  78. package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
  79. package/dist/test/unit/lib/keyPair.js +158 -0
  80. package/dist/test/unit/lib/signFlowTestSuit.d.ts +20 -0
  81. package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -0
  82. package/dist/test/unit/lib/signFlowTestSuit.js +83 -0
  83. package/dist/test/unit/lib/signatureIndex.d.ts +13 -0
  84. package/dist/test/unit/lib/signatureIndex.d.ts.map +1 -0
  85. package/dist/test/unit/lib/signatureIndex.js +843 -0
  86. package/dist/test/unit/lib/transactionBuilderFactory.d.ts +2 -0
  87. package/dist/test/unit/lib/transactionBuilderFactory.d.ts.map +1 -0
  88. package/dist/test/unit/lib/transactionBuilderFactory.js +60 -0
  89. package/dist/test/unit/lib/utils.d.ts +2 -0
  90. package/dist/test/unit/lib/utils.d.ts.map +1 -0
  91. package/dist/test/unit/lib/utils.js +761 -0
  92. package/dist/tsconfig.tsbuildinfo +1 -1
  93. package/package.json +18 -12
  94. package/.eslintignore +0 -5
  95. package/.eslintrc.json +0 -7
  96. package/.mocharc.yml +0 -8
  97. package/CHANGELOG.md +0 -0
  98. package/dist/src/iface.d.ts +0 -25
  99. package/dist/src/iface.d.ts.map +0 -1
  100. package/dist/src/iface.js +0 -3
  101. package/dist/src/lib/constants.d.ts +0 -11
  102. package/dist/src/lib/constants.d.ts.map +0 -1
  103. package/dist/src/lib/constants.js +0 -17
  104. package/dist/src/lib/errors.d.ts +0 -8
  105. package/dist/src/lib/errors.d.ts.map +0 -1
  106. package/dist/src/lib/errors.js +0 -19
  107. package/dist/src/lib/exportInCTxBuilder.d.ts +0 -77
  108. package/dist/src/lib/exportInCTxBuilder.d.ts.map +0 -1
  109. package/dist/src/lib/exportInCTxBuilder.js +0 -164
  110. package/dist/src/lib/exportInPTxBuilder.d.ts +0 -30
  111. package/dist/src/lib/exportInPTxBuilder.d.ts.map +0 -1
  112. package/dist/src/lib/exportInPTxBuilder.js +0 -56
  113. package/dist/test/unit/smoke.d.ts +0 -2
  114. package/dist/test/unit/smoke.d.ts.map +0 -1
  115. package/dist/test/unit/smoke.js +0 -9
@@ -0,0 +1,115 @@
1
+ import { Utxo } from '@flarenetwork/flarejs';
2
+ import { BaseTransactionBuilder, BaseKey, BaseAddress } from '@bitgo-beta/sdk-core';
3
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
4
+ import { Tx, DecodedUtxoObj } from './iface';
5
+ import { KeyPair } from './keyPair';
6
+ import { Transaction } from './transaction';
7
+ import { FlrpContext } from '@bitgo/public-types';
8
+ type BigNumberType = Parameters<BaseTransactionBuilder['validateValue']>[0];
9
+ export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
10
+ protected _transaction: Transaction;
11
+ protected recoverSigner: boolean;
12
+ _signer: KeyPair[];
13
+ constructor(_coinConfig: Readonly<CoinConfig>);
14
+ /**
15
+ * Initialize the transaction builder fields using the decoded transaction data
16
+ *
17
+ * @param {Transaction} tx the transaction data
18
+ * @returns itself
19
+ */
20
+ initBuilder(tx: Tx): this;
21
+ /**
22
+ * Validates the threshold for multi-signature transactions
23
+ * @param threshold - Number of required signatures
24
+ */
25
+ validateThreshold(threshold: number): void;
26
+ /**
27
+ * Validates the locktime value
28
+ * @param locktime - Timestamp after which the output can be spent
29
+ */
30
+ validateLocktime(locktime: bigint): void;
31
+ /**
32
+ * Sets the threshold for multi-signature transactions
33
+ * @param value - Number of required signatures
34
+ */
35
+ threshold(value: number): this;
36
+ /**
37
+ * Sets the locktime for the transaction
38
+ * @param value - Timestamp after which the output can be spent
39
+ */
40
+ locktime(value: string | number): this;
41
+ /**
42
+ * Enables recovery mode for the transaction
43
+ * @param recoverSigner - Whether to use recovery signing
44
+ */
45
+ recoverMode(recoverSigner?: boolean): this;
46
+ /**
47
+ * Sets the sender's public key(s)
48
+ * @param senderPubKey - Public key or array of public keys
49
+ */
50
+ fromPubKey(senderPubKey: string | string[]): this;
51
+ /**
52
+ * Validates an array of UTXOs
53
+ * @param utxos - Array of UTXOs to validate
54
+ * @throws {BuildTransactionError} if validation fails
55
+ */
56
+ validateUtxos(utxos: Utxo[]): void;
57
+ /**
58
+ * Validates a single UTXO
59
+ * @param utxo - UTXO to validate
60
+ * @param index - Index in the array for error messaging
61
+ * @throws {BuildTransactionError} if validation fails
62
+ */
63
+ validateUtxo(utxo: Utxo, index: number): void;
64
+ /**
65
+ * Sets the decoded UTXOs for the transaction.
66
+ * UTXOs should be provided in decoded format (DecodedUtxoObj).
67
+ * @param decodedUtxos - Array of decoded UTXO objects
68
+ */
69
+ decodedUtxos(decodedUtxos: DecodedUtxoObj[]): this;
70
+ context(context: FlrpContext): this;
71
+ /** @inheritdoc */
72
+ protected fromImplementation(rawTransaction: string): Transaction;
73
+ /**
74
+ * Abstract method to be implemented by specific transaction builders
75
+ * Builds the actual transaction based on the builder's configuration
76
+ */
77
+ protected abstract buildImplementation(): Promise<Transaction>;
78
+ /**
79
+ * Check the buffer has 32 byte long.
80
+ * @param chainID
81
+ */
82
+ validateChainId(chainID: Buffer): void;
83
+ /** @inheritdoc */
84
+ protected get transaction(): Transaction;
85
+ protected set transaction(transaction: Transaction);
86
+ /**
87
+ * Check that fee is greater than 0.
88
+ * @param {bigint} fee
89
+ */
90
+ validateFee(fee: bigint): void;
91
+ /** @inheritdoc */
92
+ validateKey({ key }: BaseKey): void;
93
+ /** @inheritdoc */
94
+ validateTransaction(transaction?: Transaction): void;
95
+ /** @inheritdoc */
96
+ validateValue(value: BigNumberType): void;
97
+ /** @inheritdoc */
98
+ validateAddress(address: BaseAddress, addressFormat?: string): void;
99
+ /**
100
+ * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
101
+ *
102
+ * @param rawTransaction Transaction in any format
103
+ */
104
+ validateRawTransaction(rawTransaction: string): void;
105
+ /** @inheritdoc */
106
+ protected signImplementation({ key }: BaseKey): Transaction;
107
+ hasSigner(): boolean;
108
+ /**
109
+ * Check the amount is positive.
110
+ * @param amount
111
+ */
112
+ validateAmount(amount: bigint): void;
113
+ }
114
+ export {};
115
+ //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TransactionBuilder = void 0;
7
+ const flarejs_1 = require("@flarenetwork/flarejs");
8
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
9
+ const keyPair_1 = require("./keyPair");
10
+ const transaction_1 = require("./transaction");
11
+ const utils_1 = __importDefault(require("./utils"));
12
+ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
13
+ constructor(_coinConfig) {
14
+ super(_coinConfig);
15
+ this.recoverSigner = false;
16
+ this._signer = [];
17
+ this._transaction = new transaction_1.Transaction(_coinConfig);
18
+ }
19
+ /**
20
+ * Initialize the transaction builder fields using the decoded transaction data
21
+ *
22
+ * @param {Transaction} tx the transaction data
23
+ * @returns itself
24
+ */
25
+ initBuilder(tx) {
26
+ const baseTx = tx.tx.baseTx;
27
+ // Validate network and blockchain IDs match
28
+ if (baseTx.NetworkId.value() !== this._transaction._networkID ||
29
+ baseTx.BlockchainId.value() !== this._transaction._blockchainID) {
30
+ throw new Error('Network or blockchain ID mismatch');
31
+ }
32
+ this._transaction.setTransaction(tx);
33
+ return this;
34
+ }
35
+ // region Validators
36
+ /**
37
+ * Validates the threshold for multi-signature transactions
38
+ * @param threshold - Number of required signatures
39
+ */
40
+ validateThreshold(threshold) {
41
+ if (!threshold || threshold !== 2) {
42
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: threshold must be set to 2');
43
+ }
44
+ }
45
+ /**
46
+ * Validates the locktime value
47
+ * @param locktime - Timestamp after which the output can be spent
48
+ */
49
+ validateLocktime(locktime) {
50
+ if (locktime < BigInt(0)) {
51
+ throw new sdk_core_1.BuildTransactionError('Invalid transaction: locktime must be 0 or higher');
52
+ }
53
+ }
54
+ // endregion
55
+ /**
56
+ * Sets the threshold for multi-signature transactions
57
+ * @param value - Number of required signatures
58
+ */
59
+ threshold(value) {
60
+ this.validateThreshold(value);
61
+ this._transaction._threshold = value;
62
+ return this;
63
+ }
64
+ /**
65
+ * Sets the locktime for the transaction
66
+ * @param value - Timestamp after which the output can be spent
67
+ */
68
+ locktime(value) {
69
+ this.validateLocktime(BigInt(value));
70
+ this._transaction._locktime = BigInt(value);
71
+ return this;
72
+ }
73
+ /**
74
+ * Enables recovery mode for the transaction
75
+ * @param recoverSigner - Whether to use recovery signing
76
+ */
77
+ recoverMode(recoverSigner = true) {
78
+ this.recoverSigner = recoverSigner;
79
+ return this;
80
+ }
81
+ /**
82
+ * Sets the sender's public key(s)
83
+ * @param senderPubKey - Public key or array of public keys
84
+ */
85
+ fromPubKey(senderPubKey) {
86
+ const pubKeys = Array.isArray(senderPubKey) ? senderPubKey : [senderPubKey];
87
+ this._transaction._fromAddresses = pubKeys.map((addr) => utils_1.default.parseAddress(addr));
88
+ return this;
89
+ }
90
+ /**
91
+ * Validates an array of UTXOs
92
+ * @param utxos - Array of UTXOs to validate
93
+ * @throws {BuildTransactionError} if validation fails
94
+ */
95
+ validateUtxos(utxos) {
96
+ if (!utxos || utxos.length === 0) {
97
+ throw new sdk_core_1.BuildTransactionError('UTXOs array cannot be empty');
98
+ }
99
+ utxos.forEach((utxo, index) => {
100
+ this.validateUtxo(utxo, index);
101
+ });
102
+ }
103
+ /**
104
+ * Validates a single UTXO
105
+ * @param utxo - UTXO to validate
106
+ * @param index - Index in the array for error messaging
107
+ * @throws {BuildTransactionError} if validation fails
108
+ */
109
+ validateUtxo(utxo, index) {
110
+ if (!utxo) {
111
+ throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} is null or undefined`);
112
+ }
113
+ if (!utxo.utxoId) {
114
+ throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} missing required field: utxoId`);
115
+ }
116
+ if (!utxo.assetId) {
117
+ throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} missing required field: assetId`);
118
+ }
119
+ if (!utxo.output) {
120
+ throw new sdk_core_1.BuildTransactionError(`UTXO at index ${index} missing required field: output`);
121
+ }
122
+ }
123
+ /**
124
+ * Sets the decoded UTXOs for the transaction.
125
+ * UTXOs should be provided in decoded format (DecodedUtxoObj).
126
+ * @param decodedUtxos - Array of decoded UTXO objects
127
+ */
128
+ decodedUtxos(decodedUtxos) {
129
+ if (!decodedUtxos || decodedUtxos.length === 0) {
130
+ throw new sdk_core_1.BuildTransactionError('UTXOs array cannot be empty');
131
+ }
132
+ this._transaction._utxos = decodedUtxos;
133
+ return this;
134
+ }
135
+ context(context) {
136
+ this._transaction._context = context;
137
+ return this;
138
+ }
139
+ /** @inheritdoc */
140
+ fromImplementation(rawTransaction) {
141
+ try {
142
+ // Parse the raw transaction using Flare's PVM serialization
143
+ const [tx] = flarejs_1.pvmSerial.AddPermissionlessValidatorTx.fromBytes(Buffer.from(rawTransaction, 'hex'), flarejs_1.avmSerial.getAVMManager().getDefaultCodec());
144
+ this.initBuilder(tx);
145
+ return this._transaction;
146
+ }
147
+ catch (e) {
148
+ throw new sdk_core_1.BuildTransactionError(`Failed to parse raw transaction: ${e.message}`);
149
+ }
150
+ }
151
+ /**
152
+ * Check the buffer has 32 byte long.
153
+ * @param chainID
154
+ */
155
+ validateChainId(chainID) {
156
+ if (chainID.length !== 32) {
157
+ throw new sdk_core_1.BuildTransactionError('Chain id are 32 byte size');
158
+ }
159
+ }
160
+ /** @inheritdoc */
161
+ get transaction() {
162
+ return this._transaction;
163
+ }
164
+ set transaction(transaction) {
165
+ this._transaction = transaction;
166
+ }
167
+ /**
168
+ * Check that fee is greater than 0.
169
+ * @param {bigint} fee
170
+ */
171
+ validateFee(fee) {
172
+ if (fee <= BigInt(0)) {
173
+ throw new sdk_core_1.BuildTransactionError('Fee must be greater than 0');
174
+ }
175
+ }
176
+ /** @inheritdoc */
177
+ validateKey({ key }) {
178
+ try {
179
+ new keyPair_1.KeyPair({ prv: key });
180
+ }
181
+ catch (e) {
182
+ throw new sdk_core_1.BuildTransactionError('Invalid key');
183
+ }
184
+ }
185
+ /** @inheritdoc */
186
+ validateTransaction(transaction) {
187
+ // throw new NotImplementedError('validateTransaction not implemented');
188
+ }
189
+ /** @inheritdoc */
190
+ validateValue(value) {
191
+ if (value.isLessThan(0)) {
192
+ throw new sdk_core_1.BuildTransactionError('Value cannot be less than zero');
193
+ }
194
+ }
195
+ /** @inheritdoc */
196
+ validateAddress(address, addressFormat) {
197
+ if (!utils_1.default.isValidAddress(address.address)) {
198
+ throw new sdk_core_1.BuildTransactionError('Invalid address');
199
+ }
200
+ }
201
+ /**
202
+ * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
203
+ *
204
+ * @param rawTransaction Transaction in any format
205
+ */
206
+ validateRawTransaction(rawTransaction) {
207
+ utils_1.default.validateRawTransaction(rawTransaction);
208
+ }
209
+ /** @inheritdoc */
210
+ signImplementation({ key }) {
211
+ this._signer.push(new keyPair_1.KeyPair({ prv: key }));
212
+ return this.transaction;
213
+ }
214
+ hasSigner() {
215
+ return this._signer !== undefined && this._signer.length > 0;
216
+ }
217
+ /**
218
+ * Check the amount is positive.
219
+ * @param amount
220
+ */
221
+ validateAmount(amount) {
222
+ if (amount <= BigInt(0)) {
223
+ throw new sdk_core_1.BuildTransactionError('Amount must be greater than 0');
224
+ }
225
+ }
226
+ }
227
+ exports.TransactionBuilder = TransactionBuilder;
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBQXdGO0FBQ3hGLG1EQUEyRztBQUczRyx1Q0FBb0M7QUFDcEMsK0NBQTRDO0FBQzVDLG9EQUE0QjtBQUs1QixNQUFzQixrQkFBbUIsU0FBUSxpQ0FBc0I7SUFLckUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFKWCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN6QixZQUFPLEdBQWMsRUFBRSxDQUFDO1FBSTdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBQyxFQUFNO1FBQ2hCLE1BQU0sTUFBTSxHQUFLLEVBQWlCLENBQUMsRUFBNkMsQ0FBQyxNQUFNLENBQUM7UUFFeEYsNENBQTRDO1FBQzVDLElBQ0UsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVU7WUFDekQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFDL0QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsb0JBQW9CO0lBQ3BCOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFB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a0IsQ0FBQyxFQUFFLEdBQUcsRUFBVztRQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsTUFBYztRQUMzQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksZ0NBQXFCLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBM1BELGdEQTJQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF2bVNlcmlhbCwgcHZtU2VyaWFsLCBVbnNpZ25lZFR4LCBVdHhvLCBDb250ZXh0IH0gZnJvbSAnQGZsYXJlbmV0d29yay9mbGFyZWpzJztcbmltcG9ydCB7IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIsIEJ1aWxkVHJhbnNhY3Rpb25FcnJvciwgQmFzZUtleSwgQmFzZUFkZHJlc3MgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUeCwgRGVjb2RlZFV0eG9PYmogfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEZscnBDb250ZXh0IH0gZnJvbSAnQGJpdGdvL3B1YmxpYy10eXBlcyc7XG5cbnR5cGUgQmlnTnVtYmVyVHlwZSA9IFBhcmFtZXRlcnM8QmFzZVRyYW5zYWN0aW9uQnVpbGRlclsndmFsaWRhdGVWYWx1ZSddPlswXTtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgX3RyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbjtcbiAgcHJvdGVjdGVkIHJlY292ZXJTaWduZXIgPSBmYWxzZTtcbiAgcHVibGljIF9zaWduZXI6IEtleVBhaXJbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihfY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gYnVpbGRlciBmaWVsZHMgdXNpbmcgdGhlIGRlY29kZWQgdHJhbnNhY3Rpb24gZGF0YVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9ufSB0eCB0aGUgdHJhbnNhY3Rpb24gZGF0YVxuICAgKiBAcmV0dXJucyBpdHNlbGZcbiAgICovXG4gIGluaXRCdWlsZGVyKHR4OiBUeCk6IHRoaXMge1xuICAgIGNvbnN0IGJhc2VUeCA9ICgodHggYXMgVW5zaWduZWRUeCkudHggYXMgcHZtU2VyaWFsLkFkZFBlcm1pc3Npb25sZXNzVmFsaWRhdG9yVHgpLmJhc2VUeDtcblxuICAgIC8vIFZhbGlkYXRlIG5ldHdvcmsgYW5kIGJsb2NrY2hhaW4gSURzIG1hdGNoXG4gICAgaWYgKFxuICAgICAgYmFzZVR4Lk5ldHdvcmtJZC52YWx1ZSgpICE9PSB0aGlzLl90cmFuc2FjdGlvbi5fbmV0d29ya0lEIHx8XG4gICAgICBiYXNlVHguQmxvY2tjaGFpbklkLnZhbHVlKCkgIT09IHRoaXMuX3RyYW5zYWN0aW9uLl9ibG9ja2NoYWluSURcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTmV0d29yayBvciBibG9ja2NoYWluIElEIG1pc21hdGNoJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odHgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gcmVnaW9uIFZhbGlkYXRvcnNcbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgdGhyZXNob2xkIGZvciBtdWx0aS1zaWduYXR1cmUgdHJhbnNhY3Rpb25zXG4gICAqIEBwYXJhbSB0aHJlc2hvbGQgLSBOdW1iZXIgb2YgcmVxdWlyZWQgc2lnbmF0dXJlc1xuICAgKi9cbiAgdmFsaWRhdGVUaHJlc2hvbGQodGhyZXNob2xkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRocmVzaG9sZCB8fCB0aHJlc2hvbGQgIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IHRocmVzaG9sZCBtdXN0IGJlIHNldCB0byAyJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgbG9ja3RpbWUgdmFsdWVcbiAgICogQHBhcmFtIGxvY2t0aW1lIC0gVGltZXN0YW1wIGFmdGVyIHdoaWNoIHRoZSBvdXRwdXQgY2FuIGJlIHNwZW50XG4gICAqL1xuICB2YWxpZGF0ZUxvY2t0aW1lKGxvY2t0aW1lOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAobG9ja3RpbWUgPCBCaWdJbnQoMCkpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQgdHJhbnNhY3Rpb246IGxvY2t0aW1lIG11c3QgYmUgMCBvciBoaWdoZXInKTtcbiAgICB9XG4gIH1cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRocmVzaG9sZCBmb3IgbXVsdGktc2lnbmF0dXJlIHRyYW5zYWN0aW9uc1xuICAgKiBAcGFyYW0gdmFsdWUgLSBOdW1iZXIgb2YgcmVxdWlyZWQgc2lnbmF0dXJlc1xuICAgKi9cbiAgdGhyZXNob2xkKHZhbHVlOiBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlVGhyZXNob2xkKHZhbHVlKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbG9ja3RpbWUgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaW1lc3RhbXAgYWZ0ZXIgd2hpY2ggdGhlIG91dHB1dCBjYW4gYmUgc3BlbnRcbiAgICovXG4gIGxvY2t0aW1lKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpOiB0aGlzIHtcbiAgICB0aGlzLnZhbGlkYXRlTG9ja3RpbWUoQmlnSW50KHZhbHVlKSk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2xvY2t0aW1lID0gQmlnSW50KHZhbHVlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHJlY292ZXJ5IG1vZGUgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcmVjb3ZlclNpZ25lciAtIFdoZXRoZXIgdG8gdXNlIHJlY292ZXJ5IHNpZ25pbmdcbiAgICovXG4gIHJlY292ZXJNb2RlKHJlY292ZXJTaWduZXIgPSB0cnVlKTogdGhpcyB7XG4gICAgdGhpcy5yZWNvdmVyU2lnbmVyID0gcmVjb3ZlclNpZ25lcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZW5kZXIncyBwdWJsaWMga2V5KHMpXG4gICAqIEBwYXJhbSBzZW5kZXJQdWJLZXkgLSBQdWJsaWMga2V5IG9yIGFycmF5IG9mIHB1YmxpYyBrZXlzXG4gICAqL1xuICBmcm9tUHViS2V5KHNlbmRlclB1YktleTogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIHtcbiAgICBjb25zdCBwdWJLZXlzID0gQXJyYXkuaXNBcnJheShzZW5kZXJQdWJLZXkpID8gc2VuZGVyUHViS2V5IDogW3NlbmRlclB1YktleV07XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBwdWJLZXlzLm1hcCgoYWRkcikgPT4gdXRpbHMucGFyc2VBZGRyZXNzKGFkZHIpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW4gYXJyYXkgb2YgVVRYT3NcbiAgICogQHBhcmFtIHV0eG9zIC0gQXJyYXkgb2YgVVRYT3MgdG8gdmFsaWRhdGVcbiAgICogQHRocm93cyB7QnVpbGRUcmFuc2FjdGlvbkVycm9yfSBpZiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqL1xuICB2YWxpZGF0ZVV0eG9zKHV0eG9zOiBVdHhvW10pOiB2b2lkIHtcbiAgICBpZiAoIXV0eG9zIHx8IHV0eG9zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVVRYT3MgYXJyYXkgY2Fubm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIHV0eG9zLmZvckVhY2goKHV0eG8sIGluZGV4KSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlVXR4byh1dHhvLCBpbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGEgc2luZ2xlIFVUWE9cbiAgICogQHBhcmFtIHV0eG8gLSBVVFhPIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBpbmRleCAtIEluZGV4IGluIHRoZSBhcnJheSBmb3IgZXJyb3IgbWVzc2FnaW5nXG4gICAqIEB0aHJvd3Mge0J1aWxkVHJhbnNhY3Rpb25FcnJvcn0gaWYgdmFsaWRhdGlvbiBmYWlsc1xuICAgKi9cbiAgdmFsaWRhdGVVdHhvKHV0eG86IFV0eG8sIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXV0eG8pIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFVUWE8gYXQgaW5kZXggJHtpbmRleH0gaXMgbnVsbCBvciB1bmRlZmluZWRgKTtcbiAgICB9XG4gICAgaWYgKCF1dHhvLnV0eG9JZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcihgVVRYTyBhdCBpbmRleCAke2luZGV4fSBtaXNzaW5nIHJlcXVpcmVkIGZpZWxkOiB1dHhvSWRgKTtcbiAgICB9XG4gICAgaWYgKCF1dHhvLmFzc2V0SWQpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoYFVUWE8gYXQgaW5kZXggJHtpbmRleH0gbWlzc2luZyByZXF1aXJlZCBmaWVsZDogYXNzZXRJZGApO1xuICAgIH1cbiAgICBpZiAoIXV0eG8ub3V0cHV0KSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBVVFhPIGF0IGluZGV4ICR7aW5kZXh9IG1pc3NpbmcgcmVxdWlyZWQgZmllbGQ6IG91dHB1dGApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkZWNvZGVkIFVUWE9zIGZvciB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIFVUWE9zIHNob3VsZCBiZSBwcm92aWRlZCBpbiBkZWNvZGVkIGZvcm1hdCAoRGVjb2RlZFV0eG9PYmopLlxuICAgKiBAcGFyYW0gZGVjb2RlZFV0eG9zIC0gQXJyYXkgb2YgZGVjb2RlZCBVVFhPIG9iamVjdHNcbiAgICovXG4gIGRlY29kZWRVdHhvcyhkZWNvZGVkVXR4b3M6IERlY29kZWRVdHhvT2JqW10pOiB0aGlzIHtcbiAgICBpZiAoIWRlY29kZWRVdHhvcyB8fCBkZWNvZGVkVXR4b3MubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdVVFhPcyBhcnJheSBjYW5ub3QgYmUgZW1wdHknKTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uX3V0eG9zID0gZGVjb2RlZFV0eG9zO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY29udGV4dChjb250ZXh0OiBGbHJwQ29udGV4dCk6IHRoaXMge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uLl9jb250ZXh0ID0gY29udGV4dCBhcyBDb250ZXh0LkNvbnRleHQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSB0aGUgcmF3IHRyYW5zYWN0aW9uIHVzaW5nIEZsYXJlJ3MgUFZNIHNlcmlhbGl6YXRpb25cbiAgICAgIGNvbnN0IFt0eF0gPSBwdm1TZXJpYWwuQWRkUGVybWlzc2lvbmxlc3NWYWxpZGF0b3JUeC5mcm9tQnl0ZXMoXG4gICAgICAgIEJ1ZmZlci5mcm9tKHJhd1RyYW5zYWN0aW9uLCAnaGV4JyksXG4gICAgICAgIGF2bVNlcmlhbC5nZXRBVk1NYW5hZ2VyKCkuZ2V0RGVmYXVsdENvZGVjKClcbiAgICAgICk7XG4gICAgICB0aGlzLmluaXRCdWlsZGVyKHR4KTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKGBGYWlsZWQgdG8gcGFyc2UgcmF3IHRyYW5zYWN0aW9uOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWJzdHJhY3QgbWV0aG9kIHRvIGJlIGltcGxlbWVudGVkIGJ5IHNwZWNpZmljIHRyYW5zYWN0aW9uIGJ1aWxkZXJzXG4gICAqIEJ1aWxkcyB0aGUgYWN0dWFsIHRyYW5zYWN0aW9uIGJhc2VkIG9uIHRoZSBidWlsZGVyJ3MgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxUcmFuc2FjdGlvbj47XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBidWZmZXIgaGFzIDMyIGJ5dGUgbG9uZy5cbiAgICogQHBhcmFtIGNoYWluSURcbiAgICovXG4gIHZhbGlkYXRlQ2hhaW5JZChjaGFpbklEOiBCdWZmZXIpOiB2b2lkIHtcbiAgICBpZiAoY2hhaW5JRC5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgQnVpbGRUcmFuc2FjdGlvbkVycm9yKCdDaGFpbiBpZCBhcmUgMzIgYnl0ZSBzaXplJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IGZlZSBpcyBncmVhdGVyIHRoYW4gMC5cbiAgICogQHBhcmFtIHtiaWdpbnR9IGZlZVxuICAgKi9cbiAgdmFsaWRhdGVGZWUoZmVlOiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAoZmVlIDw9IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRmVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdmFsaWRhdGVLZXkoeyBrZXkgfTogQmFzZUtleSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IoJ0ludmFsaWQga2V5Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVHJhbnNhY3Rpb24odHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIC8vIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCd2YWxpZGF0ZVRyYW5zYWN0aW9uIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlclR5cGUpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUuaXNMZXNzVGhhbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVmFsdWUgY2Fubm90IGJlIGxlc3MgdGhhbiB6ZXJvJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiBCYXNlQWRkcmVzcywgYWRkcmVzc0Zvcm1hdD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdXRpbHMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignSW52YWxpZCBhZGRyZXNzJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSByYXcgdHJhbnNhY3Rpb24gaGFzIGEgdmFsaWQgZm9ybWF0IGluIHRoZSBibG9ja2NoYWluIGNvbnRleHQsIHRocm93IG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIHJhd1RyYW5zYWN0aW9uIFRyYW5zYWN0aW9uIGluIGFueSBmb3JtYXRcbiAgICovXG4gIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHV0aWxzLnZhbGlkYXRlUmF3VHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oeyBrZXkgfTogQmFzZUtleSk6IFRyYW5zYWN0aW9uIHtcbiAgICB0aGlzLl9zaWduZXIucHVzaChuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pKTtcbiAgICByZXR1cm4gdGhpcy50cmFuc2FjdGlvbjtcbiAgfVxuXG4gIGhhc1NpZ25lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2lnbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fc2lnbmVyLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIGFtb3VudCBpcyBwb3NpdGl2ZS5cbiAgICogQHBhcmFtIGFtb3VudFxuICAgKi9cbiAgdmFsaWRhdGVBbW91bnQoYW1vdW50OiBiaWdpbnQpOiB2b2lkIHtcbiAgICBpZiAoYW1vdW50IDw9IEJpZ0ludCgwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignQW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,57 @@
1
+ import { BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
+ import { TransactionBuilder } from './transactionBuilder';
4
+ import { ExportInPTxBuilder } from './ExportInPTxBuilder';
5
+ import { ImportInPTxBuilder } from './ImportInPTxBuilder';
6
+ import { ExportInCTxBuilder } from './ExportInCTxBuilder';
7
+ import { ImportInCTxBuilder } from './ImportInCTxBuilder';
8
+ export declare class TransactionBuilderFactory extends BaseTransactionBuilderFactory {
9
+ constructor(_coinConfig: Readonly<CoinConfig>);
10
+ /**
11
+ * Extract credentials from remaining bytes after transaction using FlareJS codec.
12
+ * This is the proper way to parse credentials - using the codec's UnpackPrefix method.
13
+ * @param credentialBytes Remaining bytes after the transaction (starts with numCredentials)
14
+ * @param codec The FlareJS codec to use for unpacking
15
+ * @returns Array of parsed credentials
16
+ */
17
+ private extractCredentialsWithCodec;
18
+ /**
19
+ * Parse a raw transaction buffer using the specified VM manager.
20
+ * @param rawBuffer The raw transaction buffer
21
+ * @param vmType The VM type to use for parsing ('EVM' or 'PVM')
22
+ * @returns Parsed transaction and credentials, or null if parsing fails
23
+ */
24
+ private parseWithVM;
25
+ /**
26
+ * Create the appropriate transaction builder based on transaction type.
27
+ * @param tx The parsed transaction
28
+ * @param rawBuffer The raw transaction buffer
29
+ * @param credentials The extracted credentials
30
+ * @param isEVM Whether this is an EVM transaction
31
+ * @returns The appropriate transaction builder
32
+ */
33
+ private createBuilder;
34
+ /** @inheritdoc */
35
+ from(raw: string): TransactionBuilder;
36
+ /** @inheritdoc */
37
+ getTransferBuilder(): TransactionBuilder;
38
+ /**
39
+ * Export Cross chain transfer
40
+ */
41
+ getExportInPBuilder(): ExportInPTxBuilder;
42
+ /**
43
+ * Import Cross chain transfer
44
+ */
45
+ getImportInPBuilder(): ImportInPTxBuilder;
46
+ /**
47
+ * Import in C chain Cross chain transfer
48
+ */
49
+ getImportInCBuilder(): ImportInCTxBuilder;
50
+ /**
51
+ * Export in C chain Cross chain transfer
52
+ */
53
+ getExportInCBuilder(): ExportInCTxBuilder;
54
+ /** @inheritdoc */
55
+ getWalletInitializationBuilder(): TransactionBuilder;
56
+ }
57
+ //# sourceMappingURL=transactionBuilderFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAgB,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAQ1D,qBAAa,yBAA0B,SAAQ,6BAA6B;gBAC9D,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAI7C;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IAwBnC;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAkBnB;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAgCrB,kBAAkB;IAClB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB;IAkBrC,kBAAkB;IAClB,kBAAkB,IAAI,kBAAkB;IAIxC;;OAEG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;OAEG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;OAEG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC;;OAEG;IACH,mBAAmB,IAAI,kBAAkB;IAIzC,kBAAkB;IAClB,8BAA8B,IAAI,kBAAkB;CAGrD"}
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TransactionBuilderFactory = void 0;
7
+ const flarejs_1 = require("@flarenetwork/flarejs");
8
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
9
+ const ExportInPTxBuilder_1 = require("./ExportInPTxBuilder");
10
+ const ImportInPTxBuilder_1 = require("./ImportInPTxBuilder");
11
+ const ExportInCTxBuilder_1 = require("./ExportInCTxBuilder");
12
+ const ImportInCTxBuilder_1 = require("./ImportInCTxBuilder");
13
+ const utils_1 = __importDefault(require("./utils"));
14
+ class TransactionBuilderFactory extends sdk_core_1.BaseTransactionBuilderFactory {
15
+ constructor(_coinConfig) {
16
+ super(_coinConfig);
17
+ }
18
+ /**
19
+ * Extract credentials from remaining bytes after transaction using FlareJS codec.
20
+ * This is the proper way to parse credentials - using the codec's UnpackPrefix method.
21
+ * @param credentialBytes Remaining bytes after the transaction (starts with numCredentials)
22
+ * @param codec The FlareJS codec to use for unpacking
23
+ * @returns Array of parsed credentials
24
+ */
25
+ extractCredentialsWithCodec(credentialBytes, codec) {
26
+ const credentials = [];
27
+ if (credentialBytes.length < 4) {
28
+ return credentials;
29
+ }
30
+ // Skip the first 4 bytes (numCredentials as Int type)
31
+ // The codec doesn't know about this Int, so we skip it manually
32
+ let remainingBytes = credentialBytes.slice(4);
33
+ let moreCredentials = true;
34
+ do {
35
+ try {
36
+ const [credential, rest] = codec.UnpackPrefix(remainingBytes);
37
+ credentials.push(credential);
38
+ remainingBytes = rest;
39
+ }
40
+ catch {
41
+ moreCredentials = false;
42
+ }
43
+ } while (remainingBytes.length > 0 && moreCredentials);
44
+ return credentials;
45
+ }
46
+ /**
47
+ * Parse a raw transaction buffer using the specified VM manager.
48
+ * @param rawBuffer The raw transaction buffer
49
+ * @param vmType The VM type to use for parsing ('EVM' or 'PVM')
50
+ * @returns Parsed transaction and credentials, or null if parsing fails
51
+ */
52
+ parseWithVM(rawBuffer, vmType) {
53
+ try {
54
+ const manager = flarejs_1.utils.getManagerForVM(vmType);
55
+ const [codec, txBytes] = manager.getCodecFromBuffer(rawBuffer);
56
+ const [tx, credentialBytes] = codec.UnpackPrefix(txBytes);
57
+ const credentials = credentialBytes.length > 4 ? this.extractCredentialsWithCodec(credentialBytes, codec) : [];
58
+ return { tx, credentials };
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ /**
65
+ * Create the appropriate transaction builder based on transaction type.
66
+ * @param tx The parsed transaction
67
+ * @param rawBuffer The raw transaction buffer
68
+ * @param credentials The extracted credentials
69
+ * @param isEVM Whether this is an EVM transaction
70
+ * @returns The appropriate transaction builder
71
+ */
72
+ createBuilder(tx, rawBuffer, credentials, isEVM) {
73
+ if (isEVM) {
74
+ if (ExportInCTxBuilder_1.ExportInCTxBuilder.verifyTxType(tx._type)) {
75
+ const builder = this.getExportInCBuilder();
76
+ builder.initBuilder(tx, rawBuffer, credentials);
77
+ return builder;
78
+ }
79
+ if (ImportInCTxBuilder_1.ImportInCTxBuilder.verifyTxType(tx._type)) {
80
+ const builder = this.getImportInCBuilder();
81
+ builder.initBuilder(tx, rawBuffer, credentials);
82
+ return builder;
83
+ }
84
+ }
85
+ else {
86
+ if (ImportInPTxBuilder_1.ImportInPTxBuilder.verifyTxType(tx._type)) {
87
+ const builder = this.getImportInPBuilder();
88
+ builder.initBuilder(tx, rawBuffer, credentials);
89
+ return builder;
90
+ }
91
+ if (ExportInPTxBuilder_1.ExportInPTxBuilder.verifyTxType(tx._type)) {
92
+ const builder = this.getExportInPBuilder();
93
+ builder.initBuilder(tx, rawBuffer, credentials);
94
+ return builder;
95
+ }
96
+ }
97
+ throw new sdk_core_1.NotSupported('Transaction type not supported');
98
+ }
99
+ /** @inheritdoc */
100
+ from(raw) {
101
+ utils_1.default.validateRawTransaction(raw);
102
+ const rawBuffer = Buffer.from(utils_1.default.removeHexPrefix(raw), 'hex');
103
+ // Try EVM first, then fall back to PVM
104
+ const evmResult = this.parseWithVM(rawBuffer, 'EVM');
105
+ if (evmResult) {
106
+ return this.createBuilder(evmResult.tx, rawBuffer, evmResult.credentials, true);
107
+ }
108
+ const pvmResult = this.parseWithVM(rawBuffer, 'PVM');
109
+ if (pvmResult) {
110
+ return this.createBuilder(pvmResult.tx, rawBuffer, pvmResult.credentials, false);
111
+ }
112
+ throw new sdk_core_1.NotSupported('Transaction type not supported');
113
+ }
114
+ /** @inheritdoc */
115
+ getTransferBuilder() {
116
+ throw new sdk_core_1.NotSupported('Transfer is not supported in P Chain');
117
+ }
118
+ /**
119
+ * Export Cross chain transfer
120
+ */
121
+ getExportInPBuilder() {
122
+ return new ExportInPTxBuilder_1.ExportInPTxBuilder(this._coinConfig);
123
+ }
124
+ /**
125
+ * Import Cross chain transfer
126
+ */
127
+ getImportInPBuilder() {
128
+ return new ImportInPTxBuilder_1.ImportInPTxBuilder(this._coinConfig);
129
+ }
130
+ /**
131
+ * Import in C chain Cross chain transfer
132
+ */
133
+ getImportInCBuilder() {
134
+ return new ImportInCTxBuilder_1.ImportInCTxBuilder(this._coinConfig);
135
+ }
136
+ /**
137
+ * Export in C chain Cross chain transfer
138
+ */
139
+ getExportInCBuilder() {
140
+ return new ExportInCTxBuilder_1.ExportInCTxBuilder(this._coinConfig);
141
+ }
142
+ /** @inheritdoc */
143
+ getWalletInitializationBuilder() {
144
+ throw new sdk_core_1.NotSupported('Wallet initialization is not needed');
145
+ }
146
+ }
147
+ exports.TransactionBuilderFactory = TransactionBuilderFactory;
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxtREFBOEY7QUFDOUYsbURBQW1GO0FBR25GLDZEQUEwRDtBQUMxRCw2REFBMEQ7QUFDMUQsNkRBQTBEO0FBQzFELDZEQUEwRDtBQUUxRCxvREFBNEI7QUFNNUIsTUFBYSx5QkFBMEIsU0FBUSx3Q0FBNkI7SUFDMUUsWUFBWSxXQUFpQztRQUMzQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLDJCQUEyQixDQUFDLGVBQTJCLEVBQUUsS0FBWTtRQUMzRSxNQUFNLFdBQVcsR0FBaUIsRUFBRSxDQUFDO1FBQ3JDLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBRUQsc0RBQXNEO1FBQ3RELGdFQUFnRTtRQUNoRSxJQUFJLGNBQWMsR0FBZSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztRQUUzQixHQUFHLENBQUM7WUFDRixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFhLGNBQWMsQ0FBQyxDQUFDO2dCQUMxRSxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM3QixjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQyxRQUFRLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGVBQWUsRUFBRTtR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SkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlscyBhcyBGbGFyZVV0aWxzLCBldm1TZXJpYWwsIHB2bVNlcmlhbCwgQ3JlZGVudGlhbCB9IGZyb20gJ0BmbGFyZW5ldHdvcmsvZmxhcmVqcyc7XG5pbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgTm90U3VwcG9ydGVkIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5QVHhCdWlsZGVyIH0gZnJvbSAnLi9FeHBvcnRJblBUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5QVHhCdWlsZGVyIH0gZnJvbSAnLi9JbXBvcnRJblBUeEJ1aWxkZXInO1xuaW1wb3J0IHsgRXhwb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9FeHBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0SW5DVHhCdWlsZGVyIH0gZnJvbSAnLi9JbXBvcnRJbkNUeEJ1aWxkZXInO1xuaW1wb3J0IHsgU2VyaWFsaXplZFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBDb2RlYyB7XG4gIFVucGFja1ByZWZpeDxUPihieXRlczogVWludDhBcnJheSk6IFtULCBVaW50OEFycmF5XTtcbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGNyZWRlbnRpYWxzIGZyb20gcmVtYWluaW5nIGJ5dGVzIGFmdGVyIHRyYW5zYWN0aW9uIHVzaW5nIEZsYXJlSlMgY29kZWMuXG4gICAqIFRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gcGFyc2UgY3JlZGVudGlhbHMgLSB1c2luZyB0aGUgY29kZWMncyBVbnBhY2tQcmVmaXggbWV0aG9kLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbEJ5dGVzIFJlbWFpbmluZyBieXRlcyBhZnRlciB0aGUgdHJhbnNhY3Rpb24gKHN0YXJ0cyB3aXRoIG51bUNyZWRlbnRpYWxzKVxuICAgKiBAcGFyYW0gY29kZWMgVGhlIEZsYXJlSlMgY29kZWMgdG8gdXNlIGZvciB1bnBhY2tpbmdcbiAgICogQHJldHVybnMgQXJyYXkgb2YgcGFyc2VkIGNyZWRlbnRpYWxzXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RDcmVkZW50aWFsc1dpdGhDb2RlYyhjcmVkZW50aWFsQnl0ZXM6IFVpbnQ4QXJyYXksIGNvZGVjOiBDb2RlYyk6IENyZWRlbnRpYWxbXSB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSA9IFtdO1xuICAgIGlmIChjcmVkZW50aWFsQnl0ZXMubGVuZ3RoIDwgNCkge1xuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIFNraXAgdGhlIGZpcnN0IDQgYnl0ZXMgKG51bUNyZWRlbnRpYWxzIGFzIEludCB0eXBlKVxuICAgIC8vIFRoZSBjb2RlYyBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyBJbnQsIHNvIHdlIHNraXAgaXQgbWFudWFsbHlcbiAgICBsZXQgcmVtYWluaW5nQnl0ZXM6IFVpbnQ4QXJyYXkgPSBjcmVkZW50aWFsQnl0ZXMuc2xpY2UoNCk7XG4gICAgbGV0IG1vcmVDcmVkZW50aWFscyA9IHRydWU7XG5cbiAgICBkbyB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBbY3JlZGVudGlhbCwgcmVzdF0gPSBjb2RlYy5VbnBhY2tQcmVmaXg8Q3JlZGVudGlhbD4ocmVtYWluaW5nQnl0ZXMpO1xuICAgICAgICBjcmVkZW50aWFscy5wdXNoKGNyZWRlbnRpYWwpO1xuICAgICAgICByZW1haW5pbmdCeXRlcyA9IHJlc3Q7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgbW9yZUNyZWRlbnRpYWxzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSB3aGlsZSAocmVtYWluaW5nQnl0ZXMubGVuZ3RoID4gMCAmJiBtb3JlQ3JlZGVudGlhbHMpO1xuXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgcmF3IHRyYW5zYWN0aW9uIGJ1ZmZlciB1c2luZyB0aGUgc3BlY2lmaWVkIFZNIG1hbmFnZXIuXG4gICAqIEBwYXJhbSByYXdCdWZmZXIgVGhlIHJhdyB0cmFuc2FjdGlvbiBidWZmZXJcbiAgICogQHBhcmFtIHZtVHlwZSBUaGUgVk0gdHlwZSB0byB1c2UgZm9yIHBhcnNpbmcgKCdFVk0nIG9yICdQVk0nKVxuICAgKiBAcmV0dXJucyBQYXJzZWQgdHJhbnNhY3Rpb24gYW5kIGNyZWRlbnRpYWxzLCBvciBudWxsIGlmIHBhcnNpbmcgZmFpbHNcbiAgICovXG4gIHByaXZhdGUgcGFyc2VXaXRoVk0oXG4gICAgcmF3QnVmZmVyOiBCdWZmZXIsXG4gICAgdm1UeXBlOiAnRVZNJyB8ICdQVk0nXG4gICk6IHsgdHg6IFNlcmlhbGl6ZWRUeDsgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXSB9IHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1hbmFnZXIgPSBGbGFyZVV0aWxzLmdldE1hbmFnZXJGb3JWTSh2bVR5cGUpO1xuICAgICAgY29uc3QgW2NvZGVjLCB0eEJ5dGVzXSA9IG1hbmFnZXIuZ2V0Q29kZWNGcm9tQnVmZmVyKHJhd0J1ZmZlcik7XG4gICAgICBjb25zdCBbdHgsIGNyZWRlbnRpYWxCeXRlc10gPSAoY29kZWMgYXMgQ29kZWMpLlVucGFja1ByZWZpeDxTZXJpYWxpemVkVHg+KHR4Qnl0ZXMpO1xuXG4gICAgICBjb25zdCBjcmVkZW50aWFscyA9XG4gICAgICAgIGNyZWRlbnRpYWxCeXRlcy5sZW5ndGggPiA0ID8gdGhpcy5leHRyYWN0Q3JlZGVudGlhbHNXaXRoQ29kZWMoY3JlZGVudGlhbEJ5dGVzLCBjb2RlYyBhcyBDb2RlYykgOiBbXTtcblxuICAgICAgcmV0dXJuIHsgdHgsIGNyZWRlbnRpYWxzIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB0cmFuc2FjdGlvbiBidWlsZGVyIGJhc2VkIG9uIHRyYW5zYWN0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSB0eCBUaGUgcGFyc2VkIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSByYXdCdWZmZXIgVGhlIHJhdyB0cmFuc2FjdGlvbiBidWZmZXJcbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBleHRyYWN0ZWQgY3JlZGVudGlhbHNcbiAgICogQHBhcmFtIGlzRVZNIFdoZXRoZXIgdGhpcyBpcyBhbiBFVk0gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMgVGhlIGFwcHJvcHJpYXRlIHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQnVpbGRlcihcbiAgICB0eDogU2VyaWFsaXplZFR4LFxuICAgIHJhd0J1ZmZlcjogQnVmZmVyLFxuICAgIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFsW10sXG4gICAgaXNFVk06IGJvb2xlYW5cbiAgKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICBpZiAoaXNFVk0pIHtcbiAgICAgIGlmIChFeHBvcnRJbkNUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKHR4Ll90eXBlKSkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gdGhpcy5nZXRFeHBvcnRJbkNCdWlsZGVyKCk7XG4gICAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIodHggYXMgZXZtU2VyaWFsLkV4cG9ydFR4LCByYXdCdWZmZXIsIGNyZWRlbnRpYWxzKTtcbiAgICAgICAgcmV0dXJuIGJ1aWxkZXI7XG4gICAgICB9XG4gICAgICBpZiAoSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eC5fdHlwZSkpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0SW5DQnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4IGFzIGV2bVNlcmlhbC5JbXBvcnRUeCwgcmF3QnVmZmVyLCBjcmVkZW50aWFscyk7XG4gICAgICAgIHJldHVybiBidWlsZGVyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoSW1wb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0eC5fdHlwZSkpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IHRoaXMuZ2V0SW1wb3J0SW5QQnVpbGRlcigpO1xuICAgICAgICBidWlsZGVyLmluaXRCdWlsZGVyKHR4IGFzIHB2bVNlcmlhbC5JbXBvcnRUeCwgcmF3QnVmZmVyLCBjcmVkZW50aWFscyk7XG4gICAgICAgIHJldHVybiBidWlsZGVyO1xuICAgICAgfVxuICAgICAgaWYgKEV4cG9ydEluUFR4QnVpbGRlci52ZXJpZnlUeFR5cGUodHguX3R5cGUpKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSB0aGlzLmdldEV4cG9ydEluUEJ1aWxkZXIoKTtcbiAgICAgICAgYnVpbGRlci5pbml0QnVpbGRlcih0eCBhcyBwdm1TZXJpYWwuRXhwb3J0VHgsIHJhd0J1ZmZlciwgY3JlZGVudGlhbHMpO1xuICAgICAgICByZXR1cm4gYnVpbGRlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnVHJhbnNhY3Rpb24gdHlwZSBub3Qgc3VwcG9ydGVkJyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZnJvbShyYXc6IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdXRpbHMudmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXcpO1xuICAgIGNvbnN0IHJhd0J1ZmZlciA9IEJ1ZmZlci5mcm9tKHV0aWxzLnJlbW92ZUhleFByZWZpeChyYXcpLCAnaGV4Jyk7XG5cbiAgICAvLyBUcnkgRVZNIGZpcnN0LCB0aGVuIGZhbGwgYmFjayB0byBQVk1cbiAgICBjb25zdCBldm1SZXN1bHQgPSB0aGlzLnBhcnNlV2l0aFZNKHJhd0J1ZmZlciwgJ0VWTScpO1xuICAgIGlmIChldm1SZXN1bHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUJ1aWxkZXIoZXZtUmVzdWx0LnR4LCByYXdCdWZmZXIsIGV2bVJlc3VsdC5jcmVkZW50aWFscywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcHZtUmVzdWx0ID0gdGhpcy5wYXJzZVdpdGhWTShyYXdCdWZmZXIsICdQVk0nKTtcbiAgICBpZiAocHZtUmVzdWx0KSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVCdWlsZGVyKHB2bVJlc3VsdC50eCwgcmF3QnVmZmVyLCBwdm1SZXN1bHQuY3JlZGVudGlhbHMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRUcmFuc2ZlckJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2ZlciBpcyBub3Qgc3VwcG9ydGVkIGluIFAgQ2hhaW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICovXG4gIGdldEV4cG9ydEluUEJ1aWxkZXIoKTogRXhwb3J0SW5QVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEV4cG9ydEluUFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgQ3Jvc3MgY2hhaW4gdHJhbnNmZXJcbiAgICovXG4gIGdldEltcG9ydEluUEJ1aWxkZXIoKTogSW1wb3J0SW5QVHhCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IEltcG9ydEluUFR4QnVpbGRlcih0aGlzLl9jb2luQ29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgaW4gQyBjaGFpbiBDcm9zcyBjaGFpbiB0cmFuc2ZlclxuICAgKi9cbiAgZ2V0SW1wb3J0SW5DQnVpbGRlcigpOiBJbXBvcnRJbkNUeEJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgSW1wb3J0SW5DVHhCdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBpbiBDIGNoYWluIENyb3NzIGNoYWluIHRyYW5zZmVyXG4gICAqL1xuICBnZXRFeHBvcnRJbkNCdWlsZGVyKCk6IEV4cG9ydEluQ1R4QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBFeHBvcnRJbkNUeEJ1aWxkZXIodGhpcy5fY29pbkNvbmZpZyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0V2FsbGV0SW5pdGlhbGl6YXRpb25CdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnV2FsbGV0IGluaXRpYWxpemF0aW9uIGlzIG5vdCBuZWVkZWQnKTtcbiAgfVxufVxuIl19