@bitgo-beta/sdk-coin-kaspa 0.0.1-alpha.6 → 0.0.1-alpha.7
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.
- package/dist/src/lib/transaction.d.ts +28 -0
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +56 -1
- package/dist/src/lib/transactionBuilder.d.ts +17 -1
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +18 -1
- package/dist/src/lib/transactionBuilderFactory.d.ts +7 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +10 -1
- package/dist/test/unit/transaction.test.js +86 -1
- package/dist/test/unit/transactionBuilder.test.js +42 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -6,6 +6,34 @@ export declare class Transaction extends BaseTransaction {
|
|
|
6
6
|
/** @inheritDoc */
|
|
7
7
|
get id(): string;
|
|
8
8
|
get txData(): KaspaTransactionData;
|
|
9
|
+
/**
|
|
10
|
+
* Get the transaction fee in sompi.
|
|
11
|
+
* If fee was explicitly set, returns that. Otherwise computes from inputs - outputs.
|
|
12
|
+
*/
|
|
13
|
+
get getFee(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Returns the signable payload for TSS/MPC signing.
|
|
16
|
+
*
|
|
17
|
+
* For Kaspa, each input has its own sighash (BIP-143-like scheme with Blake2b).
|
|
18
|
+
* This returns the sighash for the first input, which is what TSS signs.
|
|
19
|
+
* For multi-input transactions, all inputs share the same key so the same
|
|
20
|
+
* Schnorr signature is applied to each input's individual sighash in addSignature().
|
|
21
|
+
*
|
|
22
|
+
* @see ADA's Transaction.signablePayload for the equivalent pattern
|
|
23
|
+
*/
|
|
24
|
+
get signablePayload(): Buffer;
|
|
25
|
+
/**
|
|
26
|
+
* Apply a Schnorr signature produced by TSS/MPC signing to all inputs.
|
|
27
|
+
*
|
|
28
|
+
* In TSS flow, the keyserver signs the first input's sighash. Since each input
|
|
29
|
+
* has a different sighash, we re-sign each input individually using the
|
|
30
|
+
* x-only public key derived from the compressed public key.
|
|
31
|
+
*
|
|
32
|
+
* @param publicKey compressed secp256k1 public key (33 bytes hex)
|
|
33
|
+
* @param signature 64-byte Schnorr signature buffer (from TSS)
|
|
34
|
+
* @param sigHashType SigHash type (default: SIGHASH_ALL)
|
|
35
|
+
*/
|
|
36
|
+
addSignature(publicKey: string, signature: Buffer, sigHashType?: number): void;
|
|
9
37
|
/**
|
|
10
38
|
* Sign all inputs with the given private key using Schnorr signatures.
|
|
11
39
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAGvE,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAS,CAAC,OAAO,EAAE,oBAAoB,CAAC;gBAE5B,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,oBAAoB;IASvD,kBAAkB;IAClB,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,MAAM,IAAI,oBAAoB,CAEjC;IAED;;;;;OAKG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB,GAAG,IAAI;IAajE;;;;;;OAMG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB,GAAG,OAAO;IAgBlG;;OAEG;IACH,kBAAkB,IAAI,sBAAsB;IA8B5C;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,KAAK,IAAI,MAAM;IAIf;;OAEG;IACH,MAAM,IAAI,oBAAoB;IAI9B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW;IAKtD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,WAAW;IAK/E,kBAAkB;IAClB,IAAI,SAAS,IAAI,MAAM,EAAE,CAExB;IAED,kBAAkB;IAClB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;CAGhC"}
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAGvE,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAS,CAAC,OAAO,EAAE,oBAAoB,CAAC;gBAE5B,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,oBAAoB;IASvD,kBAAkB;IAClB,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,MAAM,IAAI,oBAAoB,CAEjC;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,MAAM,CAanB;IAED;;;;;;;;;OASG;IACH,IAAI,eAAe,IAAI,MAAM,CAK5B;IAED;;;;;;;;;;OAUG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB,GAAG,IAAI;IAY3F;;;;;OAKG;IACH,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB,GAAG,IAAI;IAajE;;;;;;OAMG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAE,MAAoB,GAAG,OAAO;IAgBlG;;OAEG;IACH,kBAAkB,IAAI,sBAAsB;IA8B5C;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACH,KAAK,IAAI,MAAM;IAIf;;OAEG;IACH,MAAM,IAAI,oBAAoB;IAI9B;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW;IAKtD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,oBAAoB,GAAG,WAAW;IAK/E,kBAAkB;IAClB,IAAI,SAAS,IAAI,MAAM,EAAE,CAExB;IAED,kBAAkB;IAClB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;CAGhC"}
|
|
@@ -20,6 +20,61 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
20
20
|
get txData() {
|
|
21
21
|
return this._txData;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the transaction fee in sompi.
|
|
25
|
+
* If fee was explicitly set, returns that. Otherwise computes from inputs - outputs.
|
|
26
|
+
*/
|
|
27
|
+
get getFee() {
|
|
28
|
+
if (this._txData.fee) {
|
|
29
|
+
return this._txData.fee;
|
|
30
|
+
}
|
|
31
|
+
let totalIn = BigInt(0);
|
|
32
|
+
let totalOut = BigInt(0);
|
|
33
|
+
for (const input of this._txData.inputs) {
|
|
34
|
+
totalIn += BigInt(input.amount);
|
|
35
|
+
}
|
|
36
|
+
for (const output of this._txData.outputs) {
|
|
37
|
+
totalOut += BigInt(output.amount);
|
|
38
|
+
}
|
|
39
|
+
return (totalIn - totalOut).toString();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns the signable payload for TSS/MPC signing.
|
|
43
|
+
*
|
|
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().
|
|
48
|
+
*
|
|
49
|
+
* @see ADA's Transaction.signablePayload for the equivalent pattern
|
|
50
|
+
*/
|
|
51
|
+
get signablePayload() {
|
|
52
|
+
if (this._txData.inputs.length === 0) {
|
|
53
|
+
throw new Error('Cannot compute signablePayload: no inputs');
|
|
54
|
+
}
|
|
55
|
+
return (0, sighash_1.computeKaspaSigningHash)(this._txData, 0, sighash_1.SIGHASH_ALL);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Apply a Schnorr signature produced by TSS/MPC signing to all inputs.
|
|
59
|
+
*
|
|
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.
|
|
63
|
+
*
|
|
64
|
+
* @param publicKey compressed secp256k1 public key (33 bytes hex)
|
|
65
|
+
* @param signature 64-byte Schnorr signature buffer (from TSS)
|
|
66
|
+
* @param sigHashType SigHash type (default: SIGHASH_ALL)
|
|
67
|
+
*/
|
|
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}`);
|
|
71
|
+
}
|
|
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');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
23
78
|
/**
|
|
24
79
|
* Sign all inputs with the given private key using Schnorr signatures.
|
|
25
80
|
*
|
|
@@ -130,4 +185,4 @@ class Transaction extends sdk_core_1.BaseTransaction {
|
|
|
130
185
|
}
|
|
131
186
|
}
|
|
132
187
|
exports.Transaction = Transaction;
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFpRjtBQUNqRixxREFBNEM7QUFFNUMsdUNBQWlFO0FBRWpFLE1BQWEsV0FBWSxTQUFRLDBCQUFlO0lBRzlDLFlBQVksSUFBWSxFQUFFLE1BQTZCO1FBQ3JELEtBQUssQ0FBQyxFQUFFLElBQUksRUFBUyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUk7WUFDdkIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsVUFBa0IsRUFBRSxjQUFzQixxQkFBVztRQUN4RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwRCxNQUFNLE9BQU8sR0FBRyxJQUFBLGlDQUF1QixFQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sR0FBRyxHQUFH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SUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTyxDQUFDLElBQWE7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUE5SUQsa0NBOElDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUtleSwgQmFzZVRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBlY2MgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnO1xuaW1wb3J0IHsgS2FzcGFUcmFuc2FjdGlvbkRhdGEsIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoLCBTSUdIQVNIX0FMTCB9IGZyb20gJy4vc2lnaGFzaCc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfdHhEYXRhOiBLYXNwYVRyYW5zYWN0aW9uRGF0YTtcblxuICBjb25zdHJ1Y3Rvcihjb2luOiBzdHJpbmcsIHR4RGF0YT86IEthc3BhVHJhbnNhY3Rpb25EYXRhKSB7XG4gICAgc3VwZXIoeyBjb2luIH0gYXMgYW55KTtcbiAgICB0aGlzLl90eERhdGEgPSB0eERhdGEgfHwge1xuICAgICAgdmVyc2lvbjogMCxcbiAgICAgIGlucHV0czogW10sXG4gICAgICBvdXRwdXRzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eERhdGEuaWQgfHwgJyc7XG4gIH1cblxuICBnZXQgdHhEYXRhKCk6IEthc3BhVHJhbnNhY3Rpb25EYXRhIHtcbiAgICByZXR1cm4gdGhpcy5fdHhEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYWxsIGlucHV0cyB3aXRoIHRoZSBnaXZlbiBwcml2YXRlIGtleSB1c2luZyBTY2hub3JyIHNpZ25hdHVyZXMuXG4gICAqXG4gICAqIEBwYXJhbSBwcml2YXRlS2V5IDMyLWJ5dGUgcHJpdmF0ZSBrZXkgYnVmZmVyXG4gICAqIEBwYXJhbSBzaWdIYXNoVHlwZSBTaWdIYXNoIHR5cGUgKGRlZmF1bHQ6IFNJR0hBU0hfQUxMID0gMHgwMSlcbiAgICovXG4gIHNpZ24ocHJpdmF0ZUtleTogQnVmZmVyLCBzaWdIYXNoVHlwZTogbnVtYmVyID0gU0lHSEFTSF9BTEwpOiB2b2lkIHtcbiAgICBpZiAocHJpdmF0ZUtleS5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIDMyLWJ5dGUgcHJpdmF0ZSBrZXksIGdvdCAke3ByaXZhdGVLZXkubGVuZ3RofWApO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3R4RGF0YS5pbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHNpZ0hhc2ggPSBjb21wdXRlS2FzcGFTaWduaW5nSGFzaCh0aGlzLl90eERhdGEsIGksIHNpZ0hhc2hUeXBlKTtcbiAgICAgIGNvbnN0IHNpZyA9IGVjYy5zaWduU2Nobm9ycihzaWdIYXNoLCBwcml2YXRlS2V5KTtcbiAgICAgIC8vIDY1LWJ5dGUgc2lnbmF0dXJlOiA2NC1ieXRlIFNjaG5vcnIgc2lnICsgMS1ieXRlIHNpZ2hhc2ggdHlwZVxuICAgICAgY29uc3Qgc2lnV2l0aFR5cGUgPSBCdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShzaWcpLCBCdWZmZXIuZnJvbShbc2lnSGFzaFR5cGVdKV0pO1xuICAgICAgdGhpcy5fdHhEYXRhLmlucHV0c1tpXS5zaWduYXR1cmVTY3JpcHQgPSBzaWdXaXRoVHlwZS50b1N0cmluZygnaGV4Jyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGEgU2Nobm9yciBzaWduYXR1cmUgb24gYSBzcGVjaWZpYyBpbnB1dCBpcyB2YWxpZC5cbiAgICpcbiAgICogQHBhcmFtIHB1YmxpY0tleSAzMy1ieXRlIGNvbXByZXNzZWQgcHVibGljIGtleSAob3IgMzItYnl0ZSB4LW9ubHkpXG4gICAqIEBwYXJhbSBpbnB1dEluZGV4IEluZGV4IG9mIHRoZSBpbnB1dCB0byB2ZXJpZnlcbiAgICogQHBhcmFtIHNpZ0hhc2hUeXBlIFNpZ0hhc2ggdHlwZSB1c2VkIHdoZW4gc2lnbmluZ1xuICAgKi9cbiAgdmVyaWZ5U2lnbmF0dXJlKHB1YmxpY0tleTogQnVmZmVyLCBpbnB1dEluZGV4OiBudW1iZXIsIHNpZ0hhc2hUeXBlOiBudW1iZXIgPSBTSUdIQVNIX0FMTCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fdHhEYXRhLmlucHV0c1tpbnB1dEluZGV4XTtcbiAgICBpZiAoIWlucHV0Py5zaWduYXR1cmVTY3JpcHQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2lnQnl0ZXMgPSBCdWZmZXIuZnJvbShpbnB1dC5zaWduYXR1cmVTY3JpcHQsICdoZXgnKTtcbiAgICBpZiAoc2lnQnl0ZXMubGVuZ3RoIDwgNjUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2lnID0gc2lnQnl0ZXMuc2xpY2UoMCwgNjQpO1xuICAgIGNvbnN0IHNpZ0hhc2ggPSBjb21wdXRlS2FzcGFTaWduaW5nSGFzaCh0aGlzLl90eERhdGEsIGlucHV0SW5kZXgsIHNpZ0hhc2hUeXBlKTtcbiAgICAvLyBBY2NlcHQgMzMtYnl0ZSBjb21wcmVzc2VkIG9yIDMyLWJ5dGUgeC1vbmx5XG4gICAgY29uc3QgeE9ubHlQdWIgPSBwdWJsaWNLZXkubGVuZ3RoID09PSAzMyA/IHB1YmxpY0tleS5zbGljZSgxKSA6IHB1YmxpY0tleTtcbiAgICByZXR1cm4gZWNjLnZlcmlmeVNjaG5vcnIoc2lnSGFzaCwgeE9ubHlQdWIsIHNpZyk7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbiB0aGUgdHJhbnNhY3Rpb24gaW4gYSBodW1hbi1yZWFkYWJsZSBmb3JtYXQuXG4gICAqL1xuICBleHBsYWluVHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gICAgbGV0IHRvdGFsSW4gPSBCaWdJbnQoMCk7XG4gICAgbGV0IHRvdGFsT3V0ID0gQmlnSW50KDApO1xuXG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiB0aGlzLl90eERhdGEuaW5wdXRzKSB7XG4gICAgICB0b3RhbEluICs9IEJpZ0ludChpbnB1dC5hbW91bnQpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiB0aGlzLl90eERhdGEub3V0cHV0cykge1xuICAgICAgdG90YWxPdXQgKz0gQmlnSW50KG91dHB1dC5hbW91bnQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZlZSA9ICh0b3RhbEluIC0gdG90YWxPdXQpLnRvU3RyaW5nKCk7XG5cbiAgICBjb25zdCBvdXRwdXRzID0gdGhpcy5fdHhEYXRhLm91dHB1dHMubWFwKChvKSA9PiAoe1xuICAgICAgYWRkcmVzczogby5hZGRyZXNzLFxuICAgICAgYW1vdW50OiBvLmFtb3VudCxcbiAgICB9KSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuX3R4RGF0YS5pZCB8fCAnJyxcbiAgICAgIHR5cGU6IFRyYW5zYWN0aW9uVHlwZS5TZW5kLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudDogdG90YWxPdXQudG9TdHJpbmcoKSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICBmZWU6IHsgZmVlOiB0aGlzLl90eERhdGEuZmVlIHx8IGZlZSB9LFxuICAgICAgaW5wdXRzOiB0aGlzLl90eERhdGEuaW5wdXRzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRoZSB0cmFuc2FjdGlvbiB0byBhIEpTT04gc3RyaW5nIChicm9hZGNhc3QgZm9ybWF0KS5cbiAgICovXG4gIHRvQnJvYWRjYXN0Rm9ybWF0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuX3R4RGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHRyYW5zYWN0aW9uIHRvIGhleCAoSlNPTi1lbmNvZGVkIHRoZW4gaGV4LWVuY29kZWQpLlxuICAgKi9cbiAgdG9IZXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy50b0Jyb2FkY2FzdEZvcm1hdCgpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRyYW5zYWN0aW9uIGRhdGEgYXMgYSBwbGFpbiBvYmplY3QuXG4gICAqL1xuICB0b0pzb24oKTogS2FzcGFUcmFuc2FjdGlvbkRhdGEge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX3R4RGF0YSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGZyb20gaGV4LlxuICAgKi9cbiAgc3RhdGljIGZyb21IZXgoY29pbjogc3RyaW5nLCBoZXg6IHN0cmluZyk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShCdWZmZXIuZnJvbShoZXgsICdoZXgnKS50b1N0cmluZygpKTtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKGNvaW4sIGpzb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VyaWFsaXplIGZyb20gSlNPTiBzdHJpbmcgb3Igb2JqZWN0LlxuICAgKi9cbiAgc3RhdGljIGZyb21Kc29uKGNvaW46IHN0cmluZywgZGF0YTogc3RyaW5nIHwgS2FzcGFUcmFuc2FjdGlvbkRhdGEpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHhEYXRhOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZGF0YSkgOiBkYXRhO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29pbiwgdHhEYXRhKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXQgc2lnbmF0dXJlKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdHhEYXRhLmlucHV0cy5tYXAoKGkpID0+IGkuc2lnbmF0dXJlU2NyaXB0IHx8ICcnKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBjYW5TaWduKF9rZXk6IEJhc2VLZXkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFpRjtBQUNqRixxREFBNEM7QUFFNUMsdUNBQWlFO0FBRWpFLE1BQWEsV0FBWSxTQUFRLDBCQUFlO0lBRzlDLFlBQVksSUFBWSxFQUFFLE1BQTZCO1FBQ3JELEtBQUssQ0FBQyxFQUFFLElBQUksRUFBUyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUk7WUFDdkIsT0FBTyxFQUFFLENBQUM7WUFDVixNQUFNLEVBQUUsRUFBRTtZQUNWLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBSSxFQUFFO1FBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENB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LENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQVksRUFBRSxJQUFtQztRQUMvRCxNQUFNLE1BQU0sR0FBeUIsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEYsT0FBTyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLE9BQU8sQ0FBQyxJQUFhO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBek1ELGtDQXlNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VLZXksIEJhc2VUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IEthc3BhVHJhbnNhY3Rpb25EYXRhLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi9pZmFjZSc7XG5pbXBvcnQgeyBjb21wdXRlS2FzcGFTaWduaW5nSGFzaCwgU0lHSEFTSF9BTEwgfSBmcm9tICcuL3NpZ2hhc2gnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb24ge1xuICBwcm90ZWN0ZWQgX3R4RGF0YTogS2FzcGFUcmFuc2FjdGlvbkRhdGE7XG5cbiAgY29uc3RydWN0b3IoY29pbjogc3RyaW5nLCB0eERhdGE/OiBLYXNwYVRyYW5zYWN0aW9uRGF0YSkge1xuICAgIHN1cGVyKHsgY29pbiB9IGFzIGFueSk7XG4gICAgdGhpcy5fdHhEYXRhID0gdHhEYXRhIHx8IHtcbiAgICAgIHZlcnNpb246IDAsXG4gICAgICBpbnB1dHM6IFtdLFxuICAgICAgb3V0cHV0czogW10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXQgaWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdHhEYXRhLmlkIHx8ICcnO1xuICB9XG5cbiAgZ2V0IHR4RGF0YSgpOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX3R4RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGZlZSBpbiBzb21waS5cbiAgICogSWYgZmVlIHdhcyBleHBsaWNpdGx5IHNldCwgcmV0dXJucyB0aGF0LiBPdGhlcndpc2UgY29tcHV0ZXMgZnJvbSBpbnB1dHMgLSBvdXRwdXRzLlxuICAgKi9cbiAgZ2V0IGdldEZlZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl90eERhdGEuZmVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHhEYXRhLmZlZTtcbiAgICB9XG4gICAgbGV0IHRvdGFsSW4gPSBCaWdJbnQoMCk7XG4gICAgbGV0IHRvdGFsT3V0ID0gQmlnSW50KDApO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fdHhEYXRhLmlucHV0cykge1xuICAgICAgdG90YWxJbiArPSBCaWdJbnQoaW5wdXQuYW1vdW50KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdGhpcy5fdHhEYXRhLm91dHB1dHMpIHtcbiAgICAgIHRvdGFsT3V0ICs9IEJpZ0ludChvdXRwdXQuYW1vdW50KTtcbiAgICB9XG4gICAgcmV0dXJuICh0b3RhbEluIC0gdG90YWxPdXQpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2lnbmFibGUgcGF5bG9hZCBmb3IgVFNTL01QQyBzaWduaW5nLlxuICAgKlxuICAgKiBGb3IgS2FzcGEsIGVhY2ggaW5wdXQgaGFzIGl0cyBvd24gc2lnaGFzaCAoQklQLTE0My1saWtlIHNjaGVtZSB3aXRoIEJsYWtlMmIpLlxuICAgKiBUaGlzIHJldHVybnMgdGhlIHNpZ2hhc2ggZm9yIHRoZSBmaXJzdCBpbnB1dCwgd2hpY2ggaXMgd2hhdCBUU1Mgc2lnbnMuXG4gICAqIEZvciBtdWx0aS1pbnB1dCB0cmFuc2FjdGlvbnMsIGFsbCBpbnB1dHMgc2hhcmUgdGhlIHNhbWUga2V5IHNvIHRoZSBzYW1lXG4gICAqIFNjaG5vcnIgc2lnbmF0dXJlIGlzIGFwcGxpZWQgdG8gZWFjaCBpbnB1dCdzIGluZGl2aWR1YWwgc2lnaGFzaCBpbiBhZGRTaWduYXR1cmUoKS5cbiAgICpcbiAgICogQHNlZSBBREEncyBUcmFuc2FjdGlvbi5zaWduYWJsZVBheWxvYWQgZm9yIHRoZSBlcXVpdmFsZW50IHBhdHRlcm5cbiAgICovXG4gIGdldCBzaWduYWJsZVBheWxvYWQoKTogQnVmZmVyIHtcbiAgICBpZiAodGhpcy5fdHhEYXRhLmlucHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXB1dGUgc2lnbmFibGVQYXlsb2FkOiBubyBpbnB1dHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgMCwgU0lHSEFTSF9BTEwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGEgU2Nobm9yciBzaWduYXR1cmUgcHJvZHVjZWQgYnkgVFNTL01QQyBzaWduaW5nIHRvIGFsbCBpbnB1dHMuXG4gICAqXG4gICAqIEluIFRTUyBmbG93LCB0aGUga2V5c2VydmVyIHNpZ25zIHRoZSBmaXJzdCBpbnB1dCdzIHNpZ2hhc2guIFNpbmNlIGVhY2ggaW5wdXRcbiAgICogaGFzIGEgZGlmZmVyZW50IHNpZ2hhc2gsIHdlIHJlLXNpZ24gZWFjaCBpbnB1dCBpbmRpdmlkdWFsbHkgdXNpbmcgdGhlXG4gICAqIHgtb25seSBwdWJsaWMga2V5IGRlcml2ZWQgZnJvbSB0aGUgY29tcHJlc3NlZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBAcGFyYW0gcHVibGljS2V5IGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmxpYyBrZXkgKDMzIGJ5dGVzIGhleClcbiAgICogQHBhcmFtIHNpZ25hdHVyZSA2NC1ieXRlIFNjaG5vcnIgc2lnbmF0dXJlIGJ1ZmZlciAoZnJvbSBUU1MpXG4gICAqIEBwYXJhbSBzaWdIYXNoVHlwZSBTaWdIYXNoIHR5cGUgKGRlZmF1bHQ6IFNJR0hBU0hfQUxMKVxuICAgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogc3RyaW5nLCBzaWduYXR1cmU6IEJ1ZmZlciwgc2lnSGFzaFR5cGU6IG51bWJlciA9IFNJR0hBU0hfQUxMKTogdm9pZCB7XG4gICAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDY0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIDY0LWJ5dGUgU2Nobm9yciBzaWduYXR1cmUsIGdvdCAke3NpZ25hdHVyZS5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl90eERhdGEuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBFYWNoIGlucHV0IGdldHMgdGhlIHNhbWUgc2lnbmF0dXJlIGZvcm1hdDogNjQtYnl0ZSBzaWcgKyBzaWdoYXNoIHR5cGUgYnl0ZVxuICAgICAgY29uc3Qgc2lnV2l0aFR5cGUgPSBCdWZmZXIuY29uY2F0KFtzaWduYXR1cmUsIEJ1ZmZlci5mcm9tKFtzaWdIYXNoVHlwZV0pXSk7XG4gICAgICB0aGlzLl90eERhdGEuaW5wdXRzW2ldLnNpZ25hdHVyZVNjcmlwdCA9IHNpZ1dpdGhUeXBlLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhbGwgaW5wdXRzIHdpdGggdGhlIGdpdmVuIHByaXZhdGUga2V5IHVzaW5nIFNjaG5vcnIgc2lnbmF0dXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHByaXZhdGVLZXkgMzItYnl0ZSBwcml2YXRlIGtleSBidWZmZXJcbiAgICogQHBhcmFtIHNpZ0hhc2hUeXBlIFNpZ0hhc2ggdHlwZSAoZGVmYXVsdDogU0lHSEFTSF9BTEwgPSAweDAxKVxuICAgKi9cbiAgc2lnbihwcml2YXRlS2V5OiBCdWZmZXIsIHNpZ0hhc2hUeXBlOiBudW1iZXIgPSBTSUdIQVNIX0FMTCk6IHZvaWQge1xuICAgIGlmIChwcml2YXRlS2V5Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgMzItYnl0ZSBwcml2YXRlIGtleSwgZ290ICR7cHJpdmF0ZUtleS5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fdHhEYXRhLmlucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaSwgc2lnSGFzaFR5cGUpO1xuICAgICAgY29uc3Qgc2lnID0gZWNjLnNpZ25TY2hub3JyKHNpZ0hhc2gsIHByaXZhdGVLZXkpO1xuICAgICAgLy8gNjUtYnl0ZSBzaWduYXR1cmU6IDY0LWJ5dGUgU2Nobm9yciBzaWcgKyAxLWJ5dGUgc2lnaGFzaCB0eXBlXG4gICAgICBjb25zdCBzaWdXaXRoVHlwZSA9IEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKHNpZyksIEJ1ZmZlci5mcm9tKFtzaWdIYXNoVHlwZV0pXSk7XG4gICAgICB0aGlzLl90eERhdGEuaW5wdXRzW2ldLnNpZ25hdHVyZVNjcmlwdCA9IHNpZ1dpdGhUeXBlLnRvU3RyaW5nKCdoZXgnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSBTY2hub3JyIHNpZ25hdHVyZSBvbiBhIHNwZWNpZmljIGlucHV0IGlzIHZhbGlkLlxuICAgKlxuICAgKiBAcGFyYW0gcHVibGljS2V5IDMzLWJ5dGUgY29tcHJlc3NlZCBwdWJsaWMga2V5IChvciAzMi1ieXRlIHgtb25seSlcbiAgICogQHBhcmFtIGlucHV0SW5kZXggSW5kZXggb2YgdGhlIGlucHV0IHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gc2lnSGFzaFR5cGUgU2lnSGFzaCB0eXBlIHVzZWQgd2hlbiBzaWduaW5nXG4gICAqL1xuICB2ZXJpZnlTaWduYXR1cmUocHVibGljS2V5OiBCdWZmZXIsIGlucHV0SW5kZXg6IG51bWJlciwgc2lnSGFzaFR5cGU6IG51bWJlciA9IFNJR0hBU0hfQUxMKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLl90eERhdGEuaW5wdXRzW2lucHV0SW5kZXhdO1xuICAgIGlmICghaW5wdXQ/LnNpZ25hdHVyZVNjcmlwdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzaWdCeXRlcyA9IEJ1ZmZlci5mcm9tKGlucHV0LnNpZ25hdHVyZVNjcmlwdCwgJ2hleCcpO1xuICAgIGlmIChzaWdCeXRlcy5sZW5ndGggPCA2NSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzaWcgPSBzaWdCeXRlcy5zbGljZSgwLCA2NCk7XG4gICAgY29uc3Qgc2lnSGFzaCA9IGNvbXB1dGVLYXNwYVNpZ25pbmdIYXNoKHRoaXMuX3R4RGF0YSwgaW5wdXRJbmRleCwgc2lnSGFzaFR5cGUpO1xuICAgIC8vIEFjY2VwdCAzMy1ieXRlIGNvbXByZXNzZWQgb3IgMzItYnl0ZSB4LW9ubHlcbiAgICBjb25zdCB4T25seVB1YiA9IHB1YmxpY0tleS5sZW5ndGggPT09IDMzID8gcHVibGljS2V5LnNsaWNlKDEpIDogcHVibGljS2V5O1xuICAgIHJldHVybiBlY2MudmVyaWZ5U2Nobm9ycihzaWdIYXNoLCB4T25seVB1Yiwgc2lnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluIHRoZSB0cmFuc2FjdGlvbiBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdC5cbiAgICovXG4gIGV4cGxhaW5UcmFuc2FjdGlvbigpOiBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgICBsZXQgdG90YWxJbiA9IEJpZ0ludCgwKTtcbiAgICBsZXQgdG90YWxPdXQgPSBCaWdJbnQoMCk7XG5cbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3R4RGF0YS5pbnB1dHMpIHtcbiAgICAgIHRvdGFsSW4gKz0gQmlnSW50KGlucHV0LmFtb3VudCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIHRoaXMuX3R4RGF0YS5vdXRwdXRzKSB7XG4gICAgICB0b3RhbE91dCArPSBCaWdJbnQob3V0cHV0LmFtb3VudCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmVlID0gKHRvdGFsSW4gLSB0b3RhbE91dCkudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IG91dHB1dHMgPSB0aGlzLl90eERhdGEub3V0cHV0cy5tYXAoKG8pID0+ICh7XG4gICAgICBhZGRyZXNzOiBvLmFkZHJlc3MsXG4gICAgICBhbW91bnQ6IG8uYW1vdW50LFxuICAgIH0pKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5fdHhEYXRhLmlkIHx8ICcnLFxuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlLlNlbmQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50OiB0b3RhbE91dC50b1N0cmluZygpLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIGZlZTogeyBmZWU6IHRoaXMuX3R4RGF0YS5mZWUgfHwgZmVlIH0sXG4gICAgICBpbnB1dHM6IHRoaXMuX3R4RGF0YS5pbnB1dHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdGhlIHRyYW5zYWN0aW9uIHRvIGEgSlNPTiBzdHJpbmcgKGJyb2FkY2FzdCBmb3JtYXQpLlxuICAgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5fdHhEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgdHJhbnNhY3Rpb24gdG8gaGV4IChKU09OLWVuY29kZWQgdGhlbiBoZXgtZW5jb2RlZCkuXG4gICAqL1xuICB0b0hleCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLnRvQnJvYWRjYXN0Rm9ybWF0KCkpLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJhbnNhY3Rpb24gZGF0YSBhcyBhIHBsYWluIG9iamVjdC5cbiAgICovXG4gIHRvSnNvbigpOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fdHhEYXRhIH07XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgZnJvbSBoZXguXG4gICAqL1xuICBzdGF0aWMgZnJvbUhleChjb2luOiBzdHJpbmcsIGhleDogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpLnRvU3RyaW5nKCkpO1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oY29pbiwganNvbik7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgZnJvbSBKU09OIHN0cmluZyBvciBvYmplY3QuXG4gICAqL1xuICBzdGF0aWMgZnJvbUpzb24oY29pbjogc3RyaW5nLCBkYXRhOiBzdHJpbmcgfCBLYXNwYVRyYW5zYWN0aW9uRGF0YSk6IFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0eERhdGE6IEthc3BhVHJhbnNhY3Rpb25EYXRhID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbihjb2luLCB0eERhdGEpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldCBzaWduYXR1cmUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90eERhdGEuaW5wdXRzLm1hcCgoaSkgPT4gaS5zaWduYXR1cmVTY3JpcHQgfHwgJycpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGNhblNpZ24oX2tleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
import { BaseTransactionBuilder, BaseTransaction, BaseKey } from '@bitgo-beta/sdk-core';
|
|
1
|
+
import { BaseTransactionBuilder, BaseTransaction, BaseKey, PublicKey as BasePublicKey } 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
10
|
export declare class TransactionBuilder extends BaseTransactionBuilder {
|
|
7
11
|
protected _transaction: Transaction;
|
|
8
12
|
protected _inputs: KaspaUtxoInput[];
|
|
9
13
|
protected _outputs: KaspaTransactionOutput[];
|
|
10
14
|
protected _fee: string;
|
|
11
15
|
protected _fromAddress: string;
|
|
16
|
+
protected _signatures: KaspaSignature[];
|
|
12
17
|
constructor(coinConfig: Readonly<CoinConfig>);
|
|
13
18
|
/** @inheritDoc */
|
|
14
19
|
protected get transaction(): BaseTransaction;
|
|
@@ -34,6 +39,16 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
|
|
|
34
39
|
* Add multiple UTXO inputs.
|
|
35
40
|
*/
|
|
36
41
|
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;
|
|
37
52
|
/** @inheritDoc */
|
|
38
53
|
protected fromImplementation(rawTransaction: string): Transaction;
|
|
39
54
|
/** @inheritDoc */
|
|
@@ -55,4 +70,5 @@ export declare class TransactionBuilder extends BaseTransactionBuilder {
|
|
|
55
70
|
/** @inheritDoc */
|
|
56
71
|
validateValue(value: BigNumber): void;
|
|
57
72
|
}
|
|
73
|
+
export {};
|
|
58
74
|
//# sourceMappingURL=transactionBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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"}
|
|
@@ -13,6 +13,7 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
13
13
|
this._outputs = [];
|
|
14
14
|
this._fee = constants_1.DEFAULT_FEE;
|
|
15
15
|
this._fromAddress = '';
|
|
16
|
+
this._signatures = [];
|
|
16
17
|
this._transaction = new transaction_1.Transaction(coinConfig.name);
|
|
17
18
|
}
|
|
18
19
|
/** @inheritDoc */
|
|
@@ -67,6 +68,18 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
67
68
|
utxos.forEach((u) => this.addInput(u));
|
|
68
69
|
return this;
|
|
69
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
|
+
}
|
|
70
83
|
/** @inheritDoc */
|
|
71
84
|
fromImplementation(rawTransaction) {
|
|
72
85
|
const tx = transaction_1.Transaction.fromHex(this._coinConfig?.name || 'kaspa', rawTransaction);
|
|
@@ -88,6 +101,10 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
88
101
|
payload: '',
|
|
89
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
108
|
return this._transaction;
|
|
92
109
|
}
|
|
93
110
|
/** @inheritDoc */
|
|
@@ -136,4 +153,4 @@ class TransactionBuilder extends sdk_core_1.BaseTransactionBuilder {
|
|
|
136
153
|
}
|
|
137
154
|
}
|
|
138
155
|
exports.TransactionBuilder = TransactionBuilder;
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQXNHO0FBR3RHLCtDQUE0QztBQUU1QyxtQ0FBOEM7QUFDOUMsdUNBQW9DO0FBQ3BDLDJDQUFzRDtBQUV0RCxNQUFhLGtCQUFtQixTQUFRLGlDQUFzQjtJQU81RCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQU5WLFlBQU8sR0FBcUIsRUFBRSxDQUFDO1FBQy9CLGFBQVEsR0FBNkIsRUFBRSxDQUFDO1FBQ3hDLFNBQUksR0FBVyx1QkFBVyxDQUFDO1FBQzNCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBSTFCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSx5QkFBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLElBQWMsV0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVcsQ0FBQyxFQUFtQjtRQUMzQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQWlCLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLE9BQWU7UUFDcEIsSUFBSSxDQUFDLElBQUEsMkJBQW1CLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILEVBQUUsQ0FBQyxPQUFlLEVBQUUsTUFBYztRQUNoQyxJQUFJLENBQUMsSUFBQSwy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LENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWpKRCxnREFpSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLCBCYXNlVHJhbnNhY3Rpb24sIEJhc2VLZXksIFNpZ25pbmdFcnJvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBLYXNwYVRyYW5zYWN0aW9uRGF0YSwgS2FzcGFVdHhvSW5wdXQsIEthc3BhVHJhbnNhY3Rpb25PdXRwdXQgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGlzVmFsaWRLYXNwYUFkZHJlc3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgREVGQVVMVF9GRUUsIFRYX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfaW5wdXRzOiBLYXNwYVV0eG9JbnB1dFtdID0gW107XG4gIHByb3RlY3RlZCBfb3V0cHV0czogS2FzcGFUcmFuc2FjdGlvbk91dHB1dFtdID0gW107XG4gIHByb3RlY3RlZCBfZmVlOiBzdHJpbmcgPSBERUZBVUxUX0ZFRTtcbiAgcHJvdGVjdGVkIF9mcm9tQWRkcmVzcyA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oY29pbkNvbmZpZy5uYW1lKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uKCk6IEJhc2VUcmFuc2FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBzZXQgdHJhbnNhY3Rpb24odHg6IEJhc2VUcmFuc2FjdGlvbikge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHggYXMgVHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzZW5kZXIgYWRkcmVzcy5cbiAgICovXG4gIHNlbmRlcihhZGRyZXNzOiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRLYXNwYUFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBLYXNwYSBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuICAgIHRoaXMuX2Zyb21BZGRyZXNzID0gYWRkcmVzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSByZWNpcGllbnQgb3V0cHV0LlxuICAgKi9cbiAgdG8oYWRkcmVzczogc3RyaW5nLCBhbW91bnQ6IHN0cmluZyk6IHRoaXMge1xuICAgIGlmICghaXNWYWxpZEthc3BhQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEthc3BhIHJlY2lwaWVudCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuICAgIHRoaXMuX291dHB1dHMucHVzaCh7IGFkZHJlc3MsIGFtb3VudCB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdHJhbnNhY3Rpb24gZmVlIGluIHNvbXBpLlxuICAgKi9cbiAgZmVlKGZlZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fZmVlID0gZmVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIFVUWE8gaW5wdXQuXG4gICAqL1xuICBhZGRJbnB1dCh1dHhvOiBLYXNwYVV0eG9JbnB1dCk6IHRoaXMge1xuICAgIGlmICghdXR4by50cmFuc2FjdGlvbklkIHx8IHV0eG8udHJhbnNhY3Rpb25JbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgVVRYTzogbWlzc2luZyB0cmFuc2FjdGlvbklkIG9yIHRyYW5zYWN0aW9uSW5kZXgnKTtcbiAgICB9XG4gICAgdGhpcy5faW5wdXRzLnB1c2godXR4byk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG11bHRpcGxlIFVUWE8gaW5wdXRzLlxuICAgKi9cbiAgYWRkSW5wdXRzKHV0eG9zOiBLYXNwYVV0eG9JbnB1dFtdKTogdGhpcyB7XG4gICAgdXR4b3MuZm9yRWFjaCgodSkgPT4gdGhpcy5hZGRJbnB1dCh1KSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gVHJhbnNhY3Rpb24uZnJvbUhleCgodGhpcyBhcyBhbnkpLl9jb2luQ29uZmlnPy5uYW1lIHx8ICdrYXNwYScsIHJhd1RyYW5zYWN0aW9uKTtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4O1xuICAgIHRoaXMuX2lucHV0cyA9IHR4LnR4RGF0YS5pbnB1dHMgfHwgW107XG4gICAgdGhpcy5fb3V0cHV0cyA9IHR4LnR4RGF0YS5vdXRwdXRzIHx8IFtdO1xuICAgIHRoaXMuX2ZlZSA9IHR4LnR4RGF0YS5mZWUgfHwgREVGQVVMVF9GRUU7XG4gICAgcmV0dXJuIHR4O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZEltcGxlbWVudGF0aW9uKCk6IFByb21pc2U8QmFzZVRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgdHhEYXRhOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSA9IHtcbiAgICAgIHZlcnNpb246IFRYX1ZFUlNJT04sXG4gICAgICBpbnB1dHM6IHRoaXMuX2lucHV0cyxcbiAgICAgIG91dHB1dHM6IHRoaXMuX291dHB1dHMsXG4gICAgICBmZWU6IHRoaXMuX2ZlZSxcbiAgICAgIGxvY2tUaW1lOiAnMCcsXG4gICAgICBzdWJuZXR3b3JrSWQ6ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgIHBheWxvYWQ6ICcnLFxuICAgIH07XG5cbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbigodGhpcyBhcyBhbnkpLl9jb2luQ29uZmlnPy5uYW1lIHx8ICdrYXNwYScsIHR4RGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHByb3RlY3RlZCBzaWduSW1wbGVtZW50YXRpb24oeyBrZXkgfTogQmFzZUtleSk6IEJhc2VUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBrZXkgfSk7XG4gICAgY29uc3QgcHJpdmF0ZUtleSA9IGtleVBhaXIuZ2V0S2V5cygpLnBydjtcbiAgICBpZiAoIXByaXZhdGVLZXkpIHtcbiAgICAgIHRocm93IG5ldyBTaWduaW5nRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgdGhpcy5fdHJhbnNhY3Rpb24uc2lnbihCdWZmZXIuZnJvbShwcml2YXRlS2V5LCAnaGV4JykpO1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICB2YWxpZGF0ZVRyYW5zYWN0aW9uKF90cmFuc2FjdGlvbj86IEJhc2VUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pbnB1dHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0IGxlYXN0IG9uZSBVVFhPIGlucHV0IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vdXRwdXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBvbmUgb3V0cHV0IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHZhbGlkYXRlS2V5KGtleTogeyBrZXk6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgLy8gS2V5IHZhbGlkYXRpb24gaGFuZGxlZCBpbiBLZXlQYWlyXG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgdmFsaWRhdGVBZGRyZXNzKGFkZHJlc3M6IHsgYWRkcmVzczogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBpZiAoIWlzVmFsaWRLYXNwYUFkZHJlc3MoYWRkcmVzcy5hZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEthc3BhIGFkZHJlc3M6ICR7YWRkcmVzcy5hZGRyZXNzfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgVHJhbnNhY3Rpb24uZnJvbUhleCgodGhpcyBhcyBhbnkpLl9jb2luQ29uZmlnPy5uYW1lIHx8ICdrYXNwYScsIHJhd1RyYW5zYWN0aW9uKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByYXcgS2FzcGEgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgdmFsaWRhdGVWYWx1ZSh2YWx1ZTogQmlnTnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlLmlzTGVzc1RoYW4oMCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gdmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlJyk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBTThCO0FBRzlCLCtDQUE0QztBQUU1QyxtQ0FBOEM7QUFDOUMsdUNBQW9DO0FBQ3BDLDJDQUFzRDtBQU90RCxNQUFhLGtCQUFtQixTQUFRLGlDQUFzQjtJQVE1RCxZQUFZLFVBQWdDO1FBQzFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQVBWLFlBQU8sR0FBcUIsRUFBRSxDQUFDO1FBQy9CLGFBQVEsR0FBNkIsRUFBRSxDQUFDO1FBQ3hDLFNBQUksR0FBVyx1QkFBVyxDQUFDO1FBQzNCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGdCQUFXLEdBQXFCLEVBQUUsQ0FBQztRQUkzQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUkseUJBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixJQUFjLFdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBYyxXQUFXLENBQUMsRUFBbUI7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFpQixDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxPQUFlO1FBQ3BCLElBQUksQ0FBQyxJQUFBLDJCQUFtQixFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxFQUFFLENBQUMsT0FBZSxFQUFF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QUFzQixDQUFDLGNBQXNCO1FBQzNDLElBQUksQ0FBQztZQUNILHlCQUFXLENBQUMsT0FBTyxDQUFFLElBQVksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNsRixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWEsQ0FBQyxLQUFnQjtRQUM1QixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXJLRCxnREFxS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEJhc2VLZXksXG4gIFB1YmxpY0tleSBhcyBCYXNlUHVibGljS2V5LFxuICBTaWduaW5nRXJyb3IsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBLYXNwYVRyYW5zYWN0aW9uRGF0YSwgS2FzcGFVdHhvSW5wdXQsIEthc3BhVHJhbnNhY3Rpb25PdXRwdXQgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGlzVmFsaWRLYXNwYUFkZHJlc3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHsgREVGQVVMVF9GRUUsIFRYX1ZFUlNJT04gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbmludGVyZmFjZSBLYXNwYVNpZ25hdHVyZSB7XG4gIHB1YmxpY0tleTogQmFzZVB1YmxpY0tleTtcbiAgc2lnbmF0dXJlOiBCdWZmZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIHByb3RlY3RlZCBfaW5wdXRzOiBLYXNwYVV0eG9JbnB1dFtdID0gW107XG4gIHByb3RlY3RlZCBfb3V0cHV0czogS2FzcGFUcmFuc2FjdGlvbk91dHB1dFtdID0gW107XG4gIHByb3RlY3RlZCBfZmVlOiBzdHJpbmcgPSBERUZBVUxUX0ZFRTtcbiAgcHJvdGVjdGVkIF9mcm9tQWRkcmVzcyA9ICcnO1xuICBwcm90ZWN0ZWQgX3NpZ25hdHVyZXM6IEthc3BhU2lnbmF0dXJlW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihjb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKGNvaW5Db25maWcpO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5Db25maWcubmFtZSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIGdldCB0cmFuc2FjdGlvbigpOiBCYXNlVHJhbnNhY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgc2V0IHRyYW5zYWN0aW9uKHR4OiBCYXNlVHJhbnNhY3Rpb24pIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbiA9IHR4IGFzIFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2VuZGVyIGFkZHJlc3MuXG4gICAqL1xuICBzZW5kZXIoYWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgaWYgKCFpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgS2FzcGEgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLl9mcm9tQWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcmVjaXBpZW50IG91dHB1dC5cbiAgICovXG4gIHRvKGFkZHJlc3M6IHN0cmluZywgYW1vdW50OiBzdHJpbmcpOiB0aGlzIHtcbiAgICBpZiAoIWlzVmFsaWRLYXNwYUFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBLYXNwYSByZWNpcGllbnQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICB0aGlzLl9vdXRwdXRzLnB1c2goeyBhZGRyZXNzLCBhbW91bnQgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRyYW5zYWN0aW9uIGZlZSBpbiBzb21waS5cbiAgICovXG4gIGZlZShmZWU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuX2ZlZSA9IGZlZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBVVFhPIGlucHV0LlxuICAgKi9cbiAgYWRkSW5wdXQodXR4bzogS2FzcGFVdHhvSW5wdXQpOiB0aGlzIHtcbiAgICBpZiAoIXV0eG8udHJhbnNhY3Rpb25JZCB8fCB1dHhvLnRyYW5zYWN0aW9uSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFVUWE86IG1pc3NpbmcgdHJhbnNhY3Rpb25JZCBvciB0cmFuc2FjdGlvbkluZGV4Jyk7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0cy5wdXNoKHV0eG8pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBtdWx0aXBsZSBVVFhPIGlucHV0cy5cbiAgICovXG4gIGFkZElucHV0cyh1dHhvczogS2FzcGFVdHhvSW5wdXRbXSk6IHRoaXMge1xuICAgIHV0eG9zLmZvckVhY2goKHUpID0+IHRoaXMuYWRkSW5wdXQodSkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBleHRlcm5hbGx5LXByb2R1Y2VkIHNpZ25hdHVyZSAoZnJvbSBUU1MvTVBDIHNpZ25pbmcpIHRvIHRoZSB0cmFuc2FjdGlvbi5cbiAgICogVGhlIHNpZ25hdHVyZSB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGlucHV0cyBkdXJpbmcgYnVpbGQoKS5cbiAgICpcbiAgICogVGhpcyBmb2xsb3dzIHRoZSBzYW1lIHBhdHRlcm4gYXMgQURBJ3MgVHJhbnNhY3Rpb25CdWlsZGVyLmFkZFNpZ25hdHVyZSgpLlxuICAgKlxuICAgKiBAcGFyYW0gcHVibGljS2V5IFRoZSBjb21wcmVzc2VkIHNlY3AyNTZrMSBwdWJsaWMga2V5IHRoYXQgcHJvZHVjZWQgdGhlIHNpZ25hdHVyZVxuICAgKiBAcGFyYW0gc2lnbmF0dXJlIFRoZSA2NC1ieXRlIFNjaG5vcnIgc2lnbmF0dXJlIGJ1ZmZlclxuICAgKi9cbiAgYWRkU2lnbmF0dXJlKHB1YmxpY0tleTogQmFzZVB1YmxpY0tleSwgc2lnbmF0dXJlOiBCdWZmZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goeyBwdWJsaWNLZXksIHNpZ25hdHVyZSB9KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgZnJvbUltcGxlbWVudGF0aW9uKHJhd1RyYW5zYWN0aW9uOiBzdHJpbmcpOiBUcmFuc2FjdGlvbiB7XG4gICAgY29uc3QgdHggPSBUcmFuc2FjdGlvbi5mcm9tSGV4KCh0aGlzIGFzIGFueSkuX2NvaW5Db25maWc/Lm5hbWUgfHwgJ2thc3BhJywgcmF3VHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gdHg7XG4gICAgdGhpcy5faW5wdXRzID0gdHgudHhEYXRhLmlucHV0cyB8fCBbXTtcbiAgICB0aGlzLl9vdXRwdXRzID0gdHgudHhEYXRhLm91dHB1dHMgfHwgW107XG4gICAgdGhpcy5fZmVlID0gdHgudHhEYXRhLmZlZSB8fCBERUZBVUxUX0ZFRTtcbiAgICByZXR1cm4gdHg7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkSW1wbGVtZW50YXRpb24oKTogUHJvbWlzZTxCYXNlVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eERhdGE6IEthc3BhVHJhbnNhY3Rpb25EYXRhID0ge1xuICAgICAgdmVyc2lvbjogVFhfVkVSU0lPTixcbiAgICAgIGlucHV0czogdGhpcy5faW5wdXRzLFxuICAgICAgb3V0cHV0czogdGhpcy5fb3V0cHV0cyxcbiAgICAgIGZlZTogdGhpcy5fZmVlLFxuICAgICAgbG9ja1RpbWU6ICcwJyxcbiAgICAgIHN1Ym5ldHdvcmtJZDogJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgcGF5bG9hZDogJycsXG4gICAgfTtcblxuICAgIHRoaXMuX3RyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCh0aGlzIGFzIGFueSkuX2NvaW5Db25maWc/Lm5hbWUgfHwgJ2thc3BhJywgdHhEYXRhKTtcblxuICAgIC8vIEFwcGx5IGFueSBleHRlcm5hbGx5LXByb2R1Y2VkIHNpZ25hdHVyZXMgKGZyb20gVFNTL01QQylcbiAgICBmb3IgKGNvbnN0IHNpZyBvZiB0aGlzLl9zaWduYXR1cmVzKSB7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbi5hZGRTaWduYXR1cmUoc2lnLnB1YmxpY0tleS5wdWIsIHNpZy5zaWduYXR1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBwcm90ZWN0ZWQgc2lnbkltcGxlbWVudGF0aW9uKHsga2V5IH06IEJhc2VLZXkpOiBCYXNlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjoga2V5IH0pO1xuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBrZXlQYWlyLmdldEtleXMoKS5wcnY7XG4gICAgaWYgKCFwcml2YXRlS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgU2lnbmluZ0Vycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIHRoaXMuX3RyYW5zYWN0aW9uLnNpZ24oQnVmZmVyLmZyb20ocHJpdmF0ZUtleSwgJ2hleCcpKTtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgdmFsaWRhdGVUcmFuc2FjdGlvbihfdHJhbnNhY3Rpb24/OiBCYXNlVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faW5wdXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBvbmUgVVRYTyBpbnB1dCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb3V0cHV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXQgbGVhc3Qgb25lIG91dHB1dCBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICB2YWxpZGF0ZUtleShrZXk6IHsga2V5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIC8vIEtleSB2YWxpZGF0aW9uIGhhbmRsZWQgaW4gS2V5UGFpclxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHZhbGlkYXRlQWRkcmVzcyhhZGRyZXNzOiB7IGFkZHJlc3M6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgaWYgKCFpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3MuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBLYXNwYSBhZGRyZXNzOiAke2FkZHJlc3MuYWRkcmVzc31gKTtcbiAgICB9XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIFRyYW5zYWN0aW9uLmZyb21IZXgoKHRoaXMgYXMgYW55KS5fY29pbkNvbmZpZz8ubmFtZSB8fCAna2FzcGEnLCByYXdUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcmF3IEthc3BhIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHZhbGlkYXRlVmFsdWUodmFsdWU6IEJpZ051bWJlcik6IHZvaWQge1xuICAgIGlmICh2YWx1ZS5pc0xlc3NUaGFuKDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIHZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZScpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -7,6 +7,13 @@ export declare class TransactionBuilderFactory {
|
|
|
7
7
|
* Get a base transaction builder for Kaspa transfers.
|
|
8
8
|
*/
|
|
9
9
|
getBuilder(): TransactionBuilder;
|
|
10
|
+
/**
|
|
11
|
+
* Get a transfer-specific transaction builder.
|
|
12
|
+
* Alias for getBuilder() — Kaspa only has one transaction type (Send).
|
|
13
|
+
*
|
|
14
|
+
* This matches the ADA SDK pattern where wallet-platform calls getTransferBuilder().
|
|
15
|
+
*/
|
|
16
|
+
getTransferBuilder(): TransactionBuilder;
|
|
10
17
|
/**
|
|
11
18
|
* Reconstruct a transaction builder from a raw transaction hex.
|
|
12
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qBAAa,yBAAyB;IACpC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAErC,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC;IAIjD;;OAEG;IACH,UAAU,IAAI,kBAAkB;IAIhC;;OAEG;IACH,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,kBAAkB;CAKjD"}
|
|
1
|
+
{"version":3,"file":"transactionBuilderFactory.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilderFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qBAAa,yBAAyB;IACpC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAErC,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC;IAIjD;;OAEG;IACH,UAAU,IAAI,kBAAkB;IAIhC;;;;;OAKG;IACH,kBAAkB,IAAI,kBAAkB;IAIxC;;OAEG;IACH,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,kBAAkB;CAKjD"}
|
|
@@ -12,6 +12,15 @@ class TransactionBuilderFactory {
|
|
|
12
12
|
getBuilder() {
|
|
13
13
|
return new transactionBuilder_1.TransactionBuilder(this._coinConfig);
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Get a transfer-specific transaction builder.
|
|
17
|
+
* Alias for getBuilder() — Kaspa only has one transaction type (Send).
|
|
18
|
+
*
|
|
19
|
+
* This matches the ADA SDK pattern where wallet-platform calls getTransferBuilder().
|
|
20
|
+
*/
|
|
21
|
+
getTransferBuilder() {
|
|
22
|
+
return this.getBuilder();
|
|
23
|
+
}
|
|
15
24
|
/**
|
|
16
25
|
* Reconstruct a transaction builder from a raw transaction hex.
|
|
17
26
|
*/
|
|
@@ -22,4 +31,4 @@ class TransactionBuilderFactory {
|
|
|
22
31
|
}
|
|
23
32
|
}
|
|
24
33
|
exports.TransactionBuilderFactory = TransactionBuilderFactory;
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2REFBMEQ7QUFFMUQsTUFBYSx5QkFBeUI7SUFHcEMsWUFBWSxVQUFxQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVO1FBQ1IsT0FBTyxJQUFJLHVDQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLGNBQXNCO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdCLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQWhDRCw4REFnQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4gfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyJztcblxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICBwcm90ZWN0ZWQgX2NvaW5Db25maWc6IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHRoaXMuX2NvaW5Db25maWcgPSBjb2luQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGJhc2UgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgS2FzcGEgdHJhbnNmZXJzLlxuICAgKi9cbiAgZ2V0QnVpbGRlcigpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKHRoaXMuX2NvaW5Db25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHRyYW5zZmVyLXNwZWNpZmljIHRyYW5zYWN0aW9uIGJ1aWxkZXIuXG4gICAqIEFsaWFzIGZvciBnZXRCdWlsZGVyKCkg4oCUIEthc3BhIG9ubHkgaGFzIG9uZSB0cmFuc2FjdGlvbiB0eXBlIChTZW5kKS5cbiAgICpcbiAgICogVGhpcyBtYXRjaGVzIHRoZSBBREEgU0RLIHBhdHRlcm4gd2hlcmUgd2FsbGV0LXBsYXRmb3JtIGNhbGxzIGdldFRyYW5zZmVyQnVpbGRlcigpLlxuICAgKi9cbiAgZ2V0VHJhbnNmZXJCdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnVpbGRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uc3RydWN0IGEgdHJhbnNhY3Rpb24gYnVpbGRlciBmcm9tIGEgcmF3IHRyYW5zYWN0aW9uIGhleC5cbiAgICovXG4gIGZyb20ocmF3VHJhbnNhY3Rpb246IHN0cmluZyk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgY29uc3QgYnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpO1xuICAgIGJ1aWxkZXIuZnJvbShyYXdUcmFuc2FjdGlvbik7XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -152,6 +152,91 @@ describe('Kaspa Transaction', function () {
|
|
|
152
152
|
assert_1.default.equal(explanation.outputAmount, '299998000');
|
|
153
153
|
});
|
|
154
154
|
});
|
|
155
|
+
describe('getFee', function () {
|
|
156
|
+
it('should return explicit fee when set in txData', function () {
|
|
157
|
+
const tx = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
158
|
+
assert_1.default.equal(tx.getFee, '2000');
|
|
159
|
+
});
|
|
160
|
+
it('should compute fee from inputs - outputs when fee is not set', function () {
|
|
161
|
+
const txData = { ...kaspa_fixtures_1.TRANSACTIONS.simple };
|
|
162
|
+
delete txData.fee;
|
|
163
|
+
const tx = new transaction_1.Transaction(COIN, txData);
|
|
164
|
+
// input: 100000000, output: 99998000, fee = 2000
|
|
165
|
+
assert_1.default.equal(tx.getFee, '2000');
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
describe('signablePayload', function () {
|
|
169
|
+
it('should return a 32-byte Buffer (Blake2b hash)', function () {
|
|
170
|
+
const tx = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
171
|
+
const payload = tx.signablePayload;
|
|
172
|
+
assert_1.default.ok(Buffer.isBuffer(payload));
|
|
173
|
+
assert_1.default.equal(payload.length, 32);
|
|
174
|
+
});
|
|
175
|
+
it('should throw when transaction has no inputs', function () {
|
|
176
|
+
const tx = new transaction_1.Transaction(COIN);
|
|
177
|
+
assert_1.default.throws(() => {
|
|
178
|
+
tx.signablePayload;
|
|
179
|
+
}, /no inputs/);
|
|
180
|
+
});
|
|
181
|
+
it('should return deterministic hash for same transaction data', function () {
|
|
182
|
+
const tx1 = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
183
|
+
const tx2 = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
184
|
+
assert_1.default.ok(tx1.signablePayload.equals(tx2.signablePayload));
|
|
185
|
+
});
|
|
186
|
+
it('should return different hashes for different transactions', function () {
|
|
187
|
+
const tx1 = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
188
|
+
const tx2 = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.multiInput);
|
|
189
|
+
assert_1.default.ok(!tx1.signablePayload.equals(tx2.signablePayload));
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
describe('addSignature', function () {
|
|
193
|
+
it('should apply a 64-byte Schnorr signature to all inputs', function () {
|
|
194
|
+
const tx = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
195
|
+
const fakeSig = Buffer.alloc(64, 0xab);
|
|
196
|
+
tx.addSignature(kaspa_fixtures_1.KEYS.pub, fakeSig);
|
|
197
|
+
assert_1.default.equal(tx.txData.inputs.length, 1);
|
|
198
|
+
assert_1.default.ok(tx.txData.inputs[0].signatureScript);
|
|
199
|
+
// 65 bytes = 130 hex chars (64 sig + 1 sighash type)
|
|
200
|
+
assert_1.default.equal(tx.txData.inputs[0].signatureScript.length, 130);
|
|
201
|
+
});
|
|
202
|
+
it('should apply signature to all inputs of a multi-input tx', function () {
|
|
203
|
+
const tx = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.multiInput);
|
|
204
|
+
const fakeSig = Buffer.alloc(64, 0xcd);
|
|
205
|
+
tx.addSignature(kaspa_fixtures_1.KEYS.pub, fakeSig);
|
|
206
|
+
assert_1.default.equal(tx.txData.inputs.length, 2);
|
|
207
|
+
for (const input of tx.txData.inputs) {
|
|
208
|
+
assert_1.default.ok(input.signatureScript);
|
|
209
|
+
assert_1.default.equal(input.signatureScript.length, 130);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
it('should throw for non-64-byte signature', function () {
|
|
213
|
+
const tx = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
214
|
+
assert_1.default.throws(() => {
|
|
215
|
+
tx.addSignature(kaspa_fixtures_1.KEYS.pub, Buffer.alloc(32));
|
|
216
|
+
}, /64-byte/);
|
|
217
|
+
});
|
|
218
|
+
it('should append SIGHASH_ALL byte at the end', function () {
|
|
219
|
+
const tx = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
220
|
+
const fakeSig = Buffer.alloc(64, 0xab);
|
|
221
|
+
tx.addSignature(kaspa_fixtures_1.KEYS.pub, fakeSig);
|
|
222
|
+
const sigHex = tx.txData.inputs[0].signatureScript;
|
|
223
|
+
const lastByte = parseInt(sigHex.slice(-2), 16);
|
|
224
|
+
assert_1.default.equal(lastByte, sighash_1.SIGHASH_ALL);
|
|
225
|
+
});
|
|
226
|
+
it('should produce a signature that verifies when signed with the correct private key', function () {
|
|
227
|
+
const tx = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
228
|
+
// Sign properly with private key to get a real signature
|
|
229
|
+
const privKey = Buffer.from(kaspa_fixtures_1.KEYS.prv, 'hex');
|
|
230
|
+
tx.sign(privKey);
|
|
231
|
+
const realSigHex = tx.txData.inputs[0].signatureScript;
|
|
232
|
+
const realSig = Buffer.from(realSigHex.slice(0, 128), 'hex'); // 64-byte Schnorr sig
|
|
233
|
+
// Now create a fresh tx and use addSignature instead
|
|
234
|
+
const tx2 = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
235
|
+
tx2.addSignature(kaspa_fixtures_1.KEYS.pub, realSig);
|
|
236
|
+
// The signature scripts should match (same sig bytes + same sighash type)
|
|
237
|
+
assert_1.default.equal(tx2.txData.inputs[0].signatureScript, tx.txData.inputs[0].signatureScript);
|
|
238
|
+
});
|
|
239
|
+
});
|
|
155
240
|
describe('Serialization', function () {
|
|
156
241
|
it('toJson should return a copy of txData', function () {
|
|
157
242
|
const tx = new transaction_1.Transaction(COIN, kaspa_fixtures_1.TRANSACTIONS.simple);
|
|
@@ -203,4 +288,4 @@ describe('Kaspa Transaction', function () {
|
|
|
203
288
|
});
|
|
204
289
|
});
|
|
205
290
|
});
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDJEQUF3RDtBQUN4RCxtREFBdUQ7QUFDdkQsbURBQW9EO0FBQ3BELCtEQUFnRTtBQUVoRSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUM7QUFFckIsUUFBUSxDQUFDLG1CQUFtQixFQUFFO0lBQzVCLFFBQVEsQ0FBQyxhQUFhLEVBQUU7UUFDdEIsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1lBQ3ZDLE1BQU0sRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNkLGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFO1lBQzVDLE1BQU0sRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLEVBQUUsNkJBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0s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TyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUVoRCxnQkFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgU0lHSEFTSF9BTEwgfSBmcm9tICcuLi8uLi9zcmMvbGliL3NpZ2hhc2gnO1xuaW1wb3J0IHsgS0VZUywgVFJBTlNBQ1RJT05TIH0gZnJvbSAnLi4vZml4dHVyZXMva2FzcGEuZml4dHVyZXMnO1xuXG5jb25zdCBDT0lOID0gJ2thc3BhJztcblxuZGVzY3JpYmUoJ0thc3BhIFRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnQ29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYW4gZW1wdHkgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOKTtcbiAgICAgIGFzc2VydC5vayh0eCk7XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKHR4LnR4RGF0YS5pbnB1dHMsIFtdKTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwodHgudHhEYXRhLm91dHB1dHMsIFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgdHJhbnNhY3Rpb24gZnJvbSB0eERhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGFzc2VydC5lcXVhbCh0eC50eERhdGEuaW5wdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuZXF1YWwodHgudHhEYXRhLm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5lcXVhbCh0eC50eERhdGEuZmVlLCAnMjAwMCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaWQgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IHN0cmluZyB3aGVuIG5vIGlkIGlzIHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4pO1xuICAgICAgYXNzZXJ0LmVxdWFsKHR4LmlkLCAnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgdHJhbnNhY3Rpb24gaWQgaWYgc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhEYXRhID0geyAuLi5UUkFOU0FDVElPTlMuc2ltcGxlLCBpZDogJ2RlYWRiZWVmJyArICcwMCcucmVwZWF0KDMwKSB9O1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgdHhEYXRhKTtcbiAgICAgIGFzc2VydC5lcXVhbCh0eC5pZCwgdHhEYXRhLmlkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25hdHVyZSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgc2lnbmF0dXJlcyBmb3IgdW5zaWduZWQgdHgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IHNpZ3MgPSB0eC5zaWduYXR1cmU7XG4gICAgICBhc3NlcnQuZXF1YWwoc2lncy5sZW5ndGgsIFRSQU5TQUNUSU9OUy5zaW1wbGUuaW5wdXRzLmxlbmd0aCk7XG4gICAgICBhc3NlcnQub2soc2lncy5ldmVyeSgocykgPT4gcyA9PT0gJycpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHNpZ25hdHVyZSBzY3JpcHRzIGFmdGVyIHNpZ25pbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IHByaXZLZXkgPSBCdWZmZXIuZnJvbShLRVlTLnBydiwgJ2hleCcpO1xuICAgICAgdHguc2lnbihwcml2S2V5KTtcbiAgICAgIGNvbnN0IHNpZ3MgPSB0eC5zaWduYXR1cmU7XG4gICAgICBhc3NlcnQuZXF1YWwoc2lncy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0Lm9rKHNpZ3NbMF0ubGVuZ3RoID4gMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjYW5TaWduJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgYWx3YXlzIHJldHVybiB0cnVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBhc3NlcnQub2sodHguY2FuU2lnbih7IGtleTogS0VZUy5wcnYgfSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2lnbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIG5vbi0zMi1ieXRlIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgdHguc2lnbihCdWZmZXIuZnJvbSgnMDEwMicsICdoZXgnKSk7XG4gICAgICB9LCAvMzItYnl0ZS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaWduIGFsbCBpbnB1dHMgd2l0aCBhIHZhbGlkIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgeyAuLi5UUkFOU0FDVElPTlMuc2ltcGxlIH0pO1xuICAgICAgY29uc3QgcHJpdktleSA9IEJ1ZmZlci5mcm9tKEtFWVMucHJ2LCAnaGV4Jyk7XG4gICAgICB0eC5zaWduKHByaXZLZXkpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0eC50eERhdGEuaW5wdXRzKSB7XG4gICAgICAgIGFzc2VydC5vayhpbnB1dC5zaWduYXR1cmVTY3JpcHQsICdFYWNoIGlucHV0IHNob3VsZCBoYXZlIGEgc2lnbmF0dXJlU2NyaXB0Jyk7XG4gICAgICAgIGFzc2VydC5vayhpbnB1dC5zaWduYXR1cmVTY3JpcHQhLmxlbmd0aCA+IDApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzaWduIG11bHRpcGxlIGlucHV0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5tdWx0aUlucHV0KTtcbiAgICAgIGNvbnN0IHByaXZLZXkgPSBCdWZmZXIuZnJvbShLRVlTLnBydiwgJ2hleCcpO1xuICAgICAgdHguc2lnbihwcml2S2V5KTtcbiAgICAgIGFzc2VydC5lcXVhbCh0eC50eERhdGEuaW5wdXRzLmxlbmd0aCwgMik7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHR4LnR4RGF0YS5pbnB1dHMpIHtcbiAgICAgICAgYXNzZXJ0Lm9rKGlucHV0LnNpZ25hdHVyZVNjcmlwdCAmJiBpbnB1dC5zaWduYXR1cmVTY3JpcHQubGVuZ3RoID4gMCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb2R1Y2UgNjUtYnl0ZSBzaWduYXR1cmVzICg2NCBTY2hub3JyICsgMSBzaWdoYXNoIHR5cGUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBwcml2S2V5ID0gQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKTtcbiAgICAgIHR4LnNpZ24ocHJpdktleSk7XG4gICAgICBjb25zdCBzaWdIZXggPSB0eC50eERhdGEuaW5wdXRzWzBdLnNpZ25hdHVyZVNjcmlwdCE7XG4gICAgICAvLyA2NSBieXRlcyA9IDEzMCBoZXggY2hhcnNcbiAgICAgIGFzc2VydC5lcXVhbChzaWdIZXgubGVuZ3RoLCAxMzApO1xuICAgICAgLy8gTGFzdCBieXRlIGlzIHNpZ2hhc2ggdHlwZSAoMHgwMSA9IFNJR0hBU0hfQUxMKVxuICAgICAgY29uc3QgbGFzdEJ5dGUgPSBwYXJzZUludChzaWdIZXguc2xpY2UoLTIpLCAxNik7XG4gICAgICBhc3NlcnQuZXF1YWwobGFzdEJ5dGUsIFNJR0hBU0hfQUxMKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZlcmlmeVNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgdW5zaWduZWQgaW5wdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IHB1YktleSA9IEJ1ZmZlci5mcm9tKEtFWVMucHViLCAnaGV4Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwodHgudmVyaWZ5U2lnbmF0dXJlKHB1YktleSwgMCksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgYWZ0ZXIgc2lnbmluZyB3aXRoIG1hdGNoaW5nIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QgcHJpdktleSA9IEJ1ZmZlci5mcm9tKEtFWVMucHJ2LCAnaGV4Jyk7XG4gICAgICB0eC5zaWduKHByaXZLZXkpO1xuICAgICAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20oS0VZUy5wdWIsICdoZXgnKTtcbiAgICAgIGFzc2VydC5vayh0eC52ZXJpZnlTaWduYXR1cmUocHViS2V5LCAwKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFjY2VwdCB4LW9ubHkgKDMyLWJ5dGUpIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IHByaXZLZXkgPSBCdWZmZXIuZnJvbShLRVlTLnBydiwgJ2hleCcpO1xuICAgICAgdHguc2lnbihwcml2S2V5KTtcbiAgICAgIGNvbnN0IHhPbmx5UHViID0gQnVmZmVyLmZyb20oS0VZUy5wdWIsICdoZXgnKS5zbGljZSgxKTtcbiAgICAgIGFzc2VydC5vayh0eC52ZXJpZnlTaWduYXR1cmUoeE9ubHlQdWIsIDApKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciB3cm9uZyBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBwcml2S2V5ID0gQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKTtcbiAgICAgIHR4LnNpZ24ocHJpdktleSk7XG4gICAgICBjb25zdCB3cm9uZ1B1YiA9IEJ1ZmZlci5mcm9tKCcwMicgKyAnYWInLnJlcGVhdCgzMiksICdoZXgnKTtcbiAgICAgIGFzc2VydC5lcXVhbCh0eC52ZXJpZnlTaWduYXR1cmUod3JvbmdQdWIsIDApLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igb3V0LW9mLXJhbmdlIGlucHV0IGluZGV4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBwcml2S2V5ID0gQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKTtcbiAgICAgIHR4LnNpZ24ocHJpdktleSk7XG4gICAgICBjb25zdCBwdWJLZXkgPSBCdWZmZXIuZnJvbShLRVlTLnB1YiwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHR4LnZlcmlmeVNpZ25hdHVyZShwdWJLZXksIDk5KSwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZXhwbGFpblRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB3aXRoIGNvcnJlY3QgZmllbGRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uaWQsICcnKTtcbiAgICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYW1vdW50LCAnOTk5OTgwMDAnKTtcbiAgICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5pbnB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5pbnB1dHNbMF0uYW1vdW50LCAnMTAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNhbGN1bGF0ZSB0aGUgZmVlIGFzIHRvdGFsSW4gLSB0b3RhbE91dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIC8vIGZlZSA9IDEwMDAwMDAwMCAtIDk5OTk4MDAwID0gMjAwMFxuICAgICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmZlZS5mZWUsICcyMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHN1bSBhbGwgb3V0cHV0cyBpbiBvdXRwdXRBbW91bnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMubXVsdGlJbnB1dCk7XG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dEFtb3VudCwgJzI5OTk5ODAwMCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU2VyaWFsaXphdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgndG9Kc29uIHNob3VsZCByZXR1cm4gYSBjb3B5IG9mIHR4RGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QganNvbiA9IHR4LnRvSnNvbigpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChqc29uLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGFzc2VydC5ub3RFcXVhbChqc29uLCB0eC50eERhdGEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RvQnJvYWRjYXN0Rm9ybWF0IHNob3VsZCByZXR1cm4gYSBKU09OIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QgYnJvYWRjYXN0ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGFzc2VydC5lcXVhbCh0eXBlb2YgYnJvYWRjYXN0LCAnc3RyaW5nJyk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGJyb2FkY2FzdCk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkLnZlcnNpb24sIDApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZC5pbnB1dHMubGVuZ3RoLCAxKTtcbiAgICB9KTtcblxuICAgIGl0KCd0b0hleCBzaG91bGQgcmV0dXJuIGhleC1lbmNvZGVkIEpTT04nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IGhleCA9IHR4LnRvSGV4KCk7XG4gICAgICBhc3NlcnQub2soL15bMC05YS1mQS1GXSskLy50ZXN0KGhleCkpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IEJ1ZmZlci5mcm9tKGhleCwgJ2hleCcpLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGRlY29kZWQpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZC52ZXJzaW9uLCAwKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tSGV4IHNob3VsZCByZWNvbnN0cnVjdCB0aGUgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IGhleCA9IG9yaWdpbmFsLnRvSGV4KCk7XG4gICAgICBjb25zdCByZXN0b3JlZCA9IFRyYW5zYWN0aW9uLmZyb21IZXgoQ09JTiwgaGV4KTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdG9yZWQudG9Kc29uKCksIG9yaWdpbmFsLnRvSnNvbigpKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tSnNvbiBzaG91bGQgcmVjb25zdHJ1Y3QgZnJvbSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IGpzb24gPSBvcmlnaW5hbC50b0pzb24oKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkID0gVHJhbnNhY3Rpb24uZnJvbUpzb24oQ09JTiwganNvbik7XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3RvcmVkLnRvSnNvbigpLCBqc29uKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tSnNvbiBzaG91bGQgcmVjb25zdHJ1Y3QgZnJvbSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IGpzb25TdHIgPSBKU09OLnN0cmluZ2lmeShvcmlnaW5hbC50b0pzb24oKSk7XG4gICAgICBjb25zdCByZXN0b3JlZCA9IFRyYW5zYWN0aW9uLmZyb21Kc29uKENPSU4sIGpzb25TdHIpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN0b3JlZC50b0pzb24oKSwgb3JpZ2luYWwudG9Kc29uKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JvdW5kLXRyaXAgdGhyb3VnaCB0b0hleC9mcm9tSGV4IHNob3VsZCBwcmVzZXJ2ZSBzaWduYXR1cmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBwcml2S2V5ID0gQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKTtcbiAgICAgIHR4LnNpZ24ocHJpdktleSk7XG5cbiAgICAgIGNvbnN0IGhleCA9IHR4LnRvSGV4KCk7XG4gICAgICBjb25zdCByZXN0b3JlZCA9IFRyYW5zYWN0aW9uLmZyb21IZXgoQ09JTiwgaGV4KTtcblxuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN0b3JlZC5zaWduYXR1cmUsIHR4LnNpZ25hdHVyZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC90cmFuc2FjdGlvbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDJEQUF3RDtBQUN4RCxtREFBdUQ7QUFDdkQsbURBQW9EO0FBQ3BELCtEQUFnRTtBQUVoRSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUM7QUFFckIsUUFBUSxDQUFDLG1CQUFtQixFQUFFO0lBQzVCLFFBQVEsQ0FBQyxhQUFhLEVBQUU7UUFDdEIsRUFBRSxDQUFDLG9DQUFvQyxFQUFFO1lBQ3ZDLE1BQU0sRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQyxnQkFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNkLGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLGdCQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFO1lBQzVDLE1BQU0sRUFBRSxHQUFHLElBQUkseUJBQVcsQ0FBQyxJQUFJLEVBQUUsNkJBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzFDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0s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TSxRQUFRLEdBQUcsSUFBSSx5QkFBVyxDQUFDLElBQUksRUFBRSw2QkFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbEQsTUFBTSxRQUFRLEdBQUcseUJBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3JELGdCQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2REFBNkQsRUFBRTtZQUNoRSxNQUFNLEVBQUUsR0FBRyxJQUFJLHlCQUFXLENBQUMsSUFBSSxFQUFFLDZCQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWpCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixNQUFNLFFBQVEsR0FBRyx5QkFBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFaEQsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFNJR0hBU0hfQUxMIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9zaWdoYXNoJztcbmltcG9ydCB7IEtFWVMsIFRSQU5TQUNUSU9OUyB9IGZyb20gJy4uL2ZpeHR1cmVzL2thc3BhLmZpeHR1cmVzJztcblxuY29uc3QgQ09JTiA9ICdrYXNwYSc7XG5cbmRlc2NyaWJlKCdLYXNwYSBUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ0NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgY3JlYXRlIGFuIGVtcHR5IHRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTik7XG4gICAgICBhc3NlcnQub2sodHgpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbCh0eC50eERhdGEuaW5wdXRzLCBbXSk7XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKHR4LnR4RGF0YS5vdXRwdXRzLCBbXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIHRyYW5zYWN0aW9uIGZyb20gdHhEYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBhc3NlcnQuZXF1YWwodHgudHhEYXRhLmlucHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHR4LnR4RGF0YS5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuZXF1YWwodHgudHhEYXRhLmZlZSwgJzIwMDAnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2lkIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBlbXB0eSBzdHJpbmcgd2hlbiBubyBpZCBpcyBzZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOKTtcbiAgICAgIGFzc2VydC5lcXVhbCh0eC5pZCwgJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIHRyYW5zYWN0aW9uIGlkIGlmIHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4RGF0YSA9IHsgLi4uVFJBTlNBQ1RJT05TLnNpbXBsZSwgaWQ6ICdkZWFkYmVlZicgKyAnMDAnLnJlcGVhdCgzMCkgfTtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIHR4RGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwodHguaWQsIHR4RGF0YS5pZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzaWduYXR1cmUgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IHNpZ25hdHVyZXMgZm9yIHVuc2lnbmVkIHR4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBzaWdzID0gdHguc2lnbmF0dXJlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHNpZ3MubGVuZ3RoLCBUUkFOU0FDVElPTlMuc2ltcGxlLmlucHV0cy5sZW5ndGgpO1xuICAgICAgYXNzZXJ0Lm9rKHNpZ3MuZXZlcnkoKHMpID0+IHMgPT09ICcnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBzaWduYXR1cmUgc2NyaXB0cyBhZnRlciBzaWduaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBwcml2S2V5ID0gQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKTtcbiAgICAgIHR4LnNpZ24ocHJpdktleSk7XG4gICAgICBjb25zdCBzaWdzID0gdHguc2lnbmF0dXJlO1xuICAgICAgYXNzZXJ0LmVxdWFsKHNpZ3MubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5vayhzaWdzWzBdLmxlbmd0aCA+IDApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY2FuU2lnbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGFsd2F5cyByZXR1cm4gdHJ1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgYXNzZXJ0Lm9rKHR4LmNhblNpZ24oeyBrZXk6IEtFWVMucHJ2IH0pKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBub24tMzItYnl0ZSBwcml2YXRlIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIHR4LnNpZ24oQnVmZmVyLmZyb20oJzAxMDInLCAnaGV4JykpO1xuICAgICAgfSwgLzMyLWJ5dGUvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2lnbiBhbGwgaW5wdXRzIHdpdGggYSB2YWxpZCBwcml2YXRlIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIHsgLi4uVFJBTlNBQ1RJT05TLnNpbXBsZSB9KTtcbiAgICAgIGNvbnN0IHByaXZLZXkgPSBCdWZmZXIuZnJvbShLRVlTLnBydiwgJ2hleCcpO1xuICAgICAgdHguc2lnbihwcml2S2V5KTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdHgudHhEYXRhLmlucHV0cykge1xuICAgICAgICBhc3NlcnQub2soaW5wdXQuc2lnbmF0dXJlU2NyaXB0LCAnRWFjaCBpbnB1dCBzaG91bGQgaGF2ZSBhIHNpZ25hdHVyZVNjcmlwdCcpO1xuICAgICAgICBhc3NlcnQub2soaW5wdXQuc2lnbmF0dXJlU2NyaXB0IS5sZW5ndGggPiAwKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2lnbiBtdWx0aXBsZSBpbnB1dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMubXVsdGlJbnB1dCk7XG4gICAgICBjb25zdCBwcml2S2V5ID0gQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKTtcbiAgICAgIHR4LnNpZ24ocHJpdktleSk7XG4gICAgICBhc3NlcnQuZXF1YWwodHgudHhEYXRhLmlucHV0cy5sZW5ndGgsIDIpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0eC50eERhdGEuaW5wdXRzKSB7XG4gICAgICAgIGFzc2VydC5vayhpbnB1dC5zaWduYXR1cmVTY3JpcHQgJiYgaW5wdXQuc2lnbmF0dXJlU2NyaXB0Lmxlbmd0aCA+IDApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9kdWNlIDY1LWJ5dGUgc2lnbmF0dXJlcyAoNjQgU2Nobm9yciArIDEgc2lnaGFzaCB0eXBlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QgcHJpdktleSA9IEJ1ZmZlci5mcm9tKEtFWVMucHJ2LCAnaGV4Jyk7XG4gICAgICB0eC5zaWduKHByaXZLZXkpO1xuICAgICAgY29uc3Qgc2lnSGV4ID0gdHgudHhEYXRhLmlucHV0c1swXS5zaWduYXR1cmVTY3JpcHQhO1xuICAgICAgLy8gNjUgYnl0ZXMgPSAxMzAgaGV4IGNoYXJzXG4gICAgICBhc3NlcnQuZXF1YWwoc2lnSGV4Lmxlbmd0aCwgMTMwKTtcbiAgICAgIC8vIExhc3QgYnl0ZSBpcyBzaWdoYXNoIHR5cGUgKDB4MDEgPSBTSUdIQVNIX0FMTClcbiAgICAgIGNvbnN0IGxhc3RCeXRlID0gcGFyc2VJbnQoc2lnSGV4LnNsaWNlKC0yKSwgMTYpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGxhc3RCeXRlLCBTSUdIQVNIX0FMTCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd2ZXJpZnlTaWduYXR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIHVuc2lnbmVkIGlucHV0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBwdWJLZXkgPSBCdWZmZXIuZnJvbShLRVlTLnB1YiwgJ2hleCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHR4LnZlcmlmeVNpZ25hdHVyZShwdWJLZXksIDApLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGFmdGVyIHNpZ25pbmcgd2l0aCBtYXRjaGluZyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IHByaXZLZXkgPSBCdWZmZXIuZnJvbShLRVlTLnBydiwgJ2hleCcpO1xuICAgICAgdHguc2lnbihwcml2S2V5KTtcbiAgICAgIGNvbnN0IHB1YktleSA9IEJ1ZmZlci5mcm9tKEtFWVMucHViLCAnaGV4Jyk7XG4gICAgICBhc3NlcnQub2sodHgudmVyaWZ5U2lnbmF0dXJlKHB1YktleSwgMCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhY2NlcHQgeC1vbmx5ICgzMi1ieXRlKSBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBwcml2S2V5ID0gQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKTtcbiAgICAgIHR4LnNpZ24ocHJpdktleSk7XG4gICAgICBjb25zdCB4T25seVB1YiA9IEJ1ZmZlci5mcm9tKEtFWVMucHViLCAnaGV4Jykuc2xpY2UoMSk7XG4gICAgICBhc3NlcnQub2sodHgudmVyaWZ5U2lnbmF0dXJlKHhPbmx5UHViLCAwKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3Igd3JvbmcgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QgcHJpdktleSA9IEJ1ZmZlci5mcm9tKEtFWVMucHJ2LCAnaGV4Jyk7XG4gICAgICB0eC5zaWduKHByaXZLZXkpO1xuICAgICAgY29uc3Qgd3JvbmdQdWIgPSBCdWZmZXIuZnJvbSgnMDInICsgJ2FiJy5yZXBlYXQoMzIpLCAnaGV4Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwodHgudmVyaWZ5U2lnbmF0dXJlKHdyb25nUHViLCAwKSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2UgZm9yIG91dC1vZi1yYW5nZSBpbnB1dCBpbmRleCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QgcHJpdktleSA9IEJ1ZmZlci5mcm9tKEtFWVMucHJ2LCAnaGV4Jyk7XG4gICAgICB0eC5zaWduKHByaXZLZXkpO1xuICAgICAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20oS0VZUy5wdWIsICdoZXgnKTtcbiAgICAgIGFzc2VydC5lcXVhbCh0eC52ZXJpZnlTaWduYXR1cmUocHViS2V5LCA5OSksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2V4cGxhaW5UcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gd2l0aCBjb3JyZWN0IGZpZWxkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcblxuICAgICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLmlkLCAnJyk7XG4gICAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24udHlwZSwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFtb3VudCwgJzk5OTk4MDAwJyk7XG4gICAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uaW5wdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuZXF1YWwoZXhwbGFuYXRpb24uaW5wdXRzWzBdLmFtb3VudCwgJzEwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjYWxjdWxhdGUgdGhlIGZlZSBhcyB0b3RhbEluIC0gdG90YWxPdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gdHguZXhwbGFpblRyYW5zYWN0aW9uKCk7XG4gICAgICAvLyBmZWUgPSAxMDAwMDAwMDAgLSA5OTk5ODAwMCA9IDIwMDBcbiAgICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5mZWUuZmVlLCAnMjAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdW0gYWxsIG91dHB1dHMgaW4gb3V0cHV0QW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLm11bHRpSW5wdXQpO1xuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICAgIGFzc2VydC5lcXVhbChleHBsYW5hdGlvbi5vdXRwdXRBbW91bnQsICcyOTk5OTgwMDAnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEZlZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBleHBsaWNpdCBmZWUgd2hlbiBzZXQgaW4gdHhEYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBhc3NlcnQuZXF1YWwodHguZ2V0RmVlLCAnMjAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb21wdXRlIGZlZSBmcm9tIGlucHV0cyAtIG91dHB1dHMgd2hlbiBmZWUgaXMgbm90IHNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4RGF0YSA9IHsgLi4uVFJBTlNBQ1RJT05TLnNpbXBsZSB9O1xuICAgICAgZGVsZXRlIHR4RGF0YS5mZWU7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCB0eERhdGEpO1xuICAgICAgLy8gaW5wdXQ6IDEwMDAwMDAwMCwgb3V0cHV0OiA5OTk5ODAwMCwgZmVlID0gMjAwMFxuICAgICAgYXNzZXJ0LmVxdWFsKHR4LmdldEZlZSwgJzIwMDAnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25hYmxlUGF5bG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIDMyLWJ5dGUgQnVmZmVyIChCbGFrZTJiIGhhc2gpJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdHguc2lnbmFibGVQYXlsb2FkO1xuICAgICAgYXNzZXJ0Lm9rKEJ1ZmZlci5pc0J1ZmZlcihwYXlsb2FkKSk7XG4gICAgICBhc3NlcnQuZXF1YWwocGF5bG9hZC5sZW5ndGgsIDMyKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0cmFuc2FjdGlvbiBoYXMgbm8gaW5wdXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTik7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgdHguc2lnbmFibGVQYXlsb2FkO1xuICAgICAgfSwgL25vIGlucHV0cy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZGV0ZXJtaW5pc3RpYyBoYXNoIGZvciBzYW1lIHRyYW5zYWN0aW9uIGRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eDEgPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCB0eDIgPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBhc3NlcnQub2sodHgxLnNpZ25hYmxlUGF5bG9hZC5lcXVhbHModHgyLnNpZ25hYmxlUGF5bG9hZCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZGlmZmVyZW50IGhhc2hlcyBmb3IgZGlmZmVyZW50IHRyYW5zYWN0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4MSA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IHR4MiA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMubXVsdGlJbnB1dCk7XG4gICAgICBhc3NlcnQub2soIXR4MS5zaWduYWJsZVBheWxvYWQuZXF1YWxzKHR4Mi5zaWduYWJsZVBheWxvYWQpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FkZFNpZ25hdHVyZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGFwcGx5IGEgNjQtYnl0ZSBTY2hub3JyIHNpZ25hdHVyZSB0byBhbGwgaW5wdXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBmYWtlU2lnID0gQnVmZmVyLmFsbG9jKDY0LCAweGFiKTtcbiAgICAgIHR4LmFkZFNpZ25hdHVyZShLRVlTLnB1YiwgZmFrZVNpZyk7XG5cbiAgICAgIGFzc2VydC5lcXVhbCh0eC50eERhdGEuaW5wdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQub2sodHgudHhEYXRhLmlucHV0c1swXS5zaWduYXR1cmVTY3JpcHQpO1xuICAgICAgLy8gNjUgYnl0ZXMgPSAxMzAgaGV4IGNoYXJzICg2NCBzaWcgKyAxIHNpZ2hhc2ggdHlwZSlcbiAgICAgIGFzc2VydC5lcXVhbCh0eC50eERhdGEuaW5wdXRzWzBdLnNpZ25hdHVyZVNjcmlwdCEubGVuZ3RoLCAxMzApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBzaWduYXR1cmUgdG8gYWxsIGlucHV0cyBvZiBhIG11bHRpLWlucHV0IHR4JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLm11bHRpSW5wdXQpO1xuICAgICAgY29uc3QgZmFrZVNpZyA9IEJ1ZmZlci5hbGxvYyg2NCwgMHhjZCk7XG4gICAgICB0eC5hZGRTaWduYXR1cmUoS0VZUy5wdWIsIGZha2VTaWcpO1xuXG4gICAgICBhc3NlcnQuZXF1YWwodHgudHhEYXRhLmlucHV0cy5sZW5ndGgsIDIpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiB0eC50eERhdGEuaW5wdXRzKSB7XG4gICAgICAgIGFzc2VydC5vayhpbnB1dC5zaWduYXR1cmVTY3JpcHQpO1xuICAgICAgICBhc3NlcnQuZXF1YWwoaW5wdXQuc2lnbmF0dXJlU2NyaXB0IS5sZW5ndGgsIDEzMCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBub24tNjQtYnl0ZSBzaWduYXR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICB0eC5hZGRTaWduYXR1cmUoS0VZUy5wdWIsIEJ1ZmZlci5hbGxvYygzMikpO1xuICAgICAgfSwgLzY0LWJ5dGUvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwZW5kIFNJR0hBU0hfQUxMIGJ5dGUgYXQgdGhlIGVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QgZmFrZVNpZyA9IEJ1ZmZlci5hbGxvYyg2NCwgMHhhYik7XG4gICAgICB0eC5hZGRTaWduYXR1cmUoS0VZUy5wdWIsIGZha2VTaWcpO1xuICAgICAgY29uc3Qgc2lnSGV4ID0gdHgudHhEYXRhLmlucHV0c1swXS5zaWduYXR1cmVTY3JpcHQhO1xuICAgICAgY29uc3QgbGFzdEJ5dGUgPSBwYXJzZUludChzaWdIZXguc2xpY2UoLTIpLCAxNik7XG4gICAgICBhc3NlcnQuZXF1YWwobGFzdEJ5dGUsIFNJR0hBU0hfQUxMKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvZHVjZSBhIHNpZ25hdHVyZSB0aGF0IHZlcmlmaWVzIHdoZW4gc2lnbmVkIHdpdGggdGhlIGNvcnJlY3QgcHJpdmF0ZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIC8vIFNpZ24gcHJvcGVybHkgd2l0aCBwcml2YXRlIGtleSB0byBnZXQgYSByZWFsIHNpZ25hdHVyZVxuICAgICAgY29uc3QgcHJpdktleSA9IEJ1ZmZlci5mcm9tKEtFWVMucHJ2LCAnaGV4Jyk7XG4gICAgICB0eC5zaWduKHByaXZLZXkpO1xuICAgICAgY29uc3QgcmVhbFNpZ0hleCA9IHR4LnR4RGF0YS5pbnB1dHNbMF0uc2lnbmF0dXJlU2NyaXB0ITtcbiAgICAgIGNvbnN0IHJlYWxTaWcgPSBCdWZmZXIuZnJvbShyZWFsU2lnSGV4LnNsaWNlKDAsIDEyOCksICdoZXgnKTsgLy8gNjQtYnl0ZSBTY2hub3JyIHNpZ1xuXG4gICAgICAvLyBOb3cgY3JlYXRlIGEgZnJlc2ggdHggYW5kIHVzZSBhZGRTaWduYXR1cmUgaW5zdGVhZFxuICAgICAgY29uc3QgdHgyID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgdHgyLmFkZFNpZ25hdHVyZShLRVlTLnB1YiwgcmVhbFNpZyk7XG5cbiAgICAgIC8vIFRoZSBzaWduYXR1cmUgc2NyaXB0cyBzaG91bGQgbWF0Y2ggKHNhbWUgc2lnIGJ5dGVzICsgc2FtZSBzaWdoYXNoIHR5cGUpXG4gICAgICBhc3NlcnQuZXF1YWwodHgyLnR4RGF0YS5pbnB1dHNbMF0uc2lnbmF0dXJlU2NyaXB0LCB0eC50eERhdGEuaW5wdXRzWzBdLnNpZ25hdHVyZVNjcmlwdCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdTZXJpYWxpemF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCd0b0pzb24gc2hvdWxkIHJldHVybiBhIGNvcHkgb2YgdHhEYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBqc29uID0gdHgudG9Kc29uKCk7XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKGpzb24sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgYXNzZXJ0Lm5vdEVxdWFsKGpzb24sIHR4LnR4RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgndG9Ccm9hZGNhc3RGb3JtYXQgc2hvdWxkIHJldHVybiBhIEpTT04gc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHggPSBuZXcgVHJhbnNhY3Rpb24oQ09JTiwgVFJBTlNBQ1RJT05TLnNpbXBsZSk7XG4gICAgICBjb25zdCBicm9hZGNhc3QgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHR5cGVvZiBicm9hZGNhc3QsICdzdHJpbmcnKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoYnJvYWRjYXN0KTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWQudmVyc2lvbiwgMCk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkLmlucHV0cy5sZW5ndGgsIDEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RvSGV4IHNob3VsZCByZXR1cm4gaGV4LWVuY29kZWQgSlNPTicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4ID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QgaGV4ID0gdHgudG9IZXgoKTtcbiAgICAgIGFzc2VydC5vaygvXlswLTlhLWZBLUZdKyQvLnRlc3QoaGV4KSk7XG4gICAgICBjb25zdCBkZWNvZGVkID0gQnVmZmVyLmZyb20oaGV4LCAnaGV4JykudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoZGVjb2RlZCk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkLnZlcnNpb24sIDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb21IZXggc2hvdWxkIHJlY29uc3RydWN0IHRoZSB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QgaGV4ID0gb3JpZ2luYWwudG9IZXgoKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkID0gVHJhbnNhY3Rpb24uZnJvbUhleChDT0lOLCBoZXgpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChyZXN0b3JlZC50b0pzb24oKSwgb3JpZ2luYWwudG9Kc29uKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb21Kc29uIHNob3VsZCByZWNvbnN0cnVjdCBmcm9tIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QganNvbiA9IG9yaWdpbmFsLnRvSnNvbigpO1xuICAgICAgY29uc3QgcmVzdG9yZWQgPSBUcmFuc2FjdGlvbi5mcm9tSnNvbihDT0lOLCBqc29uKTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwocmVzdG9yZWQudG9Kc29uKCksIGpzb24pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb21Kc29uIHNob3VsZCByZWNvbnN0cnVjdCBmcm9tIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsID0gbmV3IFRyYW5zYWN0aW9uKENPSU4sIFRSQU5TQUNUSU9OUy5zaW1wbGUpO1xuICAgICAgY29uc3QganNvblN0ciA9IEpTT04uc3RyaW5naWZ5KG9yaWdpbmFsLnRvSnNvbigpKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkID0gVHJhbnNhY3Rpb24uZnJvbUpzb24oQ09JTiwganNvblN0cik7XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3RvcmVkLnRvSnNvbigpLCBvcmlnaW5hbC50b0pzb24oKSk7XG4gICAgfSk7XG5cbiAgICBpdCgncm91bmQtdHJpcCB0aHJvdWdoIHRvSGV4L2Zyb21IZXggc2hvdWxkIHByZXNlcnZlIHNpZ25hdHVyZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eCA9IG5ldyBUcmFuc2FjdGlvbihDT0lOLCBUUkFOU0FDVElPTlMuc2ltcGxlKTtcbiAgICAgIGNvbnN0IHByaXZLZXkgPSBCdWZmZXIuZnJvbShLRVlTLnBydiwgJ2hleCcpO1xuICAgICAgdHguc2lnbihwcml2S2V5KTtcblxuICAgICAgY29uc3QgaGV4ID0gdHgudG9IZXgoKTtcbiAgICAgIGNvbnN0IHJlc3RvcmVkID0gVHJhbnNhY3Rpb24uZnJvbUhleChDT0lOLCBoZXgpO1xuXG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKHJlc3RvcmVkLnNpZ25hdHVyZSwgdHguc2lnbmF0dXJlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|