@coolwallet/sol
Version:
Coolwallet Solana sdk
533 lines (532 loc) • 73.4 kB
JavaScript
"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 _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
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(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
var Solana = /*#__PURE__*/function (_COIN$EDDSACoin) {
function Solana() {
(0, _classCallCheck2["default"])(this, Solana);
return _callSuper(this, Solana, [params.COIN_TYPE]);
}
(0, _inherits2["default"])(Solana, _COIN$EDDSACoin);
return (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;
}()
}]);
}(_core.coin.EDDSACoin);
var _default = exports["default"] = Solana;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfZXJyb3IiLCJfY29uZmlnIiwiX2JzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9ibiIsIl9qc1NoYSIsInR5cGVzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJleHBvcnRzIiwicGFyYW1zIiwic3RyaW5nVXRpbCIsInNjcmlwdFV0aWwiLCJzaWduIiwiX3Rva2VuSW5mb3MiLCJfcmF3VHJhbnNhY3Rpb24iLCJfYWNjb3VudCIsIl9lZCIsIl9UcmFuc2FjdGlvbiIsIl92ZXJzaW9uZWRUcmFuc2FjdGlvbiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiU29sYW5hIiwiX0NPSU4kRUREU0FDb2luIiwiX2NsYXNzQ2FsbENoZWNrMiIsIkNPSU5fVFlQRSIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJpc1ZhbGlkUHVibGljS2V5IiwicHVibGljS2V5IiwiYnVmZmVyIiwiYmFzZTU4IiwiZGVjb2RlIiwicHVibGljS2V5Qnl0ZXMiLCJCTiIsInRvQXJyYXkiLCJ1bmRlZmluZWQiLCJpc19vbl9jdXJ2ZSIsIl9nZXRBZGRyZXNzIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ0cmFuc3BvcnQiLCJhcHBQcml2YXRlS2V5IiwiYXBwSWQiLCJhZGRyZXNzSW5kZXgiLCJwYXRoIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInV0aWxzIiwiZ2V0RnVsbFBhdGgiLCJwYXRoVHlwZSIsIlBhdGhUeXBlIiwiU0xJUDAwMTAiLCJwYXRoU3RyaW5nIiwiY29uY2F0IiwiQ09JTiIsImdldFB1YmxpY0tleUJ5UGF0aCIsInNlbnQiLCJjb25zb2xlIiwiZGVidWciLCJFUlJPUiIsIlNES0Vycm9yIiwiZ2V0QWRkcmVzcyIsIm5hbWUiLCJhYnJ1cHQiLCJwdWJLZXlUb0FkZHJlc3MiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJfeDQiLCJfY3JlYXRlV2l0aFNlZWQiLCJfY2FsbGVlMiIsImZyb21QdWJsaWNLZXkiLCJzZWVkIiwicHJvZ3JhbUlkIiwiaGFzaCIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIkJ1ZmZlciIsInRvQmFzZTU4QnVmZmVyIiwiZnJvbSIsInNoYTI1NiIsImNyZWF0ZSIsInVwZGF0ZSIsImVuY29kZSIsImhleCIsImNyZWF0ZVdpdGhTZWVkIiwiX3g1IiwiX3g2IiwiX3g3IiwiZmluZFByb2dyYW1BZGRyZXNzIiwic2VlZHMiLCJub25jZSIsImFkZHJlc3MiLCJzZWVkc1dpdGhOb25jZSIsImNyZWF0ZVByb2dyYW1BZGRyZXNzU3luYyIsImVyciIsIlR5cGVFcnJvciIsIkVycm9yIiwiX3NpZ25UcmFuc2ZlclRyYW5zYWN0aW9uIiwiX2NhbGxlZTMiLCJzaWduVHhEYXRhIiwidHJhbnNhY3Rpb24iLCJmcm9tUHVia2V5Iiwic2NyaXB0IiwicmF3VHJhbnNhY3Rpb24iLCJ0cmFuc2FjdGlvbkluc3RydWN0aW9uIiwiYXJndW1lbnQiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJjb21wdXRlVW5pdExpbWl0IiwiY29tcHV0ZVVuaXRQcmljZSIsIlNDUklQVCIsIlRSQU5TRkVSX1dJVEhfQ09NUFVURV9CVURHRVQiLCJzY3JpcHRXaXRoU2lnbmF0dXJlIiwiVFJBTlNGRVIiLCJjb21waWxlVHJhbnNmZXJUcmFuc2FjdGlvbiIsIlRyYW5zYWN0aW9uIiwiZ2V0VHJhbnNmZXJBcmd1bWVudHMiLCJzaWduVHJhbnNhY3Rpb24iLCJzaWduVHJhbnNmZXJUcmFuc2FjdGlvbiIsIl94OCIsIl9zaWduVHJhbnNmZXJTcGxUb2tlblRyYW5zYWN0aW9uIiwiX2NhbGxlZTQiLCJfVE9LRU5fSU5GTyRmaW5kIiwic2lnbmVyIiwidG9rZW5JbmZvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiU1BMX1RPS0VOX1dJVEhfQ09NUFVURV9CVURHRVQiLCJTUExfVE9LRU4iLCJUT0tFTl9JTkZPIiwiZmluZCIsInRvayIsImNvbXBpbGVTcGxUb2tlblRyYW5zYWN0aW9uIiwiZ2V0U3BsVG9rZW5UcmFuc2ZlckFyZ3VtZW50cyIsInNpZ25UcmFuc2ZlclNwbFRva2VuVHJhbnNhY3Rpb24iLCJfeDkiLCJfc2lnbkNyZWF0ZUFuZFRyYW5zZmVyU1BMVG9rZW4iLCJfY2FsbGVlNSIsIl9UT0tFTl9JTkZPJGZpbmQyIiwiX2Fzc29jaWF0ZUFjY291bnRJbnN0IiwiYXNzb2NpYXRlQWNjb3VudEluc3RydWN0aW9uIiwidHJhbnNmZXJJbnN0cnVjdGlvbnMiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJDUkVBVEVfQU5EX1NQTF9UT0tFTl9XSVRIX0NPTVBVVEVfQlVER0VUIiwiQ1JFQVRFX0FORF9TUExfVE9LRU4iLCJjb21waWxlQXNzb2NpYXRlVG9rZW5BY2NvdW50Iiwib3duZXIiLCJ0b1B1YmtleSIsImFzc29jaWF0ZUFjY291bnQiLCJ0b1Rva2VuQWNjb3VudCIsInRva2VuIiwiaW5zdHJ1Y3Rpb25zIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImdldENyZWF0ZUFuZFRyYW5zZmVyU1BMVG9rZW4iLCJzaWduQ3JlYXRlQW5kVHJhbnNmZXJTUExUb2tlbiIsIl94MTAiLCJfc2lnblVuZGVsZWdhdGUiLCJfY2FsbGVlNiIsImZlZVBheWVyIiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwiVU5ERUxFR0FURSIsImNvbXBpbGVVbmRlbGVnYXRlIiwiZ2V0VW5kZWxlZ2F0ZUFyZ3VtZW50cyIsInNpZ25VbmRlbGVnYXRlIiwiX3gxMSIsIl9zaWduRGVsZWdhdGVBbmRDcmVhdGVBY2NvdW50V2l0aFNlZWQiLCJfY2FsbGVlNyIsIm5ld0FjY291bnRQdWJrZXkiLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJzaWduRGVsZWdhdGVBbmRDcmVhdGVBY2NvdW50V2l0aFNlZWQiLCJERUxFR0FURV9BTkRfQ1JFQVRFX0FDQ09VTlRfV0lUSF9TRUVEIiwiU1RBS0VfUFJPR1JBTV9JRCIsImJhc2VQdWJrZXkiLCJjb21waWxlRGVsZWdhdGVBbmRDcmVhdGVBY2NvdW50V2l0aFNlZWQiLCJnZXREZWxlZ2F0ZUFuZENyZWF0ZUFjY291bnRBcmd1bWVudHMiLCJfeDEyIiwiX3NpZ25TdGFja2luZ1dpdGhkcmF3VHJhbnNhY3Rpb24iLCJfY2FsbGVlOCIsImF1dGhvcml6ZWRQdWJrZXkiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJTVEFLSU5HX1dJVEhEUkFXIiwiY29tcGlsZVN0YWtpbmdXaXRoZHJhdyIsImdldFdpdGhkcmF3QXJndW1lbnRzIiwic2lnblN0YWNraW5nV2l0aGRyYXdUcmFuc2FjdGlvbiIsIl94MTMiLCJfc2lnblNpZ25Jbk1lc3NhZ2UiLCJfY2FsbGVlOSIsInNpZ25Nc2dEYXRhIiwibWVzc2FnZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsIlNJR05fSU4iLCJnZXRTaWduSW5Bcmd1bWVudHMiLCJzaWduTWVzc2FnZSIsInNpZ25TaWduSW5NZXNzYWdlIiwiX3gxNCIsIl9zaWduTWVzc2FnZSIsIl9jYWxsZWUxMCIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiU0lHTl9NRVNTQUdFIiwiZ2V0U2lnbk1lc3NhZ2VBcmd1bWVudHMiLCJfeDE1IiwiX3NpZ25UcmFuc2FjdGlvbiIsIl9jYWxsZWUxMSIsIl9jYWxsZWUxMSQiLCJfY29udGV4dDExIiwiU01BUlRfQ09OVFJBQ1QiLCJnZXRTaWduVmVyc2lvbmVkQXJndW1lbnRzIiwiX3gxNiIsIl9zaWduQWxsVHJhbnNhY3Rpb25zIiwiX2NhbGxlZTEyIiwiX3NjcmlwdFV0aWwkZ2V0U2NyaXB0IiwicHJlQWN0aW9ucyIsInNpZ25hdHVyZXMiLCJfY2FsbGVlMTIkIiwiX2NvbnRleHQxMiIsImdldFNjcmlwdFNpZ25pbmdQcmVBY3Rpb25zIiwic2lnbkFsbFRyYW5zYWN0aW9ucyIsIm1hcCIsInNpZ25hdHVyZSIsImluZGV4IiwiX3NpZ25hdHVyZXMiLCJtZXNzYWdlU2lnbmF0dXJlcyIsInZlcnNpb25lZFRyYW5zYWN0aW9uIiwiVmVyc2lvbmVkVHJhbnNhY3Rpb24iLCJzZXJpYWxpemUiLCJ0b1N0cmluZyIsIl94MTciLCJFRERTQUNvaW4iLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2luIGFzIENPSU4sIGVycm9yIGFzIEVSUk9SLCBUcmFuc3BvcnQsIHV0aWxzIH0gZnJvbSAnQGNvb2x3YWxsZXQvY29yZSc7XG5pbXBvcnQgeyBTREtFcnJvciB9IGZyb20gJ0Bjb29sd2FsbGV0L2NvcmUvbGliL2Vycm9yJztcbmltcG9ydCB7IFBhdGhUeXBlIH0gZnJvbSAnQGNvb2x3YWxsZXQvY29yZS9saWIvY29uZmlnJztcbmltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgQk4gZnJvbSAnYm4uanMnO1xuaW1wb3J0IHsgc2hhMjU2IH0gZnJvbSAnanMtc2hhMjU2JztcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vY29uZmlnL3R5cGVzJztcbmltcG9ydCAqIGFzIHBhcmFtcyBmcm9tICcuL2NvbmZpZy9wYXJhbXMnO1xuaW1wb3J0ICogYXMgc3RyaW5nVXRpbCBmcm9tICcuL3V0aWxzL3N0cmluZ1V0aWwnO1xuaW1wb3J0ICogYXMgc2NyaXB0VXRpbCBmcm9tICcuL3V0aWxzL3NjcmlwdFV0aWwnO1xuaW1wb3J0ICogYXMgc2lnbiBmcm9tICcuL3NpZ24nO1xuaW1wb3J0IHsgVE9LRU5fSU5GTyB9IGZyb20gJy4vY29uZmlnL3Rva2VuSW5mb3MnO1xuaW1wb3J0IHtcbiAgY29tcGlsZUFzc29jaWF0ZVRva2VuQWNjb3VudCxcbiAgY29tcGlsZURlbGVnYXRlQW5kQ3JlYXRlQWNjb3VudFdpdGhTZWVkLFxuICBjb21waWxlU3BsVG9rZW5UcmFuc2FjdGlvbixcbiAgY29tcGlsZVRyYW5zZmVyVHJhbnNhY3Rpb24sXG4gIGNvbXBpbGVVbmRlbGVnYXRlLFxuICBjb21waWxlU3Rha2luZ1dpdGhkcmF3LFxufSBmcm9tICcuL3V0aWxzL3Jhd1RyYW5zYWN0aW9uJztcbmltcG9ydCB7IGNyZWF0ZVByb2dyYW1BZGRyZXNzU3luYyB9IGZyb20gJy4vdXRpbHMvYWNjb3VudCc7XG5pbXBvcnQgeyBpc19vbl9jdXJ2ZSB9IGZyb20gJy4vdXRpbHMvZWQyNTUxOSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdXRpbHMvVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgVmVyc2lvbmVkVHJhbnNhY3Rpb24gfSBmcm9tICcuL3V0aWxzL3ZlcnNpb25lZFRyYW5zYWN0aW9uJztcblxuY2xhc3MgU29sYW5hIGV4dGVuZHMgQ09JTi5FRERTQUNvaW4gaW1wbGVtZW50cyBDT0lOLkNvaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihwYXJhbXMuQ09JTl9UWVBFKTtcbiAgfVxuXG4gIGlzVmFsaWRQdWJsaWNLZXkocHVibGljS2V5OiB0eXBlcy5BZGRyZXNzKTogYm9vbGVhbiB7XG4gICAgbGV0IGJ1ZmZlcjogQnVmZmVyO1xuICAgIGlmICh0eXBlb2YgcHVibGljS2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYnVmZmVyID0gYmFzZTU4LmRlY29kZShwdWJsaWNLZXkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlciA9IHB1YmxpY0tleTtcbiAgICB9XG4gICAgY29uc3QgcHVibGljS2V5Qnl0ZXMgPSBuZXcgQk4oYnVmZmVyLCAxNikudG9BcnJheSh1bmRlZmluZWQsIDMyKTtcbiAgICByZXR1cm4gaXNfb25fY3VydmUocHVibGljS2V5Qnl0ZXMpID09PSAxO1xuICB9XG5cbiAgYXN5bmMgZ2V0QWRkcmVzcyh0cmFuc3BvcnQ6IFRyYW5zcG9ydCwgYXBwUHJpdmF0ZUtleTogc3RyaW5nLCBhcHBJZDogc3RyaW5nLCBhZGRyZXNzSW5kZXg6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcGF0aCA9IHV0aWxzLmdldEZ1bGxQYXRoKHsgcGF0aFR5cGU6IFBhdGhUeXBlLlNMSVAwMDEwLCBwYXRoU3RyaW5nOiBgNDQnLzUwMScvJHthZGRyZXNzSW5kZXh9Jy8wJ2AgfSk7XG4gICAgY29uc3QgcHVibGljS2V5ID0gYXdhaXQgQ09JTi5nZXRQdWJsaWNLZXlCeVBhdGgodHJhbnNwb3J0LCBhcHBJZCwgYXBwUHJpdmF0ZUtleSwgcGF0aCk7XG4gICAgY29uc29sZS5kZWJ1ZygnUHVibGljIEtleTonLCBwdWJsaWNLZXkpO1xuICAgIGlmICghcHVibGljS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRVJST1IuU0RLRXJyb3IodGhpcy5nZXRBZGRyZXNzLm5hbWUsICdwdWJsaWMga2V5IGlzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICByZXR1cm4gc3RyaW5nVXRpbC5wdWJLZXlUb0FkZHJlc3MocHVibGljS2V5KTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVdpdGhTZWVkKGZyb21QdWJsaWNLZXk6IHR5cGVzLkFkZHJlc3MsIHNlZWQ6IHN0cmluZywgcHJvZ3JhbUlkOiB0eXBlcy5BZGRyZXNzKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgIHN0cmluZ1V0aWwudG9CYXNlNThCdWZmZXIoZnJvbVB1YmxpY0tleSksXG4gICAgICBCdWZmZXIuZnJvbShzZWVkKSxcbiAgICAgIHN0cmluZ1V0aWwudG9CYXNlNThCdWZmZXIocHJvZ3JhbUlkKSxcbiAgICBdKTtcbiAgICBjb25zdCBoYXNoID0gc2hhMjU2LmNyZWF0ZSgpO1xuICAgIGhhc2gudXBkYXRlKGJ1ZmZlcik7XG4gICAgcmV0dXJuIGJhc2U1OC5lbmNvZGUoQnVmZmVyLmZyb20oaGFzaC5oZXgoKSwgJ2hleCcpKTtcbiAgfVxuXG4gIGZpbmRQcm9ncmFtQWRkcmVzcyhzZWVkczogQXJyYXk8QnVmZmVyIHwgVWludDhBcnJheT4sIHByb2dyYW1JZDogdHlwZXMuQWRkcmVzcyk6IFtzdHJpbmcsIG51bWJlcl0ge1xuICAgIGxldCBub25jZSA9IDI1NTtcbiAgICBsZXQgYWRkcmVzcztcbiAgICB3aGlsZSAobm9uY2UgIT09IDApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNlZWRzV2l0aE5vbmNlID0gc2VlZHMuY29uY2F0KEJ1ZmZlci5mcm9tKFtub25jZV0pKTtcbiAgICAgICAgYWRkcmVzcyA9IGNyZWF0ZVByb2dyYW1BZGRyZXNzU3luYyhzZWVkc1dpdGhOb25jZSwgcHJvZ3JhbUlkKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIG5vbmNlIC09IDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFthZGRyZXNzLCBub25jZV07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGZpbmQgYSB2aWFibGUgcHJvZ3JhbSBhZGRyZXNzIG5vbmNlYCk7XG4gIH1cblxuICBhc3luYyBzaWduVHJhbnNmZXJUcmFuc2FjdGlvbihzaWduVHhEYXRhOiB0eXBlcy5zaWduVHJhbnNmZXJUcmFuc2FjdGlvblR5cGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgdHJhbnNwb3J0LCBhcHBQcml2YXRlS2V5LCBhcHBJZCwgYWRkcmVzc0luZGV4LCB0cmFuc2FjdGlvbiB9ID0gc2lnblR4RGF0YTtcbiAgICBjb25zdCBmcm9tUHVia2V5ID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzKHRyYW5zcG9ydCwgYXBwUHJpdmF0ZUtleSwgYXBwSWQsIGFkZHJlc3NJbmRleCk7XG4gICAgY29uc3Qgc2NyaXB0ID1cbiAgICAgIHRyYW5zYWN0aW9uLmNvbXB1dGVVbml0TGltaXQgJiYgdHJhbnNhY3Rpb24uY29tcHV0ZVVuaXRQcmljZVxuICAgICAgICA/IHBhcmFtcy5TQ1JJUFQuVFJBTlNGRVJfV0lUSF9DT01QVVRFX0JVREdFVC5zY3JpcHRXaXRoU2lnbmF0dXJlXG4gICAgICAgIDogcGFyYW1zLlNDUklQVC5UUkFOU0ZFUi5zY3JpcHRXaXRoU2lnbmF0dXJlO1xuXG4gICAgY29uc3QgcmF3VHJhbnNhY3Rpb24gPSBjb21waWxlVHJhbnNmZXJUcmFuc2FjdGlvbih7IC4uLnNpZ25UeERhdGEudHJhbnNhY3Rpb24sIGZyb21QdWJrZXkgfSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgY29uc3QgYXJndW1lbnQgPSBzY3JpcHRVdGlsLmdldFRyYW5zZmVyQXJndW1lbnRzKHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIGFkZHJlc3NJbmRleCk7XG5cbiAgICByZXR1cm4gc2lnbi5zaWduVHJhbnNhY3Rpb24oc2lnblR4RGF0YSwgdHJhbnNhY3Rpb25JbnN0cnVjdGlvbiwgc2NyaXB0LCBhcmd1bWVudCk7XG4gIH1cblxuICBhc3luYyBzaWduVHJhbnNmZXJTcGxUb2tlblRyYW5zYWN0aW9uKHNpZ25UeERhdGE6IHR5cGVzLnNpZ25UcmFuc2ZlclNwbFRva2VuVHJhbnNhY3Rpb25UeXBlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHRyYW5zcG9ydCwgdHJhbnNhY3Rpb24sIGFwcFByaXZhdGVLZXksIGFwcElkLCBhZGRyZXNzSW5kZXggfSA9IHNpZ25UeERhdGE7XG4gICAgY29uc3Qgc2lnbmVyID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzKHRyYW5zcG9ydCwgYXBwUHJpdmF0ZUtleSwgYXBwSWQsIGFkZHJlc3NJbmRleCk7XG4gICAgY29uc3Qgc2NyaXB0ID1cbiAgICAgIHRyYW5zYWN0aW9uLmNvbXB1dGVVbml0TGltaXQgJiYgdHJhbnNhY3Rpb24uY29tcHV0ZVVuaXRQcmljZVxuICAgICAgICA/IHBhcmFtcy5TQ1JJUFQuU1BMX1RPS0VOX1dJVEhfQ09NUFVURV9CVURHRVQuc2NyaXB0V2l0aFNpZ25hdHVyZVxuICAgICAgICA6IHBhcmFtcy5TQ1JJUFQuU1BMX1RPS0VOLnNjcmlwdFdpdGhTaWduYXR1cmU7XG4gICAgLy8gSWYgZ2l2ZW4gdG9rZW4gYWRkcmVzcyBjYW4gYmUgZm91bmQgaW4gb2ZmaWNpYWwgdG9rZW4gbGlzdCwgdXNlIGl0IGluc3RlYWQgb2YgdGhlIHVzZXIgZ2l2ZW4gb25lLlxuICAgIGNvbnN0IHRva2VuSW5mbzogdHlwZXMuVG9rZW5JbmZvID1cbiAgICAgIFRPS0VOX0lORk8uZmluZCgodG9rKSA9PiB0b2suYWRkcmVzcyA9PT0gdHJhbnNhY3Rpb24udG9rZW5JbmZvLmFkZHJlc3MpID8/IHRyYW5zYWN0aW9uLnRva2VuSW5mbztcbiAgICBjb25zdCByYXdUcmFuc2FjdGlvbiA9IGNvbXBpbGVTcGxUb2tlblRyYW5zYWN0aW9uKHsgLi4udHJhbnNhY3Rpb24sIHNpZ25lciB9KTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluc3RydWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKHJhd1RyYW5zYWN0aW9uKTtcbiAgICBjb25zdCBhcmd1bWVudCA9IHNjcmlwdFV0aWwuZ2V0U3BsVG9rZW5UcmFuc2ZlckFyZ3VtZW50cyh0cmFuc2FjdGlvbkluc3RydWN0aW9uLCBhZGRyZXNzSW5kZXgsIHRva2VuSW5mbyk7XG5cbiAgICByZXR1cm4gc2lnbi5zaWduVHJhbnNhY3Rpb24oc2lnblR4RGF0YSwgdHJhbnNhY3Rpb25JbnN0cnVjdGlvbiwgc2NyaXB0LCBhcmd1bWVudCk7XG4gIH1cblxuICBhc3luYyBzaWduQ3JlYXRlQW5kVHJhbnNmZXJTUExUb2tlbihzaWduVHhEYXRhOiB0eXBlcy5zaWduQ3JlYXRlQW5kVHJhbnNmZXJTcGxUb2tlblRyYW5zYWN0aW9uKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHRyYW5zcG9ydCwgYXBwUHJpdmF0ZUtleSwgYXBwSWQsIGFkZHJlc3NJbmRleCwgdHJhbnNhY3Rpb24gfSA9IHNpZ25UeERhdGE7XG4gICAgY29uc3Qgc2lnbmVyID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzKHRyYW5zcG9ydCwgYXBwUHJpdmF0ZUtleSwgYXBwSWQsIGFkZHJlc3NJbmRleCk7XG4gICAgY29uc3Qgc2NyaXB0ID1cbiAgICAgIHRyYW5zYWN0aW9uLmNvbXB1dGVVbml0TGltaXQgJiYgdHJhbnNhY3Rpb24uY29tcHV0ZVVuaXRQcmljZVxuICAgICAgICA/IHBhcmFtcy5TQ1JJUFQuQ1JFQVRFX0FORF9TUExfVE9LRU5fV0lUSF9DT01QVVRFX0JVREdFVC5zY3JpcHRXaXRoU2lnbmF0dXJlXG4gICAgICAgIDogcGFyYW1zLlNDUklQVC5DUkVBVEVfQU5EX1NQTF9UT0tFTi5zY3JpcHRXaXRoU2lnbmF0dXJlO1xuICAgIC8vIElmIGdpdmVuIHRva2VuIGFkZHJlc3MgY2FuIGJlIGZvdW5kIGluIG9mZmljaWFsIHRva2VuIGxpc3QsIHVzZSBpdCBpbnN0ZWFkIG9mIHRoZSB1c2VyIGdpdmVuIG9uZS5cbiAgICBjb25zdCB0b2tlbkluZm86IHR5cGVzLlRva2VuSW5mbyA9XG4gICAgICBUT0tFTl9JTkZPLmZpbmQoKHRvaykgPT4gdG9rLmFkZHJlc3MgPT09IHRyYW5zYWN0aW9uLnRva2VuSW5mby5hZGRyZXNzKSA/PyB0cmFuc2FjdGlvbi50b2tlbkluZm87XG4gICAgY29uc3QgYXNzb2NpYXRlQWNjb3VudEluc3RydWN0aW9uID0gY29tcGlsZUFzc29jaWF0ZVRva2VuQWNjb3VudCh7XG4gICAgICAuLi50cmFuc2FjdGlvbixcbiAgICAgIHNpZ25lcixcbiAgICAgIG93bmVyOiB0cmFuc2FjdGlvbi50b1B1YmtleSxcbiAgICAgIGFzc29jaWF0ZUFjY291bnQ6IHRyYW5zYWN0aW9uLnRvVG9rZW5BY2NvdW50LFxuICAgICAgdG9rZW46IHRva2VuSW5mby5hZGRyZXNzLFxuICAgIH0pO1xuICAgIGNvbnN0IHRyYW5zZmVySW5zdHJ1Y3Rpb25zID0gY29tcGlsZVNwbFRva2VuVHJhbnNhY3Rpb24oeyAuLi50cmFuc2FjdGlvbiwgc2lnbmVyIH0pLmluc3RydWN0aW9ucztcbiAgICBhc3NvY2lhdGVBY2NvdW50SW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25zLnB1c2goLi4udHJhbnNmZXJJbnN0cnVjdGlvbnMpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oYXNzb2NpYXRlQWNjb3VudEluc3RydWN0aW9uKTtcbiAgICBjb25zdCBhcmd1bWVudCA9IHNjcmlwdFV0aWwuZ2V0Q3JlYXRlQW5kVHJhbnNmZXJTUExUb2tlbih0cmFuc2FjdGlvbkluc3RydWN0aW9uLCBhZGRyZXNzSW5kZXgsIHRva2VuSW5mbyk7XG5cbiAgICByZXR1cm4gc2lnbi5zaWduVHJhbnNhY3Rpb24oc2lnblR4RGF0YSwgdHJhbnNhY3Rpb25JbnN0cnVjdGlvbiwgc2NyaXB0LCBhcmd1bWVudCk7XG4gIH1cblxuICBhc3luYyBzaWduVW5kZWxlZ2F0ZShzaWduVHhEYXRhOiB0eXBlcy5zaWduVW5kZWxlZ2F0ZVR5cGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgdHJhbnNwb3J0LCBhcHBQcml2YXRlS2V5LCBhcHBJZCwgYWRkcmVzc0luZGV4IH0gPSBzaWduVHhEYXRhO1xuICAgIGNvbnN0IGZlZVBheWVyID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzKHRyYW5zcG9ydCwgYXBwUHJpdmF0ZUtleSwgYXBwSWQsIGFkZHJlc3NJbmRleCk7XG4gICAgY29uc3Qgc2NyaXB0ID0gcGFyYW1zLlNDUklQVC5VTkRFTEVHQVRFLnNjcmlwdFdpdGhTaWduYXR1cmU7XG4gICAgY29uc3QgcmF3VHJhbnNhY3Rpb24gPSBjb21waWxlVW5kZWxlZ2F0ZSh7IC4uLnNpZ25UeERhdGEudHJhbnNhY3Rpb24sIGZlZVBheWVyIH0pO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gc2NyaXB0VXRpbC5nZXRVbmRlbGVnYXRlQXJndW1lbnRzKHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIGFkZHJlc3NJbmRleCk7XG5cbiAgICByZXR1cm4gc2lnbi5zaWduVHJhbnNhY3Rpb24oc2lnblR4RGF0YSwgdHJhbnNhY3Rpb25JbnN0cnVjdGlvbiwgc2NyaXB0LCBhcmd1bWVudCk7XG4gIH1cblxuICBhc3luYyBzaWduRGVsZWdhdGVBbmRDcmVhdGVBY2NvdW50V2l0aFNlZWQoXG4gICAgc2lnblR4RGF0YTogdHlwZXMuc2lnbkRlbGVnYXRlQW5kQ3JlYXRlQWNjb3VudFdpdGhTZWVkVHlwZVxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmIChzaWduVHhEYXRhLnRyYW5zYWN0aW9uLnNlZWQubGVuZ3RoID4gNjQpIHtcbiAgICAgIHRocm93IG5ldyBTREtFcnJvcih0aGlzLnNpZ25EZWxlZ2F0ZUFuZENyZWF0ZUFjY291bnRXaXRoU2VlZC5uYW1lLCAnc2VlZCBsZW5ndGggY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAzMiBieXRlcycpO1xuICAgIH1cbiAgICBjb25zdCB7IHRyYW5zcG9ydCwgYXBwUHJpdmF0ZUtleSwgYXBwSWQsIGFkZHJlc3NJbmRleCB9ID0gc2lnblR4RGF0YTtcbiAgICBjb25zdCBmcm9tUHVia2V5ID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzKHRyYW5zcG9ydCwgYXBwUHJpdmF0ZUtleSwgYXBwSWQsIGFkZHJlc3NJbmRleCk7XG4gICAgY29uc3Qgc2NyaXB0ID0gcGFyYW1zLlNDUklQVC5ERUxFR0FURV9BTkRfQ1JFQVRFX0FDQ09VTlRfV0lUSF9TRUVELnNjcmlwdFdpdGhTaWduYXR1cmU7XG4gICAgbGV0IG5ld0FjY291bnRQdWJrZXkgPSBzaWduVHhEYXRhLnRyYW5zYWN0aW9uLm5ld0FjY291bnRQdWJrZXk7XG4gICAgaWYgKCFuZXdBY2NvdW50UHVia2V5KSB7XG4gICAgICBuZXdBY2NvdW50UHVia2V5ID0gYXdhaXQgdGhpcy5jcmVhdGVXaXRoU2VlZChmcm9tUHVia2V5LCBzaWduVHhEYXRhLnRyYW5zYWN0aW9uLnNlZWQsIHBhcmFtcy5TVEFLRV9QUk9HUkFNX0lEKTtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB7XG4gICAgICAuLi5zaWduVHhEYXRhLnRyYW5zYWN0aW9uLFxuICAgICAgbmV3QWNjb3VudFB1YmtleSxcbiAgICAgIGZyb21QdWJrZXksXG4gICAgICBiYXNlUHVia2V5OiBmcm9tUHVia2V5LFxuICAgIH07XG4gICAgY29uc3QgcmF3VHJhbnNhY3Rpb24gPSBjb21waWxlRGVsZWdhdGVBbmRDcmVhdGVBY2NvdW50V2l0aFNlZWQodHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24ocmF3VHJhbnNhY3Rpb24pO1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gc2NyaXB0VXRpbC5nZXREZWxlZ2F0ZUFuZENyZWF0ZUFjY291bnRBcmd1bWVudHModHJhbnNhY3Rpb25JbnN0cnVjdGlvbiwgYWRkcmVzc0luZGV4KTtcblxuICAgIHJldHVybiBzaWduLnNpZ25UcmFuc2FjdGlvbih7IC4uLnNpZ25UeERhdGEsIHRyYW5zYWN0aW9uIH0sIHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIHNjcmlwdCwgYXJndW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgc2lnblN0YWNraW5nV2l0aGRyYXdUcmFuc2FjdGlvbihzaWduVHhEYXRhOiB0eXBlcy5zaWduU3Rha2luZ1dpdGhkcmF3VHlwZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyB0cmFuc3BvcnQsIGFwcFByaXZhdGVLZXksIGFwcElkLCBhZGRyZXNzSW5kZXggfSA9IHNpZ25UeERhdGE7XG4gICAgY29uc3QgYXV0aG9yaXplZFB1YmtleSA9IGF3YWl0IHRoaXMuZ2V0QWRkcmVzcyh0cmFuc3BvcnQsIGFwcFByaXZhdGVLZXksIGFwcElkLCBhZGRyZXNzSW5kZXgpO1xuICAgIGNvbnN0IHNjcmlwdCA9IHBhcmFtcy5TQ1JJUFQuU1RBS0lOR19XSVRIRFJBVy5zY3JpcHRXaXRoU2lnbmF0dXJlO1xuICAgIGNvbnN0IHJhd1RyYW5zYWN0aW9uID0gY29tcGlsZVN0YWtpbmdXaXRoZHJhdyh7IC4uLnNpZ25UeERhdGEudHJhbnNhY3Rpb24sIGF1dGhvcml6ZWRQdWJrZXkgfSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbnN0cnVjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbik7XG4gICAgY29uc3QgYXJndW1lbnQgPSBzY3JpcHRVdGlsLmdldFdpdGhkcmF3QXJndW1lbnRzKHRyYW5zYWN0aW9uSW5zdHJ1Y3Rpb24sIGFkZHJlc3NJbmRleCk7XG5cbiAgICByZXR1cm4gc2lnbi5zaWduVHJhbnNhY3Rpb24oc2lnblR4RGF0YSwgdHJhbnNhY3Rpb25JbnN0cnVjdGlvbiwgc2NyaXB0LCBhcmd1bWVudCk7XG4gIH1cblxuICBhc3luYyBzaWduU2lnbkluTWVzc2FnZShzaWduTXNnRGF0YTogdHlwZXMuc2lnblNpZ25Jbk1lc3NhZ2VUeXBlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IGFkZHJlc3NJbmRleCB9ID0gc2lnbk1zZ0RhdGE7XG4gICAgY29uc3Qgc2NyaXB0ID0gcGFyYW1zLlNDUklQVC5TSUdOX0lOLnNjcmlwdFdpdGhTaWduYXR1cmU7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNpZ25Nc2dEYXRhLm1lc3NhZ2U7XG4gICAgY29uc3QgYXJndW1lbnQgPSBzY3JpcHRVdGlsLmdldFNpZ25JbkFyZ3VtZW50cyhtZXNzYWdlLCBhZGRyZXNzSW5kZXgpO1xuXG4gICAgcmV0dXJuIHNpZ24uc2lnbk1lc3NhZ2Uoc2lnbk1zZ0RhdGEsIHNjcmlwdCwgYXJndW1lbnQpO1xuICB9XG5cbiAgYXN5bmMgc2lnbk1lc3NhZ2Uoc2lnbk1zZ0RhdGE6IHR5cGVzLnNpZ25NZXNzYWdlVHlwZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzSW5kZXggfSA9IHNpZ25Nc2dEYXRhO1xuICAgIGNvbnN0IHNjcmlwdCA9IHBhcmFtcy5TQ1JJUFQuU0lHTl9NRVNTQUdFLnNjcmlwdFdpdGhTaWduYXR1cmU7XG4gICAgY29uc3QgbWVzc2FnZSA9IHNpZ25Nc2dEYXRhLm1lc3NhZ2U7XG4gICAgY29uc3QgYXJndW1lbnQgPSBzY3JpcHRVdGlsLmdldFNpZ25NZXNzYWdlQXJndW1lbnRzKG1lc3NhZ2UsIGFkZHJlc3NJbmRleCk7XG5cbiAgICByZXR1cm4gc2lnbi5zaWduTWVzc2FnZShzaWduTXNnRGF0YSwgc2NyaXB0LCBhcmd1bWVudCk7XG4gIH1cblxuICBhc3luYyBzaWduVHJhbnNhY3Rpb24oc2lnblR4RGF0YTogdHlwZXMuc2lnblZlcnNpb25lZFRyYW5zYWN0aW9uVHlwZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzSW5kZXggfSA9IHNpZ25UeERhdGE7XG4gICAgY29uc3Qgc2NyaXB0ID0gcGFyYW1zLlNDUklQVC5TTUFSVF9DT05UUkFDVC5zY3JpcHRXaXRoU2lnbmF0dXJlO1xuICAgIGNvbnN0IGFyZ3VtZW50ID0gc2NyaXB0VXRpbC5nZXRTaWduVmVyc2lvbmVkQXJndW1lbnRzKHNpZ25UeERhdGEudHJhbnNhY3Rpb24ubWVzc2FnZSwgYWRkcmVzc0luZGV4KTtcbiAgICByZXR1cm4gc2lnbi5zaWduVHJhbnNhY3Rpb24oc2lnblR4RGF0YSwgc2lnblR4RGF0YS50cmFuc2FjdGlvbi5tZXNzYWdlLCBzY3JpcHQsIGFyZ3VtZW50KTtcbiAgfVxuXG4gIGFzeW5jIHNpZ25BbGxUcmFuc2FjdGlvbnMoc2lnblR4RGF0YTogdHlwZXMuc2lnblZlcnNpb25lZFRyYW5zYWN0aW9ucyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBzY3JpcHQgPSBwYXJhbXMuU0NSSVBULlNNQVJUX0NPTlRSQUNULnNjcmlwdFdpdGhTaWduYXR1cmU7XG4gICAgY29uc3QgeyBwcmVBY3Rpb25zIH0gPSBzY3JpcHRVdGlsLmdldFNjcmlwdFNpZ25pbmdQcmVBY3Rpb25zKHNpZ25UeERhdGEsIHNjcmlwdCk7XG5cbiAgICBjb25zdCBzaWduYXR1cmVzID0gYXdhaXQgc2lnbi5zaWduQWxsVHJhbnNhY3Rpb25zKHNpZ25UeERhdGEsIHByZUFjdGlvbnMpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZXMubWFwKChzaWduYXR1cmUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBfc2lnbmF0dXJlcyA9IFtdO1xuICAgICAgX3NpZ25hdHVyZXMucHVzaChzaWduYXR1cmUpO1xuICAgICAgY29uc3QgbWVzc2FnZVNpZ25hdHVyZXMgPSBzaWduVHhEYXRhLnRyYW5zYWN0aW9uW2luZGV4XS5zaWduYXR1cmVzO1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtZXNzYWdlU2lnbmF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBfc2lnbmF0dXJlcy5wdXNoKG1lc3NhZ2VTaWduYXR1cmVzW2ldKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZlcnNpb25lZFRyYW5zYWN0aW9uID0gbmV3IFZlcnNpb25lZFRyYW5zYWN0aW9uKHNpZ25UeERhdGEudHJhbnNhY3Rpb25baW5kZXhdLm1lc3NhZ2UsIF9zaWduYXR1cmVzKTtcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbSh2ZXJzaW9uZWRUcmFuc2FjdGlvbi5zZXJpYWxpemUoKSkudG9TdHJpbmcoJ2hleCcpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCB7IHR5cGVzIH07XG5leHBvcnQge1xuICBMQU1QT1JUU19QRVJfU09MLFxuICBTWVNURU1fUFJPR1JBTV9JRCxcbiAgVE9LRU5fUFJPR1JBTV9JRCxcbiAgVE9LRU5fMjAyMl9QUk9HUkFNX0lELFxuICBTVEFLRV9QUk9HUkFNX0lELFxuICBTVEFLRV9DT05GSUdfSUQsXG4gIEFTU09DSUFURURfVE9LRU5fUFJPR1JBTV9JRCxcbiAgU1lTVkFSX1JFTlRfUFVCS0VZLFxuICBTWVNWQVJfQ0xPQ0tfUFVCS0VZLFxuICBTWVNWQVJfU1RBS0VfSElTVE9SWV9QVUJLRVksXG59IGZyb20gJy4vY29uZmlnL3BhcmFtcyc7XG5leHBvcnQgZGVmYXVsdCBTb2xhbmE7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsR0FBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssR0FBQSxHQUFBRCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU0sTUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sS0FBQSxHQUFBQyx1QkFBQSxDQUFBUixPQUFBO0FBQXdDUyxPQUFBLENBQUFGLEtBQUEsR0FBQUEsS0FBQTtBQUN4QyxJQUFBRyxNQUFBLEdBQUFGLHVCQUFBLENBQUFSLE9BQUE7QUFDQSxJQUFBVyxVQUFBLEdBQUFILHVCQUFBLENBQUFSLE9BQUE7QUFDQSxJQUFBWSxVQUFBLEdBQUFKLHVCQUFBLENBQUFSLE9BQUE7QUFDQSxJQUFBYSxJQUFBLEdBQUFMLHVCQUFBLENBQUFSLE9BQUE7QUFDQSxJQUFBYyxXQUFBLEdBQUFkLE9BQUE7QUFDQSxJQUFBZSxlQUFBLEdBQUFmLE9BQUE7QUFRQSxJQUFBZ0IsUUFBQSxHQUFBaEIsT0FBQTtBQUNBLElBQUFpQixHQUFBLEdBQUFqQixPQUFBO0FBQ0EsSUFBQWtCLFlBQUEsR0FBQWxCLE9BQUE7QUFDQSxJQUFBbUIscUJBQUEsR0FBQW5CLE9BQUE7QUFBb0UsU0FBQW9CLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSx