@bitgo-beta/sdk-coin-flrp 1.0.0-alpha.46 → 1.0.0-alpha.47

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/sdk-coin-flrp",
3
- "version": "1.0.0-alpha.46",
3
+ "version": "1.0.0-alpha.47",
4
4
  "description": "BitGo's SDK coin library for flrp coin",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -43,13 +43,13 @@
43
43
  ]
44
44
  },
45
45
  "devDependencies": {
46
- "@bitgo-beta/sdk-api": "1.6.1-alpha.432",
46
+ "@bitgo-beta/sdk-api": "1.6.1-alpha.433",
47
47
  "@bitgo-beta/sdk-test": "^9.1.19"
48
48
  },
49
49
  "dependencies": {
50
- "@bitgo-beta/sdk-core": "2.4.1-alpha.432",
51
- "@bitgo-beta/secp256k1": "1.0.1-alpha.390",
52
- "@bitgo-beta/statics": "10.0.1-alpha.432",
50
+ "@bitgo-beta/sdk-core": "2.4.1-alpha.433",
51
+ "@bitgo-beta/secp256k1": "1.0.1-alpha.391",
52
+ "@bitgo-beta/statics": "10.0.1-alpha.433",
53
53
  "@flarenetwork/flarejs": "4.1.1",
54
54
  "bech32": "^2.0.0",
55
55
  "bignumber.js": "9.0.0",
@@ -58,7 +58,7 @@
58
58
  "ethereumjs-util": "^7.1.5",
59
59
  "safe-buffer": "^5.2.1"
60
60
  },
61
- "gitHead": "b75f7d198d66a10d68a7581409fd248db8703fac",
61
+ "gitHead": "7835e2e18a44b657528177d045e43a6f1b54dbcd",
62
62
  "files": [
63
63
  "dist"
64
64
  ]
@@ -1,18 +0,0 @@
1
- import { BaseTransactionBuilder, BaseTransactionBuilderFactory } from '@bitgo-beta/sdk-core';
2
- export interface RecoverModeTestSuitArgs {
3
- transactionType: string;
4
- newTxFactory: () => BaseTransactionBuilderFactory;
5
- newTxBuilder: () => BaseTransactionBuilder;
6
- privateKey: {
7
- prv1: string;
8
- prv2: string;
9
- prv3: string;
10
- };
11
- }
12
- /**
13
- * Test suite focusing on recovery mode signing.
14
- * In recovery mode, the backup key (prv3) is used instead of user key (prv1) along with BitGo key (prv2).
15
- * @param {RecoverModeTestSuitArgs} data with required info.
16
- */
17
- export default function recoverModeTestSuit(data: RecoverModeTestSuitArgs): void;
18
- //# sourceMappingURL=recoverModeTestSuit.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recoverModeTestSuit.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/recoverModeTestSuit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAE7F,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,6BAA6B,CAAC;IAClD,YAAY,EAAE,MAAM,sBAAsB,CAAC;IAC3C,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CA+G/E"}
@@ -1,106 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = recoverModeTestSuit;
4
- /**
5
- * Test suite focusing on recovery mode signing.
6
- * In recovery mode, the backup key (prv3) is used instead of user key (prv1) along with BitGo key (prv2).
7
- * @param {RecoverModeTestSuitArgs} data with required info.
8
- */
9
- function recoverModeTestSuit(data) {
10
- describe(`should test recovery mode for ${data.transactionType}`, () => {
11
- it('Should set recoverMode flag on builder', async () => {
12
- const txBuilder = data.newTxBuilder();
13
- // @ts-expect-error - accessing protected property for testing
14
- txBuilder.recoverSigner.should.equal(false);
15
- // @ts-expect-error - method exists on flrp TransactionBuilder
16
- txBuilder.recoverMode(true);
17
- // @ts-expect-error - accessing protected property for testing
18
- txBuilder.recoverSigner.should.equal(true);
19
- // @ts-expect-error - method exists on flrp TransactionBuilder
20
- txBuilder.recoverMode(false);
21
- // @ts-expect-error - accessing protected property for testing
22
- txBuilder.recoverSigner.should.equal(false);
23
- });
24
- it('Should default recoverMode to true when called without argument', async () => {
25
- const txBuilder = data.newTxBuilder();
26
- // @ts-expect-error - method exists on flrp TransactionBuilder
27
- txBuilder.recoverMode();
28
- // @ts-expect-error - accessing protected property for testing
29
- txBuilder.recoverSigner.should.equal(true);
30
- });
31
- it('Should build unsigned tx in recovery mode', async () => {
32
- const txBuilder = data.newTxBuilder();
33
- // @ts-expect-error - method exists on flrp TransactionBuilder
34
- txBuilder.recoverMode(true);
35
- const tx = await txBuilder.build();
36
- tx.toBroadcastFormat().should.be.a.String();
37
- });
38
- it('Should half sign tx in recovery mode using backup key (prv3)', async () => {
39
- const txBuilder = data.newTxBuilder();
40
- // @ts-expect-error - method exists on flrp TransactionBuilder
41
- txBuilder.recoverMode(true);
42
- // In recovery mode, sign with backup key (prv3) instead of user key (prv1)
43
- txBuilder.sign({ key: data.privateKey.prv3 });
44
- const tx = await txBuilder.build();
45
- const halfSignedHex = tx.toBroadcastFormat();
46
- halfSignedHex.should.be.a.String();
47
- halfSignedHex.length.should.be.greaterThan(0);
48
- });
49
- it('Should full sign tx in recovery mode using backup key (prv3) and bitgo key (prv2)', async () => {
50
- const txBuilder = data.newTxBuilder();
51
- // @ts-expect-error - method exists on flrp TransactionBuilder
52
- txBuilder.recoverMode(true);
53
- // In recovery mode: backup key (prv3) + bitgo key (prv2)
54
- txBuilder.sign({ key: data.privateKey.prv3 });
55
- txBuilder.sign({ key: data.privateKey.prv2 });
56
- const tx = await txBuilder.build();
57
- const fullSignedHex = tx.toBroadcastFormat();
58
- fullSignedHex.should.be.a.String();
59
- fullSignedHex.length.should.be.greaterThan(0);
60
- });
61
- it('Should produce different signed tx in recovery mode vs regular mode', async () => {
62
- // Build and sign in regular mode (user key prv1 + bitgo key prv2)
63
- const regularTxBuilder = data.newTxBuilder();
64
- // @ts-expect-error - method exists on flrp TransactionBuilder
65
- regularTxBuilder.recoverMode(false);
66
- regularTxBuilder.sign({ key: data.privateKey.prv1 });
67
- regularTxBuilder.sign({ key: data.privateKey.prv2 });
68
- const regularTx = await regularTxBuilder.build();
69
- const regularHex = regularTx.toBroadcastFormat();
70
- // Build and sign in recovery mode (backup key prv3 + bitgo key prv2)
71
- const recoveryTxBuilder = data.newTxBuilder();
72
- // @ts-expect-error - method exists on flrp TransactionBuilder
73
- recoveryTxBuilder.recoverMode(true);
74
- recoveryTxBuilder.sign({ key: data.privateKey.prv3 });
75
- recoveryTxBuilder.sign({ key: data.privateKey.prv2 });
76
- const recoveryTx = await recoveryTxBuilder.build();
77
- const recoveryHex = recoveryTx.toBroadcastFormat();
78
- // Both should be valid hex strings
79
- regularHex.should.be.a.String();
80
- recoveryHex.should.be.a.String();
81
- // The signed transactions should be different because different keys are used
82
- regularHex.should.not.equal(recoveryHex);
83
- // Signatures should also be different
84
- const regularSignatures = regularTx.signature;
85
- const recoverySignatures = recoveryTx.signature;
86
- regularSignatures.should.not.eql(recoverySignatures);
87
- });
88
- it('Should set recoverMode via factory and pass to builder from raw tx', async () => {
89
- // First build an unsigned transaction
90
- const txBuilder = data.newTxBuilder();
91
- const tx = await txBuilder.build();
92
- const unsignedHex = tx.toBroadcastFormat();
93
- // Parse from raw with recovery mode enabled on factory
94
- const factory = data.newTxFactory();
95
- // @ts-expect-error - accessing the method which may not be on base type
96
- if (typeof factory.recoverMode === 'function') {
97
- // @ts-expect-error - calling recoverMode on factory
98
- factory.recoverMode(true);
99
- const recoveredBuilder = factory.from(unsignedHex);
100
- // Cast to any to access protected property for testing
101
- recoveredBuilder.recoverSigner.should.equal(true);
102
- }
103
- });
104
- });
105
- }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3Zlck1vZGVUZXN0U3VpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9saWIvcmVjb3Zlck1vZGVUZXN0U3VpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWNBLHNDQStHQztBQXBIRDs7OztHQUlHO0FBQ0gsU0FBd0IsbUJBQW1CLENBQUMsSUFBNkI7SUFDdkUsUUFBUSxDQUFDLGlDQUFpQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsR0FBRyxFQUFFO1FBQ3JFLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN0RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsOERBQThEO1lBQzlELFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1Qyw4REFBOEQ7WUFDOUQsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1Qiw4REFBOEQ7WUFDOUQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNDLDhEQUE4RDtZQUM5RCxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLDhEQUE4RDtZQUM5RCxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDL0UsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RDLDhEQUE4RDtZQUM5RCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDeEIsOERBQThEO1lBQzlELFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENB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QUFHLE1BQU0sU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRTNDLHVEQUF1RDtZQUN2RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEMsd0VBQXdFO1lBQ3hFLElBQUksT0FBTyxPQUFPLENBQUMsV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUM5QyxvREFBb0Q7Z0JBQ3BELE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbkQsdURBQXVEO2dCQUN0RCxnQkFBd0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyLCBCYXNlVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyTW9kZVRlc3RTdWl0QXJncyB7XG4gIHRyYW5zYWN0aW9uVHlwZTogc3RyaW5nO1xuICBuZXdUeEZhY3Rvcnk6ICgpID0+IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5O1xuICBuZXdUeEJ1aWxkZXI6ICgpID0+IEJhc2VUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gIHByaXZhdGVLZXk6IHsgcHJ2MTogc3RyaW5nOyBwcnYyOiBzdHJpbmc7IHBydjM6IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRlc3Qgc3VpdGUgZm9jdXNpbmcgb24gcmVjb3ZlcnkgbW9kZSBzaWduaW5nLlxuICogSW4gcmVjb3ZlcnkgbW9kZSwgdGhlIGJhY2t1cCBrZXkgKHBydjMpIGlzIHVzZWQgaW5zdGVhZCBvZiB1c2VyIGtleSAocHJ2MSkgYWxvbmcgd2l0aCBCaXRHbyBrZXkgKHBydjIpLlxuICogQHBhcmFtIHtSZWNvdmVyTW9kZVRlc3RTdWl0QXJnc30gZGF0YSB3aXRoIHJlcXVpcmVkIGluZm8uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY292ZXJNb2RlVGVzdFN1aXQoZGF0YTogUmVjb3Zlck1vZGVUZXN0U3VpdEFyZ3MpOiB2b2lkIHtcbiAgZGVzY3JpYmUoYHNob3VsZCB0ZXN0IHJlY292ZXJ5IG1vZGUgZm9yICR7ZGF0YS50cmFuc2FjdGlvblR5cGV9YCwgKCkgPT4ge1xuICAgIGl0KCdTaG91bGQgc2V0IHJlY292ZXJNb2RlIGZsYWcgb24gYnVpbGRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhCdWlsZGVyKCk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gYWNjZXNzaW5nIHByb3RlY3RlZCBwcm9wZXJ0eSBmb3IgdGVzdGluZ1xuICAgICAgdHhCdWlsZGVyLnJlY292ZXJTaWduZXIuc2hvdWxkLmVxdWFsKGZhbHNlKTtcblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG1ldGhvZCBleGlzdHMgb24gZmxycCBUcmFuc2FjdGlvbkJ1aWxkZXJcbiAgICAgIHR4QnVpbGRlci5yZWNvdmVyTW9kZSh0cnVlKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBhY2Nlc3NpbmcgcHJvdGVjdGVkIHByb3BlcnR5IGZvciB0ZXN0aW5nXG4gICAgICB0eEJ1aWxkZXIucmVjb3ZlclNpZ25lci5zaG91bGQuZXF1YWwodHJ1ZSk7XG5cbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBtZXRob2QgZXhpc3RzIG9uIGZscnAgVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgICB0eEJ1aWxkZXIucmVjb3Zlck1vZGUoZmFsc2UpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIGFjY2Vzc2luZyBwcm90ZWN0ZWQgcHJvcGVydHkgZm9yIHRlc3RpbmdcbiAgICAgIHR4QnVpbGRlci5yZWNvdmVyU2lnbmVyLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGRlZmF1bHQgcmVjb3Zlck1vZGUgdG8gdHJ1ZSB3aGVuIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBtZXRob2QgZXhpc3RzIG9uIGZscnAgVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgICB0eEJ1aWxkZXIucmVjb3Zlck1vZGUoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBhY2Nlc3NpbmcgcHJvdGVjdGVkIHByb3BlcnR5IGZvciB0ZXN0aW5nXG4gICAgICB0eEJ1aWxkZXIucmVjb3ZlclNpZ25lci5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGJ1aWxkIHVuc2lnbmVkIHR4IGluIHJlY292ZXJ5IG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSBkYXRhLm5ld1R4QnVpbGRlcigpO1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIG1ldGhvZCBleGlzdHMgb24gZmxycCBUcmFuc2FjdGlvbkJ1aWxkZXJcbiAgICAgIHR4QnVpbGRlci5yZWNvdmVyTW9kZSh0cnVlKTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLnNob3VsZC5iZS5hLlN0cmluZygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ1Nob3VsZCBoYWxmIHNpZ24gdHggaW4gcmVjb3ZlcnkgbW9kZSB1c2luZyBiYWNrdXAga2V5IChwcnYzKScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhCdWlsZGVyKCk7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbWV0aG9kIGV4aXN0cyBvbiBmbHJwIFRyYW5zYWN0aW9uQnVpbGRlclxuICAgICAgdHhCdWlsZGVyLnJlY292ZXJNb2RlKHRydWUpO1xuXG4gICAgICAvLyBJbiByZWNvdmVyeSBtb2RlLCBzaWduIHdpdGggYmFja3VwIGtleSAocHJ2MykgaW5zdGVhZCBvZiB1c2VyIGtleSAocHJ2MSlcbiAgICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBkYXRhLnByaXZhdGVLZXkucHJ2MyB9KTtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCBoYWxmU2lnbmVkSGV4ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGhhbGZTaWduZWRIZXguc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBoYWxmU2lnbmVkSGV4Lmxlbmd0aC5zaG91bGQuYmUuZ3JlYXRlclRoYW4oMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIGZ1bGwgc2lnbiB0eCBpbiByZWNvdmVyeSBtb2RlIHVzaW5nIGJhY2t1cCBrZXkgKHBydjMpIGFuZCBiaXRnbyBrZXkgKHBydjIpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBtZXRob2QgZXhpc3RzIG9uIGZscnAgVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgICB0eEJ1aWxkZXIucmVjb3Zlck1vZGUodHJ1ZSk7XG5cbiAgICAgIC8vIEluIHJlY292ZXJ5IG1vZGU6IGJhY2t1cCBrZXkgKHBydjMpICsgYml0Z28ga2V5IChwcnYyKVxuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdmF0ZUtleS5wcnYzIH0pO1xuICAgICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdmF0ZUtleS5wcnYyIH0pO1xuICAgICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IGZ1bGxTaWduZWRIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgZnVsbFNpZ25lZEhleC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIGZ1bGxTaWduZWRIZXgubGVuZ3RoLnNob3VsZC5iZS5ncmVhdGVyVGhhbigwKTtcbiAgICB9KTtcblxuICAgIGl0KCdTaG91bGQgcHJvZHVjZSBkaWZmZXJlbnQgc2lnbmVkIHR4IGluIHJlY292ZXJ5IG1vZGUgdnMgcmVndWxhciBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gQnVpbGQgYW5kIHNpZ24gaW4gcmVndWxhciBtb2RlICh1c2VyIGtleSBwcnYxICsgYml0Z28ga2V5IHBydjIpXG4gICAgICBjb25zdCByZWd1bGFyVHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBtZXRob2QgZXhpc3RzIG9uIGZscnAgVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgICByZWd1bGFyVHhCdWlsZGVyLnJlY292ZXJNb2RlKGZhbHNlKTtcbiAgICAgIHJlZ3VsYXJUeEJ1aWxkZXIuc2lnbih7IGtleTogZGF0YS5wcml2YXRlS2V5LnBydjEgfSk7XG4gICAgICByZWd1bGFyVHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdmF0ZUtleS5wcnYyIH0pO1xuICAgICAgY29uc3QgcmVndWxhclR4ID0gYXdhaXQgcmVndWxhclR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgcmVndWxhckhleCA9IHJlZ3VsYXJUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBCdWlsZCBhbmQgc2lnbiBpbiByZWNvdmVyeSBtb2RlIChiYWNrdXAga2V5IHBydjMgKyBiaXRnbyBrZXkgcHJ2MilcbiAgICAgIGNvbnN0IHJlY292ZXJ5VHhCdWlsZGVyID0gZGF0YS5uZXdUeEJ1aWxkZXIoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBtZXRob2QgZXhpc3RzIG9uIGZscnAgVHJhbnNhY3Rpb25CdWlsZGVyXG4gICAgICByZWNvdmVyeVR4QnVpbGRlci5yZWNvdmVyTW9kZSh0cnVlKTtcbiAgICAgIHJlY292ZXJ5VHhCdWlsZGVyLnNpZ24oeyBrZXk6IGRhdGEucHJpdmF0ZUtleS5wcnYzIH0pO1xuICAgICAgcmVjb3ZlcnlUeEJ1aWxkZXIuc2lnbih7IGtleTogZGF0YS5wcml2YXRlS2V5LnBydjIgfSk7XG4gICAgICBjb25zdCByZWNvdmVyeVR4ID0gYXdhaXQgcmVjb3ZlcnlUeEJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIGNvbnN0IHJlY292ZXJ5SGV4ID0gcmVjb3ZlcnlUeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBCb3RoIHNob3VsZCBiZSB2YWxpZCBoZXggc3RyaW5nc1xuICAgICAgcmVndWxhckhleC5zaG91bGQuYmUuYS5TdHJpbmcoKTtcbiAgICAgIHJlY292ZXJ5SGV4LnNob3VsZC5iZS5hLlN0cmluZygpO1xuXG4gICAgICAvLyBUaGUgc2lnbmVkIHRyYW5zYWN0aW9ucyBzaG91bGQgYmUgZGlmZmVyZW50IGJlY2F1c2UgZGlmZmVyZW50IGtleXMgYXJlIHVzZWRcbiAgICAgIHJlZ3VsYXJIZXguc2hvdWxkLm5vdC5lcXVhbChyZWNvdmVyeUhleCk7XG5cbiAgICAgIC8vIFNpZ25hdHVyZXMgc2hvdWxkIGFsc28gYmUgZGlmZmVyZW50XG4gICAgICBjb25zdCByZWd1bGFyU2lnbmF0dXJlcyA9IHJlZ3VsYXJUeC5zaWduYXR1cmU7XG4gICAgICBjb25zdCByZWNvdmVyeVNpZ25hdHVyZXMgPSByZWNvdmVyeVR4LnNpZ25hdHVyZTtcbiAgICAgIHJlZ3VsYXJTaWduYXR1cmVzLnNob3VsZC5ub3QuZXFsKHJlY292ZXJ5U2lnbmF0dXJlcyk7XG4gICAgfSk7XG5cbiAgICBpdCgnU2hvdWxkIHNldCByZWNvdmVyTW9kZSB2aWEgZmFjdG9yeSBhbmQgcGFzcyB0byBidWlsZGVyIGZyb20gcmF3IHR4JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gRmlyc3QgYnVpbGQgYW4gdW5zaWduZWQgdHJhbnNhY3Rpb25cbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IGRhdGEubmV3VHhCdWlsZGVyKCk7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdW5zaWduZWRIZXggPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuXG4gICAgICAvLyBQYXJzZSBmcm9tIHJhdyB3aXRoIHJlY292ZXJ5IG1vZGUgZW5hYmxlZCBvbiBmYWN0b3J5XG4gICAgICBjb25zdCBmYWN0b3J5ID0gZGF0YS5uZXdUeEZhY3RvcnkoKTtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBhY2Nlc3NpbmcgdGhlIG1ldGhvZCB3aGljaCBtYXkgbm90IGJlIG9uIGJhc2UgdHlwZVxuICAgICAgaWYgKHR5cGVvZiBmYWN0b3J5LnJlY292ZXJNb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBjYWxsaW5nIHJlY292ZXJNb2RlIG9uIGZhY3RvcnlcbiAgICAgICAgZmFjdG9yeS5yZWNvdmVyTW9kZSh0cnVlKTtcbiAgICAgICAgY29uc3QgcmVjb3ZlcmVkQnVpbGRlciA9IGZhY3RvcnkuZnJvbSh1bnNpZ25lZEhleCk7XG4gICAgICAgIC8vIENhc3QgdG8gYW55IHRvIGFjY2VzcyBwcm90ZWN0ZWQgcHJvcGVydHkgZm9yIHRlc3RpbmdcbiAgICAgICAgKHJlY292ZXJlZEJ1aWxkZXIgYXMgYW55KS5yZWNvdmVyU2lnbmVyLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=