@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
@@ -6,6 +6,7 @@ const transaction_1 = require("./transaction");
6
6
  const utils_1 = require("./utils");
7
7
  const keyPair_1 = require("./keyPair");
8
8
  const constants_1 = require("./constants");
9
+ const pskt_1 = require("./pskt");
9
10
  class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
10
11
  constructor(coinConfig) {
11
12
  super(coinConfig);
@@ -13,7 +14,6 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
13
14
  this._outputs = [];
14
15
  this._fee = constants_1.DEFAULT_FEE;
15
16
  this._fromAddress = '';
16
- this._signatures = [];
17
17
  this._transaction = new transaction_1.Transaction(coinConfig.name);
18
18
  }
19
19
  /** @inheritDoc */
@@ -41,7 +41,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
41
41
  if (!(0, utils_1.isValidKaspaAddress)(address)) {
42
42
  throw new Error(`Invalid Kaspa recipient address: ${address}`);
43
43
  }
44
- this._outputs.push({ address, amount });
44
+ this._outputs.push({ address, amount, scriptPublicKey: (0, utils_1.addressToScriptPublicKey)(address) });
45
45
  return this;
46
46
  }
47
47
  /**
@@ -68,21 +68,9 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
68
68
  utxos.forEach((u) => this.addInput(u));
69
69
  return this;
70
70
  }
71
- /**
72
- * Add an externally-produced signature (from TSS/MPC signing) to the transaction.
73
- * The signature will be applied to all inputs during build().
74
- *
75
- * This follows the same pattern as ADA's TransactionBuilder.addSignature().
76
- *
77
- * @param publicKey The compressed secp256k1 public key that produced the signature
78
- * @param signature The 64-byte Schnorr signature buffer
79
- */
80
- addSignature(publicKey, signature) {
81
- this._signatures.push({ publicKey, signature });
82
- }
83
71
  /** @inheritDoc */
84
72
  fromImplementation(rawTransaction) {
85
- const tx = transaction_1.Transaction.fromHex(this._coinConfig?.name || 'kaspa', rawTransaction);
73
+ const tx = transaction_1.Transaction.fromHex(this._coinConfig.name, rawTransaction);
86
74
  this._transaction = tx;
87
75
  this._inputs = tx.txData.inputs || [];
88
76
  this._outputs = tx.txData.outputs || [];
@@ -100,11 +88,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
100
88
  subnetworkId: '0000000000000000000000000000000000000000',
101
89
  payload: '',
102
90
  };
103
- this._transaction = new transaction_1.Transaction(this._coinConfig?.name || 'kaspa', txData);
104
- // Apply any externally-produced signatures (from TSS/MPC)
105
- for (const sig of this._signatures) {
106
- this._transaction.addSignature(sig.publicKey.pub, sig.signature);
107
- }
91
+ this._transaction = new transaction_1.Transaction(this._coinConfig.name, txData);
108
92
  return this._transaction;
109
93
  }
110
94
  /** @inheritDoc */
@@ -139,7 +123,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
139
123
  /** @inheritDoc */
140
124
  validateRawTransaction(rawTransaction) {
141
125
  try {
142
- transaction_1.Transaction.fromHex(this._coinConfig?.name || 'kaspa', rawTransaction);
126
+ transaction_1.Transaction.fromHex(this._coinConfig.name, rawTransaction);
143
127
  }
144
128
  catch {
145
129
  throw new Error('Invalid raw Kaspa transaction');
@@ -151,6 +135,53 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
151
135
  throw new Error('Transaction value cannot be negative');
152
136
  }
153
137
  }
138
+ /**
139
+ * Build the transaction and return it as an unsigned PSKT in UPDATER role.
140
+ *
141
+ * The PSKT has all inputs and outputs populated with UTXO data but no
142
+ * signatures. It is ready to be handed to a signer (HSM, hardware wallet,
143
+ * or MPCv2 session) via `pskt.toSigner().sign(key)` or
144
+ * `pskt.toSigner().addSignature(...)`.
145
+ *
146
+ * Example:
147
+ * ```ts
148
+ * const pskt = await builder.toPskt();
149
+ * const broadcastJson = pskt
150
+ * .toSigner()
151
+ * .sign(privateKey)
152
+ * .toFinalizer()
153
+ * .finalize()
154
+ * .toExtractor()
155
+ * .extract();
156
+ * ```
157
+ */
158
+ async toPskt() {
159
+ this.validateTransaction();
160
+ const psktInputs = this._inputs.map((inp) => ({
161
+ previousOutpoint: { transactionId: inp.transactionId, index: inp.transactionIndex },
162
+ utxoEntry: { amount: inp.amount, scriptPublicKey: inp.scriptPublicKey },
163
+ sequence: inp.sequence,
164
+ sigOpCount: inp.sigOpCount ?? 1,
165
+ partialSigs: {},
166
+ sighashType: constants_1.SIGHASH_ALL,
167
+ bip32Derivations: {},
168
+ proprietaries: {},
169
+ }));
170
+ const psktOutputs = this._outputs.map((out) => ({
171
+ amount: out.amount,
172
+ scriptPublicKey: { version: 0, scriptPublicKey: out.scriptPublicKey || (0, utils_1.addressToScriptPublicKey)(out.address) },
173
+ bip32Derivations: {},
174
+ proprietaries: {},
175
+ }));
176
+ const pskt = pskt_1.Pskt.creator(constants_1.TX_VERSION);
177
+ for (const inp of psktInputs) {
178
+ pskt.input(inp);
179
+ }
180
+ for (const out of psktOutputs) {
181
+ pskt.output(out);
182
+ }
183
+ return pskt.toUpdater();
184
+ }
154
185
  }
155
186
  exports.TransactionBuilder = TransactionBuilder;
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBTThCO0FBRzlCLCtDQUE0QztBQUU1QyxtQ0FBOEM7QUFDOUMsdUNBQW9DO0FBQ3BDLDJDQUFzRDtBQU90RCxNQUFhLGtCQUFtQixTQUFRLGlDQUFzQjtJQVE1RCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQVBWLFlBQU8sR0FBcUIsRUFBRSxDQUFDO1FBQy9CLGFBQVEsR0FBNkIsRUFBRSxDQUFDO1FBQ3hDLFNBQUksR0FBVyx1QkFBVyxDQUFDO1FBQzNCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGdCQUFXLEdBQXFCLEVBQUUsQ0FBQztRQUkzQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkseUJBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXLENBQUMsRUFBbUI7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFpQixDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxPQUFlO1FBQ3BCLElBQUksQ0FBQyxJQUFBLDJCQUFtQixFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxFQUFFLENBQUMsT0FBZSxFQUFF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QUFzQixDQUFDLGNBQXNCO1FBQzNDLElBQUksQ0FBQztZQUNILHlCQUFXLENBQUMsT0FBTyxDQUFFLElBQVksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXJLRCxnREFxS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEJhc2VLZXksXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduaW5nRXJyb3IsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBLYXNwYVRyYW5zYWN0aW9uRGF0YSwgS2FzcGFVdHhvSW5wdXQsIEthc3BhVHJhbnNhY3Rpb25PdXRwdXQgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGlzVmFsaWRLYXNwYUFkZHJlc3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgREVGQVVMVF9GRUUsIFRYX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmludGVyZmFjZSBLYXNwYVNpZ25hdHVyZSB7XG4gIHB1YmxpY0tleTogQmFzZVB1YmxpY0tleTtcbiAgc2lnbmF0dXJlOiBCdWZmZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfaW5wdXRzOiBLYXNwYVV0eG9JbnB1dFtdID0gW107XG4gIHByb3RlY3RlZCBfb3V0cHV0czogS2FzcGFUcmFuc2FjdGlvbk91dHB1dFtdID0gW107XG4gIHByb3RlY3RlZCBfZmVlOiBzdHJpbmcgPSBERUZBVUxUX0ZFRTtcbiAgcHJvdGVjdGVkIF9mcm9tQWRkcmVzcyA9ICcnO1xuICBwcm90ZWN0ZWQgX3NpZ25hdHVyZXM6IEthc3BhU2lnbmF0dXJlW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5Db25maWcubmFtZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBCYXNlVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHR4OiBCYXNlVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4IGFzIFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2VuZGVyIGFkZHJlc3MuXG4gICAqL1xuICBzZW5kZXIoYWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCFpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgS2FzcGEgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLl9mcm9tQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcmVjaXBpZW50IG91dHB1dC5cbiAgICovXG4gIHRvKGFkZHJlc3M6IHN0cmluZywgYW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRLYXNwYUFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBLYXNwYSByZWNpcGllbnQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLl9vdXRwdXRzLnB1c2goeyBhZGRyZXNzLCBhbW91bnQgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRyYW5zYWN0aW9uIGZlZSBpbiBzb21waS5cbiAgICovXG4gIGZlZShmZWU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2ZlZSA9IGZlZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBVVFhPIGlucHV0LlxuICAgKi9cbiAgYWRkSW5wdXQodXR4bzogS2FzcGFVdHhvSW5wdXQpOiB0aGlzIHtcbiAgICBpZiAoIXV0eG8udHJhbnNhY3Rpb25JZCB8fCB1dHhvLnRyYW5zYWN0aW9uSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFVUWE86IG1pc3NpbmcgdHJhbnNhY3Rpb25JZCBvciB0cmFuc2FjdGlvbkluZGV4Jyk7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0cy5wdXNoKHV0eG8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBtdWx0aXBsZSBVVFhPIGlucHV0cy5cbiAgICovXG4gIGFkZElucHV0cyh1dHhvczogS2FzcGFVdHhvSW5wdXRbXSk6IHRoaXMge1xuICAgIHV0eG9zLmZvckVhY2goKHUpID0+IHRoaXMuYWRkSW5wdXQodSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBleHRlcm5hbGx5LXByb2R1Y2VkIHNpZ25hdHVyZSAoZnJvbSBUU1MvTVBDIHNpZ25pbmcpIHRvIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogVGhlIHNpZ25hdHVyZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGlucHV0cyBkdXJpbmcgYnVpbGQoKS5cbiAgICpcbiAgICogVGhpcyBmb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gYXMgQURBJ3MgVHJhbnNhY3Rpb25CdWlsZGVyLmFkZFNpZ25hdHVyZSgpLlxuICAgKlxuICAgKiBAcGFyYW0gcHVibGljS2V5IFRoZSBjb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJsaWMga2V5IHRoYXQgcHJvZHVjZWQgdGhlIHNpZ25hdHVyZVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlIFRoZSA2NC1ieXRlIFNjaG5vcnIgc2lnbmF0dXJlIGJ1ZmZlclxuICAgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goeyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBUcmFuc2FjdGlvbi5mcm9tSGV4KCh0aGlzIGFzIGFueSkuX2NvaW5Db25maWc/Lm5hbWUgfHwgJ2thc3BhJywgcmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgdGhpcy5faW5wdXRzID0gdHgudHhEYXRhLmlucHV0cyB8fCBbXTtcbiAgICB0aGlzLl9vdXRwdXRzID0gdHgudHhEYXRhLm91dHB1dHMgfHwgW107XG4gICAgdGhpcy5fZmVlID0gdHgudHhEYXRhLmZlZSB8fCBERUZBVUxUX0ZFRTtcbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eERhdGE6IEthc3BhVHJhbnNhY3Rpb25EYXRhID0ge1xuICAgICAgdmVyc2lvbjogVFhfVkVSU0lPTixcbiAgICAgIGlucHV0czogdGhpcy5faW5wdXRzLFxuICAgICAgb3V0cHV0czogdGhpcy5fb3V0cHV0cyxcbiAgICAgIGZlZTogdGhpcy5fZmVlLFxuICAgICAgbG9ja1RpbWU6ICcwJyxcbiAgICAgIHN1Ym5ldHdvcmtJZDogJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgcGF5bG9hZDogJycsXG4gICAgfTtcblxuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCh0aGlzIGFzIGFueSkuX2NvaW5Db25maWc/Lm5hbWUgfHwgJ2thc3BhJywgdHhEYXRhKTtcblxuICAgIC8vIEFwcGx5IGFueSBleHRlcm5hbGx5LXByb2R1Y2VkIHNpZ25hdHVyZXMgKGZyb20gVFNTL01QQylcbiAgICBmb3IgKGNvbnN0IHNpZyBvZiB0aGlzLl9zaWduYXR1cmVzKSB7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbi5hZGRTaWduYXR1cmUoc2lnLnB1YmxpY0tleS5wdWIsIHNpZy5zaWduYXR1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKHsga2V5IH06IEJhc2VLZXkpOiBCYXNlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBrZXlQYWlyLmdldEtleXMoKS5wcnY7XG4gICAgaWYgKCFwcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ24oQnVmZmVyLmZyb20ocHJpdmF0ZUtleSwgJ2hleCcpKTtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfdHJhbnNhY3Rpb24/OiBCYXNlVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW5wdXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBvbmUgVVRYTyBpbnB1dCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb3V0cHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXQgbGVhc3Qgb25lIG91dHB1dCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IHsga2V5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIEtleSB2YWxpZGF0aW9uIGhhbmRsZWQgaW4gS2V5UGFpclxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgaWYgKCFpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBLYXNwYSBhZGRyZXNzOiAke2FkZHJlc3MuYWRkcmVzc31gKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIFRyYW5zYWN0aW9uLmZyb21IZXgoKHRoaXMgYXMgYW55KS5fY29pbkNvbmZpZz8ubmFtZSB8fCAna2FzcGEnLCByYXdUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmF3IEthc3BhIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIHZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuIl19
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQXNHO0FBR3RHLCtDQUE0QztBQUU1QyxtQ0FBd0U7QUFDeEUsdUNBQW9DO0FBQ3BDLDJDQUFtRTtBQUNuRSxpQ0FBcUQ7QUFFckQsTUFBYSxrQkFBbUIsU0FBUSxpQ0FBc0I7SUFPNUQsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFOVixZQUFPLEdBQXFCLEVBQUUsQ0FBQztRQUMvQixhQUFRLEdBQTZCLEVBQUUsQ0FBQztRQUN4QyxTQUFJLEdBQVcsdUJBQVcsQ0FBQztRQUMzQixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUkxQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkseUJBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXLENBQUMsRUFBbUI7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFpQixDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxPQUFlO1FBQ3BCLElBQUksQ0FBQyxJQUFBLDJCQUFtQixFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxFQUFFLENBQUMsT0FBZSxFQUFFLE1BQWM7UUFDaEMsSUFB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LENBQUM7UUFDdEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7UUFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFCLENBQUM7Q0FDRjtBQXJNRCxnREFxTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLCBCYXNlVHJhbnNhY3Rpb24sIEJhc2VLZXksIFNpZ25pbmdFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBLYXNwYVRyYW5zYWN0aW9uRGF0YSwgS2FzcGFVdHhvSW5wdXQsIEthc3BhVHJhbnNhY3Rpb25PdXRwdXQgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGlzVmFsaWRLYXNwYUFkZHJlc3MsIGFkZHJlc3NUb1NjcmlwdFB1YmxpY0tleSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5pbXBvcnQgeyBERUZBVUxUX0ZFRSwgVFhfVkVSU0lPTiwgU0lHSEFTSF9BTEwgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQc2t0LCBQc2t0SW5wdXQsIFBza3RPdXRwdXQgfSBmcm9tICcuL3Bza3QnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uO1xuICBwcm90ZWN0ZWQgX2lucHV0czogS2FzcGFVdHhvSW5wdXRbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX291dHB1dHM6IEthc3BhVHJhbnNhY3Rpb25PdXRwdXRbXSA9IFtdO1xuICBwcm90ZWN0ZWQgX2ZlZTogc3RyaW5nID0gREVGQVVMVF9GRUU7XG4gIHByb3RlY3RlZCBfZnJvbUFkZHJlc3MgPSAnJztcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5Db25maWcubmFtZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBCYXNlVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHR4OiBCYXNlVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4IGFzIFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2VuZGVyIGFkZHJlc3MuXG4gICAqL1xuICBzZW5kZXIoYWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCFpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgS2FzcGEgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLl9mcm9tQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcmVjaXBpZW50IG91dHB1dC5cbiAgICovXG4gIHRvKGFkZHJlc3M6IHN0cmluZywgYW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRLYXNwYUFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBLYXNwYSByZWNpcGllbnQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLl9vdXRwdXRzLnB1c2goeyBhZGRyZXNzLCBhbW91bnQsIHNjcmlwdFB1YmxpY0tleTogYWRkcmVzc1RvU2NyaXB0UHVibGljS2V5KGFkZHJlc3MpIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0cmFuc2FjdGlvbiBmZWUgaW4gc29tcGkuXG4gICAqL1xuICBmZWUoZmVlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLl9mZWUgPSBmZWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgVVRYTyBpbnB1dC5cbiAgICovXG4gIGFkZElucHV0KHV0eG86IEthc3BhVXR4b0lucHV0KTogdGhpcyB7XG4gICAgaWYgKCF1dHhvLnRyYW5zYWN0aW9uSWQgfHwgdXR4by50cmFuc2FjdGlvbkluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBVVFhPOiBtaXNzaW5nIHRyYW5zYWN0aW9uSWQgb3IgdHJhbnNhY3Rpb25JbmRleCcpO1xuICAgIH1cbiAgICB0aGlzLl9pbnB1dHMucHVzaCh1dHhvKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbXVsdGlwbGUgVVRYTyBpbnB1dHMuXG4gICAqL1xuICBhZGRJbnB1dHModXR4b3M6IEthc3BhVXR4b0lucHV0W10pOiB0aGlzIHtcbiAgICB1dHhvcy5mb3JFYWNoKCh1KSA9PiB0aGlzLmFkZElucHV0KHUpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBUcmFuc2FjdGlvbi5mcm9tSGV4KHRoaXMuX2NvaW5Db25maWcubmFtZSwgcmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgdGhpcy5faW5wdXRzID0gdHgudHhEYXRhLmlucHV0cyB8fCBbXTtcbiAgICB0aGlzLl9vdXRwdXRzID0gdHgudHhEYXRhLm91dHB1dHMgfHwgW107XG4gICAgdGhpcy5fZmVlID0gdHgudHhEYXRhLmZlZSB8fCBERUZBVUxUX0ZFRTtcbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eERhdGE6IEthc3BhVHJhbnNhY3Rpb25EYXRhID0ge1xuICAgICAgdmVyc2lvbjogVFhfVkVSU0lPTixcbiAgICAgIGlucHV0czogdGhpcy5faW5wdXRzLFxuICAgICAgb3V0cHV0czogdGhpcy5fb3V0cHV0cyxcbiAgICAgIGZlZTogdGhpcy5fZmVlLFxuICAgICAgbG9ja1RpbWU6ICcwJyxcbiAgICAgIHN1Ym5ldHdvcmtJZDogJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgcGF5bG9hZDogJycsXG4gICAgfTtcblxuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHRoaXMuX2NvaW5Db25maWcubmFtZSwgdHhEYXRhKTtcblxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKHsga2V5IH06IEJhc2VLZXkpOiBCYXNlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBrZXlQYWlyLmdldEtleXMoKS5wcnY7XG4gICAgaWYgKCFwcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ24oQnVmZmVyLmZyb20ocHJpdmF0ZUtleSwgJ2hleCcpKTtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfdHJhbnNhY3Rpb24/OiBCYXNlVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW5wdXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBvbmUgVVRYTyBpbnB1dCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb3V0cHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXQgbGVhc3Qgb25lIG91dHB1dCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IHsga2V5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIEtleSB2YWxpZGF0aW9uIGhhbmRsZWQgaW4gS2V5UGFpclxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgaWYgKCFpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBLYXNwYSBhZGRyZXNzOiAke2FkZHJlc3MuYWRkcmVzc31gKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIFRyYW5zYWN0aW9uLmZyb21IZXgodGhpcy5fY29pbkNvbmZpZy5uYW1lLCByYXdUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmF3IEthc3BhIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIHZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgdHJhbnNhY3Rpb24gYW5kIHJldHVybiBpdCBhcyBhbiB1bnNpZ25lZCBQU0tUIGluIFVQREFURVIgcm9sZS5cbiAgICpcbiAgICogVGhlIFBTS1QgaGFzIGFsbCBpbnB1dHMgYW5kIG91dHB1dHMgcG9wdWxhdGVkIHdpdGggVVRYTyBkYXRhIGJ1dCBub1xuICAgKiBzaWduYXR1cmVzLiBJdCBpcyByZWFkeSB0byBiZSBoYW5kZWQgdG8gYSBzaWduZXIgKEhTTSwgaGFyZHdhcmUgd2FsbGV0LFxuICAgKiBvciBNUEN2MiBzZXNzaW9uKSB2aWEgYHBza3QudG9TaWduZXIoKS5zaWduKGtleSlgIG9yXG4gICAqIGBwc2t0LnRvU2lnbmVyKCkuYWRkU2lnbmF0dXJlKC4uLilgLlxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGB0c1xuICAgKiBjb25zdCBwc2t0ID0gYXdhaXQgYnVpbGRlci50b1Bza3QoKTtcbiAgICogY29uc3QgYnJvYWRjYXN0SnNvbiA9IHBza3RcbiAgICogICAudG9TaWduZXIoKVxuICAgKiAgIC5zaWduKHByaXZhdGVLZXkpXG4gICAqICAgLnRvRmluYWxpemVyKClcbiAgICogICAuZmluYWxpemUoKVxuICAgKiAgIC50b0V4dHJhY3RvcigpXG4gICAqICAgLmV4dHJhY3QoKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyB0b1Bza3QoKTogUHJvbWlzZTxQc2t0PiB7XG4gICAgdGhpcy52YWxpZGF0ZVRyYW5zYWN0aW9uKCk7XG5cbiAgICBjb25zdCBwc2t0SW5wdXRzOiBQc2t0SW5wdXRbXSA9IHRoaXMuX2lucHV0cy5tYXAoKGlucCkgPT4gKHtcbiAgICAgIHByZXZpb3VzT3V0cG9pbnQ6IHsgdHJhbnNhY3Rpb25JZDogaW5wLnRyYW5zYWN0aW9uSWQsIGluZGV4OiBpbnAudHJhbnNhY3Rpb25JbmRleCB9LFxuICAgICAgdXR4b0VudHJ5OiB7IGFtb3VudDogaW5wLmFtb3VudCwgc2NyaXB0UHVibGljS2V5OiBpbnAuc2NyaXB0UHVibGljS2V5IH0sXG4gICAgICBzZXF1ZW5jZTogaW5wLnNlcXVlbmNlLFxuICAgICAgc2lnT3BDb3VudDogaW5wLnNpZ09wQ291bnQgPz8gMSxcbiAgICAgIHBhcnRpYWxTaWdzOiB7fSxcbiAgICAgIHNpZ2hhc2hUeXBlOiBTSUdIQVNIX0FMTCxcbiAgICAgIGJpcDMyRGVyaXZhdGlvbnM6IHt9LFxuICAgICAgcHJvcHJpZXRhcmllczoge30sXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcHNrdE91dHB1dHM6IFBza3RPdXRwdXRbXSA9IHRoaXMuX291dHB1dHMubWFwKChvdXQpID0+ICh7XG4gICAgICBhbW91bnQ6IG91dC5hbW91bnQsXG4gICAgICBzY3JpcHRQdWJsaWNLZXk6IHsgdmVyc2lvbjogMCwgc2NyaXB0UHVibGljS2V5OiBvdXQuc2NyaXB0UHVibGljS2V5IHx8IGFkZHJlc3NUb1NjcmlwdFB1YmxpY0tleShvdXQuYWRkcmVzcykgfSxcbiAgICAgIGJpcDMyRGVyaXZhdGlvbnM6IHt9LFxuICAgICAgcHJvcHJpZXRhcmllczoge30sXG4gICAgfSkpO1xuXG4gICAgY29uc3QgcHNrdCA9IFBza3QuY3JlYXRvcihUWF9WRVJTSU9OKTtcbiAgICBmb3IgKGNvbnN0IGlucCBvZiBwc2t0SW5wdXRzKSB7XG4gICAgICBwc2t0LmlucHV0KGlucCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3V0IG9mIHBza3RPdXRwdXRzKSB7XG4gICAgICBwc2t0Lm91dHB1dChvdXQpO1xuICAgIH1cbiAgICByZXR1cm4gcHNrdC50b1VwZGF0ZXIoKTtcbiAgfVxufVxuIl19
@@ -1,4 +1,5 @@
1
1
  import { BaseUtils } from '@bitgo-beta/sdk-core';
2
+ import { KaspaAddressType } from './constants';
2
3
  /**
3
4
  * Validates a Kaspa address (mainnet or testnet)
4
5
  */
@@ -12,12 +13,25 @@ export declare function isValidMainnetAddress(address: string): boolean;
12
13
  */
13
14
  export declare function isValidTestnetAddress(address: string): boolean;
14
15
  /**
15
- * Derive a Kaspa P2PK (Schnorr) address from a compressed secp256k1 public key.
16
+ * Decode a Kaspa address to its P2PK scriptPublicKey hex string.
17
+ *
18
+ * Reverses pubKeyToKaspaAddress: decodes the bech32 payload, reads the version
19
+ * byte to determine the script type, and builds the locking script.
20
+ *
21
+ * v0 (Schnorr): 0x20 || xOnlyPubKey(32B) || 0xAC (OpCheckSig)
22
+ * v1 (ECDSA): 0x21 || compressedPubKey(33B) || 0xAB (OpCheckSigECDSA)
23
+ *
24
+ * Used by TransactionBuilder to populate output scriptPublicKeys from addresses.
25
+ */
26
+ export declare function addressToScriptPublicKey(address: string): string;
27
+ /**
28
+ * Derive a Kaspa P2PK address from a compressed secp256k1 public key.
16
29
  *
17
30
  * @param compressedPubKey - 33-byte compressed secp256k1 public key (hex string or Buffer)
18
- * @param hrp - human-readable part ('kaspa' or 'kaspatest')
31
+ * @param hrp - human-readable part ('kaspa' or 'kaspatest')
32
+ * @param type - address type (default: SCHNORR / v0)
19
33
  */
20
- export declare function pubKeyToKaspaAddress(compressedPubKey: string | Buffer, hrp: string): string;
34
+ export declare function pubKeyToKaspaAddress(compressedPubKey: string | Buffer, hrp: string, type?: KaspaAddressType): string;
21
35
  /**
22
36
  * Validates a secp256k1 public key (compressed or uncompressed)
23
37
  */
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA4B,MAAM,sBAAsB,CAAC;AAmH3E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAqB5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAoB3F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAatD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,qBAAa,KAAM,YAAW,SAAS;IACrC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG5C;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAC1B,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA4B,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAkC,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAkH/E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAqB5D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAuBhE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,gBAAgB,EAAE,MAAM,GAAG,MAAM,EACjC,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,gBAA2C,GAChD,MAAM,CAgBR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAatD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,qBAAa,KAAM,YAAW,SAAS;IACrC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIrC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItC,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAG5C;AAED,QAAA,MAAM,KAAK,OAAc,CAAC;AAC1B,eAAe,KAAK,CAAC"}
@@ -4,6 +4,7 @@ exports.Utils = void 0;
4
4
  exports.isValidKaspaAddress = isValidKaspaAddress;
5
5
  exports.isValidMainnetAddress = isValidMainnetAddress;
6
6
  exports.isValidTestnetAddress = isValidTestnetAddress;
7
+ exports.addressToScriptPublicKey = addressToScriptPublicKey;
7
8
  exports.pubKeyToKaspaAddress = pubKeyToKaspaAddress;
8
9
  exports.isValidPublicKey = isValidPublicKey;
9
10
  exports.isValidPrivateKey = isValidPrivateKey;
@@ -143,25 +144,58 @@ function isValidTestnetAddress(address) {
143
144
  return isValidKaspaAddress(address) && address.toLowerCase().startsWith(constants_1.TESTNET_PREFIX + ':');
144
145
  }
145
146
  /**
146
- * Derive a Kaspa P2PK (Schnorr) address from a compressed secp256k1 public key.
147
+ * Decode a Kaspa address to its P2PK scriptPublicKey hex string.
148
+ *
149
+ * Reverses pubKeyToKaspaAddress: decodes the bech32 payload, reads the version
150
+ * byte to determine the script type, and builds the locking script.
151
+ *
152
+ * v0 (Schnorr): 0x20 || xOnlyPubKey(32B) || 0xAC (OpCheckSig)
153
+ * v1 (ECDSA): 0x21 || compressedPubKey(33B) || 0xAB (OpCheckSigECDSA)
154
+ *
155
+ * Used by TransactionBuilder to populate output scriptPublicKeys from addresses.
156
+ */
157
+ function addressToScriptPublicKey(address) {
158
+ const { data: words } = kaspacDecode(address);
159
+ const payload = Buffer.from(convertBits(Buffer.from(words), 5, 8, false));
160
+ // First byte is the version / address type.
161
+ const version = payload[0];
162
+ const keyBytes = payload.slice(1);
163
+ if (version === constants_1.KaspaAddressType.SCHNORR) {
164
+ // v0: keyBytes is 32-byte x-only pubkey
165
+ if (keyBytes.length !== 32) {
166
+ throw new Error(`Invalid Schnorr address payload length: ${keyBytes.length}`);
167
+ }
168
+ return Buffer.concat([Buffer.from([0x20]), keyBytes, Buffer.from([0xac])]).toString('hex');
169
+ }
170
+ else if (version === constants_1.KaspaAddressType.ECDSA) {
171
+ // v1: keyBytes is 33-byte compressed pubkey
172
+ if (keyBytes.length !== 33) {
173
+ throw new Error(`Invalid ECDSA address payload length: ${keyBytes.length}`);
174
+ }
175
+ return Buffer.concat([Buffer.from([0x21]), keyBytes, Buffer.from([0xab])]).toString('hex');
176
+ }
177
+ else {
178
+ throw new Error(`Unknown Kaspa address version: ${version}`);
179
+ }
180
+ }
181
+ /**
182
+ * Derive a Kaspa P2PK address from a compressed secp256k1 public key.
147
183
  *
148
184
  * @param compressedPubKey - 33-byte compressed secp256k1 public key (hex string or Buffer)
149
- * @param hrp - human-readable part ('kaspa' or 'kaspatest')
185
+ * @param hrp - human-readable part ('kaspa' or 'kaspatest')
186
+ * @param type - address type (default: SCHNORR / v0)
150
187
  */
151
- function pubKeyToKaspaAddress(compressedPubKey, hrp) {
188
+ function pubKeyToKaspaAddress(compressedPubKey, hrp, type = constants_1.KaspaAddressType.SCHNORR) {
152
189
  const pubKeyBytes = Buffer.isBuffer(compressedPubKey)
153
190
  ? compressedPubKey
154
191
  : Buffer.from(compressedPubKey, 'hex');
155
192
  if (pubKeyBytes.length !== 33) {
156
193
  throw new Error(`Expected 33-byte compressed public key, got ${pubKeyBytes.length}`);
157
194
  }
158
- // X-only public key: drop the prefix byte (02 or 03), keep 32-byte x-coordinate
159
- const xOnlyPubKey = pubKeyBytes.slice(1);
160
- // Kaspa P2PK address:
161
- // - version nibble: 0 (Schnorr secp256k1 P2PK)
162
- // - payload: x-only public key (32 bytes)
163
- const versionByte = 0;
164
- const payload = Buffer.concat([Buffer.from([versionByte]), xOnlyPubKey]);
195
+ // Schnorr (v0): payload uses the 32-byte x-only key (drop the 02/03 prefix).
196
+ // ECDSA (v1): payload uses the full 33-byte compressed key (prefix byte kept).
197
+ const keyPayload = type === constants_1.KaspaAddressType.SCHNORR ? pubKeyBytes.slice(1) : pubKeyBytes;
198
+ const payload = Buffer.concat([Buffer.from([type]), keyPayload]);
165
199
  const words = convertBits(payload, 8, 5, true);
166
200
  return kaspaEncode(hrp, words);
167
201
  }
@@ -233,4 +267,4 @@ class Utils {
233
267
  exports.Utils = Utils;
234
268
  const utils = new Utils();
235
269
  exports.default = utils;
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXNIQSxrREFxQkM7QUFLRCxzREFFQztBQUtELHNEQUVDO0FBUUQsb0RBb0JDO0FBS0QsNENBZ0JDO0FBS0QsOENBYUM7QUFLRCxvREFFQztBQW5PRCxtREFBMkU7QUFDM0UsMkNBQTZEO0FBRTdELHlFQUF5RTtBQUN6RSxvRUFBb0U7QUFFcEUsTUFBTSxPQUFPLEdBQUcsa0NBQWtDLENBQUM7QUFDbkQsTUFBTSxlQUFlLEdBQTJCLEVBQUUsQ0FBQztBQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3hDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFHO0lBQ2hCLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDdEIsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUN0QixNQUFNLENBQUMsY0FBYyxDQUFDO0lBQ3RCLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDdEIsTUFBTSxDQUFDLGNBQWMsQ0FBQztDQUN2QixDQUFDO0FBRUYsU0FBUyxPQUFPLENBQUMsTUFBZ0I7SUFDL0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1gsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN2QixNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztnQkFDM0IsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE1BQWM7SUFDbEMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLE1BQWMsRUFBRSxJQUFjO0lBQ3BELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEYsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztJQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDNUIsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLE1BQWMsRUFBRSxJQUFjO0lBQ3BELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUF5QixFQUFFLElBQVksRUFBRSxFQUFVLEVBQUUsR0FBWTtJQUNwRixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUM7SUFDekIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekIsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM1QixJQUFJLElBQUksSUFBSSxDQUFDO1FBQ2IsT0FBTyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7WUFDbEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLEdBQUcsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxJQUFjO0lBQ2pELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsT0FBTyxDQUNMLE1BQU07UUFDTixHQUFHO1FBQ0gsSUFBSTthQUNELE1BQU0sQ0FBQyxRQUFRLENBQUM7YUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUNaLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxZQUFZLENBQUMsT0FBZTtJQUNuQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFMUQsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO0lBQzFCLEtBQUssTUFBTSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDN0MsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsT0FBZTtJQUNqRCxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEQsSUFBSSxNQUFNLEtBQUssMEJBQWMsSUFBSSxNQUFNLEtBQUssMEJBQWMsRUFBRSxDQUFDO1FBQzNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsT0FBZTtJQUNuRCxPQUFPLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsMEJBQWMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNoRyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxPQUFlO0lBQ25ELE9BQU8sbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQywwQkFBYyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2hHLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLGdCQUFpQyxFQUFFLEdBQVc7SUFDakYsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNuRCxDQUFDLENBQUMsZ0JBQWdCO1FBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRW5ELElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsZ0ZBQWdGO0lBQ2hGLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekMsc0JBQXNCO0lBQ3RCLCtDQUErQztJQUMvQywwQ0FBMEM7SUFDMUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUUvQyxPQUFPLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBVztJQUMxQyxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUN0QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQUMsR0FBVztJQUMzQyxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksSUFBQSxzQkFBVyxFQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUEsc0JBQVcsRUFBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakQsT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsSUFBWTtJQUMvQyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QyxDQUFDO0FBRUQsTUFBYSxLQUFLO0lBQ2hCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFXO1FBQzNCLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVc7UUFDMUIsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsT0FBTyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVk7UUFDL0IsT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUF4QkQsc0JBd0JDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUMxQixrQkFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVXRpbHMsIGlzVmFsaWRYcHJ2LCBpc1ZhbGlkWHB1YiB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IE1BSU5ORVRfUFJFRklYLCBURVNUTkVUX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLy8gS2FzcGEgYWRkcmVzcyBlbmNvZGluZyB1c2VzIGEgYmVjaDMyLWxpa2Ugc2NoZW1lIHdpdGggJzonIGFzIHNlcGFyYXRvclxuLy8gYW5kIGEgY3VzdG9tIGNoZWNrc3VtIHBvbHlub21pYWwgKHNhbWUgYXMgQml0Y29pbiBDYXNoIGNhc2hhZGRyKS5cblxuY29uc3QgQ0hBUlNFVCA9ICdxcHpyeTl4OGdmMnR2ZHcwczNqbjU0a2hjZTZtdWE3bCc7XG5jb25zdCBDSEFSU0VUX1JFVkVSU0U6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcbmZvciAobGV0IGkgPSAwOyBpIDwgQ0hBUlNFVC5sZW5ndGg7IGkrKykge1xuICBDSEFSU0VUX1JFVkVSU0VbQ0hBUlNFVFtpXV0gPSBpO1xufVxuXG5jb25zdCBHRU5FUkFUT1IgPSBbXG4gIEJpZ0ludCgnMHg5OGYyYmM4ZTYxJyksXG4gIEJpZ0ludCgnMHg3OWI3NmQ5OWUyJyksXG4gIEJpZ0ludCgnMHhmMzNlNWZiM2M0JyksXG4gIEJpZ0ludCgnMHhhZTJlYWJlMmE4JyksXG4gIEJpZ0ludCgnMHgxZTRmNDNlNDcwJyksXG5dO1xuXG5mdW5jdGlvbiBwb2x5bW9kKHZhbHVlczogbnVtYmVyW10pOiBiaWdpbnQge1xuICBsZXQgYyA9IDFuO1xuICBmb3IgKGNvbnN0IGQgb2YgdmFsdWVzKSB7XG4gICAgY29uc3QgYzAgPSBjID4+IDM1bjtcbiAgICBjID0gKChjICYgQmlnSW50KCcweDA3ZmZmZmZmZmYnKSkgPDwgNW4pIF4gQmlnSW50KGQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICBpZiAoKGMwID4+IEJpZ0ludChpKSkgJiAxbikge1xuICAgICAgICBjIF49IEdFTkVSQVRPUltpXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGMgXiAxbjtcbn1cblxuZnVuY3Rpb24gcHJlZml4RXhwYW5kKHByZWZpeDogc3RyaW5nKTogbnVtYmVyW10ge1xuICByZXR1cm4gWy4uLnByZWZpeF0ubWFwKChjKSA9PiBjLmNoYXJDb2RlQXQoMCkgJiAweDFmKS5jb25jYXQoWzBdKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2hlY2tzdW0ocHJlZml4OiBzdHJpbmcsIGRhdGE6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICBjb25zdCB2YWx1ZXMgPSBwcmVmaXhFeHBhbmQocHJlZml4KS5jb25jYXQoZGF0YSkuY29uY2F0KFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSk7XG4gIGNvbnN0IG1vZCA9IHBvbHltb2QodmFsdWVzKTtcbiAgY29uc3QgcmV0OiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGxldCBpID0gNzsgaSA+PSAwOyBpLS0pIHtcbiAgICByZXQucHVzaChOdW1iZXIoKG1vZCA+PiBCaWdJbnQoNSAqIGkpKSAmIDMxbikpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIHZlcmlmeUNoZWNrc3VtKHByZWZpeDogc3RyaW5nLCBkYXRhOiBudW1iZXJbXSk6IGJvb2xlYW4ge1xuICBjb25zdCB2YWx1ZXMgPSBwcmVmaXhFeHBhbmQocHJlZml4KS5jb25jYXQoZGF0YSk7XG4gIHJldHVybiBwb2x5bW9kKHZhbHVlcykgPT09IDBuO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0Qml0cyhkYXRhOiBCdWZmZXIgfCBVaW50OEFycmF5LCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIHBhZDogYm9vbGVhbik6IG51bWJlcltdIHtcbiAgbGV0IGFjYyA9IDA7XG4gIGxldCBiaXRzID0gMDtcbiAgY29uc3QgcmV0OiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBtYXh2ID0gKDEgPDwgdG8pIC0gMTtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBkYXRhKSB7XG4gICAgYWNjID0gKGFjYyA8PCBmcm9tKSB8IHZhbHVlO1xuICAgIGJpdHMgKz0gZnJvbTtcbiAgICB3aGlsZSAoYml0cyA+PSB0bykge1xuICAgICAgYml0cyAtPSB0bztcbiAgICAgIHJldC5wdXNoKChhY2MgPj4gYml0cykgJiBtYXh2KTtcbiAgICB9XG4gIH1cbiAgaWYgKHBhZCAmJiBiaXRzID4gMCkge1xuICAgIHJldC5wdXNoKChhY2MgPDwgKHRvIC0gYml0cykpICYgbWF4dik7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBFbmNvZGUgZGF0YSBpbnRvIGEgS2FzcGEgYmVjaDMyLWxpa2UgYWRkcmVzcy5cbiAqL1xuZnVuY3Rpb24ga2FzcGFFbmNvZGUocHJlZml4OiBzdHJpbmcsIGRhdGE6IG51bWJlcltdKTogc3RyaW5nIHtcbiAgY29uc3QgY2hlY2tzdW0gPSBjcmVhdGVDaGVja3N1bShwcmVmaXgsIGRhdGEpO1xuICByZXR1cm4gKFxuICAgIHByZWZpeCArXG4gICAgJzonICtcbiAgICBkYXRhXG4gICAgICAuY29uY2F0KGNoZWNrc3VtKVxuICAgICAgLm1hcCgoZCkgPT4gQ0hBUlNFVFtkXSlcbiAgICAgIC5qb2luKCcnKVxuICApO1xufVxuXG4vKipcbiAqIERlY29kZSBhIEthc3BhIGJlY2gzMi1saWtlIGFkZHJlc3MuXG4gKiBSZXR1cm5zIHsgcHJlZml4LCBkYXRhIH0gb3IgdGhyb3dzIG9uIGVycm9yLlxuICovXG5mdW5jdGlvbiBrYXNwYWNEZWNvZGUoYWRkcmVzczogc3RyaW5nKTogeyBwcmVmaXg6IHN0cmluZzsgZGF0YTogbnVtYmVyW10gfSB7XG4gIGNvbnN0IGNvbG9uSWR4ID0gYWRkcmVzcy5sYXN0SW5kZXhPZignOicpO1xuICBpZiAoY29sb25JZHggPCAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHByZWZpeCBzZXBhcmF0b3InKTtcbiAgfVxuICBjb25zdCBwcmVmaXggPSBhZGRyZXNzLnNsaWNlKDAsIGNvbG9uSWR4KS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBlbmNvZGVkID0gYWRkcmVzcy5zbGljZShjb2xvbklkeCArIDEpLnRvTG93ZXJDYXNlKCk7XG5cbiAgY29uc3QgZGF0YTogbnVtYmVyW10gPSBbXTtcbiAgZm9yIChjb25zdCBjIG9mIGVuY29kZWQpIHtcbiAgICBjb25zdCB2YWwgPSBDSEFSU0VUX1JFVkVSU0VbY107XG4gICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhcmFjdGVyOiAke2N9YCk7XG4gICAgfVxuICAgIGRhdGEucHVzaCh2YWwpO1xuICB9XG5cbiAgaWYgKCF2ZXJpZnlDaGVja3N1bShwcmVmaXgsIGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNoZWNrc3VtJyk7XG4gIH1cblxuICByZXR1cm4geyBwcmVmaXgsIGRhdGE6IGRhdGEuc2xpY2UoMCwgLTgpIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgS2FzcGEgYWRkcmVzcyAobWFpbm5ldCBvciB0ZXN0bmV0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEthc3BhQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFhZGRyZXNzIHx8IHR5cGVvZiBhZGRyZXNzICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGNvbG9uSWR4ID0gYWRkcmVzcy5sYXN0SW5kZXhPZignOicpO1xuICBpZiAoY29sb25JZHggPCAxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJlZml4ID0gYWRkcmVzcy5zbGljZSgwLCBjb2xvbklkeCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKHByZWZpeCAhPT0gTUFJTk5FVF9QUkVGSVggJiYgcHJlZml4ICE9PSBURVNUTkVUX1BSRUZJWCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZGVjb2RlZCA9IGthc3BhY0RlY29kZShhZGRyZXNzKTtcbiAgICByZXR1cm4gZGVjb2RlZC5kYXRhLmxlbmd0aCA+IDA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIEthc3BhIG1haW5uZXQgYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZE1haW5uZXRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNWYWxpZEthc3BhQWRkcmVzcyhhZGRyZXNzKSAmJiBhZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChNQUlOTkVUX1BSRUZJWCArICc6Jyk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgS2FzcGEgdGVzdG5ldCBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGVzdG5ldEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3MpICYmIGFkZHJlc3MudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFRFU1RORVRfUFJFRklYICsgJzonKTtcbn1cblxuLyoqXG4gKiBEZXJpdmUgYSBLYXNwYSBQMlBLIChTY2hub3JyKSBhZGRyZXNzIGZyb20gYSBjb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJsaWMga2V5LlxuICpcbiAqIEBwYXJhbSBjb21wcmVzc2VkUHViS2V5IC0gMzMtYnl0ZSBjb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJsaWMga2V5IChoZXggc3RyaW5nIG9yIEJ1ZmZlcilcbiAqIEBwYXJhbSBocnAgLSBodW1hbi1yZWFkYWJsZSBwYXJ0ICgna2FzcGEnIG9yICdrYXNwYXRlc3QnKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHViS2V5VG9LYXNwYUFkZHJlc3MoY29tcHJlc3NlZFB1YktleTogc3RyaW5nIHwgQnVmZmVyLCBocnA6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHB1YktleUJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKGNvbXByZXNzZWRQdWJLZXkpXG4gICAgPyBjb21wcmVzc2VkUHViS2V5XG4gICAgOiBCdWZmZXIuZnJvbShjb21wcmVzc2VkUHViS2V5IGFzIHN0cmluZywgJ2hleCcpO1xuXG4gIGlmIChwdWJLZXlCeXRlcy5sZW5ndGggIT09IDMzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAzMy1ieXRlIGNvbXByZXNzZWQgcHVibGljIGtleSwgZ290ICR7cHViS2V5Qnl0ZXMubGVuZ3RofWApO1xuICB9XG5cbiAgLy8gWC1vbmx5IHB1YmxpYyBrZXk6IGRyb3AgdGhlIHByZWZpeCBieXRlICgwMiBvciAwMyksIGtlZXAgMzItYnl0ZSB4LWNvb3JkaW5hdGVcbiAgY29uc3QgeE9ubHlQdWJLZXkgPSBwdWJLZXlCeXRlcy5zbGljZSgxKTtcblxuICAvLyBLYXNwYSBQMlBLIGFkZHJlc3M6XG4gIC8vIC0gdmVyc2lvbiBuaWJibGU6IDAgKFNjaG5vcnIgc2VjcDI1NmsxIFAyUEspXG4gIC8vIC0gcGF5bG9hZDogeC1vbmx5IHB1YmxpYyBrZXkgKDMyIGJ5dGVzKVxuICBjb25zdCB2ZXJzaW9uQnl0ZSA9IDA7XG4gIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbdmVyc2lvbkJ5dGVdKSwgeE9ubHlQdWJLZXldKTtcbiAgY29uc3Qgd29yZHMgPSBjb252ZXJ0Qml0cyhwYXlsb2FkLCA4LCA1LCB0cnVlKTtcblxuICByZXR1cm4ga2FzcGFFbmNvZGUoaHJwLCB3b3Jkcyk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKGNvbXByZXNzZWQgb3IgdW5jb21wcmVzc2VkKVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YmxpY0tleShwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIXB1YiB8fCB0eXBlb2YgcHViICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpO1xuICAgIGlmIChidWYubGVuZ3RoID09PSAzMykge1xuICAgICAgcmV0dXJuIGJ1ZlswXSA9PT0gMHgwMiB8fCBidWZbMF0gPT09IDB4MDM7XG4gICAgfVxuICAgIGlmIChidWYubGVuZ3RoID09PSA2NSkge1xuICAgICAgcmV0dXJuIGJ1ZlswXSA9PT0gMHgwNDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBzZWNwMjU2azEgcHJpdmF0ZSBrZXkgKDMyLWJ5dGUgaGV4KVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFByaXZhdGVLZXkocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFwcnYgfHwgdHlwZW9mIHBydiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGlzVmFsaWRYcHJ2KHBydikgfHwgaXNWYWxpZFhwdWIocHJ2KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20ocHJ2LnNsaWNlKDAsIDY0KSwgJ2hleCcpO1xuICAgIHJldHVybiBidWYubGVuZ3RoID09PSAzMjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgdHJhbnNhY3Rpb24gSUQgKDY0LWNoYXIgaGV4KVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvXlswLTlhLWZBLUZdezY0fSQvLnRlc3QodHhJZCk7XG59XG5cbmV4cG9ydCBjbGFzcyBVdGlscyBpbXBsZW1lbnRzIEJhc2VVdGlscyB7XG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgaXNWYWxpZEJsb2NrSWQoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eWzAtOWEtZkEtRl17NjR9JC8udGVzdChoYXNoKTtcbiAgfVxuXG4gIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVmFsaWRQcml2YXRlS2V5KGtleSk7XG4gIH1cblxuICBpc1ZhbGlkUHVibGljS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVmFsaWRQdWJsaWNLZXkoa2V5KTtcbiAgfVxuXG4gIGlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15bMC05YS1mQS1GXXsxMjgsMTMwfSQvLnRlc3Qoc2lnbmF0dXJlKTtcbiAgfVxuXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkKTtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG4iXX0=
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXNIQSxrREFxQkM7QUFLRCxzREFFQztBQUtELHNEQUVDO0FBYUQsNERBdUJDO0FBU0Qsb0RBb0JDO0FBS0QsNENBZ0JDO0FBS0QsOENBYUM7QUFLRCxvREFFQztBQXhRRCxtREFBMkU7QUFDM0UsMkNBQStFO0FBRS9FLHlFQUF5RTtBQUN6RSxvRUFBb0U7QUFFcEUsTUFBTSxPQUFPLEdBQUcsa0NBQWtDLENBQUM7QUFDbkQsTUFBTSxlQUFlLEdBQTJCLEVBQUUsQ0FBQztBQUNuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3hDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sU0FBUyxHQUFHO0lBQ2hCLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDdEIsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUN0QixNQUFNLENBQUMsY0FBYyxDQUFDO0lBQ3RCLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFDdEIsTUFBTSxDQUFDLGNBQWMsQ0FBQztDQUN2QixDQUFDO0FBRUYsU0FBUyxPQUFPLENBQUMsTUFBZ0I7SUFDL0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1gsS0FBSyxNQUFNLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN2QixNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxLQUFLLElBQUksQ0FB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QUM7Q0FDRjtBQXhCRCxzQkF3QkM7QUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQzFCLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VVdGlscywgaXNWYWxpZFhwcnYsIGlzVmFsaWRYcHViIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgTUFJTk5FVF9QUkVGSVgsIFRFU1RORVRfUFJFRklYLCBLYXNwYUFkZHJlc3NUeXBlIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vLyBLYXNwYSBhZGRyZXNzIGVuY29kaW5nIHVzZXMgYSBiZWNoMzItbGlrZSBzY2hlbWUgd2l0aCAnOicgYXMgc2VwYXJhdG9yXG4vLyBhbmQgYSBjdXN0b20gY2hlY2tzdW0gcG9seW5vbWlhbCAoc2FtZSBhcyBCaXRjb2luIENhc2ggY2FzaGFkZHIpLlxuXG5jb25zdCBDSEFSU0VUID0gJ3FwenJ5OXg4Z2YydHZkdzBzM2puNTRraGNlNm11YTdsJztcbmNvbnN0IENIQVJTRVRfUkVWRVJTRTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuZm9yIChsZXQgaSA9IDA7IGkgPCBDSEFSU0VULmxlbmd0aDsgaSsrKSB7XG4gIENIQVJTRVRfUkVWRVJTRVtDSEFSU0VUW2ldXSA9IGk7XG59XG5cbmNvbnN0IEdFTkVSQVRPUiA9IFtcbiAgQmlnSW50KCcweDk4ZjJiYzhlNjEnKSxcbiAgQmlnSW50KCcweDc5Yjc2ZDk5ZTInKSxcbiAgQmlnSW50KCcweGYzM2U1ZmIzYzQnKSxcbiAgQmlnSW50KCcweGFlMmVhYmUyYTgnKSxcbiAgQmlnSW50KCcweDFlNGY0M2U0NzAnKSxcbl07XG5cbmZ1bmN0aW9uIHBvbHltb2QodmFsdWVzOiBudW1iZXJbXSk6IGJpZ2ludCB7XG4gIGxldCBjID0gMW47XG4gIGZvciAoY29uc3QgZCBvZiB2YWx1ZXMpIHtcbiAgICBjb25zdCBjMCA9IGMgPj4gMzVuO1xuICAgIGMgPSAoKGMgJiBCaWdJbnQoJzB4MDdmZmZmZmZmZicpKSA8PCA1bikgXiBCaWdJbnQoZCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgIGlmICgoYzAgPj4gQmlnSW50KGkpKSAmIDFuKSB7XG4gICAgICAgIGMgXj0gR0VORVJBVE9SW2ldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gYyBeIDFuO1xufVxuXG5mdW5jdGlvbiBwcmVmaXhFeHBhbmQocHJlZml4OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIHJldHVybiBbLi4ucHJlZml4XS5tYXAoKGMpID0+IGMuY2hhckNvZGVBdCgwKSAmIDB4MWYpLmNvbmNhdChbMF0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDaGVja3N1bShwcmVmaXg6IHN0cmluZywgZGF0YTogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IHZhbHVlcyA9IHByZWZpeEV4cGFuZChwcmVmaXgpLmNvbmNhdChkYXRhKS5jb25jYXQoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdKTtcbiAgY29uc3QgbW9kID0gcG9seW1vZCh2YWx1ZXMpO1xuICBjb25zdCByZXQ6IG51bWJlcltdID0gW107XG4gIGZvciAobGV0IGkgPSA3OyBpID49IDA7IGktLSkge1xuICAgIHJldC5wdXNoKE51bWJlcigobW9kID4+IEJpZ0ludCg1ICogaSkpICYgMzFuKSk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5Q2hlY2tzdW0ocHJlZml4OiBzdHJpbmcsIGRhdGE6IG51bWJlcltdKTogYm9vbGVhbiB7XG4gIGNvbnN0IHZhbHVlcyA9IHByZWZpeEV4cGFuZChwcmVmaXgpLmNvbmNhdChkYXRhKTtcbiAgcmV0dXJuIHBvbHltb2QodmFsdWVzKSA9PT0gMG47XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRCaXRzKGRhdGE6IEJ1ZmZlciB8IFVpbnQ4QXJyYXksIGZyb206IG51bWJlciwgdG86IG51bWJlciwgcGFkOiBib29sZWFuKTogbnVtYmVyW10ge1xuICBsZXQgYWNjID0gMDtcbiAgbGV0IGJpdHMgPSAwO1xuICBjb25zdCByZXQ6IG51bWJlcltdID0gW107XG4gIGNvbnN0IG1heHYgPSAoMSA8PCB0bykgLSAxO1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIGRhdGEpIHtcbiAgICBhY2MgPSAoYWNjIDw8IGZyb20pIHwgdmFsdWU7XG4gICAgYml0cyArPSBmcm9tO1xuICAgIHdoaWxlIChiaXRzID49IHRvKSB7XG4gICAgICBiaXRzIC09IHRvO1xuICAgICAgcmV0LnB1c2goKGFjYyA+PiBiaXRzKSAmIG1heHYpO1xuICAgIH1cbiAgfVxuICBpZiAocGFkICYmIGJpdHMgPiAwKSB7XG4gICAgcmV0LnB1c2goKGFjYyA8PCAodG8gLSBiaXRzKSkgJiBtYXh2KTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIEVuY29kZSBkYXRhIGludG8gYSBLYXNwYSBiZWNoMzItbGlrZSBhZGRyZXNzLlxuICovXG5mdW5jdGlvbiBrYXNwYUVuY29kZShwcmVmaXg6IHN0cmluZywgZGF0YTogbnVtYmVyW10pOiBzdHJpbmcge1xuICBjb25zdCBjaGVja3N1bSA9IGNyZWF0ZUNoZWNrc3VtKHByZWZpeCwgZGF0YSk7XG4gIHJldHVybiAoXG4gICAgcHJlZml4ICtcbiAgICAnOicgK1xuICAgIGRhdGFcbiAgICAgIC5jb25jYXQoY2hlY2tzdW0pXG4gICAgICAubWFwKChkKSA9PiBDSEFSU0VUW2RdKVxuICAgICAgLmpvaW4oJycpXG4gICk7XG59XG5cbi8qKlxuICogRGVjb2RlIGEgS2FzcGEgYmVjaDMyLWxpa2UgYWRkcmVzcy5cbiAqIFJldHVybnMgeyBwcmVmaXgsIGRhdGEgfSBvciB0aHJvd3Mgb24gZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIGthc3BhY0RlY29kZShhZGRyZXNzOiBzdHJpbmcpOiB7IHByZWZpeDogc3RyaW5nOyBkYXRhOiBudW1iZXJbXSB9IHtcbiAgY29uc3QgY29sb25JZHggPSBhZGRyZXNzLmxhc3RJbmRleE9mKCc6Jyk7XG4gIGlmIChjb2xvbklkeCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJlZml4IHNlcGFyYXRvcicpO1xuICB9XG4gIGNvbnN0IHByZWZpeCA9IGFkZHJlc3Muc2xpY2UoMCwgY29sb25JZHgpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGVuY29kZWQgPSBhZGRyZXNzLnNsaWNlKGNvbG9uSWR4ICsgMSkudG9Mb3dlckNhc2UoKTtcblxuICBjb25zdCBkYXRhOiBudW1iZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGMgb2YgZW5jb2RlZCkge1xuICAgIGNvbnN0IHZhbCA9IENIQVJTRVRfUkVWRVJTRVtjXTtcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXI6ICR7Y31gKTtcbiAgICB9XG4gICAgZGF0YS5wdXNoKHZhbCk7XG4gIH1cblxuICBpZiAoIXZlcmlmeUNoZWNrc3VtKHByZWZpeCwgZGF0YSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2hlY2tzdW0nKTtcbiAgfVxuXG4gIHJldHVybiB7IHByZWZpeCwgZGF0YTogZGF0YS5zbGljZSgwLCAtOCkgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBLYXNwYSBhZGRyZXNzIChtYWlubmV0IG9yIHRlc3RuZXQpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWFkZHJlc3MgfHwgdHlwZW9mIGFkZHJlc3MgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY29sb25JZHggPSBhZGRyZXNzLmxhc3RJbmRleE9mKCc6Jyk7XG4gIGlmIChjb2xvbklkeCA8IDEpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcmVmaXggPSBhZGRyZXNzLnNsaWNlKDAsIGNvbG9uSWR4KS50b0xvd2VyQ2FzZSgpO1xuICBpZiAocHJlZml4ICE9PSBNQUlOTkVUX1BSRUZJWCAmJiBwcmVmaXggIT09IFRFU1RORVRfUFJFRklYKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkZWNvZGVkID0ga2FzcGFjRGVjb2RlKGFkZHJlc3MpO1xuICAgIHJldHVybiBkZWNvZGVkLmRhdGEubGVuZ3RoID4gMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgS2FzcGEgbWFpbm5ldCBhZGRyZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTWFpbm5ldEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3MpICYmIGFkZHJlc3MudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE1BSU5ORVRfUFJFRklYICsgJzonKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBLYXNwYSB0ZXN0bmV0IGFkZHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUZXN0bmV0QWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVmFsaWRLYXNwYUFkZHJlc3MoYWRkcmVzcykgJiYgYWRkcmVzcy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoVEVTVE5FVF9QUkVGSVggKyAnOicpO1xufVxuXG4vKipcbiAqIERlY29kZSBhIEthc3BhIGFkZHJlc3MgdG8gaXRzIFAyUEsgc2NyaXB0UHVibGljS2V5IGhleCBzdHJpbmcuXG4gKlxuICogUmV2ZXJzZXMgcHViS2V5VG9LYXNwYUFkZHJlc3M6IGRlY29kZXMgdGhlIGJlY2gzMiBwYXlsb2FkLCByZWFkcyB0aGUgdmVyc2lvblxuICogYnl0ZSB0byBkZXRlcm1pbmUgdGhlIHNjcmlwdCB0eXBlLCBhbmQgYnVpbGRzIHRoZSBsb2NraW5nIHNjcmlwdC5cbiAqXG4gKiAgIHYwIChTY2hub3JyKTogMHgyMCB8fCB4T25seVB1YktleSgzMkIpICAgICAgfHwgMHhBQyAoT3BDaGVja1NpZylcbiAqICAgdjEgKEVDRFNBKTogICAweDIxIHx8IGNvbXByZXNzZWRQdWJLZXkoMzNCKSAgfHwgMHhBQiAoT3BDaGVja1NpZ0VDRFNBKVxuICpcbiAqIFVzZWQgYnkgVHJhbnNhY3Rpb25CdWlsZGVyIHRvIHBvcHVsYXRlIG91dHB1dCBzY3JpcHRQdWJsaWNLZXlzIGZyb20gYWRkcmVzc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkcmVzc1RvU2NyaXB0UHVibGljS2V5KGFkZHJlc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgZGF0YTogd29yZHMgfSA9IGthc3BhY0RlY29kZShhZGRyZXNzKTtcbiAgY29uc3QgcGF5bG9hZCA9IEJ1ZmZlci5mcm9tKGNvbnZlcnRCaXRzKEJ1ZmZlci5mcm9tKHdvcmRzKSwgNSwgOCwgZmFsc2UpKTtcblxuICAvLyBGaXJzdCBieXRlIGlzIHRoZSB2ZXJzaW9uIC8gYWRkcmVzcyB0eXBlLlxuICBjb25zdCB2ZXJzaW9uID0gcGF5bG9hZFswXTtcbiAgY29uc3Qga2V5Qnl0ZXMgPSBwYXlsb2FkLnNsaWNlKDEpO1xuXG4gIGlmICh2ZXJzaW9uID09PSBLYXNwYUFkZHJlc3NUeXBlLlNDSE5PUlIpIHtcbiAgICAvLyB2MDoga2V5Qnl0ZXMgaXMgMzItYnl0ZSB4LW9ubHkgcHVia2V5XG4gICAgaWYgKGtleUJ5dGVzLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBTY2hub3JyIGFkZHJlc3MgcGF5bG9hZCBsZW5ndGg6ICR7a2V5Qnl0ZXMubGVuZ3RofWApO1xuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oWzB4MjBdKSwga2V5Qnl0ZXMsIEJ1ZmZlci5mcm9tKFsweGFjXSldKS50b1N0cmluZygnaGV4Jyk7XG4gIH0gZWxzZSBpZiAodmVyc2lvbiA9PT0gS2FzcGFBZGRyZXNzVHlwZS5FQ0RTQSkge1xuICAgIC8vIHYxOiBrZXlCeXRlcyBpcyAzMy1ieXRlIGNvbXByZXNzZWQgcHVia2V5XG4gICAgaWYgKGtleUJ5dGVzLmxlbmd0aCAhPT0gMzMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBFQ0RTQSBhZGRyZXNzIHBheWxvYWQgbGVuZ3RoOiAke2tleUJ5dGVzLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKFsweDIxXSksIGtleUJ5dGVzLCBCdWZmZXIuZnJvbShbMHhhYl0pXSkudG9TdHJpbmcoJ2hleCcpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBLYXNwYSBhZGRyZXNzIHZlcnNpb246ICR7dmVyc2lvbn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIERlcml2ZSBhIEthc3BhIFAyUEsgYWRkcmVzcyBmcm9tIGEgY29tcHJlc3NlZCBzZWNwMjU2azEgcHVibGljIGtleS5cbiAqXG4gKiBAcGFyYW0gY29tcHJlc3NlZFB1YktleSAtIDMzLWJ5dGUgY29tcHJlc3NlZCBzZWNwMjU2azEgcHVibGljIGtleSAoaGV4IHN0cmluZyBvciBCdWZmZXIpXG4gKiBAcGFyYW0gaHJwICAgICAgICAgICAgICAtIGh1bWFuLXJlYWRhYmxlIHBhcnQgKCdrYXNwYScgb3IgJ2thc3BhdGVzdCcpXG4gKiBAcGFyYW0gdHlwZSAgICAgICAgICAgICAtIGFkZHJlc3MgdHlwZSAoZGVmYXVsdDogU0NITk9SUiAvIHYwKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHViS2V5VG9LYXNwYUFkZHJlc3MoXG4gIGNvbXByZXNzZWRQdWJLZXk6IHN0cmluZyB8IEJ1ZmZlcixcbiAgaHJwOiBzdHJpbmcsXG4gIHR5cGU6IEthc3BhQWRkcmVzc1R5cGUgPSBLYXNwYUFkZHJlc3NUeXBlLlNDSE5PUlJcbik6IHN0cmluZyB7XG4gIGNvbnN0IHB1YktleUJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKGNvbXByZXNzZWRQdWJLZXkpXG4gICAgPyBjb21wcmVzc2VkUHViS2V5XG4gICAgOiBCdWZmZXIuZnJvbShjb21wcmVzc2VkUHViS2V5IGFzIHN0cmluZywgJ2hleCcpO1xuXG4gIGlmIChwdWJLZXlCeXRlcy5sZW5ndGggIT09IDMzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAzMy1ieXRlIGNvbXByZXNzZWQgcHVibGljIGtleSwgZ290ICR7cHViS2V5Qnl0ZXMubGVuZ3RofWApO1xuICB9XG5cbiAgLy8gU2Nobm9yciAodjApOiBwYXlsb2FkIHVzZXMgdGhlIDMyLWJ5dGUgeC1vbmx5IGtleSAoZHJvcCB0aGUgMDIvMDMgcHJlZml4KS5cbiAgLy8gRUNEU0EgICh2MSk6IHBheWxvYWQgdXNlcyB0aGUgZnVsbCAzMy1ieXRlIGNvbXByZXNzZWQga2V5IChwcmVmaXggYnl0ZSBrZXB0KS5cbiAgY29uc3Qga2V5UGF5bG9hZCA9IHR5cGUgPT09IEthc3BhQWRkcmVzc1R5cGUuU0NITk9SUiA/IHB1YktleUJ5dGVzLnNsaWNlKDEpIDogcHViS2V5Qnl0ZXM7XG4gIGNvbnN0IHBheWxvYWQgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShbdHlwZV0pLCBrZXlQYXlsb2FkXSk7XG4gIGNvbnN0IHdvcmRzID0gY29udmVydEJpdHMocGF5bG9hZCwgOCwgNSwgdHJ1ZSk7XG5cbiAgcmV0dXJuIGthc3BhRW5jb2RlKGhycCwgd29yZHMpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIHNlY3AyNTZrMSBwdWJsaWMga2V5IChjb21wcmVzc2VkIG9yIHVuY29tcHJlc3NlZClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQdWJsaWNLZXkocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFwdWIgfHwgdHlwZW9mIHB1YiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShwdWIsICdoZXgnKTtcbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMzMpIHtcbiAgICAgIHJldHVybiBidWZbMF0gPT09IDB4MDIgfHwgYnVmWzBdID09PSAweDAzO1xuICAgIH1cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gNjUpIHtcbiAgICAgIHJldHVybiBidWZbMF0gPT09IDB4MDQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgc2VjcDI1NmsxIHByaXZhdGUga2V5ICgzMi1ieXRlIGhleClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcml2YXRlS2V5KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghcHJ2IHx8IHR5cGVvZiBwcnYgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChpc1ZhbGlkWHBydihwcnYpIHx8IGlzVmFsaWRYcHViKHBydikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHBydi5zbGljZSgwLCA2NCksICdoZXgnKTtcbiAgICByZXR1cm4gYnVmLmxlbmd0aCA9PT0gMzI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIHRyYW5zYWN0aW9uIElEICg2NC1jaGFyIGhleClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL15bMC05YS1mQS1GXXs2NH0kLy50ZXN0KHR4SWQpO1xufVxuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNWYWxpZEthc3BhQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXlswLTlhLWZBLUZdezY0fSQvLnRlc3QoaGFzaCk7XG4gIH1cblxuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1ZhbGlkUHJpdmF0ZUtleShrZXkpO1xuICB9XG5cbiAgaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1ZhbGlkUHVibGljS2V5KGtleSk7XG4gIH1cblxuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eWzAtOWEtZkEtRl17MTI4LDEzMH0kLy50ZXN0KHNpZ25hdHVyZSk7XG4gIH1cblxuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNWYWxpZFRyYW5zYWN0aW9uSWQodHhJZCk7XG4gIH1cbn1cblxuY29uc3QgdXRpbHMgPSBuZXcgVXRpbHMoKTtcbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
@@ -4,7 +4,7 @@ exports.register = void 0;
4
4
  const kaspa_1 = require("./kaspa");
5
5
  const register = (sdk) => {
6
6
  sdk.register('kaspa', kaspa_1.Kaspa.createInstance);
7
- sdk.register('tkaspa', kaspa_1.Kaspa.createInstance);
7
+ sdk.register('tkaspa', kaspa_1.Tkaspa.createInstance);
8
8
  };
9
9
  exports.register = register;
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQWdDO0FBRXpCLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYyxFQUFRLEVBQUU7SUFDL0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsYUFBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGFBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFIVyxRQUFBLFFBQVEsWUFHbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBLYXNwYSB9IGZyb20gJy4va2FzcGEnO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgc2RrLnJlZ2lzdGVyKCdrYXNwYScsIEthc3BhLmNyZWF0ZUluc3RhbmNlKTtcbiAgc2RrLnJlZ2lzdGVyKCd0a2FzcGEnLCBLYXNwYS5jcmVhdGVJbnN0YW5jZSk7XG59O1xuIl19
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQXdDO0FBRWpDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYyxFQUFRLEVBQUU7SUFDL0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsYUFBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGNBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFIVyxRQUFBLFFBQVEsWUFHbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBLYXNwYSwgVGthc3BhIH0gZnJvbSAnLi9rYXNwYSc7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlciA9IChzZGs6IEJpdEdvQmFzZSk6IHZvaWQgPT4ge1xuICBzZGsucmVnaXN0ZXIoJ2thc3BhJywgS2FzcGEuY3JlYXRlSW5zdGFuY2UpO1xuICBzZGsucmVnaXN0ZXIoJ3RrYXNwYScsIFRrYXNwYS5jcmVhdGVJbnN0YW5jZSk7XG59O1xuIl19
@@ -13,17 +13,29 @@ export declare const KEYS: {
13
13
  export declare const ADDRESSES: {
14
14
  valid: string;
15
15
  testnet: string;
16
+ validEcdsa: string;
17
+ testnetEcdsa: string;
16
18
  invalid: string;
17
19
  sender: string;
18
20
  recipient: string;
19
21
  };
20
22
  export declare const SCRIPT_PUBLIC_KEY: string;
23
+ export declare const ECDSA_SCRIPT_PUBLIC_KEY: string;
21
24
  export declare const UTXOS: {
22
25
  readonly simple: KaspaUtxoInput;
23
26
  readonly second: KaspaUtxoInput;
27
+ /** ECDSA v1 input — scriptPublicKey ends with 0xAB */
28
+ readonly ecdsa: KaspaUtxoInput;
29
+ readonly ecdsaSecond: KaspaUtxoInput;
24
30
  };
25
31
  export declare const TRANSACTIONS: {
26
32
  readonly simple: KaspaTransactionData;
27
33
  readonly multiInput: KaspaTransactionData;
34
+ /** Single ECDSA (v1) input */
35
+ readonly simpleEcdsa: KaspaTransactionData;
36
+ /** Two ECDSA inputs */
37
+ readonly multiInputEcdsa: KaspaTransactionData;
38
+ /** Mixed: first input Schnorr, second input ECDSA */
39
+ readonly mixedSchnorrEcdsa: KaspaTransactionData;
28
40
  };
29
41
  //# sourceMappingURL=kaspa.fixtures.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kaspa.fixtures.d.ts","sourceRoot":"","sources":["../../../test/fixtures/kaspa.fixtures.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG3E,eAAO,MAAM,YAAY,qEAAqE,CAAC;AAO/F,eAAO,MAAM,IAAI;;;CAGhB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAmB,CAAC;AAGlD,eAAO,MAAM,KAAK;qBACF,cAAc;qBAUd,cAAc;CAU7B,CAAC;AAGF,eAAO,MAAM,YAAY;qBACT,oBAAoB;yBAmBhB,oBAAoB;CAmBvC,CAAC"}
1
+ {"version":3,"file":"kaspa.fixtures.d.ts","sourceRoot":"","sources":["../../../test/fixtures/kaspa.fixtures.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG3E,eAAO,MAAM,YAAY,qEAAqE,CAAC;AAa/F,eAAO,MAAM,IAAI;;;CAGhB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;;;CAQrB,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAmB,CAAC;AAClD,eAAO,MAAM,uBAAuB,QAAwB,CAAC;AAG7D,eAAO,MAAM,KAAK;qBACF,cAAc;qBAUd,cAAc;IAU5B,sDAAsD;oBACzC,cAAc;0BAUR,cAAc;CAUlC,CAAC;AAGF,eAAO,MAAM,YAAY;qBACT,oBAAoB;yBAahB,oBAAoB;IAatC,8BAA8B;0BACX,oBAAoB;IAmBvC,uBAAuB;8BACA,oBAAoB;IAmB3C,qDAAqD;gCAC5B,oBAAoB;CAa9C,CAAC"}