@bitgo-beta/sdk-coin-kaspa 0.0.1-beta.43 → 0.0.1-beta.430

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 (47) hide show
  1. package/README.md +224 -33
  2. package/dist/src/kaspa.d.ts +86 -18
  3. package/dist/src/kaspa.d.ts.map +1 -1
  4. package/dist/src/kaspa.js +119 -31
  5. package/dist/src/lib/constants.d.ts +38 -0
  6. package/dist/src/lib/constants.d.ts.map +1 -1
  7. package/dist/src/lib/constants.js +56 -5
  8. package/dist/src/lib/iface.d.ts +28 -17
  9. package/dist/src/lib/iface.d.ts.map +1 -1
  10. package/dist/src/lib/iface.js +1 -1
  11. package/dist/src/lib/index.d.ts +2 -0
  12. package/dist/src/lib/index.d.ts.map +1 -1
  13. package/dist/src/lib/index.js +4 -2
  14. package/dist/src/lib/keyPair.d.ts +6 -2
  15. package/dist/src/lib/keyPair.d.ts.map +1 -1
  16. package/dist/src/lib/keyPair.js +7 -4
  17. package/dist/src/lib/pskt.d.ts +257 -0
  18. package/dist/src/lib/pskt.d.ts.map +1 -0
  19. package/dist/src/lib/pskt.js +439 -0
  20. package/dist/src/lib/sighash.d.ts +34 -13
  21. package/dist/src/lib/sighash.d.ts.map +1 -1
  22. package/dist/src/lib/sighash.js +115 -56
  23. package/dist/src/lib/transaction.d.ts +81 -21
  24. package/dist/src/lib/transaction.d.ts.map +1 -1
  25. package/dist/src/lib/transaction.js +167 -44
  26. package/dist/src/lib/transactionBuilder.d.ts +23 -17
  27. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  28. package/dist/src/lib/transactionBuilder.js +53 -22
  29. package/dist/src/lib/utils.d.ts +17 -3
  30. package/dist/src/lib/utils.d.ts.map +1 -1
  31. package/dist/src/lib/utils.js +45 -11
  32. package/dist/src/register.js +2 -2
  33. package/dist/test/fixtures/kaspa.fixtures.d.ts +12 -0
  34. package/dist/test/fixtures/kaspa.fixtures.d.ts.map +1 -1
  35. package/dist/test/fixtures/kaspa.fixtures.js +76 -11
  36. package/dist/test/unit/coin.test.js +129 -9
  37. package/dist/test/unit/keyPair.test.js +35 -1
  38. package/dist/test/unit/pskt.test.d.ts +15 -0
  39. package/dist/test/unit/pskt.test.d.ts.map +1 -0
  40. package/dist/test/unit/pskt.test.js +383 -0
  41. package/dist/test/unit/transaction.test.js +259 -64
  42. package/dist/test/unit/transactionBuilder.test.js +3 -31
  43. package/dist/test/unit/transactionFlow.test.js +67 -2
  44. package/dist/test/unit/utils.test.js +63 -4
  45. package/dist/tsconfig.tsbuildinfo +1 -1
  46. package/package.json +7 -6
  47. package/LICENSE +0 -191
@@ -4,8 +4,22 @@ exports.Transaction = void 0;
4
4
  const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
5
  const secp256k1_1 = require("@bitgo-beta/secp256k1");
6
6
  const sighash_1 = require("./sighash");
7
+ const constants_1 = require("./constants");
8
+ const pskt_1 = require("./pskt");
9
+ /**
10
+ * Returns true when `input`'s scriptPublicKey belongs to a Kaspa ECDSA (v1)
11
+ * address — last opcode is OpCheckSigECDSA (0xAB).
12
+ * Schnorr (v0) scripts end with OpCheckSig (0xAC).
13
+ */
14
+ function isEcdsaInput(input) {
15
+ if (!input.scriptPublicKey || input.scriptPublicKey.length < 2)
16
+ return false;
17
+ return parseInt(input.scriptPublicKey.slice(-2), 16) === constants_1.OP_CHECKSIG_ECDSA;
18
+ }
7
19
  class Transaction extends sdk_core_1.BaseTransaction {
8
20
  constructor(coin, txData) {
21
+ // BaseTransaction expects a full statics CoinConfig; we only have the coin name string here.
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
23
  super({ coin });
10
24
  this._txData = txData || {
11
25
  version: 0,
@@ -24,7 +38,7 @@ class Transaction extends sdk_core_1.BaseTransaction {
24
38
  * Get the transaction fee in sompi.
25
39
  * If fee was explicitly set, returns that. Otherwise computes from inputs - outputs.
26
40
  */
27
- get getFee() {
41
+ get fee() {
28
42
  if (this._txData.fee) {
29
43
  return this._txData.fee;
30
44
  }
@@ -39,81 +53,121 @@ class Transaction extends sdk_core_1.BaseTransaction {
39
53
  return (totalIn - totalOut).toString();
40
54
  }
41
55
  /**
42
- * Returns the signable payload for TSS/MPC signing.
56
+ * Returns one sighash Buffer per input — the set of messages that must be
57
+ * signed for a multi-input MPCv2 ceremony.
43
58
  *
44
- * For Kaspa, each input has its own sighash (BIP-143-like scheme with Blake2b).
45
- * This returns the sighash for the first input, which is what TSS signs.
46
- * For multi-input transactions, all inputs share the same key so the same
47
- * Schnorr signature is applied to each input's individual sighash in addSignature().
59
+ * Kaspa uses a BIP-143-like sighash scheme (Blake2b) where each input commits
60
+ * to its own index, so input[i] has a distinct hash that cannot be re-used for
61
+ * input[j]. A correct multi-input MPCv2 flow runs one DKLS session per input
62
+ * in parallel and applies each resulting signature via addSignatureForInput().
48
63
  *
49
- * @see ADA's Transaction.signablePayload for the equivalent pattern
64
+ * The hash type is automatically selected per input:
65
+ * - Schnorr (scriptPublicKey ends 0xAC): keyed Blake2b-256
66
+ * - ECDSA (scriptPublicKey ends 0xAB): keyed Blake2b-256 + SHA256 double-hash
50
67
  */
51
- get signablePayload() {
68
+ get signablePayloads() {
52
69
  if (this._txData.inputs.length === 0) {
53
- throw new Error('Cannot compute signablePayload: no inputs');
70
+ throw new Error('Cannot compute signablePayloads: no inputs');
54
71
  }
55
- return (0, sighash_1.computeKaspaSigningHash)(this._txData, 0, sighash_1.SIGHASH_ALL);
72
+ return this._txData.inputs.map((input, i) => isEcdsaInput(input)
73
+ ? (0, sighash_1.computeKaspaEcdsaSigningHash)(this._txData, i, constants_1.SIGHASH_ALL)
74
+ : (0, sighash_1.computeKaspaSigningHash)(this._txData, i, constants_1.SIGHASH_ALL));
56
75
  }
57
76
  /**
58
- * Apply a Schnorr signature produced by TSS/MPC signing to all inputs.
77
+ * Apply a signature to a single specific input.
59
78
  *
60
- * In TSS flow, the keyserver signs the first input's sighash. Since each input
61
- * has a different sighash, we re-sign each input individually using the
62
- * x-only public key derived from the compressed public key.
79
+ * Used in the multi-input MPCv2 flow where each input is signed by an
80
+ * independent DKLS session that commits to that input's sighash. Call this
81
+ * once per input with the signature produced for that input's signablePayloads[i].
63
82
  *
64
- * @param publicKey compressed secp256k1 public key (33 bytes hex)
65
- * @param signature 64-byte Schnorr signature buffer (from TSS)
83
+ * @param index 0-based index of the input to sign
84
+ * @param publicKey compressed secp256k1 public key (33 bytes hex) — not used in
85
+ * the scriptSig bytes but kept for symmetry with addSignature
86
+ * @param signature 64-byte signature buffer for input[index]
66
87
  * @param sigHashType SigHash type (default: SIGHASH_ALL)
67
88
  */
68
- addSignature(publicKey, signature, sigHashType = sighash_1.SIGHASH_ALL) {
69
- if (signature.length !== 64) {
70
- throw new Error(`Expected 64-byte Schnorr signature, got ${signature.length}`);
89
+ addSignatureForInput(index, publicKey, signature, sigHashType = constants_1.SIGHASH_ALL) {
90
+ if (index < 0 || index >= this._txData.inputs.length) {
91
+ throw new Error(`Input index ${index} is out of range (tx has ${this._txData.inputs.length} inputs)`);
71
92
  }
72
- for (let i = 0; i < this._txData.inputs.length; i++) {
73
- // Each input gets the same signature format: 64-byte sig + sighash type byte
74
- const sigWithType = Buffer.concat([signature, Buffer.from([sigHashType])]);
75
- this._txData.inputs[i].signatureScript = sigWithType.toString('hex');
93
+ if (signature.length !== 64) {
94
+ throw new Error(`Expected 64-byte signature, got ${signature.length}`);
76
95
  }
96
+ // Kaspa script engine requires push-only signatureScripts.
97
+ // 0x41 = OP_DATA_65: push the next 65 bytes (64-byte sig + 1-byte sighash type) onto the stack.
98
+ const sigWithType = Buffer.concat([Buffer.from([0x41]), signature, Buffer.from([sigHashType])]);
99
+ this._txData.inputs[index].signatureScript = sigWithType.toString('hex');
77
100
  }
78
101
  /**
79
- * Sign all inputs with the given private key using Schnorr signatures.
102
+ * Sign all inputs with the given private key.
103
+ *
104
+ * Automatically selects the signature algorithm per input by inspecting each
105
+ * input's scriptPublicKey:
106
+ * - Schnorr (last opcode 0xAC, v0 address): BIP-340 Schnorr + Blake2b sighash
107
+ * - ECDSA (last opcode 0xAB, v1 address): secp256k1 ECDSA + Blake2b+SHA256 sighash
80
108
  *
81
- * @param privateKey 32-byte private key buffer
109
+ * A single transaction may mix both address types and each input will be
110
+ * signed correctly without any extra parameters.
111
+ *
112
+ * @param privateKey 32-byte private key buffer
82
113
  * @param sigHashType SigHash type (default: SIGHASH_ALL = 0x01)
83
114
  */
84
- sign(privateKey, sigHashType = sighash_1.SIGHASH_ALL) {
115
+ sign(privateKey, sigHashType = constants_1.SIGHASH_ALL) {
85
116
  if (privateKey.length !== 32) {
86
117
  throw new Error(`Expected 32-byte private key, got ${privateKey.length}`);
87
118
  }
88
119
  for (let i = 0; i < this._txData.inputs.length; i++) {
89
- const sigHash = (0, sighash_1.computeKaspaSigningHash)(this._txData, i, sigHashType);
90
- const sig = secp256k1_1.ecc.signSchnorr(sigHash, privateKey);
91
- // 65-byte signature: 64-byte Schnorr sig + 1-byte sighash type
92
- const sigWithType = Buffer.concat([Buffer.from(sig), Buffer.from([sigHashType])]);
120
+ const input = this._txData.inputs[i];
121
+ let sig;
122
+ let sigHash;
123
+ if (isEcdsaInput(input)) {
124
+ // v1 ECDSA address: double-hash + compact secp256k1 ECDSA signature
125
+ sigHash = (0, sighash_1.computeKaspaEcdsaSigningHash)(this._txData, i, sigHashType);
126
+ sig = secp256k1_1.ecc.sign(sigHash, privateKey);
127
+ }
128
+ else {
129
+ // v0 Schnorr address (default): Blake2b sighash + BIP-340 Schnorr signature
130
+ sigHash = (0, sighash_1.computeKaspaSigningHash)(this._txData, i, sigHashType);
131
+ sig = secp256k1_1.ecc.signSchnorr(sigHash, privateKey);
132
+ }
133
+ // Kaspa requires push-only signatureScripts: 0x41 (OP_DATA_65) + 64-byte sig + 1-byte sighash type
134
+ const sigWithType = Buffer.concat([Buffer.from([0x41]), Buffer.from(sig), Buffer.from([sigHashType])]);
93
135
  this._txData.inputs[i].signatureScript = sigWithType.toString('hex');
94
136
  }
95
137
  }
96
138
  /**
97
- * Verify that a Schnorr signature on a specific input is valid.
139
+ * Verify that the signature on a specific input is valid.
140
+ *
141
+ * Automatically selects the verification algorithm based on the input's
142
+ * scriptPublicKey (ECDSA for 0xAB, Schnorr for 0xAC), matching `sign()`.
98
143
  *
99
- * @param publicKey 33-byte compressed public key (or 32-byte x-only)
144
+ * @param publicKey 33-byte compressed public key (or 32-byte x-only for Schnorr)
100
145
  * @param inputIndex Index of the input to verify
101
146
  * @param sigHashType SigHash type used when signing
102
147
  */
103
- verifySignature(publicKey, inputIndex, sigHashType = sighash_1.SIGHASH_ALL) {
148
+ verifySignature(publicKey, inputIndex, sigHashType = constants_1.SIGHASH_ALL) {
104
149
  const input = this._txData.inputs[inputIndex];
105
150
  if (!input?.signatureScript) {
106
151
  return false;
107
152
  }
108
153
  const sigBytes = Buffer.from(input.signatureScript, 'hex');
109
- if (sigBytes.length < 65) {
154
+ // signatureScript layout: 0x41 (OP_DATA_65) + 64-byte sig + 1-byte sighash type = 66 bytes
155
+ if (sigBytes.length < 66) {
110
156
  return false;
111
157
  }
112
- const sig = sigBytes.slice(0, 64);
113
- const sigHash = (0, sighash_1.computeKaspaSigningHash)(this._txData, inputIndex, sigHashType);
114
- // Accept 33-byte compressed or 32-byte x-only
115
- const xOnlyPub = publicKey.length === 33 ? publicKey.slice(1) : publicKey;
116
- return secp256k1_1.ecc.verifySchnorr(sigHash, xOnlyPub, sig);
158
+ const sig = sigBytes.slice(1, 65); // skip the 0x41 push opcode
159
+ if (isEcdsaInput(input)) {
160
+ const sigHash = (0, sighash_1.computeKaspaEcdsaSigningHash)(this._txData, inputIndex, sigHashType);
161
+ // ECDSA verification requires 33-byte compressed public key
162
+ const compressedPub = publicKey.length === 33 ? publicKey : Buffer.concat([Buffer.from([0x02]), publicKey]);
163
+ return secp256k1_1.ecc.verify(sigHash, compressedPub, sig);
164
+ }
165
+ else {
166
+ const sigHash = (0, sighash_1.computeKaspaSigningHash)(this._txData, inputIndex, sigHashType);
167
+ // Schnorr verification uses x-only (32-byte) public key
168
+ const xOnlyPub = publicKey.length === 33 ? publicKey.slice(1) : publicKey;
169
+ return secp256k1_1.ecc.verifySchnorr(sigHash, xOnlyPub, sig);
170
+ }
117
171
  }
118
172
  /**
119
173
  * Explain the transaction in a human-readable format.
@@ -144,16 +198,53 @@ class Transaction extends sdk_core_1.BaseTransaction {
144
198
  };
145
199
  }
146
200
  /**
147
- * Serialize the transaction to a JSON string (broadcast format).
201
+ * Serialize the transaction to the Kaspa REST API JSON string.
202
+ *
203
+ * This is the wire format accepted by the Kaspa node REST API for broadcasting.
204
+ * Unsigned transactions (signatureScript = "") use this same structure; once
205
+ * all inputs are signed the same format is submitted to the node.
206
+ *
207
+ * Note: inputs in this format carry only `previousOutpoint`, `signatureScript`,
208
+ * `sequence`, and `sigOpCount`. The `amount` and `scriptPublicKey` fields needed
209
+ * for sighash computation are NOT present here — they live in `toJson()`.
148
210
  */
149
211
  toBroadcastFormat() {
150
- return JSON.stringify(this._txData);
212
+ return JSON.stringify({
213
+ version: this._txData.version,
214
+ inputs: this._txData.inputs.map((input) => ({
215
+ previousOutpoint: {
216
+ transactionId: input.transactionId,
217
+ index: input.transactionIndex,
218
+ },
219
+ signatureScript: input.signatureScript || '',
220
+ sequence: Number(input.sequence ?? 0),
221
+ sigOpCount: input.sigOpCount ?? 1,
222
+ })),
223
+ outputs: this._txData.outputs.map((output) => ({
224
+ amount: Number(output.amount),
225
+ scriptPublicKey: {
226
+ version: 0,
227
+ scriptPublicKey: output.scriptPublicKey || '',
228
+ },
229
+ })),
230
+ lockTime: Number(this._txData.lockTime ?? 0),
231
+ subnetworkId: this._txData.subnetworkId ?? '0000000000000000000000000000000000000000',
232
+ gas: 0,
233
+ payload: this._txData.payload ?? '',
234
+ });
151
235
  }
152
236
  /**
153
- * Serialize transaction to hex (JSON-encoded then hex-encoded).
237
+ * Serialize transaction to hex using the internal `KaspaTransactionData` format.
238
+ *
239
+ * This hex is used for SDK-internal round-trips (builder serialisation / deserialisation)
240
+ * because the internal format preserves `amount` and `scriptPublicKey` on inputs,
241
+ * which are required for sighash computation but are not present in the REST API format.
242
+ *
243
+ * Use `Buffer.from(tx.toBroadcastFormat()).toString('hex')` when you need the hex
244
+ * representation of the broadcast / HSM wire format.
154
245
  */
155
246
  toHex() {
156
- return Buffer.from(this.toBroadcastFormat()).toString('hex');
247
+ return Buffer.from(JSON.stringify(this._txData)).toString('hex');
157
248
  }
158
249
  /**
159
250
  * Return transaction data as a plain object.
@@ -183,6 +274,38 @@ class Transaction extends sdk_core_1.BaseTransaction {
183
274
  canSign(_key) {
184
275
  return true;
185
276
  }
277
+ /**
278
+ * Convert this transaction to a PSKT in SIGNER role.
279
+ *
280
+ * The PSKT is populated with UTXO data from each input so that sighash
281
+ * computation is possible immediately. Any existing `signatureScript` on an
282
+ * input is carried into the PSKT as `finalScriptSig`.
283
+ *
284
+ * Typical use:
285
+ * ```ts
286
+ * const pskt = tx.toPskt()
287
+ * .sign(privateKey)
288
+ * .toFinalizer()
289
+ * .finalize()
290
+ * .toExtractor();
291
+ * const broadcastJson = pskt.extract();
292
+ * ```
293
+ */
294
+ toPskt() {
295
+ return pskt_1.Pskt.fromTxData(this._txData);
296
+ }
297
+ /**
298
+ * Reconstruct a Transaction from a PSKT (any role).
299
+ *
300
+ * `finalScriptSig` from each PSKT input is mapped to `signatureScript` so
301
+ * that the resulting transaction is signed if the PSKT has been finalised.
302
+ *
303
+ * @param coin Coin name string (e.g. 'kaspa', 'tkaspa')
304
+ * @param pskt A Pskt instance (typically at FINALIZER or EXTRACTOR role)
305
+ */
306
+ static fromPskt(coin, pskt) {
307
+ return new Transaction(coin, pskt.toTxData());
308
+ }
186
309
  }
187
310
  exports.Transaction = Transaction;
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFpRjtBQUNqRixxREFBNEM7QUFFNUMsdUNBQWlFO0FBRWpFLE1BQWEsV0FBWSxTQUFRLDBCQUFlO0lBRzlDLFlBQVksSUFBWSxFQUFFLE1BQTZCO1FBQ3JELEtBQUssQ0FBQyxFQUFFLElBQUksRUFBUyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUk7WUFDdkIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENB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LENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQVksRUFBRSxJQUFtQztRQUMvRCxNQUFNLE1BQU0sR0FBeUIsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEYsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxJQUFhO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBek1ELGtDQXlNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VLZXksIEJhc2VUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IEthc3BhVHJhbnNhY3Rpb25EYXRhLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBjb21wdXRlS2FzcGFTaWduaW5nSGFzaCwgU0lHSEFTSF9BTEwgfSBmcm9tICcuL3NpZ2hhc2gnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX3R4RGF0YTogS2FzcGFUcmFuc2FjdGlvbkRhdGE7XG5cbiAgY29uc3RydWN0b3IoY29pbjogc3RyaW5nLCB0eERhdGE/OiBLYXNwYVRyYW5zYWN0aW9uRGF0YSkge1xuICAgIHN1cGVyKHsgY29pbiB9IGFzIGFueSk7XG4gICAgdGhpcy5fdHhEYXRhID0gdHhEYXRhIHx8IHtcbiAgICAgIHZlcnNpb246IDAsXG4gICAgICBpbnB1dHM6IFtdLFxuICAgICAgb3V0cHV0czogW10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHhEYXRhLmlkIHx8ICcnO1xuICB9XG5cbiAgZ2V0IHR4RGF0YSgpOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX3R4RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGZlZSBpbiBzb21waS5cbiAgICogSWYgZmVlIHdhcyBleHBsaWNpdGx5IHNldCwgcmV0dXJucyB0aGF0LiBPdGhlcndpc2UgY29tcHV0ZXMgZnJvbSBpbnB1dHMgLSBvdXRwdXRzLlxuICAgKi9cbiAgZ2V0IGdldEZlZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl90eERhdGEuZmVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHhEYXRhLmZlZTtcbiAgICB9XG4gICAgbGV0IHRvdGFsSW4gPSBCaWdJbnQoMCk7XG4gICAgbGV0IHRvdGFsT3V0ID0gQmlnSW50KDApO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fdHhEYXRhLmlucHV0cykge1xuICAgICAgdG90YWxJbiArPSBCaWdJbnQoaW5wdXQuYW1vdW50KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdGhpcy5fdHhEYXRhLm91dHB1dHMpIHtcbiAgICAgIHRvdGFsT3V0ICs9IEJpZ0ludChvdXRwdXQuYW1vdW50KTtcbiAgICB9XG4gICAgcmV0dXJuICh0b3RhbEluIC0gdG90YWxPdXQpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2lnbmFibGUgcGF5bG9hZCBmb3IgVFNTL01QQyBzaWduaW5nLlxuICAgKlxuICAgKiBGb3IgS2FzcGEsIGVhY2ggaW5wdXQgaGFzIGl0cyBvd24gc2lnaGFzaCAoQklQLTE0My1saWtlIHNjaGVtZSB3aXRoIEJsYWtlMmIpLlxuICAgKiBUaGlzIHJldHVybnMgdGhlIHNpZ2hhc2ggZm9yIHRoZSBmaXJzdCBpbnB1dCwgd2hpY2ggaXMgd2hhdCBUU1Mgc2lnbnMuXG4gICAqIEZvciBtdWx0aS1pbnB1dCB0cmFuc2FjdGlvbnMsIGFsbCBpbnB1dHMgc2hhcmUgdGhlIHNhbWUga2V5IHNvIHRoZSBzYW1lXG4gICAqIFNjaG5vcnIgc2lnbmF0dXJlIGlzIGFwcGxpZWQgdG8gZWFjaCBpbnB1dCdzIGluZGl2aWR1YWwgc2lnaGFzaCBpbiBhZGRTaWduYXR1cmUoKS5cbiAgICpcbiAgICogQHNlZSBBREEncyBUcmFuc2FjdGlvbi5zaWduYWJsZVBheWxvYWQgZm9yIHRoZSBlcXVpdmFsZW50IHBhdHRlcm5cbiAgICovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fdHhEYXRhLmlucHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXB1dGUgc2lnbmFibGVQYXlsb2FkOiBubyBpbnB1dHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgMCwgU0lHSEFTSF9BTEwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGEgU2Nobm9yciBzaWduYXR1cmUgcHJvZHVjZWQgYnkgVFNTL01QQyBzaWduaW5nIHRvIGFsbCBpbnB1dHMuXG4gICAqXG4gICAqIEluIFRTUyBmbG93LCB0aGUga2V5c2VydmVyIHNpZ25zIHRoZSBmaXJzdCBpbnB1dCdzIHNpZ2hhc2guIFNpbmNlIGVhY2ggaW5wdXRcbiAgICogaGFzIGEgZGlmZmVyZW50IHNpZ2hhc2gsIHdlIHJlLXNpZ24gZWFjaCBpbnB1dCBpbmRpdmlkdWFsbHkgdXNpbmcgdGhlXG4gICAqIHgtb25seSBwdWJsaWMga2V5IGRlcml2ZWQgZnJvbSB0aGUgY29tcHJlc3NlZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBAcGFyYW0gcHVibGljS2V5IGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKDMzIGJ5dGVzIGhleClcbiAgICogQHBhcmFtIHNpZ25hdHVyZSA2NC1ieXRlIFNjaG5vcnIgc2lnbmF0dXJlIGJ1ZmZlciAoZnJvbSBUU1MpXG4gICAqIEBwYXJhbSBzaWdIYXNoVHlwZSBTaWdIYXNoIHR5cGUgKGRlZmF1bHQ6IFNJR0hBU0hfQUxMKVxuICAgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogc3RyaW5nLCBzaWduYXR1cmU6IEJ1ZmZlciwgc2lnSGFzaFR5cGU6IG51bWJlciA9IFNJR0hBU0hfQUxMKTogdm9pZCB7XG4gICAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDY0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIDY0LWJ5dGUgU2Nobm9yciBzaWduYXR1cmUsIGdvdCAke3NpZ25hdHVyZS5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90eERhdGEuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBFYWNoIGlucHV0IGdldHMgdGhlIHNhbWUgc2lnbmF0dXJlIGZvcm1hdDogNjQtYnl0ZSBzaWcgKyBzaWdoYXNoIHR5cGUgYnl0ZVxuICAgICAgY29uc3Qgc2lnV2l0aFR5cGUgPSBCdWZmZXIuY29uY2F0KFtzaWduYXR1cmUsIEJ1ZmZlci5mcm9tKFtzaWdIYXNoVHlwZV0pXSk7XG4gICAgICB0aGlzLl90eERhdGEuaW5wdXRzW2ldLnNpZ25hdHVyZVNjcmlwdCA9IHNpZ1dpdGhUeXBlLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhbGwgaW5wdXRzIHdpdGggdGhlIGdpdmVuIHByaXZhdGUga2V5IHVzaW5nIFNjaG5vcnIgc2lnbmF0dXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHByaXZhdGVLZXkgMzItYnl0ZSBwcml2YXRlIGtleSBidWZmZXJcbiAgICogQHBhcmFtIHNpZ0hhc2hUeXBlIFNpZ0hhc2ggdHlwZSAoZGVmYXVsdDogU0lHSEFTSF9BTEwgPSAweDAxKVxuICAgKi9cbiAgc2lnbihwcml2YXRlS2V5OiBCdWZmZXIsIHNpZ0hhc2hUeXBlOiBudW1iZXIgPSBTSUdIQVNIX0FMTCk6IHZvaWQge1xuICAgIGlmIChwcml2YXRlS2V5Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgMzItYnl0ZSBwcml2YXRlIGtleSwgZ290ICR7cHJpdmF0ZUtleS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHhEYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaSwgc2lnSGFzaFR5cGUpO1xuICAgICAgY29uc3Qgc2lnID0gZWNjLnNpZ25TY2hub3JyKHNpZ0hhc2gsIHByaXZhdGVLZXkpO1xuICAgICAgLy8gNjUtYnl0ZSBzaWduYXR1cmU6IDY0LWJ5dGUgU2Nobm9yciBzaWcgKyAxLWJ5dGUgc2lnaGFzaCB0eXBlXG4gICAgICBjb25zdCBzaWdXaXRoVHlwZSA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKHNpZyksIEJ1ZmZlci5mcm9tKFtzaWdIYXNoVHlwZV0pXSk7XG4gICAgICB0aGlzLl90eERhdGEuaW5wdXRzW2ldLnNpZ25hdHVyZVNjcmlwdCA9IHNpZ1dpdGhUeXBlLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSBTY2hub3JyIHNpZ25hdHVyZSBvbiBhIHNwZWNpZmljIGlucHV0IGlzIHZhbGlkLlxuICAgKlxuICAgKiBAcGFyYW0gcHVibGljS2V5IDMzLWJ5dGUgY29tcHJlc3NlZCBwdWJsaWMga2V5IChvciAzMi1ieXRlIHgtb25seSlcbiAgICogQHBhcmFtIGlucHV0SW5kZXggSW5kZXggb2YgdGhlIGlucHV0IHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gc2lnSGFzaFR5cGUgU2lnSGFzaCB0eXBlIHVzZWQgd2hlbiBzaWduaW5nXG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmUocHVibGljS2V5OiBCdWZmZXIsIGlucHV0SW5kZXg6IG51bWJlciwgc2lnSGFzaFR5cGU6IG51bWJlciA9IFNJR0hBU0hfQUxMKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLl90eERhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGlmICghaW5wdXQ/LnNpZ25hdHVyZVNjcmlwdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzaWdCeXRlcyA9IEJ1ZmZlci5mcm9tKGlucHV0LnNpZ25hdHVyZVNjcmlwdCwgJ2hleCcpO1xuICAgIGlmIChzaWdCeXRlcy5sZW5ndGggPCA2NSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzaWcgPSBzaWdCeXRlcy5zbGljZSgwLCA2NCk7XG4gICAgY29uc3Qgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaW5wdXRJbmRleCwgc2lnSGFzaFR5cGUpO1xuICAgIC8vIEFjY2VwdCAzMy1ieXRlIGNvbXByZXNzZWQgb3IgMzItYnl0ZSB4LW9ubHlcbiAgICBjb25zdCB4T25seVB1YiA9IHB1YmxpY0tleS5sZW5ndGggPT09IDMzID8gcHVibGljS2V5LnNsaWNlKDEpIDogcHVibGljS2V5O1xuICAgIHJldHVybiBlY2MudmVyaWZ5U2Nobm9ycihzaWdIYXNoLCB4T25seVB1Yiwgc2lnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluIHRoZSB0cmFuc2FjdGlvbiBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdC5cbiAgICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBsZXQgdG90YWxJbiA9IEJpZ0ludCgwKTtcbiAgICBsZXQgdG90YWxPdXQgPSBCaWdJbnQoMCk7XG5cbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3R4RGF0YS5pbnB1dHMpIHtcbiAgICAgIHRvdGFsSW4gKz0gQmlnSW50KGlucHV0LmFtb3VudCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIHRoaXMuX3R4RGF0YS5vdXRwdXRzKSB7XG4gICAgICB0b3RhbE91dCArPSBCaWdJbnQob3V0cHV0LmFtb3VudCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmVlID0gKHRvdGFsSW4gLSB0b3RhbE91dCkudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IG91dHB1dHMgPSB0aGlzLl90eERhdGEub3V0cHV0cy5tYXAoKG8pID0+ICh7XG4gICAgICBhZGRyZXNzOiBvLmFkZHJlc3MsXG4gICAgICBhbW91bnQ6IG8uYW1vdW50LFxuICAgIH0pKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5fdHhEYXRhLmlkIHx8ICcnLFxuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlNlbmQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiB0b3RhbE91dC50b1N0cmluZygpLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuX3R4RGF0YS5mZWUgfHwgZmVlIH0sXG4gICAgICBpbnB1dHM6IHRoaXMuX3R4RGF0YS5pbnB1dHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdGhlIHRyYW5zYWN0aW9uIHRvIGEgSlNPTiBzdHJpbmcgKGJyb2FkY2FzdCBmb3JtYXQpLlxuICAgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5fdHhEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdHJhbnNhY3Rpb24gdG8gaGV4IChKU09OLWVuY29kZWQgdGhlbiBoZXgtZW5jb2RlZCkuXG4gICAqL1xuICB0b0hleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLnRvQnJvYWRjYXN0Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJhbnNhY3Rpb24gZGF0YSBhcyBhIHBsYWluIG9iamVjdC5cbiAgICovXG4gIHRvSnNvbigpOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fdHhEYXRhIH07XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgZnJvbSBoZXguXG4gICAqL1xuICBzdGF0aWMgZnJvbUhleChjb2luOiBzdHJpbmcsIGhleDogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29pbiwganNvbik7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgZnJvbSBKU09OIHN0cmluZyBvciBvYmplY3QuXG4gICAqL1xuICBzdGF0aWMgZnJvbUpzb24oY29pbjogc3RyaW5nLCBkYXRhOiBzdHJpbmcgfCBLYXNwYVRyYW5zYWN0aW9uRGF0YSk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eERhdGE6IEthc3BhVHJhbnNhY3Rpb25EYXRhID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbihjb2luLCB0eERhdGEpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBzaWduYXR1cmUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90eERhdGEuaW5wdXRzLm1hcCgoaSkgPT4gaS5zaWduYXR1cmVTY3JpcHQgfHwgJycpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGNhblNpZ24oX2tleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFpRjtBQUNqRixxREFBNEM7QUFFNUMsdUNBQWtGO0FBQ2xGLDJDQUE2RDtBQUM3RCxpQ0FBOEI7QUFFOUI7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQXFCO0lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM3RSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLDZCQUFpQixDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQUc5QyxZQUFZLElBQVksRUFBRSxNQUE2QjtRQUNyRCw2RkFBNkY7UUFDN0YsOERBQThEO1FBQzlELEtBQUssQ0FBQyxFQUFFLElBQUksRUFBUyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUk7WUFDdkIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxD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Q0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixPQUFPLENBQUMsSUFBYTtRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNILE1BQU07UUFDSixPQUFPLFdBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBWSxFQUFFLElBQVU7UUFDdEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUNGO0FBM1RELGtDQTJUQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VLZXksIEJhc2VUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IEthc3BhVHJhbnNhY3Rpb25EYXRhLCBLYXNwYVV0eG9JbnB1dCwgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgY29tcHV0ZUthc3BhU2lnbmluZ0hhc2gsIGNvbXB1dGVLYXNwYUVjZHNhU2lnbmluZ0hhc2ggfSBmcm9tICcuL3NpZ2hhc2gnO1xuaW1wb3J0IHsgT1BfQ0hFQ0tTSUdfRUNEU0EsIFNJR0hBU0hfQUxMIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUHNrdCB9IGZyb20gJy4vcHNrdCc7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gYGlucHV0YCdzIHNjcmlwdFB1YmxpY0tleSBiZWxvbmdzIHRvIGEgS2FzcGEgRUNEU0EgKHYxKVxuICogYWRkcmVzcyDigJQgbGFzdCBvcGNvZGUgaXMgT3BDaGVja1NpZ0VDRFNBICgweEFCKS5cbiAqIFNjaG5vcnIgKHYwKSBzY3JpcHRzIGVuZCB3aXRoIE9wQ2hlY2tTaWcgKDB4QUMpLlxuICovXG5mdW5jdGlvbiBpc0VjZHNhSW5wdXQoaW5wdXQ6IEthc3BhVXR4b0lucHV0KTogYm9vbGVhbiB7XG4gIGlmICghaW5wdXQuc2NyaXB0UHVibGljS2V5IHx8IGlucHV0LnNjcmlwdFB1YmxpY0tleS5sZW5ndGggPCAyKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBwYXJzZUludChpbnB1dC5zY3JpcHRQdWJsaWNLZXkuc2xpY2UoLTIpLCAxNikgPT09IE9QX0NIRUNLU0lHX0VDRFNBO1xufVxuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX3R4RGF0YTogS2FzcGFUcmFuc2FjdGlvbkRhdGE7XG5cbiAgY29uc3RydWN0b3IoY29pbjogc3RyaW5nLCB0eERhdGE/OiBLYXNwYVRyYW5zYWN0aW9uRGF0YSkge1xuICAgIC8vIEJhc2VUcmFuc2FjdGlvbiBleHBlY3RzIGEgZnVsbCBzdGF0aWNzIENvaW5Db25maWc7IHdlIG9ubHkgaGF2ZSB0aGUgY29pbiBuYW1lIHN0cmluZyBoZXJlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgc3VwZXIoeyBjb2luIH0gYXMgYW55KTtcbiAgICB0aGlzLl90eERhdGEgPSB0eERhdGEgfHwge1xuICAgICAgdmVyc2lvbjogMCxcbiAgICAgIGlucHV0czogW10sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eERhdGEuaWQgfHwgJyc7XG4gIH1cblxuICBnZXQgdHhEYXRhKCk6IEthc3BhVHJhbnNhY3Rpb25EYXRhIHtcbiAgICByZXR1cm4gdGhpcy5fdHhEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdHJhbnNhY3Rpb24gZmVlIGluIHNvbXBpLlxuICAgKiBJZiBmZWUgd2FzIGV4cGxpY2l0bHkgc2V0LCByZXR1cm5zIHRoYXQuIE90aGVyd2lzZSBjb21wdXRlcyBmcm9tIGlucHV0cyAtIG91dHB1dHMuXG4gICAqL1xuICBnZXQgZmVlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuX3R4RGF0YS5mZWUpIHtcbiAgICAgIHJldHVybiB0aGlzLl90eERhdGEuZmVlO1xuICAgIH1cbiAgICBsZXQgdG90YWxJbiA9IEJpZ0ludCgwKTtcbiAgICBsZXQgdG90YWxPdXQgPSBCaWdJbnQoMCk7XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl90eERhdGEuaW5wdXRzKSB7XG4gICAgICB0b3RhbEluICs9IEJpZ0ludChpbnB1dC5hbW91bnQpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiB0aGlzLl90eERhdGEub3V0cHV0cykge1xuICAgICAgdG90YWxPdXQgKz0gQmlnSW50KG91dHB1dC5hbW91bnQpO1xuICAgIH1cbiAgICByZXR1cm4gKHRvdGFsSW4gLSB0b3RhbE91dCkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG9uZSBzaWdoYXNoIEJ1ZmZlciBwZXIgaW5wdXQg4oCUIHRoZSBzZXQgb2YgbWVzc2FnZXMgdGhhdCBtdXN0IGJlXG4gICAqIHNpZ25lZCBmb3IgYSBtdWx0aS1pbnB1dCBNUEN2MiBjZXJlbW9ueS5cbiAgICpcbiAgICogS2FzcGEgdXNlcyBhIEJJUC0xNDMtbGlrZSBzaWdoYXNoIHNjaGVtZSAoQmxha2UyYikgd2hlcmUgZWFjaCBpbnB1dCBjb21taXRzXG4gICAqIHRvIGl0cyBvd24gaW5kZXgsIHNvIGlucHV0W2ldIGhhcyBhIGRpc3RpbmN0IGhhc2ggdGhhdCBjYW5ub3QgYmUgcmUtdXNlZCBmb3JcbiAgICogaW5wdXRbal0uIEEgY29ycmVjdCBtdWx0aS1pbnB1dCBNUEN2MiBmbG93IHJ1bnMgb25lIERLTFMgc2Vzc2lvbiBwZXIgaW5wdXRcbiAgICogaW4gcGFyYWxsZWwgYW5kIGFwcGxpZXMgZWFjaCByZXN1bHRpbmcgc2lnbmF0dXJlIHZpYSBhZGRTaWduYXR1cmVGb3JJbnB1dCgpLlxuICAgKlxuICAgKiBUaGUgaGFzaCB0eXBlIGlzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgcGVyIGlucHV0OlxuICAgKiAgIC0gU2Nobm9yciAoc2NyaXB0UHVibGljS2V5IGVuZHMgMHhBQyk6IGtleWVkIEJsYWtlMmItMjU2XG4gICAqICAgLSBFQ0RTQSAgIChzY3JpcHRQdWJsaWNLZXkgZW5kcyAweEFCKToga2V5ZWQgQmxha2UyYi0yNTYgKyBTSEEyNTYgZG91YmxlLWhhc2hcbiAgICovXG4gIGdldCBzaWduYWJsZVBheWxvYWRzKCk6IEJ1ZmZlcltdIHtcbiAgICBpZiAodGhpcy5fdHhEYXRhLmlucHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXB1dGUgc2lnbmFibGVQYXlsb2Fkczogbm8gaW5wdXRzJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl90eERhdGEuaW5wdXRzLm1hcCgoaW5wdXQsIGkpID0+XG4gICAgICBpc0VjZHNhSW5wdXQoaW5wdXQpXG4gICAgICAgID8gY29tcHV0ZUthc3BhRWNkc2FTaWduaW5nSGFzaCh0aGlzLl90eERhdGEsIGksIFNJR0hBU0hfQUxMKVxuICAgICAgICA6IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaSwgU0lHSEFTSF9BTEwpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhIHNpZ25hdHVyZSB0byBhIHNpbmdsZSBzcGVjaWZpYyBpbnB1dC5cbiAgICpcbiAgICogVXNlZCBpbiB0aGUgbXVsdGktaW5wdXQgTVBDdjIgZmxvdyB3aGVyZSBlYWNoIGlucHV0IGlzIHNpZ25lZCBieSBhblxuICAgKiBpbmRlcGVuZGVudCBES0xTIHNlc3Npb24gdGhhdCBjb21taXRzIHRvIHRoYXQgaW5wdXQncyBzaWdoYXNoLiBDYWxsIHRoaXNcbiAgICogb25jZSBwZXIgaW5wdXQgd2l0aCB0aGUgc2lnbmF0dXJlIHByb2R1Y2VkIGZvciB0aGF0IGlucHV0J3Mgc2lnbmFibGVQYXlsb2Fkc1tpXS5cbiAgICpcbiAgICogQHBhcmFtIGluZGV4ICAgICAgMC1iYXNlZCBpbmRleCBvZiB0aGUgaW5wdXQgdG8gc2lnblxuICAgKiBAcGFyYW0gcHVibGljS2V5ICBjb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJsaWMga2V5ICgzMyBieXRlcyBoZXgpIOKAlCBub3QgdXNlZCBpblxuICAgKiAgICAgICAgICAgICAgICAgICB0aGUgc2NyaXB0U2lnIGJ5dGVzIGJ1dCBrZXB0IGZvciBzeW1tZXRyeSB3aXRoIGFkZFNpZ25hdHVyZVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlICA2NC1ieXRlIHNpZ25hdHVyZSBidWZmZXIgZm9yIGlucHV0W2luZGV4XVxuICAgKiBAcGFyYW0gc2lnSGFzaFR5cGUgU2lnSGFzaCB0eXBlIChkZWZhdWx0OiBTSUdIQVNIX0FMTClcbiAgICovXG4gIGFkZFNpZ25hdHVyZUZvcklucHV0KGluZGV4OiBudW1iZXIsIHB1YmxpY0tleTogc3RyaW5nLCBzaWduYXR1cmU6IEJ1ZmZlciwgc2lnSGFzaFR5cGU6IG51bWJlciA9IFNJR0hBU0hfQUxMKTogdm9pZCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLl90eERhdGEuaW5wdXRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnB1dCBpbmRleCAke2luZGV4fSBpcyBvdXQgb2YgcmFuZ2UgKHR4IGhhcyAke3RoaXMuX3R4RGF0YS5pbnB1dHMubGVuZ3RofSBpbnB1dHMpYCk7XG4gICAgfVxuICAgIGlmIChzaWduYXR1cmUubGVuZ3RoICE9PSA2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCA2NC1ieXRlIHNpZ25hdHVyZSwgZ290ICR7c2lnbmF0dXJlLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgLy8gS2FzcGEgc2NyaXB0IGVuZ2luZSByZXF1aXJlcyBwdXNoLW9ubHkgc2lnbmF0dXJlU2NyaXB0cy5cbiAgICAvLyAweDQxID0gT1BfREFUQV82NTogcHVzaCB0aGUgbmV4dCA2NSBieXRlcyAoNjQtYnl0ZSBzaWcgKyAxLWJ5dGUgc2lnaGFzaCB0eXBlKSBvbnRvIHRoZSBzdGFjay5cbiAgICBjb25zdCBzaWdXaXRoVHlwZSA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFsweDQxXSksIHNpZ25hdHVyZSwgQnVmZmVyLmZyb20oW3NpZ0hhc2hUeXBlXSldKTtcbiAgICB0aGlzLl90eERhdGEuaW5wdXRzW2luZGV4XS5zaWduYXR1cmVTY3JpcHQgPSBzaWdXaXRoVHlwZS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhbGwgaW5wdXRzIHdpdGggdGhlIGdpdmVuIHByaXZhdGUga2V5LlxuICAgKlxuICAgKiBBdXRvbWF0aWNhbGx5IHNlbGVjdHMgdGhlIHNpZ25hdHVyZSBhbGdvcml0aG0gcGVyIGlucHV0IGJ5IGluc3BlY3RpbmcgZWFjaFxuICAgKiBpbnB1dCdzIHNjcmlwdFB1YmxpY0tleTpcbiAgICogICAtIFNjaG5vcnIgKGxhc3Qgb3Bjb2RlIDB4QUMsIHYwIGFkZHJlc3MpOiBCSVAtMzQwIFNjaG5vcnIgKyBCbGFrZTJiIHNpZ2hhc2hcbiAgICogICAtIEVDRFNBICAgKGxhc3Qgb3Bjb2RlIDB4QUIsIHYxIGFkZHJlc3MpOiBzZWNwMjU2azEgRUNEU0EgKyBCbGFrZTJiK1NIQTI1NiBzaWdoYXNoXG4gICAqXG4gICAqIEEgc2luZ2xlIHRyYW5zYWN0aW9uIG1heSBtaXggYm90aCBhZGRyZXNzIHR5cGVzIGFuZCBlYWNoIGlucHV0IHdpbGwgYmVcbiAgICogc2lnbmVkIGNvcnJlY3RseSB3aXRob3V0IGFueSBleHRyYSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gcHJpdmF0ZUtleSAgMzItYnl0ZSBwcml2YXRlIGtleSBidWZmZXJcbiAgICogQHBhcmFtIHNpZ0hhc2hUeXBlIFNpZ0hhc2ggdHlwZSAoZGVmYXVsdDogU0lHSEFTSF9BTEwgPSAweDAxKVxuICAgKi9cbiAgc2lnbihwcml2YXRlS2V5OiBCdWZmZXIsIHNpZ0hhc2hUeXBlOiBudW1iZXIgPSBTSUdIQVNIX0FMTCk6IHZvaWQge1xuICAgIGlmIChwcml2YXRlS2V5Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgMzItYnl0ZSBwcml2YXRlIGtleSwgZ290ICR7cHJpdmF0ZUtleS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHhEYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLl90eERhdGEuaW5wdXRzW2ldO1xuICAgICAgbGV0IHNpZzogVWludDhBcnJheTtcbiAgICAgIGxldCBzaWdIYXNoOiBCdWZmZXI7XG5cbiAgICAgIGlmIChpc0VjZHNhSW5wdXQoaW5wdXQpKSB7XG4gICAgICAgIC8vIHYxIEVDRFNBIGFkZHJlc3M6IGRvdWJsZS1oYXNoICsgY29tcGFjdCBzZWNwMjU2azEgRUNEU0Egc2lnbmF0dXJlXG4gICAgICAgIHNpZ0hhc2ggPSBjb21wdXRlS2FzcGFFY2RzYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaSwgc2lnSGFzaFR5cGUpO1xuICAgICAgICBzaWcgPSBlY2Muc2lnbihzaWdIYXNoLCBwcml2YXRlS2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHYwIFNjaG5vcnIgYWRkcmVzcyAoZGVmYXVsdCk6IEJsYWtlMmIgc2lnaGFzaCArIEJJUC0zNDAgU2Nobm9yciBzaWduYXR1cmVcbiAgICAgICAgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaSwgc2lnSGFzaFR5cGUpO1xuICAgICAgICBzaWcgPSBlY2Muc2lnblNjaG5vcnIoc2lnSGFzaCwgcHJpdmF0ZUtleSk7XG4gICAgICB9XG4gICAgICAvLyBLYXNwYSByZXF1aXJlcyBwdXNoLW9ubHkgc2lnbmF0dXJlU2NyaXB0czogMHg0MSAoT1BfREFUQV82NSkgKyA2NC1ieXRlIHNpZyArIDEtYnl0ZSBzaWdoYXNoIHR5cGVcbiAgICAgIGNvbnN0IHNpZ1dpdGhUeXBlID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oWzB4NDFdKSwgQnVmZmVyLmZyb20oc2lnKSwgQnVmZmVyLmZyb20oW3NpZ0hhc2hUeXBlXSldKTtcbiAgICAgIHRoaXMuX3R4RGF0YS5pbnB1dHNbaV0uc2lnbmF0dXJlU2NyaXB0ID0gc2lnV2l0aFR5cGUudG9TdHJpbmcoJ2hleCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCB0aGUgc2lnbmF0dXJlIG9uIGEgc3BlY2lmaWMgaW5wdXQgaXMgdmFsaWQuXG4gICAqXG4gICAqIEF1dG9tYXRpY2FsbHkgc2VsZWN0cyB0aGUgdmVyaWZpY2F0aW9uIGFsZ29yaXRobSBiYXNlZCBvbiB0aGUgaW5wdXQnc1xuICAgKiBzY3JpcHRQdWJsaWNLZXkgKEVDRFNBIGZvciAweEFCLCBTY2hub3JyIGZvciAweEFDKSwgbWF0Y2hpbmcgYHNpZ24oKWAuXG4gICAqXG4gICAqIEBwYXJhbSBwdWJsaWNLZXkgIDMzLWJ5dGUgY29tcHJlc3NlZCBwdWJsaWMga2V5IChvciAzMi1ieXRlIHgtb25seSBmb3IgU2Nobm9ycilcbiAgICogQHBhcmFtIGlucHV0SW5kZXggSW5kZXggb2YgdGhlIGlucHV0IHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gc2lnSGFzaFR5cGUgU2lnSGFzaCB0eXBlIHVzZWQgd2hlbiBzaWduaW5nXG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmUocHVibGljS2V5OiBCdWZmZXIsIGlucHV0SW5kZXg6IG51bWJlciwgc2lnSGFzaFR5cGU6IG51bWJlciA9IFNJR0hBU0hfQUxMKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLl90eERhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGlmICghaW5wdXQ/LnNpZ25hdHVyZVNjcmlwdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzaWdCeXRlcyA9IEJ1ZmZlci5mcm9tKGlucHV0LnNpZ25hdHVyZVNjcmlwdCwgJ2hleCcpO1xuICAgIC8vIHNpZ25hdHVyZVNjcmlwdCBsYXlvdXQ6IDB4NDEgKE9QX0RBVEFfNjUpICsgNjQtYnl0ZSBzaWcgKyAxLWJ5dGUgc2lnaGFzaCB0eXBlID0gNjYgYnl0ZXNcbiAgICBpZiAoc2lnQnl0ZXMubGVuZ3RoIDwgNjYpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2lnID0gc2lnQnl0ZXMuc2xpY2UoMSwgNjUpOyAvLyBza2lwIHRoZSAweDQxIHB1c2ggb3Bjb2RlXG5cbiAgICBpZiAoaXNFY2RzYUlucHV0KGlucHV0KSkge1xuICAgICAgY29uc3Qgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYUVjZHNhU2lnbmluZ0hhc2godGhpcy5fdHhEYXRhLCBpbnB1dEluZGV4LCBzaWdIYXNoVHlwZSk7XG4gICAgICAvLyBFQ0RTQSB2ZXJpZmljYXRpb24gcmVxdWlyZXMgMzMtYnl0ZSBjb21wcmVzc2VkIHB1YmxpYyBrZXlcbiAgICAgIGNvbnN0IGNvbXByZXNzZWRQdWIgPSBwdWJsaWNLZXkubGVuZ3RoID09PSAzMyA/IHB1YmxpY0tleSA6IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFsweDAyXSksIHB1YmxpY0tleV0pO1xuICAgICAgcmV0dXJuIGVjYy52ZXJpZnkoc2lnSGFzaCwgY29tcHJlc3NlZFB1Yiwgc2lnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaW5wdXRJbmRleCwgc2lnSGFzaFR5cGUpO1xuICAgICAgLy8gU2Nobm9yciB2ZXJpZmljYXRpb24gdXNlcyB4LW9ubHkgKDMyLWJ5dGUpIHB1YmxpYyBrZXlcbiAgICAgIGNvbnN0IHhPbmx5UHViID0gcHVibGljS2V5Lmxlbmd0aCA9PT0gMzMgPyBwdWJsaWNLZXkuc2xpY2UoMSkgOiBwdWJsaWNLZXk7XG4gICAgICByZXR1cm4gZWNjLnZlcmlmeVNjaG5vcnIoc2lnSGFzaCwgeE9ubHlQdWIsIHNpZyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4gdGhlIHRyYW5zYWN0aW9uIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybWF0LlxuICAgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGxldCB0b3RhbEluID0gQmlnSW50KDApO1xuICAgIGxldCB0b3RhbE91dCA9IEJpZ0ludCgwKTtcblxuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fdHhEYXRhLmlucHV0cykge1xuICAgICAgdG90YWxJbiArPSBCaWdJbnQoaW5wdXQuYW1vdW50KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdGhpcy5fdHhEYXRhLm91dHB1dHMpIHtcbiAgICAgIHRvdGFsT3V0ICs9IEJpZ0ludChvdXRwdXQuYW1vdW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBmZWUgPSAodG90YWxJbiAtIHRvdGFsT3V0KS50b1N0cmluZygpO1xuXG4gICAgY29uc3Qgb3V0cHV0cyA9IHRoaXMuX3R4RGF0YS5vdXRwdXRzLm1hcCgobykgPT4gKHtcbiAgICAgIGFkZHJlc3M6IG8uYWRkcmVzcyxcbiAgICAgIGFtb3VudDogby5hbW91bnQsXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLl90eERhdGEuaWQgfHwgJycsXG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuU2VuZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQ6IHRvdGFsT3V0LnRvU3RyaW5nKCksXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5fdHhEYXRhLmZlZSB8fCBmZWUgfSxcbiAgICAgIGlucHV0czogdGhpcy5fdHhEYXRhLmlucHV0cyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gdG8gdGhlIEthc3BhIFJFU1QgQVBJIEpTT04gc3RyaW5nLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSB3aXJlIGZvcm1hdCBhY2NlcHRlZCBieSB0aGUgS2FzcGEgbm9kZSBSRVNUIEFQSSBmb3IgYnJvYWRjYXN0aW5nLlxuICAgKiBVbnNpZ25lZCB0cmFuc2FjdGlvbnMgKHNpZ25hdHVyZVNjcmlwdCA9IFwiXCIpIHVzZSB0aGlzIHNhbWUgc3RydWN0dXJlOyBvbmNlXG4gICAqIGFsbCBpbnB1dHMgYXJlIHNpZ25lZCB0aGUgc2FtZSBmb3JtYXQgaXMgc3VibWl0dGVkIHRvIHRoZSBub2RlLlxuICAgKlxuICAgKiBOb3RlOiBpbnB1dHMgaW4gdGhpcyBmb3JtYXQgY2Fycnkgb25seSBgcHJldmlvdXNPdXRwb2ludGAsIGBzaWduYXR1cmVTY3JpcHRgLFxuICAgKiBgc2VxdWVuY2VgLCBhbmQgYHNpZ09wQ291bnRgLiBUaGUgYGFtb3VudGAgYW5kIGBzY3JpcHRQdWJsaWNLZXlgIGZpZWxkcyBuZWVkZWRcbiAgICogZm9yIHNpZ2hhc2ggY29tcHV0YXRpb24gYXJlIE5PVCBwcmVzZW50IGhlcmUg4oCUIHRoZXkgbGl2ZSBpbiBgdG9Kc29uKClgLlxuICAgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgdmVyc2lvbjogdGhpcy5fdHhEYXRhLnZlcnNpb24sXG4gICAgICBpbnB1dHM6IHRoaXMuX3R4RGF0YS5pbnB1dHMubWFwKChpbnB1dCkgPT4gKHtcbiAgICAgICAgcHJldmlvdXNPdXRwb2ludDoge1xuICAgICAgICAgIHRyYW5zYWN0aW9uSWQ6IGlucHV0LnRyYW5zYWN0aW9uSWQsXG4gICAgICAgICAgaW5kZXg6IGlucHV0LnRyYW5zYWN0aW9uSW5kZXgsXG4gICAgICAgIH0sXG4gICAgICAgIHNpZ25hdHVyZVNjcmlwdDogaW5wdXQuc2lnbmF0dXJlU2NyaXB0IHx8ICcnLFxuICAgICAgICBzZXF1ZW5jZTogTnVtYmVyKGlucHV0LnNlcXVlbmNlID8/IDApLFxuICAgICAgICBzaWdPcENvdW50OiBpbnB1dC5zaWdPcENvdW50ID8/IDEsXG4gICAgICB9KSksXG4gICAgICBvdXRwdXRzOiB0aGlzLl90eERhdGEub3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgYW1vdW50OiBOdW1iZXIob3V0cHV0LmFtb3VudCksXG4gICAgICAgIHNjcmlwdFB1YmxpY0tleToge1xuICAgICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgICAgc2NyaXB0UHVibGljS2V5OiBvdXRwdXQuc2NyaXB0UHVibGljS2V5IHx8ICcnLFxuICAgICAgICB9LFxuICAgICAgfSkpLFxuICAgICAgbG9ja1RpbWU6IE51bWJlcih0aGlzLl90eERhdGEubG9ja1RpbWUgPz8gMCksXG4gICAgICBzdWJuZXR3b3JrSWQ6IHRoaXMuX3R4RGF0YS5zdWJuZXR3b3JrSWQgPz8gJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgZ2FzOiAwLFxuICAgICAgcGF5bG9hZDogdGhpcy5fdHhEYXRhLnBheWxvYWQgPz8gJycsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRyYW5zYWN0aW9uIHRvIGhleCB1c2luZyB0aGUgaW50ZXJuYWwgYEthc3BhVHJhbnNhY3Rpb25EYXRhYCBmb3JtYXQuXG4gICAqXG4gICAqIFRoaXMgaGV4IGlzIHVzZWQgZm9yIFNESy1pbnRlcm5hbCByb3VuZC10cmlwcyAoYnVpbGRlciBzZXJpYWxpc2F0aW9uIC8gZGVzZXJpYWxpc2F0aW9uKVxuICAgKiBiZWNhdXNlIHRoZSBpbnRlcm5hbCBmb3JtYXQgcHJlc2VydmVzIGBhbW91bnRgIGFuZCBgc2NyaXB0UHVibGljS2V5YCBvbiBpbnB1dHMsXG4gICAqIHdoaWNoIGFyZSByZXF1aXJlZCBmb3Igc2lnaGFzaCBjb21wdXRhdGlvbiBidXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBSRVNUIEFQSSBmb3JtYXQuXG4gICAqXG4gICAqIFVzZSBgQnVmZmVyLmZyb20odHgudG9Ccm9hZGNhc3RGb3JtYXQoKSkudG9TdHJpbmcoJ2hleCcpYCB3aGVuIHlvdSBuZWVkIHRoZSBoZXhcbiAgICogcmVwcmVzZW50YXRpb24gb2YgdGhlIGJyb2FkY2FzdCAvIEhTTSB3aXJlIGZvcm1hdC5cbiAgICovXG4gIHRvSGV4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHRoaXMuX3R4RGF0YSkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJhbnNhY3Rpb24gZGF0YSBhcyBhIHBsYWluIG9iamVjdC5cbiAgICovXG4gIHRvSnNvbigpOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fdHhEYXRhIH07XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgZnJvbSBoZXguXG4gICAqL1xuICBzdGF0aWMgZnJvbUhleChjb2luOiBzdHJpbmcsIGhleDogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29pbiwganNvbik7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgZnJvbSBKU09OIHN0cmluZyBvciBvYmplY3QuXG4gICAqL1xuICBzdGF0aWMgZnJvbUpzb24oY29pbjogc3RyaW5nLCBkYXRhOiBzdHJpbmcgfCBLYXNwYVRyYW5zYWN0aW9uRGF0YSk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eERhdGE6IEthc3BhVHJhbnNhY3Rpb25EYXRhID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbihjb2luLCB0eERhdGEpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBzaWduYXR1cmUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90eERhdGEuaW5wdXRzLm1hcCgoaSkgPT4gaS5zaWduYXR1cmVTY3JpcHQgfHwgJycpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGNhblNpZ24oX2tleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhpcyB0cmFuc2FjdGlvbiB0byBhIFBTS1QgaW4gU0lHTkVSIHJvbGUuXG4gICAqXG4gICAqIFRoZSBQU0tUIGlzIHBvcHVsYXRlZCB3aXRoIFVUWE8gZGF0YSBmcm9tIGVhY2ggaW5wdXQgc28gdGhhdCBzaWdoYXNoXG4gICAqIGNvbXB1dGF0aW9uIGlzIHBvc3NpYmxlIGltbWVkaWF0ZWx5LiBBbnkgZXhpc3RpbmcgYHNpZ25hdHVyZVNjcmlwdGAgb24gYW5cbiAgICogaW5wdXQgaXMgY2FycmllZCBpbnRvIHRoZSBQU0tUIGFzIGBmaW5hbFNjcmlwdFNpZ2AuXG4gICAqXG4gICAqIFR5cGljYWwgdXNlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBwc2t0ID0gdHgudG9Qc2t0KClcbiAgICogICAuc2lnbihwcml2YXRlS2V5KVxuICAgKiAgIC50b0ZpbmFsaXplcigpXG4gICAqICAgLmZpbmFsaXplKClcbiAgICogICAudG9FeHRyYWN0b3IoKTtcbiAgICogY29uc3QgYnJvYWRjYXN0SnNvbiA9IHBza3QuZXh0cmFjdCgpO1xuICAgKiBgYGBcbiAgICovXG4gIHRvUHNrdCgpOiBQc2t0IHtcbiAgICByZXR1cm4gUHNrdC5mcm9tVHhEYXRhKHRoaXMuX3R4RGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25zdHJ1Y3QgYSBUcmFuc2FjdGlvbiBmcm9tIGEgUFNLVCAoYW55IHJvbGUpLlxuICAgKlxuICAgKiBgZmluYWxTY3JpcHRTaWdgIGZyb20gZWFjaCBQU0tUIGlucHV0IGlzIG1hcHBlZCB0byBgc2lnbmF0dXJlU2NyaXB0YCBzb1xuICAgKiB0aGF0IHRoZSByZXN1bHRpbmcgdHJhbnNhY3Rpb24gaXMgc2lnbmVkIGlmIHRoZSBQU0tUIGhhcyBiZWVuIGZpbmFsaXNlZC5cbiAgICpcbiAgICogQHBhcmFtIGNvaW4gIENvaW4gbmFtZSBzdHJpbmcgKGUuZy4gJ2thc3BhJywgJ3RrYXNwYScpXG4gICAqIEBwYXJhbSBwc2t0ICBBIFBza3QgaW5zdGFuY2UgKHR5cGljYWxseSBhdCBGSU5BTElaRVIgb3IgRVhUUkFDVE9SIHJvbGUpXG4gICAqL1xuICBzdGF0aWMgZnJvbVBza3QoY29pbjogc3RyaW5nLCBwc2t0OiBQc2t0KTogVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29pbiwgcHNrdC50b1R4RGF0YSgpKTtcbiAgfVxufVxuIl19
@@ -1,19 +1,15 @@
1
- import { BaseTransactionBuilder, BaseTransaction, BaseKey, PublicKey as BasePublicKey } from '@bitgo-beta/sdk-core';
1
+ import { BaseTransactionBuilder, BaseTransaction, BaseKey } from '@bitgo-beta/sdk-core';
2
2
  import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
3
3
  import BigNumber from 'bignumber.js';
4
4
  import { Transaction } from './transaction';
5
5
  import { KaspaUtxoInput, KaspaTransactionOutput } from './iface';
6
- interface KaspaSignature {
7
- publicKey: BasePublicKey;
8
- signature: Buffer;
9
- }
6
+ import { Pskt } from './pskt';
10
7
  export declare class TransactionBuilder extends BaseTransactionBuilder {
11
8
  protected _transaction: Transaction;
12
9
  protected _inputs: KaspaUtxoInput[];
13
10
  protected _outputs: KaspaTransactionOutput[];
14
11
  protected _fee: string;
15
12
  protected _fromAddress: string;
16
- protected _signatures: KaspaSignature[];
17
13
  constructor(coinConfig: Readonly<CoinConfig>);
18
14
  /** @inheritDoc */
19
15
  protected get transaction(): BaseTransaction;
@@ -39,16 +35,6 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
39
35
  * Add multiple UTXO inputs.
40
36
  */
41
37
  addInputs(utxos: KaspaUtxoInput[]): this;
42
- /**
43
- * Add an externally-produced signature (from TSS/MPC signing) to the transaction.
44
- * The signature will be applied to all inputs during build().
45
- *
46
- * This follows the same pattern as ADA's TransactionBuilder.addSignature().
47
- *
48
- * @param publicKey The compressed secp256k1 public key that produced the signature
49
- * @param signature The 64-byte Schnorr signature buffer
50
- */
51
- addSignature(publicKey: BasePublicKey, signature: Buffer): void;
52
38
  /** @inheritDoc */
53
39
  protected fromImplementation(rawTransaction: string): Transaction;
54
40
  /** @inheritDoc */
@@ -69,6 +55,26 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
69
55
  validateRawTransaction(rawTransaction: string): void;
70
56
  /** @inheritDoc */
71
57
  validateValue(value: BigNumber): void;
58
+ /**
59
+ * Build the transaction and return it as an unsigned PSKT in UPDATER role.
60
+ *
61
+ * The PSKT has all inputs and outputs populated with UTXO data but no
62
+ * signatures. It is ready to be handed to a signer (HSM, hardware wallet,
63
+ * or MPCv2 session) via `pskt.toSigner().sign(key)` or
64
+ * `pskt.toSigner().addSignature(...)`.
65
+ *
66
+ * Example:
67
+ * ```ts
68
+ * const pskt = await builder.toPskt();
69
+ * const broadcastJson = pskt
70
+ * .toSigner()
71
+ * .sign(privateKey)
72
+ * .toFinalizer()
73
+ * .finalize()
74
+ * .toExtractor()
75
+ * .extract();
76
+ * ```
77
+ */
78
+ toPskt(): Promise<Pskt>;
72
79
  }
73
- export {};
74
80
  //# sourceMappingURL=transactionBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,OAAO,EACP,SAAS,IAAI,aAAa,EAE3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAwB,cAAc,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAKvF,UAAU,cAAc;IACtB,SAAS,EAAE,aAAa,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,CAAM;IACzC,SAAS,CAAC,QAAQ,EAAE,sBAAsB,EAAE,CAAM;IAClD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAe;IACrC,SAAS,CAAC,YAAY,SAAM;IAC5B,SAAS,CAAC,WAAW,EAAE,cAAc,EAAE,CAAM;gBAEjC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK5C,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,eAAe,CAE3C;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,EAAE,EAAE,eAAe,EAE5C;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ7B;;OAEG;IACH,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQzC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAQpC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAKxC;;;;;;;;OAQG;IACH,YAAY,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IASjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IAqB/D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,eAAe;IAU/D,kBAAkB;IAClB,mBAAmB,CAAC,YAAY,CAAC,EAAE,eAAe,GAAG,IAAI;IASzD,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIvC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMnD,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAQpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAKtC"}
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,OAAO,EAAgB,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAwB,cAAc,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAIvF,OAAO,EAAE,IAAI,EAAyB,MAAM,QAAQ,CAAC;AAErD,qBAAa,kBAAmB,SAAQ,sBAAsB;IAC5D,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,CAAM;IACzC,SAAS,CAAC,QAAQ,EAAE,sBAAsB,EAAE,CAAM;IAClD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAe;IACrC,SAAS,CAAC,YAAY,SAAM;gBAEhB,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK5C,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,eAAe,CAE3C;IAED,kBAAkB;IAClB,SAAS,KAAK,WAAW,CAAC,EAAE,EAAE,eAAe,EAE5C;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ7B;;OAEG;IACH,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQzC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKtB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAQpC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAKxC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IASjE,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,eAAe,CAAC;IAgB/D,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,eAAe;IAU/D,kBAAkB;IAClB,mBAAmB,CAAC,YAAY,CAAC,EAAE,eAAe,GAAG,IAAI;IASzD,kBAAkB;IAClB,WAAW,CAAC,GAAG,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAIvC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAMnD,kBAAkB;IAClB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAQpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC;;;;;;;;;;;;;;;;;;;OAmBG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CA8B9B"}