@bitgo-beta/sdk-coin-sol 7.6.4-beta.725 → 7.6.4-beta.726
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/index.d.ts +1 -0
- package/dist/cjs/src/lib/index.d.ts.map +1 -1
- package/dist/cjs/src/lib/index.js +4 -2
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts +13 -0
- package/dist/cjs/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/cjs/src/lib/transactionBuilderFactory.js +16 -1
- package/dist/cjs/src/lib/v1CustomInstructionBuilder.d.ts +21 -0
- package/dist/cjs/src/lib/v1CustomInstructionBuilder.d.ts.map +1 -0
- package/dist/cjs/src/lib/v1CustomInstructionBuilder.js +28 -0
- package/dist/cjs/src/sol.d.ts.map +1 -1
- package/dist/cjs/src/sol.js +11 -4
- package/dist/cjs/test/unit/sol.js +29 -1
- package/dist/cjs/test/unit/transactionBuilder/v1TransactionBuilder.js +43 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/lib/index.d.ts +1 -0
- package/dist/esm/lib/index.d.ts.map +1 -1
- package/dist/esm/lib/index.js +2 -1
- package/dist/esm/lib/transactionBuilderFactory.d.ts +13 -0
- package/dist/esm/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/esm/lib/transactionBuilderFactory.js +16 -1
- package/dist/esm/lib/v1CustomInstructionBuilder.d.ts +21 -0
- package/dist/esm/lib/v1CustomInstructionBuilder.d.ts.map +1 -0
- package/dist/esm/lib/v1CustomInstructionBuilder.js +24 -0
- package/dist/esm/sol.d.ts.map +1 -1
- package/dist/esm/sol.js +11 -4
- package/package.json +7 -7
- package/LICENSE +0 -191
|
@@ -44,6 +44,7 @@ const web3_js_1 = require("@solana/web3.js");
|
|
|
44
44
|
const src_1 = require("../../../src");
|
|
45
45
|
const parseWireTransaction_1 = require("../../../src/lib/serialization/parseWireTransaction");
|
|
46
46
|
const constants_1 = require("../../../src/lib/constants");
|
|
47
|
+
const v1CustomInstructionBuilder_1 = require("../../../src/lib/v1CustomInstructionBuilder");
|
|
47
48
|
const testData = __importStar(require("../../resources/sol"));
|
|
48
49
|
class TestV1Builder extends src_1.V1TransactionBuilder {
|
|
49
50
|
get transactionType() {
|
|
@@ -217,4 +218,45 @@ describe('Solana V1 Transaction Builder (SIMD-0296/0385)', () => {
|
|
|
217
218
|
});
|
|
218
219
|
});
|
|
219
220
|
});
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjFUcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3YxVHJhbnNhY3Rpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDBEQUE2QjtBQUM3QixpREFBNEM7QUFDNUMsbURBQXVEO0FBQ3ZELDZDQUFnRDtBQUNoRCxzQ0FPc0I7QUFDdEIsOEZBQXlGO0FBQ3pGLDBEQUFxRTtBQUVyRSw4REFBZ0Q7QUFFaEQsTUFBTSxhQUFjLFNBQVEsMEJBQW9CO0lBQzlDLElBQWMsZUFBZTtRQUMzQixPQUFPLDBCQUFlLENBQUMsSUFBSSxDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUVELFFBQVEsQ0FBQyxnREFBZ0QsRUFBRSxHQUFHLEVBQUU7SUFDOUQsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLGFBQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekQsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoRixNQUFNLFlBQVksR0FBRyxJQUFJLGFBQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbEUsTUFBTSxTQUFTLEdBQUcsOENBQThDLENBQUM7SUFDakUsTUFBTSxlQUFlLEdBQUcsOENBQThDLENBQUM7SUFDdkUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBRXhCLE1BQU0sUUFBUSxHQUFHO1FBQ2YsZ0JB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QUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFakQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IG5hY2wgZnJvbSAndHdlZXRuYWNsJztcbmltcG9ydCB7IGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBTeXN0ZW1Qcm9ncmFtIH0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCB7XG4gIGJ1aWxkQWR2YW5jZU5vbmNlQWNjb3VudEluc3RydWN0aW9uLFxuICBkZWNvZGVWMU1lc3NhZ2UsXG4gIEtleVBhaXIsXG4gIHBhcnNlV2lyZVRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbixcbiAgVjFUcmFuc2FjdGlvbkJ1aWxkZXIsXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyB2ZXJpZnlWMVNpZ25hdHVyZXMgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3NlcmlhbGl6YXRpb24vcGFyc2VXaXJlVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTb2xhbmFLZXlzLCBUcmFuc2ZlciB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuaW1wb3J0ICogYXMgdGVzdERhdGEgZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3NvbCc7XG5cbmNsYXNzIFRlc3RWMUJ1aWxkZXIgZXh0ZW5kcyBWMVRyYW5zYWN0aW9uQnVpbGRlciB7XG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5TZW5kO1xuICB9XG59XG5cbmRlc2NyaWJlKCdTb2xhbmEgVjEgVHJhbnNhY3Rpb24gQnVpbGRlciAoU0lNRC0wMjk2LzAzODUpJywgKCkgPT4ge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0c29sJyk7XG4gIGNvbnN0IHVzZXIgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5hdXRoQWNjb3VudCkuZ2V0S2V5cygpO1xuICBjb25zdCBnYXNUYW5rID0gbmV3IEtleVBhaXIoeyBwcnY6IHRlc3REYXRhLnBydktleXMucHJ2S2V5MS5iYXNlNTggfSkuZ2V0S2V5cygpO1xuICBjb25zdCBub25jZUFjY291bnQgPSBuZXcgS2V5UGFpcih0ZXN0RGF0YS5ub25jZUFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3QgcmVjaXBpZW50ID0gJ0VObjhhMnRHTVM5YlI1WFY3c21HSEp2Tmd6a3l4Sm1uRDJlVXZReFk1alNQJztcbiAgY29uc3QgcmVjZW50QmxvY2tIYXNoID0gJ0dIdFhRQnNvWkhWbk5GYTlZZXZBekZyMTdESmpnSFhrM3ljVEtENXhEM1ppJztcbiAgY29uc3QgYW1vdW50ID0gJzMwMDAwMCc7XG5cbiAgY29uc3QgdjFDb25maWcgPSB7XG4gICAgY29tcHV0ZVVuaXRMaW1pdDogMjAwXzAwMCxcbiAgICBoZWFwU2l6ZTogMzJfNzY4LFxuICAgIGxvYWRlZEFjY291bnRzRGF0YVNpemVMaW1pdDogNjVfNTM2LFxuICAgIHByaW9yaXR5RmVlOiA1XzAwMCxcbiAgfTtcblxuICBjb25zdCB0cmFuc2ZlcjogVHJhbnNmZXIgPSB7XG4gICAgdHlwZTogSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMuVHJhbnNmZXIsXG4gICAgcGFyYW1zOiB7IGZyb21BZGRyZXNzOiB1c2VyLnB1YiwgdG9BZGRyZXNzOiByZWNpcGllbnQsIGFtb3VudCB9LFxuICB9O1xuXG4gIGNvbnN0IG5ld0J1aWxkZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBUZXN0VjFCdWlsZGVyKGNvaW5Db25maWcpO1xuICAgIGJ1aWxkZXIuc2VuZGVyKHVzZXIucHViKTtcbiAgICBidWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgYnVpbGRlci5pbnN0cnVjdGlvbnMoW3RyYW5zZmVyXSk7XG4gICAgYnVpbGRlci50cmFuc2FjdGlvbkNvbmZpZyh2MUNvbmZpZyk7XG4gICAgcmV0dXJuIGJ1aWxkZXI7XG4gIH07XG5cbiAgY29uc3Qgc2lnbldpdGggPSAoa2V5UGFpcjogU29sYW5hS2V5cywgbWVzc2FnZUJ5dGVzOiBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gICAgY29uc3QgcHJ2ID0ga2V5UGFpci5wcnY7XG4gICAgaWYgKHR5cGVvZiBwcnYgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXkgZm9yIHRlc3Qgc2lnbmVyJyk7XG4gICAgfVxuICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnYgfSk7XG4gICAgcmV0dXJuIG5hY2wuc2lnbi5kZXRhY2hlZChtZXNzYWdlQnl0ZXMsIGtwLmdldEtleXModHJ1ZSkucHJ2IGFzIFVpbnQ4QXJyYXkpO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdzaW5nbGUgc2lnbmVyJywgKCkgPT4ge1xuICAgIGl0KCdidWlsZHMgYSB2MSBtZXNzYWdlICsgc2lnbmVkIHdpcmUgYW5kIHJvdW5kLXRyaXBzIHRocm91Z2ggcGFyc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5zaWduKHsga2V5OiB1c2VyLnBydiB9KTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgIHR4LnYxTWVzc2FnZUJ5dGVzIVswXS5zaG91bGQuZXF1YWwoMHg4MSk7XG4gICAgICB0eC52MVRyYW5zYWN0aW9uQnl0ZXMhLmxlbmd0aC5zaG91bGQuZXF1YWwodHgudjFNZXNzYWdlQnl0ZXMhLmxlbmd0aCArIDY0KTtcbiAgICAgIC8vIHNpZ25hYmxlIHBheWxvYWQgaXMgdGhlIG1lc3NhZ2UgYnl0ZXNcbiAgICAgIHR4LnNpZ25hYmxlUGF5bG9hZC5lcXVhbHMoQnVmZmVyLmZyb20odHgudjFNZXNzYWdlQnl0ZXMhKSkuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VXaXJlVHJhbnNhY3Rpb24odHgudjFUcmFuc2FjdGlvbkJ5dGVzISk7XG4gICAgICBwYXJzZWQuc2lnbmVyUHVibGljS2V5cy5zaG91bGQuZGVlcEVxdWFsKFt1c2VyLnB1Yl0pO1xuICAgICAgdmVyaWZ5VjFTaWduYXR1cmVzKHBhcnNlZC5tZXNzYWdlQnl0ZXMsIHBhcnNlZC5zaWduYXR1cmVzLCBwYXJzZWQuc2lnbmVyUHVibGljS2V5cyk7XG5cbiAgICAgIC8vIGJyb2FkY2FzdCBmb3JtYXQgcm91bmQtdHJpcHMgdGhyb3VnaCBmcm9tKClcbiAgICAgIGNvbnN0IHJhdyA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCByZXBhcnNlZCA9IG5ldyBUZXN0VjFCdWlsZGVyKGNvaW5Db25maWcpO1xuICAgICAgcmVwYXJzZWQuZnJvbShyYXcpO1xuICAgICAgKHJlcGFyc2VkIGFzIHVua25vd24gYXMgeyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gfSkudHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3KTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiB0cmFuc2FjdGlvbkNvbmZpZyBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUZXN0VjFCdWlsZGVyKGNvaW5Db25maWcpO1xuICAgICAgYnVpbGRlci5zZW5kZXIodXNlci5wdWIpO1xuICAgICAgYnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAgYnVpbGRlci5pbnN0cnVjdGlvbnMoW3RyYW5zZmVyXSk7XG4gICAgICBhd2FpdCBidWlsZGVyLmJ1aWxkKCkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvdHJhbnNhY3Rpb25Db25maWcgaXMgcmVxdWlyZWQvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2R1cmFibGUgbm9uY2UgKDIgc2lnbmF0dXJlcyknLCAoKSA9PiB7XG4gICAgaXQoJ2luamVjdHMgdGhlIEFkdmFuY2VOb25jZUFjY291bnQgaW5zdHJ1Y3Rpb24gYW5kIGFzc2VtYmxlcyB1c2VyICsgZ2FzLXRhbmsgc2lnbmF0dXJlcyBpbiBzaWduZXIgb3JkZXInLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHtcbiAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUFjY291bnQucHViLFxuICAgICAgICBhdXRoV2FsbGV0QWRkcmVzczogZ2FzVGFuay5wdWIsXG4gICAgICB9KTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdXNlci5wcnYgfSk7XG5cbiAgICAgIGNvbnN0IHVuc2lnbmVkID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBtZXNzYWdlQnl0ZXMgPSB1bnNpZ25lZC52MU1lc3NhZ2VCeXRlcyE7XG5cbiAgICAgIC8vIDIgcmVxdWlyZWQgc2lnbmVyczogdXNlciAoZmVlIHBheWVyKSArIGdhcy10YW5rIG5vbmNlIGF1dGhvcml0eVxuICAgICAgbWVzc2FnZUJ5dGVzWzFdLnNob3VsZC5lcXVhbCgyKTtcblxuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVYxTWVzc2FnZShtZXNzYWdlQnl0ZXMpO1xuICAgICAgLy8gbm9uY2UgaGFzaCBvY2N1cGllcyB0aGUgYmxvY2toYXNoIGZpZWxkXG4gICAgICBkZWNvZGVkLmJsb2NraGFzaC5zaG91bGQuZXF1YWwocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIC8vIGZpcnN0IGluc3RydWN0aW9uIGlzIEFkdmFuY2VOb25jZUFjY291bnQgKFN5c3RlbSBQcm9ncmFtLCBkaXNjcmltaW5hdG9yIDQpXG4gICAgICBkZWNvZGVkLmNvbXBpbGVkSW5zdHJ1Y3Rpb25zWzBdLmRhdGFbMF0uc2hvdWxkLmVxdWFsKDQpO1xuICAgICAgZGVjb2RlZC5zdGF0aWNBY2NvdW50c1tkZWNvZGVkLmNvbXBpbGVkSW5zdHJ1Y3Rpb25zWzBdLnByb2dyYW1BZGRyZXNzSW5kZXhdLnNob3VsZC5lcXVhbChcbiAgICAgICAgU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQudG9CYXNlNTgoKVxuICAgICAgKTtcbiAgICAgIC8vIHNpZ25lciBvcmRlcjogZmVlIHBheWVyICh1c2VyKSBmaXJzdCwgdGhlbiBnYXMgdGFua1xuICAgICAgZGVjb2RlZC5zdGF0aWNBY2NvdW50cy5zbGljZSgwLCAyKS5zaG91bGQuZGVlcEVxdWFsKFt1c2VyLnB1YiwgZ2FzVGFuay5wdWJdKTtcblxuICAgICAgLy8gYXR0YWNoIHRoZSBnYXMtdGFuayBIU00gc2lnbmF0dXJlIG92ZXIgdGhlIHNhbWUgbWVzc2FnZSBieXRlc1xuICAgICAgY29uc3QgZ2FzVGFua1NpZyA9IHNpZ25XaXRoKGdhc1RhbmssIG1lc3NhZ2VCeXRlcyk7XG4gICAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogZ2FzVGFuay5wdWIgfSwgQnVmZmVyLmZyb20oZ2FzVGFua1NpZykpO1xuICAgICAgY29uc3Qgc2lnbmVkID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgIC8vIG1lc3NhZ2UgYnl0ZS1pZGVudGl0eSBiZXR3ZWVuIGJ1aWxkIGFuZCBzaWduXG4gICAgICBzaWduZWQudjFNZXNzYWdlQnl0ZXMhLnNob3VsZC5kZWVwRXF1YWwobWVzc2FnZUJ5dGVzKTtcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VXaXJlVHJhbnNhY3Rpb24oc2lnbmVkLnYxVHJhbnNhY3Rpb25CeXRlcyEpO1xuICAgICAgcGFyc2VkLnNpZ25lclB1YmxpY0tleXMuc2hvdWxkLmRlZXBFcXVhbChbdXNlci5wdWIsIGdhc1RhbmsucHViXSk7XG4gICAgICB2ZXJpZnlWMVNpZ25hdHVyZXMocGFyc2VkLm1lc3NhZ2VCeXRlcywgcGFyc2VkLnNpZ25hdHVyZXMsIHBhcnNlZC5zaWduZXJQdWJsaWNLZXlzKTtcbiAgICB9KTtcblxuICAgIGl0KCdvcmRlcnMgc2lnbmF0dXJlcyBieSB0aGUgY29tcGlsZWQgbWVzc2FnZSB3aGVuIHRoZSBnYXMgdGFuayBpcyB0aGUgZmVlIHBheWVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7XG4gICAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YixcbiAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGdhc1RhbmsucHViLFxuICAgICAgfSk7XG4gICAgICBidWlsZGVyLmZlZVBheWVyKGdhc1RhbmsucHViKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdXNlci5wcnYgfSk7XG5cbiAgICAgIGNvbnN0IHVuc2lnbmVkID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBtZXNzYWdlQnl0ZXMgPSB1bnNpZ25lZC52MU1lc3NhZ2VCeXRlcyE7XG4gICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVjFNZXNzYWdlKG1lc3NhZ2VCeXRlcyk7XG4gICAgICAvLyBnYXMgdGFuayAoZmVlIHBheWVyKSBpcyB0aGUgZmlyc3Qgc2lnbmVyLCB1c2VyIHNlY29uZFxuICAgICAgZGVjb2RlZC5zdGF0aWNBY2NvdW50cy5zbGljZSgwLCAyKS5zaG91bGQuZGVlcEVxdWFsKFtnYXNUYW5rLnB1YiwgdXNlci5wdWJdKTtcblxuICAgICAgY29uc3QgdXNlclNpZyA9IHNpZ25XaXRoKHVzZXIsIG1lc3NhZ2VCeXRlcyk7XG4gICAgICBjb25zdCBnYXNUYW5rU2lnID0gc2lnbldpdGgoZ2FzVGFuaywgbWVzc2FnZUJ5dGVzKTtcbiAgICAgIGJ1aWxkZXIuYWRkU2lnbmF0dXJlKHsgcHViOiB1c2VyLnB1YiB9LCBCdWZmZXIuZnJvbSh1c2VyU2lnKSk7XG4gICAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogZ2FzVGFuay5wdWIgfSwgQnVmZmVyLmZyb20oZ2FzVGFua1NpZykpO1xuICAgICAgY29uc3Qgc2lnbmVkID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlV2lyZVRyYW5zYWN0aW9uKHNpZ25lZC52MVRyYW5zYWN0aW9uQnl0ZXMhKTtcbiAgICAgIHBhcnNlZC5zaWduZXJQdWJsaWNLZXlzLnNob3VsZC5kZWVwRXF1YWwoW2dhc1RhbmsucHViLCB1c2VyLnB1Yl0pO1xuICAgICAgdmVyaWZ5VjFTaWduYXR1cmVzKHBhcnNlZC5tZXNzYWdlQnl0ZXMsIHBhcnNlZC5zaWduYXR1cmVzLCBwYXJzZWQuc2lnbmVyUHVibGljS2V5cyk7XG4gICAgfSk7XG5cbiAgICBpdCgnemVyby1maWxscyBhIG1pc3Npbmcgc2lnbmF0dXJlIHNsb3Qgc28gdGhlIHdpcmUgc2hhcGUgc3RheXMgdmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3QnVpbGRlcigpO1xuICAgICAgYnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHtcbiAgICAgICAgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUFjY291bnQucHViLFxuICAgICAgICBhdXRoV2FsbGV0QWRkcmVzczogZ2FzVGFuay5wdWIsXG4gICAgICB9KTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdXNlci5wcnYgfSk7XG5cbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVdpcmVUcmFuc2FjdGlvbih0eC52MVRyYW5zYWN0aW9uQnl0ZXMhKTtcbiAgICAgIHBhcnNlZC5zaWduZXJQdWJsaWNLZXlzLnNob3VsZC5kZWVwRXF1YWwoW3VzZXIucHViLCBnYXNUYW5rLnB1Yl0pO1xuICAgICAgcGFyc2VkLnNpZ25hdHVyZXNbMF0uc29tZSgoYikgPT4gYiAhPT0gMCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHBhcnNlZC5zaWduYXR1cmVzWzFdLmV2ZXJ5KChiKSA9PiBiID09PSAwKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgc2hvdWxkLnRocm93cygoKSA9PiB2ZXJpZnlWMVNpZ25hdHVyZXMocGFyc2VkLm1lc3NhZ2VCeXRlcywgcGFyc2VkLnNpZ25hdHVyZXMsIHBhcnNlZC5zaWduZXJQdWJsaWNLZXlzKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdidWlsZEFkdmFuY2VOb25jZUFjY291bnRJbnN0cnVjdGlvbicsICgpID0+IHtcbiAgICBpdCgnY29uc3RydWN0cyB0aGUgbm9uY2UgYWR2YW5jZSBpbnN0cnVjdGlvbiB3aXRoIHRoZSBhdXRob3JpdHkgYXMgc2lnbmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgaXggPSBidWlsZEFkdmFuY2VOb25jZUFjY291bnRJbnN0cnVjdGlvbihub25jZUFjY291bnQucHViLCBnYXNUYW5rLnB1Yik7XG4gICAgICBpeC5wcm9ncmFtSWQudG9CYXNlNTgoKS5zaG91bGQuZXF1YWwoU3lzdGVtUHJvZ3JhbS5wcm9ncmFtSWQudG9CYXNlNTgoKSk7XG4gICAgICBpeC5kYXRhWzBdLnNob3VsZC5lcXVhbCg0KTtcbiAgICAgIGl4LmtleXNbMF0ucHVia2V5LnRvQmFzZTU4KCkuc2hvdWxkLmVxdWFsKG5vbmNlQWNjb3VudC5wdWIpO1xuICAgICAgaXgua2V5c1swXS5pc1dyaXRhYmxlLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBpeC5rZXlzWzBdLmlzU2lnbmVyLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgICAgLy8gd2ViMy5qcyBub25jZUFkdmFuY2UgaW5jbHVkZXMgdGhlIHJlY2VudC1ibG9ja2hhc2hlcyBzeXN2YXIgYXMgdGhlIHNlY29uZCBrZXlcbiAgICAgIGl4LmtleXNbMV0ucHVia2V5LnRvQmFzZTU4KCkuc2hvdWxkLmVxdWFsKCdTeXN2YXJSZWNlbnRCMW9ja0hhc2hlczExMTExMTExMTExMTExMTExMTExJyk7XG4gICAgICBpeC5rZXlzWzJdLnB1YmtleS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbChnYXNUYW5rLnB1Yik7XG4gICAgICBpeC5rZXlzWzJdLmlzU2lnbmVyLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdub25jZSB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdyZWplY3RzIGFuIGludmFsaWQgYmxvY2toYXNoJywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gYnVpbGRlci5ub25jZSgnbm90LWEtYmxvY2toYXNoJyksIC9JbnZhbGlkIG9yIG1pc3NpbmcgYmxvY2tIYXNoLyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0cyBhIG5vbmNlIHdob3NlIGF1dGhvcml0eSBlcXVhbHMgdGhlIG5vbmNlIGFjY291bnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3QnVpbGRlcigpO1xuICAgICAgc2hvdWxkLnRocm93cyhcbiAgICAgICAgKCkgPT4gYnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHsgd2FsbGV0Tm9uY2VBZGRyZXNzOiB1c2VyLnB1YiwgYXV0aFdhbGxldEFkZHJlc3M6IHVzZXIucHViIH0pLFxuICAgICAgICAvd2FsbGV0Tm9uY2VBZGRyZXNzIGNhbm5vdCBiZSBlcXVhbCB0byBhdXRoV2FsbGV0QWRkcmVzcy9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmcm9tKCknLCAoKSA9PiB7XG4gICAgaXQoJ3BhcnNlcyBhIHNpZ25lZCB2MSB3aXJlIGFuZCBleHBvc2VzIHRvSnNvbiB2aWEgdGhlIG1ldGFkYXRhIHRyYW5zYWN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdXNlci5wcnYgfSk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgcmF3ID0gdHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcblxuICAgICAgY29uc3QgcmVwYXJzZWQgPSBuZXcgVGVzdFYxQnVpbGRlcihjb2luQ29uZmlnKTtcbiAgICAgIHJlcGFyc2VkLmZyb20ocmF3KTtcbiAgICAgIGNvbnN0IHJlcGFyc2VkVHggPSAocmVwYXJzZWQgYXMgdW5rbm93biBhcyB7IHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiB9KS50cmFuc2FjdGlvbjtcbiAgICAgIHJlcGFyc2VkVHgudG9Ccm9hZGNhc3RGb3JtYXQoKS5zaG91bGQuZXF1YWwocmF3KTtcblxuICAgICAgY29uc3QganNvbiA9IHJlcGFyc2VkVHgudG9Kc29uKCk7XG4gICAgICBqc29uLm5vbmNlLnNob3VsZC5lcXVhbChyZWNlbnRCbG9ja0hhc2gpO1xuICAgICAganNvbi5udW1TaWduYXR1cmVzLnNob3VsZC5lcXVhbCgxKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
221
|
+
describe('V1CustomInstructionBuilder', function () {
|
|
222
|
+
const coinConfig = statics_1.coins.get('tsol');
|
|
223
|
+
const user = new src_1.KeyPair(testData.authAccount).getKeys();
|
|
224
|
+
const gasTank = new src_1.KeyPair({ prv: testData.prvKeys.prvKey1.base58 }).getKeys();
|
|
225
|
+
const nonceAccount = new src_1.KeyPair(testData.nonceAccount).getKeys();
|
|
226
|
+
const recentBlockHash = 'GHtXQBsoZHVnNFa9YevAzFr17DJjgHXk3ycTKD5xD3Zi';
|
|
227
|
+
const v1Config = {
|
|
228
|
+
computeUnitLimit: 200000,
|
|
229
|
+
heapSize: 32768,
|
|
230
|
+
loadedAccountsDataSizeLimit: 65536,
|
|
231
|
+
priorityFee: 5000,
|
|
232
|
+
};
|
|
233
|
+
const signWith = (keyPair, messageBytes) => {
|
|
234
|
+
const prv = keyPair.prv;
|
|
235
|
+
if (typeof prv !== 'string') {
|
|
236
|
+
throw new Error('Missing private key for test signer');
|
|
237
|
+
}
|
|
238
|
+
const kp = new src_1.KeyPair({ prv });
|
|
239
|
+
return tweetnacl_1.default.sign.detached(messageBytes, kp.getKeys(true).prv);
|
|
240
|
+
};
|
|
241
|
+
it('builds a v1 transaction from a custom instruction + 2 signatures in signer order', async function () {
|
|
242
|
+
const recipient = 'C3sGf4xZb7kP1mQr8tYw9uVx2nD5hJ6aLcE4oRqS7iB';
|
|
243
|
+
const builder = new v1CustomInstructionBuilder_1.V1CustomInstructionBuilder(coinConfig);
|
|
244
|
+
builder.sender(user.pub);
|
|
245
|
+
builder.nonce(recentBlockHash, { walletNonceAddress: nonceAccount.pub, authWalletAddress: gasTank.pub });
|
|
246
|
+
builder.transactionConfig(v1Config);
|
|
247
|
+
builder.addInstruction(web3_js_1.SystemProgram.transfer({
|
|
248
|
+
fromPubkey: new web3_js_1.PublicKey(user.pub),
|
|
249
|
+
toPubkey: new web3_js_1.PublicKey(recipient),
|
|
250
|
+
lamports: 1000000,
|
|
251
|
+
}));
|
|
252
|
+
builder.sign({ key: user.prv });
|
|
253
|
+
const unsigned = (await builder.build());
|
|
254
|
+
const gasTankSig = signWith(gasTank, unsigned.v1MessageBytes);
|
|
255
|
+
builder.addSignature({ pub: gasTank.pub }, Buffer.from(gasTankSig));
|
|
256
|
+
const signed = (await builder.build());
|
|
257
|
+
const parsed = (0, src_1.parseWireTransaction)(signed.v1TransactionBytes);
|
|
258
|
+
parsed.signerPublicKeys.should.deepEqual([user.pub, gasTank.pub]);
|
|
259
|
+
(0, parseWireTransaction_1.verifyV1Signatures)(parsed.messageBytes, parsed.signatures, parsed.signerPublicKeys);
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidjFUcmFuc2FjdGlvbkJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvdHJhbnNhY3Rpb25CdWlsZGVyL3YxVHJhbnNhY3Rpb25CdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDBEQUE2QjtBQUM3QixpREFBNEM7QUFDNUMsbURBQXVEO0FBQ3ZELDZDQUEyRDtBQUMzRCxzQ0FPc0I7QUFDdEIsOEZBQXlGO0FBQ3pGLDBEQUFxRTtBQUNyRSw0RkFBeUY7QUFFekYsOERBQWdEO0FBRWhELE1BQU0sYUFBYyxTQUFRLDBCQUFvQjtJQUM5QyxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxFQUFFO0lBQzlELE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxhQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEYsTUFBTSxZQUFZLEdBQUcsSUFBSSxhQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xFLE1BQU0sU0FBUyxHQUFHLDhDQUE4QyxDQUFDO0lBQ2pFLE1BQU0sZUFBZSxHQUFHLDhDQUE4QyxDQUFDO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUV4QixNQUFNLFFBQVEs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TUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsY0FBZSxDQUFDLENBQUM7UUFDL0QsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQWdCLENBQUM7UUFFdEQsTUFBTSxNQUFNLEdBQUcsSUFBQSwwQkFBb0IsRUFBQyxNQUFNLENBQUMsa0JBQW1CLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEUsSUFBQSx5Q0FBa0IsRUFBQyxNQUFNLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdEYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCBuYWNsIGZyb20gJ3R3ZWV0bmFjbCc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgUHVibGljS2V5LCBTeXN0ZW1Qcm9ncmFtIH0gZnJvbSAnQHNvbGFuYS93ZWIzLmpzJztcbmltcG9ydCB7XG4gIGJ1aWxkQWR2YW5jZU5vbmNlQWNjb3VudEluc3RydWN0aW9uLFxuICBkZWNvZGVWMU1lc3NhZ2UsXG4gIEtleVBhaXIsXG4gIHBhcnNlV2lyZVRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbixcbiAgVjFUcmFuc2FjdGlvbkJ1aWxkZXIsXG59IGZyb20gJy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyB2ZXJpZnlWMVNpZ25hdHVyZXMgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL3NlcmlhbGl6YXRpb24vcGFyc2VXaXJlVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgSW5zdHJ1Y3Rpb25CdWlsZGVyVHlwZXMgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBWMUN1c3RvbUluc3RydWN0aW9uQnVpbGRlciB9IGZyb20gJy4uLy4uLy4uL3NyYy9saWIvdjFDdXN0b21JbnN0cnVjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgU29sYW5hS2V5cywgVHJhbnNmZXIgfSBmcm9tICcuLi8uLi8uLi9zcmMvbGliL2lmYWNlJztcbmltcG9ydCAqIGFzIHRlc3REYXRhIGZyb20gJy4uLy4uL3Jlc291cmNlcy9zb2wnO1xuXG5jbGFzcyBUZXN0VjFCdWlsZGVyIGV4dGVuZHMgVjFUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuU2VuZDtcbiAgfVxufVxuXG5kZXNjcmliZSgnU29sYW5hIFYxIFRyYW5zYWN0aW9uIEJ1aWxkZXIgKFNJTUQtMDI5Ni8wMzg1KScsICgpID0+IHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgndHNvbCcpO1xuICBjb25zdCB1c2VyID0gbmV3IEtleVBhaXIodGVzdERhdGEuYXV0aEFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3QgZ2FzVGFuayA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcnZLZXlzLnBydktleTEuYmFzZTU4IH0pLmdldEtleXMoKTtcbiAgY29uc3Qgbm9uY2VBY2NvdW50ID0gbmV3IEtleVBhaXIodGVzdERhdGEubm9uY2VBY2NvdW50KS5nZXRLZXlzKCk7XG4gIGNvbnN0IHJlY2lwaWVudCA9ICdFTm44YTJ0R01TOWJSNVhWN3NtR0hKdk5nemt5eEptbkQyZVV2UXhZNWpTUCc7XG4gIGNvbnN0IHJlY2VudEJsb2NrSGFzaCA9ICdHSHRYUUJzb1pIVm5ORmE5WWV2QXpGcjE3REpqZ0hYazN5Y1RLRDV4RDNaaSc7XG4gIGNvbnN0IGFtb3VudCA9ICczMDAwMDAnO1xuXG4gIGNvbnN0IHYxQ29uZmlnID0ge1xuICAgIGNvbXB1dGVVbml0TGltaXQ6IDIwMF8wMDAsXG4gICAgaGVhcFNpemU6IDMyXzc2OCxcbiAgICBsb2FkZWRBY2NvdW50c0RhdGFTaXplTGltaXQ6IDY1XzUzNixcbiAgICBwcmlvcml0eUZlZTogNV8wMDAsXG4gIH07XG5cbiAgY29uc3QgdHJhbnNmZXI6IFRyYW5zZmVyID0ge1xuICAgIHR5cGU6IEluc3RydWN0aW9uQnVpbGRlclR5cGVzLlRyYW5zZmVyLFxuICAgIHBhcmFtczogeyBmcm9tQWRkcmVzczogdXNlci5wdWIsIHRvQWRkcmVzczogcmVjaXBpZW50LCBhbW91bnQgfSxcbiAgfTtcblxuICBjb25zdCBuZXdCdWlsZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGVzdFYxQnVpbGRlcihjb2luQ29uZmlnKTtcbiAgICBidWlsZGVyLnNlbmRlcih1c2VyLnB1Yik7XG4gICAgYnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gpO1xuICAgIGJ1aWxkZXIuaW5zdHJ1Y3Rpb25zKFt0cmFuc2Zlcl0pO1xuICAgIGJ1aWxkZXIudHJhbnNhY3Rpb25Db25maWcodjFDb25maWcpO1xuICAgIHJldHVybiBidWlsZGVyO1xuICB9O1xuXG4gIGNvbnN0IHNpZ25XaXRoID0gKGtleVBhaXI6IFNvbGFuYUtleXMsIG1lc3NhZ2VCeXRlczogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICAgIGNvbnN0IHBydiA9IGtleVBhaXIucHJ2O1xuICAgIGlmICh0eXBlb2YgcHJ2ICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHByaXZhdGUga2V5IGZvciB0ZXN0IHNpZ25lcicpO1xuICAgIH1cbiAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2IH0pO1xuICAgIHJldHVybiBuYWNsLnNpZ24uZGV0YWNoZWQobWVzc2FnZUJ5dGVzLCBrcC5nZXRLZXlzKHRydWUpLnBydiBhcyBVaW50OEFycmF5KTtcbiAgfTtcblxuICBkZXNjcmliZSgnc2luZ2xlIHNpZ25lcicsICgpID0+IHtcbiAgICBpdCgnYnVpbGRzIGEgdjEgbWVzc2FnZSArIHNpZ25lZCB3aXJlIGFuZCByb3VuZC10cmlwcyB0aHJvdWdoIHBhcnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIuc2lnbih7IGtleTogdXNlci5wcnYgfSk7XG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICB0eC52MU1lc3NhZ2VCeXRlcyFbMF0uc2hvdWxkLmVxdWFsKDB4ODEpO1xuICAgICAgdHgudjFUcmFuc2FjdGlvbkJ5dGVzIS5sZW5ndGguc2hvdWxkLmVxdWFsKHR4LnYxTWVzc2FnZUJ5dGVzIS5sZW5ndGggKyA2NCk7XG4gICAgICAvLyBzaWduYWJsZSBwYXlsb2FkIGlzIHRoZSBtZXNzYWdlIGJ5dGVzXG4gICAgICB0eC5zaWduYWJsZVBheWxvYWQuZXF1YWxzKEJ1ZmZlci5mcm9tKHR4LnYxTWVzc2FnZUJ5dGVzISkpLnNob3VsZC5iZS50cnVlKCk7XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlV2lyZVRyYW5zYWN0aW9uKHR4LnYxVHJhbnNhY3Rpb25CeXRlcyEpO1xuICAgICAgcGFyc2VkLnNpZ25lclB1YmxpY0tleXMuc2hvdWxkLmRlZXBFcXVhbChbdXNlci5wdWJdKTtcbiAgICAgIHZlcmlmeVYxU2lnbmF0dXJlcyhwYXJzZWQubWVzc2FnZUJ5dGVzLCBwYXJzZWQuc2lnbmF0dXJlcywgcGFyc2VkLnNpZ25lclB1YmxpY0tleXMpO1xuXG4gICAgICAvLyBicm9hZGNhc3QgZm9ybWF0IHJvdW5kLXRyaXBzIHRocm91Z2ggZnJvbSgpXG4gICAgICBjb25zdCByYXcgPSB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgcmVwYXJzZWQgPSBuZXcgVGVzdFYxQnVpbGRlcihjb2luQ29uZmlnKTtcbiAgICAgIHJlcGFyc2VkLmZyb20ocmF3KTtcbiAgICAgIChyZXBhcnNlZCBhcyB1bmtub3duIGFzIHsgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uIH0pLnRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHJhdyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gdHJhbnNhY3Rpb25Db25maWcgaXMgbWlzc2luZycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGVzdFYxQnVpbGRlcihjb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIuc2VuZGVyKHVzZXIucHViKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIGJ1aWxkZXIuaW5zdHJ1Y3Rpb25zKFt0cmFuc2Zlcl0pO1xuICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL3RyYW5zYWN0aW9uQ29uZmlnIGlzIHJlcXVpcmVkLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkdXJhYmxlIG5vbmNlICgyIHNpZ25hdHVyZXMpJywgKCkgPT4ge1xuICAgIGl0KCdpbmplY3RzIHRoZSBBZHZhbmNlTm9uY2VBY2NvdW50IGluc3RydWN0aW9uIGFuZCBhc3NlbWJsZXMgdXNlciArIGdhcy10YW5rIHNpZ25hdHVyZXMgaW4gc2lnbmVyIG9yZGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7XG4gICAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YixcbiAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGdhc1RhbmsucHViLFxuICAgICAgfSk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgbWVzc2FnZUJ5dGVzID0gdW5zaWduZWQudjFNZXNzYWdlQnl0ZXMhO1xuXG4gICAgICAvLyAyIHJlcXVpcmVkIHNpZ25lcnM6IHVzZXIgKGZlZSBwYXllcikgKyBnYXMtdGFuayBub25jZSBhdXRob3JpdHlcbiAgICAgIG1lc3NhZ2VCeXRlc1sxXS5zaG91bGQuZXF1YWwoMik7XG5cbiAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVWMU1lc3NhZ2UobWVzc2FnZUJ5dGVzKTtcbiAgICAgIC8vIG5vbmNlIGhhc2ggb2NjdXBpZXMgdGhlIGJsb2NraGFzaCBmaWVsZFxuICAgICAgZGVjb2RlZC5ibG9ja2hhc2guc2hvdWxkLmVxdWFsKHJlY2VudEJsb2NrSGFzaCk7XG4gICAgICAvLyBmaXJzdCBpbnN0cnVjdGlvbiBpcyBBZHZhbmNlTm9uY2VBY2NvdW50IChTeXN0ZW0gUHJvZ3JhbSwgZGlzY3JpbWluYXRvciA0KVxuICAgICAgZGVjb2RlZC5jb21waWxlZEluc3RydWN0aW9uc1swXS5kYXRhWzBdLnNob3VsZC5lcXVhbCg0KTtcbiAgICAgIGRlY29kZWQuc3RhdGljQWNjb3VudHNbZGVjb2RlZC5jb21waWxlZEluc3RydWN0aW9uc1swXS5wcm9ncmFtQWRkcmVzc0luZGV4XS5zaG91bGQuZXF1YWwoXG4gICAgICAgIFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLnRvQmFzZTU4KClcbiAgICAgICk7XG4gICAgICAvLyBzaWduZXIgb3JkZXI6IGZlZSBwYXllciAodXNlcikgZmlyc3QsIHRoZW4gZ2FzIHRhbmtcbiAgICAgIGRlY29kZWQuc3RhdGljQWNjb3VudHMuc2xpY2UoMCwgMikuc2hvdWxkLmRlZXBFcXVhbChbdXNlci5wdWIsIGdhc1RhbmsucHViXSk7XG5cbiAgICAgIC8vIGF0dGFjaCB0aGUgZ2FzLXRhbmsgSFNNIHNpZ25hdHVyZSBvdmVyIHRoZSBzYW1lIG1lc3NhZ2UgYnl0ZXNcbiAgICAgIGNvbnN0IGdhc1RhbmtTaWcgPSBzaWduV2l0aChnYXNUYW5rLCBtZXNzYWdlQnl0ZXMpO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IGdhc1RhbmsucHViIH0sIEJ1ZmZlci5mcm9tKGdhc1RhbmtTaWcpKTtcbiAgICAgIGNvbnN0IHNpZ25lZCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICAvLyBtZXNzYWdlIGJ5dGUtaWRlbnRpdHkgYmV0d2VlbiBidWlsZCBhbmQgc2lnblxuICAgICAgc2lnbmVkLnYxTWVzc2FnZUJ5dGVzIS5zaG91bGQuZGVlcEVxdWFsKG1lc3NhZ2VCeXRlcyk7XG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlV2lyZVRyYW5zYWN0aW9uKHNpZ25lZC52MVRyYW5zYWN0aW9uQnl0ZXMhKTtcbiAgICAgIHBhcnNlZC5zaWduZXJQdWJsaWNLZXlzLnNob3VsZC5kZWVwRXF1YWwoW3VzZXIucHViLCBnYXNUYW5rLnB1Yl0pO1xuICAgICAgdmVyaWZ5VjFTaWduYXR1cmVzKHBhcnNlZC5tZXNzYWdlQnl0ZXMsIHBhcnNlZC5zaWduYXR1cmVzLCBwYXJzZWQuc2lnbmVyUHVibGljS2V5cyk7XG4gICAgfSk7XG5cbiAgICBpdCgnb3JkZXJzIHNpZ25hdHVyZXMgYnkgdGhlIGNvbXBpbGVkIG1lc3NhZ2Ugd2hlbiB0aGUgZ2FzIHRhbmsgaXMgdGhlIGZlZSBwYXllcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXdCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLm5vbmNlKHJlY2VudEJsb2NrSGFzaCwge1xuICAgICAgICB3YWxsZXROb25jZUFkZHJlc3M6IG5vbmNlQWNjb3VudC5wdWIsXG4gICAgICAgIGF1dGhXYWxsZXRBZGRyZXNzOiBnYXNUYW5rLnB1YixcbiAgICAgIH0pO1xuICAgICAgYnVpbGRlci5mZWVQYXllcihnYXNUYW5rLnB1Yik7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuXG4gICAgICBjb25zdCB1bnNpZ25lZCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgbWVzc2FnZUJ5dGVzID0gdW5zaWduZWQudjFNZXNzYWdlQnl0ZXMhO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVYxTWVzc2FnZShtZXNzYWdlQnl0ZXMpO1xuICAgICAgLy8gZ2FzIHRhbmsgKGZlZSBwYXllcikgaXMgdGhlIGZpcnN0IHNpZ25lciwgdXNlciBzZWNvbmRcbiAgICAgIGRlY29kZWQuc3RhdGljQWNjb3VudHMuc2xpY2UoMCwgMikuc2hvdWxkLmRlZXBFcXVhbChbZ2FzVGFuay5wdWIsIHVzZXIucHViXSk7XG5cbiAgICAgIGNvbnN0IHVzZXJTaWcgPSBzaWduV2l0aCh1c2VyLCBtZXNzYWdlQnl0ZXMpO1xuICAgICAgY29uc3QgZ2FzVGFua1NpZyA9IHNpZ25XaXRoKGdhc1RhbmssIG1lc3NhZ2VCeXRlcyk7XG4gICAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogdXNlci5wdWIgfSwgQnVmZmVyLmZyb20odXNlclNpZykpO1xuICAgICAgYnVpbGRlci5hZGRTaWduYXR1cmUoeyBwdWI6IGdhc1RhbmsucHViIH0sIEJ1ZmZlci5mcm9tKGdhc1RhbmtTaWcpKTtcbiAgICAgIGNvbnN0IHNpZ25lZCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVdpcmVUcmFuc2FjdGlvbihzaWduZWQudjFUcmFuc2FjdGlvbkJ5dGVzISk7XG4gICAgICBwYXJzZWQuc2lnbmVyUHVibGljS2V5cy5zaG91bGQuZGVlcEVxdWFsKFtnYXNUYW5rLnB1YiwgdXNlci5wdWJdKTtcbiAgICAgIHZlcmlmeVYxU2lnbmF0dXJlcyhwYXJzZWQubWVzc2FnZUJ5dGVzLCBwYXJzZWQuc2lnbmF0dXJlcywgcGFyc2VkLnNpZ25lclB1YmxpY0tleXMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3plcm8tZmlsbHMgYSBtaXNzaW5nIHNpZ25hdHVyZSBzbG90IHNvIHRoZSB3aXJlIHNoYXBlIHN0YXlzIHZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7XG4gICAgICAgIHdhbGxldE5vbmNlQWRkcmVzczogbm9uY2VBY2NvdW50LnB1YixcbiAgICAgICAgYXV0aFdhbGxldEFkZHJlc3M6IGdhc1RhbmsucHViLFxuICAgICAgfSk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuXG4gICAgICBjb25zdCB0eCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VXaXJlVHJhbnNhY3Rpb24odHgudjFUcmFuc2FjdGlvbkJ5dGVzISk7XG4gICAgICBwYXJzZWQuc2lnbmVyUHVibGljS2V5cy5zaG91bGQuZGVlcEVxdWFsKFt1c2VyLnB1YiwgZ2FzVGFuay5wdWJdKTtcbiAgICAgIHBhcnNlZC5zaWduYXR1cmVzWzBdLnNvbWUoKGIpID0+IGIgIT09IDApLnNob3VsZC5iZS50cnVlKCk7XG4gICAgICBwYXJzZWQuc2lnbmF0dXJlc1sxXS5ldmVyeSgoYikgPT4gYiA9PT0gMCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gdmVyaWZ5VjFTaWduYXR1cmVzKHBhcnNlZC5tZXNzYWdlQnl0ZXMsIHBhcnNlZC5zaWduYXR1cmVzLCBwYXJzZWQuc2lnbmVyUHVibGljS2V5cykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGRBZHZhbmNlTm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2NvbnN0cnVjdHMgdGhlIG5vbmNlIGFkdmFuY2UgaW5zdHJ1Y3Rpb24gd2l0aCB0aGUgYXV0aG9yaXR5IGFzIHNpZ25lcicsICgpID0+IHtcbiAgICAgIGNvbnN0IGl4ID0gYnVpbGRBZHZhbmNlTm9uY2VBY2NvdW50SW5zdHJ1Y3Rpb24obm9uY2VBY2NvdW50LnB1YiwgZ2FzVGFuay5wdWIpO1xuICAgICAgaXgucHJvZ3JhbUlkLnRvQmFzZTU4KCkuc2hvdWxkLmVxdWFsKFN5c3RlbVByb2dyYW0ucHJvZ3JhbUlkLnRvQmFzZTU4KCkpO1xuICAgICAgaXguZGF0YVswXS5zaG91bGQuZXF1YWwoNCk7XG4gICAgICBpeC5rZXlzWzBdLnB1YmtleS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbChub25jZUFjY291bnQucHViKTtcbiAgICAgIGl4LmtleXNbMF0uaXNXcml0YWJsZS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgICAgaXgua2V5c1swXS5pc1NpZ25lci5zaG91bGQuYmUuZmFsc2UoKTtcbiAgICAgIC8vIHdlYjMuanMgbm9uY2VBZHZhbmNlIGluY2x1ZGVzIHRoZSByZWNlbnQtYmxvY2toYXNoZXMgc3lzdmFyIGFzIHRoZSBzZWNvbmQga2V5XG4gICAgICBpeC5rZXlzWzFdLnB1YmtleS50b0Jhc2U1OCgpLnNob3VsZC5lcXVhbCgnU3lzdmFyUmVjZW50QjFvY2tIYXNoZXMxMTExMTExMTExMTExMTExMTExMScpO1xuICAgICAgaXgua2V5c1syXS5wdWJrZXkudG9CYXNlNTgoKS5zaG91bGQuZXF1YWwoZ2FzVGFuay5wdWIpO1xuICAgICAgaXgua2V5c1syXS5pc1NpZ25lci5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbm9uY2UgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBpdCgncmVqZWN0cyBhbiBpbnZhbGlkIGJsb2NraGFzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXdCdWlsZGVyKCk7XG4gICAgICBzaG91bGQudGhyb3dzKCgpID0+IGJ1aWxkZXIubm9uY2UoJ25vdC1hLWJsb2NraGFzaCcpLCAvSW52YWxpZCBvciBtaXNzaW5nIGJsb2NrSGFzaC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdHMgYSBub25jZSB3aG9zZSBhdXRob3JpdHkgZXF1YWxzIHRoZSBub25jZSBhY2NvdW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ld0J1aWxkZXIoKTtcbiAgICAgIHNob3VsZC50aHJvd3MoXG4gICAgICAgICgpID0+IGJ1aWxkZXIubm9uY2UocmVjZW50QmxvY2tIYXNoLCB7IHdhbGxldE5vbmNlQWRkcmVzczogdXNlci5wdWIsIGF1dGhXYWxsZXRBZGRyZXNzOiB1c2VyLnB1YiB9KSxcbiAgICAgICAgL3dhbGxldE5vbmNlQWRkcmVzcyBjYW5ub3QgYmUgZXF1YWwgdG8gYXV0aFdhbGxldEFkZHJlc3MvXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZnJvbSgpJywgKCkgPT4ge1xuICAgIGl0KCdwYXJzZXMgYSBzaWduZWQgdjEgd2lyZSBhbmQgZXhwb3NlcyB0b0pzb24gdmlhIHRoZSBtZXRhZGF0YSB0cmFuc2FjdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXdCdWlsZGVyKCk7XG4gICAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuICAgICAgY29uc3QgdHggPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICAgIGNvbnN0IHJhdyA9IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG5cbiAgICAgIGNvbnN0IHJlcGFyc2VkID0gbmV3IFRlc3RWMUJ1aWxkZXIoY29pbkNvbmZpZyk7XG4gICAgICByZXBhcnNlZC5mcm9tKHJhdyk7XG4gICAgICBjb25zdCByZXBhcnNlZFR4ID0gKHJlcGFyc2VkIGFzIHVua25vd24gYXMgeyB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gfSkudHJhbnNhY3Rpb247XG4gICAgICByZXBhcnNlZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCkuc2hvdWxkLmVxdWFsKHJhdyk7XG5cbiAgICAgIGNvbnN0IGpzb24gPSByZXBhcnNlZFR4LnRvSnNvbigpO1xuICAgICAganNvbi5ub25jZS5zaG91bGQuZXF1YWwocmVjZW50QmxvY2tIYXNoKTtcbiAgICAgIGpzb24ubnVtU2lnbmF0dXJlcy5zaG91bGQuZXF1YWwoMSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdWMUN1c3RvbUluc3RydWN0aW9uQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCgndHNvbCcpO1xuICBjb25zdCB1c2VyID0gbmV3IEtleVBhaXIodGVzdERhdGEuYXV0aEFjY291bnQpLmdldEtleXMoKTtcbiAgY29uc3QgZ2FzVGFuayA9IG5ldyBLZXlQYWlyKHsgcHJ2OiB0ZXN0RGF0YS5wcnZLZXlzLnBydktleTEuYmFzZTU4IH0pLmdldEtleXMoKTtcbiAgY29uc3Qgbm9uY2VBY2NvdW50ID0gbmV3IEtleVBhaXIodGVzdERhdGEubm9uY2VBY2NvdW50KS5nZXRLZXlzKCk7XG4gIGNvbnN0IHJlY2VudEJsb2NrSGFzaCA9ICdHSHRYUUJzb1pIVm5ORmE5WWV2QXpGcjE3REpqZ0hYazN5Y1RLRDV4RDNaaSc7XG4gIGNvbnN0IHYxQ29uZmlnID0ge1xuICAgIGNvbXB1dGVVbml0TGltaXQ6IDIwMF8wMDAsXG4gICAgaGVhcFNpemU6IDMyXzc2OCxcbiAgICBsb2FkZWRBY2NvdW50c0RhdGFTaXplTGltaXQ6IDY1XzUzNixcbiAgICBwcmlvcml0eUZlZTogNV8wMDAsXG4gIH07XG5cbiAgY29uc3Qgc2lnbldpdGggPSAoa2V5UGFpcjogU29sYW5hS2V5cywgbWVzc2FnZUJ5dGVzOiBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gICAgY29uc3QgcHJ2ID0ga2V5UGFpci5wcnY7XG4gICAgaWYgKHR5cGVvZiBwcnYgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJpdmF0ZSBrZXkgZm9yIHRlc3Qgc2lnbmVyJyk7XG4gICAgfVxuICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnYgfSk7XG4gICAgcmV0dXJuIG5hY2wuc2lnbi5kZXRhY2hlZChtZXNzYWdlQnl0ZXMsIGtwLmdldEtleXModHJ1ZSkucHJ2IGFzIFVpbnQ4QXJyYXkpO1xuICB9O1xuXG4gIGl0KCdidWlsZHMgYSB2MSB0cmFuc2FjdGlvbiBmcm9tIGEgY3VzdG9tIGluc3RydWN0aW9uICsgMiBzaWduYXR1cmVzIGluIHNpZ25lciBvcmRlcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCByZWNpcGllbnQgPSAnQzNzR2Y0eFpiN2tQMW1Rcjh0WXc5dVZ4Mm5ENWhKNmFMY0U0b1JxUzdpQic7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBWMUN1c3RvbUluc3RydWN0aW9uQnVpbGRlcihjb2luQ29uZmlnKTtcbiAgICBidWlsZGVyLnNlbmRlcih1c2VyLnB1Yik7XG4gICAgYnVpbGRlci5ub25jZShyZWNlbnRCbG9ja0hhc2gsIHsgd2FsbGV0Tm9uY2VBZGRyZXNzOiBub25jZUFjY291bnQucHViLCBhdXRoV2FsbGV0QWRkcmVzczogZ2FzVGFuay5wdWIgfSk7XG4gICAgYnVpbGRlci50cmFuc2FjdGlvbkNvbmZpZyh2MUNvbmZpZyk7XG4gICAgYnVpbGRlci5hZGRJbnN0cnVjdGlvbihcbiAgICAgIFN5c3RlbVByb2dyYW0udHJhbnNmZXIoe1xuICAgICAgICBmcm9tUHVia2V5OiBuZXcgUHVibGljS2V5KHVzZXIucHViKSxcbiAgICAgICAgdG9QdWJrZXk6IG5ldyBQdWJsaWNLZXkocmVjaXBpZW50KSxcbiAgICAgICAgbGFtcG9ydHM6IDFfMDAwXzAwMCxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBidWlsZGVyLnNpZ24oeyBrZXk6IHVzZXIucHJ2IH0pO1xuXG4gICAgY29uc3QgdW5zaWduZWQgPSAoYXdhaXQgYnVpbGRlci5idWlsZCgpKSBhcyBUcmFuc2FjdGlvbjtcbiAgICBjb25zdCBnYXNUYW5rU2lnID0gc2lnbldpdGgoZ2FzVGFuaywgdW5zaWduZWQudjFNZXNzYWdlQnl0ZXMhKTtcbiAgICBidWlsZGVyLmFkZFNpZ25hdHVyZSh7IHB1YjogZ2FzVGFuay5wdWIgfSwgQnVmZmVyLmZyb20oZ2FzVGFua1NpZykpO1xuICAgIGNvbnN0IHNpZ25lZCA9IChhd2FpdCBidWlsZGVyLmJ1aWxkKCkpIGFzIFRyYW5zYWN0aW9uO1xuXG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VXaXJlVHJhbnNhY3Rpb24oc2lnbmVkLnYxVHJhbnNhY3Rpb25CeXRlcyEpO1xuICAgIHBhcnNlZC5zaWduZXJQdWJsaWNLZXlzLnNob3VsZC5kZWVwRXF1YWwoW3VzZXIucHViLCBnYXNUYW5rLnB1Yl0pO1xuICAgIHZlcmlmeVYxU2lnbmF0dXJlcyhwYXJzZWQubWVzc2FnZUJ5dGVzLCBwYXJzZWQuc2lnbmF0dXJlcywgcGFyc2VkLnNpZ25lclB1YmxpY0tleXMpO1xuICB9KTtcbn0pO1xuIl19
|