UNPKG

@coolwallet/sol

Version:
560 lines (559 loc) 75.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "ASSOCIATED_TOKEN_PROGRAM_ID", { enumerable: true, get: function get() { return params.ASSOCIATED_TOKEN_PROGRAM_ID; } }); Object.defineProperty(exports, "LAMPORTS_PER_SOL", { enumerable: true, get: function get() { return params.LAMPORTS_PER_SOL; } }); Object.defineProperty(exports, "STAKE_CONFIG_ID", { enumerable: true, get: function get() { return params.STAKE_CONFIG_ID; } }); Object.defineProperty(exports, "STAKE_PROGRAM_ID", { enumerable: true, get: function get() { return params.STAKE_PROGRAM_ID; } }); Object.defineProperty(exports, "SYSTEM_PROGRAM_ID", { enumerable: true, get: function get() { return params.SYSTEM_PROGRAM_ID; } }); Object.defineProperty(exports, "SYSVAR_CLOCK_PUBKEY", { enumerable: true, get: function get() { return params.SYSVAR_CLOCK_PUBKEY; } }); Object.defineProperty(exports, "SYSVAR_RENT_PUBKEY", { enumerable: true, get: function get() { return params.SYSVAR_RENT_PUBKEY; } }); Object.defineProperty(exports, "SYSVAR_STAKE_HISTORY_PUBKEY", { enumerable: true, get: function get() { return params.SYSVAR_STAKE_HISTORY_PUBKEY; } }); Object.defineProperty(exports, "TOKEN_2022_PROGRAM_ID", { enumerable: true, get: function get() { return params.TOKEN_2022_PROGRAM_ID; } }); Object.defineProperty(exports, "TOKEN_PROGRAM_ID", { enumerable: true, get: function get() { return params.TOKEN_PROGRAM_ID; } }); exports.types = exports["default"] = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _core = require("@coolwallet/core"); var _error = require("@coolwallet/core/lib/error"); var _config = require("@coolwallet/core/lib/config"); var _bs = _interopRequireDefault(require("bs58")); var _bn = _interopRequireDefault(require("bn.js")); var _jsSha = require("js-sha256"); var types = _interopRequireWildcard(require("./config/types")); exports.types = types; var params = _interopRequireWildcard(require("./config/params")); var stringUtil = _interopRequireWildcard(require("./utils/stringUtil")); var scriptUtil = _interopRequireWildcard(require("./utils/scriptUtil")); var sign = _interopRequireWildcard(require("./sign")); var _tokenInfos = require("./config/tokenInfos"); var _rawTransaction = require("./utils/rawTransaction"); var _account = require("./utils/account"); var _ed = require("./utils/ed25519"); var _Transaction = require("./utils/Transaction"); var _versionedTransaction = require("./utils/versionedTransaction"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var Solana = /*#__PURE__*/function (_COIN$EDDSACoin) { (0, _inherits2["default"])(Solana, _COIN$EDDSACoin); var _super = _createSuper(Solana); function Solana() { (0, _classCallCheck2["default"])(this, Solana); return _super.call(this, params.COIN_TYPE); } (0, _createClass2["default"])(Solana, [{ key: "isValidPublicKey", value: function isValidPublicKey(publicKey) { var buffer; if (typeof publicKey === 'string') { try { buffer = _bs["default"].decode(publicKey); } catch (e) { return false; } } else { buffer = publicKey; } var publicKeyBytes = new _bn["default"](buffer, 16).toArray(undefined, 32); return (0, _ed.is_on_curve)(publicKeyBytes) === 1; } }, { key: "getAddress", value: function () { var _getAddress = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(transport, appPrivateKey, appId, addressIndex) { var path, publicKey; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: path = _core.utils.getFullPath({ pathType: _config.PathType.SLIP0010, pathString: "44'/501'/".concat(addressIndex, "'/0'") }); _context.next = 3; return _core.coin.getPublicKeyByPath(transport, appId, appPrivateKey, path); case 3: publicKey = _context.sent; console.debug('Public Key:', publicKey); if (publicKey) { _context.next = 7; break; } throw new _core.error.SDKError(this.getAddress.name, 'public key is undefined'); case 7: return _context.abrupt("return", stringUtil.pubKeyToAddress(publicKey)); case 8: case "end": return _context.stop(); } } }, _callee, this); })); function getAddress(_x, _x2, _x3, _x4) { return _getAddress.apply(this, arguments); } return getAddress; }() }, { key: "createWithSeed", value: function () { var _createWithSeed = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(fromPublicKey, seed, programId) { var buffer, hash; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: buffer = Buffer.concat([stringUtil.toBase58Buffer(fromPublicKey), Buffer.from(seed), stringUtil.toBase58Buffer(programId)]); hash = _jsSha.sha256.create(); hash.update(buffer); return _context2.abrupt("return", _bs["default"].encode(Buffer.from(hash.hex(), 'hex'))); case 4: case "end": return _context2.stop(); } } }, _callee2); })); function createWithSeed(_x5, _x6, _x7) { return _createWithSeed.apply(this, arguments); } return createWithSeed; }() }, { key: "findProgramAddress", value: function findProgramAddress(seeds, programId) { var nonce = 255; var address; while (nonce !== 0) { try { var seedsWithNonce = seeds.concat(Buffer.from([nonce])); address = (0, _account.createProgramAddressSync)(seedsWithNonce, programId); } catch (err) { if (err instanceof TypeError) { throw err; } nonce -= 1; continue; } return [address, nonce]; } throw new Error("Unable to find a viable program address nonce"); } }, { key: "signTransferTransaction", value: function () { var _signTransferTransaction = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3(signTxData) { var transport, appPrivateKey, appId, addressIndex, transaction, fromPubkey, script, rawTransaction, transactionInstruction, argument; return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: transport = signTxData.transport, appPrivateKey = signTxData.appPrivateKey, appId = signTxData.appId, addressIndex = signTxData.addressIndex, transaction = signTxData.transaction; _context3.next = 3; return this.getAddress(transport, appPrivateKey, appId, addressIndex); case 3: fromPubkey = _context3.sent; script = transaction.computeUnitLimit && transaction.computeUnitPrice ? params.SCRIPT.TRANSFER_WITH_COMPUTE_BUDGET.scriptWithSignature : params.SCRIPT.TRANSFER.scriptWithSignature; rawTransaction = (0, _rawTransaction.compileTransferTransaction)(_objectSpread(_objectSpread({}, signTxData.transaction), {}, { fromPubkey: fromPubkey })); transactionInstruction = new _Transaction.Transaction(rawTransaction); argument = scriptUtil.getTransferArguments(transactionInstruction, addressIndex); return _context3.abrupt("return", sign.signTransaction(signTxData, transactionInstruction, script, argument)); case 9: case "end": return _context3.stop(); } } }, _callee3, this); })); function signTransferTransaction(_x8) { return _signTransferTransaction.apply(this, arguments); } return signTransferTransaction; }() }, { key: "signTransferSplTokenTransaction", value: function () { var _signTransferSplTokenTransaction = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4(signTxData) { var _TOKEN_INFO$find; var transport, transaction, appPrivateKey, appId, addressIndex, signer, script, tokenInfo, rawTransaction, transactionInstruction, argument; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: transport = signTxData.transport, transaction = signTxData.transaction, appPrivateKey = signTxData.appPrivateKey, appId = signTxData.appId, addressIndex = signTxData.addressIndex; _context4.next = 3; return this.getAddress(transport, appPrivateKey, appId, addressIndex); case 3: signer = _context4.sent; script = transaction.computeUnitLimit && transaction.computeUnitPrice ? params.SCRIPT.SPL_TOKEN_WITH_COMPUTE_BUDGET.scriptWithSignature : params.SCRIPT.SPL_TOKEN.scriptWithSignature; // If given token address can be found in official token list, use it instead of the user given one. tokenInfo = (_TOKEN_INFO$find = _tokenInfos.TOKEN_INFO.find(function (tok) { return tok.address === transaction.tokenInfo.address; })) !== null && _TOKEN_INFO$find !== void 0 ? _TOKEN_INFO$find : transaction.tokenInfo; rawTransaction = (0, _rawTransaction.compileSplTokenTransaction)(_objectSpread(_objectSpread({}, transaction), {}, { signer: signer })); transactionInstruction = new _Transaction.Transaction(rawTransaction); argument = scriptUtil.getSplTokenTransferArguments(transactionInstruction, addressIndex, tokenInfo); return _context4.abrupt("return", sign.signTransaction(signTxData, transactionInstruction, script, argument)); case 10: case "end": return _context4.stop(); } } }, _callee4, this); })); function signTransferSplTokenTransaction(_x9) { return _signTransferSplTokenTransaction.apply(this, arguments); } return signTransferSplTokenTransaction; }() }, { key: "signCreateAndTransferSPLToken", value: function () { var _signCreateAndTransferSPLToken = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5(signTxData) { var _TOKEN_INFO$find2, _associateAccountInst; var transport, appPrivateKey, appId, addressIndex, transaction, signer, script, tokenInfo, associateAccountInstruction, transferInstructions, transactionInstruction, argument; return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: transport = signTxData.transport, appPrivateKey = signTxData.appPrivateKey, appId = signTxData.appId, addressIndex = signTxData.addressIndex, transaction = signTxData.transaction; _context5.next = 3; return this.getAddress(transport, appPrivateKey, appId, addressIndex); case 3: signer = _context5.sent; script = transaction.computeUnitLimit && transaction.computeUnitPrice ? params.SCRIPT.CREATE_AND_SPL_TOKEN_WITH_COMPUTE_BUDGET.scriptWithSignature : params.SCRIPT.CREATE_AND_SPL_TOKEN.scriptWithSignature; // If given token address can be found in official token list, use it instead of the user given one. tokenInfo = (_TOKEN_INFO$find2 = _tokenInfos.TOKEN_INFO.find(function (tok) { return tok.address === transaction.tokenInfo.address; })) !== null && _TOKEN_INFO$find2 !== void 0 ? _TOKEN_INFO$find2 : transaction.tokenInfo; associateAccountInstruction = (0, _rawTransaction.compileAssociateTokenAccount)(_objectSpread(_objectSpread({}, transaction), {}, { signer: signer, owner: transaction.toPubkey, associateAccount: transaction.toTokenAccount, token: tokenInfo.address })); transferInstructions = (0, _rawTransaction.compileSplTokenTransaction)(_objectSpread(_objectSpread({}, transaction), {}, { signer: signer })).instructions; (_associateAccountInst = associateAccountInstruction.instructions).push.apply(_associateAccountInst, (0, _toConsumableArray2["default"])(transferInstructions)); transactionInstruction = new _Transaction.Transaction(associateAccountInstruction); argument = scriptUtil.getCreateAndTransferSPLToken(transactionInstruction, addressIndex, tokenInfo); return _context5.abrupt("return", sign.signTransaction(signTxData, transactionInstruction, script, argument)); case 12: case "end": return _context5.stop(); } } }, _callee5, this); })); function signCreateAndTransferSPLToken(_x10) { return _signCreateAndTransferSPLToken.apply(this, arguments); } return signCreateAndTransferSPLToken; }() }, { key: "signUndelegate", value: function () { var _signUndelegate = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6(signTxData) { var transport, appPrivateKey, appId, addressIndex, feePayer, script, rawTransaction, transactionInstruction, argument; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: transport = signTxData.transport, appPrivateKey = signTxData.appPrivateKey, appId = signTxData.appId, addressIndex = signTxData.addressIndex; _context6.next = 3; return this.getAddress(transport, appPrivateKey, appId, addressIndex); case 3: feePayer = _context6.sent; script = params.SCRIPT.UNDELEGATE.scriptWithSignature; rawTransaction = (0, _rawTransaction.compileUndelegate)(_objectSpread(_objectSpread({}, signTxData.transaction), {}, { feePayer: feePayer })); transactionInstruction = new _Transaction.Transaction(rawTransaction); argument = scriptUtil.getUndelegateArguments(transactionInstruction, addressIndex); return _context6.abrupt("return", sign.signTransaction(signTxData, transactionInstruction, script, argument)); case 9: case "end": return _context6.stop(); } } }, _callee6, this); })); function signUndelegate(_x11) { return _signUndelegate.apply(this, arguments); } return signUndelegate; }() }, { key: "signDelegateAndCreateAccountWithSeed", value: function () { var _signDelegateAndCreateAccountWithSeed = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7(signTxData) { var transport, appPrivateKey, appId, addressIndex, fromPubkey, script, newAccountPubkey, transaction, rawTransaction, transactionInstruction, argument; return _regenerator["default"].wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: if (!(signTxData.transaction.seed.length > 64)) { _context7.next = 2; break; } throw new _error.SDKError(this.signDelegateAndCreateAccountWithSeed.name, 'seed length cannot be greater than 32 bytes'); case 2: transport = signTxData.transport, appPrivateKey = signTxData.appPrivateKey, appId = signTxData.appId, addressIndex = signTxData.addressIndex; _context7.next = 5; return this.getAddress(transport, appPrivateKey, appId, addressIndex); case 5: fromPubkey = _context7.sent; script = params.SCRIPT.DELEGATE_AND_CREATE_ACCOUNT_WITH_SEED.scriptWithSignature; newAccountPubkey = signTxData.transaction.newAccountPubkey; if (newAccountPubkey) { _context7.next = 12; break; } _context7.next = 11; return this.createWithSeed(fromPubkey, signTxData.transaction.seed, params.STAKE_PROGRAM_ID); case 11: newAccountPubkey = _context7.sent; case 12: transaction = _objectSpread(_objectSpread({}, signTxData.transaction), {}, { newAccountPubkey: newAccountPubkey, fromPubkey: fromPubkey, basePubkey: fromPubkey }); rawTransaction = (0, _rawTransaction.compileDelegateAndCreateAccountWithSeed)(transaction); transactionInstruction = new _Transaction.Transaction(rawTransaction); argument = scriptUtil.getDelegateAndCreateAccountArguments(transactionInstruction, addressIndex); return _context7.abrupt("return", sign.signTransaction(_objectSpread(_objectSpread({}, signTxData), {}, { transaction: transaction }), transactionInstruction, script, argument)); case 17: case "end": return _context7.stop(); } } }, _callee7, this); })); function signDelegateAndCreateAccountWithSeed(_x12) { return _signDelegateAndCreateAccountWithSeed.apply(this, arguments); } return signDelegateAndCreateAccountWithSeed; }() }, { key: "signStackingWithdrawTransaction", value: function () { var _signStackingWithdrawTransaction = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8(signTxData) { var transport, appPrivateKey, appId, addressIndex, authorizedPubkey, script, rawTransaction, transactionInstruction, argument; return _regenerator["default"].wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: transport = signTxData.transport, appPrivateKey = signTxData.appPrivateKey, appId = signTxData.appId, addressIndex = signTxData.addressIndex; _context8.next = 3; return this.getAddress(transport, appPrivateKey, appId, addressIndex); case 3: authorizedPubkey = _context8.sent; script = params.SCRIPT.STAKING_WITHDRAW.scriptWithSignature; rawTransaction = (0, _rawTransaction.compileStakingWithdraw)(_objectSpread(_objectSpread({}, signTxData.transaction), {}, { authorizedPubkey: authorizedPubkey })); transactionInstruction = new _Transaction.Transaction(rawTransaction); argument = scriptUtil.getWithdrawArguments(transactionInstruction, addressIndex); return _context8.abrupt("return", sign.signTransaction(signTxData, transactionInstruction, script, argument)); case 9: case "end": return _context8.stop(); } } }, _callee8, this); })); function signStackingWithdrawTransaction(_x13) { return _signStackingWithdrawTransaction.apply(this, arguments); } return signStackingWithdrawTransaction; }() }, { key: "signSignInMessage", value: function () { var _signSignInMessage = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9(signMsgData) { var addressIndex, script, message, argument; return _regenerator["default"].wrap(function _callee9$(_context9) { while (1) { switch (_context9.prev = _context9.next) { case 0: addressIndex = signMsgData.addressIndex; script = params.SCRIPT.SIGN_IN.scriptWithSignature; message = signMsgData.message; argument = scriptUtil.getSignInArguments(message, addressIndex); return _context9.abrupt("return", sign.signMessage(signMsgData, script, argument)); case 5: case "end": return _context9.stop(); } } }, _callee9); })); function signSignInMessage(_x14) { return _signSignInMessage.apply(this, arguments); } return signSignInMessage; }() }, { key: "signMessage", value: function () { var _signMessage = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee10(signMsgData) { var addressIndex, script, message, argument; return _regenerator["default"].wrap(function _callee10$(_context10) { while (1) { switch (_context10.prev = _context10.next) { case 0: addressIndex = signMsgData.addressIndex; script = params.SCRIPT.SIGN_MESSAGE.scriptWithSignature; message = signMsgData.message; argument = scriptUtil.getSignMessageArguments(message, addressIndex); return _context10.abrupt("return", sign.signMessage(signMsgData, script, argument)); case 5: case "end": return _context10.stop(); } } }, _callee10); })); function signMessage(_x15) { return _signMessage.apply(this, arguments); } return signMessage; }() }, { key: "signTransaction", value: function () { var _signTransaction = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee11(signTxData) { var addressIndex, script, argument; return _regenerator["default"].wrap(function _callee11$(_context11) { while (1) { switch (_context11.prev = _context11.next) { case 0: addressIndex = signTxData.addressIndex; script = params.SCRIPT.SMART_CONTRACT.scriptWithSignature; argument = scriptUtil.getSignVersionedArguments(signTxData.transaction.message, addressIndex); return _context11.abrupt("return", sign.signTransaction(signTxData, signTxData.transaction.message, script, argument)); case 4: case "end": return _context11.stop(); } } }, _callee11); })); function signTransaction(_x16) { return _signTransaction.apply(this, arguments); } return signTransaction; }() }, { key: "signAllTransactions", value: function () { var _signAllTransactions = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee12(signTxData) { var script, _scriptUtil$getScript, preActions, signatures; return _regenerator["default"].wrap(function _callee12$(_context12) { while (1) { switch (_context12.prev = _context12.next) { case 0: script = params.SCRIPT.SMART_CONTRACT.scriptWithSignature; _scriptUtil$getScript = scriptUtil.getScriptSigningPreActions(signTxData, script), preActions = _scriptUtil$getScript.preActions; _context12.next = 4; return sign.signAllTransactions(signTxData, preActions); case 4: signatures = _context12.sent; return _context12.abrupt("return", signatures.map(function (signature, index) { var _signatures = []; _signatures.push(signature); var messageSignatures = signTxData.transaction[index].signatures; for (var i = 1; i < messageSignatures.length; i++) { _signatures.push(messageSignatures[i]); } var versionedTransaction = new _versionedTransaction.VersionedTransaction(signTxData.transaction[index].message, _signatures); return Buffer.from(versionedTransaction.serialize()).toString('hex'); })); case 6: case "end": return _context12.stop(); } } }, _callee12); })); function signAllTransactions(_x17) { return _signAllTransactions.apply(this, arguments); } return signAllTransactions; }() }]); return Solana; }(_core.coin.EDDSACoin); var _default = Solana; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfZXJyb3IiLCJfY29uZmlnIiwiX2JzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9ibiIsIl9qc1NoYSIsInR5cGVzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJleHBvcnRzIiwicGFyYW1zIiwic3RyaW5nVXRpbCIsInNjcmlwdFV0aWwiLCJzaWduIiwiX3Rva2VuSW5mb3MiLCJfcmF3VHJhbnNhY3Rpb24iLCJfYWNjb3VudCIsIl9lZCIsIl9UcmFuc2FjdGlvbiIsIl92ZXJzaW9uZWRUcmFuc2FjdGlvbiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIm5vZGVJbnRlcm9wIiwiV2Vha01hcCIsImNhY2hlQmFiZWxJbnRlcm9wIiwiY2FjaGVOb2RlSW50ZXJvcCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY3JlYXRlU3VwZXIiLCJEZXJpdmVkIiwiaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJfY3JlYXRlU3VwZXJJbnRlcm5hbCIsIlN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsInJlc3VsdCIsIk5ld1RhcmdldCIsImNvbnN0cnVjdG9yIiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsInNoYW0iLCJQcm94eSIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiZSIsIlNvbGFuYSIsIl9DT0lOJEVERFNBQ29pbiIsIl9pbmhlcml0czIiLCJfc3VwZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiQ09JTl9UWVBFIiwiX2NyZWF0ZUNsYXNzMiIsInZhbHVlIiwiaXNWYWxpZFB1YmxpY0tleSIsInB1YmxpY0tleSIsImJ1ZmZlciIsImJhc2U1OCIsImRlY29kZSIsInB1YmxpY0tleUJ5dGVzIiwiQk4iLCJ0b0FycmF5IiwidW5kZWZpbmVkIiwiaXNfb25fY3VydmUiLCJfZ2V0QWRkcmVzcyIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwidHJhbnNwb3J0IiwiYXBwUHJpdmF0ZUtleSIsImFwcElkIiwiYWRkcmVzc0luZGV4IiwicGF0aCIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ1dGlscyIsImdldEZ1bGxQYXRoIiwicGF0aFR5cGUiLCJQYXRoVHlwZSIsIlNMSVAwMDEwIiwicGF0aFN0cmluZyIsImNvbmNhdCIsIkNPSU4iLCJnZXRQdWJsaWNLZXlCeVBhdGgiLCJzZW50IiwiY29uc29sZSIsImRlYnVnIiwiRVJST1IiLCJTREtFcnJvciIsImdldEFkZHJlc3MiLCJuYW1lIiwiYWJydXB0IiwicHViS2V5VG9BZGRyZXNzIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiX3g0IiwiX2NyZWF0ZVdpdGhTZWVkIiwiX2NhbGxlZTIiLCJmcm9tUHVibGljS2V5Iiwic2VlZCIsInByb2dyYW1JZCIsImhhc2giLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJCdWZmZXIiLCJ0b0Jhc2U1OEJ1ZmZlciIsImZyb20iLCJzaGEyNTYiLCJjcmVhdGUiLCJ1cGRhdGUiLCJlbmNvZGUiLCJoZXgiLCJjcmVhdGVXaXRoU2VlZCIsIl94NSIsIl94NiIsIl94NyIsImZpbmRQcm9ncmFtQWRkcmVzcyIsInNlZWRzIiwibm9uY2UiLCJhZGRyZXNzIiwic2VlZHNXaXRoTm9uY2UiLCJjcmVhdGVQcm9ncmFtQWRkcmVzc1N5bmMiLCJlcnIiLCJUeXBlRXJyb3IiLCJFcnJvciIsIl9zaWduVHJhbnNmZXJUcmFuc2FjdGlvbiIsIl9jYWxsZWUzIiwic2lnblR4RGF0YSIsInRyYW5zYWN0aW9uIiwiZnJvbVB1YmtleSIsInNjcmlwdCIsInJhd1RyYW5zYWN0aW9uIiwidHJhbnNhY3Rpb25JbnN0cnVjdGlvbiIsImFyZ3VtZW50IiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiY29tcHV0ZVVuaXRMaW1pdCIsImNvbXB1dGVVbml0UHJpY2UiLCJTQ1JJUFQiLCJUUkFOU0ZFUl9XSVRIX0NPTVBVVEVfQlVER0VUIiwic2NyaXB0V2l0aFNpZ25hdHVyZSIsIlRSQU5TRkVSIiwiY29tcGlsZVRyYW5zZmVyVHJhbnNhY3Rpb24iLCJUcmFuc2FjdGlvbiIsImdldFRyYW5zZmVyQXJndW1lbnRzIiwic2lnblRyYW5zYWN0aW9uIiwic2lnblRyYW5zZmVyVHJhbnNhY3Rpb24iLCJfeDgiLCJfc2lnblRyYW5zZmVyU3BsVG9rZW5UcmFuc2FjdGlvbiIsIl9jYWxsZWU0IiwiX1RPS0VOX0lORk8kZmluZCIsInNpZ25lciIsInRva2VuSW5mbyIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsIlNQTF9UT0tFTl9XSVRIX0NPTVBVVEVfQlVER0VUIiwiU1BMX1RPS0VOIiwiVE9LRU5fSU5GTyIsImZpbmQiLCJ0b2siLCJjb21waWxlU3BsVG9rZW5UcmFuc2FjdGlvbiIsImdldFNwbFRva2VuVHJhbnNmZXJBcmd1bWVudHMiLCJzaWduVHJhbnNmZXJTcGxUb2tlblRyYW5zYWN0aW9uIiwiX3g5IiwiX3NpZ25DcmVhdGVBbmRUcmFuc2ZlclNQTFRva2VuIiwiX2NhbGxlZTUiLCJfVE9LRU5fSU5GTyRmaW5kMiIsIl9hc3NvY2lhdGVBY2NvdW50SW5zdCIsImFzc29jaWF0ZUFjY291bnRJbnN0cnVjdGlvbiIsInRyYW5zZmVySW5zdHJ1Y3Rpb25zIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiQ1JFQVRFX0FORF9TUExfVE9LRU5fV0lUSF9DT01QVVRFX0JVREdFVCIsIkNSRUFURV9BTkRfU1BMX1RPS0VOIiwiY29tcGlsZUFzc29jaWF0ZVRva2VuQWNjb3VudCIsIm93bmVyIiwidG9QdWJrZXkiLCJhc3NvY2lhdGVBY2NvdW50IiwidG9Ub2tlbkFjY291bnQiLCJ0b2tlbiIsImluc3RydWN0aW9ucyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJnZXRDcmVhdGVBbmRUcmFuc2ZlclNQTFRva2VuIiwic2lnbkNyZWF0ZUFuZFRyYW5zZmVyU1BMVG9rZW4iLCJfeDEwIiwiX3NpZ25VbmRlbGVnYXRlIiwiX2NhbGxlZTYiLCJmZWVQYXllciIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsIlVOREVMRUdBVEUiLCJjb21waWxlVW5kZWxlZ2F0ZSIsImdldFVuZGVsZWdhdGVBcmd1bWVudHMiLCJzaWduVW5kZWxlZ2F0ZSIsIl94MTEiLCJfc2lnbkRlbGVnYXRlQW5kQ3JlYXRlQWNjb3VudFdpdGhTZWVkIiwiX2NhbGxlZTciLCJuZXdBY2NvdW50UHVia2V5IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3Iiwic2lnbkRlbGVnYXRlQW5kQ3JlYXRlQWNjb3VudFdpdGhTZWVkIiwiREVMRUdBVEVfQU5EX0NSRUFURV9BQ0NPVU5UX1dJVEhfU0VFRCIsIlNUQUtFX1BST0dSQU1fSUQiLCJiYXNlUHVia2V5IiwiY29tcGlsZURlbGVnYXRlQW5kQ3JlYXRlQWNjb3VudFdpdGhTZWVkIiwiZ2V0RGVsZWdhdGVBbmRDcmVhdGVBY2NvdW50QXJndW1lbnRzIiwiX3gxMiIsIl9zaWduU3RhY2tpbmdXaXRoZHJhd1RyYW5zYWN0aW9uIiwiX2NhbGxlZTgiLCJhdXRob3JpemVkUHVia2V5IiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiU1RBS0lOR19XSVRIRFJBVyIsImNvbXBpbGVTdGFraW5nV2l0aGRyYXciLCJnZXRXaXRoZHJhd0FyZ3VtZW50cyIsInNpZ25TdGFja2luZ1dpdGhkcmF3VHJhbnNhY3Rpb24iLCJfeDEzIiwiX3NpZ25TaWduSW5NZXNzYWdlIiwiX2NhbGxlZTkiLCJzaWduTXNnRGF0YSIsIm1lc3NhZ2UiLCJfY2FsbGVlOSQiLCJfY29udGV4dDkiLCJTSUdOX0lOIiwiZ2V0U2lnbkluQXJndW1lbnRzIiwic2lnbk1lc3NhZ2UiLCJzaWduU2lnbkluTWVzc2FnZSIsIl94MTQiLCJfc2lnbk1lc3NhZ2UiLCJfY2FsbGVlMTAiLCJfY2FsbGVlMTAkIiwiX2NvbnRleHQxMCIsIlNJR05fTUVTU0FHRSIsImdldFNpZ25NZXNzYWdlQXJndW1lbnRzIiwiX3gxNSIsIl9zaWduVHJhbnNhY3Rpb24iLCJfY2FsbGVlMTEiLCJfY2FsbGVlMTEkIiwiX2NvbnRleHQxMSIsIlNNQVJUX0NPTlRSQUNUIiwiZ2V0U2lnblZlcnNpb25lZEFyZ3VtZW50cyIsIl94MTYiLCJfc2lnbkFsbFRyYW5zYWN0aW9ucyIsIl9jYWxsZWUxMiIsIl9zY3JpcHRVdGlsJGdldFNjcmlwdCIsInByZUFjdGlvbnMiLCJzaWduYXR1cmVzIiwiX2NhbGxlZTEyJCIsIl9jb250ZXh0MTIiLCJnZXRTY3JpcHRTaWduaW5nUHJlQWN0aW9ucyIsInNpZ25BbGxUcmFuc2FjdGlvbnMiLCJtYXAiLCJzaWduYXR1cmUiLCJpbmRleCIsIl9zaWduYXR1cmVzIiwibWVzc2FnZVNpZ25hdHVyZXMiLCJ2ZXJzaW9uZWRUcmFuc2FjdGlvbiIsIlZlcnNpb25lZFRyYW5zYWN0aW9uIiwic2VyaWFsaXplIiwidG9TdHJpbmciLCJfeDE3IiwiRUREU0FDb2luIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29pbiBhcyBDT0lOLCBlcnJvciBhcyBFUlJPUiwgVHJhbnNwb3J0LCB1dGlscyB9IGZyb20gJ0Bjb29sd2FsbGV0L2NvcmUnO1xuaW1wb3J0IHsgU0RLRXJyb3IgfSBmcm9tICdAY29vbHdhbGxldC9jb3JlL2xpYi9lcnJvcic7XG5pbXBvcnQgeyBQYXRoVHlwZSB9IGZyb20gJ0Bjb29sd2FsbGV0L2NvcmUvbGliL2NvbmZpZyc7XG5pbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IEJOIGZyb20gJ2JuLmpzJztcbmltcG9ydCB7IHNoYTI1NiB9IGZyb20gJ2pzLXNoYTI1Nic7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL2NvbmZpZy90eXBlcyc7XG5pbXBvcnQgKiBhcyBwYXJhbXMgZnJvbSAnLi9jb25maWcvcGFyYW1zJztcbmltcG9ydCAqIGFzIHN0cmluZ1V0aWwgZnJvbSAnLi91dGlscy9zdHJpbmdVdGlsJztcbmltcG9ydCAqIGFzIHNjcmlwdFV0aWwgZnJvbSAnLi91dGlscy9zY3JpcHRVdGlsJztcbmltcG9ydCAqIGFzIHNpZ24gZnJvbSAnLi9zaWduJztcbmltcG9ydCB7IFRPS0VOX0lORk8gfSBmcm9tICcuL2NvbmZpZy90b2tlbkluZm9zJztcbmltcG9ydCB7XG4gIGNvbXBpbGVBc3NvY2lhdGVUb2tlbkFjY291bnQsXG4gIGNvbXBpbGVEZWxlZ2F0ZUFuZENyZWF0ZUFjY291bnRXaXRoU2VlZCxcbiAgY29tcGlsZVNwbFRva2VuVHJhbnNhY3Rpb24sXG4gIGNvbXBpbGVUcmFuc2ZlclRyYW5zYWN0aW9uLFxuICBjb21waWxlVW5kZWxlZ2F0ZSxcbiAgY29tcGlsZVN0YWtpbmdXaXRoZHJhdyxcbn0gZnJvbSAnLi91dGlscy9yYXdUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBjcmVhdGVQcm9ncmFtQWRkcmVzc1N5bmMgfSBmcm9tICcuL3V0aWxzL2FjY291bnQnO1xuaW1wb3J0IHsgaXNfb25fY3VydmUgfSBmcm9tICcuL3V0aWxzL2VkMjU1MTknO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuL3V0aWxzL1RyYW5zYWN0aW9uJztcbmltcG9ydCB7IFZlcnNpb25lZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi91dGlscy92ZXJzaW9uZWRUcmFuc2FjdGlvbic7XG5cbmNsYXNzIFNvbGFuYSBleHRlbmRzIENPSU4uRUREU0FDb2luIGltcGxlbWVudHMgQ09JTi5Db2luIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIocGFyYW1zLkNPSU5fVFlQRSk7XG4gIH1cblxuICBpc1ZhbGlkUHVibGljS2V5KHB1YmxpY0tleTogdHlwZXMuQWRkcmVzcyk6IGJvb2xlYW4ge1xuICAgIGxldCBidWZmZXI6IEJ1ZmZlcjtcbiAgICBpZiAodHlwZW9mIHB1YmxpY0tleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJ1ZmZlciA9IGJhc2U1OC5kZWNvZGUocHVibGljS2V5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIgPSBwdWJsaWNLZXk7XG4gICAgfVxuICAgIGNvbnN0IHB1YmxpY0tleUJ5dGVzID0gbmV3IEJOKGJ1ZmZlciwgMTYpLnRvQXJyYXkodW5kZWZpbmVkLCAzMik7XG4gICAgcmV0dXJuIGlzX29uX2N1cnZlKHB1YmxpY0tleUJ5dGVzKSA9PT0gMTtcbiAgfVxuXG4gIGFzeW5jIGdldEFkZHJlc3ModHJhbnNwb3J0OiBUcmFuc3BvcnQsIGFwcFByaXZhdGVLZXk6IHN0cmluZywgYXBwSWQ6IHN0cmluZywgYWRkcmVzc0luZGV4OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHBhdGggPSB1dGlscy5nZXRGdWxsUGF0aCh7IHBhdGhUeXBlOiBQYXRoVHlwZS5TTElQMDAxMCwgcGF0aFN0cmluZzogYDQ0Jy81MDEnLyR7YWRkcmVzc0luZGV4fScvMCdgIH0pO1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IGF3YWl0IENPSU4uZ2V0UHVibGljS2V5QnlQYXRoKHRyYW5zcG9ydCwgYXBwSWQsIGFwcFByaXZhdGVLZXksIHBhdGgpO1xuICAgIGNvbnNvbGUuZGVidWcoJ1B1YmxpYyBLZXk6JywgcHVibGljS2V5KTtcbiAgICBpZiAoIXB1YmxpY0tleSkge1xuICAgICAgdGhyb3cgbmV3IEVSUk9SLlNES0Vycm9yKHRoaXMuZ2V0QWRkcmVzcy5uYW1lLCAncHVibGljIGtleSBpcyB1bmRlZmluZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZ1V0aWwucHViS2V5VG9BZGRyZXNzKHB1YmxpY0tleSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVXaXRoU2VlZChmcm9tUHVibGljS2V5OiB0eXBlcy5BZGRyZXNzLCBzZWVkOiBzdHJpbmcsIHByb2dyYW1JZDogdHlwZXMuQWRkcmVzcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBzdHJpbmdVdGlsLnRvQmFzZTU4QnVmZmVyKGZyb21QdWJsaWNLZXkpLFxuICAgICAgQnVmZmVyLmZyb20oc2VlZCksXG4gICAgICBzdHJpbmdVdGlsLnRvQmFzZTU4QnVmZmVyKHByb2dyYW1JZCksXG4gICAgXSk7XG4gICAgY29uc3QgaGFzaCA9IHNoYTI1Ni5jcmVhdGUoKTtcbiAgICBoYXNoLnVwZGF0ZShidWZmZXIpO1xuICAgIHJldHVybiBiYXNlNTguZW5jb2RlKEJ1ZmZlci5mcm9tKGhhc2guaGV4KCksICdoZXgnKSk7XG4gIH1cblxuICBmaW5kUHJvZ3JhbUFkZHJlc3Moc2VlZHM6IEFycmF5PEJ1ZmZlciB8IFVpbnQ4QXJyYXk+LCBwcm9ncmFtSWQ6IHR5cGVzLkFkZHJlc3MpOiBbc3RyaW5nLCBudW1iZXJdIHtcbiAgICBsZXQgbm9uY2UgPSAyNTU7XG4gICAgbGV0IGFkZHJlc3M7XG4gICAgd2hpbGUgKG5vbmNlICE9PSAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzZWVkc1dpdGhOb25jZSA9IHNlZWRzLmNvbmNhdChCdWZmZXIuZnJvbShbbm9uY2VdKSk7XG4gICAgICAgIGFkZHJlc3MgPSBjcmVhdGVQcm9ncmFtQWRkcmVzc1N5bmMoc2VlZHNXaXRoTm9uY2UsIHByb2dyYW1JZCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvcikge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICBub25jZSAtPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbYWRkcmVzcywgbm9uY2VdO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBmaW5kIGEgdmlhYmxlIHByb2dyYW0gYWRkcmVzcyBub25jZWApO1xuICB9XG5cbiAgYXN5bmMgc2lnblRyYW5zZmVyVHJhbnNhY3Rpb24oc2lnblR4RGF0YTogdHlwZXMuc2lnblRyYW5zZmVyVHJhbnNhY3Rpb25UeXBlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHRyYW5zcG9ydCwgYXBwUHJpdmF0ZUtleSwgYXBwSWQsIGFkZHJlc3NJbmRleCwgdHJhbnNhY3Rpb24gfSA9IHNpZ25UeERhdGE7XG4gICAgY29uc3QgZnJvbVB1YmtleSA9IGF3YWl0IHRoaXMuZ2V0QWRkcmVzcyh0cmFuc3BvcnQsIGFwcFByaXZhdGVLZXksIGFwcElkLCBhZGRyZXNzSW5kZXgpO1xuICAgIGNvbnN0IHNjcmlwdCA9XG4gICAgICB0cmFuc2FjdGlvbi5jb21wdXRlVW5pdExpbWl0ICYmIHRyYW5zYWN0aW9uLmNvbXB1dGVVbml0UHJpY2VcbiAgICAgICAgPyBwYXJhbXMuU0NSSVBULlRSQU5TRkVSX1dJVEhfQ09NUFVURV9CVURHRVQuc2NyaXB0V2l0aFNpZ25hdHVyZVxuICAgICAgICA6IHBhcmFtcy5TQ1JJUFQuVFJBTlNGRVIuc2NyaXB0V2l0aFNpZ25hdHVyZTtcblxuICAgIGNvbnN0IHJhd1RyYW5zYWN0aW9uID0gY29tcGlsZVRyYW5zZmVyVHJhbnNhY3Rpb24oeyAuLi5zaWduVHhEYXRhLnRyYW5zYWN0aW9uLCBmcm9tUHVia2V5IH0pO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gc2NyaXB0VXRpbC5nZXRUcmFuc2ZlckFyZ3VtZW50cyh0cmFuc2FjdGlvbkluc3RydWN0aW9uLCBhZGRyZXNzSW5kZXgpO1xuXG4gICAgcmV0dXJuIHNpZ24uc2lnblRyYW5zYWN0aW9uKHNpZ25UeERhdGEsIHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIHNjcmlwdCwgYXJndW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgc2lnblRyYW5zZmVyU3BsVG9rZW5UcmFuc2FjdGlvbihzaWduVHhEYXRhOiB0eXBlcy5zaWduVHJhbnNmZXJTcGxUb2tlblRyYW5zYWN0aW9uVHlwZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyB0cmFuc3BvcnQsIHRyYW5zYWN0aW9uLCBhcHBQcml2YXRlS2V5LCBhcHBJZCwgYWRkcmVzc0luZGV4IH0gPSBzaWduVHhEYXRhO1xuICAgIGNvbnN0IHNpZ25lciA9IGF3YWl0IHRoaXMuZ2V0QWRkcmVzcyh0cmFuc3BvcnQsIGFwcFByaXZhdGVLZXksIGFwcElkLCBhZGRyZXNzSW5kZXgpO1xuICAgIGNvbnN0IHNjcmlwdCA9XG4gICAgICB0cmFuc2FjdGlvbi5jb21wdXRlVW5pdExpbWl0ICYmIHRyYW5zYWN0aW9uLmNvbXB1dGVVbml0UHJpY2VcbiAgICAgICAgPyBwYXJhbXMuU0NSSVBULlNQTF9UT0tFTl9XSVRIX0NPTVBVVEVfQlVER0VULnNjcmlwdFdpdGhTaWduYXR1cmVcbiAgICAgICAgOiBwYXJhbXMuU0NSSVBULlNQTF9UT0tFTi5zY3JpcHRXaXRoU2lnbmF0dXJlO1xuICAgIC8vIElmIGdpdmVuIHRva2VuIGFkZHJlc3MgY2FuIGJlIGZvdW5kIGluIG9mZmljaWFsIHRva2VuIGxpc3QsIHVzZSBpdCBpbnN0ZWFkIG9mIHRoZSB1c2VyIGdpdmVuIG9uZS5cbiAgICBjb25zdCB0b2tlbkluZm86IHR5cGVzLlRva2VuSW5mbyA9XG4gICAgICBUT0tFTl9JTkZPLmZpbmQoKHRvaykgPT4gdG9rLmFkZHJlc3MgPT09IHRyYW5zYWN0aW9uLnRva2VuSW5mby5hZGRyZXNzKSA/PyB0cmFuc2FjdGlvbi50b2tlbkluZm87XG4gICAgY29uc3QgcmF3VHJhbnNhY3Rpb24gPSBjb21waWxlU3BsVG9rZW5UcmFuc2FjdGlvbih7IC4uLnRyYW5zYWN0aW9uLCBzaWduZXIgfSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgY29uc3QgYXJndW1lbnQgPSBzY3JpcHRVdGlsLmdldFNwbFRva2VuVHJhbnNmZXJBcmd1bWVudHModHJhbnNhY3Rpb25JbnN0cnVjdGlvbiwgYWRkcmVzc0luZGV4LCB0b2tlbkluZm8pO1xuXG4gICAgcmV0dXJuIHNpZ24uc2lnblRyYW5zYWN0aW9uKHNpZ25UeERhdGEsIHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIHNjcmlwdCwgYXJndW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgc2lnbkNyZWF0ZUFuZFRyYW5zZmVyU1BMVG9rZW4oc2lnblR4RGF0YTogdHlwZXMuc2lnbkNyZWF0ZUFuZFRyYW5zZmVyU3BsVG9rZW5UcmFuc2FjdGlvbik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyB0cmFuc3BvcnQsIGFwcFByaXZhdGVLZXksIGFwcElkLCBhZGRyZXNzSW5kZXgsIHRyYW5zYWN0aW9uIH0gPSBzaWduVHhEYXRhO1xuICAgIGNvbnN0IHNpZ25lciA9IGF3YWl0IHRoaXMuZ2V0QWRkcmVzcyh0cmFuc3BvcnQsIGFwcFByaXZhdGVLZXksIGFwcElkLCBhZGRyZXNzSW5kZXgpO1xuICAgIGNvbnN0IHNjcmlwdCA9XG4gICAgICB0cmFuc2FjdGlvbi5jb21wdXRlVW5pdExpbWl0ICYmIHRyYW5zYWN0aW9uLmNvbXB1dGVVbml0UHJpY2VcbiAgICAgICAgPyBwYXJhbXMuU0NSSVBULkNSRUFURV9BTkRfU1BMX1RPS0VOX1dJVEhfQ09NUFVURV9CVURHRVQuc2NyaXB0V2l0aFNpZ25hdHVyZVxuICAgICAgICA6IHBhcmFtcy5TQ1JJUFQuQ1JFQVRFX0FORF9TUExfVE9LRU4uc2NyaXB0V2l0aFNpZ25hdHVyZTtcbiAgICAvLyBJZiBnaXZlbiB0b2tlbiBhZGRyZXNzIGNhbiBiZSBmb3VuZCBpbiBvZmZpY2lhbCB0b2tlbiBsaXN0LCB1c2UgaXQgaW5zdGVhZCBvZiB0aGUgdXNlciBnaXZlbiBvbmUuXG4gICAgY29uc3QgdG9rZW5JbmZvOiB0eXBlcy5Ub2tlbkluZm8gPVxuICAgICAgVE9LRU5fSU5GTy5maW5kKCh0b2spID0+IHRvay5hZGRyZXNzID09PSB0cmFuc2FjdGlvbi50b2tlbkluZm8uYWRkcmVzcykgPz8gdHJhbnNhY3Rpb24udG9rZW5JbmZvO1xuICAgIGNvbnN0IGFzc29jaWF0ZUFjY291bnRJbnN0cnVjdGlvbiA9IGNvbXBpbGVBc3NvY2lhdGVUb2tlbkFjY291bnQoe1xuICAgICAgLi4udHJhbnNhY3Rpb24sXG4gICAgICBzaWduZXIsXG4gICAgICBvd25lcjogdHJhbnNhY3Rpb24udG9QdWJrZXksXG4gICAgICBhc3NvY2lhdGVBY2NvdW50OiB0cmFuc2FjdGlvbi50b1Rva2VuQWNjb3VudCxcbiAgICAgIHRva2VuOiB0b2tlbkluZm8uYWRkcmVzcyxcbiAgICB9KTtcbiAgICBjb25zdCB0cmFuc2Zlckluc3RydWN0aW9ucyA9IGNvbXBpbGVTcGxUb2tlblRyYW5zYWN0aW9uKHsgLi4udHJhbnNhY3Rpb24sIHNpZ25lciB9KS5pbnN0cnVjdGlvbnM7XG4gICAgYXNzb2NpYXRlQWNjb3VudEluc3RydWN0aW9uLmluc3RydWN0aW9ucy5wdXNoKC4uLnRyYW5zZmVySW5zdHJ1Y3Rpb25zKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKGFzc29jaWF0ZUFjY291bnRJbnN0cnVjdGlvbik7XG4gICAgY29uc3QgYXJndW1lbnQgPSBzY3JpcHRVdGlsLmdldENyZWF0ZUFuZFRyYW5zZmVyU1BMVG9rZW4odHJhbnNhY3Rpb25JbnN0cnVjdGlvbiwgYWRkcmVzc0luZGV4LCB0b2tlbkluZm8pO1xuXG4gICAgcmV0dXJuIHNpZ24uc2lnblRyYW5zYWN0aW9uKHNpZ25UeERhdGEsIHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIHNjcmlwdCwgYXJndW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgc2lnblVuZGVsZWdhdGUoc2lnblR4RGF0YTogdHlwZXMuc2lnblVuZGVsZWdhdGVUeXBlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHRyYW5zcG9ydCwgYXBwUHJpdmF0ZUtleSwgYXBwSWQsIGFkZHJlc3NJbmRleCB9ID0gc2lnblR4RGF0YTtcbiAgICBjb25zdCBmZWVQYXllciA9IGF3YWl0IHRoaXMuZ2V0QWRkcmVzcyh0cmFuc3BvcnQsIGFwcFByaXZhdGVLZXksIGFwcElkLCBhZGRyZXNzSW5kZXgpO1xuICAgIGNvbnN0IHNjcmlwdCA9IHBhcmFtcy5TQ1JJUFQuVU5ERUxFR0FURS5zY3JpcHRXaXRoU2lnbmF0dXJlO1xuICAgIGNvbnN0IHJhd1RyYW5zYWN0aW9uID0gY29tcGlsZVVuZGVsZWdhdGUoeyAuLi5zaWduVHhEYXRhLnRyYW5zYWN0aW9uLCBmZWVQYXllciB9KTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICBjb25zdCBhcmd1bWVudCA9IHNjcmlwdFV0aWwuZ2V0VW5kZWxlZ2F0ZUFyZ3VtZW50cyh0cmFuc2FjdGlvbkluc3RydWN0aW9uLCBhZGRyZXNzSW5kZXgpO1xuXG4gICAgcmV0dXJuIHNpZ24uc2lnblRyYW5zYWN0aW9uKHNpZ25UeERhdGEsIHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIHNjcmlwdCwgYXJndW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgc2lnbkRlbGVnYXRlQW5kQ3JlYXRlQWNjb3VudFdpdGhTZWVkKFxuICAgIHNpZ25UeERhdGE6IHR5cGVzLnNpZ25EZWxlZ2F0ZUFuZENyZWF0ZUFjY291bnRXaXRoU2VlZFR5cGVcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoc2lnblR4RGF0YS50cmFuc2FjdGlvbi5zZWVkLmxlbmd0aCA+IDY0KSB7XG4gICAgICB0aHJvdyBuZXcgU0RLRXJyb3IodGhpcy5zaWduRGVsZWdhdGVBbmRDcmVhdGVBY2NvdW50V2l0aFNlZWQubmFtZSwgJ3NlZWQgbGVuZ3RoIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMzIgYnl0ZXMnKTtcbiAgICB9XG4gICAgY29uc3QgeyB0cmFuc3BvcnQsIGFwcFByaXZhdGVLZXksIGFwcElkLCBhZGRyZXNzSW5kZXggfSA9IHNpZ25UeERhdGE7XG4gICAgY29uc3QgZnJvbVB1YmtleSA9IGF3YWl0IHRoaXMuZ2V0QWRkcmVzcyh0cmFuc3BvcnQsIGFwcFByaXZhdGVLZXksIGFwcElkLCBhZGRyZXNzSW5kZXgpO1xuICAgIGNvbnN0IHNjcmlwdCA9IHBhcmFtcy5TQ1JJUFQuREVMRUdBVEVfQU5EX0NSRUFURV9BQ0NPVU5UX1dJVEhfU0VFRC5zY3JpcHRXaXRoU2lnbmF0dXJlO1xuICAgIGxldCBuZXdBY2NvdW50UHVia2V5ID0gc2lnblR4RGF0YS50cmFuc2FjdGlvbi5uZXdBY2NvdW50UHVia2V5O1xuICAgIGlmICghbmV3QWNjb3VudFB1YmtleSkge1xuICAgICAgbmV3QWNjb3VudFB1YmtleSA9IGF3YWl0IHRoaXMuY3JlYXRlV2l0aFNlZWQoZnJvbVB1YmtleSwgc2lnblR4RGF0YS50cmFuc2FjdGlvbi5zZWVkLCBwYXJhbXMuU1RBS0VfUFJPR1JBTV9JRCk7XG4gICAgfVxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0ge1xuICAgICAgLi4uc2lnblR4RGF0YS50cmFuc2FjdGlvbixcbiAgICAgIG5ld0FjY291bnRQdWJrZXksXG4gICAgICBmcm9tUHVia2V5LFxuICAgICAgYmFzZVB1YmtleTogZnJvbVB1YmtleSxcbiAgICB9O1xuICAgIGNvbnN0IHJhd1RyYW5zYWN0aW9uID0gY29tcGlsZURlbGVnYXRlQW5kQ3JlYXRlQWNjb3VudFdpdGhTZWVkKHRyYW5zYWN0aW9uKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICBjb25zdCBhcmd1bWVudCA9IHNjcmlwdFV0aWwuZ2V0RGVsZWdhdGVBbmRDcmVhdGVBY2NvdW50QXJndW1lbnRzKHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIGFkZHJlc3NJbmRleCk7XG5cbiAgICByZXR1cm4gc2lnbi5zaWduVHJhbnNhY3Rpb24oeyAuLi5zaWduVHhEYXRhLCB0cmFuc2FjdGlvbiB9LCB0cmFuc2FjdGlvbkluc3RydWN0aW9uLCBzY3JpcHQsIGFyZ3VtZW50KTtcbiAgfVxuXG4gIGFzeW5jIHNpZ25TdGFja2luZ1dpdGhkcmF3VHJhbnNhY3Rpb24oc2lnblR4RGF0YTogdHlwZXMuc2lnblN0YWtpbmdXaXRoZHJhd1R5cGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgdHJhbnNwb3J0LCBhcHBQcml2YXRlS2V5LCBhcHBJZCwgYWRkcmVzc0luZGV4IH0gPSBzaWduVHhEYXRhO1xuICAgIGNvbnN0IGF1dGhvcml6ZWRQdWJrZXkgPSBhd2FpdCB0aGlzLmdldEFkZHJlc3ModHJhbnNwb3J0LCBhcHBQcml2YXRlS2V5LCBhcHBJZCwgYWRkcmVzc0luZGV4KTtcbiAgICBjb25zdCBzY3JpcHQgPSBwYXJhbXMuU0NSSVBULlNUQUtJTkdfV0lUSERSQVcuc2NyaXB0V2l0aFNpZ25hdHVyZTtcbiAgICBjb25zdCByYXdUcmFuc2FjdGlvbiA9IGNvbXBpbGVTdGFraW5nV2l0aGRyYXcoeyAuLi5zaWduVHhEYXRhLnRyYW5zYWN0aW9uLCBhdXRob3JpemVkUHVia2V5IH0pO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gc2NyaXB0VXRpbC5nZXRXaXRoZHJhd0FyZ3VtZW50cyh0cmFuc2FjdGlvbkluc3RydWN0aW9uLCBhZGRyZXNzSW5kZXgpO1xuXG4gICAgcmV0dXJuIHNpZ24uc2lnblRyYW5zYWN0aW9uKHNpZ25UeERhdGEsIHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIHNjcmlwdCwgYXJndW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgc2lnblNpZ25Jbk1lc3NhZ2Uoc2lnbk1zZ0RhdGE6IHR5cGVzLnNpZ25TaWduSW5NZXNzYWdlVHlwZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzSW5kZXggfSA9IHNpZ25Nc2dEYXRhO1xuICAgIGNvbnN0IHNjcmlwdCA9IHBhcmFtcy5TQ1JJUFQuU0lHTl9JTi5zY3JpcHRXaXRoU2lnbmF0dXJlO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBzaWduTXNnRGF0YS5tZXNzYWdlO1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gc2NyaXB0VXRpbC5nZXRTaWduSW5Bcmd1bWVudHMobWVzc2FnZSwgYWRkcmVzc0luZGV4KTtcblxuICAgIHJldHVybiBzaWduLnNpZ25NZXNzYWdlKHNpZ25Nc2dEYXRhLCBzY3JpcHQsIGFyZ3VtZW50KTtcbiAgfVxuXG4gIGFzeW5jIHNpZ25NZXNzYWdlKHNpZ25Nc2dEYXRhOiB0eXBlcy5zaWduTWVzc2FnZVR5cGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgYWRkcmVzc0luZGV4IH0gPSBzaWduTXNnRGF0YTtcbiAgICBjb25zdCBzY3JpcHQgPSBwYXJhbXMuU0NSSVBULlNJR05fTUVTU0FHRS5zY3JpcHRXaXRoU2lnbmF0dXJlO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBzaWduTXNnRGF0YS5tZXNzYWdlO1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gc2NyaXB0VXRpbC5nZXRTaWduTWVzc2FnZUFyZ3VtZW50cyhtZXNzYWdlLCBhZGRyZXNzSW5kZXgpO1xuXG4gICAgcmV0dXJuIHNpZ24uc2lnbk1lc3NhZ2Uoc2lnbk1zZ0RhdGEsIHNjcmlwdCwgYXJndW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHNpZ25UeERhdGE6IHR5cGVzLnNpZ25WZXJzaW9uZWRUcmFuc2FjdGlvblR5cGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgYWRkcmVzc0luZGV4IH0gPSBzaWduVHhEYXRhO1xuICAgIGNvbnN0IHNjcmlwdCA9IHBhcmFtcy5TQ1JJUFQuU01BUlRfQ09OVFJBQ1Quc2NyaXB0V2l0aFNpZ25hdHVyZTtcbiAgICBjb25zdCBhcmd1bWVudCA9IHNjcmlwdFV0aWwuZ2V0U2lnblZlcnNpb25lZEFyZ3VtZW50cyhzaWduVHhEYXRhLnRyYW5zYWN0aW9uLm1lc3NhZ2UsIGFkZHJlc3NJbmRleCk7XG4gICAgcmV0dXJuIHNpZ24uc2lnblRyYW5zYWN0aW9uKHNpZ25UeERhdGEsIHNpZ25UeERhdGEudHJhbnNhY3Rpb24ubWVzc2FnZSwgc2NyaXB0LCBhcmd1bWVudCk7XG4gIH1cblxuICBhc3luYyBzaWduQWxsVHJhbnNhY3Rpb25zKHNpZ25UeERhdGE6IHR5cGVzLnNpZ25WZXJzaW9uZWRUcmFuc2FjdGlvbnMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgc2NyaXB0ID0gcGFyYW1zLlNDUklQVC5TTUFSVF9DT05UUkFDVC5zY3JpcHRXaXRoU2lnbmF0dXJlO1xuICAgIGNvbnN0IHsgcHJlQWN0aW9ucyB9ID0gc2NyaXB0VXRpbC5nZXRTY3JpcHRTaWduaW5nUHJlQWN0aW9ucyhzaWduVHhEYXRhLCBzY3JpcHQpO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlcyA9IGF3YWl0IHNpZ24uc2lnbkFsbFRyYW5zYWN0aW9ucyhzaWduVHhEYXRhLCBwcmVBY3Rpb25zKTtcblxuICAgIHJldHVybiBzaWduYXR1cmVzLm1hcCgoc2lnbmF0dXJlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgX3NpZ25hdHVyZXMgPSBbXTtcbiAgICAgIF9zaWduYXR1cmVzLnB1c2goc2lnbmF0dXJlKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VTaWduYXR1cmVzID0gc2lnblR4RGF0YS50cmFuc2FjdGlvbltpbmRleF0uc2lnbmF0dXJlcztcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbW