@bitgo/sdk-core 37.8.0 → 37.10.0
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/account-lib/baseCoin/enum.d.ts +26 -23
- package/dist/src/account-lib/baseCoin/enum.d.ts.map +1 -1
- package/dist/src/account-lib/baseCoin/enum.js +31 -24
- package/dist/src/bitgo/address-book/address-book.d.ts.map +1 -1
- package/dist/src/bitgo/address-book/address-book.js +16 -5
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +10 -0
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/defi/defiVault.d.ts +9 -2
- package/dist/src/bitgo/defi/defiVault.d.ts.map +1 -1
- package/dist/src/bitgo/defi/defiVault.js +28 -4
- package/dist/src/bitgo/utils/mpcUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/mpcUtils.js +26 -2
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts +7 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +31 -3
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts +33 -0
- package/dist/src/bitgo/utils/tss/baseTypes.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTypes.js +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +4 -3
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +4 -3
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +19 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +36 -14
- package/dist/src/bitgo/utils/tss/index.d.ts +1 -0
- package/dist/src/bitgo/utils/tss/index.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/index.js +2 -1
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts +33 -0
- package/dist/src/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
- package/dist/src/bitgo/utils/tss/recipientUtils.js +117 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts +17 -0
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +72 -4
- package/dist/test/unit/bitgo/address-book/address-book.d.ts +2 -0
- package/dist/test/unit/bitgo/address-book/address-book.d.ts.map +1 -0
- package/dist/test/unit/bitgo/address-book/address-book.js +159 -0
- package/dist/test/unit/bitgo/defi/defiVault.js +61 -6
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +84 -1
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +3 -1
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +18 -14
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts +2 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.d.ts.map +1 -0
- package/dist/test/unit/bitgo/utils/tss/recipientUtils.js +171 -0
- package/dist/test/unit/bitgo/wallet/tokenApproval.js +67 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipientUtils.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/bitgo/utils/tss/recipientUtils.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const recipientUtils_1 = require("../../../../../src/bitgo/utils/tss/recipientUtils");
|
|
8
|
+
const errors_1 = require("../../../../../src/bitgo/errors");
|
|
9
|
+
function makeTxRequest(overrides = {}) {
|
|
10
|
+
return {
|
|
11
|
+
txRequestId: 'test-tx-request-id',
|
|
12
|
+
walletId: 'test-wallet-id',
|
|
13
|
+
intent: undefined,
|
|
14
|
+
...overrides,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
describe('recipientUtils', function () {
|
|
18
|
+
describe('NO_RECIPIENT_TX_TYPES', function () {
|
|
19
|
+
it('contains all expected types', function () {
|
|
20
|
+
const expected = [
|
|
21
|
+
// ECDSA EVM
|
|
22
|
+
'acceleration',
|
|
23
|
+
'fillNonce',
|
|
24
|
+
'transferToken',
|
|
25
|
+
'tokenApproval',
|
|
26
|
+
'consolidate',
|
|
27
|
+
'bridgeFunds',
|
|
28
|
+
'enableToken',
|
|
29
|
+
'enabletoken',
|
|
30
|
+
'disabletoken',
|
|
31
|
+
'customTx',
|
|
32
|
+
'defiApprove',
|
|
33
|
+
'defiDeposit',
|
|
34
|
+
'contractCall',
|
|
35
|
+
// Staking
|
|
36
|
+
'delegate',
|
|
37
|
+
'undelegate',
|
|
38
|
+
'switchValidator',
|
|
39
|
+
'stake',
|
|
40
|
+
'unstake',
|
|
41
|
+
'stakeWithCallData',
|
|
42
|
+
'unstakeWithCallData',
|
|
43
|
+
'transferStake',
|
|
44
|
+
'increaseStake',
|
|
45
|
+
'goUnstake',
|
|
46
|
+
'claim',
|
|
47
|
+
'stakeClaimRewards',
|
|
48
|
+
'createAccount',
|
|
49
|
+
'transferAccept',
|
|
50
|
+
'transferReject',
|
|
51
|
+
'transferOfferWithdrawn',
|
|
52
|
+
'cantonCommand',
|
|
53
|
+
'pledge',
|
|
54
|
+
// Avalanche / Flare cross-chain atomic imports
|
|
55
|
+
'import',
|
|
56
|
+
'importtoc',
|
|
57
|
+
];
|
|
58
|
+
expected.forEach((t) => assert_1.default.ok(recipientUtils_1.NO_RECIPIENT_TX_TYPES.has(t), `${t} should be in NO_RECIPIENT_TX_TYPES`));
|
|
59
|
+
assert_1.default.strictEqual(recipientUtils_1.NO_RECIPIENT_TX_TYPES.size, expected.length);
|
|
60
|
+
});
|
|
61
|
+
it('does not contain value-transfer types', function () {
|
|
62
|
+
['payment', 'fanout', 'vote', 'defi-deposit', 'defi-redeem'].forEach((t) => {
|
|
63
|
+
assert_1.default.ok(!recipientUtils_1.NO_RECIPIENT_TX_TYPES.has(t), `${t} must NOT be in NO_RECIPIENT_TX_TYPES`);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe('resolveEffectiveTxParams', function () {
|
|
68
|
+
it('passes through txParams.recipients when present', function () {
|
|
69
|
+
const txRequest = makeTxRequest();
|
|
70
|
+
const txParams = { recipients: [{ address: '0xabc', amount: '100' }] };
|
|
71
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, txParams);
|
|
72
|
+
assert_1.default.deepStrictEqual(result.recipients, txParams.recipients);
|
|
73
|
+
});
|
|
74
|
+
it('falls back to intent.recipients when txParams has none', function () {
|
|
75
|
+
const txRequest = makeTxRequest({
|
|
76
|
+
intent: {
|
|
77
|
+
intentType: 'payment',
|
|
78
|
+
recipients: [
|
|
79
|
+
{
|
|
80
|
+
address: { address: '0xabc' },
|
|
81
|
+
amount: { value: '500', symbol: 'eth' },
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
},
|
|
85
|
+
});
|
|
86
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
87
|
+
assert_1.default.strictEqual(result.recipients?.length, 1);
|
|
88
|
+
assert_1.default.strictEqual(result.recipients?.[0].address, '0xabc');
|
|
89
|
+
assert_1.default.strictEqual(result.recipients?.[0].amount, '500');
|
|
90
|
+
});
|
|
91
|
+
it('resolves txType from intent.intentType when txParams.type is absent', function () {
|
|
92
|
+
const txRequest = makeTxRequest({
|
|
93
|
+
intent: { intentType: 'consolidate' },
|
|
94
|
+
});
|
|
95
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
96
|
+
assert_1.default.strictEqual(result.type, 'consolidate');
|
|
97
|
+
});
|
|
98
|
+
it('does not throw for exempt types', function () {
|
|
99
|
+
for (const txType of [
|
|
100
|
+
'acceleration',
|
|
101
|
+
'consolidate',
|
|
102
|
+
'contractCall',
|
|
103
|
+
'delegate',
|
|
104
|
+
'stake',
|
|
105
|
+
'createAccount',
|
|
106
|
+
'pledge',
|
|
107
|
+
'import',
|
|
108
|
+
'importtoc',
|
|
109
|
+
]) {
|
|
110
|
+
const txRequest = makeTxRequest();
|
|
111
|
+
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, { type: txType }));
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
it('does not throw for Avalanche cross-chain imports resolved from intent.intentType', function () {
|
|
115
|
+
// P-chain and C-chain import intents legitimately carry no recipients —
|
|
116
|
+
// the wallet imports its own UTXOs and the destination address is the
|
|
117
|
+
// wallet itself. The intentType lives only on the intent (txParams.type
|
|
118
|
+
// is unset on the MPC signing call) so the guard must read it from there.
|
|
119
|
+
for (const intentType of ['import', 'importtoc']) {
|
|
120
|
+
const txRequest = makeTxRequest({ intent: { intentType } });
|
|
121
|
+
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}));
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
it('does not throw when buildParams.type is PascalCase but intent.intentType is lowercase', function () {
|
|
125
|
+
// signTransactionTss passes txPrebuild.buildParams as txParams. Prebuild uses
|
|
126
|
+
// type: 'Import' while WP stores intentType: 'import' on the txRequest.
|
|
127
|
+
const txRequest = makeTxRequest({ intent: { intentType: 'import', recipients: [] } });
|
|
128
|
+
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, { type: 'Import', recipients: [] }));
|
|
129
|
+
});
|
|
130
|
+
it('throws InvalidTransactionError for unknown types with no recipients', function () {
|
|
131
|
+
const txRequest = makeTxRequest();
|
|
132
|
+
assert_1.default.throws(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, { type: 'payment' }), errors_1.InvalidTransactionError, 'should throw for payment type with no recipients');
|
|
133
|
+
});
|
|
134
|
+
it('throws when txParams is undefined and no intent', function () {
|
|
135
|
+
const txRequest = makeTxRequest();
|
|
136
|
+
assert_1.default.throws(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, undefined), errors_1.InvalidTransactionError);
|
|
137
|
+
});
|
|
138
|
+
it('does not throw when intent has stakingRequestId (staking bypass)', function () {
|
|
139
|
+
const txRequest = makeTxRequest({
|
|
140
|
+
intent: { intentType: 'delegate', stakingRequestId: 'staking-req-123' },
|
|
141
|
+
});
|
|
142
|
+
assert_1.default.doesNotThrow(() => (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {}));
|
|
143
|
+
});
|
|
144
|
+
it('propagates stakingRequestId from intent into effectiveTxParams', function () {
|
|
145
|
+
const txRequest = makeTxRequest({
|
|
146
|
+
intent: { intentType: 'delegate', stakingRequestId: 'staking-req-456' },
|
|
147
|
+
});
|
|
148
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, {});
|
|
149
|
+
assert_1.default.strictEqual(result.stakingRequestId, 'staking-req-456');
|
|
150
|
+
});
|
|
151
|
+
it('does not overwrite existing stakingRequestId in txParams', function () {
|
|
152
|
+
const txRequest = makeTxRequest({
|
|
153
|
+
intent: { intentType: 'delegate', stakingRequestId: 'from-intent' },
|
|
154
|
+
});
|
|
155
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, { stakingRequestId: 'from-caller' });
|
|
156
|
+
assert_1.default.strictEqual(result.stakingRequestId, 'from-caller');
|
|
157
|
+
});
|
|
158
|
+
it('prefers txParams.recipients over intent.recipients', function () {
|
|
159
|
+
const txRequest = makeTxRequest({
|
|
160
|
+
intent: {
|
|
161
|
+
intentType: 'payment',
|
|
162
|
+
recipients: [{ address: { address: '0xintent' }, amount: { value: '999', symbol: 'eth' } }],
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
const txParams = { recipients: [{ address: '0xcaller', amount: '100' }] };
|
|
166
|
+
const result = (0, recipientUtils_1.resolveEffectiveTxParams)(txRequest, txParams);
|
|
167
|
+
assert_1.default.strictEqual(result.recipients?.[0].address, '0xcaller');
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaXBpZW50VXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvYml0Z28vdXRpbHMvdHNzL3JlY2lwaWVudFV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLHNGQUFvSDtBQUNwSCw0REFBMEU7QUFHMUUsU0FBUyxhQUFhLENBQUMsWUFBZ0MsRUFBRTtJQUN2RCxPQUFPO1FBQ0wsV0FBVyxFQUFFLG9CQUFvQjtRQUNqQyxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLEdBQUcsU0FBUztLQUNXLENBQUM7QUFDNUIsQ0FBQztBQUVELFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtJQUN6QixRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLDZCQUE2QixFQUFFO1lBQ2hDLE1BQU0sUUFBUSxHQUFHO2dCQUNmLFlBQVk7Z0JBQ1osY0FBYztnQkFDZCxXQUFXO2dCQUNYLGVBQWU7Z0JBQ2YsZUFBZTtnQkFDZixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsYUFBYTtnQkFDYixhQUFhO2dCQUNiLGNBQWM7Z0JBQ2QsVUFBVTtnQkFDVixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsY0FBYztnQkFDZCxVQUFVO2dCQUNWLFVBQVU7Z0JBQ1YsWUFBWTtnQkFDWixpQkFBaUI7Z0JBQ2pCLE9BQU87Z0JBQ1AsU0FBUztnQkFDVCxtQkFBbUI7Z0JBQ25CLHFCQUFxQjtnQkFDckIsZUFBZTtnQkFDZixlQUFlO2dCQUNmLFdBQVc7Z0JBQ1gsT0FBTztnQkFDUCxtQkFBbUI7Z0JBQ25CLGVBQWU7Z0JBQ2YsZ0JBQWdCO2dCQUNoQixnQkFBZ0I7Z0JBQ2hCLHdCQUF3QjtnQkFDeEIsZUFBZTtnQkFDZixRQUFRO2dCQUNSLCtDQUErQztnQkFDL0MsUUFBUTtnQkFDUixXQUFXO2FBQ1osQ0FBQztZQUNGLFFBQVEsQ0FBQyxPQUFPLENB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Q0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IE5PX1JFQ0lQSUVOVF9UWF9UWVBFUywgcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9yZWNpcGllbnRVdGlscyc7XG5pbXBvcnQgeyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYy9iaXRnby9lcnJvcnMnO1xuaW1wb3J0IHsgVHhSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc3JjL2JpdGdvL3V0aWxzL3Rzcy9iYXNlVHlwZXMnO1xuXG5mdW5jdGlvbiBtYWtlVHhSZXF1ZXN0KG92ZXJyaWRlczogUGFydGlhbDxUeFJlcXVlc3Q+ID0ge30pOiBUeFJlcXVlc3Qge1xuICByZXR1cm4ge1xuICAgIHR4UmVxdWVzdElkOiAndGVzdC10eC1yZXF1ZXN0LWlkJyxcbiAgICB3YWxsZXRJZDogJ3Rlc3Qtd2FsbGV0LWlkJyxcbiAgICBpbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICAuLi5vdmVycmlkZXMsXG4gIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG59XG5cbmRlc2NyaWJlKCdyZWNpcGllbnRVdGlscycsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ05PX1JFQ0lQSUVOVF9UWF9UWVBFUycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnY29udGFpbnMgYWxsIGV4cGVjdGVkIHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZXhwZWN0ZWQgPSBbXG4gICAgICAgIC8vIEVDRFNBIEVWTVxuICAgICAgICAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgJ2ZpbGxOb25jZScsXG4gICAgICAgICd0cmFuc2ZlclRva2VuJyxcbiAgICAgICAgJ3Rva2VuQXBwcm92YWwnLFxuICAgICAgICAnY29uc29saWRhdGUnLFxuICAgICAgICAnYnJpZGdlRnVuZHMnLFxuICAgICAgICAnZW5hYmxlVG9rZW4nLFxuICAgICAgICAnZW5hYmxldG9rZW4nLFxuICAgICAgICAnZGlzYWJsZXRva2VuJyxcbiAgICAgICAgJ2N1c3RvbVR4JyxcbiAgICAgICAgJ2RlZmlBcHByb3ZlJyxcbiAgICAgICAgJ2RlZmlEZXBvc2l0JyxcbiAgICAgICAgJ2NvbnRyYWN0Q2FsbCcsXG4gICAgICAgIC8vIFN0YWtpbmdcbiAgICAgICAgJ2RlbGVnYXRlJyxcbiAgICAgICAgJ3VuZGVsZWdhdGUnLFxuICAgICAgICAnc3dpdGNoVmFsaWRhdG9yJyxcbiAgICAgICAgJ3N0YWtlJyxcbiAgICAgICAgJ3Vuc3Rha2UnLFxuICAgICAgICAnc3Rha2VXaXRoQ2FsbERhdGEnLFxuICAgICAgICAndW5zdGFrZVdpdGhDYWxsRGF0YScsXG4gICAgICAgICd0cmFuc2ZlclN0YWtlJyxcbiAgICAgICAgJ2luY3JlYXNlU3Rha2UnLFxuICAgICAgICAnZ29VbnN0YWtlJyxcbiAgICAgICAgJ2NsYWltJyxcbiAgICAgICAgJ3N0YWtlQ2xhaW1SZXdhcmRzJyxcbiAgICAgICAgJ2NyZWF0ZUFjY291bnQnLFxuICAgICAgICAndHJhbnNmZXJBY2NlcHQnLFxuICAgICAgICAndHJhbnNmZXJSZWplY3QnLFxuICAgICAgICAndHJhbnNmZXJPZmZlcldpdGhkcmF3bicsXG4gICAgICAgICdjYW50b25Db21tYW5kJyxcbiAgICAgICAgJ3BsZWRnZScsXG4gICAgICAgIC8vIEF2YWxhbmNoZSAvIEZsYXJlIGNyb3NzLWNoYWluIGF0b21pYyBpbXBvcnRzXG4gICAgICAgICdpbXBvcnQnLFxuICAgICAgICAnaW1wb3J0dG9jJyxcbiAgICAgIF07XG4gICAgICBleHBlY3RlZC5mb3JFYWNoKCh0KSA9PiBhc3NlcnQub2soTk9fUkVDSVBJRU5UX1RYX1RZUEVTLmhhcyh0KSwgYCR7dH0gc2hvdWxkIGJlIGluIE5PX1JFQ0lQSUVOVF9UWF9UWVBFU2ApKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChOT19SRUNJUElFTlRfVFhfVFlQRVMuc2l6ZSwgZXhwZWN0ZWQubGVuZ3RoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBjb250YWluIHZhbHVlLXRyYW5zZmVyIHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgWydwYXltZW50JywgJ2Zhbm91dCcsICd2b3RlJywgJ2RlZmktZGVwb3NpdCcsICdkZWZpLXJlZGVlbSddLmZvckVhY2goKHQpID0+IHtcbiAgICAgICAgYXNzZXJ0Lm9rKCFOT19SRUNJUElFTlRfVFhfVFlQRVMuaGFzKHQpLCBgJHt0fSBtdXN0IE5PVCBiZSBpbiBOT19SRUNJUElFTlRfVFhfVFlQRVNgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdwYXNzZXMgdGhyb3VnaCB0eFBhcmFtcy5yZWNpcGllbnRzIHdoZW4gcHJlc2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3QoKTtcbiAgICAgIGNvbnN0IHR4UGFyYW1zID0geyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHhhYmMnLCBhbW91bnQ6ICcxMDAnIH1dIH07XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB0eFBhcmFtcyk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzLCB0eFBhcmFtcy5yZWNpcGllbnRzKTtcbiAgICB9KTtcblxuICAgIGl0KCdmYWxscyBiYWNrIHRvIGludGVudC5yZWNpcGllbnRzIHdoZW4gdHhQYXJhbXMgaGFzIG5vbmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHtcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWRkcmVzczogeyBhZGRyZXNzOiAnMHhhYmMnIH0sXG4gICAgICAgICAgICAgIGFtb3VudDogeyB2YWx1ZTogJzUwMCcsIHN5bWJvbDogJ2V0aCcgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8ubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGFiYycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5yZWNpcGllbnRzPy5bMF0uYW1vdW50LCAnNTAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVzb2x2ZXMgdHhUeXBlIGZyb20gaW50ZW50LmludGVudFR5cGUgd2hlbiB0eFBhcmFtcy50eXBlIGlzIGFic2VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2NvbnNvbGlkYXRlJyB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC50eXBlLCAnY29uc29saWRhdGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCB0aHJvdyBmb3IgZXhlbXB0IHR5cGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChjb25zdCB0eFR5cGUgb2YgW1xuICAgICAgICAnYWNjZWxlcmF0aW9uJyxcbiAgICAgICAgJ2NvbnNvbGlkYXRlJyxcbiAgICAgICAgJ2NvbnRyYWN0Q2FsbCcsXG4gICAgICAgICdkZWxlZ2F0ZScsXG4gICAgICAgICdzdGFrZScsXG4gICAgICAgICdjcmVhdGVBY2NvdW50JyxcbiAgICAgICAgJ3BsZWRnZScsXG4gICAgICAgICdpbXBvcnQnLFxuICAgICAgICAnaW1wb3J0dG9jJyxcbiAgICAgIF0pIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHsgdHlwZTogdHhUeXBlIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCB0aHJvdyBmb3IgQXZhbGFuY2hlIGNyb3NzLWNoYWluIGltcG9ydHMgcmVzb2x2ZWQgZnJvbSBpbnRlbnQuaW50ZW50VHlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFAtY2hhaW4gYW5kIEMtY2hhaW4gaW1wb3J0IGludGVudHMgbGVnaXRpbWF0ZWx5IGNhcnJ5IG5vIHJlY2lwaWVudHMg4oCUXG4gICAgICAvLyB0aGUgd2FsbGV0IGltcG9ydHMgaXRzIG93biBVVFhPcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgdGhlXG4gICAgICAvLyB3YWxsZXQgaXRzZWxmLiBUaGUgaW50ZW50VHlwZSBsaXZlcyBvbmx5IG9uIHRoZSBpbnRlbnQgKHR4UGFyYW1zLnR5cGVcbiAgICAgIC8vIGlzIHVuc2V0IG9uIHRoZSBNUEMgc2lnbmluZyBjYWxsKSBzbyB0aGUgZ3VhcmQgbXVzdCByZWFkIGl0IGZyb20gdGhlcmUuXG4gICAgICBmb3IgKGNvbnN0IGludGVudFR5cGUgb2YgWydpbXBvcnQnLCAnaW1wb3J0dG9jJ10pIHtcbiAgICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7IGludGVudDogeyBpbnRlbnRUeXBlIH0gYXMgYW55IH0pO1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBidWlsZFBhcmFtcy50eXBlIGlzIFBhc2NhbENhc2UgYnV0IGludGVudC5pbnRlbnRUeXBlIGlzIGxvd2VyY2FzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHNpZ25UcmFuc2FjdGlvblRzcyBwYXNzZXMgdHhQcmVidWlsZC5idWlsZFBhcmFtcyBhcyB0eFBhcmFtcy4gUHJlYnVpbGQgdXNlc1xuICAgICAgLy8gdHlwZTogJ0ltcG9ydCcgd2hpbGUgV1Agc3RvcmVzIGludGVudFR5cGU6ICdpbXBvcnQnIG9uIHRoZSB0eFJlcXVlc3QuXG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KHsgaW50ZW50OiB7IGludGVudFR5cGU6ICdpbXBvcnQnLCByZWNpcGllbnRzOiBbXSB9IGFzIGFueSB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwgeyB0eXBlOiAnSW1wb3J0JywgcmVjaXBpZW50czogW10gfSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvciBmb3IgdW5rbm93biB0eXBlcyB3aXRoIG5vIHJlY2lwaWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBtYWtlVHhSZXF1ZXN0KCk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHR5cGU6ICdwYXltZW50JyB9KSxcbiAgICAgICAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gICAgICAgICdzaG91bGQgdGhyb3cgZm9yIHBheW1lbnQgdHlwZSB3aXRoIG5vIHJlY2lwaWVudHMnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHR4UGFyYW1zIGlzIHVuZGVmaW5lZCBhbmQgbm8gaW50ZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCgpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB1bmRlZmluZWQpLCBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgdGhyb3cgd2hlbiBpbnRlbnQgaGFzIHN0YWtpbmdSZXF1ZXN0SWQgKHN0YWtpbmcgYnlwYXNzKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2RlbGVnYXRlJywgc3Rha2luZ1JlcXVlc3RJZDogJ3N0YWtpbmctcmVxLTEyMycgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKHR4UmVxdWVzdCwge30pKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9wYWdhdGVzIHN0YWtpbmdSZXF1ZXN0SWQgZnJvbSBpbnRlbnQgaW50byBlZmZlY3RpdmVUeFBhcmFtcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IG1ha2VUeFJlcXVlc3Qoe1xuICAgICAgICBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2RlbGVnYXRlJywgc3Rha2luZ1JlcXVlc3RJZDogJ3N0YWtpbmctcmVxLTQ1NicgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHt9KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQuc3Rha2luZ1JlcXVlc3RJZCwgJ3N0YWtpbmctcmVxLTQ1NicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IG92ZXJ3cml0ZSBleGlzdGluZyBzdGFraW5nUmVxdWVzdElkIGluIHR4UGFyYW1zJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgIGludGVudDogeyBpbnRlbnRUeXBlOiAnZGVsZWdhdGUnLCBzdGFraW5nUmVxdWVzdElkOiAnZnJvbS1pbnRlbnQnIH0gYXMgYW55LFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXModHhSZXF1ZXN0LCB7IHN0YWtpbmdSZXF1ZXN0SWQ6ICdmcm9tLWNhbGxlcicgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnN0YWtpbmdSZXF1ZXN0SWQsICdmcm9tLWNhbGxlcicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3ByZWZlcnMgdHhQYXJhbXMucmVjaXBpZW50cyBvdmVyIGludGVudC5yZWNpcGllbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gbWFrZVR4UmVxdWVzdCh7XG4gICAgICAgIGludGVudDoge1xuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICcweGludGVudCcgfSwgYW1vdW50OiB7IHZhbHVlOiAnOTk5Jywgc3ltYm9sOiAnZXRoJyB9IH1dLFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdHhQYXJhbXMgPSB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweGNhbGxlcicsIGFtb3VudDogJzEwMCcgfV0gfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyh0eFJlcXVlc3QsIHR4UGFyYW1zKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQucmVjaXBpZW50cz8uWzBdLmFkZHJlc3MsICcweGNhbGxlcicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -131,5 +131,71 @@ describe('Wallet - Token Approval', function () {
|
|
|
131
131
|
await wallet.buildErc20TokenApproval('USDC', 'passphrase123').should.be.rejectedWith('signing error');
|
|
132
132
|
});
|
|
133
133
|
});
|
|
134
|
+
describe('sendTokenEnablement', function () {
|
|
135
|
+
let teWallet;
|
|
136
|
+
let teBaseCoin;
|
|
137
|
+
let teBitGo;
|
|
138
|
+
beforeEach(function () {
|
|
139
|
+
teBitGo = {
|
|
140
|
+
post: sinon_1.default.stub(),
|
|
141
|
+
get: sinon_1.default.stub(),
|
|
142
|
+
setRequestTracer: sinon_1.default.stub(),
|
|
143
|
+
};
|
|
144
|
+
teBaseCoin = {
|
|
145
|
+
getFamily: sinon_1.default.stub().returns('txrp'),
|
|
146
|
+
getFullName: sinon_1.default.stub().returns('Testnet XRP'),
|
|
147
|
+
url: sinon_1.default.stub(),
|
|
148
|
+
keychains: sinon_1.default.stub(),
|
|
149
|
+
supportsTss: sinon_1.default.stub().returns(false),
|
|
150
|
+
getMPCAlgorithm: sinon_1.default.stub(),
|
|
151
|
+
getTokenEnablementConfig: sinon_1.default.stub().returns({ requiresTokenEnablement: true }),
|
|
152
|
+
};
|
|
153
|
+
// custodial wallet so the path after validation calls initiateTransaction
|
|
154
|
+
const walletData = {
|
|
155
|
+
id: 'te-wallet-id',
|
|
156
|
+
coin: 'txrp',
|
|
157
|
+
type: 'custodial',
|
|
158
|
+
keys: ['user-key', 'backup-key', 'bitgo-key'],
|
|
159
|
+
};
|
|
160
|
+
teWallet = new src_1.Wallet(teBitGo, teBaseCoin, walletData);
|
|
161
|
+
});
|
|
162
|
+
it('should throw "Invalid build of token enablement." when prebuildTx is a string', async function () {
|
|
163
|
+
await teWallet
|
|
164
|
+
.sendTokenEnablement({ prebuildTx: 'raw-hex-string' })
|
|
165
|
+
.should.be.rejectedWith('Invalid build of token enablement.');
|
|
166
|
+
});
|
|
167
|
+
it('should throw "Invalid build of token enablement." when buildParams.type is undefined', async function () {
|
|
168
|
+
await teWallet
|
|
169
|
+
.sendTokenEnablement({ prebuildTx: { buildParams: {} } })
|
|
170
|
+
.should.be.rejectedWith('Invalid build of token enablement.');
|
|
171
|
+
});
|
|
172
|
+
it('should throw "Invalid build of token enablement." when buildParams.type is an unrecognised type', async function () {
|
|
173
|
+
await teWallet
|
|
174
|
+
.sendTokenEnablement({ prebuildTx: { buildParams: { type: 'transfer' } } })
|
|
175
|
+
.should.be.rejectedWith('Invalid build of token enablement.');
|
|
176
|
+
});
|
|
177
|
+
it('should pass validation and proceed when buildParams.type is "enabletoken"', async function () {
|
|
178
|
+
const initiateStub = sinon_1.default.stub(teWallet, 'initiateTransaction').resolves({ txid: 'abc123' });
|
|
179
|
+
const result = await teWallet.sendTokenEnablement({
|
|
180
|
+
prebuildTx: { buildParams: { type: 'enabletoken' } },
|
|
181
|
+
});
|
|
182
|
+
result.should.eql({ txid: 'abc123' });
|
|
183
|
+
sinon_1.default.assert.calledOnce(initiateStub);
|
|
184
|
+
});
|
|
185
|
+
it('should pass validation and proceed when buildParams.type is "enableMpt"', async function () {
|
|
186
|
+
const initiateStub = sinon_1.default.stub(teWallet, 'initiateTransaction').resolves({ txid: 'mpt456' });
|
|
187
|
+
const result = await teWallet.sendTokenEnablement({
|
|
188
|
+
prebuildTx: { buildParams: { type: 'enableMpt' } },
|
|
189
|
+
});
|
|
190
|
+
result.should.eql({ txid: 'mpt456' });
|
|
191
|
+
sinon_1.default.assert.calledOnce(initiateStub);
|
|
192
|
+
});
|
|
193
|
+
it('should throw when the coin does not require token enablement', async function () {
|
|
194
|
+
teBaseCoin.getTokenEnablementConfig.returns({ requiresTokenEnablement: false });
|
|
195
|
+
await teWallet
|
|
196
|
+
.sendTokenEnablement({ prebuildTx: { buildParams: { type: 'enableMpt' } } })
|
|
197
|
+
.should.be.rejectedWith(/does not require token enablement transactions/);
|
|
198
|
+
});
|
|
199
|
+
});
|
|
134
200
|
});
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5BcHByb3ZhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby93YWxsZXQvdG9rZW5BcHByb3ZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGtEQUEwQjtBQUMxQixrQkFBZ0I7QUFDaEIseUNBQXFFO0FBRXJFLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRTtJQUNsQyxJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFlBQWlCLENBQUM7SUFDdEIsSUFBSSxjQUFtQixDQUFDO0lBRXhCLFVBQVUsQ0FBQztRQUNULFNBQVMsR0FBRztZQUNWLElBQUksRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2xCLEdBQUcsRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2pCLGdCQUFnQixFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUU7U0FDL0IsQ0FBQztRQUVGLFlBQVksR0FBRztZQUNiLFNBQVMsRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN0QyxHQUFHLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRTtZQUNqQixTQUFTLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRTtZQUN2QixXQUFXLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEMsZUFBZSxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUU7U0FDOUIsQ0FBQztRQUVGLGNBQWMsR0FBRztZQUNmLEVBQUUsRUFBRSxnQkFBZ0I7WUFDcEIsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQztTQUM5QyxDQUFDO1FBRUYsTUFBTSxHQUFHLElBQUksWUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDL0Qs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c2hvdWxkJztcbmltcG9ydCB7IEJ1aWxkVG9rZW5BcHByb3ZhbFJlc3BvbnNlLCBXYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnV2FsbGV0IC0gVG9rZW4gQXBwcm92YWwnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB3YWxsZXQ6IFdhbGxldDtcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgbW9ja0Jhc2VDb2luOiBhbnk7XG4gIGxldCBtb2NrV2FsbGV0RGF0YTogYW55O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGdldDogc2lub24uc3R1YigpLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdldGgnKSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLFxuICAgICAga2V5Y2hhaW5zOiBzaW5vbi5zdHViKCksXG4gICAgICBzdXBwb3J0c1Rzczogc2lub24uc3R1YigpLnJldHVybnMoZmFsc2UpLFxuICAgICAgZ2V0TVBDQWxnb3JpdGhtOiBzaW5vbi5zdHViKCksXG4gICAgfTtcblxuICAgIG1vY2tXYWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICd0ZXN0LXdhbGxldC1pZCcsXG4gICAgICBjb2luOiAndGV0aCcsXG4gICAgICBrZXlzOiBbJ3VzZXIta2V5JywgJ2JhY2t1cC1rZXknLCAnYml0Z28ta2V5J10sXG4gICAgfTtcblxuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBtb2NrQmFzZUNvaW4sIG1vY2tXYWxsZXREYXRhKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZEVyYzIwVG9rZW5BcHByb3ZhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtb2NrVG9rZW5BcHByb3ZhbEJ1aWxkOiBCdWlsZFRva2VuQXBwcm92YWxSZXNwb25zZSA9IHtcbiAgICAgIHR4SGV4OiAnMHgxMjM0NTYnLFxuICAgICAgdHhJbmZvOiB7XG4gICAgICAgIGFtb3VudDogJzB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCcsXG4gICAgICAgIHNwZW5kZXI6ICcweDA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEnLFxuICAgICAgfSxcbiAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICcweDA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEnLFxuICAgICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICAgIGRhdGE6ICcweDA5NWVhN2IzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGVpcDE1NTk6IHtcbiAgICAgICAgbWF4RmVlUGVyR2FzOiAnMHgzYjlhY2EwMCcsXG4gICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnMHgzYjlhY2EwMCcsXG4gICAgICB9LFxuICAgICAgbmV4dENvbnRyYWN0U2VxdWVuY2VJZDogMCxcbiAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgIHdhbGxldElkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHRva2VuIGFwcHJvdmFsIHRyYW5zYWN0aW9uIHdpdGhvdXQgc2lnbmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCYXNlQ29pbi51cmwucmV0dXJucygnL3Rlc3Qvd2FsbGV0L3Rva2VuL2FwcHJvdmFsL2J1aWxkJyk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tUb2tlbkFwcHJvdmFsQnVpbGQpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuYnVpbGRFcmMyMFRva2VuQXBwcm92YWwoJ1VTREMnKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwobW9ja1Rva2VuQXBwcm92YWxCdWlsZCk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQmFzZUNvaW4udXJsLCAnL3dhbGxldC90ZXN0LXdhbGxldC1pZC90b2tlbi9hcHByb3ZhbC9idWlsZCcpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja0JpdEdvLnBvc3QpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja0JpdEdvLnNldFJlcXVlc3RUcmFjZXIpO1xuICAgICAgY29uc3QgcG9zdFJlcXVlc3QgPSBtb2NrQml0R28ucG9zdC5nZXRDYWxsKDApO1xuICAgICAgY29uc3Qgc2VuZENhbGwgPSBwb3N0UmVxdWVzdC5yZXR1cm5WYWx1ZS5zZW5kLmdldENhbGwoMCk7XG4gICAgICBzZW5kQ2FsbC5hcmdzWzBdLnNob3VsZC5lcWwoeyB0b2tlbk5hbWU6ICdVU0RDJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYgdG9rZW4gYnVpbGQgcmVxdWVzdCBmYWlscycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCYXNlQ29pbi51cmwucmV0dXJucygnL3Rlc3Qvd2FsbGV0L3Rva2VuL2FwcHJvdmFsL2J1aWxkJyk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlamVjdHMobmV3IEVycm9yKCd0b2tlbiBub3Qgc3VwcG9ydGVkJykpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmJ1aWxkRXJjMjBUb2tlbkFwcHJvdmFsKCdJTlZBTElEX1RPS0VOJylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2Vycm9yIGJ1aWxkaW5nIGVyYzIwIHRva2VuIGFwcHJvdmFsIHR4OiBFcnJvcjogdG9rZW4gbm90IHN1cHBvcnRlZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCwgc2lnbiwgYW5kIHNlbmQgdG9rZW4gYXBwcm92YWwgdHJhbnNhY3Rpb24gd2hlbiBwYXNzcGhyYXNlIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja0Jhc2VDb2luLnVybC5yZXR1cm5zKCcvdGVzdC93YWxsZXQvdG9rZW4vYXBwcm92YWwvYnVpbGQnKTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoe1xuICAgICAgICBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja1Rva2VuQXBwcm92YWxCdWlsZCksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1vY2tLZXljaGFpbiA9IHsgaWQ6ICd1c2VyLWtleScsIHB1YjogJ3B1Yi1rZXknLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtcHJ2JyB9O1xuICAgICAgbW9ja0Jhc2VDb2luLmtleWNoYWlucy5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja0tleWNoYWluKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzaWduVHJhbnNhY3Rpb25TdHViID0gc2lub24uc3R1Yih3YWxsZXQsICdzaWduVHJhbnNhY3Rpb24nIGFzIGtleW9mIFdhbGxldCkucmVzb2x2ZXMoeyB0eEhleDogJzB4c2lnbmVkJyB9KTtcbiAgICAgIGNvbnN0IHNlbmRUcmFuc2FjdGlvblN0dWIgPSBzaW5vbi5zdHViKHdhbGxldCwgJ3NlbmRUcmFuc2FjdGlvbicgYXMga2V5b2YgV2FsbGV0KS5yZXNvbHZlcyh7IHR4aWQ6ICcweHR4aWQnIH0pO1xuICAgICAgY29uc3QgZ2V0S2V5Y2hhaW5zU3R1YiA9IHNpbm9uLnN0dWIod2FsbGV0IGFzIGFueSwgJ2dldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZScpLnJlc29sdmVzKFttb2NrS2V5Y2hhaW5dKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LmJ1aWxkRXJjMjBUb2tlbkFwcHJvdmFsKCdVU0RDJywgJ3Bhc3NwaHJhc2UxMjMnKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eGlkJywgJzB4dHhpZCcpO1xuXG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShnZXRLZXljaGFpbnNTdHViKTtcbiAgICAgIGdldEtleWNoYWluc1N0dWIuZ2V0Q2FsbCgwKS5hcmdzWzBdLnNob3VsZC5oYXZlLnByb3BlcnR5KCd3YWxsZXRQYXNzcGhyYXNlJywgJ3Bhc3NwaHJhc2UxMjMnKTtcblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2Uoc2lnblRyYW5zYWN0aW9uU3R1Yik7XG4gICAgICBjb25zdCBzaWduQ2FsbCA9IHNpZ25UcmFuc2FjdGlvblN0dWIuZ2V0Q2FsbCgwKTtcbiAgICAgIGlmIChzaWduQ2FsbCAmJiBzaWduQ2FsbC5hcmdzWzBdKSB7XG4gICAgICAgIHNpZ25DYWxsLmFyZ3NbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4UHJlYnVpbGQnLCBtb2NrVG9rZW5BcHByb3ZhbEJ1aWxkKTtcbiAgICAgICAgc2lnbkNhbGwuYXJnc1swXS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nLCBtb2NrS2V5Y2hhaW4pO1xuICAgICAgICBzaWduQ2FsbC5hcmdzWzBdLnNob3VsZC5oYXZlLnByb3BlcnR5KCd3YWxsZXRQYXNzcGhyYXNlJywgJ3Bhc3NwaHJhc2UxMjMnKTtcbiAgICAgIH1cblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2Uoc2VuZFRyYW5zYWN0aW9uU3R1Yik7XG4gICAgICBjb25zdCBzZW5kQ2FsbCA9IHNlbmRUcmFuc2FjdGlvblN0dWIuZ2V0Q2FsbCgwKTtcbiAgICAgIGlmIChzZW5kQ2FsbCAmJiBzZW5kQ2FsbC5hcmdzWzBdKSB7XG4gICAgICAgIHNlbmRDYWxsLmFyZ3NbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4SGV4JywgJzB4c2lnbmVkJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBzaWduaW5nIGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCYXNlQ29pbi51cmwucmV0dXJucygnL3Rlc3Qvd2FsbGV0L3Rva2VuL2FwcHJvdmFsL2J1aWxkJyk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tUb2tlbkFwcHJvdmFsQnVpbGQpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtb2NrS2V5Y2hhaW4gPSB7IGlkOiAndXNlci1rZXknLCBwdWI6ICdwdWIta2V5JywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLXBydicgfTtcbiAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMucmV0dXJucyh7XG4gICAgICAgIGdldDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tLZXljaGFpbiksXG4gICAgICB9KTtcblxuICAgICAgc2lub24uc3R1Yih3YWxsZXQgYXMgYW55LCAnZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlJykucmVzb2x2ZXMoW21vY2tLZXljaGFpbl0pO1xuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdzaWduVHJhbnNhY3Rpb24nIGFzIGtleW9mIFdhbGxldCkucmVqZWN0cyhuZXcgRXJyb3IoJ3NpZ25pbmcgZXJyb3InKSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5idWlsZEVyYzIwVG9rZW5BcHByb3ZhbCgnVVNEQycsICdwYXNzcGhyYXNlMTIzJykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnc2lnbmluZyBlcnJvcicpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5BcHByb3ZhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby93YWxsZXQvdG9rZW5BcHByb3ZhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGtEQUEwQjtBQUMxQixrQkFBZ0I7QUFDaEIseUNBQXFFO0FBRXJFLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRTtJQUNsQyxJQUFJLE1BQWMsQ0FBQztJQUNuQixJQUFJLFNBQWMsQ0FBQztJQUNuQixJQUFJLFlBQWlCLENBQUM7SUFDdEIsSUFBSSxjQUFtQixDQUFDO0lBRXhCLFVBQVUsQ0FBQztRQUNULFNBQVMsR0FBRztZQUNWLElBQUksRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2xCLEdBQUcsRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2pCLGdCQUFnQixFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUU7U0FDL0IsQ0FBQztRQUVGLFlBQVksR0FBRztZQUNiLFNBQVMsRUFBRSxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUN0QyxHQUFHLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRTtZQUNqQixTQUFTLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRTtZQUN2QixXQUFXLEVBQUUsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEMsZUFBZSxFQUFFLGVBQUssQ0FBQyxJQUFJLEVBQUU7U0FDOUIsQ0FBQztRQUVGLGNBQWMsR0FBRztZQUNmLEVBQUUsRUFBRSxnQkFBZ0I7WUFDcEIsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQztTQUM5QyxDQUFDO1FBRUYsTUFBTSxHQUFHLElBQUksWUFBTSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDL0Qs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QyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUVBQXlFLEVBQUUsS0FBSztZQUNqRixNQUFNLFlBQVksR0FBRyxlQUFLLENBQUMsSUFBSSxDQUFDLFFBQWUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBRXJHLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLG1CQUFtQixDQUFDO2dCQUNoRCxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQVM7YUFDMUQsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUN0QyxlQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxLQUFLO1lBQ3RFLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBRWhGLE1BQU0sUUFBUTtpQkFDWCxtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBUyxFQUFFLENBQUM7aUJBQ2xGLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCAnc2hvdWxkJztcbmltcG9ydCB7IEJ1aWxkVG9rZW5BcHByb3ZhbFJlc3BvbnNlLCBXYWxsZXQgfSBmcm9tICcuLi8uLi8uLi8uLi9zcmMnO1xuXG5kZXNjcmliZSgnV2FsbGV0IC0gVG9rZW4gQXBwcm92YWwnLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB3YWxsZXQ6IFdhbGxldDtcbiAgbGV0IG1vY2tCaXRHbzogYW55O1xuICBsZXQgbW9ja0Jhc2VDb2luOiBhbnk7XG4gIGxldCBtb2NrV2FsbGV0RGF0YTogYW55O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIG1vY2tCaXRHbyA9IHtcbiAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKSxcbiAgICAgIGdldDogc2lub24uc3R1YigpLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogc2lub24uc3R1YigpLFxuICAgIH07XG5cbiAgICBtb2NrQmFzZUNvaW4gPSB7XG4gICAgICBnZXRGYW1pbHk6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdldGgnKSxcbiAgICAgIHVybDogc2lub24uc3R1YigpLFxuICAgICAga2V5Y2hhaW5zOiBzaW5vbi5zdHViKCksXG4gICAgICBzdXBwb3J0c1Rzczogc2lub24uc3R1YigpLnJldHVybnMoZmFsc2UpLFxuICAgICAgZ2V0TVBDQWxnb3JpdGhtOiBzaW5vbi5zdHViKCksXG4gICAgfTtcblxuICAgIG1vY2tXYWxsZXREYXRhID0ge1xuICAgICAgaWQ6ICd0ZXN0LXdhbGxldC1pZCcsXG4gICAgICBjb2luOiAndGV0aCcsXG4gICAgICBrZXlzOiBbJ3VzZXIta2V5JywgJ2JhY2t1cC1rZXknLCAnYml0Z28ta2V5J10sXG4gICAgfTtcblxuICAgIHdhbGxldCA9IG5ldyBXYWxsZXQobW9ja0JpdEdvLCBtb2NrQmFzZUNvaW4sIG1vY2tXYWxsZXREYXRhKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZEVyYzIwVG9rZW5BcHByb3ZhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtb2NrVG9rZW5BcHByb3ZhbEJ1aWxkOiBCdWlsZFRva2VuQXBwcm92YWxSZXNwb25zZSA9IHtcbiAgICAgIHR4SGV4OiAnMHgxMjM0NTYnLFxuICAgICAgdHhJbmZvOiB7XG4gICAgICAgIGFtb3VudDogJzB4ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZicsXG4gICAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCcsXG4gICAgICAgIHNwZW5kZXI6ICcweDA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEnLFxuICAgICAgfSxcbiAgICAgIHJlY2lwaWVudHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGFkZHJlc3M6ICcweDA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEnLFxuICAgICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICAgIGRhdGE6ICcweDA5NWVhN2IzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMWZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGVpcDE1NTk6IHtcbiAgICAgICAgbWF4RmVlUGVyR2FzOiAnMHgzYjlhY2EwMCcsXG4gICAgICAgIG1heFByaW9yaXR5RmVlUGVyR2FzOiAnMHgzYjlhY2EwMCcsXG4gICAgICB9LFxuICAgICAgbmV4dENvbnRyYWN0U2VxdWVuY2VJZDogMCxcbiAgICAgIGNvaW46ICd0ZXRoJyxcbiAgICAgIHdhbGxldElkOiAndGVzdC13YWxsZXQtaWQnLFxuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIGJ1aWxkIHRva2VuIGFwcHJvdmFsIHRyYW5zYWN0aW9uIHdpdGhvdXQgc2lnbmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCYXNlQ29pbi51cmwucmV0dXJucygnL3Rlc3Qvd2FsbGV0L3Rva2VuL2FwcHJvdmFsL2J1aWxkJyk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tUb2tlbkFwcHJvdmFsQnVpbGQpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB3YWxsZXQuYnVpbGRFcmMyMFRva2VuQXBwcm92YWwoJ1VTREMnKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5lcWwobW9ja1Rva2VuQXBwcm92YWxCdWlsZCk7XG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkV2l0aChtb2NrQmFzZUNvaW4udXJsLCAnL3dhbGxldC90ZXN0LXdhbGxldC1pZC90b2tlbi9hcHByb3ZhbC9idWlsZCcpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja0JpdEdvLnBvc3QpO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UobW9ja0JpdEdvLnNldFJlcXVlc3RUcmFjZXIpO1xuICAgICAgY29uc3QgcG9zdFJlcXVlc3QgPSBtb2NrQml0R28ucG9zdC5nZXRDYWxsKDApO1xuICAgICAgY29uc3Qgc2VuZENhbGwgPSBwb3N0UmVxdWVzdC5yZXR1cm5WYWx1ZS5zZW5kLmdldENhbGwoMCk7XG4gICAgICBzZW5kQ2FsbC5hcmdzWzBdLnNob3VsZC5lcWwoeyB0b2tlbk5hbWU6ICdVU0RDJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3IgaWYgdG9rZW4gYnVpbGQgcmVxdWVzdCBmYWlscycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCYXNlQ29pbi51cmwucmV0dXJucygnL3Rlc3Qvd2FsbGV0L3Rva2VuL2FwcHJvdmFsL2J1aWxkJyk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlamVjdHMobmV3IEVycm9yKCd0b2tlbiBub3Qgc3VwcG9ydGVkJykpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3YWxsZXRcbiAgICAgICAgLmJ1aWxkRXJjMjBUb2tlbkFwcHJvdmFsKCdJTlZBTElEX1RPS0VOJylcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2Vycm9yIGJ1aWxkaW5nIGVyYzIwIHRva2VuIGFwcHJvdmFsIHR4OiBFcnJvcjogdG9rZW4gbm90IHN1cHBvcnRlZC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCwgc2lnbiwgYW5kIHNlbmQgdG9rZW4gYXBwcm92YWwgdHJhbnNhY3Rpb24gd2hlbiBwYXNzcGhyYXNlIGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja0Jhc2VDb2luLnVybC5yZXR1cm5zKCcvdGVzdC93YWxsZXQvdG9rZW4vYXBwcm92YWwvYnVpbGQnKTtcbiAgICAgIG1vY2tCaXRHby5wb3N0LnJldHVybnMoe1xuICAgICAgICBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja1Rva2VuQXBwcm92YWxCdWlsZCksXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1vY2tLZXljaGFpbiA9IHsgaWQ6ICd1c2VyLWtleScsIHB1YjogJ3B1Yi1rZXknLCBlbmNyeXB0ZWRQcnY6ICdlbmNyeXB0ZWQtcHJ2JyB9O1xuICAgICAgbW9ja0Jhc2VDb2luLmtleWNoYWlucy5yZXR1cm5zKHtcbiAgICAgICAgZ2V0OiBzaW5vbi5zdHViKCkucmVzb2x2ZXMobW9ja0tleWNoYWluKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBzaWduVHJhbnNhY3Rpb25TdHViID0gc2lub24uc3R1Yih3YWxsZXQsICdzaWduVHJhbnNhY3Rpb24nIGFzIGtleW9mIFdhbGxldCkucmVzb2x2ZXMoeyB0eEhleDogJzB4c2lnbmVkJyB9KTtcbiAgICAgIGNvbnN0IHNlbmRUcmFuc2FjdGlvblN0dWIgPSBzaW5vbi5zdHViKHdhbGxldCwgJ3NlbmRUcmFuc2FjdGlvbicgYXMga2V5b2YgV2FsbGV0KS5yZXNvbHZlcyh7IHR4aWQ6ICcweHR4aWQnIH0pO1xuICAgICAgY29uc3QgZ2V0S2V5Y2hhaW5zU3R1YiA9IHNpbm9uLnN0dWIod2FsbGV0IGFzIGFueSwgJ2dldEtleWNoYWluc0FuZFZhbGlkYXRlUGFzc3BocmFzZScpLnJlc29sdmVzKFttb2NrS2V5Y2hhaW5dKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd2FsbGV0LmJ1aWxkRXJjMjBUb2tlbkFwcHJvdmFsKCdVU0RDJywgJ3Bhc3NwaHJhc2UxMjMnKTtcblxuICAgICAgcmVzdWx0LnNob3VsZC5oYXZlLnByb3BlcnR5KCd0eGlkJywgJzB4dHhpZCcpO1xuXG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShnZXRLZXljaGFpbnNTdHViKTtcbiAgICAgIGdldEtleWNoYWluc1N0dWIuZ2V0Q2FsbCgwKS5hcmdzWzBdLnNob3VsZC5oYXZlLnByb3BlcnR5KCd3YWxsZXRQYXNzcGhyYXNlJywgJ3Bhc3NwaHJhc2UxMjMnKTtcblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2Uoc2lnblRyYW5zYWN0aW9uU3R1Yik7XG4gICAgICBjb25zdCBzaWduQ2FsbCA9IHNpZ25UcmFuc2FjdGlvblN0dWIuZ2V0Q2FsbCgwKTtcbiAgICAgIGlmIChzaWduQ2FsbCAmJiBzaWduQ2FsbC5hcmdzWzBdKSB7XG4gICAgICAgIHNpZ25DYWxsLmFyZ3NbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4UHJlYnVpbGQnLCBtb2NrVG9rZW5BcHByb3ZhbEJ1aWxkKTtcbiAgICAgICAgc2lnbkNhbGwuYXJnc1swXS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgna2V5Y2hhaW4nLCBtb2NrS2V5Y2hhaW4pO1xuICAgICAgICBzaWduQ2FsbC5hcmdzWzBdLnNob3VsZC5oYXZlLnByb3BlcnR5KCd3YWxsZXRQYXNzcGhyYXNlJywgJ3Bhc3NwaHJhc2UxMjMnKTtcbiAgICAgIH1cblxuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2Uoc2VuZFRyYW5zYWN0aW9uU3R1Yik7XG4gICAgICBjb25zdCBzZW5kQ2FsbCA9IHNlbmRUcmFuc2FjdGlvblN0dWIuZ2V0Q2FsbCgwKTtcbiAgICAgIGlmIChzZW5kQ2FsbCAmJiBzZW5kQ2FsbC5hcmdzWzBdKSB7XG4gICAgICAgIHNlbmRDYWxsLmFyZ3NbMF0uc2hvdWxkLmhhdmUucHJvcGVydHkoJ3R4SGV4JywgJzB4c2lnbmVkJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBzaWduaW5nIGVycm9ycycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tCYXNlQ29pbi51cmwucmV0dXJucygnL3Rlc3Qvd2FsbGV0L3Rva2VuL2FwcHJvdmFsL2J1aWxkJyk7XG4gICAgICBtb2NrQml0R28ucG9zdC5yZXR1cm5zKHtcbiAgICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tUb2tlbkFwcHJvdmFsQnVpbGQpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtb2NrS2V5Y2hhaW4gPSB7IGlkOiAndXNlci1rZXknLCBwdWI6ICdwdWIta2V5JywgZW5jcnlwdGVkUHJ2OiAnZW5jcnlwdGVkLXBydicgfTtcbiAgICAgIG1vY2tCYXNlQ29pbi5rZXljaGFpbnMucmV0dXJucyh7XG4gICAgICAgIGdldDogc2lub24uc3R1YigpLnJlc29sdmVzKG1vY2tLZXljaGFpbiksXG4gICAgICB9KTtcblxuICAgICAgc2lub24uc3R1Yih3YWxsZXQgYXMgYW55LCAnZ2V0S2V5Y2hhaW5zQW5kVmFsaWRhdGVQYXNzcGhyYXNlJykucmVzb2x2ZXMoW21vY2tLZXljaGFpbl0pO1xuICAgICAgc2lub24uc3R1Yih3YWxsZXQsICdzaWduVHJhbnNhY3Rpb24nIGFzIGtleW9mIFdhbGxldCkucmVqZWN0cyhuZXcgRXJyb3IoJ3NpZ25pbmcgZXJyb3InKSk7XG5cbiAgICAgIGF3YWl0IHdhbGxldC5idWlsZEVyYzIwVG9rZW5BcHByb3ZhbCgnVVNEQycsICdwYXNzcGhyYXNlMTIzJykuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnc2lnbmluZyBlcnJvcicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2VuZFRva2VuRW5hYmxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgdGVXYWxsZXQ6IFdhbGxldDtcbiAgICBsZXQgdGVCYXNlQ29pbjogYW55O1xuICAgIGxldCB0ZUJpdEdvOiBhbnk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRlQml0R28gPSB7XG4gICAgICAgIHBvc3Q6IHNpbm9uLnN0dWIoKSxcbiAgICAgICAgZ2V0OiBzaW5vbi5zdHViKCksXG4gICAgICAgIHNldFJlcXVlc3RUcmFjZXI6IHNpbm9uLnN0dWIoKSxcbiAgICAgIH07XG5cbiAgICAgIHRlQmFzZUNvaW4gPSB7XG4gICAgICAgIGdldEZhbWlseTogc2lub24uc3R1YigpLnJldHVybnMoJ3R4cnAnKSxcbiAgICAgICAgZ2V0RnVsbE5hbWU6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdUZXN0bmV0IFhSUCcpLFxuICAgICAgICB1cmw6IHNpbm9uLnN0dWIoKSxcbiAgICAgICAga2V5Y2hhaW5zOiBzaW5vbi5zdHViKCksXG4gICAgICAgIHN1cHBvcnRzVHNzOiBzaW5vbi5zdHViKCkucmV0dXJucyhmYWxzZSksXG4gICAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLFxuICAgICAgICBnZXRUb2tlbkVuYWJsZW1lbnRDb25maWc6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgcmVxdWlyZXNUb2tlbkVuYWJsZW1lbnQ6IHRydWUgfSksXG4gICAgICB9O1xuXG4gICAgICAvLyBjdXN0b2RpYWwgd2FsbGV0IHNvIHRoZSBwYXRoIGFmdGVyIHZhbGlkYXRpb24gY2FsbHMgaW5pdGlhdGVUcmFuc2FjdGlvblxuICAgICAgY29uc3Qgd2FsbGV0RGF0YSA9IHtcbiAgICAgICAgaWQ6ICd0ZS13YWxsZXQtaWQnLFxuICAgICAgICBjb2luOiAndHhycCcsXG4gICAgICAgIHR5cGU6ICdjdXN0b2RpYWwnLFxuICAgICAgICBrZXlzOiBbJ3VzZXIta2V5JywgJ2JhY2t1cC1rZXknLCAnYml0Z28ta2V5J10sXG4gICAgICB9O1xuXG4gICAgICB0ZVdhbGxldCA9IG5ldyBXYWxsZXQodGVCaXRHbywgdGVCYXNlQ29pbiwgd2FsbGV0RGF0YSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IFwiSW52YWxpZCBidWlsZCBvZiB0b2tlbiBlbmFibGVtZW50LlwiIHdoZW4gcHJlYnVpbGRUeCBpcyBhIHN0cmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHRlV2FsbGV0XG4gICAgICAgIC5zZW5kVG9rZW5FbmFibGVtZW50KHsgcHJlYnVpbGRUeDogJ3Jhdy1oZXgtc3RyaW5nJyBhcyBhbnkgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgYnVpbGQgb2YgdG9rZW4gZW5hYmxlbWVudC4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgXCJJbnZhbGlkIGJ1aWxkIG9mIHRva2VuIGVuYWJsZW1lbnQuXCIgd2hlbiBidWlsZFBhcmFtcy50eXBlIGlzIHVuZGVmaW5lZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IHRlV2FsbGV0XG4gICAgICAgIC5zZW5kVG9rZW5FbmFibGVtZW50KHsgcHJlYnVpbGRUeDogeyBidWlsZFBhcmFtczoge30gfSBhcyBhbnkgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0ludmFsaWQgYnVpbGQgb2YgdG9rZW4gZW5hYmxlbWVudC4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgXCJJbnZhbGlkIGJ1aWxkIG9mIHRva2VuIGVuYWJsZW1lbnQuXCIgd2hlbiBidWlsZFBhcmFtcy50eXBlIGlzIGFuIHVucmVjb2duaXNlZCB0eXBlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQgdGVXYWxsZXRcbiAgICAgICAgLnNlbmRUb2tlbkVuYWJsZW1lbnQoeyBwcmVidWlsZFR4OiB7IGJ1aWxkUGFyYW1zOiB7IHR5cGU6ICd0cmFuc2ZlcicgfSB9IGFzIGFueSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnSW52YWxpZCBidWlsZCBvZiB0b2tlbiBlbmFibGVtZW50LicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIHZhbGlkYXRpb24gYW5kIHByb2NlZWQgd2hlbiBidWlsZFBhcmFtcy50eXBlIGlzIFwiZW5hYmxldG9rZW5cIicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGluaXRpYXRlU3R1YiA9IHNpbm9uLnN0dWIodGVXYWxsZXQgYXMgYW55LCAnaW5pdGlhdGVUcmFuc2FjdGlvbicpLnJlc29sdmVzKHsgdHhpZDogJ2FiYzEyMycgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRlV2FsbGV0LnNlbmRUb2tlbkVuYWJsZW1lbnQoe1xuICAgICAgICBwcmVidWlsZFR4OiB7IGJ1aWxkUGFyYW1zOiB7IHR5cGU6ICdlbmFibGV0b2tlbicgfSB9IGFzIGFueSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxbCh7IHR4aWQ6ICdhYmMxMjMnIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UoaW5pdGlhdGVTdHViKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFzcyB2YWxpZGF0aW9uIGFuZCBwcm9jZWVkIHdoZW4gYnVpbGRQYXJhbXMudHlwZSBpcyBcImVuYWJsZU1wdFwiJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW5pdGlhdGVTdHViID0gc2lub24uc3R1Yih0ZVdhbGxldCBhcyBhbnksICdpbml0aWF0ZVRyYW5zYWN0aW9uJykucmVzb2x2ZXMoeyB0eGlkOiAnbXB0NDU2JyB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGVXYWxsZXQuc2VuZFRva2VuRW5hYmxlbWVudCh7XG4gICAgICAgIHByZWJ1aWxkVHg6IHsgYnVpbGRQYXJhbXM6IHsgdHlwZTogJ2VuYWJsZU1wdCcgfSB9IGFzIGFueSxcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQuc2hvdWxkLmVxbCh7IHR4aWQ6ICdtcHQ0NTYnIH0pO1xuICAgICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UoaW5pdGlhdGVTdHViKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0aGUgY29pbiBkb2VzIG5vdCByZXF1aXJlIHRva2VuIGVuYWJsZW1lbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICB0ZUJhc2VDb2luLmdldFRva2VuRW5hYmxlbWVudENvbmZpZy5yZXR1cm5zKHsgcmVxdWlyZXNUb2tlbkVuYWJsZW1lbnQ6IGZhbHNlIH0pO1xuXG4gICAgICBhd2FpdCB0ZVdhbGxldFxuICAgICAgICAuc2VuZFRva2VuRW5hYmxlbWVudCh7IHByZWJ1aWxkVHg6IHsgYnVpbGRQYXJhbXM6IHsgdHlwZTogJ2VuYWJsZU1wdCcgfSB9IGFzIGFueSB9KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvZG9lcyBub3QgcmVxdWlyZSB0b2tlbiBlbmFibGVtZW50IHRyYW5zYWN0aW9ucy8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|