UNPKG

@coolwallet/sol

Version:
291 lines (290 loc) 31.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addComputeBudget = addComputeBudget; exports.createAccountWithSeed = createAccountWithSeed; exports.createAssociateTokenAccount = createAssociateTokenAccount; exports.delegate = delegate; exports.hasSpecificInstruction = hasSpecificInstruction; exports.initialize = initialize; exports.isSpecificInstruction = isSpecificInstruction; exports.transferCoin = transferCoin; exports.transferSplToken = transferSplToken; exports.undelegate = undelegate; exports.withdraw = withdraw; var _params = require("../config/params"); var _programLayout = require("./programLayout"); var _commonLayout = require("./commonLayout"); var _stringUtil = require("./stringUtil"); var _types = require("../config/types"); function addComputeBudget(params) { var computeUnitInstructions = []; if (params.computeUnitPrice) { computeUnitInstructions.push({ accounts: [], programId: _params.COMPUTE_BUDGET_PROGRAM_ID, data: (0, _stringUtil.computeBudgetEncode)(_types.ComputeBudgetInstruction.SetComputeUnitPrice, params.computeUnitPrice) }); } if (params.computeUnitLimit) { computeUnitInstructions.push({ accounts: [], programId: _params.COMPUTE_BUDGET_PROGRAM_ID, data: (0, _stringUtil.computeBudgetEncode)(_types.ComputeBudgetInstruction.SetComputeUnitLimit, params.computeUnitLimit) }); } return computeUnitInstructions; } function createAssociateTokenAccount(params) { var signer = params.signer, associateAccount = params.associateAccount, owner = params.owner, token = params.token, programId = params.programId; return { accounts: [{ pubkey: signer, isSigner: true, isWritable: true }, { pubkey: associateAccount, isSigner: false, isWritable: true }, { pubkey: owner, isSigner: false, isWritable: false }, { pubkey: token, isSigner: false, isWritable: false }, { pubkey: _params.SYSTEM_PROGRAM_ID, isSigner: false, isWritable: false }, { pubkey: programId, isSigner: false, isWritable: false } // { pubkey: params.SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }, ], programId: _params.ASSOCIATED_TOKEN_PROGRAM_ID, data: Buffer.alloc(0) }; } function createAccountWithSeed(params) { var fromPubkey = params.fromPubkey, basePubkey = params.basePubkey, seed = params.seed, space = params.space, lamports = params.lamports, programId = params.programId, newAccountPubkey = params.newAccountPubkey; var data = (0, _commonLayout.encodeData)(_programLayout.SystemProgramLayout.createWithSeed, { base: Buffer.from((0, _stringUtil.formHex)(basePubkey), 'hex'), seed: seed, lamports: lamports, space: space, programId: Buffer.from((0, _stringUtil.formHex)(programId), 'hex') }); var keys = [{ pubkey: fromPubkey, isSigner: true, isWritable: true }, { pubkey: newAccountPubkey, isSigner: false, isWritable: true }]; return { accounts: keys, programId: _params.SYSTEM_PROGRAM_ID, data: data }; } function initialize(params) { var _params$unixTimestamp, _params$epoch; var staker = params.staker, withdrawer = params.withdrawer, stakePubkey = params.stakePubkey; var data = (0, _commonLayout.encodeData)(_programLayout.StakeProgramLayout.Initialize, { authorized: { staker: Buffer.from((0, _stringUtil.formHex)(staker), 'hex'), withdrawer: Buffer.from((0, _stringUtil.formHex)(withdrawer), 'hex') }, lockup: { unixTimestamp: (_params$unixTimestamp = params.unixTimestamp) !== null && _params$unixTimestamp !== void 0 ? _params$unixTimestamp : 0, epoch: (_params$epoch = params.epoch) !== null && _params$epoch !== void 0 ? _params$epoch : 0, custodian: Buffer.alloc(32) } }); return { accounts: [{ pubkey: stakePubkey, isSigner: false, isWritable: true }, { pubkey: _params.SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false }], programId: _params.STAKE_PROGRAM_ID, data: data }; } function delegate(params) { var stakePubkey = params.stakePubkey, authorizedPubkey = params.authorizedPubkey, votePubkey = params.votePubkey; var data = (0, _commonLayout.encodeData)(_programLayout.StakeProgramLayout.Delegate); return { accounts: [{ pubkey: stakePubkey, isSigner: false, isWritable: true }, { pubkey: votePubkey, isSigner: false, isWritable: false }, { pubkey: _params.SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false }, { pubkey: _params.SYSVAR_STAKE_HISTORY_PUBKEY, isSigner: false, isWritable: false }, { pubkey: _params.STAKE_CONFIG_ID, isSigner: false, isWritable: false }, { pubkey: authorizedPubkey, isSigner: true, isWritable: false }], programId: _params.STAKE_PROGRAM_ID, data: data }; } function undelegate(params) { var stakePubkey = params.stakePubkey, authorizedPubkey = params.authorizedPubkey; var data = (0, _commonLayout.encodeData)(_programLayout.StakeProgramLayout.Deactivate); return { accounts: [{ pubkey: stakePubkey, isSigner: false, isWritable: true }, { pubkey: _params.SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false }, { pubkey: authorizedPubkey, isSigner: true, isWritable: false }], programId: _params.STAKE_PROGRAM_ID, data: data }; } function withdraw(params) { var stakePubkey = params.stakePubkey, withdrawToPubKey = params.withdrawToPubKey, authorizedPubkey = params.authorizedPubkey, lamports = params.lamports; var data = (0, _commonLayout.encodeData)(_programLayout.StakeProgramLayout.Withdraw, { lamports: +lamports }); return { accounts: [{ pubkey: stakePubkey, isSigner: false, isWritable: true }, { pubkey: withdrawToPubKey, isSigner: false, isWritable: true }, { pubkey: _params.SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false }, { pubkey: _params.SYSVAR_STAKE_HISTORY_PUBKEY, isSigner: false, isWritable: false }, { pubkey: authorizedPubkey, isSigner: true, isWritable: false }], programId: _params.STAKE_PROGRAM_ID, data: data }; } function transferCoin(params) { var fromPubkey = params.fromPubkey, toPubkey = params.toPubkey, lamports = params.lamports; var data = (0, _commonLayout.encodeData)(_programLayout.SystemProgramLayout.Transfer, { lamports: lamports }); return { accounts: [{ pubkey: fromPubkey, isSigner: true, isWritable: true }, { pubkey: toPubkey, isSigner: false, isWritable: true }], programId: _params.SYSTEM_PROGRAM_ID, data: data }; } function transferSplToken(params) { var signer = params.signer, fromTokenAccount = params.fromTokenAccount, toTokenAccount = params.toTokenAccount, amount = params.amount, tokenInfo = params.tokenInfo, programId = params.programId; var data = (0, _stringUtil.splDataEncode)(amount, tokenInfo.decimals); return { accounts: [{ pubkey: fromTokenAccount, isSigner: false, isWritable: true }, { pubkey: tokenInfo.address, isSigner: false, isWritable: false }, { pubkey: toTokenAccount, isSigner: false, isWritable: true }, { pubkey: signer, isSigner: true, isWritable: false }], programId: programId, data: data }; } function isSpecificInstruction(accountKeys, instruction, filterProgramId, firstData) { var programIdIndex = instruction.programIdIndex, data = instruction.data; var programId = accountKeys === null || accountKeys === void 0 ? void 0 : accountKeys[programIdIndex]; return programId === filterProgramId.toString('hex') && (data === null || data === void 0 ? void 0 : data[0]) === firstData; } function hasSpecificInstruction(accountKeys, instructions, filterProgramId, firstData) { return instructions.filter(function (instruction) { return isSpecificInstruction(accountKeys, instruction, filterProgramId, firstData); }).length > 0; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGFyYW1zIiwicmVxdWlyZSIsIl9wcm9ncmFtTGF5b3V0IiwiX2NvbW1vbkxheW91dCIsIl9zdHJpbmdVdGlsIiwiX3R5cGVzIiwiYWRkQ29tcHV0ZUJ1ZGdldCIsInBhcmFtcyIsImNvbXB1dGVVbml0SW5zdHJ1Y3Rpb25zIiwiY29tcHV0ZVVuaXRQcmljZSIsInB1c2giLCJhY2NvdW50cyIsInByb2dyYW1JZCIsIkNPTVBVVEVfQlVER0VUX1BST0dSQU1fSUQiLCJkYXRhIiwiY29tcHV0ZUJ1ZGdldEVuY29kZSIsIkNvbXB1dGVCdWRnZXRJbnN0cnVjdGlvbiIsIlNldENvbXB1dGVVbml0UHJpY2UiLCJjb21wdXRlVW5pdExpbWl0IiwiU2V0Q29tcHV0ZVVuaXRMaW1pdCIsImNyZWF0ZUFzc29jaWF0ZVRva2VuQWNjb3VudCIsInNpZ25lciIsImFzc29jaWF0ZUFjY291bnQiLCJvd25lciIsInRva2VuIiwicHVia2V5IiwiaXNTaWduZXIiLCJpc1dyaXRhYmxlIiwiU1lTVEVNX1BST0dSQU1fSUQiLCJBU1NPQ0lBVEVEX1RPS0VOX1BST0dSQU1fSUQiLCJCdWZmZXIiLCJhbGxvYyIsImNyZWF0ZUFjY291bnRXaXRoU2VlZCIsImZyb21QdWJrZXkiLCJiYXNlUHVia2V5Iiwic2VlZCIsInNwYWNlIiwibGFtcG9ydHMiLCJuZXdBY2NvdW50UHVia2V5IiwiZW5jb2RlRGF0YSIsIlN5c3RlbVByb2dyYW1MYXlvdXQiLCJjcmVhdGVXaXRoU2VlZCIsImJhc2UiLCJmcm9tIiwiZm9ybUhleCIsImtleXMiLCJpbml0aWFsaXplIiwiX3BhcmFtcyR1bml4VGltZXN0YW1wIiwiX3BhcmFtcyRlcG9jaCIsInN0YWtlciIsIndpdGhkcmF3ZXIiLCJzdGFrZVB1YmtleSIsIlN0YWtlUHJvZ3JhbUxheW91dCIsIkluaXRpYWxpemUiLCJhdXRob3JpemVkIiwibG9ja3VwIiwidW5peFRpbWVzdGFtcCIsImVwb2NoIiwiY3VzdG9kaWFuIiwiU1lTVkFSX1JFTlRfUFVCS0VZIiwiU1RBS0VfUFJPR1JBTV9JRCIsImRlbGVnYXRlIiwiYXV0aG9yaXplZFB1YmtleSIsInZvdGVQdWJrZXkiLCJEZWxlZ2F0ZSIsIlNZU1ZBUl9DTE9DS19QVUJLRVkiLCJTWVNWQVJfU1RBS0VfSElTVE9SWV9QVUJLRVkiLCJTVEFLRV9DT05GSUdfSUQiLCJ1bmRlbGVnYXRlIiwiRGVhY3RpdmF0ZSIsIndpdGhkcmF3Iiwid2l0aGRyYXdUb1B1YktleSIsIldpdGhkcmF3IiwidHJhbnNmZXJDb2luIiwidG9QdWJrZXkiLCJUcmFuc2ZlciIsInRyYW5zZmVyU3BsVG9rZW4iLCJmcm9tVG9rZW5BY2NvdW50IiwidG9Ub2tlbkFjY291bnQiLCJhbW91bnQiLCJ0b2tlbkluZm8iLCJzcGxEYXRhRW5jb2RlIiwiZGVjaW1hbHMiLCJhZGRyZXNzIiwiaXNTcGVjaWZpY0luc3RydWN0aW9uIiwiYWNjb3VudEtleXMiLCJpbnN0cnVjdGlvbiIsImZpbHRlclByb2dyYW1JZCIsImZpcnN0RGF0YSIsInByb2dyYW1JZEluZGV4IiwidG9TdHJpbmciLCJoYXNTcGVjaWZpY0luc3RydWN0aW9uIiwiaW5zdHJ1Y3Rpb25zIiwiZmlsdGVyIiwibGVuZ3RoIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2luc3RydWN0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTVEFLRV9QUk9HUkFNX0lELFxuICBTWVNURU1fUFJPR1JBTV9JRCxcbiAgU1lTVkFSX1JFTlRfUFVCS0VZLFxuICBTWVNWQVJfQ0xPQ0tfUFVCS0VZLFxuICBTVEFLRV9DT05GSUdfSUQsXG4gIFNZU1ZBUl9TVEFLRV9ISVNUT1JZX1BVQktFWSxcbiAgQ09NUFVURV9CVURHRVRfUFJPR1JBTV9JRCxcbiAgQVNTT0NJQVRFRF9UT0tFTl9QUk9HUkFNX0lELFxufSBmcm9tICcuLi9jb25maWcvcGFyYW1zJztcbmltcG9ydCB7IFN0YWtlUHJvZ3JhbUxheW91dCwgU3lzdGVtUHJvZ3JhbUxheW91dCB9IGZyb20gJy4vcHJvZ3JhbUxheW91dCc7XG5pbXBvcnQgeyBlbmNvZGVEYXRhIH0gZnJvbSAnLi9jb21tb25MYXlvdXQnO1xuaW1wb3J0IHsgZm9ybUhleCwgY29tcHV0ZUJ1ZGdldEVuY29kZSwgc3BsRGF0YUVuY29kZSB9IGZyb20gJy4vc3RyaW5nVXRpbCc7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuLi9jb25maWcvdHlwZXMnO1xuaW1wb3J0IHsgQ29tcHV0ZUJ1ZGdldEluc3RydWN0aW9uLCBTZXJpYWxpemVkSW5zdHJ1Y3Rpb24gfSBmcm9tICcuLi9jb25maWcvdHlwZXMnO1xuXG5mdW5jdGlvbiBhZGRDb21wdXRlQnVkZ2V0KHBhcmFtczoge1xuICBjb21wdXRlVW5pdFByaWNlPzogc3RyaW5nO1xuICBjb21wdXRlVW5pdExpbWl0Pzogc3RyaW5nO1xufSk6IHR5cGVzLlRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb25bXSB7XG4gIGNvbnN0IGNvbXB1dGVVbml0SW5zdHJ1Y3Rpb25zID0gW107XG4gIGlmIChwYXJhbXMuY29tcHV0ZVVuaXRQcmljZSkge1xuICAgIGNvbXB1dGVVbml0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgYWNjb3VudHM6IFtdLFxuICAgICAgcHJvZ3JhbUlkOiBDT01QVVRFX0JVREdFVF9QUk9HUkFNX0lELFxuICAgICAgZGF0YTogY29tcHV0ZUJ1ZGdldEVuY29kZShDb21wdXRlQnVkZ2V0SW5zdHJ1Y3Rpb24uU2V0Q29tcHV0ZVVuaXRQcmljZSwgcGFyYW1zLmNvbXB1dGVVbml0UHJpY2UpLFxuICAgIH0pO1xuICB9XG4gIGlmIChwYXJhbXMuY29tcHV0ZVVuaXRMaW1pdCkge1xuICAgIGNvbXB1dGVVbml0SW5zdHJ1Y3Rpb25zLnB1c2goe1xuICAgICAgYWNjb3VudHM6IFtdLFxuICAgICAgcHJvZ3JhbUlkOiBDT01QVVRFX0JVREdFVF9QUk9HUkFNX0lELFxuICAgICAgZGF0YTogY29tcHV0ZUJ1ZGdldEVuY29kZShDb21wdXRlQnVkZ2V0SW5zdHJ1Y3Rpb24uU2V0Q29tcHV0ZVVuaXRMaW1pdCwgcGFyYW1zLmNvbXB1dGVVbml0TGltaXQpLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBjb21wdXRlVW5pdEluc3RydWN0aW9ucztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQXNzb2NpYXRlVG9rZW5BY2NvdW50KHBhcmFtczoge1xuICBzaWduZXI6IHR5cGVzLkFkZHJlc3M7XG4gIGFzc29jaWF0ZUFjY291bnQ6IHR5cGVzLkFkZHJlc3M7XG4gIG93bmVyOiB0eXBlcy5BZGRyZXNzO1xuICB0b2tlbjogdHlwZXMuQWRkcmVzcztcbiAgcHJvZ3JhbUlkOiB0eXBlcy5BZGRyZXNzO1xufSk6IHR5cGVzLlRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24ge1xuICBjb25zdCB7IHNpZ25lciwgYXNzb2NpYXRlQWNjb3VudCwgb3duZXIsIHRva2VuLCBwcm9ncmFtSWQgfSA9IHBhcmFtcztcbiAgcmV0dXJuIHtcbiAgICBhY2NvdW50czogW1xuICAgICAgeyBwdWJrZXk6IHNpZ25lciwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICAgIHsgcHVia2V5OiBhc3NvY2lhdGVBY2NvdW50LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICAgIHsgcHVia2V5OiBvd25lciwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgICAgeyBwdWJrZXk6IHRva2VuLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgICB7IHB1YmtleTogU1lTVEVNX1BST0dSQU1fSUQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICAgIHsgcHVia2V5OiBwcm9ncmFtSWQsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICAgIC8vIHsgcHVia2V5OiBwYXJhbXMuU1lTVkFSX1JFTlRfUFVCS0VZLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgXSxcbiAgICBwcm9ncmFtSWQ6IEFTU09DSUFURURfVE9LRU5fUFJPR1JBTV9JRCxcbiAgICBkYXRhOiBCdWZmZXIuYWxsb2MoMCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFjY291bnRXaXRoU2VlZChwYXJhbXM6IHtcbiAgZnJvbVB1YmtleTogdHlwZXMuQWRkcmVzcztcbiAgbmV3QWNjb3VudFB1YmtleTogdHlwZXMuQWRkcmVzcztcbiAgYmFzZVB1YmtleTogdHlwZXMuQWRkcmVzcztcbiAgc2VlZDogc3RyaW5nO1xuICBsYW1wb3J0czogc3RyaW5nIHwgbnVtYmVyO1xuICBzcGFjZTogbnVtYmVyO1xuICBwcm9ncmFtSWQ6IHR5cGVzLkFkZHJlc3M7XG59KTogdHlwZXMuVHJhbnNhY3Rpb25JbnN0cnVjdGlvbiB7XG4gIGNvbnN0IHsgZnJvbVB1YmtleSwgYmFzZVB1YmtleSwgc2VlZCwgc3BhY2UsIGxhbXBvcnRzLCBwcm9ncmFtSWQsIG5ld0FjY291bnRQdWJrZXkgfSA9IHBhcmFtcztcblxuICBjb25zdCBkYXRhID0gZW5jb2RlRGF0YShTeXN0ZW1Qcm9ncmFtTGF5b3V0LmNyZWF0ZVdpdGhTZWVkLCB7XG4gICAgYmFzZTogQnVmZmVyLmZyb20oZm9ybUhleChiYXNlUHVia2V5KSwgJ2hleCcpLFxuICAgIHNlZWQsXG4gICAgbGFtcG9ydHMsXG4gICAgc3BhY2UsXG4gICAgcHJvZ3JhbUlkOiBCdWZmZXIuZnJvbShmb3JtSGV4KHByb2dyYW1JZCksICdoZXgnKSxcbiAgfSk7XG5cbiAgY29uc3Qga2V5cyA9IFtcbiAgICB7IHB1YmtleTogZnJvbVB1YmtleSwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICB7IHB1YmtleTogbmV3QWNjb3VudFB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gIF07XG5cbiAgcmV0dXJuIHtcbiAgICBhY2NvdW50czoga2V5cyxcbiAgICBwcm9ncmFtSWQ6IFNZU1RFTV9QUk9HUkFNX0lELFxuICAgIGRhdGEsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemUocGFyYW1zOiB7XG4gIHN0YWtlUHVia2V5OiB0eXBlcy5BZGRyZXNzO1xuICBzdGFrZXI6IHR5cGVzLkFkZHJlc3M7XG4gIHdpdGhkcmF3ZXI6IHR5cGVzLkFkZHJlc3M7XG4gIHVuaXhUaW1lc3RhbXA/OiBudW1iZXI7XG4gIGVwb2NoPzogbnVtYmVyO1xufSk6IHR5cGVzLlRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24ge1xuICBjb25zdCB7IHN0YWtlciwgd2l0aGRyYXdlciwgc3Rha2VQdWJrZXkgfSA9IHBhcmFtcztcbiAgY29uc3QgZGF0YSA9IGVuY29kZURhdGEoU3Rha2VQcm9ncmFtTGF5b3V0LkluaXRpYWxpemUsIHtcbiAgICBhdXRob3JpemVkOiB7XG4gICAgICBzdGFrZXI6IEJ1ZmZlci5mcm9tKGZvcm1IZXgoc3Rha2VyKSwgJ2hleCcpLFxuICAgICAgd2l0aGRyYXdlcjogQnVmZmVyLmZyb20oZm9ybUhleCh3aXRoZHJhd2VyKSwgJ2hleCcpLFxuICAgIH0sXG4gICAgbG9ja3VwOiB7XG4gICAgICB1bml4VGltZXN0YW1wOiBwYXJhbXMudW5peFRpbWVzdGFtcCA/PyAwLFxuICAgICAgZXBvY2g6IHBhcmFtcy5lcG9jaCA/PyAwLFxuICAgICAgY3VzdG9kaWFuOiBCdWZmZXIuYWxsb2MoMzIpLFxuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgYWNjb3VudHM6IFtcbiAgICAgIHsgcHVia2V5OiBzdGFrZVB1YmtleSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICB7IHB1YmtleTogU1lTVkFSX1JFTlRfUFVCS0VZLCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgXSxcbiAgICBwcm9ncmFtSWQ6IFNUQUtFX1BST0dSQU1fSUQsXG4gICAgZGF0YSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVsZWdhdGUocGFyYW1zOiB7XG4gIHN0YWtlUHVia2V5OiB0eXBlcy5BZGRyZXNzO1xuICBhdXRob3JpemVkUHVia2V5OiB0eXBlcy5BZGRyZXNzO1xuICB2b3RlUHVia2V5OiB0eXBlcy5BZGRyZXNzO1xufSk6IHR5cGVzLlRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24ge1xuICBjb25zdCB7IHN0YWtlUHVia2V5LCBhdXRob3JpemVkUHVia2V5LCB2b3RlUHVia2V5IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGRhdGEgPSBlbmNvZGVEYXRhKFN0YWtlUHJvZ3JhbUxheW91dC5EZWxlZ2F0ZSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhY2NvdW50czogW1xuICAgICAgeyBwdWJrZXk6IHN0YWtlUHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICAgIHsgcHVia2V5OiB2b3RlUHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgICB7IHB1YmtleTogU1lTVkFSX0NMT0NLX1BVQktFWSwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgICAge1xuICAgICAgICBwdWJrZXk6IFNZU1ZBUl9TVEFLRV9ISVNUT1JZX1BVQktFWSxcbiAgICAgICAgaXNTaWduZXI6IGZhbHNlLFxuICAgICAgICBpc1dyaXRhYmxlOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB7IHB1YmtleTogU1RBS0VfQ09ORklHX0lELCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgICB7IHB1YmtleTogYXV0aG9yaXplZFB1YmtleSwgaXNTaWduZXI6IHRydWUsIGlzV3JpdGFibGU6IGZhbHNlIH0sXG4gICAgXSxcbiAgICBwcm9ncmFtSWQ6IFNUQUtFX1BST0dSQU1fSUQsXG4gICAgZGF0YSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW5kZWxlZ2F0ZShwYXJhbXM6IHtcbiAgc3Rha2VQdWJrZXk6IHR5cGVzLkFkZHJlc3M7XG4gIGF1dGhvcml6ZWRQdWJrZXk6IHR5cGVzLkFkZHJlc3M7XG59KTogdHlwZXMuVHJhbnNhY3Rpb25JbnN0cnVjdGlvbiB7XG4gIGNvbnN0IHsgc3Rha2VQdWJrZXksIGF1dGhvcml6ZWRQdWJrZXkgfSA9IHBhcmFtcztcbiAgY29uc3QgZGF0YSA9IGVuY29kZURhdGEoU3Rha2VQcm9ncmFtTGF5b3V0LkRlYWN0aXZhdGUpO1xuICByZXR1cm4ge1xuICAgIGFjY291bnRzOiBbXG4gICAgICB7IHB1YmtleTogc3Rha2VQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IFNZU1ZBUl9DTE9DS19QVUJLRVksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICAgIHsgcHVia2V5OiBhdXRob3JpemVkUHVia2V5LCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICBdLFxuICAgIHByb2dyYW1JZDogU1RBS0VfUFJPR1JBTV9JRCxcbiAgICBkYXRhLFxuICB9O1xufVxuXG5mdW5jdGlvbiB3aXRoZHJhdyhwYXJhbXM6IHtcbiAgc3Rha2VQdWJrZXk6IHR5cGVzLkFkZHJlc3M7XG4gIHdpdGhkcmF3VG9QdWJLZXk6IHR5cGVzLkFkZHJlc3M7XG4gIGF1dGhvcml6ZWRQdWJrZXk6IHR5cGVzLkFkZHJlc3M7XG4gIGxhbXBvcnRzOiBzdHJpbmcgfCBudW1iZXI7XG59KTogdHlwZXMuVHJhbnNhY3Rpb25JbnN0cnVjdGlvbiB7XG4gIGNvbnN0IHsgc3Rha2VQdWJrZXksIHdpdGhkcmF3VG9QdWJLZXksIGF1dGhvcml6ZWRQdWJrZXksIGxhbXBvcnRzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGRhdGEgPSBlbmNvZGVEYXRhKFN0YWtlUHJvZ3JhbUxheW91dC5XaXRoZHJhdywge1xuICAgIGxhbXBvcnRzOiArbGFtcG9ydHMsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGFjY291bnRzOiBbXG4gICAgICB7IHB1YmtleTogc3Rha2VQdWJrZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IHdpdGhkcmF3VG9QdWJLZXksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IFNZU1ZBUl9DTE9DS19QVUJLRVksIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICAgIHtcbiAgICAgICAgcHVia2V5OiBTWVNWQVJfU1RBS0VfSElTVE9SWV9QVUJLRVksXG4gICAgICAgIGlzU2lnbmVyOiBmYWxzZSxcbiAgICAgICAgaXNXcml0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgeyBwdWJrZXk6IGF1dGhvcml6ZWRQdWJrZXksIGlzU2lnbmVyOiB0cnVlLCBpc1dyaXRhYmxlOiBmYWxzZSB9LFxuICAgIF0sXG4gICAgcHJvZ3JhbUlkOiBTVEFLRV9QUk9HUkFNX0lELFxuICAgIGRhdGEsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRyYW5zZmVyQ29pbihwYXJhbXM6IHtcbiAgZnJvbVB1YmtleTogdHlwZXMuQWRkcmVzcztcbiAgdG9QdWJrZXk6IHR5cGVzLkFkZHJlc3M7XG4gIGxhbXBvcnRzOiBudW1iZXIgfCBzdHJpbmc7XG59KTogdHlwZXMuVHJhbnNhY3Rpb25JbnN0cnVjdGlvbiB7XG4gIGNvbnN0IHsgZnJvbVB1YmtleSwgdG9QdWJrZXksIGxhbXBvcnRzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGRhdGEgPSBlbmNvZGVEYXRhKFN5c3RlbVByb2dyYW1MYXlvdXQuVHJhbnNmZXIsIHtcbiAgICBsYW1wb3J0cyxcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgYWNjb3VudHM6IFtcbiAgICAgIHsgcHVia2V5OiBmcm9tUHVia2V5LCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogdHJ1ZSB9LFxuICAgICAgeyBwdWJrZXk6IHRvUHVia2V5LCBpc1NpZ25lcjogZmFsc2UsIGlzV3JpdGFibGU6IHRydWUgfSxcbiAgICBdLFxuICAgIHByb2dyYW1JZDogU1lTVEVNX1BST0dSQU1fSUQsXG4gICAgZGF0YSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmZXJTcGxUb2tlbihwYXJhbXM6IHtcbiAgc2lnbmVyOiB0eXBlcy5BZGRyZXNzO1xuICBmcm9tVG9rZW5BY2NvdW50OiB0eXBlcy5BZGRyZXNzO1xuICB0b1Rva2VuQWNjb3VudDogdHlwZXMuQWRkcmVzcztcbiAgYW1vdW50OiBudW1iZXIgfCBzdHJpbmc7XG4gIHByb2dyYW1JZDogdHlwZXMuVG9rZW5Qcm9ncmFtSWQ7XG4gIHRva2VuSW5mbzogdHlwZXMuVG9rZW5JbmZvO1xufSk6IHR5cGVzLlRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24ge1xuICBjb25zdCB7IHNpZ25lciwgZnJvbVRva2VuQWNjb3VudCwgdG9Ub2tlbkFjY291bnQsIGFtb3VudCwgdG9rZW5JbmZvLCBwcm9ncmFtSWQgfSA9IHBhcmFtcztcbiAgY29uc3QgZGF0YSA9IHNwbERhdGFFbmNvZGUoYW1vdW50LCB0b2tlbkluZm8uZGVjaW1hbHMpO1xuICByZXR1cm4ge1xuICAgIGFjY291bnRzOiBbXG4gICAgICB7IHB1YmtleTogZnJvbVRva2VuQWNjb3VudCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICB7IHB1YmtleTogdG9rZW5JbmZvLmFkZHJlc3MsIGlzU2lnbmVyOiBmYWxzZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICAgIHsgcHVia2V5OiB0b1Rva2VuQWNjb3VudCwgaXNTaWduZXI6IGZhbHNlLCBpc1dyaXRhYmxlOiB0cnVlIH0sXG4gICAgICB7IHB1YmtleTogc2lnbmVyLCBpc1NpZ25lcjogdHJ1ZSwgaXNXcml0YWJsZTogZmFsc2UgfSxcbiAgICBdLFxuICAgIHByb2dyYW1JZCxcbiAgICBkYXRhLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1NwZWNpZmljSW5zdHJ1Y3Rpb24oXG4gIGFjY291bnRLZXlzOiBzdHJpbmdbXSxcbiAgaW5zdHJ1Y3Rpb246IFNlcmlhbGl6ZWRJbnN0cnVjdGlvbixcbiAgZmlsdGVyUHJvZ3JhbUlkOiBCdWZmZXIsXG4gIGZpcnN0RGF0YTogbnVtYmVyXG4pOiBib29sZWFuIHtcbiAgY29uc3QgeyBwcm9ncmFtSWRJbmRleCwgZGF0YSB9ID0gaW5zdHJ1Y3Rpb247XG4gIGNvbnN0IHByb2dyYW1JZCA9IGFjY291bnRLZXlzPy5bcHJvZ3JhbUlkSW5kZXhdO1xuICByZXR1cm4gcHJvZ3JhbUlkID09PSBmaWx0ZXJQcm9ncmFtSWQudG9TdHJpbmcoJ2hleCcpICYmIGRhdGE/LlswXSA9PT0gZmlyc3REYXRhO1xufVxuXG5mdW5jdGlvbiBoYXNTcGVjaWZpY0luc3RydWN0aW9uKFxuICBhY2NvdW50S2V5czogc3RyaW5nW10sXG4gIGluc3RydWN0aW9uczogU2VyaWFsaXplZEluc3RydWN0aW9uW10sXG4gIGZpbHRlclByb2dyYW1JZDogQnVmZmVyLFxuICBmaXJzdERhdGE6IG51bWJlclxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgaW5zdHJ1Y3Rpb25zLmZpbHRlcigoaW5zdHJ1Y3Rpb24pID0+IGlzU3BlY2lmaWNJbnN0cnVjdGlvbihhY2NvdW50S2V5cywgaW5zdHJ1Y3Rpb24sIGZpbHRlclByb2dyYW1JZCwgZmlyc3REYXRhKSlcbiAgICAgIC5sZW5ndGggPiAwXG4gICk7XG59XG5cbmV4cG9ydCB7XG4gIGNyZWF0ZUFjY291bnRXaXRoU2VlZCxcbiAgaW5pdGlhbGl6ZSxcbiAgZGVsZWdhdGUsXG4gIHVuZGVsZWdhdGUsXG4gIHdpdGhkcmF3LFxuICBhZGRDb21wdXRlQnVkZ2V0LFxuICB0cmFuc2ZlckNvaW4sXG4gIHRyYW5zZmVyU3BsVG9rZW4sXG4gIGNyZWF0ZUFzc29jaWF0ZVRva2VuQWNjb3VudCxcbiAgaXNTcGVjaWZpY0luc3RydWN0aW9uLFxuICBoYXNTcGVjaWZpY0luc3RydWN0aW9uLFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FB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