@bitgo-beta/sdk-coin-sol 7.6.4-beta.755 → 7.6.4-beta.757
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/cjs/src/lib/confidentialTransferBuilder.d.ts +9 -1
- package/dist/cjs/src/lib/confidentialTransferBuilder.d.ts.map +1 -1
- package/dist/cjs/src/lib/confidentialTransferBuilder.js +40 -6
- package/dist/cjs/src/lib/constants.d.ts +1 -0
- package/dist/cjs/src/lib/constants.d.ts.map +1 -1
- package/dist/cjs/src/lib/constants.js +2 -1
- package/dist/cjs/src/lib/iface.d.ts +13 -1
- package/dist/cjs/src/lib/iface.d.ts.map +1 -1
- package/dist/cjs/src/lib/iface.js +1 -1
- package/dist/cjs/src/lib/instructionParamsFactory.d.ts.map +1 -1
- package/dist/cjs/src/lib/instructionParamsFactory.js +7 -3
- package/dist/cjs/src/lib/solInstructionFactory.d.ts.map +1 -1
- package/dist/cjs/src/lib/solInstructionFactory.js +28 -3
- package/dist/cjs/src/lib/transaction.d.ts +12 -0
- package/dist/cjs/src/lib/transaction.d.ts.map +1 -1
- package/dist/cjs/src/lib/transaction.js +100 -43
- package/dist/cjs/src/lib/utils.d.ts +11 -0
- package/dist/cjs/src/lib/utils.d.ts.map +1 -1
- package/dist/cjs/src/lib/utils.js +20 -4
- package/dist/cjs/src/sol.d.ts.map +1 -1
- package/dist/cjs/src/sol.js +10 -5
- package/dist/cjs/test/unit/ctEnablementVerify.d.ts +2 -0
- package/dist/cjs/test/unit/ctEnablementVerify.d.ts.map +1 -0
- package/dist/cjs/test/unit/ctEnablementVerify.js +143 -0
- package/dist/cjs/test/unit/sol.js +2 -2
- package/dist/cjs/test/unit/transactionBuilder/confidentialEnablementV1.d.ts +2 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialEnablementV1.d.ts.map +1 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialEnablementV1.js +124 -0
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferBuilder.js +22 -9
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1.js +2 -1
- package/dist/cjs/test/unit/transactionBuilder/confidentialTransferV1Ops.js +2 -1
- package/dist/cjs/test/unit/utils.js +36 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/lib/confidentialTransferBuilder.d.ts +9 -1
- package/dist/esm/lib/confidentialTransferBuilder.d.ts.map +1 -1
- package/dist/esm/lib/confidentialTransferBuilder.js +40 -6
- package/dist/esm/lib/constants.d.ts +1 -0
- package/dist/esm/lib/constants.d.ts.map +1 -1
- package/dist/esm/lib/constants.js +2 -1
- package/dist/esm/lib/iface.d.ts +13 -1
- package/dist/esm/lib/iface.d.ts.map +1 -1
- package/dist/esm/lib/iface.js +1 -1
- package/dist/esm/lib/instructionParamsFactory.d.ts.map +1 -1
- package/dist/esm/lib/instructionParamsFactory.js +7 -3
- package/dist/esm/lib/solInstructionFactory.d.ts.map +1 -1
- package/dist/esm/lib/solInstructionFactory.js +29 -4
- package/dist/esm/lib/transaction.d.ts +12 -0
- package/dist/esm/lib/transaction.d.ts.map +1 -1
- package/dist/esm/lib/transaction.js +101 -44
- package/dist/esm/lib/utils.d.ts +11 -0
- package/dist/esm/lib/utils.d.ts.map +1 -1
- package/dist/esm/lib/utils.js +19 -4
- package/dist/esm/sol.d.ts.map +1 -1
- package/dist/esm/sol.js +10 -5
- package/package.json +7 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ctEnablementVerify.d.ts","sourceRoot":"","sources":["../../../../test/unit/ctEnablementVerify.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
require("should");
|
|
37
|
+
const sdk_api_1 = require("@bitgo-beta/sdk-api");
|
|
38
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
39
|
+
const sdk_test_1 = require("@bitgo-beta/sdk-test");
|
|
40
|
+
const src_1 = require("../../src");
|
|
41
|
+
const utils_1 = require("../../src/lib/utils");
|
|
42
|
+
const testData = __importStar(require("../fixtures/sol"));
|
|
43
|
+
const resources = __importStar(require("../resources/sol"));
|
|
44
|
+
const getBuilderFactory_1 = require("./getBuilderFactory");
|
|
45
|
+
describe('SOL: CT enablement token verification', function () {
|
|
46
|
+
let bitgo;
|
|
47
|
+
let basecoin;
|
|
48
|
+
const factory = (0, getBuilderFactory_1.getBuilderFactory)('sol');
|
|
49
|
+
const account = new src_1.KeyPair(resources.associatedTokenAccounts.accounts[0]).getKeys();
|
|
50
|
+
const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
|
|
51
|
+
const mintAddress = resources.associatedTokenAccountsForSol2022.mintId;
|
|
52
|
+
const authorityAddress = account.pub;
|
|
53
|
+
const zeroBytes36 = '00'.repeat(36);
|
|
54
|
+
const proofDataHex = '00'.repeat(320);
|
|
55
|
+
const v1Config = {
|
|
56
|
+
computeUnitLimit: 200000,
|
|
57
|
+
heapSize: 32768,
|
|
58
|
+
loadedAccountsDataSizeLimit: 65536,
|
|
59
|
+
priorityFee: 5000,
|
|
60
|
+
};
|
|
61
|
+
before(function () {
|
|
62
|
+
bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'mock' });
|
|
63
|
+
bitgo.safeRegister('tsol', src_1.Tsol.createInstance);
|
|
64
|
+
bitgo.initializeTestVars();
|
|
65
|
+
basecoin = bitgo.coin('tsol');
|
|
66
|
+
});
|
|
67
|
+
async function buildCtEnablementTxBase64() {
|
|
68
|
+
// ATA derived for the actual owner under the Token-2022 program, matching
|
|
69
|
+
// what verifyTokenAddress recomputes from the intent.
|
|
70
|
+
const tokenAddress = await (0, utils_1.getAssociatedTokenAccountAddress)(mintAddress, account.pub, true);
|
|
71
|
+
const txBuilder = factory.getConfidentialTransferBuilder();
|
|
72
|
+
txBuilder.nonce(recentBlockHash);
|
|
73
|
+
txBuilder.sender(account.pub);
|
|
74
|
+
txBuilder.sign({ key: account.prv });
|
|
75
|
+
txBuilder
|
|
76
|
+
.createAta({
|
|
77
|
+
mintAddress,
|
|
78
|
+
ataAddress: tokenAddress,
|
|
79
|
+
ownerAddress: authorityAddress,
|
|
80
|
+
payerAddress: account.pub,
|
|
81
|
+
tokenName: 'tsol:ray',
|
|
82
|
+
programId: 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb',
|
|
83
|
+
})
|
|
84
|
+
.configureAccount({
|
|
85
|
+
tokenAddress,
|
|
86
|
+
mintAddress,
|
|
87
|
+
authorityAddress,
|
|
88
|
+
elgamalPubkey: '11'.repeat(32),
|
|
89
|
+
decryptableZeroBalance: zeroBytes36,
|
|
90
|
+
maximumPendingBalanceCreditCounter: '18446744073709551615',
|
|
91
|
+
proofInstructionOffset: 1,
|
|
92
|
+
})
|
|
93
|
+
.verifyPubkeyValidity({ proofData: proofDataHex });
|
|
94
|
+
txBuilder.version(1).transactionConfig(v1Config);
|
|
95
|
+
const tx = await txBuilder.build();
|
|
96
|
+
return tx.toBroadcastFormat();
|
|
97
|
+
}
|
|
98
|
+
function makeWallet() {
|
|
99
|
+
const { walletData } = testData.enableTokenFixtures;
|
|
100
|
+
const walletDataClone = JSON.parse(JSON.stringify(walletData));
|
|
101
|
+
// root the wallet at our signer so the fee-payer === wallet-root check passes
|
|
102
|
+
walletDataClone.coinSpecific.rootAddress = account.pub;
|
|
103
|
+
return new sdk_core_1.Wallet(bitgo, basecoin, walletDataClone);
|
|
104
|
+
}
|
|
105
|
+
it('accepts a CT enablement (CreateATA + ConfigureAccount + VerifyPubkeyValidity) tx under type enabletoken', async function () {
|
|
106
|
+
const wallet = makeWallet();
|
|
107
|
+
const txBase64 = await buildCtEnablementTxBase64();
|
|
108
|
+
const result = await basecoin.verifyTransaction({
|
|
109
|
+
txParams: {
|
|
110
|
+
type: 'enabletoken',
|
|
111
|
+
enableTokens: [{ name: 'tsol:t22mint', address: authorityAddress }],
|
|
112
|
+
},
|
|
113
|
+
txPrebuild: {
|
|
114
|
+
txBase64,
|
|
115
|
+
txInfo: { feePayer: account.pub, nonce: recentBlockHash },
|
|
116
|
+
coin: 'tsol',
|
|
117
|
+
},
|
|
118
|
+
wallet,
|
|
119
|
+
verification: { verifyTokenEnablement: true },
|
|
120
|
+
});
|
|
121
|
+
result.should.equal(true);
|
|
122
|
+
});
|
|
123
|
+
it('still rejects an enabletoken prebuild whose token name does not match the intent', async function () {
|
|
124
|
+
const wallet = makeWallet();
|
|
125
|
+
const txBase64 = await buildCtEnablementTxBase64();
|
|
126
|
+
await basecoin
|
|
127
|
+
.verifyTransaction({
|
|
128
|
+
txParams: {
|
|
129
|
+
type: 'enabletoken',
|
|
130
|
+
enableTokens: [{ name: 'tsol:someothertoken', address: authorityAddress }],
|
|
131
|
+
},
|
|
132
|
+
txPrebuild: {
|
|
133
|
+
txBase64,
|
|
134
|
+
txInfo: { feePayer: account.pub, nonce: recentBlockHash },
|
|
135
|
+
coin: 'tsol',
|
|
136
|
+
},
|
|
137
|
+
wallet,
|
|
138
|
+
verification: { verifyTokenEnablement: true },
|
|
139
|
+
})
|
|
140
|
+
.should.be.rejectedWith(/Invalid token name/);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3RFbmFibGVtZW50VmVyaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2N0RW5hYmxlbWVudFZlcmlmeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtCQUFnQjtBQUVoQixpREFBK0M7QUFDL0MsbURBQThDO0FBQzlDLG1EQUErRDtBQUMvRCxtQ0FBb0Y7QUFDcEYsK0NBQXVFO0FBQ3ZFLDBEQUE0QztBQUM1Qyw0REFBOEM7QUFDOUMsMkRBQXdEO0FBQ3hELFFBQVEsQ0FBQyx1Q0FBdUMsRUFBRTtJQUNoRCxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFjLENBQUM7SUFFbkIsTUFBTSxPQUFPLEdBQUcsSUFBQSxxQ0FBaUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckYsTUFBTSxlQUFlLEdBQUcsOENBQThDLENBQUM7SUFFdkUsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQztJQUN2RSxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXRDLE1BQU0sUUFBUSxHQUFHO1FBQ2YsZ0JBQWdCLEVBQUUsTUFBTztRQUN6QixRQUFRLEVBQUUsS0FBTTtRQUNoQiwyQkFBMkIsRUFBRSxLQUFNO1FBQ25DLFdBQVcsRUFBRSxJQUFLO0tBQ25CLENBQUM7SUFFRixNQUFNLENBQUM7UUFDTCxL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SyxFQUFFLGVBQWUsRUFBRTtnQkFDekQsSUFBSSxFQUFFLE1BQU07YUFDYjtZQUNELE1BQU07WUFDTixZQUFZLEVBQUUsRUFBRSxxQkFBcUIsRUFBRSxJQUFJLEVBQUU7U0FDSixDQUFDLENBQUM7UUFFN0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0ZBQWtGLEVBQUUsS0FBSztRQUMxRixNQUFNLE1BQU0sR0FBRyxVQUFVLEVBQUUsQ0FBQztRQUM1QixNQUFNLFFBQVEsR0FBRyxNQUFNLHlCQUF5QixFQUFFLENBQUM7UUFFbkQsTUFBTSxRQUFRO2FBQ1gsaUJBQWlCLENBQUM7WUFDakIsUUFBUSxFQUFFO2dCQUNSLElBQUksRUFBRSxhQUFhO2dCQUNuQixZQUFZLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQzthQUMzRTtZQUNELFVBQVUsRUFBRTtnQkFDVixRQUFRO2dCQUNSLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7Z0JBQ3pELElBQUksRUFBRSxNQUFNO2FBQ2I7WUFDRCxNQUFNO1lBQ04sWUFBWSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFO1NBQ0osQ0FBQzthQUMzQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ3Nob3VsZCc7XG5cbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBXYWxsZXQgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCB7IEtleVBhaXIsIFRyYW5zYWN0aW9uLCBUc29sLCBTb2xWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgZ2V0QXNzb2NpYXRlZFRva2VuQWNjb3VudEFkZHJlc3MgfSBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uL2ZpeHR1cmVzL3NvbCc7XG5pbXBvcnQgKiBhcyByZXNvdXJjZXMgZnJvbSAnLi4vcmVzb3VyY2VzL3NvbCc7XG5pbXBvcnQgeyBnZXRCdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vZ2V0QnVpbGRlckZhY3RvcnknO1xuZGVzY3JpYmUoJ1NPTDogQ1QgZW5hYmxlbWVudCB0b2tlbiB2ZXJpZmljYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gIGxldCBiaXRnbzogVGVzdEJpdEdvQVBJO1xuICBsZXQgYmFzZWNvaW46IFRzb2w7XG5cbiAgY29uc3QgZmFjdG9yeSA9IGdldEJ1aWxkZXJGYWN0b3J5KCdzb2wnKTtcbiAgY29uc3QgYWNjb3VudCA9IG5ldyBLZXlQYWlyKHJlc291cmNlcy5hc3NvY2lhdGVkVG9rZW5BY2NvdW50cy5hY2NvdW50c1swXSkuZ2V0S2V5cygpO1xuICBjb25zdCByZWNlbnRCbG9ja0hhc2ggPSAnR0h0WFFCc29aSFZuTkZhOVlldkF6RnIxN0RKamdIWGszeWNUS0Q1eEQzWmknO1xuXG4gIGNvbnN0IG1pbnRBZGRyZXNzID0gcmVzb3VyY2VzLmFzc29jaWF0ZWRUb2tlbkFjY291bnRzRm9yU29sMjAyMi5taW50SWQ7XG4gIGNvbnN0IGF1dGhvcml0eUFkZHJlc3MgPSBhY2NvdW50LnB1YjtcbiAgY29uc3QgemVyb0J5dGVzMzYgPSAnMDAnLnJlcGVhdCgzNik7XG4gIGNvbnN0IHByb29mRGF0YUhleCA9ICcwMCcucmVwZWF0KDMyMCk7XG5cbiAgY29uc3QgdjFDb25maWcgPSB7XG4gICAgY29tcHV0ZVVuaXRMaW1pdDogMjAwXzAwMCxcbiAgICBoZWFwU2l6ZTogMzJfNzY4LFxuICAgIGxvYWRlZEFjY291bnRzRGF0YVNpemVMaW1pdDogNjVfNTM2LFxuICAgIHByaW9yaXR5RmVlOiA1XzAwMCxcbiAgfTtcblxuICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgIGJpdGdvID0gVGVzdEJpdEdvLmRlY29yYXRlKEJpdEdvQVBJLCB7IGVudjogJ21vY2snIH0pO1xuICAgIGJpdGdvLnNhZmVSZWdpc3RlcigndHNvbCcsIFRzb2wuY3JlYXRlSW5zdGFuY2UpO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndHNvbCcpIGFzIFRzb2w7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ3RFbmFibGVtZW50VHhCYXNlNjQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBBVEEgZGVyaXZlZCBmb3IgdGhlIGFjdHVhbCBvd25lciB1bmRlciB0aGUgVG9rZW4tMjAyMiBwcm9ncmFtLCBtYXRjaGluZ1xuICAgIC8vIHdoYXQgdmVyaWZ5VG9rZW5BZGRyZXNzIHJlY29tcHV0ZXMgZnJvbSB0aGUgaW50ZW50LlxuICAgIGNvbnN0IHRva2VuQWRkcmVzcyA9IGF3YWl0IGdldEFzc29jaWF0ZWRUb2tlbkFjY291bnRBZGRyZXNzKG1pbnRBZGRyZXNzLCBhY2NvdW50LnB1YiwgdHJ1ZSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5nZXRDb25maWRlbnRpYWxUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICB0eEJ1aWxkZXIuc2VuZGVyKGFjY291bnQucHViKTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYWNjb3VudC5wcnYgfSk7XG4gICAgdHhCdWlsZGVyXG4gICAgICAuY3JlYXRlQXRhKHtcbiAgICAgICAgbWludEFkZHJlc3MsXG4gICAgICAgIGF0YUFkZHJlc3M6IHRva2VuQWRkcmVzcyxcbiAgICAgICAgb3duZXJBZGRyZXNzOiBhdXRob3JpdHlBZGRyZXNzLFxuICAgICAgICBwYXllckFkZHJlc3M6IGFjY291bnQucHViLFxuICAgICAgICB0b2tlbk5hbWU6ICd0c29sOnJheScsXG4gICAgICAgIHByb2dyYW1JZDogJ1Rva2VuelFkQk5iTHFQNVZFaGRrQVM2RVBGTEMxUEhuQnFDWEVwUHh1RWInLFxuICAgICAgfSlcbiAgICAgIC5jb25maWd1cmVBY2NvdW50KHtcbiAgICAgICAgdG9rZW5BZGRyZXNzLFxuICAgICAgICBtaW50QWRkcmVzcyxcbiAgICAgICAgYXV0aG9yaXR5QWRkcmVzcyxcbiAgICAgICAgZWxnYW1hbFB1YmtleTogJzExJy5yZXBlYXQoMzIpLFxuICAgICAgICBkZWNyeXB0YWJsZVplcm9CYWxhbmNlOiB6ZXJvQnl0ZXMzNixcbiAgICAgICAgbWF4aW11bVBlbmRpbmdCYWxhbmNlQ3JlZGl0Q291bnRlcjogJzE4NDQ2NzQ0MDczNzA5NTUxNjE1JyxcbiAgICAgICAgcHJvb2ZJbnN0cnVjdGlvbk9mZnNldDogMSxcbiAgICAgIH0pXG4gICAgICAudmVyaWZ5UHVia2V5VmFsaWRpdHkoeyBwcm9vZkRhdGE6IHByb29mRGF0YUhleCB9KTtcbiAgICB0eEJ1aWxkZXIudmVyc2lvbigxKS50cmFuc2FjdGlvbkNvbmZpZyh2MUNvbmZpZyk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICByZXR1cm4gKHR4IGFzIFRyYW5zYWN0aW9uKS50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbWFrZVdhbGxldCgpOiBXYWxsZXQge1xuICAgIGNvbnN0IHsgd2FsbGV0RGF0YSB9ID0gdGVzdERhdGEuZW5hYmxlVG9rZW5GaXh0dXJlcztcbiAgICBjb25zdCB3YWxsZXREYXRhQ2xvbmUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHdhbGxldERhdGEpKTtcbiAgICAvLyByb290IHRoZSB3YWxsZXQgYXQgb3VyIHNpZ25lciBzbyB0aGUgZmVlLXBheWVyID09PSB3YWxsZXQtcm9vdCBjaGVjayBwYXNzZXNcbiAgICB3YWxsZXREYXRhQ2xvbmUuY29pblNwZWNpZmljLnJvb3RBZGRyZXNzID0gYWNjb3VudC5wdWI7XG4gICAgcmV0dXJuIG5ldyBXYWxsZXQoYml0Z28sIGJhc2Vjb2luLCB3YWxsZXREYXRhQ2xvbmUpO1xuICB9XG5cbiAgaXQoJ2FjY2VwdHMgYSBDVCBlbmFibGVtZW50IChDcmVhdGVBVEEgKyBDb25maWd1cmVBY2NvdW50ICsgVmVyaWZ5UHVia2V5VmFsaWRpdHkpIHR4IHVuZGVyIHR5cGUgZW5hYmxldG9rZW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgIGNvbnN0IHR4QmFzZTY0ID0gYXdhaXQgYnVpbGRDdEVuYWJsZW1lbnRUeEJhc2U2NCgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4udmVyaWZ5VHJhbnNhY3Rpb24oe1xuICAgICAgdHhQYXJhbXM6IHtcbiAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgZW5hYmxlVG9rZW5zOiBbeyBuYW1lOiAndHNvbDp0MjJtaW50JywgYWRkcmVzczogYXV0aG9yaXR5QWRkcmVzcyB9XSxcbiAgICAgIH0sXG4gICAgICB0eFByZWJ1aWxkOiB7XG4gICAgICAgIHR4QmFzZTY0LFxuICAgICAgICB0eEluZm86IHsgZmVlUGF5ZXI6IGFjY291bnQucHViLCBub25jZTogcmVjZW50QmxvY2tIYXNoIH0sXG4gICAgICAgIGNvaW46ICd0c29sJyxcbiAgICAgIH0sXG4gICAgICB3YWxsZXQsXG4gICAgICB2ZXJpZmljYXRpb246IHsgdmVyaWZ5VG9rZW5FbmFibGVtZW50OiB0cnVlIH0sXG4gICAgfSBhcyB1bmtub3duIGFzIFNvbFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk7XG5cbiAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICB9KTtcblxuICBpdCgnc3RpbGwgcmVqZWN0cyBhbiBlbmFibGV0b2tlbiBwcmVidWlsZCB3aG9zZSB0b2tlbiBuYW1lIGRvZXMgbm90IG1hdGNoIHRoZSBpbnRlbnQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgd2FsbGV0ID0gbWFrZVdhbGxldCgpO1xuICAgIGNvbnN0IHR4QmFzZTY0ID0gYXdhaXQgYnVpbGRDdEVuYWJsZW1lbnRUeEJhc2U2NCgpO1xuXG4gICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgIC52ZXJpZnlUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZTogJ2VuYWJsZXRva2VuJyxcbiAgICAgICAgICBlbmFibGVUb2tlbnM6IFt7IG5hbWU6ICd0c29sOnNvbWVvdGhlcnRva2VuJywgYWRkcmVzczogYXV0aG9yaXR5QWRkcmVzcyB9XSxcbiAgICAgICAgfSxcbiAgICAgICAgdHhQcmVidWlsZDoge1xuICAgICAgICAgIHR4QmFzZTY0LFxuICAgICAgICAgIHR4SW5mbzogeyBmZWVQYXllcjogYWNjb3VudC5wdWIsIG5vbmNlOiByZWNlbnRCbG9ja0hhc2ggfSxcbiAgICAgICAgICBjb2luOiAndHNvbCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdhbGxldCxcbiAgICAgICAgdmVyaWZpY2F0aW9uOiB7IHZlcmlmeVRva2VuRW5hYmxlbWVudDogdHJ1ZSB9LFxuICAgICAgfSBhcyB1bmtub3duIGFzIFNvbFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucylcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHRva2VuIG5hbWUvKTtcbiAgfSk7XG59KTtcbiJdfQ==
|