@ignitionfi/spl-stake-pool 1.1.11 → 1.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,5 +15,5 @@ var solanaStakePool=function(exports,node_buffer){"use strict";function getDefau
15
15
  /*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */var hasRequiredSafeBuffer;function requireSafeBuffer(){if(hasRequiredSafeBuffer)return safeBuffer.exports;hasRequiredSafeBuffer=1;(function(module,exports){var buffer=requireBuffer();var Buffer=buffer.Buffer;function copyProps(src,dst){for(var key in src){dst[key]=src[key]}}if(Buffer.from&&Buffer.alloc&&Buffer.allocUnsafe&&Buffer.allocUnsafeSlow){module.exports=buffer}else{copyProps(buffer,exports);exports.Buffer=SafeBuffer}function SafeBuffer(arg,encodingOrOffset,length){return Buffer(arg,encodingOrOffset,length)}SafeBuffer.prototype=Object.create(Buffer.prototype);copyProps(Buffer,SafeBuffer);SafeBuffer.from=function(arg,encodingOrOffset,length){if(typeof arg==="number"){throw new TypeError("Argument must not be a number")}return Buffer(arg,encodingOrOffset,length)};SafeBuffer.alloc=function(size,fill,encoding){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}var buf=Buffer(size);if(fill!==undefined){if(typeof encoding==="string"){buf.fill(fill,encoding)}else{buf.fill(fill)}}else{buf.fill(0)}return buf};SafeBuffer.allocUnsafe=function(size){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}return Buffer(size)};SafeBuffer.allocUnsafeSlow=function(size){if(typeof size!=="number"){throw new TypeError("Argument must be a number")}return buffer.SlowBuffer(size)}})(safeBuffer,safeBuffer.exports);return safeBuffer.exports}var src;var hasRequiredSrc;function requireSrc(){if(hasRequiredSrc)return src;hasRequiredSrc=1;var _Buffer=requireSafeBuffer().Buffer;function base(ALPHABET){if(ALPHABET.length>=255){throw new TypeError("Alphabet too long")}var BASE_MAP=new Uint8Array(256);for(var j=0;j<BASE_MAP.length;j++){BASE_MAP[j]=255}for(var i=0;i<ALPHABET.length;i++){var x=ALPHABET.charAt(i);var xc=x.charCodeAt(0);if(BASE_MAP[xc]!==255){throw new TypeError(x+" is ambiguous")}BASE_MAP[xc]=i}var BASE=ALPHABET.length;var LEADER=ALPHABET.charAt(0);var FACTOR=Math.log(BASE)/Math.log(256);var iFACTOR=Math.log(256)/Math.log(BASE);function encode(source){if(Array.isArray(source)||source instanceof Uint8Array){source=_Buffer.from(source)}if(!_Buffer.isBuffer(source)){throw new TypeError("Expected Buffer")}if(source.length===0){return""}var zeroes=0;var length=0;var pbegin=0;var pend=source.length;while(pbegin!==pend&&source[pbegin]===0){pbegin++;zeroes++}var size=(pend-pbegin)*iFACTOR+1>>>0;var b58=new Uint8Array(size);while(pbegin!==pend){var carry=source[pbegin];var i=0;for(var it1=size-1;(carry!==0||i<length)&&it1!==-1;it1--,i++){carry+=256*b58[it1]>>>0;b58[it1]=carry%BASE>>>0;carry=carry/BASE>>>0}if(carry!==0){throw new Error("Non-zero carry")}length=i;pbegin++}var it2=size-length;while(it2!==size&&b58[it2]===0){it2++}var str=LEADER.repeat(zeroes);for(;it2<size;++it2){str+=ALPHABET.charAt(b58[it2])}return str}function decodeUnsafe(source){if(typeof source!=="string"){throw new TypeError("Expected String")}if(source.length===0){return _Buffer.alloc(0)}var psz=0;var zeroes=0;var length=0;while(source[psz]===LEADER){zeroes++;psz++}var size=(source.length-psz)*FACTOR+1>>>0;var b256=new Uint8Array(size);while(psz<source.length){var charCode=source.charCodeAt(psz);if(charCode>255){return}var carry=BASE_MAP[charCode];if(carry===255){return}var i=0;for(var it3=size-1;(carry!==0||i<length)&&it3!==-1;it3--,i++){carry+=BASE*b256[it3]>>>0;b256[it3]=carry%256>>>0;carry=carry/256>>>0}if(carry!==0){throw new Error("Non-zero carry")}length=i;psz++}var it4=size-length;while(it4!==size&&b256[it4]===0){it4++}var vch=_Buffer.allocUnsafe(zeroes+(size-it4));vch.fill(0,0,zeroes);var j=zeroes;while(it4!==size){vch[j++]=b256[it4++]}return vch}function decode(string){var buffer=decodeUnsafe(string);if(buffer){return buffer}throw new Error("Non-base"+BASE+" character")}return{encode:encode,decodeUnsafe:decodeUnsafe,decode:decode}}src=base;return src}var bs58$1;var hasRequiredBs58;function requireBs58(){if(hasRequiredBs58)return bs58$1;hasRequiredBs58=1;var basex=requireSrc();var ALPHABET="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";bs58$1=basex(ALPHABET);return bs58$1}var bs58Exports=requireBs58();var bs58=getDefaultExportFromCjs(bs58Exports);const sha256=sha256$1;var lib={};var encoding_lib={};var hasRequiredEncoding_lib;function requireEncoding_lib(){if(hasRequiredEncoding_lib)return encoding_lib;hasRequiredEncoding_lib=1;function inRange(a,min,max){return min<=a&&a<=max}function ToDictionary(o){if(o===undefined)return{};if(o===Object(o))return o;throw TypeError("Could not convert argument to dictionary")}function stringToCodePoints(string){var s=String(string);var n=s.length;var i=0;var u=[];while(i<n){var c=s.charCodeAt(i);if(c<55296||c>57343){u.push(c)}else if(56320<=c&&c<=57343){u.push(65533)}else if(55296<=c&&c<=56319){if(i===n-1){u.push(65533)}else{var d=string.charCodeAt(i+1);if(56320<=d&&d<=57343){var a=c&1023;var b=d&1023;u.push(65536+(a<<10)+b);i+=1}else{u.push(65533)}}}i+=1}return u}function codePointsToString(code_points){var s="";for(var i=0;i<code_points.length;++i){var cp=code_points[i];if(cp<=65535){s+=String.fromCharCode(cp)}else{cp-=65536;s+=String.fromCharCode((cp>>10)+55296,(cp&1023)+56320)}}return s}var end_of_stream=-1;function Stream(tokens){this.tokens=[].slice.call(tokens)}Stream.prototype={endOfStream:function(){return!this.tokens.length},read:function(){if(!this.tokens.length)return end_of_stream;return this.tokens.shift()},prepend:function(token){if(Array.isArray(token)){var tokens=token;while(tokens.length)this.tokens.unshift(tokens.pop())}else{this.tokens.unshift(token)}},push:function(token){if(Array.isArray(token)){var tokens=token;while(tokens.length)this.tokens.push(tokens.shift())}else{this.tokens.push(token)}}};var finished=-1;function decoderError(fatal,opt_code_point){if(fatal)throw TypeError("Decoder error");return opt_code_point||65533}var DEFAULT_ENCODING="utf-8";function TextDecoder(encoding,options){if(!(this instanceof TextDecoder)){return new TextDecoder(encoding,options)}encoding=encoding!==undefined?String(encoding).toLowerCase():DEFAULT_ENCODING;if(encoding!==DEFAULT_ENCODING){throw new Error("Encoding not supported. Only utf-8 is supported")}options=ToDictionary(options);this._streaming=false;this._BOMseen=false;this._decoder=null;this._fatal=Boolean(options["fatal"]);this._ignoreBOM=Boolean(options["ignoreBOM"]);Object.defineProperty(this,"encoding",{value:"utf-8"});Object.defineProperty(this,"fatal",{value:this._fatal});Object.defineProperty(this,"ignoreBOM",{value:this._ignoreBOM})}TextDecoder.prototype={decode:function decode(input,options){var bytes;if(typeof input==="object"&&input instanceof ArrayBuffer){bytes=new Uint8Array(input)}else if(typeof input==="object"&&"buffer"in input&&input.buffer instanceof ArrayBuffer){bytes=new Uint8Array(input.buffer,input.byteOffset,input.byteLength)}else{bytes=new Uint8Array(0)}options=ToDictionary(options);if(!this._streaming){this._decoder=new UTF8Decoder({fatal:this._fatal});this._BOMseen=false}this._streaming=Boolean(options["stream"]);var input_stream=new Stream(bytes);var code_points=[];var result;while(!input_stream.endOfStream()){result=this._decoder.handler(input_stream,input_stream.read());if(result===finished)break;if(result===null)continue;if(Array.isArray(result))code_points.push.apply(code_points,result);else code_points.push(result)}if(!this._streaming){do{result=this._decoder.handler(input_stream,input_stream.read());if(result===finished)break;if(result===null)continue;if(Array.isArray(result))code_points.push.apply(code_points,result);else code_points.push(result)}while(!input_stream.endOfStream());this._decoder=null}if(code_points.length){if(["utf-8"].indexOf(this.encoding)!==-1&&!this._ignoreBOM&&!this._BOMseen){if(code_points[0]===65279){this._BOMseen=true;code_points.shift()}else{this._BOMseen=true}}}return codePointsToString(code_points)}};function TextEncoder(encoding,options){if(!(this instanceof TextEncoder))return new TextEncoder(encoding,options);encoding=encoding!==undefined?String(encoding).toLowerCase():DEFAULT_ENCODING;if(encoding!==DEFAULT_ENCODING){throw new Error("Encoding not supported. Only utf-8 is supported")}options=ToDictionary(options);this._streaming=false;this._encoder=null;this._options={fatal:Boolean(options["fatal"])};Object.defineProperty(this,"encoding",{value:"utf-8"})}TextEncoder.prototype={encode:function encode(opt_string,options){opt_string=opt_string?String(opt_string):"";options=ToDictionary(options);if(!this._streaming)this._encoder=new UTF8Encoder(this._options);this._streaming=Boolean(options["stream"]);var bytes=[];var input_stream=new Stream(stringToCodePoints(opt_string));var result;while(!input_stream.endOfStream()){result=this._encoder.handler(input_stream,input_stream.read());if(result===finished)break;if(Array.isArray(result))bytes.push.apply(bytes,result);else bytes.push(result)}if(!this._streaming){while(true){result=this._encoder.handler(input_stream,input_stream.read());if(result===finished)break;if(Array.isArray(result))bytes.push.apply(bytes,result);else bytes.push(result)}this._encoder=null}return new Uint8Array(bytes)}};function UTF8Decoder(options){var fatal=options.fatal;var utf8_code_point=0,utf8_bytes_seen=0,utf8_bytes_needed=0,utf8_lower_boundary=128,utf8_upper_boundary=191;this.handler=function(stream,bite){if(bite===end_of_stream&&utf8_bytes_needed!==0){utf8_bytes_needed=0;return decoderError(fatal)}if(bite===end_of_stream)return finished;if(utf8_bytes_needed===0){if(inRange(bite,0,127)){return bite}if(inRange(bite,194,223)){utf8_bytes_needed=1;utf8_code_point=bite-192}else if(inRange(bite,224,239)){if(bite===224)utf8_lower_boundary=160;if(bite===237)utf8_upper_boundary=159;utf8_bytes_needed=2;utf8_code_point=bite-224}else if(inRange(bite,240,244)){if(bite===240)utf8_lower_boundary=144;if(bite===244)utf8_upper_boundary=143;utf8_bytes_needed=3;utf8_code_point=bite-240}else{return decoderError(fatal)}utf8_code_point=utf8_code_point<<6*utf8_bytes_needed;return null}if(!inRange(bite,utf8_lower_boundary,utf8_upper_boundary)){utf8_code_point=utf8_bytes_needed=utf8_bytes_seen=0;utf8_lower_boundary=128;utf8_upper_boundary=191;stream.prepend(bite);return decoderError(fatal)}utf8_lower_boundary=128;utf8_upper_boundary=191;utf8_bytes_seen+=1;utf8_code_point+=bite-128<<6*(utf8_bytes_needed-utf8_bytes_seen);if(utf8_bytes_seen!==utf8_bytes_needed)return null;var code_point=utf8_code_point;utf8_code_point=utf8_bytes_needed=utf8_bytes_seen=0;return code_point}}function UTF8Encoder(options){options.fatal;this.handler=function(stream,code_point){if(code_point===end_of_stream)return finished;if(inRange(code_point,0,127))return code_point;var count,offset;if(inRange(code_point,128,2047)){count=1;offset=192}else if(inRange(code_point,2048,65535)){count=2;offset=224}else if(inRange(code_point,65536,1114111)){count=3;offset=240}var bytes=[(code_point>>6*count)+offset];while(count>0){var temp=code_point>>6*(count-1);bytes.push(128|temp&63);count-=1}return bytes}}encoding_lib.TextEncoder=TextEncoder;encoding_lib.TextDecoder=TextDecoder;return encoding_lib}var hasRequiredLib;function requireLib(){if(hasRequiredLib)return lib;hasRequiredLib=1;var __createBinding=lib&&lib.__createBinding||(Object.create?function(o,m,k,k2){if(k2===undefined)k2=k;Object.defineProperty(o,k2,{enumerable:true,get:function(){return m[k]}})}:function(o,m,k,k2){if(k2===undefined)k2=k;o[k2]=m[k]});var __setModuleDefault=lib&&lib.__setModuleDefault||(Object.create?function(o,v){Object.defineProperty(o,"default",{enumerable:true,value:v})}:function(o,v){o["default"]=v});var __decorate=lib&&lib.__decorate||function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect==="object"&&typeof Reflect.decorate==="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)if(d=decorators[i])r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r;return c>3&&r&&Object.defineProperty(target,key,r),r};var __importStar=lib&&lib.__importStar||function(mod){if(mod&&mod.__esModule)return mod;var result={};if(mod!=null)for(var k in mod)if(k!=="default"&&Object.hasOwnProperty.call(mod,k))__createBinding(result,mod,k);__setModuleDefault(result,mod);return result};var __importDefault=lib&&lib.__importDefault||function(mod){return mod&&mod.__esModule?mod:{default:mod}};Object.defineProperty(lib,"__esModule",{value:true});lib.deserializeUnchecked=lib.deserialize=lib.serialize=lib.BinaryReader=lib.BinaryWriter=lib.BorshError=lib.baseDecode=lib.baseEncode=void 0;const bn_js_1=__importDefault(requireBn());const bs58_1=__importDefault(requireBs58());const encoding=__importStar(requireEncoding_lib());const ResolvedTextDecoder=typeof TextDecoder!=="function"?encoding.TextDecoder:TextDecoder;const textDecoder=new ResolvedTextDecoder("utf-8",{fatal:true});function baseEncode(value){if(typeof value==="string"){value=Buffer.from(value,"utf8")}return bs58_1.default.encode(Buffer.from(value))}lib.baseEncode=baseEncode;function baseDecode(value){return Buffer.from(bs58_1.default.decode(value))}lib.baseDecode=baseDecode;const INITIAL_LENGTH=1024;class BorshError extends Error{constructor(message){super(message);this.fieldPath=[];this.originalMessage=message}addToFieldPath(fieldName){this.fieldPath.splice(0,0,fieldName);this.message=this.originalMessage+": "+this.fieldPath.join(".")}}lib.BorshError=BorshError;class BinaryWriter{constructor(){this.buf=Buffer.alloc(INITIAL_LENGTH);this.length=0}maybeResize(){if(this.buf.length<16+this.length){this.buf=Buffer.concat([this.buf,Buffer.alloc(INITIAL_LENGTH)])}}writeU8(value){this.maybeResize();this.buf.writeUInt8(value,this.length);this.length+=1}writeU16(value){this.maybeResize();this.buf.writeUInt16LE(value,this.length);this.length+=2}writeU32(value){this.maybeResize();this.buf.writeUInt32LE(value,this.length);this.length+=4}writeU64(value){this.maybeResize();this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray("le",8)))}writeU128(value){this.maybeResize();this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray("le",16)))}writeU256(value){this.maybeResize();this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray("le",32)))}writeU512(value){this.maybeResize();this.writeBuffer(Buffer.from(new bn_js_1.default(value).toArray("le",64)))}writeBuffer(buffer){this.buf=Buffer.concat([Buffer.from(this.buf.subarray(0,this.length)),buffer,Buffer.alloc(INITIAL_LENGTH)]);this.length+=buffer.length}writeString(str){this.maybeResize();const b=Buffer.from(str,"utf8");this.writeU32(b.length);this.writeBuffer(b)}writeFixedArray(array){this.writeBuffer(Buffer.from(array))}writeArray(array,fn){this.maybeResize();this.writeU32(array.length);for(const elem of array){this.maybeResize();fn(elem)}}toArray(){return this.buf.subarray(0,this.length)}}lib.BinaryWriter=BinaryWriter;function handlingRangeError(target,propertyKey,propertyDescriptor){const originalMethod=propertyDescriptor.value;propertyDescriptor.value=function(...args){try{return originalMethod.apply(this,args)}catch(e){if(e instanceof RangeError){const code=e.code;if(["ERR_BUFFER_OUT_OF_BOUNDS","ERR_OUT_OF_RANGE"].indexOf(code)>=0){throw new BorshError("Reached the end of buffer when deserializing")}}throw e}}}class BinaryReader{constructor(buf){this.buf=buf;this.offset=0}readU8(){const value=this.buf.readUInt8(this.offset);this.offset+=1;return value}readU16(){const value=this.buf.readUInt16LE(this.offset);this.offset+=2;return value}readU32(){const value=this.buf.readUInt32LE(this.offset);this.offset+=4;return value}readU64(){const buf=this.readBuffer(8);return new bn_js_1.default(buf,"le")}readU128(){const buf=this.readBuffer(16);return new bn_js_1.default(buf,"le")}readU256(){const buf=this.readBuffer(32);return new bn_js_1.default(buf,"le")}readU512(){const buf=this.readBuffer(64);return new bn_js_1.default(buf,"le")}readBuffer(len){if(this.offset+len>this.buf.length){throw new BorshError(`Expected buffer length ${len} isn't within bounds`)}const result=this.buf.slice(this.offset,this.offset+len);this.offset+=len;return result}readString(){const len=this.readU32();const buf=this.readBuffer(len);try{return textDecoder.decode(buf)}catch(e){throw new BorshError(`Error decoding UTF-8 string: ${e}`)}}readFixedArray(len){return new Uint8Array(this.readBuffer(len))}readArray(fn){const len=this.readU32();const result=Array();for(let i=0;i<len;++i){result.push(fn())}return result}}__decorate([handlingRangeError],BinaryReader.prototype,"readU8",null);__decorate([handlingRangeError],BinaryReader.prototype,"readU16",null);__decorate([handlingRangeError],BinaryReader.prototype,"readU32",null);__decorate([handlingRangeError],BinaryReader.prototype,"readU64",null);__decorate([handlingRangeError],BinaryReader.prototype,"readU128",null);__decorate([handlingRangeError],BinaryReader.prototype,"readU256",null);__decorate([handlingRangeError],BinaryReader.prototype,"readU512",null);__decorate([handlingRangeError],BinaryReader.prototype,"readString",null);__decorate([handlingRangeError],BinaryReader.prototype,"readFixedArray",null);__decorate([handlingRangeError],BinaryReader.prototype,"readArray",null);lib.BinaryReader=BinaryReader;function capitalizeFirstLetter(string){return string.charAt(0).toUpperCase()+string.slice(1)}function serializeField(schema,fieldName,value,fieldType,writer){try{if(typeof fieldType==="string"){writer[`write${capitalizeFirstLetter(fieldType)}`](value)}else if(fieldType instanceof Array){if(typeof fieldType[0]==="number"){if(value.length!==fieldType[0]){throw new BorshError(`Expecting byte array of length ${fieldType[0]}, but got ${value.length} bytes`)}writer.writeFixedArray(value)}else if(fieldType.length===2&&typeof fieldType[1]==="number"){if(value.length!==fieldType[1]){throw new BorshError(`Expecting byte array of length ${fieldType[1]}, but got ${value.length} bytes`)}for(let i=0;i<fieldType[1];i++){serializeField(schema,null,value[i],fieldType[0],writer)}}else{writer.writeArray(value,item=>{serializeField(schema,fieldName,item,fieldType[0],writer)})}}else if(fieldType.kind!==undefined){switch(fieldType.kind){case"option":{if(value===null||value===undefined){writer.writeU8(0)}else{writer.writeU8(1);serializeField(schema,fieldName,value,fieldType.type,writer)}break}case"map":{writer.writeU32(value.size);value.forEach((val,key)=>{serializeField(schema,fieldName,key,fieldType.key,writer);serializeField(schema,fieldName,val,fieldType.value,writer)});break}default:throw new BorshError(`FieldType ${fieldType} unrecognized`)}}else{serializeStruct(schema,value,writer)}}catch(error){if(error instanceof BorshError){error.addToFieldPath(fieldName)}throw error}}function serializeStruct(schema,obj,writer){if(typeof obj.borshSerialize==="function"){obj.borshSerialize(writer);return}const structSchema=schema.get(obj.constructor);if(!structSchema){throw new BorshError(`Class ${obj.constructor.name} is missing in schema`)}if(structSchema.kind==="struct"){structSchema.fields.map(([fieldName,fieldType])=>{serializeField(schema,fieldName,obj[fieldName],fieldType,writer)})}else if(structSchema.kind==="enum"){const name=obj[structSchema.field];for(let idx=0;idx<structSchema.values.length;++idx){const[fieldName,fieldType]=structSchema.values[idx];if(fieldName===name){writer.writeU8(idx);serializeField(schema,fieldName,obj[fieldName],fieldType,writer);break}}}else{throw new BorshError(`Unexpected schema kind: ${structSchema.kind} for ${obj.constructor.name}`)}}function serialize(schema,obj,Writer=BinaryWriter){const writer=new Writer;serializeStruct(schema,obj,writer);return writer.toArray()}lib.serialize=serialize;function deserializeField(schema,fieldName,fieldType,reader){try{if(typeof fieldType==="string"){return reader[`read${capitalizeFirstLetter(fieldType)}`]()}if(fieldType instanceof Array){if(typeof fieldType[0]==="number"){return reader.readFixedArray(fieldType[0])}else if(typeof fieldType[1]==="number"){const arr=[];for(let i=0;i<fieldType[1];i++){arr.push(deserializeField(schema,null,fieldType[0],reader))}return arr}else{return reader.readArray(()=>deserializeField(schema,fieldName,fieldType[0],reader))}}if(fieldType.kind==="option"){const option=reader.readU8();if(option){return deserializeField(schema,fieldName,fieldType.type,reader)}return undefined}if(fieldType.kind==="map"){let map=new Map;const length=reader.readU32();for(let i=0;i<length;i++){const key=deserializeField(schema,fieldName,fieldType.key,reader);const val=deserializeField(schema,fieldName,fieldType.value,reader);map.set(key,val)}return map}return deserializeStruct(schema,fieldType,reader)}catch(error){if(error instanceof BorshError){error.addToFieldPath(fieldName)}throw error}}function deserializeStruct(schema,classType,reader){if(typeof classType.borshDeserialize==="function"){return classType.borshDeserialize(reader)}const structSchema=schema.get(classType);if(!structSchema){throw new BorshError(`Class ${classType.name} is missing in schema`)}if(structSchema.kind==="struct"){const result={};for(const[fieldName,fieldType]of schema.get(classType).fields){result[fieldName]=deserializeField(schema,fieldName,fieldType,reader)}return new classType(result)}if(structSchema.kind==="enum"){const idx=reader.readU8();if(idx>=structSchema.values.length){throw new BorshError(`Enum index: ${idx} is out of range`)}const[fieldName,fieldType]=structSchema.values[idx];const fieldValue=deserializeField(schema,fieldName,fieldType,reader);return new classType({[fieldName]:fieldValue})}throw new BorshError(`Unexpected schema kind: ${structSchema.kind} for ${classType.constructor.name}`)}function deserialize(schema,classType,buffer,Reader=BinaryReader){const reader=new Reader(buffer);const result=deserializeStruct(schema,classType,reader);if(reader.offset<buffer.length){throw new BorshError(`Unexpected ${buffer.length-reader.offset} bytes after deserialized data`)}return result}lib.deserialize=deserialize;function deserializeUnchecked(schema,classType,buffer,Reader=BinaryReader){const reader=new Reader(buffer);return deserializeStruct(schema,classType,reader)}lib.deserializeUnchecked=deserializeUnchecked;return lib}var libExports=requireLib();var Layout$1={};var hasRequiredLayout$1;function requireLayout$1(){if(hasRequiredLayout$1)return Layout$1;hasRequiredLayout$1=1;Object.defineProperty(Layout$1,"__esModule",{value:true});Layout$1.s16=Layout$1.s8=Layout$1.nu64be=Layout$1.u48be=Layout$1.u40be=Layout$1.u32be=Layout$1.u24be=Layout$1.u16be=Layout$1.nu64=Layout$1.u48=Layout$1.u40=Layout$1.u32=Layout$1.u24=Layout$1.u16=Layout$1.u8=Layout$1.offset=Layout$1.greedy=Layout$1.Constant=Layout$1.UTF8=Layout$1.CString=Layout$1.Blob=Layout$1.Boolean=Layout$1.BitField=Layout$1.BitStructure=Layout$1.VariantLayout=Layout$1.Union=Layout$1.UnionLayoutDiscriminator=Layout$1.UnionDiscriminator=Layout$1.Structure=Layout$1.Sequence=Layout$1.DoubleBE=Layout$1.Double=Layout$1.FloatBE=Layout$1.Float=Layout$1.NearInt64BE=Layout$1.NearInt64=Layout$1.NearUInt64BE=Layout$1.NearUInt64=Layout$1.IntBE=Layout$1.Int=Layout$1.UIntBE=Layout$1.UInt=Layout$1.OffsetLayout=Layout$1.GreedyCount=Layout$1.ExternalLayout=Layout$1.bindConstructorLayout=Layout$1.nameWithProperty=Layout$1.Layout=Layout$1.uint8ArrayToBuffer=Layout$1.checkUint8Array=void 0;Layout$1.constant=Layout$1.utf8=Layout$1.cstr=Layout$1.blob=Layout$1.unionLayoutDiscriminator=Layout$1.union=Layout$1.seq=Layout$1.bits=Layout$1.struct=Layout$1.f64be=Layout$1.f64=Layout$1.f32be=Layout$1.f32=Layout$1.ns64be=Layout$1.s48be=Layout$1.s40be=Layout$1.s32be=Layout$1.s24be=Layout$1.s16be=Layout$1.ns64=Layout$1.s48=Layout$1.s40=Layout$1.s32=Layout$1.s24=void 0;const buffer_1=requireBuffer();function checkUint8Array(b){if(!(b instanceof Uint8Array)){throw new TypeError("b must be a Uint8Array")}}Layout$1.checkUint8Array=checkUint8Array;function uint8ArrayToBuffer(b){checkUint8Array(b);return buffer_1.Buffer.from(b.buffer,b.byteOffset,b.length)}Layout$1.uint8ArrayToBuffer=uint8ArrayToBuffer;class Layout{constructor(span,property){if(!Number.isInteger(span)){throw new TypeError("span must be an integer")}this.span=span;this.property=property}makeDestinationObject(){return{}}getSpan(b,offset){if(0>this.span){throw new RangeError("indeterminate span")}return this.span}replicate(property){const rv=Object.create(this.constructor.prototype);Object.assign(rv,this);rv.property=property;return rv}fromArray(values){return undefined}}Layout$1.Layout=Layout;function nameWithProperty(name,lo){if(lo.property){return name+"["+lo.property+"]"}return name}Layout$1.nameWithProperty=nameWithProperty;function bindConstructorLayout(Class,layout){if("function"!==typeof Class){throw new TypeError("Class must be constructor")}if(Object.prototype.hasOwnProperty.call(Class,"layout_")){throw new Error("Class is already bound to a layout")}if(!(layout&&layout instanceof Layout)){throw new TypeError("layout must be a Layout")}if(Object.prototype.hasOwnProperty.call(layout,"boundConstructor_")){throw new Error("layout is already bound to a constructor")}Class.layout_=layout;layout.boundConstructor_=Class;layout.makeDestinationObject=()=>new Class;Object.defineProperty(Class.prototype,"encode",{value(b,offset){return layout.encode(this,b,offset)},writable:true});Object.defineProperty(Class,"decode",{value(b,offset){return layout.decode(b,offset)},writable:true})}Layout$1.bindConstructorLayout=bindConstructorLayout;class ExternalLayout extends Layout{isCount(){throw new Error("ExternalLayout is abstract")}}Layout$1.ExternalLayout=ExternalLayout;class GreedyCount extends ExternalLayout{constructor(elementSpan=1,property){if(!Number.isInteger(elementSpan)||0>=elementSpan){throw new TypeError("elementSpan must be a (positive) integer")}super(-1,property);this.elementSpan=elementSpan}isCount(){return true}decode(b,offset=0){checkUint8Array(b);const rem=b.length-offset;return Math.floor(rem/this.elementSpan)}encode(src,b,offset){return 0}}Layout$1.GreedyCount=GreedyCount;class OffsetLayout extends ExternalLayout{constructor(layout,offset=0,property){if(!(layout instanceof Layout)){throw new TypeError("layout must be a Layout")}if(!Number.isInteger(offset)){throw new TypeError("offset must be integer or undefined")}super(layout.span,property||layout.property);this.layout=layout;this.offset=offset}isCount(){return this.layout instanceof UInt||this.layout instanceof UIntBE}decode(b,offset=0){return this.layout.decode(b,offset+this.offset)}encode(src,b,offset=0){return this.layout.encode(src,b,offset+this.offset)}}Layout$1.OffsetLayout=OffsetLayout;class UInt extends Layout{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset=0){return uint8ArrayToBuffer(b).readUIntLE(offset,this.span)}encode(src,b,offset=0){uint8ArrayToBuffer(b).writeUIntLE(src,offset,this.span);return this.span}}Layout$1.UInt=UInt;class UIntBE extends Layout{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset=0){return uint8ArrayToBuffer(b).readUIntBE(offset,this.span)}encode(src,b,offset=0){uint8ArrayToBuffer(b).writeUIntBE(src,offset,this.span);return this.span}}Layout$1.UIntBE=UIntBE;class Int extends Layout{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset=0){return uint8ArrayToBuffer(b).readIntLE(offset,this.span)}encode(src,b,offset=0){uint8ArrayToBuffer(b).writeIntLE(src,offset,this.span);return this.span}}Layout$1.Int=Int;class IntBE extends Layout{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset=0){return uint8ArrayToBuffer(b).readIntBE(offset,this.span)}encode(src,b,offset=0){uint8ArrayToBuffer(b).writeIntBE(src,offset,this.span);return this.span}}Layout$1.IntBE=IntBE;const V2E32=Math.pow(2,32);function divmodInt64(src){const hi32=Math.floor(src/V2E32);const lo32=src-hi32*V2E32;return{hi32:hi32,lo32:lo32}}function roundedInt64(hi32,lo32){return hi32*V2E32+lo32}class NearUInt64 extends Layout{constructor(property){super(8,property)}decode(b,offset=0){const buffer=uint8ArrayToBuffer(b);const lo32=buffer.readUInt32LE(offset);const hi32=buffer.readUInt32LE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset=0){const split=divmodInt64(src);const buffer=uint8ArrayToBuffer(b);buffer.writeUInt32LE(split.lo32,offset);buffer.writeUInt32LE(split.hi32,offset+4);return 8}}Layout$1.NearUInt64=NearUInt64;class NearUInt64BE extends Layout{constructor(property){super(8,property)}decode(b,offset=0){const buffer=uint8ArrayToBuffer(b);const hi32=buffer.readUInt32BE(offset);const lo32=buffer.readUInt32BE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset=0){const split=divmodInt64(src);const buffer=uint8ArrayToBuffer(b);buffer.writeUInt32BE(split.hi32,offset);buffer.writeUInt32BE(split.lo32,offset+4);return 8}}Layout$1.NearUInt64BE=NearUInt64BE;class NearInt64 extends Layout{constructor(property){super(8,property)}decode(b,offset=0){const buffer=uint8ArrayToBuffer(b);const lo32=buffer.readUInt32LE(offset);const hi32=buffer.readInt32LE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset=0){const split=divmodInt64(src);const buffer=uint8ArrayToBuffer(b);buffer.writeUInt32LE(split.lo32,offset);buffer.writeInt32LE(split.hi32,offset+4);return 8}}Layout$1.NearInt64=NearInt64;class NearInt64BE extends Layout{constructor(property){super(8,property)}decode(b,offset=0){const buffer=uint8ArrayToBuffer(b);const hi32=buffer.readInt32BE(offset);const lo32=buffer.readUInt32BE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset=0){const split=divmodInt64(src);const buffer=uint8ArrayToBuffer(b);buffer.writeInt32BE(split.hi32,offset);buffer.writeUInt32BE(split.lo32,offset+4);return 8}}Layout$1.NearInt64BE=NearInt64BE;class Float extends Layout{constructor(property){super(4,property)}decode(b,offset=0){return uint8ArrayToBuffer(b).readFloatLE(offset)}encode(src,b,offset=0){uint8ArrayToBuffer(b).writeFloatLE(src,offset);return 4}}Layout$1.Float=Float;class FloatBE extends Layout{constructor(property){super(4,property)}decode(b,offset=0){return uint8ArrayToBuffer(b).readFloatBE(offset)}encode(src,b,offset=0){uint8ArrayToBuffer(b).writeFloatBE(src,offset);return 4}}Layout$1.FloatBE=FloatBE;class Double extends Layout{constructor(property){super(8,property)}decode(b,offset=0){return uint8ArrayToBuffer(b).readDoubleLE(offset)}encode(src,b,offset=0){uint8ArrayToBuffer(b).writeDoubleLE(src,offset);return 8}}Layout$1.Double=Double;class DoubleBE extends Layout{constructor(property){super(8,property)}decode(b,offset=0){return uint8ArrayToBuffer(b).readDoubleBE(offset)}encode(src,b,offset=0){uint8ArrayToBuffer(b).writeDoubleBE(src,offset);return 8}}Layout$1.DoubleBE=DoubleBE;class Sequence extends Layout{constructor(elementLayout,count,property){if(!(elementLayout instanceof Layout)){throw new TypeError("elementLayout must be a Layout")}if(!(count instanceof ExternalLayout&&count.isCount()||Number.isInteger(count)&&0<=count)){throw new TypeError("count must be non-negative integer "+"or an unsigned integer ExternalLayout")}let span=-1;if(!(count instanceof ExternalLayout)&&0<elementLayout.span){span=count*elementLayout.span}super(span,property);this.elementLayout=elementLayout;this.count=count}getSpan(b,offset=0){if(0<=this.span){return this.span}let span=0;let count=this.count;if(count instanceof ExternalLayout){count=count.decode(b,offset)}if(0<this.elementLayout.span){span=count*this.elementLayout.span}else{let idx=0;while(idx<count){span+=this.elementLayout.getSpan(b,offset+span);++idx}}return span}decode(b,offset=0){const rv=[];let i=0;let count=this.count;if(count instanceof ExternalLayout){count=count.decode(b,offset)}while(i<count){rv.push(this.elementLayout.decode(b,offset));offset+=this.elementLayout.getSpan(b,offset);i+=1}return rv}encode(src,b,offset=0){const elo=this.elementLayout;const span=src.reduce((span,v)=>span+elo.encode(v,b,offset+span),0);if(this.count instanceof ExternalLayout){this.count.encode(src.length,b,offset)}return span}}Layout$1.Sequence=Sequence;class Structure extends Layout{constructor(fields,property,decodePrefixes){if(!(Array.isArray(fields)&&fields.reduce((acc,v)=>acc&&v instanceof Layout,true))){throw new TypeError("fields must be array of Layout instances")}if("boolean"===typeof property&&undefined===decodePrefixes){decodePrefixes=property;property=undefined}for(const fd of fields){if(0>fd.span&&undefined===fd.property){throw new Error("fields cannot contain unnamed variable-length layout")}}let span=-1;try{span=fields.reduce((span,fd)=>span+fd.getSpan(),0)}catch(e){}super(span,property);this.fields=fields;this.decodePrefixes=!!decodePrefixes}getSpan(b,offset=0){if(0<=this.span){return this.span}let span=0;try{span=this.fields.reduce((span,fd)=>{const fsp=fd.getSpan(b,offset);offset+=fsp;return span+fsp},0)}catch(e){throw new RangeError("indeterminate span")}return span}decode(b,offset=0){checkUint8Array(b);const dest=this.makeDestinationObject();for(const fd of this.fields){if(undefined!==fd.property){dest[fd.property]=fd.decode(b,offset)}offset+=fd.getSpan(b,offset);if(this.decodePrefixes&&b.length===offset){break}}return dest}encode(src,b,offset=0){const firstOffset=offset;let lastOffset=0;let lastWrote=0;for(const fd of this.fields){let span=fd.span;lastWrote=0<span?span:0;if(undefined!==fd.property){const fv=src[fd.property];if(undefined!==fv){lastWrote=fd.encode(fv,b,offset);if(0>span){span=fd.getSpan(b,offset)}}}lastOffset=offset;offset+=span}return lastOffset+lastWrote-firstOffset}fromArray(values){const dest=this.makeDestinationObject();for(const fd of this.fields){if(undefined!==fd.property&&0<values.length){dest[fd.property]=values.shift()}}return dest}layoutFor(property){if("string"!==typeof property){throw new TypeError("property must be string")}for(const fd of this.fields){if(fd.property===property){return fd}}return undefined}offsetOf(property){if("string"!==typeof property){throw new TypeError("property must be string")}let offset=0;for(const fd of this.fields){if(fd.property===property){return offset}if(0>fd.span){offset=-1}else if(0<=offset){offset+=fd.span}}return undefined}}Layout$1.Structure=Structure;class UnionDiscriminator{constructor(property){this.property=property}decode(b,offset){throw new Error("UnionDiscriminator is abstract")}encode(src,b,offset){throw new Error("UnionDiscriminator is abstract")}}Layout$1.UnionDiscriminator=UnionDiscriminator;class UnionLayoutDiscriminator extends UnionDiscriminator{constructor(layout,property){if(!(layout instanceof ExternalLayout&&layout.isCount())){throw new TypeError("layout must be an unsigned integer ExternalLayout")}super(property||layout.property||"variant");this.layout=layout}decode(b,offset){return this.layout.decode(b,offset)}encode(src,b,offset){return this.layout.encode(src,b,offset)}}Layout$1.UnionLayoutDiscriminator=UnionLayoutDiscriminator;class Union extends Layout{constructor(discr,defaultLayout,property){let discriminator;if(discr instanceof UInt||discr instanceof UIntBE){discriminator=new UnionLayoutDiscriminator(new OffsetLayout(discr))}else if(discr instanceof ExternalLayout&&discr.isCount()){discriminator=new UnionLayoutDiscriminator(discr)}else if(!(discr instanceof UnionDiscriminator)){throw new TypeError("discr must be a UnionDiscriminator "+"or an unsigned integer layout")}else{discriminator=discr}if(undefined===defaultLayout){defaultLayout=null}if(!(null===defaultLayout||defaultLayout instanceof Layout)){throw new TypeError("defaultLayout must be null or a Layout")}if(null!==defaultLayout){if(0>defaultLayout.span){throw new Error("defaultLayout must have constant span")}if(undefined===defaultLayout.property){defaultLayout=defaultLayout.replicate("content")}}let span=-1;if(defaultLayout){span=defaultLayout.span;if(0<=span&&(discr instanceof UInt||discr instanceof UIntBE)){span+=discriminator.layout.span}}super(span,property);this.discriminator=discriminator;this.usesPrefixDiscriminator=discr instanceof UInt||discr instanceof UIntBE;this.defaultLayout=defaultLayout;this.registry={};let boundGetSourceVariant=this.defaultGetSourceVariant.bind(this);this.getSourceVariant=function(src){return boundGetSourceVariant(src)};this.configGetSourceVariant=function(gsv){boundGetSourceVariant=gsv.bind(this)}}getSpan(b,offset=0){if(0<=this.span){return this.span}const vlo=this.getVariant(b,offset);if(!vlo){throw new Error("unable to determine span for unrecognized variant")}return vlo.getSpan(b,offset)}defaultGetSourceVariant(src){if(Object.prototype.hasOwnProperty.call(src,this.discriminator.property)){if(this.defaultLayout&&this.defaultLayout.property&&Object.prototype.hasOwnProperty.call(src,this.defaultLayout.property)){return undefined}const vlo=this.registry[src[this.discriminator.property]];if(vlo&&(!vlo.layout||vlo.property&&Object.prototype.hasOwnProperty.call(src,vlo.property))){return vlo}}else{for(const tag in this.registry){const vlo=this.registry[tag];if(vlo.property&&Object.prototype.hasOwnProperty.call(src,vlo.property)){return vlo}}}throw new Error("unable to infer src variant")}decode(b,offset=0){let dest;const dlo=this.discriminator;const discr=dlo.decode(b,offset);const clo=this.registry[discr];if(undefined===clo){const defaultLayout=this.defaultLayout;let contentOffset=0;if(this.usesPrefixDiscriminator){contentOffset=dlo.layout.span}dest=this.makeDestinationObject();dest[dlo.property]=discr;dest[defaultLayout.property]=defaultLayout.decode(b,offset+contentOffset)}else{dest=clo.decode(b,offset)}return dest}encode(src,b,offset=0){const vlo=this.getSourceVariant(src);if(undefined===vlo){const dlo=this.discriminator;const clo=this.defaultLayout;let contentOffset=0;if(this.usesPrefixDiscriminator){contentOffset=dlo.layout.span}dlo.encode(src[dlo.property],b,offset);return contentOffset+clo.encode(src[clo.property],b,offset+contentOffset)}return vlo.encode(src,b,offset)}addVariant(variant,layout,property){const rv=new VariantLayout(this,variant,layout,property);this.registry[variant]=rv;return rv}getVariant(vb,offset=0){let variant;if(vb instanceof Uint8Array){variant=this.discriminator.decode(vb,offset)}else{variant=vb}return this.registry[variant]}}Layout$1.Union=Union;class VariantLayout extends Layout{constructor(union,variant,layout,property){if(!(union instanceof Union)){throw new TypeError("union must be a Union")}if(!Number.isInteger(variant)||0>variant){throw new TypeError("variant must be a (non-negative) integer")}if("string"===typeof layout&&undefined===property){property=layout;layout=null}if(layout){if(!(layout instanceof Layout)){throw new TypeError("layout must be a Layout")}if(null!==union.defaultLayout&&0<=layout.span&&layout.span>union.defaultLayout.span){throw new Error("variant span exceeds span of containing union")}if("string"!==typeof property){throw new TypeError("variant must have a String property")}}let span=union.span;if(0>union.span){span=layout?layout.span:0;if(0<=span&&union.usesPrefixDiscriminator){span+=union.discriminator.layout.span}}super(span,property);this.union=union;this.variant=variant;this.layout=layout||null}getSpan(b,offset=0){if(0<=this.span){return this.span}let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}let span=0;if(this.layout){span=this.layout.getSpan(b,offset+contentOffset)}return contentOffset+span}decode(b,offset=0){const dest=this.makeDestinationObject();if(this!==this.union.getVariant(b,offset)){throw new Error("variant mismatch")}let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}if(this.layout){dest[this.property]=this.layout.decode(b,offset+contentOffset)}else if(this.property){dest[this.property]=true}else if(this.union.usesPrefixDiscriminator){dest[this.union.discriminator.property]=this.variant}return dest}encode(src,b,offset=0){let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}if(this.layout&&!Object.prototype.hasOwnProperty.call(src,this.property)){throw new TypeError("variant lacks property "+this.property)}this.union.discriminator.encode(this.variant,b,offset);let span=contentOffset;if(this.layout){this.layout.encode(src[this.property],b,offset+contentOffset);span+=this.layout.getSpan(b,offset+contentOffset);if(0<=this.union.span&&span>this.union.span){throw new Error("encoded variant overruns containing union")}}return span}fromArray(values){if(this.layout){return this.layout.fromArray(values)}return undefined}}Layout$1.VariantLayout=VariantLayout;function fixBitwiseResult(v){if(0>v){v+=4294967296}return v}class BitStructure extends Layout{constructor(word,msb,property){if(!(word instanceof UInt||word instanceof UIntBE)){throw new TypeError("word must be a UInt or UIntBE layout")}if("string"===typeof msb&&undefined===property){property=msb;msb=false}if(4<word.span){throw new RangeError("word cannot exceed 32 bits")}super(word.span,property);this.word=word;this.msb=!!msb;this.fields=[];let value=0;this._packedSetValue=function(v){value=fixBitwiseResult(v);return this};this._packedGetValue=function(){return value}}decode(b,offset=0){const dest=this.makeDestinationObject();const value=this.word.decode(b,offset);this._packedSetValue(value);for(const fd of this.fields){if(undefined!==fd.property){dest[fd.property]=fd.decode(b)}}return dest}encode(src,b,offset=0){const value=this.word.decode(b,offset);this._packedSetValue(value);for(const fd of this.fields){if(undefined!==fd.property){const fv=src[fd.property];if(undefined!==fv){fd.encode(fv)}}}return this.word.encode(this._packedGetValue(),b,offset)}addField(bits,property){const bf=new BitField(this,bits,property);this.fields.push(bf);return bf}addBoolean(property){const bf=new Boolean(this,property);this.fields.push(bf);return bf}fieldFor(property){if("string"!==typeof property){throw new TypeError("property must be string")}for(const fd of this.fields){if(fd.property===property){return fd}}return undefined}}Layout$1.BitStructure=BitStructure;class BitField{constructor(container,bits,property){if(!(container instanceof BitStructure)){throw new TypeError("container must be a BitStructure")}if(!Number.isInteger(bits)||0>=bits){throw new TypeError("bits must be positive integer")}const totalBits=8*container.span;const usedBits=container.fields.reduce((sum,fd)=>sum+fd.bits,0);if(bits+usedBits>totalBits){throw new Error("bits too long for span remainder ("+(totalBits-usedBits)+" of "+totalBits+" remain)")}this.container=container;this.bits=bits;this.valueMask=(1<<bits)-1;if(32===bits){this.valueMask=4294967295}this.start=usedBits;if(this.container.msb){this.start=totalBits-usedBits-bits}this.wordMask=fixBitwiseResult(this.valueMask<<this.start);this.property=property}decode(b,offset){const word=this.container._packedGetValue();const wordValue=fixBitwiseResult(word&this.wordMask);const value=wordValue>>>this.start;return value}encode(value){if("number"!==typeof value||!Number.isInteger(value)||value!==fixBitwiseResult(value&this.valueMask)){throw new TypeError(nameWithProperty("BitField.encode",this)+" value must be integer not exceeding "+this.valueMask)}const word=this.container._packedGetValue();const wordValue=fixBitwiseResult(value<<this.start);this.container._packedSetValue(fixBitwiseResult(word&~this.wordMask)|wordValue)}}Layout$1.BitField=BitField;class Boolean extends BitField{constructor(container,property){super(container,1,property)}decode(b,offset){return!!super.decode(b,offset)}encode(value){if("boolean"===typeof value){value=+value}super.encode(value)}}Layout$1.Boolean=Boolean;class Blob extends Layout{constructor(length,property){if(!(length instanceof ExternalLayout&&length.isCount()||Number.isInteger(length)&&0<=length)){throw new TypeError("length must be positive integer "+"or an unsigned integer ExternalLayout")}let span=-1;if(!(length instanceof ExternalLayout)){span=length}super(span,property);this.length=length}getSpan(b,offset){let span=this.span;if(0>span){span=this.length.decode(b,offset)}return span}decode(b,offset=0){let span=this.span;if(0>span){span=this.length.decode(b,offset)}return uint8ArrayToBuffer(b).slice(offset,offset+span)}encode(src,b,offset){let span=this.length;if(this.length instanceof ExternalLayout){span=src.length}if(!(src instanceof Uint8Array&&span===src.length)){throw new TypeError(nameWithProperty("Blob.encode",this)+" requires (length "+span+") Uint8Array as src")}if(offset+span>b.length){throw new RangeError("encoding overruns Uint8Array")}const srcBuffer=uint8ArrayToBuffer(src);uint8ArrayToBuffer(b).write(srcBuffer.toString("hex"),offset,span,"hex");if(this.length instanceof ExternalLayout){this.length.encode(span,b,offset)}return span}}Layout$1.Blob=Blob;class CString extends Layout{constructor(property){super(-1,property)}getSpan(b,offset=0){checkUint8Array(b);let idx=offset;while(idx<b.length&&0!==b[idx]){idx+=1}return 1+idx-offset}decode(b,offset=0){const span=this.getSpan(b,offset);return uint8ArrayToBuffer(b).slice(offset,offset+span-1).toString("utf-8")}encode(src,b,offset=0){if("string"!==typeof src){src=String(src)}const srcb=buffer_1.Buffer.from(src,"utf8");const span=srcb.length;if(offset+span>b.length){throw new RangeError("encoding overruns Buffer")}const buffer=uint8ArrayToBuffer(b);srcb.copy(buffer,offset);buffer[offset+span]=0;return span+1}}Layout$1.CString=CString;class UTF8 extends Layout{constructor(maxSpan,property){if("string"===typeof maxSpan&&undefined===property){property=maxSpan;maxSpan=undefined}if(undefined===maxSpan){maxSpan=-1}else if(!Number.isInteger(maxSpan)){throw new TypeError("maxSpan must be an integer")}super(-1,property);this.maxSpan=maxSpan}getSpan(b,offset=0){checkUint8Array(b);return b.length-offset}decode(b,offset=0){const span=this.getSpan(b,offset);if(0<=this.maxSpan&&this.maxSpan<span){throw new RangeError("text length exceeds maxSpan")}return uint8ArrayToBuffer(b).slice(offset,offset+span).toString("utf-8")}encode(src,b,offset=0){if("string"!==typeof src){src=String(src)}const srcb=buffer_1.Buffer.from(src,"utf8");const span=srcb.length;if(0<=this.maxSpan&&this.maxSpan<span){throw new RangeError("text length exceeds maxSpan")}if(offset+span>b.length){throw new RangeError("encoding overruns Buffer")}srcb.copy(uint8ArrayToBuffer(b),offset);return span}}Layout$1.UTF8=UTF8;class Constant extends Layout{constructor(value,property){super(0,property);this.value=value}decode(b,offset){return this.value}encode(src,b,offset){return 0}}Layout$1.Constant=Constant;Layout$1.greedy=(elementSpan,property)=>new GreedyCount(elementSpan,property);Layout$1.offset=(layout,offset,property)=>new OffsetLayout(layout,offset,property);Layout$1.u8=property=>new UInt(1,property);Layout$1.u16=property=>new UInt(2,property);Layout$1.u24=property=>new UInt(3,property);Layout$1.u32=property=>new UInt(4,property);Layout$1.u40=property=>new UInt(5,property);Layout$1.u48=property=>new UInt(6,property);Layout$1.nu64=property=>new NearUInt64(property);Layout$1.u16be=property=>new UIntBE(2,property);Layout$1.u24be=property=>new UIntBE(3,property);Layout$1.u32be=property=>new UIntBE(4,property);Layout$1.u40be=property=>new UIntBE(5,property);Layout$1.u48be=property=>new UIntBE(6,property);Layout$1.nu64be=property=>new NearUInt64BE(property);Layout$1.s8=property=>new Int(1,property);Layout$1.s16=property=>new Int(2,property);Layout$1.s24=property=>new Int(3,property);Layout$1.s32=property=>new Int(4,property);Layout$1.s40=property=>new Int(5,property);Layout$1.s48=property=>new Int(6,property);Layout$1.ns64=property=>new NearInt64(property);Layout$1.s16be=property=>new IntBE(2,property);Layout$1.s24be=property=>new IntBE(3,property);Layout$1.s32be=property=>new IntBE(4,property);Layout$1.s40be=property=>new IntBE(5,property);Layout$1.s48be=property=>new IntBE(6,property);Layout$1.ns64be=property=>new NearInt64BE(property);Layout$1.f32=property=>new Float(property);Layout$1.f32be=property=>new FloatBE(property);Layout$1.f64=property=>new Double(property);Layout$1.f64be=property=>new DoubleBE(property);Layout$1.struct=(fields,property,decodePrefixes)=>new Structure(fields,property,decodePrefixes);Layout$1.bits=(word,msb,property)=>new BitStructure(word,msb,property);Layout$1.seq=(elementLayout,count,property)=>new Sequence(elementLayout,count,property);Layout$1.union=(discr,defaultLayout,property)=>new Union(discr,defaultLayout,property);Layout$1.unionLayoutDiscriminator=(layout,property)=>new UnionLayoutDiscriminator(layout,property);Layout$1.blob=(length,property)=>new Blob(length,property);Layout$1.cstr=property=>new CString(property);Layout$1.utf8=(maxSpan,property)=>new UTF8(maxSpan,property);Layout$1.constant=(value,property)=>new Constant(value,property);return Layout$1}var LayoutExports$1=requireLayout$1();var SOLANA_ERROR__BLOCK_HEIGHT_EXCEEDED=1;var SOLANA_ERROR__INVALID_NONCE=2;var SOLANA_ERROR__NONCE_ACCOUNT_NOT_FOUND=3;var SOLANA_ERROR__BLOCKHASH_STRING_LENGTH_OUT_OF_RANGE=4;var SOLANA_ERROR__INVALID_BLOCKHASH_BYTE_LENGTH=5;var SOLANA_ERROR__LAMPORTS_OUT_OF_RANGE=6;var SOLANA_ERROR__MALFORMED_BIGINT_STRING=7;var SOLANA_ERROR__MALFORMED_NUMBER_STRING=8;var SOLANA_ERROR__TIMESTAMP_OUT_OF_RANGE=9;var SOLANA_ERROR__MALFORMED_JSON_RPC_ERROR=10;var SOLANA_ERROR__JSON_RPC__PARSE_ERROR=-32700;var SOLANA_ERROR__JSON_RPC__INTERNAL_ERROR=-32603;var SOLANA_ERROR__JSON_RPC__INVALID_PARAMS=-32602;var SOLANA_ERROR__JSON_RPC__METHOD_NOT_FOUND=-32601;var SOLANA_ERROR__JSON_RPC__INVALID_REQUEST=-32600;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED=-32016;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION=-32015;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET=-32014;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH=-32013;var SOLANA_ERROR__JSON_RPC__SCAN_ERROR=-32012;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE=-32011;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX=-32010;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED=-32009;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NO_SNAPSHOT=-32008;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SLOT_SKIPPED=-32007;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE=-32006;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NODE_UNHEALTHY=-32005;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_NOT_AVAILABLE=-32004;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE=-32003;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE=-32002;var SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_CLEANED_UP=-32001;var SOLANA_ERROR__ADDRESSES__INVALID_BYTE_LENGTH=28e5;var SOLANA_ERROR__ADDRESSES__STRING_LENGTH_OUT_OF_RANGE=2800001;var SOLANA_ERROR__ADDRESSES__INVALID_BASE58_ENCODED_ADDRESS=2800002;var SOLANA_ERROR__ADDRESSES__INVALID_ED25519_PUBLIC_KEY=2800003;var SOLANA_ERROR__ADDRESSES__MALFORMED_PDA=2800004;var SOLANA_ERROR__ADDRESSES__PDA_BUMP_SEED_OUT_OF_RANGE=2800005;var SOLANA_ERROR__ADDRESSES__MAX_NUMBER_OF_PDA_SEEDS_EXCEEDED=2800006;var SOLANA_ERROR__ADDRESSES__MAX_PDA_SEED_LENGTH_EXCEEDED=2800007;var SOLANA_ERROR__ADDRESSES__INVALID_SEEDS_POINT_ON_CURVE=2800008;var SOLANA_ERROR__ADDRESSES__FAILED_TO_FIND_VIABLE_PDA_BUMP_SEED=2800009;var SOLANA_ERROR__ADDRESSES__PDA_ENDS_WITH_PDA_MARKER=2800010;var SOLANA_ERROR__ADDRESSES__INVALID_OFF_CURVE_ADDRESS=2800011;var SOLANA_ERROR__ACCOUNTS__ACCOUNT_NOT_FOUND=323e4;var SOLANA_ERROR__ACCOUNTS__ONE_OR_MORE_ACCOUNTS_NOT_FOUND=32300001;var SOLANA_ERROR__ACCOUNTS__FAILED_TO_DECODE_ACCOUNT=3230002;var SOLANA_ERROR__ACCOUNTS__EXPECTED_DECODED_ACCOUNT=3230003;var SOLANA_ERROR__ACCOUNTS__EXPECTED_ALL_ACCOUNTS_TO_BE_DECODED=3230004;var SOLANA_ERROR__SUBTLE_CRYPTO__DISALLOWED_IN_INSECURE_CONTEXT=361e4;var SOLANA_ERROR__SUBTLE_CRYPTO__DIGEST_UNIMPLEMENTED=3610001;var SOLANA_ERROR__SUBTLE_CRYPTO__ED25519_ALGORITHM_UNIMPLEMENTED=3610002;var SOLANA_ERROR__SUBTLE_CRYPTO__EXPORT_FUNCTION_UNIMPLEMENTED=3610003;var SOLANA_ERROR__SUBTLE_CRYPTO__GENERATE_FUNCTION_UNIMPLEMENTED=3610004;var SOLANA_ERROR__SUBTLE_CRYPTO__SIGN_FUNCTION_UNIMPLEMENTED=3610005;var SOLANA_ERROR__SUBTLE_CRYPTO__VERIFY_FUNCTION_UNIMPLEMENTED=3610006;var SOLANA_ERROR__SUBTLE_CRYPTO__CANNOT_EXPORT_NON_EXTRACTABLE_KEY=3610007;var SOLANA_ERROR__CRYPTO__RANDOM_VALUES_FUNCTION_UNIMPLEMENTED=3611e3;var SOLANA_ERROR__KEYS__INVALID_KEY_PAIR_BYTE_LENGTH=3704e3;var SOLANA_ERROR__KEYS__INVALID_PRIVATE_KEY_BYTE_LENGTH=3704001;var SOLANA_ERROR__KEYS__INVALID_SIGNATURE_BYTE_LENGTH=3704002;var SOLANA_ERROR__KEYS__SIGNATURE_STRING_LENGTH_OUT_OF_RANGE=3704003;var SOLANA_ERROR__KEYS__PUBLIC_KEY_MUST_MATCH_PRIVATE_KEY=3704004;var SOLANA_ERROR__INSTRUCTION__EXPECTED_TO_HAVE_ACCOUNTS=4128e3;var SOLANA_ERROR__INSTRUCTION__EXPECTED_TO_HAVE_DATA=4128001;var SOLANA_ERROR__INSTRUCTION__PROGRAM_ID_MISMATCH=4128002;var SOLANA_ERROR__INSTRUCTION_ERROR__UNKNOWN=4615e3;var SOLANA_ERROR__INSTRUCTION_ERROR__GENERIC_ERROR=4615001;var SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ARGUMENT=4615002;var SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_INSTRUCTION_DATA=4615003;var SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ACCOUNT_DATA=4615004;var SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_DATA_TOO_SMALL=4615005;var SOLANA_ERROR__INSTRUCTION_ERROR__INSUFFICIENT_FUNDS=4615006;var SOLANA_ERROR__INSTRUCTION_ERROR__INCORRECT_PROGRAM_ID=4615007;var SOLANA_ERROR__INSTRUCTION_ERROR__MISSING_REQUIRED_SIGNATURE=4615008;var SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_ALREADY_INITIALIZED=4615009;var SOLANA_ERROR__INSTRUCTION_ERROR__UNINITIALIZED_ACCOUNT=4615010;var SOLANA_ERROR__INSTRUCTION_ERROR__UNBALANCED_INSTRUCTION=4615011;var SOLANA_ERROR__INSTRUCTION_ERROR__MODIFIED_PROGRAM_ID=4615012;var SOLANA_ERROR__INSTRUCTION_ERROR__EXTERNAL_ACCOUNT_LAMPORT_SPEND=4615013;var SOLANA_ERROR__INSTRUCTION_ERROR__EXTERNAL_ACCOUNT_DATA_MODIFIED=4615014;var SOLANA_ERROR__INSTRUCTION_ERROR__READONLY_LAMPORT_CHANGE=4615015;var SOLANA_ERROR__INSTRUCTION_ERROR__READONLY_DATA_MODIFIED=4615016;var SOLANA_ERROR__INSTRUCTION_ERROR__DUPLICATE_ACCOUNT_INDEX=4615017;var SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_MODIFIED=4615018;var SOLANA_ERROR__INSTRUCTION_ERROR__RENT_EPOCH_MODIFIED=4615019;var SOLANA_ERROR__INSTRUCTION_ERROR__NOT_ENOUGH_ACCOUNT_KEYS=4615020;var SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_DATA_SIZE_CHANGED=4615021;var SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_NOT_EXECUTABLE=4615022;var SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_BORROW_FAILED=4615023;var SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_BORROW_OUTSTANDING=4615024;var SOLANA_ERROR__INSTRUCTION_ERROR__DUPLICATE_ACCOUNT_OUT_OF_SYNC=4615025;var SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM=4615026;var SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ERROR=4615027;var SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_DATA_MODIFIED=4615028;var SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_LAMPORT_CHANGE=4615029;var SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_ACCOUNT_NOT_RENT_EXEMPT=4615030;var SOLANA_ERROR__INSTRUCTION_ERROR__UNSUPPORTED_PROGRAM_ID=4615031;var SOLANA_ERROR__INSTRUCTION_ERROR__CALL_DEPTH=4615032;var SOLANA_ERROR__INSTRUCTION_ERROR__MISSING_ACCOUNT=4615033;var SOLANA_ERROR__INSTRUCTION_ERROR__REENTRANCY_NOT_ALLOWED=4615034;var SOLANA_ERROR__INSTRUCTION_ERROR__MAX_SEED_LENGTH_EXCEEDED=4615035;var SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_SEEDS=4615036;var SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_REALLOC=4615037;var SOLANA_ERROR__INSTRUCTION_ERROR__COMPUTATIONAL_BUDGET_EXCEEDED=4615038;var SOLANA_ERROR__INSTRUCTION_ERROR__PRIVILEGE_ESCALATION=4615039;var SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_ENVIRONMENT_SETUP_FAILURE=4615040;var SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_FAILED_TO_COMPLETE=4615041;var SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_FAILED_TO_COMPILE=4615042;var SOLANA_ERROR__INSTRUCTION_ERROR__IMMUTABLE=4615043;var SOLANA_ERROR__INSTRUCTION_ERROR__INCORRECT_AUTHORITY=4615044;var SOLANA_ERROR__INSTRUCTION_ERROR__BORSH_IO_ERROR=4615045;var SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_NOT_RENT_EXEMPT=4615046;var SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ACCOUNT_OWNER=4615047;var SOLANA_ERROR__INSTRUCTION_ERROR__ARITHMETIC_OVERFLOW=4615048;var SOLANA_ERROR__INSTRUCTION_ERROR__UNSUPPORTED_SYSVAR=4615049;var SOLANA_ERROR__INSTRUCTION_ERROR__ILLEGAL_OWNER=4615050;var SOLANA_ERROR__INSTRUCTION_ERROR__MAX_ACCOUNTS_DATA_ALLOCATIONS_EXCEEDED=4615051;var SOLANA_ERROR__INSTRUCTION_ERROR__MAX_ACCOUNTS_EXCEEDED=4615052;var SOLANA_ERROR__INSTRUCTION_ERROR__MAX_INSTRUCTION_TRACE_LENGTH_EXCEEDED=4615053;var SOLANA_ERROR__INSTRUCTION_ERROR__BUILTIN_PROGRAMS_MUST_CONSUME_COMPUTE_UNITS=4615054;var SOLANA_ERROR__SIGNER__ADDRESS_CANNOT_HAVE_MULTIPLE_SIGNERS=5508e3;var SOLANA_ERROR__SIGNER__EXPECTED_KEY_PAIR_SIGNER=5508001;var SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_SIGNER=5508002;var SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_MODIFYING_SIGNER=5508003;var SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_PARTIAL_SIGNER=5508004;var SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SIGNER=5508005;var SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_MODIFYING_SIGNER=5508006;var SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_PARTIAL_SIGNER=5508007;var SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SENDING_SIGNER=5508008;var SOLANA_ERROR__SIGNER__TRANSACTION_CANNOT_HAVE_MULTIPLE_SENDING_SIGNERS=5508009;var SOLANA_ERROR__SIGNER__TRANSACTION_SENDING_SIGNER_MISSING=5508010;var SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED=5508011;var SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES=5663e3;var SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE=5663001;var SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME=5663002;var SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME=5663003;var SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE=5663004;var SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_CONTENTS_MISSING=5663005;var SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_INDEX_OUT_OF_RANGE=5663006;var SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND=5663007;var SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING=5663008;var SOLANA_ERROR__TRANSACTION__SIGNATURES_MISSING=5663009;var SOLANA_ERROR__TRANSACTION__ADDRESS_MISSING=5663010;var SOLANA_ERROR__TRANSACTION__FEE_PAYER_MISSING=5663011;var SOLANA_ERROR__TRANSACTION__FEE_PAYER_SIGNATURE_MISSING=5663012;var SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_INSTRUCTIONS_MISSING=5663013;var SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_FIRST_INSTRUCTION_MUST_BE_ADVANCE_NONCE=5663014;var SOLANA_ERROR__TRANSACTION__ADDRESSES_CANNOT_SIGN_TRANSACTION=5663015;var SOLANA_ERROR__TRANSACTION__CANNOT_ENCODE_WITH_EMPTY_SIGNATURES=5663016;var SOLANA_ERROR__TRANSACTION__MESSAGE_SIGNATURES_MISMATCH=5663017;var SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT=5663018;var SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT=5663019;var SOLANA_ERROR__TRANSACTION__EXCEEDS_SIZE_LIMIT=5663020;var SOLANA_ERROR__TRANSACTION_ERROR__UNKNOWN=705e4;var SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_IN_USE=7050001;var SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_LOADED_TWICE=7050002;var SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_NOT_FOUND=7050003;var SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_ACCOUNT_NOT_FOUND=7050004;var SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_FEE=7050005;var SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ACCOUNT_FOR_FEE=7050006;var SOLANA_ERROR__TRANSACTION_ERROR__ALREADY_PROCESSED=7050007;var SOLANA_ERROR__TRANSACTION_ERROR__BLOCKHASH_NOT_FOUND=7050008;var SOLANA_ERROR__TRANSACTION_ERROR__CALL_CHAIN_TOO_DEEP=7050009;var SOLANA_ERROR__TRANSACTION_ERROR__MISSING_SIGNATURE_FOR_FEE=7050010;var SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ACCOUNT_INDEX=7050011;var SOLANA_ERROR__TRANSACTION_ERROR__SIGNATURE_FAILURE=7050012;var SOLANA_ERROR__TRANSACTION_ERROR__INVALID_PROGRAM_FOR_EXECUTION=7050013;var SOLANA_ERROR__TRANSACTION_ERROR__SANITIZE_FAILURE=7050014;var SOLANA_ERROR__TRANSACTION_ERROR__CLUSTER_MAINTENANCE=7050015;var SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_BORROW_OUTSTANDING=7050016;var SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_BLOCK_COST_LIMIT=7050017;var SOLANA_ERROR__TRANSACTION_ERROR__UNSUPPORTED_VERSION=7050018;var SOLANA_ERROR__TRANSACTION_ERROR__INVALID_WRITABLE_ACCOUNT=7050019;var SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_ACCOUNT_COST_LIMIT=7050020;var SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_ACCOUNT_DATA_BLOCK_LIMIT=7050021;var SOLANA_ERROR__TRANSACTION_ERROR__TOO_MANY_ACCOUNT_LOCKS=7050022;var SOLANA_ERROR__TRANSACTION_ERROR__ADDRESS_LOOKUP_TABLE_NOT_FOUND=7050023;var SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_OWNER=7050024;var SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_DATA=7050025;var SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_INDEX=7050026;var SOLANA_ERROR__TRANSACTION_ERROR__INVALID_RENT_PAYING_ACCOUNT=7050027;var SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_VOTE_COST_LIMIT=7050028;var SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT=7050029;var SOLANA_ERROR__TRANSACTION_ERROR__DUPLICATE_INSTRUCTION=7050030;var SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_RENT=7050031;var SOLANA_ERROR__TRANSACTION_ERROR__MAX_LOADED_ACCOUNTS_DATA_SIZE_EXCEEDED=7050032;var SOLANA_ERROR__TRANSACTION_ERROR__INVALID_LOADED_ACCOUNTS_DATA_SIZE_LIMIT=7050033;var SOLANA_ERROR__TRANSACTION_ERROR__RESANITIZATION_NEEDED=7050034;var SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_EXECUTION_TEMPORARILY_RESTRICTED=7050035;var SOLANA_ERROR__TRANSACTION_ERROR__UNBALANCED_TRANSACTION=7050036;var SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY=8078e3;var SOLANA_ERROR__CODECS__INVALID_BYTE_LENGTH=8078001;var SOLANA_ERROR__CODECS__EXPECTED_FIXED_LENGTH=8078002;var SOLANA_ERROR__CODECS__EXPECTED_VARIABLE_LENGTH=8078003;var SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH=8078004;var SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH=8078005;var SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH=8078006;var SOLANA_ERROR__CODECS__INVALID_NUMBER_OF_ITEMS=8078007;var SOLANA_ERROR__CODECS__ENUM_DISCRIMINATOR_OUT_OF_RANGE=8078008;var SOLANA_ERROR__CODECS__INVALID_DISCRIMINATED_UNION_VARIANT=8078009;var SOLANA_ERROR__CODECS__INVALID_ENUM_VARIANT=8078010;var SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE=8078011;var SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE=8078012;var SOLANA_ERROR__CODECS__EXPECTED_POSITIVE_BYTE_LENGTH=8078013;var SOLANA_ERROR__CODECS__OFFSET_OUT_OF_RANGE=8078014;var SOLANA_ERROR__CODECS__INVALID_LITERAL_UNION_VARIANT=8078015;var SOLANA_ERROR__CODECS__LITERAL_UNION_DISCRIMINATOR_OUT_OF_RANGE=8078016;var SOLANA_ERROR__CODECS__UNION_VARIANT_OUT_OF_RANGE=8078017;var SOLANA_ERROR__CODECS__INVALID_CONSTANT=8078018;var SOLANA_ERROR__CODECS__EXPECTED_ZERO_VALUE_TO_MATCH_ITEM_FIXED_SIZE=8078019;var SOLANA_ERROR__CODECS__ENCODED_BYTES_MUST_NOT_INCLUDE_SENTINEL=8078020;var SOLANA_ERROR__CODECS__SENTINEL_MISSING_IN_DECODED_BYTES=8078021;var SOLANA_ERROR__CODECS__CANNOT_USE_LEXICAL_VALUES_AS_ENUM_DISCRIMINATORS=8078022;var SOLANA_ERROR__RPC__INTEGER_OVERFLOW=81e5;var SOLANA_ERROR__RPC__TRANSPORT_HTTP_HEADER_FORBIDDEN=8100001;var SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR=8100002;var SOLANA_ERROR__RPC__API_PLAN_MISSING_FOR_RPC_METHOD=8100003;var SOLANA_ERROR__RPC_SUBSCRIPTIONS__CANNOT_CREATE_SUBSCRIPTION_PLAN=819e4;var SOLANA_ERROR__RPC_SUBSCRIPTIONS__EXPECTED_SERVER_SUBSCRIPTION_ID=8190001;var SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CLOSED_BEFORE_MESSAGE_BUFFERED=8190002;var SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED=8190003;var SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_FAILED_TO_CONNECT=8190004;var SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_STATE_MISSING=99e5;var SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE=9900001;var SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING=9900002;var SOLANA_ERROR__INVARIANT_VIOLATION__SWITCH_MUST_BE_EXHAUSTIVE=9900003;var SOLANA_ERROR__INVARIANT_VIOLATION__DATA_PUBLISHER_CHANNEL_UNIMPLEMENTED=9900004;function encodeValue(value){if(Array.isArray(value)){const commaSeparatedValues=value.map(encodeValue).join("%2C%20");return"%5B"+commaSeparatedValues+"%5D"}else if(typeof value==="bigint"){return`${value}n`}else{return encodeURIComponent(String(value!=null&&Object.getPrototypeOf(value)===null?{...value}:value))}}function encodeObjectContextEntry([key,value]){return`${key}=${encodeValue(value)}`}function encodeContextObject(context){const searchParamsString=Object.entries(context).map(encodeObjectContextEntry).join("&");return btoa(searchParamsString)}var SolanaErrorMessages={[SOLANA_ERROR__ACCOUNTS__ACCOUNT_NOT_FOUND]:"Account not found at address: $address",[SOLANA_ERROR__ACCOUNTS__EXPECTED_ALL_ACCOUNTS_TO_BE_DECODED]:"Not all accounts were decoded. Encoded accounts found at addresses: $addresses.",[SOLANA_ERROR__ACCOUNTS__EXPECTED_DECODED_ACCOUNT]:"Expected decoded account at address: $address",[SOLANA_ERROR__ACCOUNTS__FAILED_TO_DECODE_ACCOUNT]:"Failed to decode account data at address: $address",[SOLANA_ERROR__ACCOUNTS__ONE_OR_MORE_ACCOUNTS_NOT_FOUND]:"Accounts not found at addresses: $addresses",[SOLANA_ERROR__ADDRESSES__FAILED_TO_FIND_VIABLE_PDA_BUMP_SEED]:"Unable to find a viable program address bump seed.",[SOLANA_ERROR__ADDRESSES__INVALID_BASE58_ENCODED_ADDRESS]:"$putativeAddress is not a base58-encoded address.",[SOLANA_ERROR__ADDRESSES__INVALID_BYTE_LENGTH]:"Expected base58 encoded address to decode to a byte array of length 32. Actual length: $actualLength.",[SOLANA_ERROR__ADDRESSES__INVALID_ED25519_PUBLIC_KEY]:"The `CryptoKey` must be an `Ed25519` public key.",[SOLANA_ERROR__ADDRESSES__INVALID_OFF_CURVE_ADDRESS]:"$putativeOffCurveAddress is not a base58-encoded off-curve address.",[SOLANA_ERROR__ADDRESSES__INVALID_SEEDS_POINT_ON_CURVE]:"Invalid seeds; point must fall off the Ed25519 curve.",[SOLANA_ERROR__ADDRESSES__MALFORMED_PDA]:"Expected given program derived address to have the following format: [Address, ProgramDerivedAddressBump].",[SOLANA_ERROR__ADDRESSES__MAX_NUMBER_OF_PDA_SEEDS_EXCEEDED]:"A maximum of $maxSeeds seeds, including the bump seed, may be supplied when creating an address. Received: $actual.",[SOLANA_ERROR__ADDRESSES__MAX_PDA_SEED_LENGTH_EXCEEDED]:"The seed at index $index with length $actual exceeds the maximum length of $maxSeedLength bytes.",[SOLANA_ERROR__ADDRESSES__PDA_BUMP_SEED_OUT_OF_RANGE]:"Expected program derived address bump to be in the range [0, 255], got: $bump.",[SOLANA_ERROR__ADDRESSES__PDA_ENDS_WITH_PDA_MARKER]:"Program address cannot end with PDA marker.",[SOLANA_ERROR__ADDRESSES__STRING_LENGTH_OUT_OF_RANGE]:"Expected base58-encoded address string of length in the range [32, 44]. Actual length: $actualLength.",[SOLANA_ERROR__BLOCKHASH_STRING_LENGTH_OUT_OF_RANGE]:"Expected base58-encoded blockash string of length in the range [32, 44]. Actual length: $actualLength.",[SOLANA_ERROR__BLOCK_HEIGHT_EXCEEDED]:"The network has progressed past the last block for which this transaction could have been committed.",[SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY]:"Codec [$codecDescription] cannot decode empty byte arrays.",[SOLANA_ERROR__CODECS__CANNOT_USE_LEXICAL_VALUES_AS_ENUM_DISCRIMINATORS]:"Enum codec cannot use lexical values [$stringValues] as discriminators. Either remove all lexical values or set `useValuesAsDiscriminators` to `false`.",[SOLANA_ERROR__CODECS__ENCODED_BYTES_MUST_NOT_INCLUDE_SENTINEL]:"Sentinel [$hexSentinel] must not be present in encoded bytes [$hexEncodedBytes].",[SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH]:"Encoder and decoder must have the same fixed size, got [$encoderFixedSize] and [$decoderFixedSize].",[SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH]:"Encoder and decoder must have the same max size, got [$encoderMaxSize] and [$decoderMaxSize].",[SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH]:"Encoder and decoder must either both be fixed-size or variable-size.",[SOLANA_ERROR__CODECS__ENUM_DISCRIMINATOR_OUT_OF_RANGE]:"Enum discriminator out of range. Expected a number in [$formattedValidDiscriminators], got $discriminator.",[SOLANA_ERROR__CODECS__EXPECTED_FIXED_LENGTH]:"Expected a fixed-size codec, got a variable-size one.",[SOLANA_ERROR__CODECS__EXPECTED_POSITIVE_BYTE_LENGTH]:"Codec [$codecDescription] expected a positive byte length, got $bytesLength.",[SOLANA_ERROR__CODECS__EXPECTED_VARIABLE_LENGTH]:"Expected a variable-size codec, got a fixed-size one.",[SOLANA_ERROR__CODECS__EXPECTED_ZERO_VALUE_TO_MATCH_ITEM_FIXED_SIZE]:"Codec [$codecDescription] expected zero-value [$hexZeroValue] to have the same size as the provided fixed-size item [$expectedSize bytes].",[SOLANA_ERROR__CODECS__INVALID_BYTE_LENGTH]:"Codec [$codecDescription] expected $expected bytes, got $bytesLength.",[SOLANA_ERROR__CODECS__INVALID_CONSTANT]:"Expected byte array constant [$hexConstant] to be present in data [$hexData] at offset [$offset].",[SOLANA_ERROR__CODECS__INVALID_DISCRIMINATED_UNION_VARIANT]:"Invalid discriminated union variant. Expected one of [$variants], got $value.",[SOLANA_ERROR__CODECS__INVALID_ENUM_VARIANT]:"Invalid enum variant. Expected one of [$stringValues] or a number in [$formattedNumericalValues], got $variant.",[SOLANA_ERROR__CODECS__INVALID_LITERAL_UNION_VARIANT]:"Invalid literal union variant. Expected one of [$variants], got $value.",[SOLANA_ERROR__CODECS__INVALID_NUMBER_OF_ITEMS]:"Expected [$codecDescription] to have $expected items, got $actual.",[SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE]:"Invalid value $value for base $base with alphabet $alphabet.",[SOLANA_ERROR__CODECS__LITERAL_UNION_DISCRIMINATOR_OUT_OF_RANGE]:"Literal union discriminator out of range. Expected a number between $minRange and $maxRange, got $discriminator.",[SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE]:"Codec [$codecDescription] expected number to be in the range [$min, $max], got $value.",[SOLANA_ERROR__CODECS__OFFSET_OUT_OF_RANGE]:"Codec [$codecDescription] expected offset to be in the range [0, $bytesLength], got $offset.",[SOLANA_ERROR__CODECS__SENTINEL_MISSING_IN_DECODED_BYTES]:"Expected sentinel [$hexSentinel] to be present in decoded bytes [$hexDecodedBytes].",[SOLANA_ERROR__CODECS__UNION_VARIANT_OUT_OF_RANGE]:"Union variant out of range. Expected an index between $minRange and $maxRange, got $variant.",[SOLANA_ERROR__CRYPTO__RANDOM_VALUES_FUNCTION_UNIMPLEMENTED]:"No random values implementation could be found.",[SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_ALREADY_INITIALIZED]:"instruction requires an uninitialized account",[SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_BORROW_FAILED]:"instruction tries to borrow reference for an account which is already borrowed",[SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_BORROW_OUTSTANDING]:"instruction left account with an outstanding borrowed reference",[SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_DATA_SIZE_CHANGED]:"program other than the account's owner changed the size of the account data",[SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_DATA_TOO_SMALL]:"account data too small for instruction",[SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_NOT_EXECUTABLE]:"instruction expected an executable account",[SOLANA_ERROR__INSTRUCTION_ERROR__ACCOUNT_NOT_RENT_EXEMPT]:"An account does not have enough lamports to be rent-exempt",[SOLANA_ERROR__INSTRUCTION_ERROR__ARITHMETIC_OVERFLOW]:"Program arithmetic overflowed",[SOLANA_ERROR__INSTRUCTION_ERROR__BORSH_IO_ERROR]:"Failed to serialize or deserialize account data: $encodedData",[SOLANA_ERROR__INSTRUCTION_ERROR__BUILTIN_PROGRAMS_MUST_CONSUME_COMPUTE_UNITS]:"Builtin programs must consume compute units",[SOLANA_ERROR__INSTRUCTION_ERROR__CALL_DEPTH]:"Cross-program invocation call depth too deep",[SOLANA_ERROR__INSTRUCTION_ERROR__COMPUTATIONAL_BUDGET_EXCEEDED]:"Computational budget exceeded",[SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM]:"custom program error: #$code",[SOLANA_ERROR__INSTRUCTION_ERROR__DUPLICATE_ACCOUNT_INDEX]:"instruction contains duplicate accounts",[SOLANA_ERROR__INSTRUCTION_ERROR__DUPLICATE_ACCOUNT_OUT_OF_SYNC]:"instruction modifications of multiply-passed account differ",[SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_ACCOUNT_NOT_RENT_EXEMPT]:"executable accounts must be rent exempt",[SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_DATA_MODIFIED]:"instruction changed executable accounts data",[SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_LAMPORT_CHANGE]:"instruction changed the balance of an executable account",[SOLANA_ERROR__INSTRUCTION_ERROR__EXECUTABLE_MODIFIED]:"instruction changed executable bit of an account",[SOLANA_ERROR__INSTRUCTION_ERROR__EXTERNAL_ACCOUNT_DATA_MODIFIED]:"instruction modified data of an account it does not own",[SOLANA_ERROR__INSTRUCTION_ERROR__EXTERNAL_ACCOUNT_LAMPORT_SPEND]:"instruction spent from the balance of an account it does not own",[SOLANA_ERROR__INSTRUCTION_ERROR__GENERIC_ERROR]:"generic instruction error",[SOLANA_ERROR__INSTRUCTION_ERROR__ILLEGAL_OWNER]:"Provided owner is not allowed",[SOLANA_ERROR__INSTRUCTION_ERROR__IMMUTABLE]:"Account is immutable",[SOLANA_ERROR__INSTRUCTION_ERROR__INCORRECT_AUTHORITY]:"Incorrect authority provided",[SOLANA_ERROR__INSTRUCTION_ERROR__INCORRECT_PROGRAM_ID]:"incorrect program id for instruction",[SOLANA_ERROR__INSTRUCTION_ERROR__INSUFFICIENT_FUNDS]:"insufficient funds for instruction",[SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ACCOUNT_DATA]:"invalid account data for instruction",[SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ACCOUNT_OWNER]:"Invalid account owner",[SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ARGUMENT]:"invalid program argument",[SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_ERROR]:"program returned invalid error code",[SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_INSTRUCTION_DATA]:"invalid instruction data",[SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_REALLOC]:"Failed to reallocate account data",[SOLANA_ERROR__INSTRUCTION_ERROR__INVALID_SEEDS]:"Provided seeds do not result in a valid address",[SOLANA_ERROR__INSTRUCTION_ERROR__MAX_ACCOUNTS_DATA_ALLOCATIONS_EXCEEDED]:"Accounts data allocations exceeded the maximum allowed per transaction",[SOLANA_ERROR__INSTRUCTION_ERROR__MAX_ACCOUNTS_EXCEEDED]:"Max accounts exceeded",[SOLANA_ERROR__INSTRUCTION_ERROR__MAX_INSTRUCTION_TRACE_LENGTH_EXCEEDED]:"Max instruction trace length exceeded",[SOLANA_ERROR__INSTRUCTION_ERROR__MAX_SEED_LENGTH_EXCEEDED]:"Length of the seed is too long for address generation",[SOLANA_ERROR__INSTRUCTION_ERROR__MISSING_ACCOUNT]:"An account required by the instruction is missing",[SOLANA_ERROR__INSTRUCTION_ERROR__MISSING_REQUIRED_SIGNATURE]:"missing required signature for instruction",[SOLANA_ERROR__INSTRUCTION_ERROR__MODIFIED_PROGRAM_ID]:"instruction illegally modified the program id of an account",[SOLANA_ERROR__INSTRUCTION_ERROR__NOT_ENOUGH_ACCOUNT_KEYS]:"insufficient account keys for instruction",[SOLANA_ERROR__INSTRUCTION_ERROR__PRIVILEGE_ESCALATION]:"Cross-program invocation with unauthorized signer or writable account",[SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_ENVIRONMENT_SETUP_FAILURE]:"Failed to create program execution environment",[SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_FAILED_TO_COMPILE]:"Program failed to compile",[SOLANA_ERROR__INSTRUCTION_ERROR__PROGRAM_FAILED_TO_COMPLETE]:"Program failed to complete",[SOLANA_ERROR__INSTRUCTION_ERROR__READONLY_DATA_MODIFIED]:"instruction modified data of a read-only account",[SOLANA_ERROR__INSTRUCTION_ERROR__READONLY_LAMPORT_CHANGE]:"instruction changed the balance of a read-only account",[SOLANA_ERROR__INSTRUCTION_ERROR__REENTRANCY_NOT_ALLOWED]:"Cross-program invocation reentrancy not allowed for this instruction",[SOLANA_ERROR__INSTRUCTION_ERROR__RENT_EPOCH_MODIFIED]:"instruction modified rent epoch of an account",[SOLANA_ERROR__INSTRUCTION_ERROR__UNBALANCED_INSTRUCTION]:"sum of account balances before and after instruction do not match",[SOLANA_ERROR__INSTRUCTION_ERROR__UNINITIALIZED_ACCOUNT]:"instruction requires an initialized account",[SOLANA_ERROR__INSTRUCTION_ERROR__UNKNOWN]:"",[SOLANA_ERROR__INSTRUCTION_ERROR__UNSUPPORTED_PROGRAM_ID]:"Unsupported program id",[SOLANA_ERROR__INSTRUCTION_ERROR__UNSUPPORTED_SYSVAR]:"Unsupported sysvar",[SOLANA_ERROR__INSTRUCTION__EXPECTED_TO_HAVE_ACCOUNTS]:"The instruction does not have any accounts.",[SOLANA_ERROR__INSTRUCTION__EXPECTED_TO_HAVE_DATA]:"The instruction does not have any data.",[SOLANA_ERROR__INSTRUCTION__PROGRAM_ID_MISMATCH]:"Expected instruction to have progress address $expectedProgramAddress, got $actualProgramAddress.",[SOLANA_ERROR__INVALID_BLOCKHASH_BYTE_LENGTH]:"Expected base58 encoded blockhash to decode to a byte array of length 32. Actual length: $actualLength.",[SOLANA_ERROR__INVALID_NONCE]:"The nonce `$expectedNonceValue` is no longer valid. It has advanced to `$actualNonceValue`",[SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING]:"Invariant violation: Found no abortable iterable cache entry for key `$cacheKey`. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant",[SOLANA_ERROR__INVARIANT_VIOLATION__DATA_PUBLISHER_CHANNEL_UNIMPLEMENTED]:"Invariant violation: This data publisher does not publish to the channel named `$channelName`. Supported channels include $supportedChannelNames.",[SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE]:"Invariant violation: WebSocket message iterator state is corrupt; iterated without first resolving existing message promise. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant",[SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_STATE_MISSING]:"Invariant violation: WebSocket message iterator is missing state storage. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant",[SOLANA_ERROR__INVARIANT_VIOLATION__SWITCH_MUST_BE_EXHAUSTIVE]:"Invariant violation: Switch statement non-exhaustive. Received unexpected value `$unexpectedValue`. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant",[SOLANA_ERROR__JSON_RPC__INTERNAL_ERROR]:"JSON-RPC error: Internal JSON-RPC error ($__serverMessage)",[SOLANA_ERROR__JSON_RPC__INVALID_PARAMS]:"JSON-RPC error: Invalid method parameter(s) ($__serverMessage)",[SOLANA_ERROR__JSON_RPC__INVALID_REQUEST]:"JSON-RPC error: The JSON sent is not a valid `Request` object ($__serverMessage)",[SOLANA_ERROR__JSON_RPC__METHOD_NOT_FOUND]:"JSON-RPC error: The method does not exist / is not available ($__serverMessage)",[SOLANA_ERROR__JSON_RPC__PARSE_ERROR]:"JSON-RPC error: An error occurred on the server while parsing the JSON text ($__serverMessage)",[SOLANA_ERROR__JSON_RPC__SCAN_ERROR]:"$__serverMessage",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_CLEANED_UP]:"$__serverMessage",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_NOT_AVAILABLE]:"$__serverMessage",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET]:"$__serverMessage",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX]:"$__serverMessage",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED]:"$__serverMessage",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED]:"Minimum context slot has not been reached",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NODE_UNHEALTHY]:"Node is unhealthy; behind by $numSlotsBehind slots",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_NO_SNAPSHOT]:"No snapshot",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE]:"Transaction simulation failed",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_SLOT_SKIPPED]:"$__serverMessage",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE]:"Transaction history is not available from this node",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE]:"$__serverMessage",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH]:"Transaction signature length mismatch",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE]:"Transaction signature verification failure",[SOLANA_ERROR__JSON_RPC__SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION]:"$__serverMessage",[SOLANA_ERROR__KEYS__INVALID_KEY_PAIR_BYTE_LENGTH]:"Key pair bytes must be of length 64, got $byteLength.",[SOLANA_ERROR__KEYS__INVALID_PRIVATE_KEY_BYTE_LENGTH]:"Expected private key bytes with length 32. Actual length: $actualLength.",[SOLANA_ERROR__KEYS__INVALID_SIGNATURE_BYTE_LENGTH]:"Expected base58-encoded signature to decode to a byte array of length 64. Actual length: $actualLength.",[SOLANA_ERROR__KEYS__PUBLIC_KEY_MUST_MATCH_PRIVATE_KEY]:"The provided private key does not match the provided public key.",[SOLANA_ERROR__KEYS__SIGNATURE_STRING_LENGTH_OUT_OF_RANGE]:"Expected base58-encoded signature string of length in the range [64, 88]. Actual length: $actualLength.",[SOLANA_ERROR__LAMPORTS_OUT_OF_RANGE]:"Lamports value must be in the range [0, 2e64-1]",[SOLANA_ERROR__MALFORMED_BIGINT_STRING]:"`$value` cannot be parsed as a `BigInt`",[SOLANA_ERROR__MALFORMED_JSON_RPC_ERROR]:"$message",[SOLANA_ERROR__MALFORMED_NUMBER_STRING]:"`$value` cannot be parsed as a `Number`",[SOLANA_ERROR__NONCE_ACCOUNT_NOT_FOUND]:"No nonce account could be found at address `$nonceAccountAddress`",[SOLANA_ERROR__RPC_SUBSCRIPTIONS__CANNOT_CREATE_SUBSCRIPTION_PLAN]:"The notification name must end in 'Notifications' and the API must supply a subscription plan creator function for the notification '$notificationName'.",[SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CLOSED_BEFORE_MESSAGE_BUFFERED]:"WebSocket was closed before payload could be added to the send buffer",[SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED]:"WebSocket connection closed",[SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_FAILED_TO_CONNECT]:"WebSocket failed to connect",[SOLANA_ERROR__RPC_SUBSCRIPTIONS__EXPECTED_SERVER_SUBSCRIPTION_ID]:"Failed to obtain a subscription id from the server",[SOLANA_ERROR__RPC__API_PLAN_MISSING_FOR_RPC_METHOD]:"Could not find an API plan for RPC method: `$method`",[SOLANA_ERROR__RPC__INTEGER_OVERFLOW]:"The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was `$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds `Number.MAX_SAFE_INTEGER`.",[SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR]:"HTTP error ($statusCode): $message",[SOLANA_ERROR__RPC__TRANSPORT_HTTP_HEADER_FORBIDDEN]:"HTTP header(s) forbidden: $headers. Learn more at https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.",[SOLANA_ERROR__SIGNER__ADDRESS_CANNOT_HAVE_MULTIPLE_SIGNERS]:"Multiple distinct signers were identified for address `$address`. Please ensure that you are using the same signer instance for each address.",[SOLANA_ERROR__SIGNER__EXPECTED_KEY_PAIR_SIGNER]:"The provided value does not implement the `KeyPairSigner` interface",[SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_MODIFYING_SIGNER]:"The provided value does not implement the `MessageModifyingSigner` interface",[SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_PARTIAL_SIGNER]:"The provided value does not implement the `MessagePartialSigner` interface",[SOLANA_ERROR__SIGNER__EXPECTED_MESSAGE_SIGNER]:"The provided value does not implement any of the `MessageSigner` interfaces",[SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_MODIFYING_SIGNER]:"The provided value does not implement the `TransactionModifyingSigner` interface",[SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_PARTIAL_SIGNER]:"The provided value does not implement the `TransactionPartialSigner` interface",[SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SENDING_SIGNER]:"The provided value does not implement the `TransactionSendingSigner` interface",[SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SIGNER]:"The provided value does not implement any of the `TransactionSigner` interfaces",[SOLANA_ERROR__SIGNER__TRANSACTION_CANNOT_HAVE_MULTIPLE_SENDING_SIGNERS]:"More than one `TransactionSendingSigner` was identified.",[SOLANA_ERROR__SIGNER__TRANSACTION_SENDING_SIGNER_MISSING]:"No `TransactionSendingSigner` was identified. Please provide a valid `TransactionWithSingleSendingSigner` transaction.",[SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED]:"Wallet account signers do not support signing multiple messages/transactions in a single operation",[SOLANA_ERROR__SUBTLE_CRYPTO__CANNOT_EXPORT_NON_EXTRACTABLE_KEY]:"Cannot export a non-extractable key.",[SOLANA_ERROR__SUBTLE_CRYPTO__DIGEST_UNIMPLEMENTED]:"No digest implementation could be found.",[SOLANA_ERROR__SUBTLE_CRYPTO__DISALLOWED_IN_INSECURE_CONTEXT]:"Cryptographic operations are only allowed in secure browser contexts. Read more here: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts.",[SOLANA_ERROR__SUBTLE_CRYPTO__ED25519_ALGORITHM_UNIMPLEMENTED]:"This runtime does not support the generation of Ed25519 key pairs.\n\nInstall @solana/webcrypto-ed25519-polyfill and call its `install` function before generating keys in environments that do not support Ed25519.\n\nFor a list of runtimes that currently support Ed25519 operations, visit https://github.com/WICG/webcrypto-secure-curves/issues/20.",[SOLANA_ERROR__SUBTLE_CRYPTO__EXPORT_FUNCTION_UNIMPLEMENTED]:"No signature verification implementation could be found.",[SOLANA_ERROR__SUBTLE_CRYPTO__GENERATE_FUNCTION_UNIMPLEMENTED]:"No key generation implementation could be found.",[SOLANA_ERROR__SUBTLE_CRYPTO__SIGN_FUNCTION_UNIMPLEMENTED]:"No signing implementation could be found.",[SOLANA_ERROR__SUBTLE_CRYPTO__VERIFY_FUNCTION_UNIMPLEMENTED]:"No key export implementation could be found.",[SOLANA_ERROR__TIMESTAMP_OUT_OF_RANGE]:"Timestamp value must be in the range [-(2n ** 63n), (2n ** 63n) - 1]. `$value` given",[SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_BORROW_OUTSTANDING]:"Transaction processing left an account with an outstanding borrowed reference",[SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_IN_USE]:"Account in use",[SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_LOADED_TWICE]:"Account loaded twice",[SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_NOT_FOUND]:"Attempt to debit an account but found no record of a prior credit.",[SOLANA_ERROR__TRANSACTION_ERROR__ADDRESS_LOOKUP_TABLE_NOT_FOUND]:"Transaction loads an address table account that doesn't exist",[SOLANA_ERROR__TRANSACTION_ERROR__ALREADY_PROCESSED]:"This transaction has already been processed",[SOLANA_ERROR__TRANSACTION_ERROR__BLOCKHASH_NOT_FOUND]:"Blockhash not found",[SOLANA_ERROR__TRANSACTION_ERROR__CALL_CHAIN_TOO_DEEP]:"Loader call chain is too deep",[SOLANA_ERROR__TRANSACTION_ERROR__CLUSTER_MAINTENANCE]:"Transactions are currently disabled due to cluster maintenance",[SOLANA_ERROR__TRANSACTION_ERROR__DUPLICATE_INSTRUCTION]:"Transaction contains a duplicate instruction ($index) that is not allowed",[SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_FEE]:"Insufficient funds for fee",[SOLANA_ERROR__TRANSACTION_ERROR__INSUFFICIENT_FUNDS_FOR_RENT]:"Transaction results in an account ($accountIndex) with insufficient funds for rent",[SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ACCOUNT_FOR_FEE]:"This account may not be used to pay transaction fees",[SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ACCOUNT_INDEX]:"Transaction contains an invalid account reference",[SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_DATA]:"Transaction loads an address table account with invalid data",[SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_INDEX]:"Transaction address table lookup uses an invalid index",[SOLANA_ERROR__TRANSACTION_ERROR__INVALID_ADDRESS_LOOKUP_TABLE_OWNER]:"Transaction loads an address table account with an invalid owner",[SOLANA_ERROR__TRANSACTION_ERROR__INVALID_LOADED_ACCOUNTS_DATA_SIZE_LIMIT]:"LoadedAccountsDataSizeLimit set for transaction must be greater than 0.",[SOLANA_ERROR__TRANSACTION_ERROR__INVALID_PROGRAM_FOR_EXECUTION]:"This program may not be used for executing instructions",[SOLANA_ERROR__TRANSACTION_ERROR__INVALID_RENT_PAYING_ACCOUNT]:"Transaction leaves an account with a lower balance than rent-exempt minimum",[SOLANA_ERROR__TRANSACTION_ERROR__INVALID_WRITABLE_ACCOUNT]:"Transaction loads a writable account that cannot be written",[SOLANA_ERROR__TRANSACTION_ERROR__MAX_LOADED_ACCOUNTS_DATA_SIZE_EXCEEDED]:"Transaction exceeded max loaded accounts data size cap",[SOLANA_ERROR__TRANSACTION_ERROR__MISSING_SIGNATURE_FOR_FEE]:"Transaction requires a fee but has no signature present",[SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_ACCOUNT_NOT_FOUND]:"Attempt to load a program that does not exist",[SOLANA_ERROR__TRANSACTION_ERROR__PROGRAM_EXECUTION_TEMPORARILY_RESTRICTED]:"Execution of the program referenced by account at index $accountIndex is temporarily restricted.",[SOLANA_ERROR__TRANSACTION_ERROR__RESANITIZATION_NEEDED]:"ResanitizationNeeded",[SOLANA_ERROR__TRANSACTION_ERROR__SANITIZE_FAILURE]:"Transaction failed to sanitize accounts offsets correctly",[SOLANA_ERROR__TRANSACTION_ERROR__SIGNATURE_FAILURE]:"Transaction did not pass signature verification",[SOLANA_ERROR__TRANSACTION_ERROR__TOO_MANY_ACCOUNT_LOCKS]:"Transaction locked too many accounts",[SOLANA_ERROR__TRANSACTION_ERROR__UNBALANCED_TRANSACTION]:"Sum of account balances before and after transaction do not match",[SOLANA_ERROR__TRANSACTION_ERROR__UNKNOWN]:"The transaction failed with the error `$errorName`",[SOLANA_ERROR__TRANSACTION_ERROR__UNSUPPORTED_VERSION]:"Transaction version is unsupported",[SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_ACCOUNT_DATA_BLOCK_LIMIT]:"Transaction would exceed account data limit within the block",[SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_ACCOUNT_DATA_TOTAL_LIMIT]:"Transaction would exceed total account data limit",[SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_ACCOUNT_COST_LIMIT]:"Transaction would exceed max account limit within the block",[SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_BLOCK_COST_LIMIT]:"Transaction would exceed max Block Cost Limit",[SOLANA_ERROR__TRANSACTION_ERROR__WOULD_EXCEED_MAX_VOTE_COST_LIMIT]:"Transaction would exceed max Vote Cost Limit",[SOLANA_ERROR__TRANSACTION__ADDRESSES_CANNOT_SIGN_TRANSACTION]:"Attempted to sign a transaction with an address that is not a signer for it",[SOLANA_ERROR__TRANSACTION__ADDRESS_MISSING]:"Transaction is missing an address at index: $index.",[SOLANA_ERROR__TRANSACTION__CANNOT_ENCODE_WITH_EMPTY_SIGNATURES]:"Transaction has no expected signers therefore it cannot be encoded",[SOLANA_ERROR__TRANSACTION__EXCEEDS_SIZE_LIMIT]:"Transaction size $transactionSize exceeds limit of $transactionSizeLimit bytes",[SOLANA_ERROR__TRANSACTION__EXPECTED_BLOCKHASH_LIFETIME]:"Transaction does not have a blockhash lifetime",[SOLANA_ERROR__TRANSACTION__EXPECTED_NONCE_LIFETIME]:"Transaction is not a durable nonce transaction",[SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_CONTENTS_MISSING]:"Contents of these address lookup tables unknown: $lookupTableAddresses",[SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_ADDRESS_LOOKUP_TABLE_INDEX_OUT_OF_RANGE]:"Lookup of address at index $highestRequestedIndex failed for lookup table `$lookupTableAddress`. Highest known index is $highestKnownIndex. The lookup table may have been extended since its contents were retrieved",[SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING]:"No fee payer set in CompiledTransaction",[SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND]:"Could not find program address at index $index",[SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT]:"Failed to estimate the compute unit consumption for this transaction message. This is likely because simulating the transaction failed. Inspect the `cause` property of this error to learn more",[SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT]:"Transaction failed when it was simulated in order to estimate the compute unit consumption. The compute unit estimate provided is for a transaction that failed when simulated and may not be representative of the compute units this transaction would consume if successful. Inspect the `cause` property of this error to learn more",[SOLANA_ERROR__TRANSACTION__FEE_PAYER_MISSING]:"Transaction is missing a fee payer.",[SOLANA_ERROR__TRANSACTION__FEE_PAYER_SIGNATURE_MISSING]:"Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer.",[SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_FIRST_INSTRUCTION_MUST_BE_ADVANCE_NONCE]:"Transaction first instruction is not advance nonce account instruction.",[SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_INSTRUCTIONS_MISSING]:"Transaction with no instructions cannot be durable nonce transaction.",[SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_CANNOT_PAY_FEES]:"This transaction includes an address (`$programAddress`) which is both invoked and set as the fee payer. Program addresses may not pay fees",[SOLANA_ERROR__TRANSACTION__INVOKED_PROGRAMS_MUST_NOT_BE_WRITABLE]:"This transaction includes an address (`$programAddress`) which is both invoked and marked writable. Program addresses may not be writable",[SOLANA_ERROR__TRANSACTION__MESSAGE_SIGNATURES_MISMATCH]:"The transaction message expected the transaction to have $signerAddressesLength signatures, got $signaturesLength.",[SOLANA_ERROR__TRANSACTION__SIGNATURES_MISSING]:"Transaction is missing signatures for addresses: $addresses.",[SOLANA_ERROR__TRANSACTION__VERSION_NUMBER_OUT_OF_RANGE]:"Transaction version must be in the range [0, 127]. `$actualVersion` given"};var START_INDEX="i";var TYPE="t";function getHumanReadableErrorMessage(code,context={}){const messageFormatString=SolanaErrorMessages[code];if(messageFormatString.length===0){return""}let state;function commitStateUpTo(endIndex){if(state[TYPE]===2){const variableName=messageFormatString.slice(state[START_INDEX]+1,endIndex);fragments.push(variableName in context?`${context[variableName]}`:`$${variableName}`)}else if(state[TYPE]===1){fragments.push(messageFormatString.slice(state[START_INDEX],endIndex))}}const fragments=[];messageFormatString.split("").forEach((char,ii)=>{if(ii===0){state={[START_INDEX]:0,[TYPE]:messageFormatString[0]==="\\"?0:messageFormatString[0]==="$"?2:1};return}let nextState;switch(state[TYPE]){case 0:nextState={[START_INDEX]:ii,[TYPE]:1};break;case 1:if(char==="\\"){nextState={[START_INDEX]:ii,[TYPE]:0}}else if(char==="$"){nextState={[START_INDEX]:ii,[TYPE]:2}}break;case 2:if(char==="\\"){nextState={[START_INDEX]:ii,[TYPE]:0}}else if(char==="$"){nextState={[START_INDEX]:ii,[TYPE]:2}}else if(!char.match(/\w/)){nextState={[START_INDEX]:ii,[TYPE]:1}}break}if(nextState){if(state!==nextState){commitStateUpTo(ii)}state=nextState}});commitStateUpTo();return fragments.join("")}function getErrorMessage(code,context={}){if(process.env.NODE_ENV!=="production"){return getHumanReadableErrorMessage(code,context)}else{let decodingAdviceMessage=`Solana error #${code}; Decode this error by running \`npx @solana/errors decode -- ${code}`;if(Object.keys(context).length){decodingAdviceMessage+=` '${encodeContextObject(context)}'`}return`${decodingAdviceMessage}\``}}var SolanaError=class extends Error{cause=this.cause;context;constructor(...[code,contextAndErrorOptions]){let context;let errorOptions;if(contextAndErrorOptions){const{cause:cause,...contextRest}=contextAndErrorOptions;if(cause){errorOptions={cause:cause}}if(Object.keys(contextRest).length>0){context=contextRest}}const message=getErrorMessage(code,context);super(message,errorOptions);this.context={__code:code,...context};this.name="SolanaError"}};function getEncodedSize(value,encoder){return"fixedSize"in encoder?encoder.fixedSize:encoder.getSizeFromValue(value)}function createEncoder(encoder){return Object.freeze({...encoder,encode:value=>{const bytes=new Uint8Array(getEncodedSize(value,encoder));encoder.write(value,bytes,0);return bytes}})}function createDecoder(decoder){return Object.freeze({...decoder,decode:(bytes,offset=0)=>decoder.read(bytes,offset)[0]})}function isFixedSize(codec){return"fixedSize"in codec&&typeof codec.fixedSize==="number"}function combineCodec(encoder,decoder){if(isFixedSize(encoder)!==isFixedSize(decoder)){throw new SolanaError(SOLANA_ERROR__CODECS__ENCODER_DECODER_SIZE_COMPATIBILITY_MISMATCH)}if(isFixedSize(encoder)&&isFixedSize(decoder)&&encoder.fixedSize!==decoder.fixedSize){throw new SolanaError(SOLANA_ERROR__CODECS__ENCODER_DECODER_FIXED_SIZE_MISMATCH,{decoderFixedSize:decoder.fixedSize,encoderFixedSize:encoder.fixedSize})}if(!isFixedSize(encoder)&&!isFixedSize(decoder)&&encoder.maxSize!==decoder.maxSize){throw new SolanaError(SOLANA_ERROR__CODECS__ENCODER_DECODER_MAX_SIZE_MISMATCH,{decoderMaxSize:decoder.maxSize,encoderMaxSize:encoder.maxSize})}return{...decoder,...encoder,decode:decoder.decode,encode:encoder.encode,read:decoder.read,write:encoder.write}}function assertByteArrayIsNotEmptyForCodec(codecDescription,bytes,offset=0){if(bytes.length-offset<=0){throw new SolanaError(SOLANA_ERROR__CODECS__CANNOT_DECODE_EMPTY_BYTE_ARRAY,{codecDescription:codecDescription})}}function assertByteArrayHasEnoughBytesForCodec(codecDescription,expected,bytes,offset=0){const bytesLength=bytes.length-offset;if(bytesLength<expected){throw new SolanaError(SOLANA_ERROR__CODECS__INVALID_BYTE_LENGTH,{bytesLength:bytesLength,codecDescription:codecDescription,expected:expected})}}function assertNumberIsBetweenForCodec(codecDescription,min,max,value){if(value<min||value>max){throw new SolanaError(SOLANA_ERROR__CODECS__NUMBER_OUT_OF_RANGE,{codecDescription:codecDescription,max:max,min:min,value:value})}}function isLittleEndian(config){return config?.endian===1?false:true}function numberEncoderFactory(input){return createEncoder({fixedSize:input.size,write(value,bytes,offset){if(input.range){assertNumberIsBetweenForCodec(input.name,input.range[0],input.range[1],value)}const arrayBuffer=new ArrayBuffer(input.size);input.set(new DataView(arrayBuffer),value,isLittleEndian(input.config));bytes.set(new Uint8Array(arrayBuffer),offset);return offset+input.size}})}function numberDecoderFactory(input){return createDecoder({fixedSize:input.size,read(bytes,offset=0){assertByteArrayIsNotEmptyForCodec(input.name,bytes,offset);assertByteArrayHasEnoughBytesForCodec(input.name,input.size,bytes,offset);const view=new DataView(toArrayBuffer(bytes,offset,input.size));return[input.get(view,isLittleEndian(input.config)),offset+input.size]}})}function toArrayBuffer(bytes,offset,length){const bytesOffset=bytes.byteOffset+(offset??0);const bytesLength=length??bytes.byteLength;return bytes.buffer.slice(bytesOffset,bytesOffset+bytesLength)}var getU64Encoder=(config={})=>numberEncoderFactory({config:config,name:"u64",range:[0n,BigInt("0xffffffffffffffff")],set:(view,value,le)=>view.setBigUint64(0,BigInt(value),le),size:8});var getU64Decoder=(config={})=>numberDecoderFactory({config:config,get:(view,le)=>view.getBigUint64(0,le),name:"u64",size:8});var getU64Codec=(config={})=>combineCodec(getU64Encoder(config),getU64Decoder(config));class StructError extends TypeError{constructor(failure,failures){let cached;const{message:message,explanation:explanation,...rest}=failure;const{path:path}=failure;const msg=path.length===0?message:`At path: ${path.join(".")} -- ${message}`;super(explanation??msg);if(explanation!=null)this.cause=msg;Object.assign(this,rest);this.name=this.constructor.name;this.failures=()=>cached??(cached=[failure,...failures()])}}function isIterable(x){return isObject(x)&&typeof x[Symbol.iterator]==="function"}function isObject(x){return typeof x==="object"&&x!=null}function isNonArrayObject(x){return isObject(x)&&!Array.isArray(x)}function print(value){if(typeof value==="symbol"){return value.toString()}return typeof value==="string"?JSON.stringify(value):`${value}`}function shiftIterator(input){const{done:done,value:value}=input.next();return done?undefined:value}function toFailure(result,context,struct,value){if(result===true){return}else if(result===false){result={}}else if(typeof result==="string"){result={message:result}}const{path:path,branch:branch}=context;const{type:type}=struct;const{refinement:refinement,message:message=`Expected a value of type \`${type}\`${refinement?` with refinement \`${refinement}\``:""}, but received: \`${print(value)}\``}=result;return{value:value,type:type,refinement:refinement,key:path[path.length-1],path:path,branch:branch,...result,message:message}}function*toFailures(result,context,struct,value){if(!isIterable(result)){result=[result]}for(const r of result){const failure=toFailure(r,context,struct,value);if(failure){yield failure}}}function*run(value,struct,options={}){const{path:path=[],branch:branch=[value],coerce:coerce=false,mask:mask=false}=options;const ctx={path:path,branch:branch,mask:mask};if(coerce){value=struct.coercer(value,ctx)}let status="valid";for(const failure of struct.validator(value,ctx)){failure.explanation=options.message;status="not_valid";yield[failure,undefined]}for(let[k,v,s]of struct.entries(value,ctx)){const ts=run(v,s,{path:k===undefined?path:[...path,k],branch:k===undefined?branch:[...branch,v],coerce:coerce,mask:mask,message:options.message});for(const t of ts){if(t[0]){status=t[0].refinement!=null?"not_refined":"not_valid";yield[t[0],undefined]}else if(coerce){v=t[1];if(k===undefined){value=v}else if(value instanceof Map){value.set(k,v)}else if(value instanceof Set){value.add(v)}else if(isObject(value)){if(v!==undefined||k in value)value[k]=v}}}}if(status!=="not_valid"){for(const failure of struct.refiner(value,ctx)){failure.explanation=options.message;status="not_refined";yield[failure,undefined]}}if(status==="valid"){yield[undefined,value]}}let Struct$1=class Struct{constructor(props){const{type:type,schema:schema,validator:validator,refiner:refiner,coercer:coercer=value=>value,entries:entries=function*(){}}=props;this.type=type;this.schema=schema;this.entries=entries;this.coercer=coercer;if(validator){this.validator=(value,context)=>{const result=validator(value,context);return toFailures(result,context,this,value)}}else{this.validator=()=>[]}if(refiner){this.refiner=(value,context)=>{const result=refiner(value,context);return toFailures(result,context,this,value)}}else{this.refiner=()=>[]}}assert(value,message){return assert$1(value,this,message)}create(value,message){return create(value,this,message)}is(value){return is(value,this)}mask(value,message){return mask(value,this,message)}validate(value,options={}){return validate(value,this,options)}};function assert$1(value,struct,message){const result=validate(value,struct,{message:message});if(result[0]){throw result[0]}}function create(value,struct,message){const result=validate(value,struct,{coerce:true,message:message});if(result[0]){throw result[0]}else{return result[1]}}function mask(value,struct,message){const result=validate(value,struct,{coerce:true,mask:true,message:message});if(result[0]){throw result[0]}else{return result[1]}}function is(value,struct){const result=validate(value,struct);return!result[0]}function validate(value,struct,options={}){const tuples=run(value,struct,options);const tuple=shiftIterator(tuples);if(tuple[0]){const error=new StructError(tuple[0],function*(){for(const t of tuples){if(t[0]){yield t[0]}}});return[error,undefined]}else{const v=tuple[1];return[undefined,v]}}function define(name,validator){return new Struct$1({type:name,schema:null,validator:validator})}function any(){return define("any",()=>true)}function array(Element){return new Struct$1({type:"array",schema:Element,*entries(value){if(Element&&Array.isArray(value)){for(const[i,v]of value.entries()){yield[i,v,Element]}}},coercer(value){return Array.isArray(value)?value.slice():value},validator(value){return Array.isArray(value)||`Expected an array value, but received: ${print(value)}`}})}function boolean(){return define("boolean",value=>typeof value==="boolean")}function enums(values){const schema={};const description=values.map(v=>print(v)).join();for(const key of values){schema[key]=key}return new Struct$1({type:"enums",schema:schema,validator(value){return values.includes(value)||`Expected one of \`${description}\`, but received: ${print(value)}`}})}function instance(Class){return define("instance",value=>value instanceof Class||`Expected a \`${Class.name}\` instance, but received: ${print(value)}`)}function literal(constant){const description=print(constant);const t=typeof constant;return new Struct$1({type:"literal",schema:t==="string"||t==="number"||t==="boolean"?constant:null,validator(value){return value===constant||`Expected the literal \`${description}\`, but received: ${print(value)}`}})}function never(){return define("never",()=>false)}function nullable(struct){return new Struct$1({...struct,validator:(value,ctx)=>value===null||struct.validator(value,ctx),refiner:(value,ctx)=>value===null||struct.refiner(value,ctx)})}function number(){return define("number",value=>typeof value==="number"&&!isNaN(value)||`Expected a number, but received: ${print(value)}`)}function optional(struct){return new Struct$1({...struct,validator:(value,ctx)=>value===undefined||struct.validator(value,ctx),refiner:(value,ctx)=>value===undefined||struct.refiner(value,ctx)})}function record(Key,Value){return new Struct$1({type:"record",schema:null,*entries(value){if(isObject(value)){for(const k in value){const v=value[k];yield[k,k,Key];yield[k,v,Value]}}},validator(value){return isNonArrayObject(value)||`Expected an object, but received: ${print(value)}`},coercer(value){return isNonArrayObject(value)?{...value}:value}})}function string(){return define("string",value=>typeof value==="string"||`Expected a string, but received: ${print(value)}`)}function tuple(Structs){const Never=never();return new Struct$1({type:"tuple",schema:null,*entries(value){if(Array.isArray(value)){const length=Math.max(Structs.length,value.length);for(let i=0;i<length;i++){yield[i,value[i],Structs[i]||Never]}}},validator(value){return Array.isArray(value)||`Expected an array, but received: ${print(value)}`},coercer(value){return Array.isArray(value)?value.slice():value}})}function type(schema){const keys=Object.keys(schema);return new Struct$1({type:"type",schema:schema,*entries(value){if(isObject(value)){for(const k of keys){yield[k,value[k],schema[k]]}}},validator(value){return isNonArrayObject(value)||`Expected an object, but received: ${print(value)}`},coercer(value){return isNonArrayObject(value)?{...value}:value}})}function union(Structs){const description=Structs.map(s=>s.type).join(" | ");return new Struct$1({type:"union",schema:null,coercer(value,ctx){for(const S of Structs){const[error,coerced]=S.validate(value,{coerce:true,mask:ctx.mask});if(!error){return coerced}}return value},validator(value,ctx){const failures=[];for(const S of Structs){const[...tuples]=run(value,S,ctx);const[first]=tuples;if(!first[0]){return[]}else{for(const[failure]of tuples){if(failure){failures.push(failure)}}}}return[`Expected the value to satisfy a union of \`${description}\`, but received: ${print(value)}`,...failures]}})}function unknown(){return define("unknown",()=>true)}function coerce(struct,condition,coercer){return new Struct$1({...struct,coercer:(value,ctx)=>is(value,condition)?struct.coercer(coercer(value,ctx),ctx):struct.coercer(value,ctx)})}class HMAC extends Hash{constructor(hash,_key){super();this.finished=false;this.destroyed=false;ahash(hash);const key=toBytes(_key);this.iHash=hash.create();if(typeof this.iHash.update!=="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen;this.outputLen=this.iHash.outputLen;const blockLen=this.blockLen;const pad=new Uint8Array(blockLen);pad.set(key.length>blockLen?hash.create().update(key).digest():key);for(let i=0;i<pad.length;i++)pad[i]^=54;this.iHash.update(pad);this.oHash=hash.create();for(let i=0;i<pad.length;i++)pad[i]^=54^92;this.oHash.update(pad);clean(pad)}update(buf){aexists(this);this.iHash.update(buf);return this}digestInto(out){aexists(this);abytes(out,this.outputLen);this.finished=true;this.iHash.digestInto(out);this.oHash.update(out);this.oHash.digestInto(out);this.destroy()}digest(){const out=new Uint8Array(this.oHash.outputLen);this.digestInto(out);return out}_cloneInto(to){to||(to=Object.create(Object.getPrototypeOf(this),{}));const{oHash:oHash,iHash:iHash,finished:finished,destroyed:destroyed,blockLen:blockLen,outputLen:outputLen}=this;to=to;to.finished=finished;to.destroyed=destroyed;to.blockLen=blockLen;to.outputLen=outputLen;to.oHash=oHash._cloneInto(to.oHash);to.iHash=iHash._cloneInto(to.iHash);return to}clone(){return this._cloneInto()}destroy(){this.destroyed=true;this.oHash.destroy();this.iHash.destroy()}}const hmac=(hash,key,message)=>new HMAC(hash,key).update(message).digest();hmac.create=(hash,key)=>new HMAC(hash,key);
16
16
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const divNearest=(num,den)=>(num+(num>=0?den:-den)/_2n$1)/den;function _splitEndoScalar(k,basis,n){const[[a1,b1],[a2,b2]]=basis;const c1=divNearest(b2*k,n);const c2=divNearest(-b1*k,n);let k1=k-c1*a1-c2*a2;let k2=-c1*b1-c2*b2;const k1neg=k1<_0n;const k2neg=k2<_0n;if(k1neg)k1=-k1;if(k2neg)k2=-k2;const MAX_NUM=bitMask(Math.ceil(bitLen(n)/2))+_1n;if(k1<_0n||k1>=MAX_NUM||k2<_0n||k2>=MAX_NUM){throw new Error("splitScalar (endomorphism): failed, k="+k)}return{k1neg:k1neg,k1:k1,k2neg:k2neg,k2:k2}}function validateSigFormat(format){if(!["compact","recovered","der"].includes(format))throw new Error('Signature format must be "compact", "recovered", or "der"');return format}function validateSigOpts(opts,def){const optsn={};for(let optName of Object.keys(def)){optsn[optName]=opts[optName]===undefined?def[optName]:opts[optName]}_abool2(optsn.lowS,"lowS");_abool2(optsn.prehash,"prehash");if(optsn.format!==undefined)validateSigFormat(optsn.format);return optsn}class DERErr extends Error{constructor(m=""){super(m)}}const DER={Err:DERErr,_tlv:{encode:(tag,data)=>{const{Err:E}=DER;if(tag<0||tag>256)throw new E("tlv.encode: wrong tag");if(data.length&1)throw new E("tlv.encode: unpadded data");const dataLen=data.length/2;const len=numberToHexUnpadded(dataLen);if(len.length/2&128)throw new E("tlv.encode: long form length too big");const lenLen=dataLen>127?numberToHexUnpadded(len.length/2|128):"";const t=numberToHexUnpadded(tag);return t+lenLen+len+data},decode(tag,data){const{Err:E}=DER;let pos=0;if(tag<0||tag>256)throw new E("tlv.encode: wrong tag");if(data.length<2||data[pos++]!==tag)throw new E("tlv.decode: wrong tlv");const first=data[pos++];const isLong=!!(first&128);let length=0;if(!isLong)length=first;else{const lenLen=first&127;if(!lenLen)throw new E("tlv.decode(long): indefinite length not supported");if(lenLen>4)throw new E("tlv.decode(long): byte length is too big");const lengthBytes=data.subarray(pos,pos+lenLen);if(lengthBytes.length!==lenLen)throw new E("tlv.decode: length bytes not complete");if(lengthBytes[0]===0)throw new E("tlv.decode(long): zero leftmost byte");for(const b of lengthBytes)length=length<<8|b;pos+=lenLen;if(length<128)throw new E("tlv.decode(long): not minimal encoding")}const v=data.subarray(pos,pos+length);if(v.length!==length)throw new E("tlv.decode: wrong value length");return{v:v,l:data.subarray(pos+length)}}},_int:{encode(num){const{Err:E}=DER;if(num<_0n)throw new E("integer: negative integers are not allowed");let hex=numberToHexUnpadded(num);if(Number.parseInt(hex[0],16)&8)hex="00"+hex;if(hex.length&1)throw new E("unexpected DER parsing assertion: unpadded hex");return hex},decode(data){const{Err:E}=DER;if(data[0]&128)throw new E("invalid signature integer: negative");if(data[0]===0&&!(data[1]&128))throw new E("invalid signature integer: unnecessary leading zero");return bytesToNumberBE(data)}},toSig(hex){const{Err:E,_int:int,_tlv:tlv}=DER;const data=ensureBytes("signature",hex);const{v:seqBytes,l:seqLeftBytes}=tlv.decode(48,data);if(seqLeftBytes.length)throw new E("invalid signature: left bytes after parsing");const{v:rBytes,l:rLeftBytes}=tlv.decode(2,seqBytes);const{v:sBytes,l:sLeftBytes}=tlv.decode(2,rLeftBytes);if(sLeftBytes.length)throw new E("invalid signature: left bytes after parsing");return{r:int.decode(rBytes),s:int.decode(sBytes)}},hexFromSig(sig){const{_tlv:tlv,_int:int}=DER;const rs=tlv.encode(2,int.encode(sig.r));const ss=tlv.encode(2,int.encode(sig.s));const seq=rs+ss;return tlv.encode(48,seq)}};const _0n=BigInt(0),_1n=BigInt(1),_2n$1=BigInt(2),_3n=BigInt(3),_4n=BigInt(4);function _normFnElement(Fn,key){const{BYTES:expected}=Fn;let num;if(typeof key==="bigint"){num=key}else{let bytes=ensureBytes("private key",key);try{num=Fn.fromBytes(bytes)}catch(error){throw new Error(`invalid private key: expected ui8a of size ${expected}, got ${typeof key}`)}}if(!Fn.isValidNot0(num))throw new Error("invalid private key: out of range [1..N-1]");return num}function weierstrassN(params,extraOpts={}){const validated=_createCurveFields("weierstrass",params,extraOpts);const{Fp:Fp,Fn:Fn}=validated;let CURVE=validated.CURVE;const{h:cofactor,n:CURVE_ORDER}=CURVE;_validateObject(extraOpts,{},{allowInfinityPoint:"boolean",clearCofactor:"function",isTorsionFree:"function",fromBytes:"function",toBytes:"function",endo:"object",wrapPrivateKey:"boolean"});const{endo:endo}=extraOpts;if(endo){if(!Fp.is0(CURVE.a)||typeof endo.beta!=="bigint"||!Array.isArray(endo.basises)){throw new Error('invalid endo: expected "beta": bigint and "basises": array')}}const lengths=getWLengths(Fp,Fn);function assertCompressionIsSupported(){if(!Fp.isOdd)throw new Error("compression is not supported: Field does not have .isOdd()")}function pointToBytes(_c,point,isCompressed){const{x:x,y:y}=point.toAffine();const bx=Fp.toBytes(x);_abool2(isCompressed,"isCompressed");if(isCompressed){assertCompressionIsSupported();const hasEvenY=!Fp.isOdd(y);return concatBytes(pprefix(hasEvenY),bx)}else{return concatBytes(Uint8Array.of(4),bx,Fp.toBytes(y))}}function pointFromBytes(bytes){_abytes2(bytes,undefined,"Point");const{publicKey:comp,publicKeyUncompressed:uncomp}=lengths;const length=bytes.length;const head=bytes[0];const tail=bytes.subarray(1);if(length===comp&&(head===2||head===3)){const x=Fp.fromBytes(tail);if(!Fp.isValid(x))throw new Error("bad point: is not on curve, wrong x");const y2=weierstrassEquation(x);let y;try{y=Fp.sqrt(y2)}catch(sqrtError){const err=sqrtError instanceof Error?": "+sqrtError.message:"";throw new Error("bad point: is not on curve, sqrt error"+err)}assertCompressionIsSupported();const isYOdd=Fp.isOdd(y);const isHeadOdd=(head&1)===1;if(isHeadOdd!==isYOdd)y=Fp.neg(y);return{x:x,y:y}}else if(length===uncomp&&head===4){const L=Fp.BYTES;const x=Fp.fromBytes(tail.subarray(0,L));const y=Fp.fromBytes(tail.subarray(L,L*2));if(!isValidXY(x,y))throw new Error("bad point: is not on curve");return{x:x,y:y}}else{throw new Error(`bad point: got length ${length}, expected compressed=${comp} or uncompressed=${uncomp}`)}}const encodePoint=extraOpts.toBytes||pointToBytes;const decodePoint=extraOpts.fromBytes||pointFromBytes;function weierstrassEquation(x){const x2=Fp.sqr(x);const x3=Fp.mul(x2,x);return Fp.add(Fp.add(x3,Fp.mul(x,CURVE.a)),CURVE.b)}function isValidXY(x,y){const left=Fp.sqr(y);const right=weierstrassEquation(x);return Fp.eql(left,right)}if(!isValidXY(CURVE.Gx,CURVE.Gy))throw new Error("bad curve params: generator point");const _4a3=Fp.mul(Fp.pow(CURVE.a,_3n),_4n);const _27b2=Fp.mul(Fp.sqr(CURVE.b),BigInt(27));if(Fp.is0(Fp.add(_4a3,_27b2)))throw new Error("bad curve params: a or b");function acoord(title,n,banZero=false){if(!Fp.isValid(n)||banZero&&Fp.is0(n))throw new Error(`bad point coordinate ${title}`);return n}function aprjpoint(other){if(!(other instanceof Point))throw new Error("ProjectivePoint expected")}function splitEndoScalarN(k){if(!endo||!endo.basises)throw new Error("no endo");return _splitEndoScalar(k,endo.basises,Fn.ORDER)}const toAffineMemo=memoized((p,iz)=>{const{X:X,Y:Y,Z:Z}=p;if(Fp.eql(Z,Fp.ONE))return{x:X,y:Y};const is0=p.is0();if(iz==null)iz=is0?Fp.ONE:Fp.inv(Z);const x=Fp.mul(X,iz);const y=Fp.mul(Y,iz);const zz=Fp.mul(Z,iz);if(is0)return{x:Fp.ZERO,y:Fp.ZERO};if(!Fp.eql(zz,Fp.ONE))throw new Error("invZ was invalid");return{x:x,y:y}});const assertValidMemo=memoized(p=>{if(p.is0()){if(extraOpts.allowInfinityPoint&&!Fp.is0(p.Y))return;throw new Error("bad point: ZERO")}const{x:x,y:y}=p.toAffine();if(!Fp.isValid(x)||!Fp.isValid(y))throw new Error("bad point: x or y not field elements");if(!isValidXY(x,y))throw new Error("bad point: equation left != right");if(!p.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return true});function finishEndo(endoBeta,k1p,k2p,k1neg,k2neg){k2p=new Point(Fp.mul(k2p.X,endoBeta),k2p.Y,k2p.Z);k1p=negateCt(k1neg,k1p);k2p=negateCt(k2neg,k2p);return k1p.add(k2p)}class Point{constructor(X,Y,Z){this.X=acoord("x",X);this.Y=acoord("y",Y,true);this.Z=acoord("z",Z);Object.freeze(this)}static CURVE(){return CURVE}static fromAffine(p){const{x:x,y:y}=p||{};if(!p||!Fp.isValid(x)||!Fp.isValid(y))throw new Error("invalid affine point");if(p instanceof Point)throw new Error("projective point not allowed");if(Fp.is0(x)&&Fp.is0(y))return Point.ZERO;return new Point(x,y,Fp.ONE)}static fromBytes(bytes){const P=Point.fromAffine(decodePoint(_abytes2(bytes,undefined,"point")));P.assertValidity();return P}static fromHex(hex){return Point.fromBytes(ensureBytes("pointHex",hex))}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(windowSize=8,isLazy=true){wnaf.createCache(this,windowSize);if(!isLazy)this.multiply(_3n);return this}assertValidity(){assertValidMemo(this)}hasEvenY(){const{y:y}=this.toAffine();if(!Fp.isOdd)throw new Error("Field doesn't support isOdd");return!Fp.isOdd(y)}equals(other){aprjpoint(other);const{X:X1,Y:Y1,Z:Z1}=this;const{X:X2,Y:Y2,Z:Z2}=other;const U1=Fp.eql(Fp.mul(X1,Z2),Fp.mul(X2,Z1));const U2=Fp.eql(Fp.mul(Y1,Z2),Fp.mul(Y2,Z1));return U1&&U2}negate(){return new Point(this.X,Fp.neg(this.Y),this.Z)}double(){const{a:a,b:b}=CURVE;const b3=Fp.mul(b,_3n);const{X:X1,Y:Y1,Z:Z1}=this;let X3=Fp.ZERO,Y3=Fp.ZERO,Z3=Fp.ZERO;let t0=Fp.mul(X1,X1);let t1=Fp.mul(Y1,Y1);let t2=Fp.mul(Z1,Z1);let t3=Fp.mul(X1,Y1);t3=Fp.add(t3,t3);Z3=Fp.mul(X1,Z1);Z3=Fp.add(Z3,Z3);X3=Fp.mul(a,Z3);Y3=Fp.mul(b3,t2);Y3=Fp.add(X3,Y3);X3=Fp.sub(t1,Y3);Y3=Fp.add(t1,Y3);Y3=Fp.mul(X3,Y3);X3=Fp.mul(t3,X3);Z3=Fp.mul(b3,Z3);t2=Fp.mul(a,t2);t3=Fp.sub(t0,t2);t3=Fp.mul(a,t3);t3=Fp.add(t3,Z3);Z3=Fp.add(t0,t0);t0=Fp.add(Z3,t0);t0=Fp.add(t0,t2);t0=Fp.mul(t0,t3);Y3=Fp.add(Y3,t0);t2=Fp.mul(Y1,Z1);t2=Fp.add(t2,t2);t0=Fp.mul(t2,t3);X3=Fp.sub(X3,t0);Z3=Fp.mul(t2,t1);Z3=Fp.add(Z3,Z3);Z3=Fp.add(Z3,Z3);return new Point(X3,Y3,Z3)}add(other){aprjpoint(other);const{X:X1,Y:Y1,Z:Z1}=this;const{X:X2,Y:Y2,Z:Z2}=other;let X3=Fp.ZERO,Y3=Fp.ZERO,Z3=Fp.ZERO;const a=CURVE.a;const b3=Fp.mul(CURVE.b,_3n);let t0=Fp.mul(X1,X2);let t1=Fp.mul(Y1,Y2);let t2=Fp.mul(Z1,Z2);let t3=Fp.add(X1,Y1);let t4=Fp.add(X2,Y2);t3=Fp.mul(t3,t4);t4=Fp.add(t0,t1);t3=Fp.sub(t3,t4);t4=Fp.add(X1,Z1);let t5=Fp.add(X2,Z2);t4=Fp.mul(t4,t5);t5=Fp.add(t0,t2);t4=Fp.sub(t4,t5);t5=Fp.add(Y1,Z1);X3=Fp.add(Y2,Z2);t5=Fp.mul(t5,X3);X3=Fp.add(t1,t2);t5=Fp.sub(t5,X3);Z3=Fp.mul(a,t4);X3=Fp.mul(b3,t2);Z3=Fp.add(X3,Z3);X3=Fp.sub(t1,Z3);Z3=Fp.add(t1,Z3);Y3=Fp.mul(X3,Z3);t1=Fp.add(t0,t0);t1=Fp.add(t1,t0);t2=Fp.mul(a,t2);t4=Fp.mul(b3,t4);t1=Fp.add(t1,t2);t2=Fp.sub(t0,t2);t2=Fp.mul(a,t2);t4=Fp.add(t4,t2);t0=Fp.mul(t1,t4);Y3=Fp.add(Y3,t0);t0=Fp.mul(t5,t4);X3=Fp.mul(t3,X3);X3=Fp.sub(X3,t0);t0=Fp.mul(t3,t1);Z3=Fp.mul(t5,Z3);Z3=Fp.add(Z3,t0);return new Point(X3,Y3,Z3)}subtract(other){return this.add(other.negate())}is0(){return this.equals(Point.ZERO)}multiply(scalar){const{endo:endo}=extraOpts;if(!Fn.isValidNot0(scalar))throw new Error("invalid scalar: out of range");let point,fake;const mul=n=>wnaf.cached(this,n,p=>normalizeZ(Point,p));if(endo){const{k1neg:k1neg,k1:k1,k2neg:k2neg,k2:k2}=splitEndoScalarN(scalar);const{p:k1p,f:k1f}=mul(k1);const{p:k2p,f:k2f}=mul(k2);fake=k1f.add(k2f);point=finishEndo(endo.beta,k1p,k2p,k1neg,k2neg)}else{const{p:p,f:f}=mul(scalar);point=p;fake=f}return normalizeZ(Point,[point,fake])[0]}multiplyUnsafe(sc){const{endo:endo}=extraOpts;const p=this;if(!Fn.isValid(sc))throw new Error("invalid scalar: out of range");if(sc===_0n||p.is0())return Point.ZERO;if(sc===_1n)return p;if(wnaf.hasCache(this))return this.multiply(sc);if(endo){const{k1neg:k1neg,k1:k1,k2neg:k2neg,k2:k2}=splitEndoScalarN(sc);const{p1:p1,p2:p2}=mulEndoUnsafe(Point,p,k1,k2);return finishEndo(endo.beta,p1,p2,k1neg,k2neg)}else{return wnaf.unsafe(p,sc)}}multiplyAndAddUnsafe(Q,a,b){const sum=this.multiplyUnsafe(a).add(Q.multiplyUnsafe(b));return sum.is0()?undefined:sum}toAffine(invertedZ){return toAffineMemo(this,invertedZ)}isTorsionFree(){const{isTorsionFree:isTorsionFree}=extraOpts;if(cofactor===_1n)return true;if(isTorsionFree)return isTorsionFree(Point,this);return wnaf.unsafe(this,CURVE_ORDER).is0()}clearCofactor(){const{clearCofactor:clearCofactor}=extraOpts;if(cofactor===_1n)return this;if(clearCofactor)return clearCofactor(Point,this);return this.multiplyUnsafe(cofactor)}isSmallOrder(){return this.multiplyUnsafe(cofactor).is0()}toBytes(isCompressed=true){_abool2(isCompressed,"isCompressed");this.assertValidity();return encodePoint(Point,this,isCompressed)}toHex(isCompressed=true){return bytesToHex(this.toBytes(isCompressed))}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}get px(){return this.X}get py(){return this.X}get pz(){return this.Z}toRawBytes(isCompressed=true){return this.toBytes(isCompressed)}_setWindowSize(windowSize){this.precompute(windowSize)}static normalizeZ(points){return normalizeZ(Point,points)}static msm(points,scalars){return pippenger(Point,Fn,points,scalars)}static fromPrivateKey(privateKey){return Point.BASE.multiply(_normFnElement(Fn,privateKey))}}Point.BASE=new Point(CURVE.Gx,CURVE.Gy,Fp.ONE);Point.ZERO=new Point(Fp.ZERO,Fp.ONE,Fp.ZERO);Point.Fp=Fp;Point.Fn=Fn;const bits=Fn.BITS;const wnaf=new wNAF(Point,extraOpts.endo?Math.ceil(bits/2):bits);Point.BASE.precompute(8);return Point}function pprefix(hasEvenY){return Uint8Array.of(hasEvenY?2:3)}function getWLengths(Fp,Fn){return{secretKey:Fn.BYTES,publicKey:1+Fp.BYTES,publicKeyUncompressed:1+2*Fp.BYTES,publicKeyHasPrefix:true,signature:2*Fn.BYTES}}function ecdh(Point,ecdhOpts={}){const{Fn:Fn}=Point;const randomBytes_=ecdhOpts.randomBytes||randomBytes;const lengths=Object.assign(getWLengths(Point.Fp,Fn),{seed:getMinHashLength(Fn.ORDER)});function isValidSecretKey(secretKey){try{return!!_normFnElement(Fn,secretKey)}catch(error){return false}}function isValidPublicKey(publicKey,isCompressed){const{publicKey:comp,publicKeyUncompressed:publicKeyUncompressed}=lengths;try{const l=publicKey.length;if(isCompressed===true&&l!==comp)return false;if(isCompressed===false&&l!==publicKeyUncompressed)return false;return!!Point.fromBytes(publicKey)}catch(error){return false}}function randomSecretKey(seed=randomBytes_(lengths.seed)){return mapHashToField(_abytes2(seed,lengths.seed,"seed"),Fn.ORDER)}function getPublicKey(secretKey,isCompressed=true){return Point.BASE.multiply(_normFnElement(Fn,secretKey)).toBytes(isCompressed)}function keygen(seed){const secretKey=randomSecretKey(seed);return{secretKey:secretKey,publicKey:getPublicKey(secretKey)}}function isProbPub(item){if(typeof item==="bigint")return false;if(item instanceof Point)return true;const{secretKey:secretKey,publicKey:publicKey,publicKeyUncompressed:publicKeyUncompressed}=lengths;if(Fn.allowedLengths||secretKey===publicKey)return undefined;const l=ensureBytes("key",item).length;return l===publicKey||l===publicKeyUncompressed}function getSharedSecret(secretKeyA,publicKeyB,isCompressed=true){if(isProbPub(secretKeyA)===true)throw new Error("first arg must be private key");if(isProbPub(publicKeyB)===false)throw new Error("second arg must be public key");const s=_normFnElement(Fn,secretKeyA);const b=Point.fromHex(publicKeyB);return b.multiply(s).toBytes(isCompressed)}const utils={isValidSecretKey:isValidSecretKey,isValidPublicKey:isValidPublicKey,randomSecretKey:randomSecretKey,isValidPrivateKey:isValidSecretKey,randomPrivateKey:randomSecretKey,normPrivateKeyToScalar:key=>_normFnElement(Fn,key),precompute(windowSize=8,point=Point.BASE){return point.precompute(windowSize,false)}};return Object.freeze({getPublicKey:getPublicKey,getSharedSecret:getSharedSecret,keygen:keygen,Point:Point,utils:utils,lengths:lengths})}function ecdsa(Point,hash,ecdsaOpts={}){ahash(hash);_validateObject(ecdsaOpts,{},{hmac:"function",lowS:"boolean",randomBytes:"function",bits2int:"function",bits2int_modN:"function"});const randomBytes$1=ecdsaOpts.randomBytes||randomBytes;const hmac$1=ecdsaOpts.hmac||((key,...msgs)=>hmac(hash,key,concatBytes(...msgs)));const{Fp:Fp,Fn:Fn}=Point;const{ORDER:CURVE_ORDER,BITS:fnBits}=Fn;const{keygen:keygen,getPublicKey:getPublicKey,getSharedSecret:getSharedSecret,utils:utils,lengths:lengths}=ecdh(Point,ecdsaOpts);const defaultSigOpts={prehash:false,lowS:typeof ecdsaOpts.lowS==="boolean"?ecdsaOpts.lowS:false,format:undefined,extraEntropy:false};const defaultSigOpts_format="compact";function isBiggerThanHalfOrder(number){const HALF=CURVE_ORDER>>_1n;return number>HALF}function validateRS(title,num){if(!Fn.isValidNot0(num))throw new Error(`invalid signature ${title}: out of range 1..Point.Fn.ORDER`);return num}function validateSigLength(bytes,format){validateSigFormat(format);const size=lengths.signature;const sizer=format==="compact"?size:format==="recovered"?size+1:undefined;return _abytes2(bytes,sizer,`${format} signature`)}class Signature{constructor(r,s,recovery){this.r=validateRS("r",r);this.s=validateRS("s",s);if(recovery!=null)this.recovery=recovery;Object.freeze(this)}static fromBytes(bytes,format=defaultSigOpts_format){validateSigLength(bytes,format);let recid;if(format==="der"){const{r:r,s:s}=DER.toSig(_abytes2(bytes));return new Signature(r,s)}if(format==="recovered"){recid=bytes[0];format="compact";bytes=bytes.subarray(1)}const L=Fn.BYTES;const r=bytes.subarray(0,L);const s=bytes.subarray(L,L*2);return new Signature(Fn.fromBytes(r),Fn.fromBytes(s),recid)}static fromHex(hex,format){return this.fromBytes(hexToBytes(hex),format)}addRecoveryBit(recovery){return new Signature(this.r,this.s,recovery)}recoverPublicKey(messageHash){const FIELD_ORDER=Fp.ORDER;const{r:r,s:s,recovery:rec}=this;if(rec==null||![0,1,2,3].includes(rec))throw new Error("recovery id invalid");const hasCofactor=CURVE_ORDER*_2n$1<FIELD_ORDER;if(hasCofactor&&rec>1)throw new Error("recovery id is ambiguous for h>1 curve");const radj=rec===2||rec===3?r+CURVE_ORDER:r;if(!Fp.isValid(radj))throw new Error("recovery id 2 or 3 invalid");const x=Fp.toBytes(radj);const R=Point.fromBytes(concatBytes(pprefix((rec&1)===0),x));const ir=Fn.inv(radj);const h=bits2int_modN(ensureBytes("msgHash",messageHash));const u1=Fn.create(-h*ir);const u2=Fn.create(s*ir);const Q=Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));if(Q.is0())throw new Error("point at infinify");Q.assertValidity();return Q}hasHighS(){return isBiggerThanHalfOrder(this.s)}toBytes(format=defaultSigOpts_format){validateSigFormat(format);if(format==="der")return hexToBytes(DER.hexFromSig(this));const r=Fn.toBytes(this.r);const s=Fn.toBytes(this.s);if(format==="recovered"){if(this.recovery==null)throw new Error("recovery bit must be present");return concatBytes(Uint8Array.of(this.recovery),r,s)}return concatBytes(r,s)}toHex(format){return bytesToHex(this.toBytes(format))}assertValidity(){}static fromCompact(hex){return Signature.fromBytes(ensureBytes("sig",hex),"compact")}static fromDER(hex){return Signature.fromBytes(ensureBytes("sig",hex),"der")}normalizeS(){return this.hasHighS()?new Signature(this.r,Fn.neg(this.s),this.recovery):this}toDERRawBytes(){return this.toBytes("der")}toDERHex(){return bytesToHex(this.toBytes("der"))}toCompactRawBytes(){return this.toBytes("compact")}toCompactHex(){return bytesToHex(this.toBytes("compact"))}}const bits2int=ecdsaOpts.bits2int||function bits2int_def(bytes){if(bytes.length>8192)throw new Error("input is too large");const num=bytesToNumberBE(bytes);const delta=bytes.length*8-fnBits;return delta>0?num>>BigInt(delta):num};const bits2int_modN=ecdsaOpts.bits2int_modN||function bits2int_modN_def(bytes){return Fn.create(bits2int(bytes))};const ORDER_MASK=bitMask(fnBits);function int2octets(num){aInRange("num < 2^"+fnBits,num,_0n,ORDER_MASK);return Fn.toBytes(num)}function validateMsgAndHash(message,prehash){_abytes2(message,undefined,"message");return prehash?_abytes2(hash(message),undefined,"prehashed message"):message}function prepSig(message,privateKey,opts){if(["recovered","canonical"].some(k=>k in opts))throw new Error("sign() legacy options not supported");const{lowS:lowS,prehash:prehash,extraEntropy:extraEntropy}=validateSigOpts(opts,defaultSigOpts);message=validateMsgAndHash(message,prehash);const h1int=bits2int_modN(message);const d=_normFnElement(Fn,privateKey);const seedArgs=[int2octets(d),int2octets(h1int)];if(extraEntropy!=null&&extraEntropy!==false){const e=extraEntropy===true?randomBytes$1(lengths.secretKey):extraEntropy;seedArgs.push(ensureBytes("extraEntropy",e))}const seed=concatBytes(...seedArgs);const m=h1int;function k2sig(kBytes){const k=bits2int(kBytes);if(!Fn.isValidNot0(k))return;const ik=Fn.inv(k);const q=Point.BASE.multiply(k).toAffine();const r=Fn.create(q.x);if(r===_0n)return;const s=Fn.create(ik*Fn.create(m+r*d));if(s===_0n)return;let recovery=(q.x===r?0:2)|Number(q.y&_1n);let normS=s;if(lowS&&isBiggerThanHalfOrder(s)){normS=Fn.neg(s);recovery^=1}return new Signature(r,normS,recovery)}return{seed:seed,k2sig:k2sig}}function sign(message,secretKey,opts={}){message=ensureBytes("message",message);const{seed:seed,k2sig:k2sig}=prepSig(message,secretKey,opts);const drbg=createHmacDrbg(hash.outputLen,Fn.BYTES,hmac$1);const sig=drbg(seed,k2sig);return sig}function tryParsingSig(sg){let sig=undefined;const isHex=typeof sg==="string"||isBytes(sg);const isObj=!isHex&&sg!==null&&typeof sg==="object"&&typeof sg.r==="bigint"&&typeof sg.s==="bigint";if(!isHex&&!isObj)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");if(isObj){sig=new Signature(sg.r,sg.s)}else if(isHex){try{sig=Signature.fromBytes(ensureBytes("sig",sg),"der")}catch(derError){if(!(derError instanceof DER.Err))throw derError}if(!sig){try{sig=Signature.fromBytes(ensureBytes("sig",sg),"compact")}catch(error){return false}}}if(!sig)return false;return sig}function verify(signature,message,publicKey,opts={}){const{lowS:lowS,prehash:prehash,format:format}=validateSigOpts(opts,defaultSigOpts);publicKey=ensureBytes("publicKey",publicKey);message=validateMsgAndHash(ensureBytes("message",message),prehash);if("strict"in opts)throw new Error("options.strict was renamed to lowS");const sig=format===undefined?tryParsingSig(signature):Signature.fromBytes(ensureBytes("sig",signature),format);if(sig===false)return false;try{const P=Point.fromBytes(publicKey);if(lowS&&sig.hasHighS())return false;const{r:r,s:s}=sig;const h=bits2int_modN(message);const is=Fn.inv(s);const u1=Fn.create(h*is);const u2=Fn.create(r*is);const R=Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2));if(R.is0())return false;const v=Fn.create(R.x);return v===r}catch(e){return false}}function recoverPublicKey(signature,message,opts={}){const{prehash:prehash}=validateSigOpts(opts,defaultSigOpts);message=validateMsgAndHash(message,prehash);return Signature.fromBytes(signature,"recovered").recoverPublicKey(message).toBytes()}return Object.freeze({keygen:keygen,getPublicKey:getPublicKey,getSharedSecret:getSharedSecret,utils:utils,lengths:lengths,Point:Point,sign:sign,verify:verify,recoverPublicKey:recoverPublicKey,Signature:Signature,hash:hash})}function _weierstrass_legacy_opts_to_new(c){const CURVE={a:c.a,b:c.b,p:c.Fp.ORDER,n:c.n,h:c.h,Gx:c.Gx,Gy:c.Gy};const Fp=c.Fp;let allowedLengths=c.allowedPrivateKeyLengths?Array.from(new Set(c.allowedPrivateKeyLengths.map(l=>Math.ceil(l/2)))):undefined;const Fn=Field(CURVE.n,{BITS:c.nBitLength,allowedLengths:allowedLengths,modFromBytes:c.wrapPrivateKey});const curveOpts={Fp:Fp,Fn:Fn,allowInfinityPoint:c.allowInfinityPoint,endo:c.endo,isTorsionFree:c.isTorsionFree,clearCofactor:c.clearCofactor,fromBytes:c.fromBytes,toBytes:c.toBytes};return{CURVE:CURVE,curveOpts:curveOpts}}function _ecdsa_legacy_opts_to_new(c){const{CURVE:CURVE,curveOpts:curveOpts}=_weierstrass_legacy_opts_to_new(c);const ecdsaOpts={hmac:c.hmac,randomBytes:c.randomBytes,lowS:c.lowS,bits2int:c.bits2int,bits2int_modN:c.bits2int_modN};return{CURVE:CURVE,curveOpts:curveOpts,hash:c.hash,ecdsaOpts:ecdsaOpts}}function _ecdsa_new_output_to_legacy(c,_ecdsa){const Point=_ecdsa.Point;return Object.assign({},_ecdsa,{ProjectivePoint:Point,CURVE:Object.assign({},c,nLength(Point.Fn.ORDER,Point.Fn.BITS))})}function weierstrass(c){const{CURVE:CURVE,curveOpts:curveOpts,hash:hash,ecdsaOpts:ecdsaOpts}=_ecdsa_legacy_opts_to_new(c);const Point=weierstrassN(CURVE,curveOpts);const signs=ecdsa(Point,hash,ecdsaOpts);return _ecdsa_new_output_to_legacy(c,signs)}
17
17
  /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */function createCurve(curveDef,defHash){const create=hash=>weierstrass({...curveDef,hash:hash});return{...create(defHash),create:create}}
18
- /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const secp256k1_CURVE={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")};const secp256k1_ENDO={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};const _2n=BigInt(2);function sqrtMod(y){const P=secp256k1_CURVE.p;const _3n=BigInt(3),_6n=BigInt(6),_11n=BigInt(11),_22n=BigInt(22);const _23n=BigInt(23),_44n=BigInt(44),_88n=BigInt(88);const b2=y*y*y%P;const b3=b2*b2*y%P;const b6=pow2(b3,_3n,P)*b3%P;const b9=pow2(b6,_3n,P)*b3%P;const b11=pow2(b9,_2n,P)*b2%P;const b22=pow2(b11,_11n,P)*b11%P;const b44=pow2(b22,_22n,P)*b22%P;const b88=pow2(b44,_44n,P)*b44%P;const b176=pow2(b88,_88n,P)*b88%P;const b220=pow2(b176,_44n,P)*b44%P;const b223=pow2(b220,_3n,P)*b3%P;const t1=pow2(b223,_23n,P)*b22%P;const t2=pow2(t1,_6n,P)*b2%P;const root=pow2(t2,_2n,P);if(!Fpk1.eql(Fpk1.sqr(root),y))throw new Error("Cannot find square root");return root}const Fpk1=Field(secp256k1_CURVE.p,{sqrt:sqrtMod});const secp256k1=createCurve({...secp256k1_CURVE,Fp:Fpk1,lowS:true,endo:secp256k1_ENDO},sha256$1);ed25519.utils.randomPrivateKey;const generateKeypair=()=>{const privateScalar=ed25519.utils.randomPrivateKey();const publicKey=getPublicKey(privateScalar);const secretKey=new Uint8Array(64);secretKey.set(privateScalar);secretKey.set(publicKey,32);return{publicKey:publicKey,secretKey:secretKey}};const getPublicKey=ed25519.getPublicKey;function isOnCurve(publicKey){try{ed25519.ExtendedPoint.fromHex(publicKey);return true}catch{return false}}const sign=(message,secretKey)=>ed25519.sign(message,secretKey.slice(0,32));const verify=ed25519.verify;const toBuffer=arr=>{if(bufferExports.Buffer.isBuffer(arr)){return arr}else if(arr instanceof Uint8Array){return bufferExports.Buffer.from(arr.buffer,arr.byteOffset,arr.byteLength)}else{return bufferExports.Buffer.from(arr)}};class Struct{constructor(properties){Object.assign(this,properties)}encode(){return bufferExports.Buffer.from(libExports.serialize(SOLANA_SCHEMA,this))}static decode(data){return libExports.deserialize(SOLANA_SCHEMA,this,data)}static decodeUnchecked(data){return libExports.deserializeUnchecked(SOLANA_SCHEMA,this,data)}}const SOLANA_SCHEMA=new Map;var _PublicKey;const MAX_SEED_LENGTH=32;const PUBLIC_KEY_LENGTH=32;function isPublicKeyData(value){return value._bn!==undefined}let uniquePublicKeyCounter=1;class PublicKey extends Struct{constructor(value){super({});this._bn=void 0;if(isPublicKeyData(value)){this._bn=value._bn}else{if(typeof value==="string"){const decoded=bs58.decode(value);if(decoded.length!=PUBLIC_KEY_LENGTH){throw new Error(`Invalid public key input`)}this._bn=new BN(decoded)}else{this._bn=new BN(value)}if(this._bn.byteLength()>PUBLIC_KEY_LENGTH){throw new Error(`Invalid public key input`)}}}static unique(){const key=new PublicKey(uniquePublicKeyCounter);uniquePublicKeyCounter+=1;return new PublicKey(key.toBuffer())}equals(publicKey){return this._bn.eq(publicKey._bn)}toBase58(){return bs58.encode(this.toBytes())}toJSON(){return this.toBase58()}toBytes(){const buf=this.toBuffer();return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}toBuffer(){const b=this._bn.toArrayLike(bufferExports.Buffer);if(b.length===PUBLIC_KEY_LENGTH){return b}const zeroPad=bufferExports.Buffer.alloc(32);b.copy(zeroPad,32-b.length);return zeroPad}get[Symbol.toStringTag](){return`PublicKey(${this.toString()})`}toString(){return this.toBase58()}static async createWithSeed(fromPublicKey,seed,programId){const buffer=bufferExports.Buffer.concat([fromPublicKey.toBuffer(),bufferExports.Buffer.from(seed),programId.toBuffer()]);const publicKeyBytes=sha256(buffer);return new PublicKey(publicKeyBytes)}static createProgramAddressSync(seeds,programId){let buffer=bufferExports.Buffer.alloc(0);seeds.forEach(function(seed){if(seed.length>MAX_SEED_LENGTH){throw new TypeError(`Max seed length exceeded`)}buffer=bufferExports.Buffer.concat([buffer,toBuffer(seed)])});buffer=bufferExports.Buffer.concat([buffer,programId.toBuffer(),bufferExports.Buffer.from("ProgramDerivedAddress")]);const publicKeyBytes=sha256(buffer);if(isOnCurve(publicKeyBytes)){throw new Error(`Invalid seeds, address must fall off the curve`)}return new PublicKey(publicKeyBytes)}static async createProgramAddress(seeds,programId){return this.createProgramAddressSync(seeds,programId)}static findProgramAddressSync(seeds,programId){let nonce=255;let address;while(nonce!=0){try{const seedsWithNonce=seeds.concat(bufferExports.Buffer.from([nonce]));address=this.createProgramAddressSync(seedsWithNonce,programId)}catch(err){if(err instanceof TypeError){throw err}nonce--;continue}return[address,nonce]}throw new Error(`Unable to find a viable program address nonce`)}static async findProgramAddress(seeds,programId){return this.findProgramAddressSync(seeds,programId)}static isOnCurve(pubkeyData){const pubkey=new PublicKey(pubkeyData);return isOnCurve(pubkey.toBytes())}}_PublicKey=PublicKey;PublicKey.default=new _PublicKey("11111111111111111111111111111111");SOLANA_SCHEMA.set(PublicKey,{kind:"struct",fields:[["_bn","u256"]]});new PublicKey("BPFLoader1111111111111111111111111111111111");const PACKET_DATA_SIZE=1280-40-8;const VERSION_PREFIX_MASK=127;const SIGNATURE_LENGTH_IN_BYTES=64;class MessageAccountKeys{constructor(staticAccountKeys,accountKeysFromLookups){this.staticAccountKeys=void 0;this.accountKeysFromLookups=void 0;this.staticAccountKeys=staticAccountKeys;this.accountKeysFromLookups=accountKeysFromLookups}keySegments(){const keySegments=[this.staticAccountKeys];if(this.accountKeysFromLookups){keySegments.push(this.accountKeysFromLookups.writable);keySegments.push(this.accountKeysFromLookups.readonly)}return keySegments}get(index){for(const keySegment of this.keySegments()){if(index<keySegment.length){return keySegment[index]}else{index-=keySegment.length}}return}get length(){return this.keySegments().flat().length}compileInstructions(instructions){const U8_MAX=255;if(this.length>U8_MAX+1){throw new Error("Account index overflow encountered during compilation")}const keyIndexMap=new Map;this.keySegments().flat().forEach((key,index)=>{keyIndexMap.set(key.toBase58(),index)});const findKeyIndex=key=>{const keyIndex=keyIndexMap.get(key.toBase58());if(keyIndex===undefined)throw new Error("Encountered an unknown instruction account key during compilation");return keyIndex};return instructions.map(instruction=>({programIdIndex:findKeyIndex(instruction.programId),accountKeyIndexes:instruction.keys.map(meta=>findKeyIndex(meta.pubkey)),data:instruction.data}))}}const publicKey$2=(property="publicKey")=>LayoutExports$1.blob(32,property);const rustString=(property="string")=>{const rsl=LayoutExports$1.struct([LayoutExports$1.u32("length"),LayoutExports$1.u32("lengthPadding"),LayoutExports$1.blob(LayoutExports$1.offset(LayoutExports$1.u32(),-8),"chars")],property);const _decode=rsl.decode.bind(rsl);const _encode=rsl.encode.bind(rsl);const rslShim=rsl;rslShim.decode=(b,offset)=>{const data=_decode(b,offset);return data["chars"].toString()};rslShim.encode=(str,b,offset)=>{const data={chars:bufferExports.Buffer.from(str,"utf8")};return _encode(data,b,offset)};rslShim.alloc=str=>LayoutExports$1.u32().span+LayoutExports$1.u32().span+bufferExports.Buffer.from(str,"utf8").length;return rslShim};const authorized=(property="authorized")=>LayoutExports$1.struct([publicKey$2("staker"),publicKey$2("withdrawer")],property);const lockup=(property="lockup")=>LayoutExports$1.struct([LayoutExports$1.ns64("unixTimestamp"),LayoutExports$1.ns64("epoch"),publicKey$2("custodian")],property);const voteInit=(property="voteInit")=>LayoutExports$1.struct([publicKey$2("nodePubkey"),publicKey$2("authorizedVoter"),publicKey$2("authorizedWithdrawer"),LayoutExports$1.u8("commission")],property);const voteAuthorizeWithSeedArgs=(property="voteAuthorizeWithSeedArgs")=>LayoutExports$1.struct([LayoutExports$1.u32("voteAuthorizationType"),publicKey$2("currentAuthorityDerivedKeyOwnerPubkey"),rustString("currentAuthorityDerivedKeySeed"),publicKey$2("newAuthorized")],property);function getAlloc(type,fields){const getItemAlloc=item=>{if(item.span>=0){return item.span}else if(typeof item.alloc==="function"){return item.alloc(fields[item.property])}else if("count"in item&&"elementLayout"in item){const field=fields[item.property];if(Array.isArray(field)){return field.length*getItemAlloc(item.elementLayout)}}else if("fields"in item){return getAlloc({layout:item},fields[item.property])}return 0};let alloc=0;type.layout.fields.forEach(item=>{alloc+=getItemAlloc(item)});return alloc}function decodeLength(bytes){let len=0;let size=0;for(;;){let elem=bytes.shift();len|=(elem&127)<<size*7;size+=1;if((elem&128)===0){break}}return len}function encodeLength(bytes,len){let rem_len=len;for(;;){let elem=rem_len&127;rem_len>>=7;if(rem_len==0){bytes.push(elem);break}else{elem|=128;bytes.push(elem)}}}function assert(condition,message){if(!condition){throw new Error(message||"Assertion failed")}}class CompiledKeys{constructor(payer,keyMetaMap){this.payer=void 0;this.keyMetaMap=void 0;this.payer=payer;this.keyMetaMap=keyMetaMap}static compile(instructions,payer){const keyMetaMap=new Map;const getOrInsertDefault=pubkey=>{const address=pubkey.toBase58();let keyMeta=keyMetaMap.get(address);if(keyMeta===undefined){keyMeta={isSigner:false,isWritable:false,isInvoked:false};keyMetaMap.set(address,keyMeta)}return keyMeta};const payerKeyMeta=getOrInsertDefault(payer);payerKeyMeta.isSigner=true;payerKeyMeta.isWritable=true;for(const ix of instructions){getOrInsertDefault(ix.programId).isInvoked=true;for(const accountMeta of ix.keys){const keyMeta=getOrInsertDefault(accountMeta.pubkey);keyMeta.isSigner||=accountMeta.isSigner;keyMeta.isWritable||=accountMeta.isWritable}}return new CompiledKeys(payer,keyMetaMap)}getMessageComponents(){const mapEntries=[...this.keyMetaMap.entries()];assert(mapEntries.length<=256,"Max static account keys length exceeded");const writableSigners=mapEntries.filter(([,meta])=>meta.isSigner&&meta.isWritable);const readonlySigners=mapEntries.filter(([,meta])=>meta.isSigner&&!meta.isWritable);const writableNonSigners=mapEntries.filter(([,meta])=>!meta.isSigner&&meta.isWritable);const readonlyNonSigners=mapEntries.filter(([,meta])=>!meta.isSigner&&!meta.isWritable);const header={numRequiredSignatures:writableSigners.length+readonlySigners.length,numReadonlySignedAccounts:readonlySigners.length,numReadonlyUnsignedAccounts:readonlyNonSigners.length};{assert(writableSigners.length>0,"Expected at least one writable signer key");const[payerAddress]=writableSigners[0];assert(payerAddress===this.payer.toBase58(),"Expected first writable signer key to be the fee payer")}const staticAccountKeys=[...writableSigners.map(([address])=>new PublicKey(address)),...readonlySigners.map(([address])=>new PublicKey(address)),...writableNonSigners.map(([address])=>new PublicKey(address)),...readonlyNonSigners.map(([address])=>new PublicKey(address))];return[header,staticAccountKeys]}extractTableLookup(lookupTable){const[writableIndexes,drainedWritableKeys]=this.drainKeysFoundInLookupTable(lookupTable.state.addresses,keyMeta=>!keyMeta.isSigner&&!keyMeta.isInvoked&&keyMeta.isWritable);const[readonlyIndexes,drainedReadonlyKeys]=this.drainKeysFoundInLookupTable(lookupTable.state.addresses,keyMeta=>!keyMeta.isSigner&&!keyMeta.isInvoked&&!keyMeta.isWritable);if(writableIndexes.length===0&&readonlyIndexes.length===0){return}return[{accountKey:lookupTable.key,writableIndexes:writableIndexes,readonlyIndexes:readonlyIndexes},{writable:drainedWritableKeys,readonly:drainedReadonlyKeys}]}drainKeysFoundInLookupTable(lookupTableEntries,keyMetaFilter){const lookupTableIndexes=new Array;const drainedKeys=new Array;for(const[address,keyMeta]of this.keyMetaMap.entries()){if(keyMetaFilter(keyMeta)){const key=new PublicKey(address);const lookupTableIndex=lookupTableEntries.findIndex(entry=>entry.equals(key));if(lookupTableIndex>=0){assert(lookupTableIndex<256,"Max lookup table index exceeded");lookupTableIndexes.push(lookupTableIndex);drainedKeys.push(key);this.keyMetaMap.delete(address)}}}return[lookupTableIndexes,drainedKeys]}}const END_OF_BUFFER_ERROR_MESSAGE="Reached end of buffer unexpectedly";function guardedShift(byteArray){if(byteArray.length===0){throw new Error(END_OF_BUFFER_ERROR_MESSAGE)}return byteArray.shift()}function guardedSplice(byteArray,...args){const[start]=args;if(args.length===2?start+(args[1]??0)>byteArray.length:start>=byteArray.length){throw new Error(END_OF_BUFFER_ERROR_MESSAGE)}return byteArray.splice(...args)}class Message{constructor(args){this.header=void 0;this.accountKeys=void 0;this.recentBlockhash=void 0;this.instructions=void 0;this.indexToProgramIds=new Map;this.header=args.header;this.accountKeys=args.accountKeys.map(account=>new PublicKey(account));this.recentBlockhash=args.recentBlockhash;this.instructions=args.instructions;this.instructions.forEach(ix=>this.indexToProgramIds.set(ix.programIdIndex,this.accountKeys[ix.programIdIndex]))}get version(){return"legacy"}get staticAccountKeys(){return this.accountKeys}get compiledInstructions(){return this.instructions.map(ix=>({programIdIndex:ix.programIdIndex,accountKeyIndexes:ix.accounts,data:bs58.decode(ix.data)}))}get addressTableLookups(){return[]}getAccountKeys(){return new MessageAccountKeys(this.staticAccountKeys)}static compile(args){const compiledKeys=CompiledKeys.compile(args.instructions,args.payerKey);const[header,staticAccountKeys]=compiledKeys.getMessageComponents();const accountKeys=new MessageAccountKeys(staticAccountKeys);const instructions=accountKeys.compileInstructions(args.instructions).map(ix=>({programIdIndex:ix.programIdIndex,accounts:ix.accountKeyIndexes,data:bs58.encode(ix.data)}));return new Message({header:header,accountKeys:staticAccountKeys,recentBlockhash:args.recentBlockhash,instructions:instructions})}isAccountSigner(index){return index<this.header.numRequiredSignatures}isAccountWritable(index){const numSignedAccounts=this.header.numRequiredSignatures;if(index>=this.header.numRequiredSignatures){const unsignedAccountIndex=index-numSignedAccounts;const numUnsignedAccounts=this.accountKeys.length-numSignedAccounts;const numWritableUnsignedAccounts=numUnsignedAccounts-this.header.numReadonlyUnsignedAccounts;return unsignedAccountIndex<numWritableUnsignedAccounts}else{const numWritableSignedAccounts=numSignedAccounts-this.header.numReadonlySignedAccounts;return index<numWritableSignedAccounts}}isProgramId(index){return this.indexToProgramIds.has(index)}programIds(){return[...this.indexToProgramIds.values()]}nonProgramIds(){return this.accountKeys.filter((_,index)=>!this.isProgramId(index))}serialize(){const numKeys=this.accountKeys.length;let keyCount=[];encodeLength(keyCount,numKeys);const instructions=this.instructions.map(instruction=>{const{accounts:accounts,programIdIndex:programIdIndex}=instruction;const data=Array.from(bs58.decode(instruction.data));let keyIndicesCount=[];encodeLength(keyIndicesCount,accounts.length);let dataCount=[];encodeLength(dataCount,data.length);return{programIdIndex:programIdIndex,keyIndicesCount:bufferExports.Buffer.from(keyIndicesCount),keyIndices:accounts,dataLength:bufferExports.Buffer.from(dataCount),data:data}});let instructionCount=[];encodeLength(instructionCount,instructions.length);let instructionBuffer=bufferExports.Buffer.alloc(PACKET_DATA_SIZE);bufferExports.Buffer.from(instructionCount).copy(instructionBuffer);let instructionBufferLength=instructionCount.length;instructions.forEach(instruction=>{const instructionLayout=LayoutExports$1.struct([LayoutExports$1.u8("programIdIndex"),LayoutExports$1.blob(instruction.keyIndicesCount.length,"keyIndicesCount"),LayoutExports$1.seq(LayoutExports$1.u8("keyIndex"),instruction.keyIndices.length,"keyIndices"),LayoutExports$1.blob(instruction.dataLength.length,"dataLength"),LayoutExports$1.seq(LayoutExports$1.u8("userdatum"),instruction.data.length,"data")]);const length=instructionLayout.encode(instruction,instructionBuffer,instructionBufferLength);instructionBufferLength+=length});instructionBuffer=instructionBuffer.slice(0,instructionBufferLength);const signDataLayout=LayoutExports$1.struct([LayoutExports$1.blob(1,"numRequiredSignatures"),LayoutExports$1.blob(1,"numReadonlySignedAccounts"),LayoutExports$1.blob(1,"numReadonlyUnsignedAccounts"),LayoutExports$1.blob(keyCount.length,"keyCount"),LayoutExports$1.seq(publicKey$2("key"),numKeys,"keys"),publicKey$2("recentBlockhash")]);const transaction={numRequiredSignatures:bufferExports.Buffer.from([this.header.numRequiredSignatures]),numReadonlySignedAccounts:bufferExports.Buffer.from([this.header.numReadonlySignedAccounts]),numReadonlyUnsignedAccounts:bufferExports.Buffer.from([this.header.numReadonlyUnsignedAccounts]),keyCount:bufferExports.Buffer.from(keyCount),keys:this.accountKeys.map(key=>toBuffer(key.toBytes())),recentBlockhash:bs58.decode(this.recentBlockhash)};let signData=bufferExports.Buffer.alloc(2048);const length=signDataLayout.encode(transaction,signData);instructionBuffer.copy(signData,length);return signData.slice(0,length+instructionBuffer.length)}static from(buffer){let byteArray=[...buffer];const numRequiredSignatures=guardedShift(byteArray);if(numRequiredSignatures!==(numRequiredSignatures&VERSION_PREFIX_MASK)){throw new Error("Versioned messages must be deserialized with VersionedMessage.deserialize()")}const numReadonlySignedAccounts=guardedShift(byteArray);const numReadonlyUnsignedAccounts=guardedShift(byteArray);const accountCount=decodeLength(byteArray);let accountKeys=[];for(let i=0;i<accountCount;i++){const account=guardedSplice(byteArray,0,PUBLIC_KEY_LENGTH);accountKeys.push(new PublicKey(bufferExports.Buffer.from(account)))}const recentBlockhash=guardedSplice(byteArray,0,PUBLIC_KEY_LENGTH);const instructionCount=decodeLength(byteArray);let instructions=[];for(let i=0;i<instructionCount;i++){const programIdIndex=guardedShift(byteArray);const accountCount=decodeLength(byteArray);const accounts=guardedSplice(byteArray,0,accountCount);const dataLength=decodeLength(byteArray);const dataSlice=guardedSplice(byteArray,0,dataLength);const data=bs58.encode(bufferExports.Buffer.from(dataSlice));instructions.push({programIdIndex:programIdIndex,accounts:accounts,data:data})}const messageArgs={header:{numRequiredSignatures:numRequiredSignatures,numReadonlySignedAccounts:numReadonlySignedAccounts,numReadonlyUnsignedAccounts:numReadonlyUnsignedAccounts},recentBlockhash:bs58.encode(bufferExports.Buffer.from(recentBlockhash)),accountKeys:accountKeys,instructions:instructions};return new Message(messageArgs)}}const DEFAULT_SIGNATURE=bufferExports.Buffer.alloc(SIGNATURE_LENGTH_IN_BYTES).fill(0);class TransactionInstruction{constructor(opts){this.keys=void 0;this.programId=void 0;this.data=bufferExports.Buffer.alloc(0);this.programId=opts.programId;this.keys=opts.keys;if(opts.data){this.data=opts.data}}toJSON(){return{keys:this.keys.map(({pubkey:pubkey,isSigner:isSigner,isWritable:isWritable})=>({pubkey:pubkey.toJSON(),isSigner:isSigner,isWritable:isWritable})),programId:this.programId.toJSON(),data:[...this.data]}}}class Transaction{get signature(){if(this.signatures.length>0){return this.signatures[0].signature}return null}constructor(opts){this.signatures=[];this.feePayer=void 0;this.instructions=[];this.recentBlockhash=void 0;this.lastValidBlockHeight=void 0;this.nonceInfo=void 0;this.minNonceContextSlot=void 0;this._message=void 0;this._json=void 0;if(!opts){return}if(opts.feePayer){this.feePayer=opts.feePayer}if(opts.signatures){this.signatures=opts.signatures}if(Object.prototype.hasOwnProperty.call(opts,"nonceInfo")){const{minContextSlot:minContextSlot,nonceInfo:nonceInfo}=opts;this.minNonceContextSlot=minContextSlot;this.nonceInfo=nonceInfo}else if(Object.prototype.hasOwnProperty.call(opts,"lastValidBlockHeight")){const{blockhash:blockhash,lastValidBlockHeight:lastValidBlockHeight}=opts;this.recentBlockhash=blockhash;this.lastValidBlockHeight=lastValidBlockHeight}else{const{recentBlockhash:recentBlockhash,nonceInfo:nonceInfo}=opts;if(nonceInfo){this.nonceInfo=nonceInfo}this.recentBlockhash=recentBlockhash}}toJSON(){return{recentBlockhash:this.recentBlockhash||null,feePayer:this.feePayer?this.feePayer.toJSON():null,nonceInfo:this.nonceInfo?{nonce:this.nonceInfo.nonce,nonceInstruction:this.nonceInfo.nonceInstruction.toJSON()}:null,instructions:this.instructions.map(instruction=>instruction.toJSON()),signers:this.signatures.map(({publicKey:publicKey})=>publicKey.toJSON())}}add(...items){if(items.length===0){throw new Error("No instructions")}items.forEach(item=>{if("instructions"in item){this.instructions=this.instructions.concat(item.instructions)}else if("data"in item&&"programId"in item&&"keys"in item){this.instructions.push(item)}else{this.instructions.push(new TransactionInstruction(item))}});return this}compileMessage(){if(this._message&&JSON.stringify(this.toJSON())===JSON.stringify(this._json)){return this._message}let recentBlockhash;let instructions;if(this.nonceInfo){recentBlockhash=this.nonceInfo.nonce;if(this.instructions[0]!=this.nonceInfo.nonceInstruction){instructions=[this.nonceInfo.nonceInstruction,...this.instructions]}else{instructions=this.instructions}}else{recentBlockhash=this.recentBlockhash;instructions=this.instructions}if(!recentBlockhash){throw new Error("Transaction recentBlockhash required")}if(instructions.length<1){console.warn("No instructions provided")}let feePayer;if(this.feePayer){feePayer=this.feePayer}else if(this.signatures.length>0&&this.signatures[0].publicKey){feePayer=this.signatures[0].publicKey}else{throw new Error("Transaction fee payer required")}for(let i=0;i<instructions.length;i++){if(instructions[i].programId===undefined){throw new Error(`Transaction instruction index ${i} has undefined program id`)}}const programIds=[];const accountMetas=[];instructions.forEach(instruction=>{instruction.keys.forEach(accountMeta=>{accountMetas.push({...accountMeta})});const programId=instruction.programId.toString();if(!programIds.includes(programId)){programIds.push(programId)}});programIds.forEach(programId=>{accountMetas.push({pubkey:new PublicKey(programId),isSigner:false,isWritable:false})});const uniqueMetas=[];accountMetas.forEach(accountMeta=>{const pubkeyString=accountMeta.pubkey.toString();const uniqueIndex=uniqueMetas.findIndex(x=>x.pubkey.toString()===pubkeyString);if(uniqueIndex>-1){uniqueMetas[uniqueIndex].isWritable=uniqueMetas[uniqueIndex].isWritable||accountMeta.isWritable;uniqueMetas[uniqueIndex].isSigner=uniqueMetas[uniqueIndex].isSigner||accountMeta.isSigner}else{uniqueMetas.push(accountMeta)}});uniqueMetas.sort(function(x,y){if(x.isSigner!==y.isSigner){return x.isSigner?-1:1}if(x.isWritable!==y.isWritable){return x.isWritable?-1:1}const options={localeMatcher:"best fit",usage:"sort",sensitivity:"variant",ignorePunctuation:false,numeric:false,caseFirst:"lower"};return x.pubkey.toBase58().localeCompare(y.pubkey.toBase58(),"en",options)});const feePayerIndex=uniqueMetas.findIndex(x=>x.pubkey.equals(feePayer));if(feePayerIndex>-1){const[payerMeta]=uniqueMetas.splice(feePayerIndex,1);payerMeta.isSigner=true;payerMeta.isWritable=true;uniqueMetas.unshift(payerMeta)}else{uniqueMetas.unshift({pubkey:feePayer,isSigner:true,isWritable:true})}for(const signature of this.signatures){const uniqueIndex=uniqueMetas.findIndex(x=>x.pubkey.equals(signature.publicKey));if(uniqueIndex>-1){if(!uniqueMetas[uniqueIndex].isSigner){uniqueMetas[uniqueIndex].isSigner=true;console.warn("Transaction references a signature that is unnecessary, "+"only the fee payer and instruction signer accounts should sign a transaction. "+"This behavior is deprecated and will throw an error in the next major version release.")}}else{throw new Error(`unknown signer: ${signature.publicKey.toString()}`)}}let numRequiredSignatures=0;let numReadonlySignedAccounts=0;let numReadonlyUnsignedAccounts=0;const signedKeys=[];const unsignedKeys=[];uniqueMetas.forEach(({pubkey:pubkey,isSigner:isSigner,isWritable:isWritable})=>{if(isSigner){signedKeys.push(pubkey.toString());numRequiredSignatures+=1;if(!isWritable){numReadonlySignedAccounts+=1}}else{unsignedKeys.push(pubkey.toString());if(!isWritable){numReadonlyUnsignedAccounts+=1}}});const accountKeys=signedKeys.concat(unsignedKeys);const compiledInstructions=instructions.map(instruction=>{const{data:data,programId:programId}=instruction;return{programIdIndex:accountKeys.indexOf(programId.toString()),accounts:instruction.keys.map(meta=>accountKeys.indexOf(meta.pubkey.toString())),data:bs58.encode(data)}});compiledInstructions.forEach(instruction=>{assert(instruction.programIdIndex>=0);instruction.accounts.forEach(keyIndex=>assert(keyIndex>=0))});return new Message({header:{numRequiredSignatures:numRequiredSignatures,numReadonlySignedAccounts:numReadonlySignedAccounts,numReadonlyUnsignedAccounts:numReadonlyUnsignedAccounts},accountKeys:accountKeys,recentBlockhash:recentBlockhash,instructions:compiledInstructions})}_compile(){const message=this.compileMessage();const signedKeys=message.accountKeys.slice(0,message.header.numRequiredSignatures);if(this.signatures.length===signedKeys.length){const valid=this.signatures.every((pair,index)=>signedKeys[index].equals(pair.publicKey));if(valid)return message}this.signatures=signedKeys.map(publicKey=>({signature:null,publicKey:publicKey}));return message}serializeMessage(){return this._compile().serialize()}async getEstimatedFee(connection){return(await connection.getFeeForMessage(this.compileMessage())).value}setSigners(...signers){if(signers.length===0){throw new Error("No signers")}const seen=new Set;this.signatures=signers.filter(publicKey=>{const key=publicKey.toString();if(seen.has(key)){return false}else{seen.add(key);return true}}).map(publicKey=>({signature:null,publicKey:publicKey}))}sign(...signers){if(signers.length===0){throw new Error("No signers")}const seen=new Set;const uniqueSigners=[];for(const signer of signers){const key=signer.publicKey.toString();if(seen.has(key)){continue}else{seen.add(key);uniqueSigners.push(signer)}}this.signatures=uniqueSigners.map(signer=>({signature:null,publicKey:signer.publicKey}));const message=this._compile();this._partialSign(message,...uniqueSigners)}partialSign(...signers){if(signers.length===0){throw new Error("No signers")}const seen=new Set;const uniqueSigners=[];for(const signer of signers){const key=signer.publicKey.toString();if(seen.has(key)){continue}else{seen.add(key);uniqueSigners.push(signer)}}const message=this._compile();this._partialSign(message,...uniqueSigners)}_partialSign(message,...signers){const signData=message.serialize();signers.forEach(signer=>{const signature=sign(signData,signer.secretKey);this._addSignature(signer.publicKey,toBuffer(signature))})}addSignature(pubkey,signature){this._compile();this._addSignature(pubkey,signature)}_addSignature(pubkey,signature){assert(signature.length===64);const index=this.signatures.findIndex(sigpair=>pubkey.equals(sigpair.publicKey));if(index<0){throw new Error(`unknown signer: ${pubkey.toString()}`)}this.signatures[index].signature=bufferExports.Buffer.from(signature)}verifySignatures(requireAllSignatures=true){const signatureErrors=this._getMessageSignednessErrors(this.serializeMessage(),requireAllSignatures);return!signatureErrors}_getMessageSignednessErrors(message,requireAllSignatures){const errors={};for(const{signature:signature,publicKey:publicKey}of this.signatures){if(signature===null){if(requireAllSignatures){(errors.missing||=[]).push(publicKey)}}else{if(!verify(signature,message,publicKey.toBytes())){(errors.invalid||=[]).push(publicKey)}}}return errors.invalid||errors.missing?errors:undefined}serialize(config){const{requireAllSignatures:requireAllSignatures,verifySignatures:verifySignatures}=Object.assign({requireAllSignatures:true,verifySignatures:true},config);const signData=this.serializeMessage();if(verifySignatures){const sigErrors=this._getMessageSignednessErrors(signData,requireAllSignatures);if(sigErrors){let errorMessage="Signature verification failed.";if(sigErrors.invalid){errorMessage+=`\nInvalid signature for public key${sigErrors.invalid.length===1?"":"(s)"} [\`${sigErrors.invalid.map(p=>p.toBase58()).join("`, `")}\`].`}if(sigErrors.missing){errorMessage+=`\nMissing signature for public key${sigErrors.missing.length===1?"":"(s)"} [\`${sigErrors.missing.map(p=>p.toBase58()).join("`, `")}\`].`}throw new Error(errorMessage)}}return this._serialize(signData)}_serialize(signData){const{signatures:signatures}=this;const signatureCount=[];encodeLength(signatureCount,signatures.length);const transactionLength=signatureCount.length+signatures.length*64+signData.length;const wireTransaction=bufferExports.Buffer.alloc(transactionLength);assert(signatures.length<256);bufferExports.Buffer.from(signatureCount).copy(wireTransaction,0);signatures.forEach(({signature:signature},index)=>{if(signature!==null){assert(signature.length===64,`signature has invalid length`);bufferExports.Buffer.from(signature).copy(wireTransaction,signatureCount.length+index*64)}});signData.copy(wireTransaction,signatureCount.length+signatures.length*64);assert(wireTransaction.length<=PACKET_DATA_SIZE,`Transaction too large: ${wireTransaction.length} > ${PACKET_DATA_SIZE}`);return wireTransaction}get keys(){assert(this.instructions.length===1);return this.instructions[0].keys.map(keyObj=>keyObj.pubkey)}get programId(){assert(this.instructions.length===1);return this.instructions[0].programId}get data(){assert(this.instructions.length===1);return this.instructions[0].data}static from(buffer){let byteArray=[...buffer];const signatureCount=decodeLength(byteArray);let signatures=[];for(let i=0;i<signatureCount;i++){const signature=guardedSplice(byteArray,0,SIGNATURE_LENGTH_IN_BYTES);signatures.push(bs58.encode(bufferExports.Buffer.from(signature)))}return Transaction.populate(Message.from(byteArray),signatures)}static populate(message,signatures=[]){const transaction=new Transaction;transaction.recentBlockhash=message.recentBlockhash;if(message.header.numRequiredSignatures>0){transaction.feePayer=message.accountKeys[0]}signatures.forEach((signature,index)=>{const sigPubkeyPair={signature:signature==bs58.encode(DEFAULT_SIGNATURE)?null:bs58.decode(signature),publicKey:message.accountKeys[index]};transaction.signatures.push(sigPubkeyPair)});message.instructions.forEach(instruction=>{const keys=instruction.accounts.map(account=>{const pubkey=message.accountKeys[account];return{pubkey:pubkey,isSigner:transaction.signatures.some(keyObj=>keyObj.publicKey.toString()===pubkey.toString())||message.isAccountSigner(account),isWritable:message.isAccountWritable(account)}});transaction.instructions.push(new TransactionInstruction({keys:keys,programId:message.accountKeys[instruction.programIdIndex],data:bs58.decode(instruction.data)}))});transaction._message=message;transaction._json=transaction.toJSON();return transaction}}const SYSVAR_CLOCK_PUBKEY=new PublicKey("SysvarC1ock11111111111111111111111111111111");new PublicKey("SysvarEpochSchedu1e111111111111111111111111");new PublicKey("Sysvar1nstructions1111111111111111111111111");const SYSVAR_RECENT_BLOCKHASHES_PUBKEY=new PublicKey("SysvarRecentB1ockHashes11111111111111111111");const SYSVAR_RENT_PUBKEY=new PublicKey("SysvarRent111111111111111111111111111111111");new PublicKey("SysvarRewards111111111111111111111111111111");new PublicKey("SysvarS1otHashes111111111111111111111111111");new PublicKey("SysvarS1otHistory11111111111111111111111111");const SYSVAR_STAKE_HISTORY_PUBKEY=new PublicKey("SysvarStakeHistory1111111111111111111111111");function encodeData$1(type,fields){const allocLength=type.layout.span>=0?type.layout.span:getAlloc(type,fields);const data=bufferExports.Buffer.alloc(allocLength);const layoutFields=Object.assign({instruction:type.index},fields);type.layout.encode(layoutFields,data);return data}const FeeCalculatorLayout=LayoutExports$1.nu64("lamportsPerSignature");const NonceAccountLayout=LayoutExports$1.struct([LayoutExports$1.u32("version"),LayoutExports$1.u32("state"),publicKey$2("authorizedPubkey"),publicKey$2("nonce"),LayoutExports$1.struct([FeeCalculatorLayout],"feeCalculator")]);const NONCE_ACCOUNT_LENGTH=NonceAccountLayout.span;function u64$2(property){const layout=LayoutExports$1.blob(8,property);const decode=layout.decode.bind(layout);const encode=layout.encode.bind(layout);const bigIntLayout=layout;const codec=getU64Codec();bigIntLayout.decode=(buffer,offset)=>{const src=decode(buffer,offset);return codec.decode(src)};bigIntLayout.encode=(bigInt,buffer,offset)=>{const src=codec.encode(bigInt);return encode(src,buffer,offset)};return bigIntLayout}const SYSTEM_INSTRUCTION_LAYOUTS=Object.freeze({Create:{index:0,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("lamports"),LayoutExports$1.ns64("space"),publicKey$2("programId")])},Assign:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("programId")])},Transfer:{index:2,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),u64$2("lamports")])},CreateWithSeed:{index:3,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("base"),rustString("seed"),LayoutExports$1.ns64("lamports"),LayoutExports$1.ns64("space"),publicKey$2("programId")])},AdvanceNonceAccount:{index:4,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},WithdrawNonceAccount:{index:5,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("lamports")])},InitializeNonceAccount:{index:6,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("authorized")])},AuthorizeNonceAccount:{index:7,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("authorized")])},Allocate:{index:8,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("space")])},AllocateWithSeed:{index:9,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("base"),rustString("seed"),LayoutExports$1.ns64("space"),publicKey$2("programId")])},AssignWithSeed:{index:10,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("base"),rustString("seed"),publicKey$2("programId")])},TransferWithSeed:{index:11,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),u64$2("lamports"),rustString("seed"),publicKey$2("programId")])},UpgradeNonceAccount:{index:12,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])}});class SystemProgram{constructor(){}static createAccount(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.Create;const data=encodeData$1(type,{lamports:params.lamports,space:params.space,programId:toBuffer(params.programId.toBuffer())});return new TransactionInstruction({keys:[{pubkey:params.fromPubkey,isSigner:true,isWritable:true},{pubkey:params.newAccountPubkey,isSigner:true,isWritable:true}],programId:this.programId,data:data})}static transfer(params){let data;let keys;if("basePubkey"in params){const type=SYSTEM_INSTRUCTION_LAYOUTS.TransferWithSeed;data=encodeData$1(type,{lamports:BigInt(params.lamports),seed:params.seed,programId:toBuffer(params.programId.toBuffer())});keys=[{pubkey:params.fromPubkey,isSigner:false,isWritable:true},{pubkey:params.basePubkey,isSigner:true,isWritable:false},{pubkey:params.toPubkey,isSigner:false,isWritable:true}]}else{const type=SYSTEM_INSTRUCTION_LAYOUTS.Transfer;data=encodeData$1(type,{lamports:BigInt(params.lamports)});keys=[{pubkey:params.fromPubkey,isSigner:true,isWritable:true},{pubkey:params.toPubkey,isSigner:false,isWritable:true}]}return new TransactionInstruction({keys:keys,programId:this.programId,data:data})}static assign(params){let data;let keys;if("basePubkey"in params){const type=SYSTEM_INSTRUCTION_LAYOUTS.AssignWithSeed;data=encodeData$1(type,{base:toBuffer(params.basePubkey.toBuffer()),seed:params.seed,programId:toBuffer(params.programId.toBuffer())});keys=[{pubkey:params.accountPubkey,isSigner:false,isWritable:true},{pubkey:params.basePubkey,isSigner:true,isWritable:false}]}else{const type=SYSTEM_INSTRUCTION_LAYOUTS.Assign;data=encodeData$1(type,{programId:toBuffer(params.programId.toBuffer())});keys=[{pubkey:params.accountPubkey,isSigner:true,isWritable:true}]}return new TransactionInstruction({keys:keys,programId:this.programId,data:data})}static createAccountWithSeed(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.CreateWithSeed;const data=encodeData$1(type,{base:toBuffer(params.basePubkey.toBuffer()),seed:params.seed,lamports:params.lamports,space:params.space,programId:toBuffer(params.programId.toBuffer())});let keys=[{pubkey:params.fromPubkey,isSigner:true,isWritable:true},{pubkey:params.newAccountPubkey,isSigner:false,isWritable:true}];if(!params.basePubkey.equals(params.fromPubkey)){keys.push({pubkey:params.basePubkey,isSigner:true,isWritable:false})}return new TransactionInstruction({keys:keys,programId:this.programId,data:data})}static createNonceAccount(params){const transaction=new Transaction;if("basePubkey"in params&&"seed"in params){transaction.add(SystemProgram.createAccountWithSeed({fromPubkey:params.fromPubkey,newAccountPubkey:params.noncePubkey,basePubkey:params.basePubkey,seed:params.seed,lamports:params.lamports,space:NONCE_ACCOUNT_LENGTH,programId:this.programId}))}else{transaction.add(SystemProgram.createAccount({fromPubkey:params.fromPubkey,newAccountPubkey:params.noncePubkey,lamports:params.lamports,space:NONCE_ACCOUNT_LENGTH,programId:this.programId}))}const initParams={noncePubkey:params.noncePubkey,authorizedPubkey:params.authorizedPubkey};transaction.add(this.nonceInitialize(initParams));return transaction}static nonceInitialize(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.InitializeNonceAccount;const data=encodeData$1(type,{authorized:toBuffer(params.authorizedPubkey.toBuffer())});const instructionData={keys:[{pubkey:params.noncePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_RECENT_BLOCKHASHES_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false}],programId:this.programId,data:data};return new TransactionInstruction(instructionData)}static nonceAdvance(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.AdvanceNonceAccount;const data=encodeData$1(type);const instructionData={keys:[{pubkey:params.noncePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_RECENT_BLOCKHASHES_PUBKEY,isSigner:false,isWritable:false},{pubkey:params.authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data};return new TransactionInstruction(instructionData)}static nonceWithdraw(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.WithdrawNonceAccount;const data=encodeData$1(type,{lamports:params.lamports});return new TransactionInstruction({keys:[{pubkey:params.noncePubkey,isSigner:false,isWritable:true},{pubkey:params.toPubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_RECENT_BLOCKHASHES_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false},{pubkey:params.authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static nonceAuthorize(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.AuthorizeNonceAccount;const data=encodeData$1(type,{authorized:toBuffer(params.newAuthorizedPubkey.toBuffer())});return new TransactionInstruction({keys:[{pubkey:params.noncePubkey,isSigner:false,isWritable:true},{pubkey:params.authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static allocate(params){let data;let keys;if("basePubkey"in params){const type=SYSTEM_INSTRUCTION_LAYOUTS.AllocateWithSeed;data=encodeData$1(type,{base:toBuffer(params.basePubkey.toBuffer()),seed:params.seed,space:params.space,programId:toBuffer(params.programId.toBuffer())});keys=[{pubkey:params.accountPubkey,isSigner:false,isWritable:true},{pubkey:params.basePubkey,isSigner:true,isWritable:false}]}else{const type=SYSTEM_INSTRUCTION_LAYOUTS.Allocate;data=encodeData$1(type,{space:params.space});keys=[{pubkey:params.accountPubkey,isSigner:true,isWritable:true}]}return new TransactionInstruction({keys:keys,programId:this.programId,data:data})}}SystemProgram.programId=new PublicKey("11111111111111111111111111111111");new PublicKey("BPFLoader2111111111111111111111111111111111");({layout:LayoutExports$1.struct([LayoutExports$1.u32("typeIndex"),u64$2("deactivationSlot"),LayoutExports$1.nu64("lastExtendedSlot"),LayoutExports$1.u8("lastExtendedStartIndex"),LayoutExports$1.u8(),LayoutExports$1.seq(publicKey$2(),LayoutExports$1.offset(LayoutExports$1.u8(),-1),"authority")])});const PublicKeyFromString$1=coerce(instance(PublicKey),string(),value=>new PublicKey(value));const RawAccountDataResult=tuple([string(),literal("base64")]);const BufferFromRawAccountData=coerce(instance(bufferExports.Buffer),RawAccountDataResult,value=>bufferExports.Buffer.from(value[0],"base64"));function createRpcResult(result){return union([type({jsonrpc:literal("2.0"),id:string(),result:result}),type({jsonrpc:literal("2.0"),id:string(),error:type({code:unknown(),message:string(),data:optional(any())})})])}const UnknownRpcResult=createRpcResult(unknown());function jsonRpcResult(schema){return coerce(createRpcResult(schema),UnknownRpcResult,value=>{if("error"in value){return value}else{return{...value,result:create(value.result,schema)}}})}function jsonRpcResultAndContext(value){return jsonRpcResult(type({context:type({slot:number()}),value:value}))}function notificationResultAndContext(value){return type({context:type({slot:number()}),value:value})}const GetInflationGovernorResult=type({foundation:number(),foundationTerm:number(),initial:number(),taper:number(),terminal:number()});jsonRpcResult(array(nullable(type({epoch:number(),effectiveSlot:number(),amount:number(),postBalance:number(),commission:optional(nullable(number()))}))));const GetRecentPrioritizationFeesResult=array(type({slot:number(),prioritizationFee:number()}));const GetInflationRateResult=type({total:number(),validator:number(),foundation:number(),epoch:number()});const GetEpochInfoResult=type({epoch:number(),slotIndex:number(),slotsInEpoch:number(),absoluteSlot:number(),blockHeight:optional(number()),transactionCount:optional(number())});const GetEpochScheduleResult=type({slotsPerEpoch:number(),leaderScheduleSlotOffset:number(),warmup:boolean(),firstNormalEpoch:number(),firstNormalSlot:number()});const GetLeaderScheduleResult=record(string(),array(number()));const TransactionErrorResult=nullable(union([type({}),string()]));const SignatureStatusResult=type({err:TransactionErrorResult});const SignatureReceivedResult=literal("receivedSignature");type({"solana-core":string(),"feature-set":optional(number())});const ParsedInstructionStruct=type({program:string(),programId:PublicKeyFromString$1,parsed:unknown()});const PartiallyDecodedInstructionStruct=type({programId:PublicKeyFromString$1,accounts:array(PublicKeyFromString$1),data:string()});jsonRpcResultAndContext(type({err:nullable(union([type({}),string()])),logs:nullable(array(string())),accounts:optional(nullable(array(nullable(type({executable:boolean(),owner:string(),lamports:number(),data:array(string()),rentEpoch:optional(number())}))))),unitsConsumed:optional(number()),returnData:optional(nullable(type({programId:string(),data:tuple([string(),literal("base64")])}))),innerInstructions:optional(nullable(array(type({index:number(),instructions:array(union([ParsedInstructionStruct,PartiallyDecodedInstructionStruct]))}))))}));jsonRpcResultAndContext(type({byIdentity:record(string(),array(number())),range:type({firstSlot:number(),lastSlot:number()})}));jsonRpcResult(GetInflationGovernorResult);jsonRpcResult(GetInflationRateResult);jsonRpcResult(GetRecentPrioritizationFeesResult);jsonRpcResult(GetEpochInfoResult);jsonRpcResult(GetEpochScheduleResult);jsonRpcResult(GetLeaderScheduleResult);jsonRpcResult(number());jsonRpcResultAndContext(type({total:number(),circulating:number(),nonCirculating:number(),nonCirculatingAccounts:array(PublicKeyFromString$1)}));const TokenAmountResult=type({amount:string(),uiAmount:nullable(number()),decimals:number(),uiAmountString:optional(string())});jsonRpcResultAndContext(array(type({address:PublicKeyFromString$1,amount:string(),uiAmount:nullable(number()),decimals:number(),uiAmountString:optional(string())})));jsonRpcResultAndContext(array(type({pubkey:PublicKeyFromString$1,account:type({executable:boolean(),owner:PublicKeyFromString$1,lamports:number(),data:BufferFromRawAccountData,rentEpoch:number()})})));const ParsedAccountDataResult=type({program:string(),parsed:unknown(),space:number()});jsonRpcResultAndContext(array(type({pubkey:PublicKeyFromString$1,account:type({executable:boolean(),owner:PublicKeyFromString$1,lamports:number(),data:ParsedAccountDataResult,rentEpoch:number()})})));jsonRpcResultAndContext(array(type({lamports:number(),address:PublicKeyFromString$1})));const AccountInfoResult=type({executable:boolean(),owner:PublicKeyFromString$1,lamports:number(),data:BufferFromRawAccountData,rentEpoch:number()});type({pubkey:PublicKeyFromString$1,account:AccountInfoResult});const ParsedOrRawAccountData=coerce(union([instance(bufferExports.Buffer),ParsedAccountDataResult]),union([RawAccountDataResult,ParsedAccountDataResult]),value=>{if(Array.isArray(value)){return create(value,BufferFromRawAccountData)}else{return value}});const ParsedAccountInfoResult=type({executable:boolean(),owner:PublicKeyFromString$1,lamports:number(),data:ParsedOrRawAccountData,rentEpoch:number()});type({pubkey:PublicKeyFromString$1,account:ParsedAccountInfoResult});type({state:union([literal("active"),literal("inactive"),literal("activating"),literal("deactivating")]),active:number(),inactive:number()});jsonRpcResult(array(type({signature:string(),slot:number(),err:TransactionErrorResult,memo:nullable(string()),blockTime:optional(nullable(number()))})));jsonRpcResult(array(type({signature:string(),slot:number(),err:TransactionErrorResult,memo:nullable(string()),blockTime:optional(nullable(number()))})));type({subscription:number(),result:notificationResultAndContext(AccountInfoResult)});const ProgramAccountInfoResult=type({pubkey:PublicKeyFromString$1,account:AccountInfoResult});type({subscription:number(),result:notificationResultAndContext(ProgramAccountInfoResult)});const SlotInfoResult=type({parent:number(),slot:number(),root:number()});type({subscription:number(),result:SlotInfoResult});const SlotUpdateResult=union([type({type:union([literal("firstShredReceived"),literal("completed"),literal("optimisticConfirmation"),literal("root")]),slot:number(),timestamp:number()}),type({type:literal("createdBank"),parent:number(),slot:number(),timestamp:number()}),type({type:literal("frozen"),slot:number(),timestamp:number(),stats:type({numTransactionEntries:number(),numSuccessfulTransactions:number(),numFailedTransactions:number(),maxTransactionsPerEntry:number()})}),type({type:literal("dead"),slot:number(),timestamp:number(),err:string()})]);type({subscription:number(),result:SlotUpdateResult});type({subscription:number(),result:notificationResultAndContext(union([SignatureStatusResult,SignatureReceivedResult]))});type({subscription:number(),result:number()});type({pubkey:string(),gossip:nullable(string()),tpu:nullable(string()),rpc:nullable(string()),version:nullable(string())});const VoteAccountInfoResult=type({votePubkey:string(),nodePubkey:string(),activatedStake:number(),epochVoteAccount:boolean(),epochCredits:array(tuple([number(),number(),number()])),commission:number(),lastVote:number(),rootSlot:nullable(number())});jsonRpcResult(type({current:array(VoteAccountInfoResult),delinquent:array(VoteAccountInfoResult)}));const ConfirmationStatus=union([literal("processed"),literal("confirmed"),literal("finalized")]);const SignatureStatusResponse=type({slot:number(),confirmations:nullable(number()),err:TransactionErrorResult,confirmationStatus:optional(ConfirmationStatus)});jsonRpcResultAndContext(array(nullable(SignatureStatusResponse)));jsonRpcResult(number());const AddressTableLookupStruct=type({accountKey:PublicKeyFromString$1,writableIndexes:array(number()),readonlyIndexes:array(number())});const ConfirmedTransactionResult=type({signatures:array(string()),message:type({accountKeys:array(string()),header:type({numRequiredSignatures:number(),numReadonlySignedAccounts:number(),numReadonlyUnsignedAccounts:number()}),instructions:array(type({accounts:array(number()),data:string(),programIdIndex:number()})),recentBlockhash:string(),addressTableLookups:optional(array(AddressTableLookupStruct))})});const AnnotatedAccountKey=type({pubkey:PublicKeyFromString$1,signer:boolean(),writable:boolean(),source:optional(union([literal("transaction"),literal("lookupTable")]))});const ConfirmedTransactionAccountsModeResult=type({accountKeys:array(AnnotatedAccountKey),signatures:array(string())});const ParsedInstructionResult=type({parsed:unknown(),program:string(),programId:PublicKeyFromString$1});const RawInstructionResult=type({accounts:array(PublicKeyFromString$1),data:string(),programId:PublicKeyFromString$1});const InstructionResult=union([RawInstructionResult,ParsedInstructionResult]);const UnknownInstructionResult=union([type({parsed:unknown(),program:string(),programId:string()}),type({accounts:array(string()),data:string(),programId:string()})]);const ParsedOrRawInstruction=coerce(InstructionResult,UnknownInstructionResult,value=>{if("accounts"in value){return create(value,RawInstructionResult)}else{return create(value,ParsedInstructionResult)}});const ParsedConfirmedTransactionResult=type({signatures:array(string()),message:type({accountKeys:array(AnnotatedAccountKey),instructions:array(ParsedOrRawInstruction),recentBlockhash:string(),addressTableLookups:optional(nullable(array(AddressTableLookupStruct)))})});const TokenBalanceResult=type({accountIndex:number(),mint:string(),owner:optional(string()),programId:optional(string()),uiTokenAmount:TokenAmountResult});const LoadedAddressesResult=type({writable:array(PublicKeyFromString$1),readonly:array(PublicKeyFromString$1)});const ConfirmedTransactionMetaResult=type({err:TransactionErrorResult,fee:number(),innerInstructions:optional(nullable(array(type({index:number(),instructions:array(type({accounts:array(number()),data:string(),programIdIndex:number()}))})))),preBalances:array(number()),postBalances:array(number()),logMessages:optional(nullable(array(string()))),preTokenBalances:optional(nullable(array(TokenBalanceResult))),postTokenBalances:optional(nullable(array(TokenBalanceResult))),loadedAddresses:optional(LoadedAddressesResult),computeUnitsConsumed:optional(number()),costUnits:optional(number())});const ParsedConfirmedTransactionMetaResult=type({err:TransactionErrorResult,fee:number(),innerInstructions:optional(nullable(array(type({index:number(),instructions:array(ParsedOrRawInstruction)})))),preBalances:array(number()),postBalances:array(number()),logMessages:optional(nullable(array(string()))),preTokenBalances:optional(nullable(array(TokenBalanceResult))),postTokenBalances:optional(nullable(array(TokenBalanceResult))),loadedAddresses:optional(LoadedAddressesResult),computeUnitsConsumed:optional(number()),costUnits:optional(number())});const TransactionVersionStruct=union([literal(0),literal("legacy")]);const RewardsResult=type({pubkey:string(),lamports:number(),postBalance:nullable(number()),rewardType:nullable(string()),commission:optional(nullable(number()))});jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionResult,meta:nullable(ConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionAccountsModeResult,meta:nullable(ConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ParsedConfirmedTransactionResult,meta:nullable(ParsedConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionAccountsModeResult,meta:nullable(ParsedConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionResult,meta:nullable(ConfirmedTransactionMetaResult)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),signatures:array(string()),blockTime:nullable(number())})));jsonRpcResult(nullable(type({slot:number(),meta:nullable(ConfirmedTransactionMetaResult),blockTime:optional(nullable(number())),transaction:ConfirmedTransactionResult,version:optional(TransactionVersionStruct)})));jsonRpcResult(nullable(type({slot:number(),transaction:ParsedConfirmedTransactionResult,meta:nullable(ParsedConfirmedTransactionMetaResult),blockTime:optional(nullable(number())),version:optional(TransactionVersionStruct)})));jsonRpcResultAndContext(type({blockhash:string(),lastValidBlockHeight:number()}));jsonRpcResultAndContext(boolean());const PerfSampleResult=type({slot:number(),numTransactions:number(),numSlots:number(),samplePeriodSecs:number()});jsonRpcResult(array(PerfSampleResult));jsonRpcResultAndContext(nullable(type({feeCalculator:type({lamportsPerSignature:number()})})));jsonRpcResult(string());jsonRpcResult(string());const LogsResult=type({err:TransactionErrorResult,logs:array(string()),signature:string()});type({result:notificationResultAndContext(LogsResult),subscription:number()});class Keypair{constructor(keypair){this._keypair=void 0;this._keypair=keypair??generateKeypair()}static generate(){return new Keypair(generateKeypair())}static fromSecretKey(secretKey,options){if(secretKey.byteLength!==64){throw new Error("bad secret key size")}const publicKey=secretKey.slice(32,64);if(!options||!options.skipValidation){const privateScalar=secretKey.slice(0,32);const computedPublicKey=getPublicKey(privateScalar);for(let ii=0;ii<32;ii++){if(publicKey[ii]!==computedPublicKey[ii]){throw new Error("provided secretKey is invalid")}}}return new Keypair({publicKey:publicKey,secretKey:secretKey})}static fromSeed(seed){const publicKey=getPublicKey(seed);const secretKey=new Uint8Array(64);secretKey.set(seed);secretKey.set(publicKey,32);return new Keypair({publicKey:publicKey,secretKey:secretKey})}get publicKey(){return new PublicKey(this._keypair.publicKey)}get secretKey(){return new Uint8Array(this._keypair.secretKey)}}Object.freeze({CreateLookupTable:{index:0,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),u64$2("recentSlot"),LayoutExports$1.u8("bumpSeed")])},FreezeLookupTable:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},ExtendLookupTable:{index:2,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),u64$2(),LayoutExports$1.seq(publicKey$2(),LayoutExports$1.offset(LayoutExports$1.u32(),-8),"addresses")])},DeactivateLookupTable:{index:3,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},CloseLookupTable:{index:4,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])}});new PublicKey("AddressLookupTab1e1111111111111111111111111");Object.freeze({RequestUnits:{index:0,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("units"),LayoutExports$1.u32("additionalFee")])},RequestHeapFrame:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("bytes")])},SetComputeUnitLimit:{index:2,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("units")])},SetComputeUnitPrice:{index:3,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),u64$2("microLamports")])}});new PublicKey("ComputeBudget111111111111111111111111111111");LayoutExports$1.struct([LayoutExports$1.u8("numSignatures"),LayoutExports$1.u8("padding"),LayoutExports$1.u16("signatureOffset"),LayoutExports$1.u16("signatureInstructionIndex"),LayoutExports$1.u16("publicKeyOffset"),LayoutExports$1.u16("publicKeyInstructionIndex"),LayoutExports$1.u16("messageDataOffset"),LayoutExports$1.u16("messageDataSize"),LayoutExports$1.u16("messageInstructionIndex")]);new PublicKey("Ed25519SigVerify111111111111111111111111111");secp256k1.utils.isValidPrivateKey;LayoutExports$1.struct([LayoutExports$1.u8("numSignatures"),LayoutExports$1.u16("signatureOffset"),LayoutExports$1.u8("signatureInstructionIndex"),LayoutExports$1.u16("ethAddressOffset"),LayoutExports$1.u8("ethAddressInstructionIndex"),LayoutExports$1.u16("messageDataOffset"),LayoutExports$1.u16("messageDataSize"),LayoutExports$1.u8("messageInstructionIndex"),LayoutExports$1.blob(20,"ethAddress"),LayoutExports$1.blob(64,"signature"),LayoutExports$1.u8("recoveryId")]);new PublicKey("KeccakSecp256k11111111111111111111111111111");var _Lockup;const STAKE_CONFIG_ID=new PublicKey("StakeConfig11111111111111111111111111111111");class Lockup{constructor(unixTimestamp,epoch,custodian){this.unixTimestamp=void 0;this.epoch=void 0;this.custodian=void 0;this.unixTimestamp=unixTimestamp;this.epoch=epoch;this.custodian=custodian}}_Lockup=Lockup;Lockup.default=new _Lockup(0,0,PublicKey.default);const STAKE_INSTRUCTION_LAYOUTS=Object.freeze({Initialize:{index:0,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),authorized(),lockup()])},Authorize:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("newAuthorized"),LayoutExports$1.u32("stakeAuthorizationType")])},Delegate:{index:2,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},Split:{index:3,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("lamports")])},Withdraw:{index:4,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("lamports")])},Deactivate:{index:5,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},Merge:{index:7,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},AuthorizeWithSeed:{index:8,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("newAuthorized"),LayoutExports$1.u32("stakeAuthorizationType"),rustString("authoritySeed"),publicKey$2("authorityOwner")])}});const StakeAuthorizationLayout=Object.freeze({Staker:{index:0},Withdrawer:{index:1}});class StakeProgram{constructor(){}static initialize(params){const{stakePubkey:stakePubkey,authorized:authorized,lockup:maybeLockup}=params;const lockup=maybeLockup||Lockup.default;const type=STAKE_INSTRUCTION_LAYOUTS.Initialize;const data=encodeData$1(type,{authorized:{staker:toBuffer(authorized.staker.toBuffer()),withdrawer:toBuffer(authorized.withdrawer.toBuffer())},lockup:{unixTimestamp:lockup.unixTimestamp,epoch:lockup.epoch,custodian:toBuffer(lockup.custodian.toBuffer())}});const instructionData={keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false}],programId:this.programId,data:data};return new TransactionInstruction(instructionData)}static createAccountWithSeed(params){const transaction=new Transaction;transaction.add(SystemProgram.createAccountWithSeed({fromPubkey:params.fromPubkey,newAccountPubkey:params.stakePubkey,basePubkey:params.basePubkey,seed:params.seed,lamports:params.lamports,space:this.space,programId:this.programId}));const{stakePubkey:stakePubkey,authorized:authorized,lockup:lockup}=params;return transaction.add(this.initialize({stakePubkey:stakePubkey,authorized:authorized,lockup:lockup}))}static createAccount(params){const transaction=new Transaction;transaction.add(SystemProgram.createAccount({fromPubkey:params.fromPubkey,newAccountPubkey:params.stakePubkey,lamports:params.lamports,space:this.space,programId:this.programId}));const{stakePubkey:stakePubkey,authorized:authorized,lockup:lockup}=params;return transaction.add(this.initialize({stakePubkey:stakePubkey,authorized:authorized,lockup:lockup}))}static delegate(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,votePubkey:votePubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Delegate;const data=encodeData$1(type);return(new Transaction).add({keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:votePubkey,isSigner:false,isWritable:false},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:STAKE_CONFIG_ID,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static authorize(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,newAuthorizedPubkey:newAuthorizedPubkey,stakeAuthorizationType:stakeAuthorizationType,custodianPubkey:custodianPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Authorize;const data=encodeData$1(type,{newAuthorized:toBuffer(newAuthorizedPubkey.toBuffer()),stakeAuthorizationType:stakeAuthorizationType.index});const keys=[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:true},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}];if(custodianPubkey){keys.push({pubkey:custodianPubkey,isSigner:true,isWritable:false})}return(new Transaction).add({keys:keys,programId:this.programId,data:data})}static authorizeWithSeed(params){const{stakePubkey:stakePubkey,authorityBase:authorityBase,authoritySeed:authoritySeed,authorityOwner:authorityOwner,newAuthorizedPubkey:newAuthorizedPubkey,stakeAuthorizationType:stakeAuthorizationType,custodianPubkey:custodianPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.AuthorizeWithSeed;const data=encodeData$1(type,{newAuthorized:toBuffer(newAuthorizedPubkey.toBuffer()),stakeAuthorizationType:stakeAuthorizationType.index,authoritySeed:authoritySeed,authorityOwner:toBuffer(authorityOwner.toBuffer())});const keys=[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:authorityBase,isSigner:true,isWritable:false},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false}];if(custodianPubkey){keys.push({pubkey:custodianPubkey,isSigner:true,isWritable:false})}return(new Transaction).add({keys:keys,programId:this.programId,data:data})}static splitInstruction(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,splitStakePubkey:splitStakePubkey,lamports:lamports}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Split;const data=encodeData$1(type,{lamports:lamports});return new TransactionInstruction({keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:splitStakePubkey,isSigner:false,isWritable:true},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static split(params,rentExemptReserve){const transaction=new Transaction;transaction.add(SystemProgram.createAccount({fromPubkey:params.authorizedPubkey,newAccountPubkey:params.splitStakePubkey,lamports:rentExemptReserve,space:this.space,programId:this.programId}));return transaction.add(this.splitInstruction(params))}static splitWithSeed(params,rentExemptReserve){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,splitStakePubkey:splitStakePubkey,basePubkey:basePubkey,seed:seed,lamports:lamports}=params;const transaction=new Transaction;transaction.add(SystemProgram.allocate({accountPubkey:splitStakePubkey,basePubkey:basePubkey,seed:seed,space:this.space,programId:this.programId}));if(rentExemptReserve&&rentExemptReserve>0){transaction.add(SystemProgram.transfer({fromPubkey:params.authorizedPubkey,toPubkey:splitStakePubkey,lamports:rentExemptReserve}))}return transaction.add(this.splitInstruction({stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,splitStakePubkey:splitStakePubkey,lamports:lamports}))}static merge(params){const{stakePubkey:stakePubkey,sourceStakePubKey:sourceStakePubKey,authorizedPubkey:authorizedPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Merge;const data=encodeData$1(type);return(new Transaction).add({keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:sourceStakePubKey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static withdraw(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,toPubkey:toPubkey,lamports:lamports,custodianPubkey:custodianPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Withdraw;const data=encodeData$1(type,{lamports:lamports});const keys=[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:toPubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}];if(custodianPubkey){keys.push({pubkey:custodianPubkey,isSigner:true,isWritable:false})}return(new Transaction).add({keys:keys,programId:this.programId,data:data})}static deactivate(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Deactivate;const data=encodeData$1(type);return(new Transaction).add({keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}}StakeProgram.programId=new PublicKey("Stake11111111111111111111111111111111111111");StakeProgram.space=200;Object.freeze({InitializeAccount:{index:0,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),voteInit()])},Authorize:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("newAuthorized"),LayoutExports$1.u32("voteAuthorizationType")])},Withdraw:{index:3,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("lamports")])},UpdateValidatorIdentity:{index:4,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},AuthorizeWithSeed:{index:10,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),voteAuthorizeWithSeedArgs()])}});new PublicKey("Vote111111111111111111111111111111111111111");new PublicKey("Va1idator1nfo111111111111111111111111111111");type({name:string(),website:optional(string()),details:optional(string()),iconUrl:optional(string()),keybaseUsername:optional(string())});new PublicKey("Vote111111111111111111111111111111111111111");LayoutExports$1.struct([publicKey$2("nodePubkey"),publicKey$2("authorizedWithdrawer"),LayoutExports$1.u8("commission"),LayoutExports$1.nu64(),LayoutExports$1.seq(LayoutExports$1.struct([LayoutExports$1.nu64("slot"),LayoutExports$1.u32("confirmationCount")]),LayoutExports$1.offset(LayoutExports$1.u32(),-8),"votes"),LayoutExports$1.u8("rootSlotValid"),LayoutExports$1.nu64("rootSlot"),LayoutExports$1.nu64(),LayoutExports$1.seq(LayoutExports$1.struct([LayoutExports$1.nu64("epoch"),publicKey$2("authorizedVoter")]),LayoutExports$1.offset(LayoutExports$1.u32(),-8),"authorizedVoters"),LayoutExports$1.struct([LayoutExports$1.seq(LayoutExports$1.struct([publicKey$2("authorizedPubkey"),LayoutExports$1.nu64("epochOfLastAuthorizedSwitch"),LayoutExports$1.nu64("targetEpoch")]),32,"buf"),LayoutExports$1.nu64("idx"),LayoutExports$1.u8("isEmpty")],"priorVoters"),LayoutExports$1.nu64(),LayoutExports$1.seq(LayoutExports$1.struct([LayoutExports$1.nu64("epoch"),LayoutExports$1.nu64("credits"),LayoutExports$1.nu64("prevCredits")]),LayoutExports$1.offset(LayoutExports$1.u32(),-8),"epochCredits"),LayoutExports$1.struct([LayoutExports$1.nu64("slot"),LayoutExports$1.nu64("timestamp")],"lastTimestamp")]);const LAMPORTS_PER_SOL=1e9;const TOKEN_PROGRAM_ID=new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");new PublicKey("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb");const ASSOCIATED_TOKEN_PROGRAM_ID=new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");const NATIVE_MINT=new PublicKey("So11111111111111111111111111111111111111112");new PublicKey("9pan9bMn5HatX4EJdBwg9VgCa7Uz5HL8N1m5D3NdXejP");const encodeDecode=layout=>{const decode=layout.decode.bind(layout);const encode=layout.encode.bind(layout);return{decode:decode,encode:encode}};var browser={};var hasRequiredBrowser;function requireBrowser(){if(hasRequiredBrowser)return browser;hasRequiredBrowser=1;Object.defineProperty(browser,"__esModule",{value:true});function toBigIntLE(buf){{const reversed=Buffer.from(buf);reversed.reverse();const hex=reversed.toString("hex");if(hex.length===0){return BigInt(0)}return BigInt(`0x${hex}`)}}browser.toBigIntLE=toBigIntLE;function toBigIntBE(buf){{const hex=buf.toString("hex");if(hex.length===0){return BigInt(0)}return BigInt(`0x${hex}`)}}browser.toBigIntBE=toBigIntBE;function toBufferLE(num,width){{const hex=num.toString(16);const buffer=Buffer.from(hex.padStart(width*2,"0").slice(0,width*2),"hex");buffer.reverse();return buffer}}browser.toBufferLE=toBufferLE;function toBufferBE(num,width){{const hex=num.toString(16);return Buffer.from(hex.padStart(width*2,"0").slice(0,width*2),"hex")}}browser.toBufferBE=toBufferBE;return browser}var browserExports=requireBrowser();const bigInt=length=>property=>{const layout=LayoutExports$1.blob(length,property);const{encode:encode,decode:decode}=encodeDecode(layout);const bigIntLayout=layout;bigIntLayout.decode=(buffer,offset)=>{const src=decode(buffer,offset);return browserExports.toBigIntLE(Buffer.from(src))};bigIntLayout.encode=(bigInt,buffer,offset)=>{const src=browserExports.toBufferLE(bigInt,length);return encode(src,buffer,offset)};return bigIntLayout};const u64$1=bigInt(8);const bool=property=>{const layout=LayoutExports$1.u8(property);const{encode:encode,decode:decode}=encodeDecode(layout);const boolLayout=layout;boolLayout.decode=(buffer,offset)=>{const src=decode(buffer,offset);return!!src};boolLayout.encode=(bool,buffer,offset)=>{const src=Number(bool);return encode(src,buffer,offset)};return boolLayout};const publicKey$1=property=>{const layout=LayoutExports$1.blob(32,property);const{encode:encode,decode:decode}=encodeDecode(layout);const publicKeyLayout=layout;publicKeyLayout.decode=(buffer,offset)=>{const src=decode(buffer,offset);return new PublicKey(src)};publicKeyLayout.encode=(publicKey,buffer,offset)=>{const src=publicKey.toBuffer();return encode(src,buffer,offset)};return publicKeyLayout};class TokenError extends Error{constructor(message){super(message)}}class TokenAccountNotFoundError extends TokenError{constructor(){super(...arguments);this.name="TokenAccountNotFoundError"}}class TokenInvalidAccountError extends TokenError{constructor(){super(...arguments);this.name="TokenInvalidAccountError"}}class TokenInvalidAccountOwnerError extends TokenError{constructor(){super(...arguments);this.name="TokenInvalidAccountOwnerError"}}class TokenInvalidAccountSizeError extends TokenError{constructor(){super(...arguments);this.name="TokenInvalidAccountSizeError"}}class TokenOwnerOffCurveError extends TokenError{constructor(){super(...arguments);this.name="TokenOwnerOffCurveError"}}var TokenInstruction;(function(TokenInstruction){TokenInstruction[TokenInstruction["InitializeMint"]=0]="InitializeMint";TokenInstruction[TokenInstruction["InitializeAccount"]=1]="InitializeAccount";TokenInstruction[TokenInstruction["InitializeMultisig"]=2]="InitializeMultisig";TokenInstruction[TokenInstruction["Transfer"]=3]="Transfer";TokenInstruction[TokenInstruction["Approve"]=4]="Approve";TokenInstruction[TokenInstruction["Revoke"]=5]="Revoke";TokenInstruction[TokenInstruction["SetAuthority"]=6]="SetAuthority";TokenInstruction[TokenInstruction["MintTo"]=7]="MintTo";TokenInstruction[TokenInstruction["Burn"]=8]="Burn";TokenInstruction[TokenInstruction["CloseAccount"]=9]="CloseAccount";TokenInstruction[TokenInstruction["FreezeAccount"]=10]="FreezeAccount";TokenInstruction[TokenInstruction["ThawAccount"]=11]="ThawAccount";TokenInstruction[TokenInstruction["TransferChecked"]=12]="TransferChecked";TokenInstruction[TokenInstruction["ApproveChecked"]=13]="ApproveChecked";TokenInstruction[TokenInstruction["MintToChecked"]=14]="MintToChecked";TokenInstruction[TokenInstruction["BurnChecked"]=15]="BurnChecked";TokenInstruction[TokenInstruction["InitializeAccount2"]=16]="InitializeAccount2";TokenInstruction[TokenInstruction["SyncNative"]=17]="SyncNative";TokenInstruction[TokenInstruction["InitializeAccount3"]=18]="InitializeAccount3";TokenInstruction[TokenInstruction["InitializeMultisig2"]=19]="InitializeMultisig2";TokenInstruction[TokenInstruction["InitializeMint2"]=20]="InitializeMint2";TokenInstruction[TokenInstruction["GetAccountDataSize"]=21]="GetAccountDataSize";TokenInstruction[TokenInstruction["InitializeImmutableOwner"]=22]="InitializeImmutableOwner";TokenInstruction[TokenInstruction["AmountToUiAmount"]=23]="AmountToUiAmount";TokenInstruction[TokenInstruction["UiAmountToAmount"]=24]="UiAmountToAmount";TokenInstruction[TokenInstruction["InitializeMintCloseAuthority"]=25]="InitializeMintCloseAuthority";TokenInstruction[TokenInstruction["TransferFeeExtension"]=26]="TransferFeeExtension";TokenInstruction[TokenInstruction["ConfidentialTransferExtension"]=27]="ConfidentialTransferExtension";TokenInstruction[TokenInstruction["DefaultAccountStateExtension"]=28]="DefaultAccountStateExtension";TokenInstruction[TokenInstruction["Reallocate"]=29]="Reallocate";TokenInstruction[TokenInstruction["MemoTransferExtension"]=30]="MemoTransferExtension";TokenInstruction[TokenInstruction["CreateNativeMint"]=31]="CreateNativeMint";TokenInstruction[TokenInstruction["InitializeNonTransferableMint"]=32]="InitializeNonTransferableMint";TokenInstruction[TokenInstruction["InterestBearingMintExtension"]=33]="InterestBearingMintExtension";TokenInstruction[TokenInstruction["CpiGuardExtension"]=34]="CpiGuardExtension";TokenInstruction[TokenInstruction["InitializePermanentDelegate"]=35]="InitializePermanentDelegate";TokenInstruction[TokenInstruction["TransferHookExtension"]=36]="TransferHookExtension";TokenInstruction[TokenInstruction["MetadataPointerExtension"]=39]="MetadataPointerExtension";TokenInstruction[TokenInstruction["GroupPointerExtension"]=40]="GroupPointerExtension";TokenInstruction[TokenInstruction["GroupMemberPointerExtension"]=41]="GroupMemberPointerExtension";TokenInstruction[TokenInstruction["ScaledUiAmountExtension"]=43]="ScaledUiAmountExtension";TokenInstruction[TokenInstruction["PausableExtension"]=44]="PausableExtension"})(TokenInstruction||(TokenInstruction={}));var AccountType$1;(function(AccountType){AccountType[AccountType["Uninitialized"]=0]="Uninitialized";AccountType[AccountType["Mint"]=1]="Mint";AccountType[AccountType["Account"]=2]="Account"})(AccountType$1||(AccountType$1={}));const ACCOUNT_TYPE_SIZE=1;const MultisigLayout=LayoutExports$1.struct([LayoutExports$1.u8("m"),LayoutExports$1.u8("n"),bool("isInitialized"),publicKey$1("signer1"),publicKey$1("signer2"),publicKey$1("signer3"),publicKey$1("signer4"),publicKey$1("signer5"),publicKey$1("signer6"),publicKey$1("signer7"),publicKey$1("signer8"),publicKey$1("signer9"),publicKey$1("signer10"),publicKey$1("signer11")]);const MULTISIG_SIZE=MultisigLayout.span;var AccountState;(function(AccountState){AccountState[AccountState["Uninitialized"]=0]="Uninitialized";AccountState[AccountState["Initialized"]=1]="Initialized";AccountState[AccountState["Frozen"]=2]="Frozen"})(AccountState||(AccountState={}));const AccountLayout=LayoutExports$1.struct([publicKey$1("mint"),publicKey$1("owner"),u64$1("amount"),LayoutExports$1.u32("delegateOption"),publicKey$1("delegate"),LayoutExports$1.u8("state"),LayoutExports$1.u32("isNativeOption"),u64$1("isNative"),u64$1("delegatedAmount"),LayoutExports$1.u32("closeAuthorityOption"),publicKey$1("closeAuthority")]);const ACCOUNT_SIZE=AccountLayout.span;async function getAccount(connection,address,commitment,programId=TOKEN_PROGRAM_ID){const info=await connection.getAccountInfo(address,commitment);return unpackAccount(address,info,programId)}function unpackAccount(address,info,programId=TOKEN_PROGRAM_ID){if(!info)throw new TokenAccountNotFoundError;if(!info.owner.equals(programId))throw new TokenInvalidAccountOwnerError;if(info.data.length<ACCOUNT_SIZE)throw new TokenInvalidAccountSizeError;const rawAccount=AccountLayout.decode(info.data.slice(0,ACCOUNT_SIZE));let tlvData=Buffer.alloc(0);if(info.data.length>ACCOUNT_SIZE){if(info.data.length===MULTISIG_SIZE)throw new TokenInvalidAccountSizeError;if(info.data[ACCOUNT_SIZE]!=AccountType$1.Account)throw new TokenInvalidAccountError;tlvData=info.data.slice(ACCOUNT_SIZE+ACCOUNT_TYPE_SIZE)}return{address:address,mint:rawAccount.mint,owner:rawAccount.owner,amount:rawAccount.amount,delegate:rawAccount.delegateOption?rawAccount.delegate:null,delegatedAmount:rawAccount.delegatedAmount,isInitialized:rawAccount.state!==AccountState.Uninitialized,isFrozen:rawAccount.state===AccountState.Frozen,isNative:!!rawAccount.isNativeOption,rentExemptReserve:rawAccount.isNativeOption?rawAccount.isNative:null,closeAuthority:rawAccount.closeAuthorityOption?rawAccount.closeAuthority:null,tlvData:tlvData}}function addSigners(keys,ownerOrAuthority,multiSigners){if(multiSigners.length){keys.push({pubkey:ownerOrAuthority,isSigner:false,isWritable:false});for(const signer of multiSigners){keys.push({pubkey:signer instanceof PublicKey?signer:signer.publicKey,isSigner:true,isWritable:false})}}else{keys.push({pubkey:ownerOrAuthority,isSigner:true,isWritable:false})}return keys}const MintLayout=LayoutExports$1.struct([LayoutExports$1.u32("mintAuthorityOption"),publicKey$1("mintAuthority"),u64$1("supply"),LayoutExports$1.u8("decimals"),bool("isInitialized"),LayoutExports$1.u32("freezeAuthorityOption"),publicKey$1("freezeAuthority")]);MintLayout.span;function getAssociatedTokenAddressSync(mint,owner,allowOwnerOffCurve=false,programId=TOKEN_PROGRAM_ID,associatedTokenProgramId=ASSOCIATED_TOKEN_PROGRAM_ID){if(!allowOwnerOffCurve&&!PublicKey.isOnCurve(owner.toBuffer()))throw new TokenOwnerOffCurveError;const[address]=PublicKey.findProgramAddressSync([owner.toBuffer(),programId.toBuffer(),mint.toBuffer()],associatedTokenProgramId);return address}const approveInstructionData=LayoutExports$1.struct([LayoutExports$1.u8("instruction"),u64$1("amount")]);function createApproveInstruction(account,delegate,owner,amount,multiSigners=[],programId=TOKEN_PROGRAM_ID){const keys=addSigners([{pubkey:account,isSigner:false,isWritable:true},{pubkey:delegate,isSigner:false,isWritable:false}],owner,multiSigners);const data=Buffer.alloc(approveInstructionData.span);approveInstructionData.encode({instruction:TokenInstruction.Approve,amount:BigInt(amount)},data);return new TransactionInstruction({keys:keys,programId:programId,data:data})}function createAssociatedTokenAccountIdempotentInstruction(payer,associatedToken,owner,mint,programId=TOKEN_PROGRAM_ID,associatedTokenProgramId=ASSOCIATED_TOKEN_PROGRAM_ID){return buildAssociatedTokenAccountInstruction(payer,associatedToken,owner,mint,Buffer.from([1]),programId,associatedTokenProgramId)}function buildAssociatedTokenAccountInstruction(payer,associatedToken,owner,mint,instructionData,programId=TOKEN_PROGRAM_ID,associatedTokenProgramId=ASSOCIATED_TOKEN_PROGRAM_ID){const keys=[{pubkey:payer,isSigner:true,isWritable:true},{pubkey:associatedToken,isSigner:false,isWritable:true},{pubkey:owner,isSigner:false,isWritable:false},{pubkey:mint,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:programId,isSigner:false,isWritable:false}];return new TransactionInstruction({keys:keys,programId:associatedTokenProgramId,data:instructionData})}const METADATA_PROGRAM_ID=new PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");const METADATA_MAX_NAME_LENGTH=32;const METADATA_MAX_SYMBOL_LENGTH=10;const METADATA_MAX_URI_LENGTH=200;const STAKE_POOL_PROGRAM_ID=new PublicKey("SP1s4uFeTAX9jsXXmwyDs1gxYYf7cdDZ8qHUHVxE1yr");const DEVNET_STAKE_POOL_PROGRAM_ID=new PublicKey("DPoo15wWDqpPJJtS2MUZ49aRxqz5ZaaJCJP4z8bLuib");const MAX_VALIDATORS_TO_UPDATE=4;const EPHEMERAL_STAKE_SEED_PREFIX=node_buffer.Buffer.from("ephemeral");const TRANSIENT_STAKE_SEED_PREFIX=node_buffer.Buffer.from("transient");const MINIMUM_ACTIVE_STAKE=LAMPORTS_PER_SOL;function encodeData(type,fields){const allocLength=type.layout.span;const data=node_buffer.Buffer.alloc(allocLength);const layoutFields=Object.assign({instruction:type.index},fields);type.layout.encode(layoutFields,data);return data}function decodeData(type,buffer){let data;try{data=type.layout.decode(buffer)}catch(err){throw new Error(`invalid instruction; ${err}`)}if(data.instruction!==type.index){throw new Error(`invalid instruction; instruction index mismatch ${data.instruction} != ${type.index}`)}return data}function solToLamports(amount){if(isNaN(amount)){return Number(0)}return Number(amount*LAMPORTS_PER_SOL)}function lamportsToSol(lamports){if(typeof lamports==="number"){return Math.abs(lamports)/LAMPORTS_PER_SOL}if(typeof lamports==="bigint"){return Math.abs(Number(lamports))/LAMPORTS_PER_SOL}let signMultiplier=1;if(lamports.isNeg()){signMultiplier=-1}const absLamports=lamports.abs();const lamportsString=absLamports.toString(10).padStart(10,"0");const splitIndex=lamportsString.length-9;const solString=`${lamportsString.slice(0,splitIndex)}.${lamportsString.slice(splitIndex)}`;return signMultiplier*Number.parseFloat(solString)}function findWsolTransientProgramAddress(programId,userPubkey){const[publicKey]=PublicKey.findProgramAddressSync([node_buffer.Buffer.from("transient_wsol"),userPubkey.toBuffer()],programId);return publicKey}async function findWithdrawAuthorityProgramAddress(programId,stakePoolAddress){const[publicKey]=PublicKey.findProgramAddressSync([stakePoolAddress.toBuffer(),node_buffer.Buffer.from("withdraw")],programId);return publicKey}async function findStakeProgramAddress(programId,voteAccountAddress,stakePoolAddress,seed){const[publicKey]=PublicKey.findProgramAddressSync([voteAccountAddress.toBuffer(),stakePoolAddress.toBuffer(),seed?new BN(seed).toArrayLike(node_buffer.Buffer,"le",4):node_buffer.Buffer.alloc(0)],programId);return publicKey}async function findTransientStakeProgramAddress(programId,voteAccountAddress,stakePoolAddress,seed){const[publicKey]=PublicKey.findProgramAddressSync([TRANSIENT_STAKE_SEED_PREFIX,voteAccountAddress.toBuffer(),stakePoolAddress.toBuffer(),seed.toArrayLike(node_buffer.Buffer,"le",8)],programId);return publicKey}async function findEphemeralStakeProgramAddress(programId,stakePoolAddress,seed){const[publicKey]=PublicKey.findProgramAddressSync([EPHEMERAL_STAKE_SEED_PREFIX,stakePoolAddress.toBuffer(),seed.toArrayLike(node_buffer.Buffer,"le",8)],programId);return publicKey}function findMetadataAddress(stakePoolMintAddress){const[publicKey]=PublicKey.findProgramAddressSync([node_buffer.Buffer.from("metadata"),METADATA_PROGRAM_ID.toBuffer(),stakePoolMintAddress.toBuffer()],METADATA_PROGRAM_ID);return publicKey}var Layout={};var hasRequiredLayout;function requireLayout(){if(hasRequiredLayout)return Layout;hasRequiredLayout=1;let Layout$1=class Layout{constructor(span,property){if(!Number.isInteger(span)){throw new TypeError("span must be an integer")}this.span=span;this.property=property}makeDestinationObject(){return{}}decode(b,offset){throw new Error("Layout is abstract")}encode(src,b,offset){throw new Error("Layout is abstract")}getSpan(b,offset){if(0>this.span){throw new RangeError("indeterminate span")}return this.span}replicate(property){const rv=Object.create(this.constructor.prototype);Object.assign(rv,this);rv.property=property;return rv}fromArray(values){return undefined}};Layout.Layout=Layout$1;function nameWithProperty(name,lo){if(lo.property){return name+"["+lo.property+"]"}return name}Layout.nameWithProperty=nameWithProperty;function bindConstructorLayout(Class,layout){if("function"!==typeof Class){throw new TypeError("Class must be constructor")}if(Class.hasOwnProperty("layout_")){throw new Error("Class is already bound to a layout")}if(!(layout&&layout instanceof Layout$1)){throw new TypeError("layout must be a Layout")}if(layout.hasOwnProperty("boundConstructor_")){throw new Error("layout is already bound to a constructor")}Class.layout_=layout;layout.boundConstructor_=Class;layout.makeDestinationObject=()=>new Class;Object.defineProperty(Class.prototype,"encode",{value:function(b,offset){return layout.encode(this,b,offset)},writable:true});Object.defineProperty(Class,"decode",{value:function(b,offset){return layout.decode(b,offset)},writable:true})}Layout.bindConstructorLayout=bindConstructorLayout;class ExternalLayout extends Layout$1{isCount(){throw new Error("ExternalLayout is abstract")}}class GreedyCount extends ExternalLayout{constructor(elementSpan,property){if(undefined===elementSpan){elementSpan=1}if(!Number.isInteger(elementSpan)||0>=elementSpan){throw new TypeError("elementSpan must be a (positive) integer")}super(-1,property);this.elementSpan=elementSpan}isCount(){return true}decode(b,offset){if(undefined===offset){offset=0}const rem=b.length-offset;return Math.floor(rem/this.elementSpan)}encode(src,b,offset){return 0}}class OffsetLayout extends ExternalLayout{constructor(layout,offset,property){if(!(layout instanceof Layout$1)){throw new TypeError("layout must be a Layout")}if(undefined===offset){offset=0}else if(!Number.isInteger(offset)){throw new TypeError("offset must be integer or undefined")}super(layout.span,property||layout.property);this.layout=layout;this.offset=offset}isCount(){return this.layout instanceof UInt||this.layout instanceof UIntBE}decode(b,offset){if(undefined===offset){offset=0}return this.layout.decode(b,offset+this.offset)}encode(src,b,offset){if(undefined===offset){offset=0}return this.layout.encode(src,b,offset+this.offset)}}class UInt extends Layout$1{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset){if(undefined===offset){offset=0}return b.readUIntLE(offset,this.span)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeUIntLE(src,offset,this.span);return this.span}}class UIntBE extends Layout$1{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset){if(undefined===offset){offset=0}return b.readUIntBE(offset,this.span)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeUIntBE(src,offset,this.span);return this.span}}class Int extends Layout$1{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset){if(undefined===offset){offset=0}return b.readIntLE(offset,this.span)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeIntLE(src,offset,this.span);return this.span}}class IntBE extends Layout$1{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset){if(undefined===offset){offset=0}return b.readIntBE(offset,this.span)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeIntBE(src,offset,this.span);return this.span}}const V2E32=Math.pow(2,32);function divmodInt64(src){const hi32=Math.floor(src/V2E32);const lo32=src-hi32*V2E32;return{hi32:hi32,lo32:lo32}}function roundedInt64(hi32,lo32){return hi32*V2E32+lo32}class NearUInt64 extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}const lo32=b.readUInt32LE(offset);const hi32=b.readUInt32LE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset){if(undefined===offset){offset=0}const split=divmodInt64(src);b.writeUInt32LE(split.lo32,offset);b.writeUInt32LE(split.hi32,offset+4);return 8}}class NearUInt64BE extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}const hi32=b.readUInt32BE(offset);const lo32=b.readUInt32BE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset){if(undefined===offset){offset=0}const split=divmodInt64(src);b.writeUInt32BE(split.hi32,offset);b.writeUInt32BE(split.lo32,offset+4);return 8}}class NearInt64 extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}const lo32=b.readUInt32LE(offset);const hi32=b.readInt32LE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset){if(undefined===offset){offset=0}const split=divmodInt64(src);b.writeUInt32LE(split.lo32,offset);b.writeInt32LE(split.hi32,offset+4);return 8}}class NearInt64BE extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}const hi32=b.readInt32BE(offset);const lo32=b.readUInt32BE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset){if(undefined===offset){offset=0}const split=divmodInt64(src);b.writeInt32BE(split.hi32,offset);b.writeUInt32BE(split.lo32,offset+4);return 8}}class Float extends Layout$1{constructor(property){super(4,property)}decode(b,offset){if(undefined===offset){offset=0}return b.readFloatLE(offset)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeFloatLE(src,offset);return 4}}class FloatBE extends Layout$1{constructor(property){super(4,property)}decode(b,offset){if(undefined===offset){offset=0}return b.readFloatBE(offset)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeFloatBE(src,offset);return 4}}class Double extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}return b.readDoubleLE(offset)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeDoubleLE(src,offset);return 8}}class DoubleBE extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}return b.readDoubleBE(offset)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeDoubleBE(src,offset);return 8}}class Sequence extends Layout$1{constructor(elementLayout,count,property){if(!(elementLayout instanceof Layout$1)){throw new TypeError("elementLayout must be a Layout")}if(!(count instanceof ExternalLayout&&count.isCount()||Number.isInteger(count)&&0<=count)){throw new TypeError("count must be non-negative integer "+"or an unsigned integer ExternalLayout")}let span=-1;if(!(count instanceof ExternalLayout)&&0<elementLayout.span){span=count*elementLayout.span}super(span,property);this.elementLayout=elementLayout;this.count=count}getSpan(b,offset){if(0<=this.span){return this.span}if(undefined===offset){offset=0}let span=0;let count=this.count;if(count instanceof ExternalLayout){count=count.decode(b,offset)}if(0<this.elementLayout.span){span=count*this.elementLayout.span}else{let idx=0;while(idx<count){span+=this.elementLayout.getSpan(b,offset+span);++idx}}return span}decode(b,offset){if(undefined===offset){offset=0}const rv=[];let i=0;let count=this.count;if(count instanceof ExternalLayout){count=count.decode(b,offset)}while(i<count){rv.push(this.elementLayout.decode(b,offset));offset+=this.elementLayout.getSpan(b,offset);i+=1}return rv}encode(src,b,offset){if(undefined===offset){offset=0}const elo=this.elementLayout;const span=src.reduce((span,v)=>span+elo.encode(v,b,offset+span),0);if(this.count instanceof ExternalLayout){this.count.encode(src.length,b,offset)}return span}}class Structure extends Layout$1{constructor(fields,property,decodePrefixes){if(!(Array.isArray(fields)&&fields.reduce((acc,v)=>acc&&v instanceof Layout$1,true))){throw new TypeError("fields must be array of Layout instances")}if("boolean"===typeof property&&undefined===decodePrefixes){decodePrefixes=property;property=undefined}for(const fd of fields){if(0>fd.span&&undefined===fd.property){throw new Error("fields cannot contain unnamed variable-length layout")}}let span=-1;try{span=fields.reduce((span,fd)=>span+fd.getSpan(),0)}catch(e){}super(span,property);this.fields=fields;this.decodePrefixes=!!decodePrefixes}getSpan(b,offset){if(0<=this.span){return this.span}if(undefined===offset){offset=0}let span=0;try{span=this.fields.reduce((span,fd)=>{const fsp=fd.getSpan(b,offset);offset+=fsp;return span+fsp},0)}catch(e){throw new RangeError("indeterminate span")}return span}decode(b,offset){if(undefined===offset){offset=0}const dest=this.makeDestinationObject();for(const fd of this.fields){if(undefined!==fd.property){dest[fd.property]=fd.decode(b,offset)}offset+=fd.getSpan(b,offset);if(this.decodePrefixes&&b.length===offset){break}}return dest}encode(src,b,offset){if(undefined===offset){offset=0}const firstOffset=offset;let lastOffset=0;let lastWrote=0;for(const fd of this.fields){let span=fd.span;lastWrote=0<span?span:0;if(undefined!==fd.property){const fv=src[fd.property];if(undefined!==fv){lastWrote=fd.encode(fv,b,offset);if(0>span){span=fd.getSpan(b,offset)}}}lastOffset=offset;offset+=span}return lastOffset+lastWrote-firstOffset}fromArray(values){const dest=this.makeDestinationObject();for(const fd of this.fields){if(undefined!==fd.property&&0<values.length){dest[fd.property]=values.shift()}}return dest}layoutFor(property){if("string"!==typeof property){throw new TypeError("property must be string")}for(const fd of this.fields){if(fd.property===property){return fd}}}offsetOf(property){if("string"!==typeof property){throw new TypeError("property must be string")}let offset=0;for(const fd of this.fields){if(fd.property===property){return offset}if(0>fd.span){offset=-1}else if(0<=offset){offset+=fd.span}}}}class UnionDiscriminator{constructor(property){this.property=property}decode(){throw new Error("UnionDiscriminator is abstract")}encode(){throw new Error("UnionDiscriminator is abstract")}}class UnionLayoutDiscriminator extends UnionDiscriminator{constructor(layout,property){if(!(layout instanceof ExternalLayout&&layout.isCount())){throw new TypeError("layout must be an unsigned integer ExternalLayout")}super(property||layout.property||"variant");this.layout=layout}decode(b,offset){return this.layout.decode(b,offset)}encode(src,b,offset){return this.layout.encode(src,b,offset)}}class Union extends Layout$1{constructor(discr,defaultLayout,property){const upv=discr instanceof UInt||discr instanceof UIntBE;if(upv){discr=new UnionLayoutDiscriminator(new OffsetLayout(discr))}else if(discr instanceof ExternalLayout&&discr.isCount()){discr=new UnionLayoutDiscriminator(discr)}else if(!(discr instanceof UnionDiscriminator)){throw new TypeError("discr must be a UnionDiscriminator "+"or an unsigned integer layout")}if(undefined===defaultLayout){defaultLayout=null}if(!(null===defaultLayout||defaultLayout instanceof Layout$1)){throw new TypeError("defaultLayout must be null or a Layout")}if(null!==defaultLayout){if(0>defaultLayout.span){throw new Error("defaultLayout must have constant span")}if(undefined===defaultLayout.property){defaultLayout=defaultLayout.replicate("content")}}let span=-1;if(defaultLayout){span=defaultLayout.span;if(0<=span&&upv){span+=discr.layout.span}}super(span,property);this.discriminator=discr;this.usesPrefixDiscriminator=upv;this.defaultLayout=defaultLayout;this.registry={};let boundGetSourceVariant=this.defaultGetSourceVariant.bind(this);this.getSourceVariant=function(src){return boundGetSourceVariant(src)};this.configGetSourceVariant=function(gsv){boundGetSourceVariant=gsv.bind(this)}}getSpan(b,offset){if(0<=this.span){return this.span}if(undefined===offset){offset=0}const vlo=this.getVariant(b,offset);if(!vlo){throw new Error("unable to determine span for unrecognized variant")}return vlo.getSpan(b,offset)}defaultGetSourceVariant(src){if(src.hasOwnProperty(this.discriminator.property)){if(this.defaultLayout&&src.hasOwnProperty(this.defaultLayout.property)){return undefined}const vlo=this.registry[src[this.discriminator.property]];if(vlo&&(!vlo.layout||src.hasOwnProperty(vlo.property))){return vlo}}else{for(const tag in this.registry){const vlo=this.registry[tag];if(src.hasOwnProperty(vlo.property)){return vlo}}}throw new Error("unable to infer src variant")}decode(b,offset){if(undefined===offset){offset=0}let dest;const dlo=this.discriminator;const discr=dlo.decode(b,offset);let clo=this.registry[discr];if(undefined===clo){let contentOffset=0;clo=this.defaultLayout;if(this.usesPrefixDiscriminator){contentOffset=dlo.layout.span}dest=this.makeDestinationObject();dest[dlo.property]=discr;dest[clo.property]=this.defaultLayout.decode(b,offset+contentOffset)}else{dest=clo.decode(b,offset)}return dest}encode(src,b,offset){if(undefined===offset){offset=0}const vlo=this.getSourceVariant(src);if(undefined===vlo){const dlo=this.discriminator;const clo=this.defaultLayout;let contentOffset=0;if(this.usesPrefixDiscriminator){contentOffset=dlo.layout.span}dlo.encode(src[dlo.property],b,offset);return contentOffset+clo.encode(src[clo.property],b,offset+contentOffset)}return vlo.encode(src,b,offset)}addVariant(variant,layout,property){const rv=new VariantLayout(this,variant,layout,property);this.registry[variant]=rv;return rv}getVariant(vb,offset){let variant=vb;if(Buffer.isBuffer(vb)){if(undefined===offset){offset=0}variant=this.discriminator.decode(vb,offset)}return this.registry[variant]}}class VariantLayout extends Layout$1{constructor(union,variant,layout,property){if(!(union instanceof Union)){throw new TypeError("union must be a Union")}if(!Number.isInteger(variant)||0>variant){throw new TypeError("variant must be a (non-negative) integer")}if("string"===typeof layout&&undefined===property){property=layout;layout=null}if(layout){if(!(layout instanceof Layout$1)){throw new TypeError("layout must be a Layout")}if(null!==union.defaultLayout&&0<=layout.span&&layout.span>union.defaultLayout.span){throw new Error("variant span exceeds span of containing union")}if("string"!==typeof property){throw new TypeError("variant must have a String property")}}let span=union.span;if(0>union.span){span=layout?layout.span:0;if(0<=span&&union.usesPrefixDiscriminator){span+=union.discriminator.layout.span}}super(span,property);this.union=union;this.variant=variant;this.layout=layout||null}getSpan(b,offset){if(0<=this.span){return this.span}if(undefined===offset){offset=0}let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}return contentOffset+this.layout.getSpan(b,offset+contentOffset)}decode(b,offset){const dest=this.makeDestinationObject();if(undefined===offset){offset=0}if(this!==this.union.getVariant(b,offset)){throw new Error("variant mismatch")}let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}if(this.layout){dest[this.property]=this.layout.decode(b,offset+contentOffset)}else if(this.property){dest[this.property]=true}else if(this.union.usesPrefixDiscriminator){dest[this.union.discriminator.property]=this.variant}return dest}encode(src,b,offset){if(undefined===offset){offset=0}let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}if(this.layout&&!src.hasOwnProperty(this.property)){throw new TypeError("variant lacks property "+this.property)}this.union.discriminator.encode(this.variant,b,offset);let span=contentOffset;if(this.layout){this.layout.encode(src[this.property],b,offset+contentOffset);span+=this.layout.getSpan(b,offset+contentOffset);if(0<=this.union.span&&span>this.union.span){throw new Error("encoded variant overruns containing union")}}return span}fromArray(values){if(this.layout){return this.layout.fromArray(values)}}}function fixBitwiseResult(v){if(0>v){v+=4294967296}return v}class BitStructure extends Layout$1{constructor(word,msb,property){if(!(word instanceof UInt||word instanceof UIntBE)){throw new TypeError("word must be a UInt or UIntBE layout")}if("string"===typeof msb&&undefined===property){property=msb;msb=undefined}if(4<word.span){throw new RangeError("word cannot exceed 32 bits")}super(word.span,property);this.word=word;this.msb=!!msb;this.fields=[];let value=0;this._packedSetValue=function(v){value=fixBitwiseResult(v);return this};this._packedGetValue=function(){return value}}decode(b,offset){const dest=this.makeDestinationObject();if(undefined===offset){offset=0}const value=this.word.decode(b,offset);this._packedSetValue(value);for(const fd of this.fields){if(undefined!==fd.property){dest[fd.property]=fd.decode(value)}}return dest}encode(src,b,offset){if(undefined===offset){offset=0}const value=this.word.decode(b,offset);this._packedSetValue(value);for(const fd of this.fields){if(undefined!==fd.property){const fv=src[fd.property];if(undefined!==fv){fd.encode(fv)}}}return this.word.encode(this._packedGetValue(),b,offset)}addField(bits,property){const bf=new BitField(this,bits,property);this.fields.push(bf);return bf}addBoolean(property){const bf=new Boolean(this,property);this.fields.push(bf);return bf}fieldFor(property){if("string"!==typeof property){throw new TypeError("property must be string")}for(const fd of this.fields){if(fd.property===property){return fd}}}}class BitField{constructor(container,bits,property){if(!(container instanceof BitStructure)){throw new TypeError("container must be a BitStructure")}if(!Number.isInteger(bits)||0>=bits){throw new TypeError("bits must be positive integer")}const totalBits=8*container.span;const usedBits=container.fields.reduce((sum,fd)=>sum+fd.bits,0);if(bits+usedBits>totalBits){throw new Error("bits too long for span remainder ("+(totalBits-usedBits)+" of "+totalBits+" remain)")}this.container=container;this.bits=bits;this.valueMask=(1<<bits)-1;if(32===bits){this.valueMask=4294967295}this.start=usedBits;if(this.container.msb){this.start=totalBits-usedBits-bits}this.wordMask=fixBitwiseResult(this.valueMask<<this.start);this.property=property}decode(){const word=this.container._packedGetValue();const wordValue=fixBitwiseResult(word&this.wordMask);const value=wordValue>>>this.start;return value}encode(value){if(!Number.isInteger(value)||value!==fixBitwiseResult(value&this.valueMask)){throw new TypeError(nameWithProperty("BitField.encode",this)+" value must be integer not exceeding "+this.valueMask)}const word=this.container._packedGetValue();const wordValue=fixBitwiseResult(value<<this.start);this.container._packedSetValue(fixBitwiseResult(word&~this.wordMask)|wordValue)}}class Boolean extends BitField{constructor(container,property){super(container,1,property)}decode(b,offset){return!!BitField.prototype.decode.call(this,b,offset)}encode(value){if("boolean"===typeof value){value=+value}return BitField.prototype.encode.call(this,value)}}class Blob extends Layout$1{constructor(length,property){if(!(length instanceof ExternalLayout&&length.isCount()||Number.isInteger(length)&&0<=length)){throw new TypeError("length must be positive integer "+"or an unsigned integer ExternalLayout")}let span=-1;if(!(length instanceof ExternalLayout)){span=length}super(span,property);this.length=length}getSpan(b,offset){let span=this.span;if(0>span){span=this.length.decode(b,offset)}return span}decode(b,offset){if(undefined===offset){offset=0}let span=this.span;if(0>span){span=this.length.decode(b,offset)}return b.slice(offset,offset+span)}encode(src,b,offset){let span=this.length;if(this.length instanceof ExternalLayout){span=src.length}if(!(Buffer.isBuffer(src)&&span===src.length)){throw new TypeError(nameWithProperty("Blob.encode",this)+" requires (length "+span+") Buffer as src")}if(offset+span>b.length){throw new RangeError("encoding overruns Buffer")}b.write(src.toString("hex"),offset,span,"hex");if(this.length instanceof ExternalLayout){this.length.encode(span,b,offset)}return span}}class CString extends Layout$1{constructor(property){super(-1,property)}getSpan(b,offset){if(!Buffer.isBuffer(b)){throw new TypeError("b must be a Buffer")}if(undefined===offset){offset=0}let idx=offset;while(idx<b.length&&0!==b[idx]){idx+=1}return 1+idx-offset}decode(b,offset,dest){if(undefined===offset){offset=0}let span=this.getSpan(b,offset);return b.slice(offset,offset+span-1).toString("utf-8")}encode(src,b,offset){if(undefined===offset){offset=0}if("string"!==typeof src){src=src.toString()}const srcb=new Buffer(src,"utf8");const span=srcb.length;if(offset+span>b.length){throw new RangeError("encoding overruns Buffer")}srcb.copy(b,offset);b[offset+span]=0;return span+1}}class UTF8 extends Layout$1{constructor(maxSpan,property){if("string"===typeof maxSpan&&undefined===property){property=maxSpan;maxSpan=undefined}if(undefined===maxSpan){maxSpan=-1}else if(!Number.isInteger(maxSpan)){throw new TypeError("maxSpan must be an integer")}super(-1,property);this.maxSpan=maxSpan}getSpan(b,offset){if(!Buffer.isBuffer(b)){throw new TypeError("b must be a Buffer")}if(undefined===offset){offset=0}return b.length-offset}decode(b,offset,dest){if(undefined===offset){offset=0}let span=this.getSpan(b,offset);if(0<=this.maxSpan&&this.maxSpan<span){throw new RangeError("text length exceeds maxSpan")}return b.slice(offset,offset+span).toString("utf-8")}encode(src,b,offset){if(undefined===offset){offset=0}if("string"!==typeof src){src=src.toString()}const srcb=new Buffer(src,"utf8");const span=srcb.length;if(0<=this.maxSpan&&this.maxSpan<span){throw new RangeError("text length exceeds maxSpan")}if(offset+span>b.length){throw new RangeError("encoding overruns Buffer")}srcb.copy(b,offset);return span}}class Constant extends Layout$1{constructor(value,property){super(0,property);this.value=value}decode(b,offset,dest){return this.value}encode(src,b,offset){return 0}}Layout.ExternalLayout=ExternalLayout;Layout.GreedyCount=GreedyCount;Layout.OffsetLayout=OffsetLayout;Layout.UInt=UInt;Layout.UIntBE=UIntBE;Layout.Int=Int;Layout.IntBE=IntBE;Layout.Float=Float;Layout.FloatBE=FloatBE;Layout.Double=Double;Layout.DoubleBE=DoubleBE;Layout.Sequence=Sequence;Layout.Structure=Structure;Layout.UnionDiscriminator=UnionDiscriminator;Layout.UnionLayoutDiscriminator=UnionLayoutDiscriminator;Layout.Union=Union;Layout.VariantLayout=VariantLayout;Layout.BitStructure=BitStructure;Layout.BitField=BitField;Layout.Boolean=Boolean;Layout.Blob=Blob;Layout.CString=CString;Layout.UTF8=UTF8;Layout.Constant=Constant;Layout.greedy=(elementSpan,property)=>new GreedyCount(elementSpan,property);Layout.offset=(layout,offset,property)=>new OffsetLayout(layout,offset,property);Layout.u8=property=>new UInt(1,property);Layout.u16=property=>new UInt(2,property);Layout.u24=property=>new UInt(3,property);Layout.u32=property=>new UInt(4,property);Layout.u40=property=>new UInt(5,property);Layout.u48=property=>new UInt(6,property);Layout.nu64=property=>new NearUInt64(property);Layout.u16be=property=>new UIntBE(2,property);Layout.u24be=property=>new UIntBE(3,property);Layout.u32be=property=>new UIntBE(4,property);Layout.u40be=property=>new UIntBE(5,property);Layout.u48be=property=>new UIntBE(6,property);Layout.nu64be=property=>new NearUInt64BE(property);Layout.s8=property=>new Int(1,property);Layout.s16=property=>new Int(2,property);Layout.s24=property=>new Int(3,property);Layout.s32=property=>new Int(4,property);Layout.s40=property=>new Int(5,property);Layout.s48=property=>new Int(6,property);Layout.ns64=property=>new NearInt64(property);Layout.s16be=property=>new IntBE(2,property);Layout.s24be=property=>new IntBE(3,property);Layout.s32be=property=>new IntBE(4,property);Layout.s40be=property=>new IntBE(5,property);Layout.s48be=property=>new IntBE(6,property);Layout.ns64be=property=>new NearInt64BE(property);Layout.f32=property=>new Float(property);Layout.f32be=property=>new FloatBE(property);Layout.f64=property=>new Double(property);Layout.f64be=property=>new DoubleBE(property);Layout.struct=(fields,property,decodePrefixes)=>new Structure(fields,property,decodePrefixes);Layout.bits=(word,msb,property)=>new BitStructure(word,msb,property);Layout.seq=(elementLayout,count,property)=>new Sequence(elementLayout,count,property);Layout.union=(discr,defaultLayout,property)=>new Union(discr,defaultLayout,property);Layout.unionLayoutDiscriminator=(layout,property)=>new UnionLayoutDiscriminator(layout,property);Layout.blob=(length,property)=>new Blob(length,property);Layout.cstr=property=>new CString(property);Layout.utf8=(maxSpan,property)=>new UTF8(maxSpan,property);Layout.const=(value,property)=>new Constant(value,property);return Layout}var LayoutExports=requireLayout();class BNLayout extends LayoutExports.Layout{constructor(span,signed,property){super(span,property);this.blob=LayoutExports.blob(span);this.signed=signed}decode(b,offset=0){const num=new BN(this.blob.decode(b,offset),10,"le");if(this.signed){return num.fromTwos(this.span*8).clone()}return num}encode(src,b,offset=0){if(this.signed){src=src.toTwos(this.span*8)}return this.blob.encode(src.toArrayLike(Buffer,"le",this.span),b,offset)}}function u64(property){return new BNLayout(8,false,property)}class WrappedLayout extends LayoutExports.Layout{constructor(layout,decoder,encoder,property){super(layout.span,property);this.layout=layout;this.decoder=decoder;this.encoder=encoder}decode(b,offset){return this.decoder(this.layout.decode(b,offset))}encode(src,b,offset){return this.layout.encode(this.encoder(src),b,offset)}getSpan(b,offset){return this.layout.getSpan(b,offset)}}function publicKey(property){return new WrappedLayout(LayoutExports.blob(32),b=>new PublicKey(b),key=>key.toBuffer(),property)}class OptionLayout extends LayoutExports.Layout{constructor(layout,property){super(-1,property);this.layout=layout;this.discriminator=LayoutExports.u8()}encode(src,b,offset=0){if(src===null||src===undefined){return this.discriminator.encode(0,b,offset)}this.discriminator.encode(1,b,offset);return this.layout.encode(src,b,offset+1)+1}decode(b,offset=0){const discriminator=this.discriminator.decode(b,offset);if(discriminator===0){return null}else if(discriminator===1){return this.layout.decode(b,offset+1)}throw new Error(`Invalid option ${this.property}`)}getSpan(b,offset=0){const discriminator=this.discriminator.decode(b,offset);if(discriminator===0){return 1}else if(discriminator===1){return this.layout.getSpan(b,offset+1)+1}throw new Error(`Invalid option ${this.property}`)}}function option(layout,property){return new OptionLayout(layout,property)}function vec(elementLayout,property){const length=LayoutExports.u32("length");const layout=LayoutExports.struct([length,LayoutExports.seq(elementLayout,LayoutExports.offset(length,-length.span),"values")]);return new WrappedLayout(layout,({values:values})=>values,values=>({values:values}),property)}const feeFields=[u64("denominator"),u64("numerator")];var AccountType;(function(AccountType){AccountType[AccountType["Uninitialized"]=0]="Uninitialized";AccountType[AccountType["StakePool"]=1]="StakePool";AccountType[AccountType["ValidatorList"]=2]="ValidatorList"})(AccountType||(AccountType={}));const BigNumFromString=coerce(instance(BN),string(),value=>{if(typeof value==="string"){return new BN(value,10)}throw new Error("invalid big num")});const PublicKeyFromString=coerce(instance(PublicKey),string(),value=>new PublicKey(value));class FutureEpochLayout extends LayoutExports.Layout{constructor(layout,property){super(-1,property);this.layout=layout;this.discriminator=LayoutExports.u8()}encode(src,b,offset=0){if(src===null||src===undefined){return this.discriminator.encode(0,b,offset)}this.discriminator.encode(2,b,offset);return this.layout.encode(src,b,offset+1)+1}decode(b,offset=0){const discriminator=this.discriminator.decode(b,offset);if(discriminator===0){return null}else if(discriminator===1||discriminator===2){return this.layout.decode(b,offset+1)}throw new Error(`Invalid future epoch ${this.property}`)}getSpan(b,offset=0){const discriminator=this.discriminator.decode(b,offset);if(discriminator===0){return 1}else if(discriminator===1||discriminator===2){return this.layout.getSpan(b,offset+1)+1}throw new Error(`Invalid future epoch ${this.property}`)}}function futureEpoch(layout,property){return new FutureEpochLayout(layout,property)}const StakeAccountType=enums(["uninitialized","initialized","delegated","rewardsPool"]);const StakeMeta=type({rentExemptReserve:BigNumFromString,authorized:type({staker:PublicKeyFromString,withdrawer:PublicKeyFromString}),lockup:type({unixTimestamp:number(),epoch:number(),custodian:PublicKeyFromString})});const StakeAccountInfo=type({meta:StakeMeta,stake:nullable(type({delegation:type({voter:PublicKeyFromString,stake:BigNumFromString,activationEpoch:BigNumFromString,deactivationEpoch:BigNumFromString,warmupCooldownRate:number()}),creditsObserved:number()}))});const StakeAccount=type({type:StakeAccountType,info:optional(StakeAccountInfo)});const StakePoolLayout=LayoutExports.struct([LayoutExports.u8("accountType"),publicKey("manager"),publicKey("staker"),publicKey("stakeDepositAuthority"),LayoutExports.u8("stakeWithdrawBumpSeed"),publicKey("validatorList"),publicKey("reserveStake"),publicKey("poolMint"),publicKey("managerFeeAccount"),publicKey("tokenProgramId"),u64("totalLamports"),u64("poolTokenSupply"),u64("lastUpdateEpoch"),LayoutExports.struct([u64("unixTimestamp"),u64("epoch"),publicKey("custodian")],"lockup"),LayoutExports.struct(feeFields,"epochFee"),futureEpoch(LayoutExports.struct(feeFields),"nextEpochFee"),option(publicKey(),"preferredDepositValidatorVoteAddress"),option(publicKey(),"preferredWithdrawValidatorVoteAddress"),LayoutExports.struct(feeFields,"stakeDepositFee"),LayoutExports.struct(feeFields,"stakeWithdrawalFee"),futureEpoch(LayoutExports.struct(feeFields),"nextStakeWithdrawalFee"),LayoutExports.u8("stakeReferralFee"),option(publicKey(),"solDepositAuthority"),LayoutExports.struct(feeFields,"solDepositFee"),LayoutExports.u8("solReferralFee"),option(publicKey(),"solWithdrawAuthority"),LayoutExports.struct(feeFields,"solWithdrawalFee"),futureEpoch(LayoutExports.struct(feeFields),"nextSolWithdrawalFee"),u64("lastEpochPoolTokenSupply"),u64("lastEpochTotalLamports")]);var ValidatorStakeInfoStatus;(function(ValidatorStakeInfoStatus){ValidatorStakeInfoStatus[ValidatorStakeInfoStatus["Active"]=0]="Active";ValidatorStakeInfoStatus[ValidatorStakeInfoStatus["DeactivatingTransient"]=1]="DeactivatingTransient";ValidatorStakeInfoStatus[ValidatorStakeInfoStatus["ReadyForRemoval"]=2]="ReadyForRemoval"})(ValidatorStakeInfoStatus||(ValidatorStakeInfoStatus={}));const ValidatorStakeInfoLayout=LayoutExports.struct([u64("activeStakeLamports"),u64("transientStakeLamports"),u64("lastUpdateEpoch"),u64("transientSeedSuffixStart"),u64("transientSeedSuffixEnd"),LayoutExports.u8("status"),publicKey("voteAccountAddress")]);const ValidatorListLayout=LayoutExports.struct([LayoutExports.u8("accountType"),LayoutExports.u32("maxValidators"),vec(ValidatorStakeInfoLayout,"validators")]);async function getValidatorListAccount(connection,pubkey){const account=await connection.getAccountInfo(pubkey);if(!account){throw new Error("Invalid validator list account")}return{pubkey:pubkey,account:{data:ValidatorListLayout.decode(account===null||account===void 0?void 0:account.data),executable:account.executable,lamports:account.lamports,owner:account.owner}}}async function prepareWithdrawAccounts(connection,stakePool,stakePoolAddress,amount,compareFn,skipFee){var _a,_b;const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const validatorListAcc=await connection.getAccountInfo(stakePool.validatorList);const validatorList=ValidatorListLayout.decode(validatorListAcc===null||validatorListAcc===void 0?void 0:validatorListAcc.data);if(!(validatorList===null||validatorList===void 0?void 0:validatorList.validators)||(validatorList===null||validatorList===void 0?void 0:validatorList.validators.length)==0){throw new Error("No accounts found")}const minBalanceForRentExemption=await connection.getMinimumBalanceForRentExemption(StakeProgram.space);const minBalance=new BN(minBalanceForRentExemption+MINIMUM_ACTIVE_STAKE);let accounts=[];for(const validator of validatorList.validators){if(validator.status!==ValidatorStakeInfoStatus.Active){continue}const stakeAccountAddress=await findStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress);if(!validator.activeStakeLamports.isZero()){const isPreferred=(_a=stakePool===null||stakePool===void 0?void 0:stakePool.preferredWithdrawValidatorVoteAddress)===null||_a===void 0?void 0:_a.equals(validator.voteAccountAddress);accounts.push({type:isPreferred?"preferred":"active",voteAddress:validator.voteAccountAddress,stakeAddress:stakeAccountAddress,lamports:validator.activeStakeLamports})}const transientStakeLamports=validator.transientStakeLamports.sub(minBalance);if(transientStakeLamports.gt(new BN(0))){const transientStakeAccountAddress=await findTransientStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress,validator.transientSeedSuffixStart);accounts.push({type:"transient",voteAddress:validator.voteAccountAddress,stakeAddress:transientStakeAccountAddress,lamports:transientStakeLamports})}}accounts=accounts.sort(compareFn||((a,b)=>b.lamports.sub(a.lamports).toNumber()));const reserveStake=await connection.getAccountInfo(stakePool.reserveStake);const reserveStakeBalance=new BN(((_b=reserveStake===null||reserveStake===void 0?void 0:reserveStake.lamports)!==null&&_b!==void 0?_b:0)-minBalanceForRentExemption);if(reserveStakeBalance.gt(new BN(0))){accounts.push({type:"reserve",stakeAddress:stakePool.reserveStake,lamports:reserveStakeBalance})}const withdrawFrom=[];let remainingAmount=new BN(amount);const fee=stakePool.stakeWithdrawalFee;const inverseFee={numerator:fee.denominator.sub(fee.numerator),denominator:fee.denominator};for(const type of["preferred","active","transient","reserve"]){const filteredAccounts=accounts.filter(a=>a.type==type);for(const{stakeAddress:stakeAddress,voteAddress:voteAddress,lamports:lamports}of filteredAccounts){if(lamports.lte(minBalance)&&type=="transient"){continue}let availableForWithdrawal=calcPoolTokensForDeposit(stakePool,lamports);if(!skipFee&&!inverseFee.numerator.isZero()){availableForWithdrawal=availableForWithdrawal.mul(inverseFee.denominator).div(inverseFee.numerator)}const poolAmount=BN.min(availableForWithdrawal,remainingAmount);if(poolAmount.lte(new BN(0))){continue}withdrawFrom.push({stakeAddress:stakeAddress,voteAddress:voteAddress,poolAmount:poolAmount});remainingAmount=remainingAmount.sub(poolAmount);if(remainingAmount.isZero()){break}}if(remainingAmount.isZero()){break}}if(remainingAmount.gt(new BN(0))){throw new Error(`No stake accounts found in this pool with enough balance to withdraw ${lamportsToSol(amount)} pool tokens.`)}return withdrawFrom}function calcPoolTokensForDeposit(stakePool,stakeLamports){if(stakePool.poolTokenSupply.isZero()||stakePool.totalLamports.isZero()){return stakeLamports}const numerator=stakeLamports.mul(stakePool.poolTokenSupply);return numerator.div(stakePool.totalLamports)}function calcLamportsWithdrawAmount(stakePool,poolTokens){const numerator=poolTokens.mul(stakePool.totalLamports);const denominator=stakePool.poolTokenSupply;if(numerator.lt(denominator)){return new BN(0)}return numerator.div(denominator)}function newStakeAccount(feePayer,instructions,lamports){const stakeReceiverKeypair=Keypair.generate();console.log(`Creating account to receive stake ${stakeReceiverKeypair.publicKey}`);instructions.push(SystemProgram.createAccount({fromPubkey:feePayer,newAccountPubkey:stakeReceiverKeypair.publicKey,lamports:lamports,space:StakeProgram.space,programId:StakeProgram.programId}));return stakeReceiverKeypair}function arrayChunk(array,size){const result=[];for(let i=0;i<array.length;i+=size){result.push(array.slice(i,i+size))}return result}const MOVE_STAKE_LAYOUT=LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports"),LayoutExports$1.ns64("transientStakeSeed")]);const UPDATE_VALIDATOR_LIST_BALANCE_LAYOUT=LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("startIndex"),LayoutExports$1.u8("noMerge")]);function tokenMetadataLayout(instruction,nameLength,symbolLength,uriLength){if(nameLength>METADATA_MAX_NAME_LENGTH){throw"maximum token name length is 32 characters"}if(symbolLength>METADATA_MAX_SYMBOL_LENGTH){throw"maximum token symbol length is 10 characters"}if(uriLength>METADATA_MAX_URI_LENGTH){throw"maximum token uri length is 200 characters"}return{index:instruction,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("nameLen"),LayoutExports$1.blob(nameLength,"name"),LayoutExports$1.u32("symbolLen"),LayoutExports$1.blob(symbolLength,"symbol"),LayoutExports$1.u32("uriLen"),LayoutExports$1.blob(uriLength,"uri")])}}const STAKE_POOL_INSTRUCTION_LAYOUTS=Object.freeze({AddValidatorToPool:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("seed")])},RemoveValidatorFromPool:{index:2,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction")])},DecreaseValidatorStake:{index:3,layout:MOVE_STAKE_LAYOUT},IncreaseValidatorStake:{index:4,layout:MOVE_STAKE_LAYOUT},UpdateValidatorListBalance:{index:6,layout:UPDATE_VALIDATOR_LIST_BALANCE_LAYOUT},UpdateStakePoolBalance:{index:7,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction")])},CleanupRemovedValidatorEntries:{index:8,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction")])},DepositStake:{index:9,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction")])},WithdrawStake:{index:10,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("poolTokens")])},DepositSol:{index:14,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},WithdrawSol:{index:16,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("poolTokens")])},IncreaseAdditionalValidatorStake:{index:19,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports"),LayoutExports$1.ns64("transientStakeSeed"),LayoutExports$1.ns64("ephemeralStakeSeed")])},DecreaseAdditionalValidatorStake:{index:20,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports"),LayoutExports$1.ns64("transientStakeSeed"),LayoutExports$1.ns64("ephemeralStakeSeed")])},DecreaseValidatorStakeWithReserve:{index:21,layout:MOVE_STAKE_LAYOUT},Redelegate:{index:22,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction")])},DepositStakeWithSlippage:{index:23,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},WithdrawStakeWithSlippage:{index:24,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},DepositSolWithSlippage:{index:25,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},WithdrawSolWithSlippage:{index:26,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},DepositWsolWithSession:{index:27,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},WithdrawWsolWithSession:{index:28,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("poolTokens")])}});class StakePoolInstruction{static addValidatorToPool(params){const{programId:programId,stakePool:stakePool,staker:staker,reserveStake:reserveStake,withdrawAuthority:withdrawAuthority,validatorList:validatorList,validatorStake:validatorStake,validatorVote:validatorVote,seed:seed}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.AddValidatorToPool;const data=encodeData(type,{seed:seed!==null&&seed!==void 0?seed:0});const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:validatorVote,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:STAKE_CONFIG_ID,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static removeValidatorFromPool(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,validatorStake:validatorStake,transientStake:transientStake}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.RemoveValidatorFromPool;const data=encodeData(type);const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static updateValidatorListBalance(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,startIndex:startIndex,noMerge:noMerge,validatorAndTransientStakePairs:validatorAndTransientStakePairs}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.UpdateValidatorListBalance;const data=encodeData(type,{startIndex:startIndex,noMerge:noMerge?1:0});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false},...validatorAndTransientStakePairs.map(pubkey=>({pubkey:pubkey,isSigner:false,isWritable:true}))];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static updateStakePoolBalance(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,managerFeeAccount:managerFeeAccount,poolMint:poolMint}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.UpdateStakePoolBalance;const data=encodeData(type);const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:false},{pubkey:managerFeeAccount,isSigner:false,isWritable:true},{pubkey:poolMint,isSigner:false,isWritable:true},{pubkey:TOKEN_PROGRAM_ID,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static cleanupRemovedValidatorEntries(params){const{programId:programId,stakePool:stakePool,validatorList:validatorList}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.CleanupRemovedValidatorEntries;const data=encodeData(type);const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static increaseValidatorStake(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,transientStake:transientStake,validatorStake:validatorStake,validatorVote:validatorVote,lamports:lamports,transientStakeSeed:transientStakeSeed}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.IncreaseValidatorStake;const data=encodeData(type,{lamports:lamports,transientStakeSeed:transientStakeSeed});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:false},{pubkey:validatorVote,isSigner:false,isWritable:false},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:STAKE_CONFIG_ID,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static increaseAdditionalValidatorStake(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,transientStake:transientStake,validatorStake:validatorStake,validatorVote:validatorVote,lamports:lamports,transientStakeSeed:transientStakeSeed,ephemeralStake:ephemeralStake,ephemeralStakeSeed:ephemeralStakeSeed}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.IncreaseAdditionalValidatorStake;const data=encodeData(type,{lamports:lamports,transientStakeSeed:transientStakeSeed,ephemeralStakeSeed:ephemeralStakeSeed});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:ephemeralStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:false},{pubkey:validatorVote,isSigner:false,isWritable:false},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:STAKE_CONFIG_ID,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static decreaseValidatorStake(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,validatorStake:validatorStake,transientStake:transientStake,lamports:lamports,transientStakeSeed:transientStakeSeed}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DecreaseValidatorStake;const data=encodeData(type,{lamports:lamports,transientStakeSeed:transientStakeSeed});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static decreaseValidatorStakeWithReserve(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,validatorStake:validatorStake,transientStake:transientStake,lamports:lamports,transientStakeSeed:transientStakeSeed}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DecreaseValidatorStakeWithReserve;const data=encodeData(type,{lamports:lamports,transientStakeSeed:transientStakeSeed});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static decreaseAdditionalValidatorStake(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,validatorStake:validatorStake,transientStake:transientStake,lamports:lamports,transientStakeSeed:transientStakeSeed,ephemeralStakeSeed:ephemeralStakeSeed,ephemeralStake:ephemeralStake}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DecreaseAdditionalValidatorStake;const data=encodeData(type,{lamports:lamports,transientStakeSeed:transientStakeSeed,ephemeralStakeSeed:ephemeralStakeSeed});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:ephemeralStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static depositStake(params){const{programId:programId,stakePool:stakePool,validatorList:validatorList,depositAuthority:depositAuthority,withdrawAuthority:withdrawAuthority,depositStake:depositStake,validatorStake:validatorStake,reserveStake:reserveStake,destinationPoolAccount:destinationPoolAccount,managerFeeAccount:managerFeeAccount,referralPoolAccount:referralPoolAccount,poolMint:poolMint}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DepositStake;const data=encodeData(type);const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:depositAuthority,isSigner:false,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:depositStake,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:destinationPoolAccount,isSigner:false,isWritable:true},{pubkey:managerFeeAccount,isSigner:false,isWritable:true},{pubkey:referralPoolAccount,isSigner:false,isWritable:true},{pubkey:poolMint,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:TOKEN_PROGRAM_ID,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static depositSol(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,depositAuthority:depositAuthority,reserveStake:reserveStake,fundingAccount:fundingAccount,destinationPoolAccount:destinationPoolAccount,managerFeeAccount:managerFeeAccount,referralPoolAccount:referralPoolAccount,poolMint:poolMint,lamports:lamports}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DepositSol;const data=encodeData(type,{lamports:lamports});const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:fundingAccount,isSigner:true,isWritable:true},{pubkey:destinationPoolAccount,isSigner:false,isWritable:true},{pubkey:managerFeeAccount,isSigner:false,isWritable:true},{pubkey:referralPoolAccount,isSigner:false,isWritable:true},{pubkey:poolMint,isSigner:false,isWritable:true},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:TOKEN_PROGRAM_ID,isSigner:false,isWritable:false}];if(depositAuthority){keys.push({pubkey:depositAuthority,isSigner:true,isWritable:false})}return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static depositWsolWithSession(params){var _a;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DepositWsolWithSession;const data=encodeData(type,{lamports:params.lamports});const keys=[{pubkey:params.stakePool,isSigner:false,isWritable:true},{pubkey:params.withdrawAuthority,isSigner:false,isWritable:false},{pubkey:params.reserveStake,isSigner:false,isWritable:true},{pubkey:params.fundingAccount,isSigner:true,isWritable:true},{pubkey:params.destinationPoolAccount,isSigner:false,isWritable:true},{pubkey:params.managerFeeAccount,isSigner:false,isWritable:true},{pubkey:params.referralPoolAccount,isSigner:false,isWritable:true},{pubkey:params.poolMint,isSigner:false,isWritable:true},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:params.tokenProgramId,isSigner:false,isWritable:false},{pubkey:params.wsolMint,isSigner:false,isWritable:false},{pubkey:params.wsolTokenAccount,isSigner:false,isWritable:true},{pubkey:params.wsolTransientAccount,isSigner:false,isWritable:true},{pubkey:params.programSigner,isSigner:false,isWritable:true},{pubkey:(_a=params.payer)!==null&&_a!==void 0?_a:params.fundingAccount,isSigner:true,isWritable:true}];if(params.depositAuthority){keys.push({pubkey:params.depositAuthority,isSigner:true,isWritable:false})}return new TransactionInstruction({programId:params.programId,keys:keys,data:data})}static withdrawStake(params){const{programId:programId,stakePool:stakePool,validatorList:validatorList,withdrawAuthority:withdrawAuthority,validatorStake:validatorStake,destinationStake:destinationStake,destinationStakeAuthority:destinationStakeAuthority,sourceTransferAuthority:sourceTransferAuthority,sourcePoolAccount:sourcePoolAccount,managerFeeAccount:managerFeeAccount,poolMint:poolMint,poolTokens:poolTokens}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.WithdrawStake;const data=encodeData(type,{poolTokens:poolTokens});const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:destinationStake,isSigner:false,isWritable:true},{pubkey:destinationStakeAuthority,isSigner:false,isWritable:false},{pubkey:sourceTransferAuthority,isSigner:true,isWritable:false},{pubkey:sourcePoolAccount,isSigner:false,isWritable:true},{pubkey:managerFeeAccount,isSigner:false,isWritable:true},{pubkey:poolMint,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:TOKEN_PROGRAM_ID,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static withdrawSol(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,sourceTransferAuthority:sourceTransferAuthority,sourcePoolAccount:sourcePoolAccount,reserveStake:reserveStake,destinationSystemAccount:destinationSystemAccount,managerFeeAccount:managerFeeAccount,solWithdrawAuthority:solWithdrawAuthority,poolMint:poolMint,poolTokens:poolTokens}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.WithdrawSol;const data=encodeData(type,{poolTokens:poolTokens});const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:sourceTransferAuthority,isSigner:true,isWritable:false},{pubkey:sourcePoolAccount,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:destinationSystemAccount,isSigner:false,isWritable:true},{pubkey:managerFeeAccount,isSigner:false,isWritable:true},{pubkey:poolMint,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false},{pubkey:TOKEN_PROGRAM_ID,isSigner:false,isWritable:false}];if(solWithdrawAuthority){keys.push({pubkey:solWithdrawAuthority,isSigner:true,isWritable:false})}return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static withdrawWsolWithSession(params){const type=STAKE_POOL_INSTRUCTION_LAYOUTS.WithdrawWsolWithSession;const data=encodeData(type,{poolTokens:params.poolTokens});const keys=[{pubkey:params.stakePool,isSigner:false,isWritable:true},{pubkey:params.withdrawAuthority,isSigner:false,isWritable:false},{pubkey:params.userTransferAuthority,isSigner:true,isWritable:true},{pubkey:params.poolTokensFrom,isSigner:false,isWritable:true},{pubkey:params.reserveStake,isSigner:false,isWritable:true},{pubkey:params.userWsolAccount,isSigner:false,isWritable:true},{pubkey:params.managerFeeAccount,isSigner:false,isWritable:true},{pubkey:params.poolMint,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false},{pubkey:params.tokenProgramId,isSigner:false,isWritable:false},{pubkey:params.wsolMint,isSigner:false,isWritable:false},{pubkey:params.programSigner,isSigner:false,isWritable:true}];if(params.solWithdrawAuthority){keys.push({pubkey:params.solWithdrawAuthority,isSigner:true,isWritable:false})}return new TransactionInstruction({programId:params.programId,keys:keys,data:data})}static createTokenMetadata(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,tokenMetadata:tokenMetadata,manager:manager,payer:payer,poolMint:poolMint,name:name,symbol:symbol,uri:uri}=params;const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:manager,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:poolMint,isSigner:false,isWritable:false},{pubkey:payer,isSigner:true,isWritable:true},{pubkey:tokenMetadata,isSigner:false,isWritable:true},{pubkey:METADATA_PROGRAM_ID,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false}];const type=tokenMetadataLayout(17,name.length,symbol.length,uri.length);const data=encodeData(type,{nameLen:name.length,name:Buffer.from(name),symbolLen:symbol.length,symbol:Buffer.from(symbol),uriLen:uri.length,uri:Buffer.from(uri)});return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static updateTokenMetadata(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,tokenMetadata:tokenMetadata,manager:manager,name:name,symbol:symbol,uri:uri}=params;const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:manager,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:tokenMetadata,isSigner:false,isWritable:true},{pubkey:METADATA_PROGRAM_ID,isSigner:false,isWritable:false}];const type=tokenMetadataLayout(18,name.length,symbol.length,uri.length);const data=encodeData(type,{nameLen:name.length,name:Buffer.from(name),symbolLen:symbol.length,symbol:Buffer.from(symbol),uriLen:uri.length,uri:Buffer.from(uri)});return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static decodeDepositStake(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,11);decodeData(STAKE_POOL_INSTRUCTION_LAYOUTS.DepositStake,instruction.data);return{programId:instruction.programId,stakePool:instruction.keys[0].pubkey,validatorList:instruction.keys[1].pubkey,depositAuthority:instruction.keys[2].pubkey,withdrawAuthority:instruction.keys[3].pubkey,depositStake:instruction.keys[4].pubkey,validatorStake:instruction.keys[5].pubkey,reserveStake:instruction.keys[6].pubkey,destinationPoolAccount:instruction.keys[7].pubkey,managerFeeAccount:instruction.keys[8].pubkey,referralPoolAccount:instruction.keys[9].pubkey,poolMint:instruction.keys[10].pubkey}}static decodeDepositSol(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,9);const{amount:amount}=decodeData(STAKE_POOL_INSTRUCTION_LAYOUTS.DepositSol,instruction.data);return{programId:instruction.programId,stakePool:instruction.keys[0].pubkey,depositAuthority:instruction.keys[1].pubkey,withdrawAuthority:instruction.keys[2].pubkey,reserveStake:instruction.keys[3].pubkey,fundingAccount:instruction.keys[4].pubkey,destinationPoolAccount:instruction.keys[5].pubkey,managerFeeAccount:instruction.keys[6].pubkey,referralPoolAccount:instruction.keys[7].pubkey,poolMint:instruction.keys[8].pubkey,lamports:amount}}static checkProgramId(programId){if(!programId.equals(STAKE_POOL_PROGRAM_ID)&&!programId.equals(DEVNET_STAKE_POOL_PROGRAM_ID)){throw new Error("Invalid instruction; programId is not the stake pool program")}}static checkKeyLength(keys,expectedLength){if(keys.length<expectedLength){throw new Error(`Invalid instruction; found ${keys.length} keys, expected at least ${expectedLength}`)}}}function getStakePoolProgramId(rpcEndpoint){if(rpcEndpoint.includes("devnet")){return DEVNET_STAKE_POOL_PROGRAM_ID}else{return STAKE_POOL_PROGRAM_ID}}async function getStakePoolAccount(connection,stakePoolAddress){const account=await connection.getAccountInfo(stakePoolAddress);if(!account){throw new Error("Invalid stake pool account")}return{pubkey:stakePoolAddress,account:{data:StakePoolLayout.decode(account.data),executable:account.executable,lamports:account.lamports,owner:account.owner}}}async function getStakeAccount(connection,stakeAccount){const result=(await connection.getParsedAccountInfo(stakeAccount)).value;if(!result||!("parsed"in result.data)){throw new Error("Invalid stake account")}const program=result.data.program;if(program!=="stake"){throw new Error("Not a stake account")}return create(result.data.parsed,StakeAccount)}async function getStakePoolAccounts(connection,stakePoolProgramAddress){const response=await connection.getProgramAccounts(stakePoolProgramAddress);return response.map(a=>{try{if(a.account.data.readUInt8()===1){const data=StakePoolLayout.decode(a.account.data);return{pubkey:a.pubkey,account:{data:data,executable:a.account.executable,lamports:a.account.lamports,owner:a.account.owner}}}else if(a.account.data.readUInt8()===2){const data=ValidatorListLayout.decode(a.account.data);return{pubkey:a.pubkey,account:{data:data,executable:a.account.executable,lamports:a.account.lamports,owner:a.account.owner}}}else{console.error(`Could not decode. StakePoolAccount Enum is ${a.account.data.readUInt8()}, expected 1 or 2!`);return undefined}}catch(error){console.error("Could not decode account. Error:",error);return undefined}}).filter(a=>a!==undefined)}async function depositStake(connection,stakePoolAddress,authorizedPubkey,validatorVote,depositStake,poolTokenReceiverAccount){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validatorVote,stakePoolAddress);const instructions=[];const signers=[];const poolMint=stakePool.account.data.poolMint;if(!poolTokenReceiverAccount){const associatedAddress=getAssociatedTokenAddressSync(poolMint,authorizedPubkey);instructions.push(createAssociatedTokenAccountIdempotentInstruction(authorizedPubkey,associatedAddress,authorizedPubkey,poolMint));poolTokenReceiverAccount=associatedAddress}instructions.push(...StakeProgram.authorize({stakePubkey:depositStake,authorizedPubkey:authorizedPubkey,newAuthorizedPubkey:stakePool.account.data.stakeDepositAuthority,stakeAuthorizationType:StakeAuthorizationLayout.Staker}).instructions);instructions.push(...StakeProgram.authorize({stakePubkey:depositStake,authorizedPubkey:authorizedPubkey,newAuthorizedPubkey:stakePool.account.data.stakeDepositAuthority,stakeAuthorizationType:StakeAuthorizationLayout.Withdrawer}).instructions);instructions.push(StakePoolInstruction.depositStake({programId:stakePoolProgramId,stakePool:stakePoolAddress,validatorList:stakePool.account.data.validatorList,depositAuthority:stakePool.account.data.stakeDepositAuthority,reserveStake:stakePool.account.data.reserveStake,managerFeeAccount:stakePool.account.data.managerFeeAccount,referralPoolAccount:poolTokenReceiverAccount,destinationPoolAccount:poolTokenReceiverAccount,withdrawAuthority:withdrawAuthority,depositStake:depositStake,validatorStake:validatorStake,poolMint:poolMint}));return{instructions:instructions,signers:signers}}async function depositWsolWithSession(connection,stakePoolAddress,signerOrSession,userPubkey,lamports,destinationTokenAccount,referrerTokenAccount,depositAuthority,payer){const wsolTokenAccount=getAssociatedTokenAddressSync(NATIVE_MINT,userPubkey);const tokenAccountInfo=await connection.getTokenAccountBalance(wsolTokenAccount,"confirmed");const wsolBalance=tokenAccountInfo?parseInt(tokenAccountInfo.value.amount):0;if(wsolBalance<lamports){throw new Error(`Not enough WSOL to deposit into pool. Maximum deposit amount is ${lamportsToSol(wsolBalance)} WSOL.`)}const stakePoolAccount=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const stakePool=stakePoolAccount.account.data;const instructions=[];if(!destinationTokenAccount){const associatedAddress=getAssociatedTokenAddressSync(stakePool.poolMint,userPubkey);instructions.push(createAssociatedTokenAccountIdempotentInstruction(payer!==null&&payer!==void 0?payer:signerOrSession,associatedAddress,userPubkey,stakePool.poolMint));destinationTokenAccount=associatedAddress}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const[programSigner]=PublicKey.findProgramAddressSync([Buffer.from("fogo_session_program_signer")],stakePoolProgramId);const wsolTransientAccount=findWsolTransientProgramAddress(stakePoolProgramId,userPubkey);instructions.push(StakePoolInstruction.depositWsolWithSession({programId:stakePoolProgramId,stakePool:stakePoolAddress,reserveStake:stakePool.reserveStake,fundingAccount:signerOrSession,destinationPoolAccount:destinationTokenAccount,managerFeeAccount:stakePool.managerFeeAccount,referralPoolAccount:referrerTokenAccount!==null&&referrerTokenAccount!==void 0?referrerTokenAccount:destinationTokenAccount,poolMint:stakePool.poolMint,lamports:lamports,withdrawAuthority:withdrawAuthority,depositAuthority:depositAuthority,wsolMint:NATIVE_MINT,wsolTokenAccount:wsolTokenAccount,wsolTransientAccount:wsolTransientAccount,tokenProgramId:stakePool.tokenProgramId,programSigner:programSigner,payer:payer}));return{instructions:instructions,signers:[]}}async function depositSol(connection,stakePoolAddress,from,lamports,destinationTokenAccount,referrerTokenAccount,depositAuthority){const fromBalance=await connection.getBalance(from,"confirmed");if(fromBalance<lamports){throw new Error(`Not enough SOL to deposit into pool. Maximum deposit amount is ${lamportsToSol(fromBalance)} SOL.`)}const stakePoolAccount=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const stakePool=stakePoolAccount.account.data;const userSolTransfer=new Keypair;const signers=[userSolTransfer];const instructions=[];instructions.push(SystemProgram.transfer({fromPubkey:from,toPubkey:userSolTransfer.publicKey,lamports:lamports}));if(!destinationTokenAccount){const associatedAddress=getAssociatedTokenAddressSync(stakePool.poolMint,from);instructions.push(createAssociatedTokenAccountIdempotentInstruction(from,associatedAddress,from,stakePool.poolMint));destinationTokenAccount=associatedAddress}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);instructions.push(StakePoolInstruction.depositSol({programId:stakePoolProgramId,stakePool:stakePoolAddress,reserveStake:stakePool.reserveStake,fundingAccount:userSolTransfer.publicKey,destinationPoolAccount:destinationTokenAccount,managerFeeAccount:stakePool.managerFeeAccount,referralPoolAccount:referrerTokenAccount!==null&&referrerTokenAccount!==void 0?referrerTokenAccount:destinationTokenAccount,poolMint:stakePool.poolMint,lamports:lamports,withdrawAuthority:withdrawAuthority,depositAuthority:depositAuthority}));return{instructions:instructions,signers:signers}}async function withdrawStake(connection,stakePoolAddress,tokenOwner,amount,useReserve=false,voteAccountAddress,stakeReceiver,poolTokenAccount,validatorComparator){var _c,_d,_e,_f;const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const poolAmount=new BN(solToLamports(amount));if(!poolTokenAccount){poolTokenAccount=getAssociatedTokenAddressSync(stakePool.account.data.poolMint,tokenOwner)}const tokenAccount=await getAccount(connection,poolTokenAccount);if(tokenAccount.amount<poolAmount.toNumber()){throw new Error(`Not enough token balance to withdraw ${lamportsToSol(poolAmount)} pool tokens.\n Maximum withdraw amount is ${lamportsToSol(tokenAccount.amount)} pool tokens.`)}const stakeAccountRentExemption=await connection.getMinimumBalanceForRentExemption(StakeProgram.space);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);let stakeReceiverAccount=null;if(stakeReceiver){stakeReceiverAccount=await getStakeAccount(connection,stakeReceiver)}const withdrawAccounts=[];if(useReserve){withdrawAccounts.push({stakeAddress:stakePool.account.data.reserveStake,voteAddress:undefined,poolAmount:poolAmount})}else if(stakeReceiverAccount&&(stakeReceiverAccount===null||stakeReceiverAccount===void 0?void 0:stakeReceiverAccount.type)==="delegated"){const voteAccount=(_d=(_c=stakeReceiverAccount.info)===null||_c===void 0?void 0:_c.stake)===null||_d===void 0?void 0:_d.delegation.voter;if(!voteAccount){throw new Error(`Invalid stake receiver ${stakeReceiver} delegation`)}const validatorListAccount=await connection.getAccountInfo(stakePool.account.data.validatorList);const validatorList=ValidatorListLayout.decode(validatorListAccount===null||validatorListAccount===void 0?void 0:validatorListAccount.data);const isValidVoter=validatorList.validators.find(val=>val.voteAccountAddress.equals(voteAccount));if(voteAccountAddress&&voteAccountAddress!==voteAccount){throw new Error(`Provided withdrawal vote account ${voteAccountAddress} does not match delegation on stake receiver account ${voteAccount},\n remove this flag or provide a different stake account delegated to ${voteAccountAddress}`)}if(isValidVoter){const stakeAccountAddress=await findStakeProgramAddress(stakePoolProgramId,voteAccount,stakePoolAddress);const stakeAccount=await connection.getAccountInfo(stakeAccountAddress);if(!stakeAccount){throw new Error(`Preferred withdraw valdator's stake account is invalid`)}const availableForWithdrawal=calcLamportsWithdrawAmount(stakePool.account.data,new BN(stakeAccount.lamports-MINIMUM_ACTIVE_STAKE-stakeAccountRentExemption));if(availableForWithdrawal.lt(poolAmount)){throw new Error(`Not enough lamports available for withdrawal from ${stakeAccountAddress},\n ${poolAmount} asked, ${availableForWithdrawal} available.`)}withdrawAccounts.push({stakeAddress:stakeAccountAddress,voteAddress:voteAccount,poolAmount:poolAmount})}else{throw new Error(`Provided stake account is delegated to a vote account ${voteAccount} which does not exist in the stake pool`)}}else if(voteAccountAddress){const stakeAccountAddress=await findStakeProgramAddress(stakePoolProgramId,voteAccountAddress,stakePoolAddress);const stakeAccount=await connection.getAccountInfo(stakeAccountAddress);if(!stakeAccount){throw new Error("Invalid Stake Account")}const availableLamports=new BN(stakeAccount.lamports-MINIMUM_ACTIVE_STAKE-stakeAccountRentExemption);if(availableLamports.lt(new BN(0))){throw new Error("Invalid Stake Account")}const availableForWithdrawal=calcLamportsWithdrawAmount(stakePool.account.data,availableLamports);if(availableForWithdrawal.lt(poolAmount)){throw new Error(`Not enough lamports available for withdrawal from ${stakeAccountAddress},\n ${poolAmount} asked, ${availableForWithdrawal} available.`)}withdrawAccounts.push({stakeAddress:stakeAccountAddress,voteAddress:voteAccountAddress,poolAmount:poolAmount})}else{withdrawAccounts.push(...await prepareWithdrawAccounts(connection,stakePool.account.data,stakePoolAddress,poolAmount,validatorComparator,poolTokenAccount.equals(stakePool.account.data.managerFeeAccount)))}const instructions=[];const userTransferAuthority=Keypair.generate();const signers=[userTransferAuthority];instructions.push(createApproveInstruction(poolTokenAccount,userTransferAuthority.publicKey,tokenOwner,poolAmount.toNumber()));let totalRentFreeBalances=0;const maxWithdrawAccounts=5;let i=0;for(const withdrawAccount of withdrawAccounts){if(i>maxWithdrawAccounts){break}const solWithdrawAmount=calcLamportsWithdrawAmount(stakePool.account.data,withdrawAccount.poolAmount);let infoMsg=`Withdrawing ◎${solWithdrawAmount},\n from stake account ${(_e=withdrawAccount.stakeAddress)===null||_e===void 0?void 0:_e.toBase58()}`;if(withdrawAccount.voteAddress){infoMsg=`${infoMsg}, delegated to ${(_f=withdrawAccount.voteAddress)===null||_f===void 0?void 0:_f.toBase58()}`}console.info(infoMsg);let stakeToReceive;if(!stakeReceiver||stakeReceiverAccount&&stakeReceiverAccount.type==="delegated"){const stakeKeypair=newStakeAccount(tokenOwner,instructions,stakeAccountRentExemption);signers.push(stakeKeypair);totalRentFreeBalances+=stakeAccountRentExemption;stakeToReceive=stakeKeypair.publicKey}else{stakeToReceive=stakeReceiver}instructions.push(StakePoolInstruction.withdrawStake({programId:stakePoolProgramId,stakePool:stakePoolAddress,validatorList:stakePool.account.data.validatorList,validatorStake:withdrawAccount.stakeAddress,destinationStake:stakeToReceive,destinationStakeAuthority:tokenOwner,sourceTransferAuthority:userTransferAuthority.publicKey,sourcePoolAccount:poolTokenAccount,managerFeeAccount:stakePool.account.data.managerFeeAccount,poolMint:stakePool.account.data.poolMint,poolTokens:withdrawAccount.poolAmount.toNumber(),withdrawAuthority:withdrawAuthority}));i++}if(stakeReceiver&&stakeReceiverAccount&&stakeReceiverAccount.type==="delegated"){signers.forEach(newStakeKeypair=>{instructions.concat(StakeProgram.merge({stakePubkey:stakeReceiver,sourceStakePubKey:newStakeKeypair.publicKey,authorizedPubkey:tokenOwner}).instructions)})}return{instructions:instructions,signers:signers,stakeReceiver:stakeReceiver,totalRentFreeBalances:totalRentFreeBalances}}async function withdrawSol(connection,stakePoolAddress,tokenOwner,solReceiver,amount,solWithdrawAuthority){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const poolAmount=solToLamports(amount);const poolTokenAccount=getAssociatedTokenAddressSync(stakePool.account.data.poolMint,tokenOwner);const tokenAccount=await getAccount(connection,poolTokenAccount);if(tokenAccount.amount<poolAmount){throw new Error(`Not enough token balance to withdraw ${lamportsToSol(poolAmount)} pool tokens.\n Maximum withdraw amount is ${lamportsToSol(tokenAccount.amount)} pool tokens.`)}const instructions=[];const userTransferAuthority=Keypair.generate();const signers=[userTransferAuthority];instructions.push(createApproveInstruction(poolTokenAccount,userTransferAuthority.publicKey,tokenOwner,poolAmount));const poolWithdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);if(solWithdrawAuthority){const expectedSolWithdrawAuthority=stakePool.account.data.solWithdrawAuthority;if(!expectedSolWithdrawAuthority){throw new Error("SOL withdraw authority specified in arguments but stake pool has none")}if(solWithdrawAuthority.toBase58()!==expectedSolWithdrawAuthority.toBase58()){throw new Error(`Invalid deposit withdraw specified, expected ${expectedSolWithdrawAuthority.toBase58()}, received ${solWithdrawAuthority.toBase58()}`)}}const withdrawTransaction=StakePoolInstruction.withdrawSol({programId:stakePoolProgramId,stakePool:stakePoolAddress,withdrawAuthority:poolWithdrawAuthority,reserveStake:stakePool.account.data.reserveStake,sourcePoolAccount:poolTokenAccount,sourceTransferAuthority:userTransferAuthority.publicKey,destinationSystemAccount:solReceiver,managerFeeAccount:stakePool.account.data.managerFeeAccount,poolMint:stakePool.account.data.poolMint,poolTokens:poolAmount,solWithdrawAuthority:solWithdrawAuthority});instructions.push(withdrawTransaction);return{instructions:instructions,signers:signers}}async function withdrawWsolWithSession(connection,stakePoolAddress,signerOrSession,userPubkey,amount,solWithdrawAuthority){const stakePoolAccount=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const stakePool=stakePoolAccount.account.data;const poolTokens=solToLamports(amount);const poolTokenAccount=getAssociatedTokenAddressSync(stakePool.poolMint,userPubkey);const tokenAccount=await getAccount(connection,poolTokenAccount);if(tokenAccount.amount<poolTokens){throw new Error(`Not enough token balance to withdraw ${amount} pool tokens.\n Maximum withdraw amount is ${lamportsToSol(tokenAccount.amount)} pool tokens.`)}const userWsolAccount=getAssociatedTokenAddressSync(NATIVE_MINT,userPubkey);const instructions=[];const signers=[];instructions.push(createAssociatedTokenAccountIdempotentInstruction(signerOrSession,userWsolAccount,userPubkey,NATIVE_MINT));const[programSigner]=PublicKey.findProgramAddressSync([Buffer.from("fogo_session_program_signer")],stakePoolProgramId);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);instructions.push(StakePoolInstruction.withdrawWsolWithSession({programId:stakePoolProgramId,stakePool:stakePoolAddress,withdrawAuthority:withdrawAuthority,userTransferAuthority:signerOrSession,poolTokensFrom:poolTokenAccount,reserveStake:stakePool.reserveStake,userWsolAccount:userWsolAccount,managerFeeAccount:stakePool.managerFeeAccount,poolMint:stakePool.poolMint,tokenProgramId:stakePool.tokenProgramId,solWithdrawAuthority:solWithdrawAuthority,wsolMint:NATIVE_MINT,programSigner:programSigner,poolTokens:poolTokens}));return{instructions:instructions,signers:signers}}async function addValidatorToPool(connection,stakePoolAddress,validatorVote,seed){const stakePoolAccount=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const stakePool=stakePoolAccount.account.data;const{reserveStake:reserveStake,staker:staker,validatorList:validatorList}=stakePool;const validatorListAccount=await getValidatorListAccount(connection,validatorList);const validatorInfo=validatorListAccount.account.data.validators.find(v=>v.voteAccountAddress.toBase58()===validatorVote.toBase58());if(validatorInfo){throw new Error("Vote account is already in validator list")}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validatorVote,stakePoolAddress,seed);const instructions=[StakePoolInstruction.addValidatorToPool({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:staker,reserveStake:reserveStake,withdrawAuthority:withdrawAuthority,validatorList:validatorList,validatorStake:validatorStake,validatorVote:validatorVote})];return{instructions:instructions}}async function removeValidatorFromPool(connection,stakePoolAddress,validatorVote,seed){const stakePoolAccount=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const stakePool=stakePoolAccount.account.data;const{staker:staker,validatorList:validatorList}=stakePool;const validatorListAccount=await getValidatorListAccount(connection,validatorList);const validatorInfo=validatorListAccount.account.data.validators.find(v=>v.voteAccountAddress.toBase58()===validatorVote.toBase58());if(!validatorInfo){throw new Error("Vote account is not already in validator list")}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validatorVote,stakePoolAddress,seed);const transientStakeSeed=validatorInfo.transientSeedSuffixStart;const transientStake=await findTransientStakeProgramAddress(stakePoolProgramId,validatorInfo.voteAccountAddress,stakePoolAddress,transientStakeSeed);const instructions=[StakePoolInstruction.removeValidatorFromPool({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,validatorStake:validatorStake,transientStake:transientStake})];return{instructions:instructions}}async function increaseValidatorStake(connection,stakePoolAddress,validatorVote,lamports,ephemeralStakeSeed){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const validatorList=await getValidatorListAccount(connection,stakePool.account.data.validatorList);const validatorInfo=validatorList.account.data.validators.find(v=>v.voteAccountAddress.toBase58()===validatorVote.toBase58());if(!validatorInfo){throw new Error("Vote account not found in validator list")}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const transientStakeSeed=ephemeralStakeSeed===undefined?validatorInfo.transientSeedSuffixStart.addn(1):validatorInfo.transientSeedSuffixStart;const transientStake=await findTransientStakeProgramAddress(stakePoolProgramId,validatorInfo.voteAccountAddress,stakePoolAddress,transientStakeSeed);const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validatorInfo.voteAccountAddress,stakePoolAddress);const instructions=[];if(ephemeralStakeSeed!==undefined){const ephemeralStake=await findEphemeralStakeProgramAddress(stakePoolProgramId,stakePoolAddress,new BN(ephemeralStakeSeed));instructions.push(StakePoolInstruction.increaseAdditionalValidatorStake({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:stakePool.account.data.staker,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,transientStakeSeed:transientStakeSeed.toNumber(),withdrawAuthority:withdrawAuthority,transientStake:transientStake,validatorStake:validatorStake,validatorVote:validatorVote,lamports:lamports,ephemeralStake:ephemeralStake,ephemeralStakeSeed:ephemeralStakeSeed}))}else{instructions.push(StakePoolInstruction.increaseValidatorStake({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:stakePool.account.data.staker,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,transientStakeSeed:transientStakeSeed.toNumber(),withdrawAuthority:withdrawAuthority,transientStake:transientStake,validatorStake:validatorStake,validatorVote:validatorVote,lamports:lamports}))}return{instructions:instructions}}async function decreaseValidatorStake(connection,stakePoolAddress,validatorVote,lamports,ephemeralStakeSeed){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const validatorList=await getValidatorListAccount(connection,stakePool.account.data.validatorList);const validatorInfo=validatorList.account.data.validators.find(v=>v.voteAccountAddress.toBase58()===validatorVote.toBase58());if(!validatorInfo){throw new Error("Vote account not found in validator list")}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validatorInfo.voteAccountAddress,stakePoolAddress);const transientStakeSeed=ephemeralStakeSeed===undefined?validatorInfo.transientSeedSuffixStart.addn(1):validatorInfo.transientSeedSuffixStart;const transientStake=await findTransientStakeProgramAddress(stakePoolProgramId,validatorInfo.voteAccountAddress,stakePoolAddress,transientStakeSeed);const instructions=[];if(ephemeralStakeSeed!==undefined){const ephemeralStake=await findEphemeralStakeProgramAddress(stakePoolProgramId,stakePoolAddress,new BN(ephemeralStakeSeed));instructions.push(StakePoolInstruction.decreaseAdditionalValidatorStake({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:stakePool.account.data.staker,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,transientStakeSeed:transientStakeSeed.toNumber(),withdrawAuthority:withdrawAuthority,validatorStake:validatorStake,transientStake:transientStake,lamports:lamports,ephemeralStake:ephemeralStake,ephemeralStakeSeed:ephemeralStakeSeed}))}else{instructions.push(StakePoolInstruction.decreaseValidatorStakeWithReserve({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:stakePool.account.data.staker,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,transientStakeSeed:transientStakeSeed.toNumber(),withdrawAuthority:withdrawAuthority,validatorStake:validatorStake,transientStake:transientStake,lamports:lamports}))}return{instructions:instructions}}async function updateStakePool(connection,stakePool,noMerge=false){const stakePoolAddress=stakePool.pubkey;const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const validatorList=await getValidatorListAccount(connection,stakePool.account.data.validatorList);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const updateListInstructions=[];const instructions=[];let startIndex=0;const validatorChunks=arrayChunk(validatorList.account.data.validators,MAX_VALIDATORS_TO_UPDATE);for(const validatorChunk of validatorChunks){const validatorAndTransientStakePairs=[];for(const validator of validatorChunk){const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress);validatorAndTransientStakePairs.push(validatorStake);const transientStake=await findTransientStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress,validator.transientSeedSuffixStart);validatorAndTransientStakePairs.push(transientStake)}updateListInstructions.push(StakePoolInstruction.updateValidatorListBalance({programId:stakePoolProgramId,stakePool:stakePoolAddress,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,validatorAndTransientStakePairs:validatorAndTransientStakePairs,withdrawAuthority:withdrawAuthority,startIndex:startIndex,noMerge:noMerge}));startIndex+=MAX_VALIDATORS_TO_UPDATE}instructions.push(StakePoolInstruction.updateStakePoolBalance({programId:stakePoolProgramId,stakePool:stakePoolAddress,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,managerFeeAccount:stakePool.account.data.managerFeeAccount,poolMint:stakePool.account.data.poolMint,withdrawAuthority:withdrawAuthority}));instructions.push(StakePoolInstruction.cleanupRemovedValidatorEntries({programId:stakePoolProgramId,stakePool:stakePoolAddress,validatorList:stakePool.account.data.validatorList}));return{updateListInstructions:updateListInstructions,finalInstructions:instructions}}async function stakePoolInfo(connection,stakePoolAddress){var _c,_d;const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const reserveAccountStakeAddress=stakePool.account.data.reserveStake;const totalLamports=stakePool.account.data.totalLamports;const lastUpdateEpoch=stakePool.account.data.lastUpdateEpoch;const validatorList=await getValidatorListAccount(connection,stakePool.account.data.validatorList);const maxNumberOfValidators=validatorList.account.data.maxValidators;const currentNumberOfValidators=validatorList.account.data.validators.length;const epochInfo=await connection.getEpochInfo();const reserveStake=await connection.getAccountInfo(reserveAccountStakeAddress);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const minimumReserveStakeBalance=await connection.getMinimumBalanceForRentExemption(StakeProgram.space);const stakeAccounts=await Promise.all(validatorList.account.data.validators.map(async validator=>{const stakeAccountAddress=await findStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress);const transientStakeAccountAddress=await findTransientStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress,validator.transientSeedSuffixStart);const updateRequired=!validator.lastUpdateEpoch.eqn(epochInfo.epoch);return{voteAccountAddress:validator.voteAccountAddress.toBase58(),stakeAccountAddress:stakeAccountAddress.toBase58(),validatorActiveStakeLamports:validator.activeStakeLamports.toString(),validatorLastUpdateEpoch:validator.lastUpdateEpoch.toString(),validatorLamports:validator.activeStakeLamports.add(validator.transientStakeLamports).toString(),validatorTransientStakeAccountAddress:transientStakeAccountAddress.toBase58(),validatorTransientStakeLamports:validator.transientStakeLamports.toString(),updateRequired:updateRequired}}));const totalPoolTokens=lamportsToSol(stakePool.account.data.poolTokenSupply);const updateRequired=!lastUpdateEpoch.eqn(epochInfo.epoch);return{address:stakePoolAddress.toBase58(),poolWithdrawAuthority:withdrawAuthority.toBase58(),manager:stakePool.account.data.manager.toBase58(),staker:stakePool.account.data.staker.toBase58(),stakeDepositAuthority:stakePool.account.data.stakeDepositAuthority.toBase58(),stakeWithdrawBumpSeed:stakePool.account.data.stakeWithdrawBumpSeed,maxValidators:maxNumberOfValidators,validatorList:validatorList.account.data.validators.map(validator=>({activeStakeLamports:validator.activeStakeLamports.toString(),transientStakeLamports:validator.transientStakeLamports.toString(),lastUpdateEpoch:validator.lastUpdateEpoch.toString(),transientSeedSuffixStart:validator.transientSeedSuffixStart.toString(),transientSeedSuffixEnd:validator.transientSeedSuffixEnd.toString(),status:validator.status.toString(),voteAccountAddress:validator.voteAccountAddress.toString()})),validatorListStorageAccount:stakePool.account.data.validatorList.toBase58(),reserveStake:stakePool.account.data.reserveStake.toBase58(),poolMint:stakePool.account.data.poolMint.toBase58(),managerFeeAccount:stakePool.account.data.managerFeeAccount.toBase58(),tokenProgramId:stakePool.account.data.tokenProgramId.toBase58(),totalLamports:stakePool.account.data.totalLamports.toString(),poolTokenSupply:stakePool.account.data.poolTokenSupply.toString(),lastUpdateEpoch:stakePool.account.data.lastUpdateEpoch.toString(),lockup:stakePool.account.data.lockup,epochFee:stakePool.account.data.epochFee,nextEpochFee:stakePool.account.data.nextEpochFee,preferredDepositValidatorVoteAddress:stakePool.account.data.preferredDepositValidatorVoteAddress,preferredWithdrawValidatorVoteAddress:stakePool.account.data.preferredWithdrawValidatorVoteAddress,stakeDepositFee:stakePool.account.data.stakeDepositFee,stakeWithdrawalFee:stakePool.account.data.stakeWithdrawalFee,nextStakeWithdrawalFee:stakePool.account.data.nextStakeWithdrawalFee,stakeReferralFee:stakePool.account.data.stakeReferralFee,solDepositAuthority:(_c=stakePool.account.data.solDepositAuthority)===null||_c===void 0?void 0:_c.toBase58(),solDepositFee:stakePool.account.data.solDepositFee,solReferralFee:stakePool.account.data.solReferralFee,solWithdrawAuthority:(_d=stakePool.account.data.solWithdrawAuthority)===null||_d===void 0?void 0:_d.toBase58(),solWithdrawalFee:stakePool.account.data.solWithdrawalFee,nextSolWithdrawalFee:stakePool.account.data.nextSolWithdrawalFee,lastEpochPoolTokenSupply:stakePool.account.data.lastEpochPoolTokenSupply.toString(),lastEpochTotalLamports:stakePool.account.data.lastEpochTotalLamports.toString(),details:{reserveStakeLamports:reserveStake===null||reserveStake===void 0?void 0:reserveStake.lamports,reserveAccountStakeAddress:reserveAccountStakeAddress.toBase58(),minimumReserveStakeBalance:minimumReserveStakeBalance,stakeAccounts:stakeAccounts,totalLamports:totalLamports,totalPoolTokens:totalPoolTokens,currentNumberOfValidators:currentNumberOfValidators,maxNumberOfValidators:maxNumberOfValidators,updateRequired:updateRequired}}}async function createPoolTokenMetadata(connection,stakePoolAddress,payer,name,symbol,uri){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const tokenMetadata=findMetadataAddress(stakePool.account.data.poolMint);const manager=stakePool.account.data.manager;const instructions=[];instructions.push(StakePoolInstruction.createTokenMetadata({programId:stakePoolProgramId,stakePool:stakePoolAddress,poolMint:stakePool.account.data.poolMint,payer:payer,manager:manager,tokenMetadata:tokenMetadata,withdrawAuthority:withdrawAuthority,name:name,symbol:symbol,uri:uri}));return{instructions:instructions}}async function updatePoolTokenMetadata(connection,stakePoolAddress,name,symbol,uri){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const tokenMetadata=findMetadataAddress(stakePool.account.data.poolMint);const instructions=[];instructions.push(StakePoolInstruction.updateTokenMetadata({programId:stakePoolProgramId,stakePool:stakePoolAddress,manager:stakePool.account.data.manager,tokenMetadata:tokenMetadata,withdrawAuthority:withdrawAuthority,name:name,symbol:symbol,uri:uri}));return{instructions:instructions}}exports.DEVNET_STAKE_POOL_PROGRAM_ID=DEVNET_STAKE_POOL_PROGRAM_ID;exports.STAKE_POOL_INSTRUCTION_LAYOUTS=STAKE_POOL_INSTRUCTION_LAYOUTS;exports.STAKE_POOL_PROGRAM_ID=STAKE_POOL_PROGRAM_ID;exports.StakePoolInstruction=StakePoolInstruction;exports.StakePoolLayout=StakePoolLayout;exports.ValidatorListLayout=ValidatorListLayout;exports.ValidatorStakeInfoLayout=ValidatorStakeInfoLayout;exports.addValidatorToPool=addValidatorToPool;exports.createPoolTokenMetadata=createPoolTokenMetadata;exports.decreaseValidatorStake=decreaseValidatorStake;exports.depositSol=depositSol;exports.depositStake=depositStake;exports.depositWsolWithSession=depositWsolWithSession;exports.getStakeAccount=getStakeAccount;exports.getStakePoolAccount=getStakePoolAccount;exports.getStakePoolAccounts=getStakePoolAccounts;exports.getStakePoolProgramId=getStakePoolProgramId;exports.increaseValidatorStake=increaseValidatorStake;exports.removeValidatorFromPool=removeValidatorFromPool;exports.stakePoolInfo=stakePoolInfo;exports.tokenMetadataLayout=tokenMetadataLayout;exports.updatePoolTokenMetadata=updatePoolTokenMetadata;exports.updateStakePool=updateStakePool;exports.withdrawSol=withdrawSol;exports.withdrawStake=withdrawStake;exports.withdrawWsolWithSession=withdrawWsolWithSession;return exports}({},node_buffer);
18
+ /*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */const secp256k1_CURVE={p:BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),n:BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),h:BigInt(1),a:BigInt(0),b:BigInt(7),Gx:BigInt("0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),Gy:BigInt("0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8")};const secp256k1_ENDO={beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),basises:[[BigInt("0x3086d221a7d46bcde86c90e49284eb15"),-BigInt("0xe4437ed6010e88286f547fa90abfe4c3")],[BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),BigInt("0x3086d221a7d46bcde86c90e49284eb15")]]};const _2n=BigInt(2);function sqrtMod(y){const P=secp256k1_CURVE.p;const _3n=BigInt(3),_6n=BigInt(6),_11n=BigInt(11),_22n=BigInt(22);const _23n=BigInt(23),_44n=BigInt(44),_88n=BigInt(88);const b2=y*y*y%P;const b3=b2*b2*y%P;const b6=pow2(b3,_3n,P)*b3%P;const b9=pow2(b6,_3n,P)*b3%P;const b11=pow2(b9,_2n,P)*b2%P;const b22=pow2(b11,_11n,P)*b11%P;const b44=pow2(b22,_22n,P)*b22%P;const b88=pow2(b44,_44n,P)*b44%P;const b176=pow2(b88,_88n,P)*b88%P;const b220=pow2(b176,_44n,P)*b44%P;const b223=pow2(b220,_3n,P)*b3%P;const t1=pow2(b223,_23n,P)*b22%P;const t2=pow2(t1,_6n,P)*b2%P;const root=pow2(t2,_2n,P);if(!Fpk1.eql(Fpk1.sqr(root),y))throw new Error("Cannot find square root");return root}const Fpk1=Field(secp256k1_CURVE.p,{sqrt:sqrtMod});const secp256k1=createCurve({...secp256k1_CURVE,Fp:Fpk1,lowS:true,endo:secp256k1_ENDO},sha256$1);ed25519.utils.randomPrivateKey;const generateKeypair=()=>{const privateScalar=ed25519.utils.randomPrivateKey();const publicKey=getPublicKey(privateScalar);const secretKey=new Uint8Array(64);secretKey.set(privateScalar);secretKey.set(publicKey,32);return{publicKey:publicKey,secretKey:secretKey}};const getPublicKey=ed25519.getPublicKey;function isOnCurve(publicKey){try{ed25519.ExtendedPoint.fromHex(publicKey);return true}catch{return false}}const sign=(message,secretKey)=>ed25519.sign(message,secretKey.slice(0,32));const verify=ed25519.verify;const toBuffer=arr=>{if(bufferExports.Buffer.isBuffer(arr)){return arr}else if(arr instanceof Uint8Array){return bufferExports.Buffer.from(arr.buffer,arr.byteOffset,arr.byteLength)}else{return bufferExports.Buffer.from(arr)}};class Struct{constructor(properties){Object.assign(this,properties)}encode(){return bufferExports.Buffer.from(libExports.serialize(SOLANA_SCHEMA,this))}static decode(data){return libExports.deserialize(SOLANA_SCHEMA,this,data)}static decodeUnchecked(data){return libExports.deserializeUnchecked(SOLANA_SCHEMA,this,data)}}const SOLANA_SCHEMA=new Map;var _PublicKey;const MAX_SEED_LENGTH=32;const PUBLIC_KEY_LENGTH=32;function isPublicKeyData(value){return value._bn!==undefined}let uniquePublicKeyCounter=1;class PublicKey extends Struct{constructor(value){super({});this._bn=void 0;if(isPublicKeyData(value)){this._bn=value._bn}else{if(typeof value==="string"){const decoded=bs58.decode(value);if(decoded.length!=PUBLIC_KEY_LENGTH){throw new Error(`Invalid public key input`)}this._bn=new BN(decoded)}else{this._bn=new BN(value)}if(this._bn.byteLength()>PUBLIC_KEY_LENGTH){throw new Error(`Invalid public key input`)}}}static unique(){const key=new PublicKey(uniquePublicKeyCounter);uniquePublicKeyCounter+=1;return new PublicKey(key.toBuffer())}equals(publicKey){return this._bn.eq(publicKey._bn)}toBase58(){return bs58.encode(this.toBytes())}toJSON(){return this.toBase58()}toBytes(){const buf=this.toBuffer();return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}toBuffer(){const b=this._bn.toArrayLike(bufferExports.Buffer);if(b.length===PUBLIC_KEY_LENGTH){return b}const zeroPad=bufferExports.Buffer.alloc(32);b.copy(zeroPad,32-b.length);return zeroPad}get[Symbol.toStringTag](){return`PublicKey(${this.toString()})`}toString(){return this.toBase58()}static async createWithSeed(fromPublicKey,seed,programId){const buffer=bufferExports.Buffer.concat([fromPublicKey.toBuffer(),bufferExports.Buffer.from(seed),programId.toBuffer()]);const publicKeyBytes=sha256(buffer);return new PublicKey(publicKeyBytes)}static createProgramAddressSync(seeds,programId){let buffer=bufferExports.Buffer.alloc(0);seeds.forEach(function(seed){if(seed.length>MAX_SEED_LENGTH){throw new TypeError(`Max seed length exceeded`)}buffer=bufferExports.Buffer.concat([buffer,toBuffer(seed)])});buffer=bufferExports.Buffer.concat([buffer,programId.toBuffer(),bufferExports.Buffer.from("ProgramDerivedAddress")]);const publicKeyBytes=sha256(buffer);if(isOnCurve(publicKeyBytes)){throw new Error(`Invalid seeds, address must fall off the curve`)}return new PublicKey(publicKeyBytes)}static async createProgramAddress(seeds,programId){return this.createProgramAddressSync(seeds,programId)}static findProgramAddressSync(seeds,programId){let nonce=255;let address;while(nonce!=0){try{const seedsWithNonce=seeds.concat(bufferExports.Buffer.from([nonce]));address=this.createProgramAddressSync(seedsWithNonce,programId)}catch(err){if(err instanceof TypeError){throw err}nonce--;continue}return[address,nonce]}throw new Error(`Unable to find a viable program address nonce`)}static async findProgramAddress(seeds,programId){return this.findProgramAddressSync(seeds,programId)}static isOnCurve(pubkeyData){const pubkey=new PublicKey(pubkeyData);return isOnCurve(pubkey.toBytes())}}_PublicKey=PublicKey;PublicKey.default=new _PublicKey("11111111111111111111111111111111");SOLANA_SCHEMA.set(PublicKey,{kind:"struct",fields:[["_bn","u256"]]});new PublicKey("BPFLoader1111111111111111111111111111111111");const PACKET_DATA_SIZE=1280-40-8;const VERSION_PREFIX_MASK=127;const SIGNATURE_LENGTH_IN_BYTES=64;class MessageAccountKeys{constructor(staticAccountKeys,accountKeysFromLookups){this.staticAccountKeys=void 0;this.accountKeysFromLookups=void 0;this.staticAccountKeys=staticAccountKeys;this.accountKeysFromLookups=accountKeysFromLookups}keySegments(){const keySegments=[this.staticAccountKeys];if(this.accountKeysFromLookups){keySegments.push(this.accountKeysFromLookups.writable);keySegments.push(this.accountKeysFromLookups.readonly)}return keySegments}get(index){for(const keySegment of this.keySegments()){if(index<keySegment.length){return keySegment[index]}else{index-=keySegment.length}}return}get length(){return this.keySegments().flat().length}compileInstructions(instructions){const U8_MAX=255;if(this.length>U8_MAX+1){throw new Error("Account index overflow encountered during compilation")}const keyIndexMap=new Map;this.keySegments().flat().forEach((key,index)=>{keyIndexMap.set(key.toBase58(),index)});const findKeyIndex=key=>{const keyIndex=keyIndexMap.get(key.toBase58());if(keyIndex===undefined)throw new Error("Encountered an unknown instruction account key during compilation");return keyIndex};return instructions.map(instruction=>({programIdIndex:findKeyIndex(instruction.programId),accountKeyIndexes:instruction.keys.map(meta=>findKeyIndex(meta.pubkey)),data:instruction.data}))}}const publicKey$2=(property="publicKey")=>LayoutExports$1.blob(32,property);const rustString=(property="string")=>{const rsl=LayoutExports$1.struct([LayoutExports$1.u32("length"),LayoutExports$1.u32("lengthPadding"),LayoutExports$1.blob(LayoutExports$1.offset(LayoutExports$1.u32(),-8),"chars")],property);const _decode=rsl.decode.bind(rsl);const _encode=rsl.encode.bind(rsl);const rslShim=rsl;rslShim.decode=(b,offset)=>{const data=_decode(b,offset);return data["chars"].toString()};rslShim.encode=(str,b,offset)=>{const data={chars:bufferExports.Buffer.from(str,"utf8")};return _encode(data,b,offset)};rslShim.alloc=str=>LayoutExports$1.u32().span+LayoutExports$1.u32().span+bufferExports.Buffer.from(str,"utf8").length;return rslShim};const authorized=(property="authorized")=>LayoutExports$1.struct([publicKey$2("staker"),publicKey$2("withdrawer")],property);const lockup=(property="lockup")=>LayoutExports$1.struct([LayoutExports$1.ns64("unixTimestamp"),LayoutExports$1.ns64("epoch"),publicKey$2("custodian")],property);const voteInit=(property="voteInit")=>LayoutExports$1.struct([publicKey$2("nodePubkey"),publicKey$2("authorizedVoter"),publicKey$2("authorizedWithdrawer"),LayoutExports$1.u8("commission")],property);const voteAuthorizeWithSeedArgs=(property="voteAuthorizeWithSeedArgs")=>LayoutExports$1.struct([LayoutExports$1.u32("voteAuthorizationType"),publicKey$2("currentAuthorityDerivedKeyOwnerPubkey"),rustString("currentAuthorityDerivedKeySeed"),publicKey$2("newAuthorized")],property);function getAlloc(type,fields){const getItemAlloc=item=>{if(item.span>=0){return item.span}else if(typeof item.alloc==="function"){return item.alloc(fields[item.property])}else if("count"in item&&"elementLayout"in item){const field=fields[item.property];if(Array.isArray(field)){return field.length*getItemAlloc(item.elementLayout)}}else if("fields"in item){return getAlloc({layout:item},fields[item.property])}return 0};let alloc=0;type.layout.fields.forEach(item=>{alloc+=getItemAlloc(item)});return alloc}function decodeLength(bytes){let len=0;let size=0;for(;;){let elem=bytes.shift();len|=(elem&127)<<size*7;size+=1;if((elem&128)===0){break}}return len}function encodeLength(bytes,len){let rem_len=len;for(;;){let elem=rem_len&127;rem_len>>=7;if(rem_len==0){bytes.push(elem);break}else{elem|=128;bytes.push(elem)}}}function assert(condition,message){if(!condition){throw new Error(message||"Assertion failed")}}class CompiledKeys{constructor(payer,keyMetaMap){this.payer=void 0;this.keyMetaMap=void 0;this.payer=payer;this.keyMetaMap=keyMetaMap}static compile(instructions,payer){const keyMetaMap=new Map;const getOrInsertDefault=pubkey=>{const address=pubkey.toBase58();let keyMeta=keyMetaMap.get(address);if(keyMeta===undefined){keyMeta={isSigner:false,isWritable:false,isInvoked:false};keyMetaMap.set(address,keyMeta)}return keyMeta};const payerKeyMeta=getOrInsertDefault(payer);payerKeyMeta.isSigner=true;payerKeyMeta.isWritable=true;for(const ix of instructions){getOrInsertDefault(ix.programId).isInvoked=true;for(const accountMeta of ix.keys){const keyMeta=getOrInsertDefault(accountMeta.pubkey);keyMeta.isSigner||=accountMeta.isSigner;keyMeta.isWritable||=accountMeta.isWritable}}return new CompiledKeys(payer,keyMetaMap)}getMessageComponents(){const mapEntries=[...this.keyMetaMap.entries()];assert(mapEntries.length<=256,"Max static account keys length exceeded");const writableSigners=mapEntries.filter(([,meta])=>meta.isSigner&&meta.isWritable);const readonlySigners=mapEntries.filter(([,meta])=>meta.isSigner&&!meta.isWritable);const writableNonSigners=mapEntries.filter(([,meta])=>!meta.isSigner&&meta.isWritable);const readonlyNonSigners=mapEntries.filter(([,meta])=>!meta.isSigner&&!meta.isWritable);const header={numRequiredSignatures:writableSigners.length+readonlySigners.length,numReadonlySignedAccounts:readonlySigners.length,numReadonlyUnsignedAccounts:readonlyNonSigners.length};{assert(writableSigners.length>0,"Expected at least one writable signer key");const[payerAddress]=writableSigners[0];assert(payerAddress===this.payer.toBase58(),"Expected first writable signer key to be the fee payer")}const staticAccountKeys=[...writableSigners.map(([address])=>new PublicKey(address)),...readonlySigners.map(([address])=>new PublicKey(address)),...writableNonSigners.map(([address])=>new PublicKey(address)),...readonlyNonSigners.map(([address])=>new PublicKey(address))];return[header,staticAccountKeys]}extractTableLookup(lookupTable){const[writableIndexes,drainedWritableKeys]=this.drainKeysFoundInLookupTable(lookupTable.state.addresses,keyMeta=>!keyMeta.isSigner&&!keyMeta.isInvoked&&keyMeta.isWritable);const[readonlyIndexes,drainedReadonlyKeys]=this.drainKeysFoundInLookupTable(lookupTable.state.addresses,keyMeta=>!keyMeta.isSigner&&!keyMeta.isInvoked&&!keyMeta.isWritable);if(writableIndexes.length===0&&readonlyIndexes.length===0){return}return[{accountKey:lookupTable.key,writableIndexes:writableIndexes,readonlyIndexes:readonlyIndexes},{writable:drainedWritableKeys,readonly:drainedReadonlyKeys}]}drainKeysFoundInLookupTable(lookupTableEntries,keyMetaFilter){const lookupTableIndexes=new Array;const drainedKeys=new Array;for(const[address,keyMeta]of this.keyMetaMap.entries()){if(keyMetaFilter(keyMeta)){const key=new PublicKey(address);const lookupTableIndex=lookupTableEntries.findIndex(entry=>entry.equals(key));if(lookupTableIndex>=0){assert(lookupTableIndex<256,"Max lookup table index exceeded");lookupTableIndexes.push(lookupTableIndex);drainedKeys.push(key);this.keyMetaMap.delete(address)}}}return[lookupTableIndexes,drainedKeys]}}const END_OF_BUFFER_ERROR_MESSAGE="Reached end of buffer unexpectedly";function guardedShift(byteArray){if(byteArray.length===0){throw new Error(END_OF_BUFFER_ERROR_MESSAGE)}return byteArray.shift()}function guardedSplice(byteArray,...args){const[start]=args;if(args.length===2?start+(args[1]??0)>byteArray.length:start>=byteArray.length){throw new Error(END_OF_BUFFER_ERROR_MESSAGE)}return byteArray.splice(...args)}class Message{constructor(args){this.header=void 0;this.accountKeys=void 0;this.recentBlockhash=void 0;this.instructions=void 0;this.indexToProgramIds=new Map;this.header=args.header;this.accountKeys=args.accountKeys.map(account=>new PublicKey(account));this.recentBlockhash=args.recentBlockhash;this.instructions=args.instructions;this.instructions.forEach(ix=>this.indexToProgramIds.set(ix.programIdIndex,this.accountKeys[ix.programIdIndex]))}get version(){return"legacy"}get staticAccountKeys(){return this.accountKeys}get compiledInstructions(){return this.instructions.map(ix=>({programIdIndex:ix.programIdIndex,accountKeyIndexes:ix.accounts,data:bs58.decode(ix.data)}))}get addressTableLookups(){return[]}getAccountKeys(){return new MessageAccountKeys(this.staticAccountKeys)}static compile(args){const compiledKeys=CompiledKeys.compile(args.instructions,args.payerKey);const[header,staticAccountKeys]=compiledKeys.getMessageComponents();const accountKeys=new MessageAccountKeys(staticAccountKeys);const instructions=accountKeys.compileInstructions(args.instructions).map(ix=>({programIdIndex:ix.programIdIndex,accounts:ix.accountKeyIndexes,data:bs58.encode(ix.data)}));return new Message({header:header,accountKeys:staticAccountKeys,recentBlockhash:args.recentBlockhash,instructions:instructions})}isAccountSigner(index){return index<this.header.numRequiredSignatures}isAccountWritable(index){const numSignedAccounts=this.header.numRequiredSignatures;if(index>=this.header.numRequiredSignatures){const unsignedAccountIndex=index-numSignedAccounts;const numUnsignedAccounts=this.accountKeys.length-numSignedAccounts;const numWritableUnsignedAccounts=numUnsignedAccounts-this.header.numReadonlyUnsignedAccounts;return unsignedAccountIndex<numWritableUnsignedAccounts}else{const numWritableSignedAccounts=numSignedAccounts-this.header.numReadonlySignedAccounts;return index<numWritableSignedAccounts}}isProgramId(index){return this.indexToProgramIds.has(index)}programIds(){return[...this.indexToProgramIds.values()]}nonProgramIds(){return this.accountKeys.filter((_,index)=>!this.isProgramId(index))}serialize(){const numKeys=this.accountKeys.length;let keyCount=[];encodeLength(keyCount,numKeys);const instructions=this.instructions.map(instruction=>{const{accounts:accounts,programIdIndex:programIdIndex}=instruction;const data=Array.from(bs58.decode(instruction.data));let keyIndicesCount=[];encodeLength(keyIndicesCount,accounts.length);let dataCount=[];encodeLength(dataCount,data.length);return{programIdIndex:programIdIndex,keyIndicesCount:bufferExports.Buffer.from(keyIndicesCount),keyIndices:accounts,dataLength:bufferExports.Buffer.from(dataCount),data:data}});let instructionCount=[];encodeLength(instructionCount,instructions.length);let instructionBuffer=bufferExports.Buffer.alloc(PACKET_DATA_SIZE);bufferExports.Buffer.from(instructionCount).copy(instructionBuffer);let instructionBufferLength=instructionCount.length;instructions.forEach(instruction=>{const instructionLayout=LayoutExports$1.struct([LayoutExports$1.u8("programIdIndex"),LayoutExports$1.blob(instruction.keyIndicesCount.length,"keyIndicesCount"),LayoutExports$1.seq(LayoutExports$1.u8("keyIndex"),instruction.keyIndices.length,"keyIndices"),LayoutExports$1.blob(instruction.dataLength.length,"dataLength"),LayoutExports$1.seq(LayoutExports$1.u8("userdatum"),instruction.data.length,"data")]);const length=instructionLayout.encode(instruction,instructionBuffer,instructionBufferLength);instructionBufferLength+=length});instructionBuffer=instructionBuffer.slice(0,instructionBufferLength);const signDataLayout=LayoutExports$1.struct([LayoutExports$1.blob(1,"numRequiredSignatures"),LayoutExports$1.blob(1,"numReadonlySignedAccounts"),LayoutExports$1.blob(1,"numReadonlyUnsignedAccounts"),LayoutExports$1.blob(keyCount.length,"keyCount"),LayoutExports$1.seq(publicKey$2("key"),numKeys,"keys"),publicKey$2("recentBlockhash")]);const transaction={numRequiredSignatures:bufferExports.Buffer.from([this.header.numRequiredSignatures]),numReadonlySignedAccounts:bufferExports.Buffer.from([this.header.numReadonlySignedAccounts]),numReadonlyUnsignedAccounts:bufferExports.Buffer.from([this.header.numReadonlyUnsignedAccounts]),keyCount:bufferExports.Buffer.from(keyCount),keys:this.accountKeys.map(key=>toBuffer(key.toBytes())),recentBlockhash:bs58.decode(this.recentBlockhash)};let signData=bufferExports.Buffer.alloc(2048);const length=signDataLayout.encode(transaction,signData);instructionBuffer.copy(signData,length);return signData.slice(0,length+instructionBuffer.length)}static from(buffer){let byteArray=[...buffer];const numRequiredSignatures=guardedShift(byteArray);if(numRequiredSignatures!==(numRequiredSignatures&VERSION_PREFIX_MASK)){throw new Error("Versioned messages must be deserialized with VersionedMessage.deserialize()")}const numReadonlySignedAccounts=guardedShift(byteArray);const numReadonlyUnsignedAccounts=guardedShift(byteArray);const accountCount=decodeLength(byteArray);let accountKeys=[];for(let i=0;i<accountCount;i++){const account=guardedSplice(byteArray,0,PUBLIC_KEY_LENGTH);accountKeys.push(new PublicKey(bufferExports.Buffer.from(account)))}const recentBlockhash=guardedSplice(byteArray,0,PUBLIC_KEY_LENGTH);const instructionCount=decodeLength(byteArray);let instructions=[];for(let i=0;i<instructionCount;i++){const programIdIndex=guardedShift(byteArray);const accountCount=decodeLength(byteArray);const accounts=guardedSplice(byteArray,0,accountCount);const dataLength=decodeLength(byteArray);const dataSlice=guardedSplice(byteArray,0,dataLength);const data=bs58.encode(bufferExports.Buffer.from(dataSlice));instructions.push({programIdIndex:programIdIndex,accounts:accounts,data:data})}const messageArgs={header:{numRequiredSignatures:numRequiredSignatures,numReadonlySignedAccounts:numReadonlySignedAccounts,numReadonlyUnsignedAccounts:numReadonlyUnsignedAccounts},recentBlockhash:bs58.encode(bufferExports.Buffer.from(recentBlockhash)),accountKeys:accountKeys,instructions:instructions};return new Message(messageArgs)}}const DEFAULT_SIGNATURE=bufferExports.Buffer.alloc(SIGNATURE_LENGTH_IN_BYTES).fill(0);class TransactionInstruction{constructor(opts){this.keys=void 0;this.programId=void 0;this.data=bufferExports.Buffer.alloc(0);this.programId=opts.programId;this.keys=opts.keys;if(opts.data){this.data=opts.data}}toJSON(){return{keys:this.keys.map(({pubkey:pubkey,isSigner:isSigner,isWritable:isWritable})=>({pubkey:pubkey.toJSON(),isSigner:isSigner,isWritable:isWritable})),programId:this.programId.toJSON(),data:[...this.data]}}}class Transaction{get signature(){if(this.signatures.length>0){return this.signatures[0].signature}return null}constructor(opts){this.signatures=[];this.feePayer=void 0;this.instructions=[];this.recentBlockhash=void 0;this.lastValidBlockHeight=void 0;this.nonceInfo=void 0;this.minNonceContextSlot=void 0;this._message=void 0;this._json=void 0;if(!opts){return}if(opts.feePayer){this.feePayer=opts.feePayer}if(opts.signatures){this.signatures=opts.signatures}if(Object.prototype.hasOwnProperty.call(opts,"nonceInfo")){const{minContextSlot:minContextSlot,nonceInfo:nonceInfo}=opts;this.minNonceContextSlot=minContextSlot;this.nonceInfo=nonceInfo}else if(Object.prototype.hasOwnProperty.call(opts,"lastValidBlockHeight")){const{blockhash:blockhash,lastValidBlockHeight:lastValidBlockHeight}=opts;this.recentBlockhash=blockhash;this.lastValidBlockHeight=lastValidBlockHeight}else{const{recentBlockhash:recentBlockhash,nonceInfo:nonceInfo}=opts;if(nonceInfo){this.nonceInfo=nonceInfo}this.recentBlockhash=recentBlockhash}}toJSON(){return{recentBlockhash:this.recentBlockhash||null,feePayer:this.feePayer?this.feePayer.toJSON():null,nonceInfo:this.nonceInfo?{nonce:this.nonceInfo.nonce,nonceInstruction:this.nonceInfo.nonceInstruction.toJSON()}:null,instructions:this.instructions.map(instruction=>instruction.toJSON()),signers:this.signatures.map(({publicKey:publicKey})=>publicKey.toJSON())}}add(...items){if(items.length===0){throw new Error("No instructions")}items.forEach(item=>{if("instructions"in item){this.instructions=this.instructions.concat(item.instructions)}else if("data"in item&&"programId"in item&&"keys"in item){this.instructions.push(item)}else{this.instructions.push(new TransactionInstruction(item))}});return this}compileMessage(){if(this._message&&JSON.stringify(this.toJSON())===JSON.stringify(this._json)){return this._message}let recentBlockhash;let instructions;if(this.nonceInfo){recentBlockhash=this.nonceInfo.nonce;if(this.instructions[0]!=this.nonceInfo.nonceInstruction){instructions=[this.nonceInfo.nonceInstruction,...this.instructions]}else{instructions=this.instructions}}else{recentBlockhash=this.recentBlockhash;instructions=this.instructions}if(!recentBlockhash){throw new Error("Transaction recentBlockhash required")}if(instructions.length<1){console.warn("No instructions provided")}let feePayer;if(this.feePayer){feePayer=this.feePayer}else if(this.signatures.length>0&&this.signatures[0].publicKey){feePayer=this.signatures[0].publicKey}else{throw new Error("Transaction fee payer required")}for(let i=0;i<instructions.length;i++){if(instructions[i].programId===undefined){throw new Error(`Transaction instruction index ${i} has undefined program id`)}}const programIds=[];const accountMetas=[];instructions.forEach(instruction=>{instruction.keys.forEach(accountMeta=>{accountMetas.push({...accountMeta})});const programId=instruction.programId.toString();if(!programIds.includes(programId)){programIds.push(programId)}});programIds.forEach(programId=>{accountMetas.push({pubkey:new PublicKey(programId),isSigner:false,isWritable:false})});const uniqueMetas=[];accountMetas.forEach(accountMeta=>{const pubkeyString=accountMeta.pubkey.toString();const uniqueIndex=uniqueMetas.findIndex(x=>x.pubkey.toString()===pubkeyString);if(uniqueIndex>-1){uniqueMetas[uniqueIndex].isWritable=uniqueMetas[uniqueIndex].isWritable||accountMeta.isWritable;uniqueMetas[uniqueIndex].isSigner=uniqueMetas[uniqueIndex].isSigner||accountMeta.isSigner}else{uniqueMetas.push(accountMeta)}});uniqueMetas.sort(function(x,y){if(x.isSigner!==y.isSigner){return x.isSigner?-1:1}if(x.isWritable!==y.isWritable){return x.isWritable?-1:1}const options={localeMatcher:"best fit",usage:"sort",sensitivity:"variant",ignorePunctuation:false,numeric:false,caseFirst:"lower"};return x.pubkey.toBase58().localeCompare(y.pubkey.toBase58(),"en",options)});const feePayerIndex=uniqueMetas.findIndex(x=>x.pubkey.equals(feePayer));if(feePayerIndex>-1){const[payerMeta]=uniqueMetas.splice(feePayerIndex,1);payerMeta.isSigner=true;payerMeta.isWritable=true;uniqueMetas.unshift(payerMeta)}else{uniqueMetas.unshift({pubkey:feePayer,isSigner:true,isWritable:true})}for(const signature of this.signatures){const uniqueIndex=uniqueMetas.findIndex(x=>x.pubkey.equals(signature.publicKey));if(uniqueIndex>-1){if(!uniqueMetas[uniqueIndex].isSigner){uniqueMetas[uniqueIndex].isSigner=true;console.warn("Transaction references a signature that is unnecessary, "+"only the fee payer and instruction signer accounts should sign a transaction. "+"This behavior is deprecated and will throw an error in the next major version release.")}}else{throw new Error(`unknown signer: ${signature.publicKey.toString()}`)}}let numRequiredSignatures=0;let numReadonlySignedAccounts=0;let numReadonlyUnsignedAccounts=0;const signedKeys=[];const unsignedKeys=[];uniqueMetas.forEach(({pubkey:pubkey,isSigner:isSigner,isWritable:isWritable})=>{if(isSigner){signedKeys.push(pubkey.toString());numRequiredSignatures+=1;if(!isWritable){numReadonlySignedAccounts+=1}}else{unsignedKeys.push(pubkey.toString());if(!isWritable){numReadonlyUnsignedAccounts+=1}}});const accountKeys=signedKeys.concat(unsignedKeys);const compiledInstructions=instructions.map(instruction=>{const{data:data,programId:programId}=instruction;return{programIdIndex:accountKeys.indexOf(programId.toString()),accounts:instruction.keys.map(meta=>accountKeys.indexOf(meta.pubkey.toString())),data:bs58.encode(data)}});compiledInstructions.forEach(instruction=>{assert(instruction.programIdIndex>=0);instruction.accounts.forEach(keyIndex=>assert(keyIndex>=0))});return new Message({header:{numRequiredSignatures:numRequiredSignatures,numReadonlySignedAccounts:numReadonlySignedAccounts,numReadonlyUnsignedAccounts:numReadonlyUnsignedAccounts},accountKeys:accountKeys,recentBlockhash:recentBlockhash,instructions:compiledInstructions})}_compile(){const message=this.compileMessage();const signedKeys=message.accountKeys.slice(0,message.header.numRequiredSignatures);if(this.signatures.length===signedKeys.length){const valid=this.signatures.every((pair,index)=>signedKeys[index].equals(pair.publicKey));if(valid)return message}this.signatures=signedKeys.map(publicKey=>({signature:null,publicKey:publicKey}));return message}serializeMessage(){return this._compile().serialize()}async getEstimatedFee(connection){return(await connection.getFeeForMessage(this.compileMessage())).value}setSigners(...signers){if(signers.length===0){throw new Error("No signers")}const seen=new Set;this.signatures=signers.filter(publicKey=>{const key=publicKey.toString();if(seen.has(key)){return false}else{seen.add(key);return true}}).map(publicKey=>({signature:null,publicKey:publicKey}))}sign(...signers){if(signers.length===0){throw new Error("No signers")}const seen=new Set;const uniqueSigners=[];for(const signer of signers){const key=signer.publicKey.toString();if(seen.has(key)){continue}else{seen.add(key);uniqueSigners.push(signer)}}this.signatures=uniqueSigners.map(signer=>({signature:null,publicKey:signer.publicKey}));const message=this._compile();this._partialSign(message,...uniqueSigners)}partialSign(...signers){if(signers.length===0){throw new Error("No signers")}const seen=new Set;const uniqueSigners=[];for(const signer of signers){const key=signer.publicKey.toString();if(seen.has(key)){continue}else{seen.add(key);uniqueSigners.push(signer)}}const message=this._compile();this._partialSign(message,...uniqueSigners)}_partialSign(message,...signers){const signData=message.serialize();signers.forEach(signer=>{const signature=sign(signData,signer.secretKey);this._addSignature(signer.publicKey,toBuffer(signature))})}addSignature(pubkey,signature){this._compile();this._addSignature(pubkey,signature)}_addSignature(pubkey,signature){assert(signature.length===64);const index=this.signatures.findIndex(sigpair=>pubkey.equals(sigpair.publicKey));if(index<0){throw new Error(`unknown signer: ${pubkey.toString()}`)}this.signatures[index].signature=bufferExports.Buffer.from(signature)}verifySignatures(requireAllSignatures=true){const signatureErrors=this._getMessageSignednessErrors(this.serializeMessage(),requireAllSignatures);return!signatureErrors}_getMessageSignednessErrors(message,requireAllSignatures){const errors={};for(const{signature:signature,publicKey:publicKey}of this.signatures){if(signature===null){if(requireAllSignatures){(errors.missing||=[]).push(publicKey)}}else{if(!verify(signature,message,publicKey.toBytes())){(errors.invalid||=[]).push(publicKey)}}}return errors.invalid||errors.missing?errors:undefined}serialize(config){const{requireAllSignatures:requireAllSignatures,verifySignatures:verifySignatures}=Object.assign({requireAllSignatures:true,verifySignatures:true},config);const signData=this.serializeMessage();if(verifySignatures){const sigErrors=this._getMessageSignednessErrors(signData,requireAllSignatures);if(sigErrors){let errorMessage="Signature verification failed.";if(sigErrors.invalid){errorMessage+=`\nInvalid signature for public key${sigErrors.invalid.length===1?"":"(s)"} [\`${sigErrors.invalid.map(p=>p.toBase58()).join("`, `")}\`].`}if(sigErrors.missing){errorMessage+=`\nMissing signature for public key${sigErrors.missing.length===1?"":"(s)"} [\`${sigErrors.missing.map(p=>p.toBase58()).join("`, `")}\`].`}throw new Error(errorMessage)}}return this._serialize(signData)}_serialize(signData){const{signatures:signatures}=this;const signatureCount=[];encodeLength(signatureCount,signatures.length);const transactionLength=signatureCount.length+signatures.length*64+signData.length;const wireTransaction=bufferExports.Buffer.alloc(transactionLength);assert(signatures.length<256);bufferExports.Buffer.from(signatureCount).copy(wireTransaction,0);signatures.forEach(({signature:signature},index)=>{if(signature!==null){assert(signature.length===64,`signature has invalid length`);bufferExports.Buffer.from(signature).copy(wireTransaction,signatureCount.length+index*64)}});signData.copy(wireTransaction,signatureCount.length+signatures.length*64);assert(wireTransaction.length<=PACKET_DATA_SIZE,`Transaction too large: ${wireTransaction.length} > ${PACKET_DATA_SIZE}`);return wireTransaction}get keys(){assert(this.instructions.length===1);return this.instructions[0].keys.map(keyObj=>keyObj.pubkey)}get programId(){assert(this.instructions.length===1);return this.instructions[0].programId}get data(){assert(this.instructions.length===1);return this.instructions[0].data}static from(buffer){let byteArray=[...buffer];const signatureCount=decodeLength(byteArray);let signatures=[];for(let i=0;i<signatureCount;i++){const signature=guardedSplice(byteArray,0,SIGNATURE_LENGTH_IN_BYTES);signatures.push(bs58.encode(bufferExports.Buffer.from(signature)))}return Transaction.populate(Message.from(byteArray),signatures)}static populate(message,signatures=[]){const transaction=new Transaction;transaction.recentBlockhash=message.recentBlockhash;if(message.header.numRequiredSignatures>0){transaction.feePayer=message.accountKeys[0]}signatures.forEach((signature,index)=>{const sigPubkeyPair={signature:signature==bs58.encode(DEFAULT_SIGNATURE)?null:bs58.decode(signature),publicKey:message.accountKeys[index]};transaction.signatures.push(sigPubkeyPair)});message.instructions.forEach(instruction=>{const keys=instruction.accounts.map(account=>{const pubkey=message.accountKeys[account];return{pubkey:pubkey,isSigner:transaction.signatures.some(keyObj=>keyObj.publicKey.toString()===pubkey.toString())||message.isAccountSigner(account),isWritable:message.isAccountWritable(account)}});transaction.instructions.push(new TransactionInstruction({keys:keys,programId:message.accountKeys[instruction.programIdIndex],data:bs58.decode(instruction.data)}))});transaction._message=message;transaction._json=transaction.toJSON();return transaction}}const SYSVAR_CLOCK_PUBKEY=new PublicKey("SysvarC1ock11111111111111111111111111111111");new PublicKey("SysvarEpochSchedu1e111111111111111111111111");new PublicKey("Sysvar1nstructions1111111111111111111111111");const SYSVAR_RECENT_BLOCKHASHES_PUBKEY=new PublicKey("SysvarRecentB1ockHashes11111111111111111111");const SYSVAR_RENT_PUBKEY=new PublicKey("SysvarRent111111111111111111111111111111111");new PublicKey("SysvarRewards111111111111111111111111111111");new PublicKey("SysvarS1otHashes111111111111111111111111111");new PublicKey("SysvarS1otHistory11111111111111111111111111");const SYSVAR_STAKE_HISTORY_PUBKEY=new PublicKey("SysvarStakeHistory1111111111111111111111111");function encodeData$1(type,fields){const allocLength=type.layout.span>=0?type.layout.span:getAlloc(type,fields);const data=bufferExports.Buffer.alloc(allocLength);const layoutFields=Object.assign({instruction:type.index},fields);type.layout.encode(layoutFields,data);return data}const FeeCalculatorLayout=LayoutExports$1.nu64("lamportsPerSignature");const NonceAccountLayout=LayoutExports$1.struct([LayoutExports$1.u32("version"),LayoutExports$1.u32("state"),publicKey$2("authorizedPubkey"),publicKey$2("nonce"),LayoutExports$1.struct([FeeCalculatorLayout],"feeCalculator")]);const NONCE_ACCOUNT_LENGTH=NonceAccountLayout.span;function u64$2(property){const layout=LayoutExports$1.blob(8,property);const decode=layout.decode.bind(layout);const encode=layout.encode.bind(layout);const bigIntLayout=layout;const codec=getU64Codec();bigIntLayout.decode=(buffer,offset)=>{const src=decode(buffer,offset);return codec.decode(src)};bigIntLayout.encode=(bigInt,buffer,offset)=>{const src=codec.encode(bigInt);return encode(src,buffer,offset)};return bigIntLayout}const SYSTEM_INSTRUCTION_LAYOUTS=Object.freeze({Create:{index:0,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("lamports"),LayoutExports$1.ns64("space"),publicKey$2("programId")])},Assign:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("programId")])},Transfer:{index:2,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),u64$2("lamports")])},CreateWithSeed:{index:3,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("base"),rustString("seed"),LayoutExports$1.ns64("lamports"),LayoutExports$1.ns64("space"),publicKey$2("programId")])},AdvanceNonceAccount:{index:4,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},WithdrawNonceAccount:{index:5,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("lamports")])},InitializeNonceAccount:{index:6,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("authorized")])},AuthorizeNonceAccount:{index:7,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("authorized")])},Allocate:{index:8,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("space")])},AllocateWithSeed:{index:9,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("base"),rustString("seed"),LayoutExports$1.ns64("space"),publicKey$2("programId")])},AssignWithSeed:{index:10,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("base"),rustString("seed"),publicKey$2("programId")])},TransferWithSeed:{index:11,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),u64$2("lamports"),rustString("seed"),publicKey$2("programId")])},UpgradeNonceAccount:{index:12,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])}});class SystemProgram{constructor(){}static createAccount(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.Create;const data=encodeData$1(type,{lamports:params.lamports,space:params.space,programId:toBuffer(params.programId.toBuffer())});return new TransactionInstruction({keys:[{pubkey:params.fromPubkey,isSigner:true,isWritable:true},{pubkey:params.newAccountPubkey,isSigner:true,isWritable:true}],programId:this.programId,data:data})}static transfer(params){let data;let keys;if("basePubkey"in params){const type=SYSTEM_INSTRUCTION_LAYOUTS.TransferWithSeed;data=encodeData$1(type,{lamports:BigInt(params.lamports),seed:params.seed,programId:toBuffer(params.programId.toBuffer())});keys=[{pubkey:params.fromPubkey,isSigner:false,isWritable:true},{pubkey:params.basePubkey,isSigner:true,isWritable:false},{pubkey:params.toPubkey,isSigner:false,isWritable:true}]}else{const type=SYSTEM_INSTRUCTION_LAYOUTS.Transfer;data=encodeData$1(type,{lamports:BigInt(params.lamports)});keys=[{pubkey:params.fromPubkey,isSigner:true,isWritable:true},{pubkey:params.toPubkey,isSigner:false,isWritable:true}]}return new TransactionInstruction({keys:keys,programId:this.programId,data:data})}static assign(params){let data;let keys;if("basePubkey"in params){const type=SYSTEM_INSTRUCTION_LAYOUTS.AssignWithSeed;data=encodeData$1(type,{base:toBuffer(params.basePubkey.toBuffer()),seed:params.seed,programId:toBuffer(params.programId.toBuffer())});keys=[{pubkey:params.accountPubkey,isSigner:false,isWritable:true},{pubkey:params.basePubkey,isSigner:true,isWritable:false}]}else{const type=SYSTEM_INSTRUCTION_LAYOUTS.Assign;data=encodeData$1(type,{programId:toBuffer(params.programId.toBuffer())});keys=[{pubkey:params.accountPubkey,isSigner:true,isWritable:true}]}return new TransactionInstruction({keys:keys,programId:this.programId,data:data})}static createAccountWithSeed(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.CreateWithSeed;const data=encodeData$1(type,{base:toBuffer(params.basePubkey.toBuffer()),seed:params.seed,lamports:params.lamports,space:params.space,programId:toBuffer(params.programId.toBuffer())});let keys=[{pubkey:params.fromPubkey,isSigner:true,isWritable:true},{pubkey:params.newAccountPubkey,isSigner:false,isWritable:true}];if(!params.basePubkey.equals(params.fromPubkey)){keys.push({pubkey:params.basePubkey,isSigner:true,isWritable:false})}return new TransactionInstruction({keys:keys,programId:this.programId,data:data})}static createNonceAccount(params){const transaction=new Transaction;if("basePubkey"in params&&"seed"in params){transaction.add(SystemProgram.createAccountWithSeed({fromPubkey:params.fromPubkey,newAccountPubkey:params.noncePubkey,basePubkey:params.basePubkey,seed:params.seed,lamports:params.lamports,space:NONCE_ACCOUNT_LENGTH,programId:this.programId}))}else{transaction.add(SystemProgram.createAccount({fromPubkey:params.fromPubkey,newAccountPubkey:params.noncePubkey,lamports:params.lamports,space:NONCE_ACCOUNT_LENGTH,programId:this.programId}))}const initParams={noncePubkey:params.noncePubkey,authorizedPubkey:params.authorizedPubkey};transaction.add(this.nonceInitialize(initParams));return transaction}static nonceInitialize(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.InitializeNonceAccount;const data=encodeData$1(type,{authorized:toBuffer(params.authorizedPubkey.toBuffer())});const instructionData={keys:[{pubkey:params.noncePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_RECENT_BLOCKHASHES_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false}],programId:this.programId,data:data};return new TransactionInstruction(instructionData)}static nonceAdvance(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.AdvanceNonceAccount;const data=encodeData$1(type);const instructionData={keys:[{pubkey:params.noncePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_RECENT_BLOCKHASHES_PUBKEY,isSigner:false,isWritable:false},{pubkey:params.authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data};return new TransactionInstruction(instructionData)}static nonceWithdraw(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.WithdrawNonceAccount;const data=encodeData$1(type,{lamports:params.lamports});return new TransactionInstruction({keys:[{pubkey:params.noncePubkey,isSigner:false,isWritable:true},{pubkey:params.toPubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_RECENT_BLOCKHASHES_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false},{pubkey:params.authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static nonceAuthorize(params){const type=SYSTEM_INSTRUCTION_LAYOUTS.AuthorizeNonceAccount;const data=encodeData$1(type,{authorized:toBuffer(params.newAuthorizedPubkey.toBuffer())});return new TransactionInstruction({keys:[{pubkey:params.noncePubkey,isSigner:false,isWritable:true},{pubkey:params.authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static allocate(params){let data;let keys;if("basePubkey"in params){const type=SYSTEM_INSTRUCTION_LAYOUTS.AllocateWithSeed;data=encodeData$1(type,{base:toBuffer(params.basePubkey.toBuffer()),seed:params.seed,space:params.space,programId:toBuffer(params.programId.toBuffer())});keys=[{pubkey:params.accountPubkey,isSigner:false,isWritable:true},{pubkey:params.basePubkey,isSigner:true,isWritable:false}]}else{const type=SYSTEM_INSTRUCTION_LAYOUTS.Allocate;data=encodeData$1(type,{space:params.space});keys=[{pubkey:params.accountPubkey,isSigner:true,isWritable:true}]}return new TransactionInstruction({keys:keys,programId:this.programId,data:data})}}SystemProgram.programId=new PublicKey("11111111111111111111111111111111");new PublicKey("BPFLoader2111111111111111111111111111111111");({layout:LayoutExports$1.struct([LayoutExports$1.u32("typeIndex"),u64$2("deactivationSlot"),LayoutExports$1.nu64("lastExtendedSlot"),LayoutExports$1.u8("lastExtendedStartIndex"),LayoutExports$1.u8(),LayoutExports$1.seq(publicKey$2(),LayoutExports$1.offset(LayoutExports$1.u8(),-1),"authority")])});const PublicKeyFromString$1=coerce(instance(PublicKey),string(),value=>new PublicKey(value));const RawAccountDataResult=tuple([string(),literal("base64")]);const BufferFromRawAccountData=coerce(instance(bufferExports.Buffer),RawAccountDataResult,value=>bufferExports.Buffer.from(value[0],"base64"));function createRpcResult(result){return union([type({jsonrpc:literal("2.0"),id:string(),result:result}),type({jsonrpc:literal("2.0"),id:string(),error:type({code:unknown(),message:string(),data:optional(any())})})])}const UnknownRpcResult=createRpcResult(unknown());function jsonRpcResult(schema){return coerce(createRpcResult(schema),UnknownRpcResult,value=>{if("error"in value){return value}else{return{...value,result:create(value.result,schema)}}})}function jsonRpcResultAndContext(value){return jsonRpcResult(type({context:type({slot:number()}),value:value}))}function notificationResultAndContext(value){return type({context:type({slot:number()}),value:value})}const GetInflationGovernorResult=type({foundation:number(),foundationTerm:number(),initial:number(),taper:number(),terminal:number()});jsonRpcResult(array(nullable(type({epoch:number(),effectiveSlot:number(),amount:number(),postBalance:number(),commission:optional(nullable(number()))}))));const GetRecentPrioritizationFeesResult=array(type({slot:number(),prioritizationFee:number()}));const GetInflationRateResult=type({total:number(),validator:number(),foundation:number(),epoch:number()});const GetEpochInfoResult=type({epoch:number(),slotIndex:number(),slotsInEpoch:number(),absoluteSlot:number(),blockHeight:optional(number()),transactionCount:optional(number())});const GetEpochScheduleResult=type({slotsPerEpoch:number(),leaderScheduleSlotOffset:number(),warmup:boolean(),firstNormalEpoch:number(),firstNormalSlot:number()});const GetLeaderScheduleResult=record(string(),array(number()));const TransactionErrorResult=nullable(union([type({}),string()]));const SignatureStatusResult=type({err:TransactionErrorResult});const SignatureReceivedResult=literal("receivedSignature");type({"solana-core":string(),"feature-set":optional(number())});const ParsedInstructionStruct=type({program:string(),programId:PublicKeyFromString$1,parsed:unknown()});const PartiallyDecodedInstructionStruct=type({programId:PublicKeyFromString$1,accounts:array(PublicKeyFromString$1),data:string()});jsonRpcResultAndContext(type({err:nullable(union([type({}),string()])),logs:nullable(array(string())),accounts:optional(nullable(array(nullable(type({executable:boolean(),owner:string(),lamports:number(),data:array(string()),rentEpoch:optional(number())}))))),unitsConsumed:optional(number()),returnData:optional(nullable(type({programId:string(),data:tuple([string(),literal("base64")])}))),innerInstructions:optional(nullable(array(type({index:number(),instructions:array(union([ParsedInstructionStruct,PartiallyDecodedInstructionStruct]))}))))}));jsonRpcResultAndContext(type({byIdentity:record(string(),array(number())),range:type({firstSlot:number(),lastSlot:number()})}));jsonRpcResult(GetInflationGovernorResult);jsonRpcResult(GetInflationRateResult);jsonRpcResult(GetRecentPrioritizationFeesResult);jsonRpcResult(GetEpochInfoResult);jsonRpcResult(GetEpochScheduleResult);jsonRpcResult(GetLeaderScheduleResult);jsonRpcResult(number());jsonRpcResultAndContext(type({total:number(),circulating:number(),nonCirculating:number(),nonCirculatingAccounts:array(PublicKeyFromString$1)}));const TokenAmountResult=type({amount:string(),uiAmount:nullable(number()),decimals:number(),uiAmountString:optional(string())});jsonRpcResultAndContext(array(type({address:PublicKeyFromString$1,amount:string(),uiAmount:nullable(number()),decimals:number(),uiAmountString:optional(string())})));jsonRpcResultAndContext(array(type({pubkey:PublicKeyFromString$1,account:type({executable:boolean(),owner:PublicKeyFromString$1,lamports:number(),data:BufferFromRawAccountData,rentEpoch:number()})})));const ParsedAccountDataResult=type({program:string(),parsed:unknown(),space:number()});jsonRpcResultAndContext(array(type({pubkey:PublicKeyFromString$1,account:type({executable:boolean(),owner:PublicKeyFromString$1,lamports:number(),data:ParsedAccountDataResult,rentEpoch:number()})})));jsonRpcResultAndContext(array(type({lamports:number(),address:PublicKeyFromString$1})));const AccountInfoResult=type({executable:boolean(),owner:PublicKeyFromString$1,lamports:number(),data:BufferFromRawAccountData,rentEpoch:number()});type({pubkey:PublicKeyFromString$1,account:AccountInfoResult});const ParsedOrRawAccountData=coerce(union([instance(bufferExports.Buffer),ParsedAccountDataResult]),union([RawAccountDataResult,ParsedAccountDataResult]),value=>{if(Array.isArray(value)){return create(value,BufferFromRawAccountData)}else{return value}});const ParsedAccountInfoResult=type({executable:boolean(),owner:PublicKeyFromString$1,lamports:number(),data:ParsedOrRawAccountData,rentEpoch:number()});type({pubkey:PublicKeyFromString$1,account:ParsedAccountInfoResult});type({state:union([literal("active"),literal("inactive"),literal("activating"),literal("deactivating")]),active:number(),inactive:number()});jsonRpcResult(array(type({signature:string(),slot:number(),err:TransactionErrorResult,memo:nullable(string()),blockTime:optional(nullable(number()))})));jsonRpcResult(array(type({signature:string(),slot:number(),err:TransactionErrorResult,memo:nullable(string()),blockTime:optional(nullable(number()))})));type({subscription:number(),result:notificationResultAndContext(AccountInfoResult)});const ProgramAccountInfoResult=type({pubkey:PublicKeyFromString$1,account:AccountInfoResult});type({subscription:number(),result:notificationResultAndContext(ProgramAccountInfoResult)});const SlotInfoResult=type({parent:number(),slot:number(),root:number()});type({subscription:number(),result:SlotInfoResult});const SlotUpdateResult=union([type({type:union([literal("firstShredReceived"),literal("completed"),literal("optimisticConfirmation"),literal("root")]),slot:number(),timestamp:number()}),type({type:literal("createdBank"),parent:number(),slot:number(),timestamp:number()}),type({type:literal("frozen"),slot:number(),timestamp:number(),stats:type({numTransactionEntries:number(),numSuccessfulTransactions:number(),numFailedTransactions:number(),maxTransactionsPerEntry:number()})}),type({type:literal("dead"),slot:number(),timestamp:number(),err:string()})]);type({subscription:number(),result:SlotUpdateResult});type({subscription:number(),result:notificationResultAndContext(union([SignatureStatusResult,SignatureReceivedResult]))});type({subscription:number(),result:number()});type({pubkey:string(),gossip:nullable(string()),tpu:nullable(string()),rpc:nullable(string()),version:nullable(string())});const VoteAccountInfoResult=type({votePubkey:string(),nodePubkey:string(),activatedStake:number(),epochVoteAccount:boolean(),epochCredits:array(tuple([number(),number(),number()])),commission:number(),lastVote:number(),rootSlot:nullable(number())});jsonRpcResult(type({current:array(VoteAccountInfoResult),delinquent:array(VoteAccountInfoResult)}));const ConfirmationStatus=union([literal("processed"),literal("confirmed"),literal("finalized")]);const SignatureStatusResponse=type({slot:number(),confirmations:nullable(number()),err:TransactionErrorResult,confirmationStatus:optional(ConfirmationStatus)});jsonRpcResultAndContext(array(nullable(SignatureStatusResponse)));jsonRpcResult(number());const AddressTableLookupStruct=type({accountKey:PublicKeyFromString$1,writableIndexes:array(number()),readonlyIndexes:array(number())});const ConfirmedTransactionResult=type({signatures:array(string()),message:type({accountKeys:array(string()),header:type({numRequiredSignatures:number(),numReadonlySignedAccounts:number(),numReadonlyUnsignedAccounts:number()}),instructions:array(type({accounts:array(number()),data:string(),programIdIndex:number()})),recentBlockhash:string(),addressTableLookups:optional(array(AddressTableLookupStruct))})});const AnnotatedAccountKey=type({pubkey:PublicKeyFromString$1,signer:boolean(),writable:boolean(),source:optional(union([literal("transaction"),literal("lookupTable")]))});const ConfirmedTransactionAccountsModeResult=type({accountKeys:array(AnnotatedAccountKey),signatures:array(string())});const ParsedInstructionResult=type({parsed:unknown(),program:string(),programId:PublicKeyFromString$1});const RawInstructionResult=type({accounts:array(PublicKeyFromString$1),data:string(),programId:PublicKeyFromString$1});const InstructionResult=union([RawInstructionResult,ParsedInstructionResult]);const UnknownInstructionResult=union([type({parsed:unknown(),program:string(),programId:string()}),type({accounts:array(string()),data:string(),programId:string()})]);const ParsedOrRawInstruction=coerce(InstructionResult,UnknownInstructionResult,value=>{if("accounts"in value){return create(value,RawInstructionResult)}else{return create(value,ParsedInstructionResult)}});const ParsedConfirmedTransactionResult=type({signatures:array(string()),message:type({accountKeys:array(AnnotatedAccountKey),instructions:array(ParsedOrRawInstruction),recentBlockhash:string(),addressTableLookups:optional(nullable(array(AddressTableLookupStruct)))})});const TokenBalanceResult=type({accountIndex:number(),mint:string(),owner:optional(string()),programId:optional(string()),uiTokenAmount:TokenAmountResult});const LoadedAddressesResult=type({writable:array(PublicKeyFromString$1),readonly:array(PublicKeyFromString$1)});const ConfirmedTransactionMetaResult=type({err:TransactionErrorResult,fee:number(),innerInstructions:optional(nullable(array(type({index:number(),instructions:array(type({accounts:array(number()),data:string(),programIdIndex:number()}))})))),preBalances:array(number()),postBalances:array(number()),logMessages:optional(nullable(array(string()))),preTokenBalances:optional(nullable(array(TokenBalanceResult))),postTokenBalances:optional(nullable(array(TokenBalanceResult))),loadedAddresses:optional(LoadedAddressesResult),computeUnitsConsumed:optional(number()),costUnits:optional(number())});const ParsedConfirmedTransactionMetaResult=type({err:TransactionErrorResult,fee:number(),innerInstructions:optional(nullable(array(type({index:number(),instructions:array(ParsedOrRawInstruction)})))),preBalances:array(number()),postBalances:array(number()),logMessages:optional(nullable(array(string()))),preTokenBalances:optional(nullable(array(TokenBalanceResult))),postTokenBalances:optional(nullable(array(TokenBalanceResult))),loadedAddresses:optional(LoadedAddressesResult),computeUnitsConsumed:optional(number()),costUnits:optional(number())});const TransactionVersionStruct=union([literal(0),literal("legacy")]);const RewardsResult=type({pubkey:string(),lamports:number(),postBalance:nullable(number()),rewardType:nullable(string()),commission:optional(nullable(number()))});jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionResult,meta:nullable(ConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionAccountsModeResult,meta:nullable(ConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ParsedConfirmedTransactionResult,meta:nullable(ParsedConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionAccountsModeResult,meta:nullable(ParsedConfirmedTransactionMetaResult),version:optional(TransactionVersionStruct)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),rewards:optional(array(RewardsResult)),blockTime:nullable(number()),blockHeight:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),transactions:array(type({transaction:ConfirmedTransactionResult,meta:nullable(ConfirmedTransactionMetaResult)})),rewards:optional(array(RewardsResult)),blockTime:nullable(number())})));jsonRpcResult(nullable(type({blockhash:string(),previousBlockhash:string(),parentSlot:number(),signatures:array(string()),blockTime:nullable(number())})));jsonRpcResult(nullable(type({slot:number(),meta:nullable(ConfirmedTransactionMetaResult),blockTime:optional(nullable(number())),transaction:ConfirmedTransactionResult,version:optional(TransactionVersionStruct)})));jsonRpcResult(nullable(type({slot:number(),transaction:ParsedConfirmedTransactionResult,meta:nullable(ParsedConfirmedTransactionMetaResult),blockTime:optional(nullable(number())),version:optional(TransactionVersionStruct)})));jsonRpcResultAndContext(type({blockhash:string(),lastValidBlockHeight:number()}));jsonRpcResultAndContext(boolean());const PerfSampleResult=type({slot:number(),numTransactions:number(),numSlots:number(),samplePeriodSecs:number()});jsonRpcResult(array(PerfSampleResult));jsonRpcResultAndContext(nullable(type({feeCalculator:type({lamportsPerSignature:number()})})));jsonRpcResult(string());jsonRpcResult(string());const LogsResult=type({err:TransactionErrorResult,logs:array(string()),signature:string()});type({result:notificationResultAndContext(LogsResult),subscription:number()});class Keypair{constructor(keypair){this._keypair=void 0;this._keypair=keypair??generateKeypair()}static generate(){return new Keypair(generateKeypair())}static fromSecretKey(secretKey,options){if(secretKey.byteLength!==64){throw new Error("bad secret key size")}const publicKey=secretKey.slice(32,64);if(!options||!options.skipValidation){const privateScalar=secretKey.slice(0,32);const computedPublicKey=getPublicKey(privateScalar);for(let ii=0;ii<32;ii++){if(publicKey[ii]!==computedPublicKey[ii]){throw new Error("provided secretKey is invalid")}}}return new Keypair({publicKey:publicKey,secretKey:secretKey})}static fromSeed(seed){const publicKey=getPublicKey(seed);const secretKey=new Uint8Array(64);secretKey.set(seed);secretKey.set(publicKey,32);return new Keypair({publicKey:publicKey,secretKey:secretKey})}get publicKey(){return new PublicKey(this._keypair.publicKey)}get secretKey(){return new Uint8Array(this._keypair.secretKey)}}Object.freeze({CreateLookupTable:{index:0,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),u64$2("recentSlot"),LayoutExports$1.u8("bumpSeed")])},FreezeLookupTable:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},ExtendLookupTable:{index:2,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),u64$2(),LayoutExports$1.seq(publicKey$2(),LayoutExports$1.offset(LayoutExports$1.u32(),-8),"addresses")])},DeactivateLookupTable:{index:3,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},CloseLookupTable:{index:4,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])}});new PublicKey("AddressLookupTab1e1111111111111111111111111");Object.freeze({RequestUnits:{index:0,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("units"),LayoutExports$1.u32("additionalFee")])},RequestHeapFrame:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("bytes")])},SetComputeUnitLimit:{index:2,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("units")])},SetComputeUnitPrice:{index:3,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),u64$2("microLamports")])}});new PublicKey("ComputeBudget111111111111111111111111111111");LayoutExports$1.struct([LayoutExports$1.u8("numSignatures"),LayoutExports$1.u8("padding"),LayoutExports$1.u16("signatureOffset"),LayoutExports$1.u16("signatureInstructionIndex"),LayoutExports$1.u16("publicKeyOffset"),LayoutExports$1.u16("publicKeyInstructionIndex"),LayoutExports$1.u16("messageDataOffset"),LayoutExports$1.u16("messageDataSize"),LayoutExports$1.u16("messageInstructionIndex")]);new PublicKey("Ed25519SigVerify111111111111111111111111111");secp256k1.utils.isValidPrivateKey;LayoutExports$1.struct([LayoutExports$1.u8("numSignatures"),LayoutExports$1.u16("signatureOffset"),LayoutExports$1.u8("signatureInstructionIndex"),LayoutExports$1.u16("ethAddressOffset"),LayoutExports$1.u8("ethAddressInstructionIndex"),LayoutExports$1.u16("messageDataOffset"),LayoutExports$1.u16("messageDataSize"),LayoutExports$1.u8("messageInstructionIndex"),LayoutExports$1.blob(20,"ethAddress"),LayoutExports$1.blob(64,"signature"),LayoutExports$1.u8("recoveryId")]);new PublicKey("KeccakSecp256k11111111111111111111111111111");var _Lockup;const STAKE_CONFIG_ID=new PublicKey("StakeConfig11111111111111111111111111111111");class Lockup{constructor(unixTimestamp,epoch,custodian){this.unixTimestamp=void 0;this.epoch=void 0;this.custodian=void 0;this.unixTimestamp=unixTimestamp;this.epoch=epoch;this.custodian=custodian}}_Lockup=Lockup;Lockup.default=new _Lockup(0,0,PublicKey.default);const STAKE_INSTRUCTION_LAYOUTS=Object.freeze({Initialize:{index:0,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),authorized(),lockup()])},Authorize:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("newAuthorized"),LayoutExports$1.u32("stakeAuthorizationType")])},Delegate:{index:2,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},Split:{index:3,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("lamports")])},Withdraw:{index:4,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("lamports")])},Deactivate:{index:5,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},Merge:{index:7,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},AuthorizeWithSeed:{index:8,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("newAuthorized"),LayoutExports$1.u32("stakeAuthorizationType"),rustString("authoritySeed"),publicKey$2("authorityOwner")])}});const StakeAuthorizationLayout=Object.freeze({Staker:{index:0},Withdrawer:{index:1}});class StakeProgram{constructor(){}static initialize(params){const{stakePubkey:stakePubkey,authorized:authorized,lockup:maybeLockup}=params;const lockup=maybeLockup||Lockup.default;const type=STAKE_INSTRUCTION_LAYOUTS.Initialize;const data=encodeData$1(type,{authorized:{staker:toBuffer(authorized.staker.toBuffer()),withdrawer:toBuffer(authorized.withdrawer.toBuffer())},lockup:{unixTimestamp:lockup.unixTimestamp,epoch:lockup.epoch,custodian:toBuffer(lockup.custodian.toBuffer())}});const instructionData={keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false}],programId:this.programId,data:data};return new TransactionInstruction(instructionData)}static createAccountWithSeed(params){const transaction=new Transaction;transaction.add(SystemProgram.createAccountWithSeed({fromPubkey:params.fromPubkey,newAccountPubkey:params.stakePubkey,basePubkey:params.basePubkey,seed:params.seed,lamports:params.lamports,space:this.space,programId:this.programId}));const{stakePubkey:stakePubkey,authorized:authorized,lockup:lockup}=params;return transaction.add(this.initialize({stakePubkey:stakePubkey,authorized:authorized,lockup:lockup}))}static createAccount(params){const transaction=new Transaction;transaction.add(SystemProgram.createAccount({fromPubkey:params.fromPubkey,newAccountPubkey:params.stakePubkey,lamports:params.lamports,space:this.space,programId:this.programId}));const{stakePubkey:stakePubkey,authorized:authorized,lockup:lockup}=params;return transaction.add(this.initialize({stakePubkey:stakePubkey,authorized:authorized,lockup:lockup}))}static delegate(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,votePubkey:votePubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Delegate;const data=encodeData$1(type);return(new Transaction).add({keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:votePubkey,isSigner:false,isWritable:false},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:STAKE_CONFIG_ID,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static authorize(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,newAuthorizedPubkey:newAuthorizedPubkey,stakeAuthorizationType:stakeAuthorizationType,custodianPubkey:custodianPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Authorize;const data=encodeData$1(type,{newAuthorized:toBuffer(newAuthorizedPubkey.toBuffer()),stakeAuthorizationType:stakeAuthorizationType.index});const keys=[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:true},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}];if(custodianPubkey){keys.push({pubkey:custodianPubkey,isSigner:true,isWritable:false})}return(new Transaction).add({keys:keys,programId:this.programId,data:data})}static authorizeWithSeed(params){const{stakePubkey:stakePubkey,authorityBase:authorityBase,authoritySeed:authoritySeed,authorityOwner:authorityOwner,newAuthorizedPubkey:newAuthorizedPubkey,stakeAuthorizationType:stakeAuthorizationType,custodianPubkey:custodianPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.AuthorizeWithSeed;const data=encodeData$1(type,{newAuthorized:toBuffer(newAuthorizedPubkey.toBuffer()),stakeAuthorizationType:stakeAuthorizationType.index,authoritySeed:authoritySeed,authorityOwner:toBuffer(authorityOwner.toBuffer())});const keys=[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:authorityBase,isSigner:true,isWritable:false},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false}];if(custodianPubkey){keys.push({pubkey:custodianPubkey,isSigner:true,isWritable:false})}return(new Transaction).add({keys:keys,programId:this.programId,data:data})}static splitInstruction(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,splitStakePubkey:splitStakePubkey,lamports:lamports}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Split;const data=encodeData$1(type,{lamports:lamports});return new TransactionInstruction({keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:splitStakePubkey,isSigner:false,isWritable:true},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static split(params,rentExemptReserve){const transaction=new Transaction;transaction.add(SystemProgram.createAccount({fromPubkey:params.authorizedPubkey,newAccountPubkey:params.splitStakePubkey,lamports:rentExemptReserve,space:this.space,programId:this.programId}));return transaction.add(this.splitInstruction(params))}static splitWithSeed(params,rentExemptReserve){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,splitStakePubkey:splitStakePubkey,basePubkey:basePubkey,seed:seed,lamports:lamports}=params;const transaction=new Transaction;transaction.add(SystemProgram.allocate({accountPubkey:splitStakePubkey,basePubkey:basePubkey,seed:seed,space:this.space,programId:this.programId}));if(rentExemptReserve&&rentExemptReserve>0){transaction.add(SystemProgram.transfer({fromPubkey:params.authorizedPubkey,toPubkey:splitStakePubkey,lamports:rentExemptReserve}))}return transaction.add(this.splitInstruction({stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,splitStakePubkey:splitStakePubkey,lamports:lamports}))}static merge(params){const{stakePubkey:stakePubkey,sourceStakePubKey:sourceStakePubKey,authorizedPubkey:authorizedPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Merge;const data=encodeData$1(type);return(new Transaction).add({keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:sourceStakePubKey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}static withdraw(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey,toPubkey:toPubkey,lamports:lamports,custodianPubkey:custodianPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Withdraw;const data=encodeData$1(type,{lamports:lamports});const keys=[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:toPubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}];if(custodianPubkey){keys.push({pubkey:custodianPubkey,isSigner:true,isWritable:false})}return(new Transaction).add({keys:keys,programId:this.programId,data:data})}static deactivate(params){const{stakePubkey:stakePubkey,authorizedPubkey:authorizedPubkey}=params;const type=STAKE_INSTRUCTION_LAYOUTS.Deactivate;const data=encodeData$1(type);return(new Transaction).add({keys:[{pubkey:stakePubkey,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:authorizedPubkey,isSigner:true,isWritable:false}],programId:this.programId,data:data})}}StakeProgram.programId=new PublicKey("Stake11111111111111111111111111111111111111");StakeProgram.space=200;Object.freeze({InitializeAccount:{index:0,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),voteInit()])},Authorize:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),publicKey$2("newAuthorized"),LayoutExports$1.u32("voteAuthorizationType")])},Withdraw:{index:3,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),LayoutExports$1.ns64("lamports")])},UpdateValidatorIdentity:{index:4,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction")])},AuthorizeWithSeed:{index:10,layout:LayoutExports$1.struct([LayoutExports$1.u32("instruction"),voteAuthorizeWithSeedArgs()])}});new PublicKey("Vote111111111111111111111111111111111111111");new PublicKey("Va1idator1nfo111111111111111111111111111111");type({name:string(),website:optional(string()),details:optional(string()),iconUrl:optional(string()),keybaseUsername:optional(string())});new PublicKey("Vote111111111111111111111111111111111111111");LayoutExports$1.struct([publicKey$2("nodePubkey"),publicKey$2("authorizedWithdrawer"),LayoutExports$1.u8("commission"),LayoutExports$1.nu64(),LayoutExports$1.seq(LayoutExports$1.struct([LayoutExports$1.nu64("slot"),LayoutExports$1.u32("confirmationCount")]),LayoutExports$1.offset(LayoutExports$1.u32(),-8),"votes"),LayoutExports$1.u8("rootSlotValid"),LayoutExports$1.nu64("rootSlot"),LayoutExports$1.nu64(),LayoutExports$1.seq(LayoutExports$1.struct([LayoutExports$1.nu64("epoch"),publicKey$2("authorizedVoter")]),LayoutExports$1.offset(LayoutExports$1.u32(),-8),"authorizedVoters"),LayoutExports$1.struct([LayoutExports$1.seq(LayoutExports$1.struct([publicKey$2("authorizedPubkey"),LayoutExports$1.nu64("epochOfLastAuthorizedSwitch"),LayoutExports$1.nu64("targetEpoch")]),32,"buf"),LayoutExports$1.nu64("idx"),LayoutExports$1.u8("isEmpty")],"priorVoters"),LayoutExports$1.nu64(),LayoutExports$1.seq(LayoutExports$1.struct([LayoutExports$1.nu64("epoch"),LayoutExports$1.nu64("credits"),LayoutExports$1.nu64("prevCredits")]),LayoutExports$1.offset(LayoutExports$1.u32(),-8),"epochCredits"),LayoutExports$1.struct([LayoutExports$1.nu64("slot"),LayoutExports$1.nu64("timestamp")],"lastTimestamp")]);const LAMPORTS_PER_SOL=1e9;const TOKEN_PROGRAM_ID=new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");new PublicKey("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb");const ASSOCIATED_TOKEN_PROGRAM_ID=new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");const NATIVE_MINT=new PublicKey("So11111111111111111111111111111111111111112");new PublicKey("9pan9bMn5HatX4EJdBwg9VgCa7Uz5HL8N1m5D3NdXejP");const encodeDecode=layout=>{const decode=layout.decode.bind(layout);const encode=layout.encode.bind(layout);return{decode:decode,encode:encode}};var browser={};var hasRequiredBrowser;function requireBrowser(){if(hasRequiredBrowser)return browser;hasRequiredBrowser=1;Object.defineProperty(browser,"__esModule",{value:true});function toBigIntLE(buf){{const reversed=Buffer.from(buf);reversed.reverse();const hex=reversed.toString("hex");if(hex.length===0){return BigInt(0)}return BigInt(`0x${hex}`)}}browser.toBigIntLE=toBigIntLE;function toBigIntBE(buf){{const hex=buf.toString("hex");if(hex.length===0){return BigInt(0)}return BigInt(`0x${hex}`)}}browser.toBigIntBE=toBigIntBE;function toBufferLE(num,width){{const hex=num.toString(16);const buffer=Buffer.from(hex.padStart(width*2,"0").slice(0,width*2),"hex");buffer.reverse();return buffer}}browser.toBufferLE=toBufferLE;function toBufferBE(num,width){{const hex=num.toString(16);return Buffer.from(hex.padStart(width*2,"0").slice(0,width*2),"hex")}}browser.toBufferBE=toBufferBE;return browser}var browserExports=requireBrowser();const bigInt=length=>property=>{const layout=LayoutExports$1.blob(length,property);const{encode:encode,decode:decode}=encodeDecode(layout);const bigIntLayout=layout;bigIntLayout.decode=(buffer,offset)=>{const src=decode(buffer,offset);return browserExports.toBigIntLE(Buffer.from(src))};bigIntLayout.encode=(bigInt,buffer,offset)=>{const src=browserExports.toBufferLE(bigInt,length);return encode(src,buffer,offset)};return bigIntLayout};const u64$1=bigInt(8);const bool=property=>{const layout=LayoutExports$1.u8(property);const{encode:encode,decode:decode}=encodeDecode(layout);const boolLayout=layout;boolLayout.decode=(buffer,offset)=>{const src=decode(buffer,offset);return!!src};boolLayout.encode=(bool,buffer,offset)=>{const src=Number(bool);return encode(src,buffer,offset)};return boolLayout};const publicKey$1=property=>{const layout=LayoutExports$1.blob(32,property);const{encode:encode,decode:decode}=encodeDecode(layout);const publicKeyLayout=layout;publicKeyLayout.decode=(buffer,offset)=>{const src=decode(buffer,offset);return new PublicKey(src)};publicKeyLayout.encode=(publicKey,buffer,offset)=>{const src=publicKey.toBuffer();return encode(src,buffer,offset)};return publicKeyLayout};class TokenError extends Error{constructor(message){super(message)}}class TokenAccountNotFoundError extends TokenError{constructor(){super(...arguments);this.name="TokenAccountNotFoundError"}}class TokenInvalidAccountError extends TokenError{constructor(){super(...arguments);this.name="TokenInvalidAccountError"}}class TokenInvalidAccountOwnerError extends TokenError{constructor(){super(...arguments);this.name="TokenInvalidAccountOwnerError"}}class TokenInvalidAccountSizeError extends TokenError{constructor(){super(...arguments);this.name="TokenInvalidAccountSizeError"}}class TokenOwnerOffCurveError extends TokenError{constructor(){super(...arguments);this.name="TokenOwnerOffCurveError"}}var TokenInstruction;(function(TokenInstruction){TokenInstruction[TokenInstruction["InitializeMint"]=0]="InitializeMint";TokenInstruction[TokenInstruction["InitializeAccount"]=1]="InitializeAccount";TokenInstruction[TokenInstruction["InitializeMultisig"]=2]="InitializeMultisig";TokenInstruction[TokenInstruction["Transfer"]=3]="Transfer";TokenInstruction[TokenInstruction["Approve"]=4]="Approve";TokenInstruction[TokenInstruction["Revoke"]=5]="Revoke";TokenInstruction[TokenInstruction["SetAuthority"]=6]="SetAuthority";TokenInstruction[TokenInstruction["MintTo"]=7]="MintTo";TokenInstruction[TokenInstruction["Burn"]=8]="Burn";TokenInstruction[TokenInstruction["CloseAccount"]=9]="CloseAccount";TokenInstruction[TokenInstruction["FreezeAccount"]=10]="FreezeAccount";TokenInstruction[TokenInstruction["ThawAccount"]=11]="ThawAccount";TokenInstruction[TokenInstruction["TransferChecked"]=12]="TransferChecked";TokenInstruction[TokenInstruction["ApproveChecked"]=13]="ApproveChecked";TokenInstruction[TokenInstruction["MintToChecked"]=14]="MintToChecked";TokenInstruction[TokenInstruction["BurnChecked"]=15]="BurnChecked";TokenInstruction[TokenInstruction["InitializeAccount2"]=16]="InitializeAccount2";TokenInstruction[TokenInstruction["SyncNative"]=17]="SyncNative";TokenInstruction[TokenInstruction["InitializeAccount3"]=18]="InitializeAccount3";TokenInstruction[TokenInstruction["InitializeMultisig2"]=19]="InitializeMultisig2";TokenInstruction[TokenInstruction["InitializeMint2"]=20]="InitializeMint2";TokenInstruction[TokenInstruction["GetAccountDataSize"]=21]="GetAccountDataSize";TokenInstruction[TokenInstruction["InitializeImmutableOwner"]=22]="InitializeImmutableOwner";TokenInstruction[TokenInstruction["AmountToUiAmount"]=23]="AmountToUiAmount";TokenInstruction[TokenInstruction["UiAmountToAmount"]=24]="UiAmountToAmount";TokenInstruction[TokenInstruction["InitializeMintCloseAuthority"]=25]="InitializeMintCloseAuthority";TokenInstruction[TokenInstruction["TransferFeeExtension"]=26]="TransferFeeExtension";TokenInstruction[TokenInstruction["ConfidentialTransferExtension"]=27]="ConfidentialTransferExtension";TokenInstruction[TokenInstruction["DefaultAccountStateExtension"]=28]="DefaultAccountStateExtension";TokenInstruction[TokenInstruction["Reallocate"]=29]="Reallocate";TokenInstruction[TokenInstruction["MemoTransferExtension"]=30]="MemoTransferExtension";TokenInstruction[TokenInstruction["CreateNativeMint"]=31]="CreateNativeMint";TokenInstruction[TokenInstruction["InitializeNonTransferableMint"]=32]="InitializeNonTransferableMint";TokenInstruction[TokenInstruction["InterestBearingMintExtension"]=33]="InterestBearingMintExtension";TokenInstruction[TokenInstruction["CpiGuardExtension"]=34]="CpiGuardExtension";TokenInstruction[TokenInstruction["InitializePermanentDelegate"]=35]="InitializePermanentDelegate";TokenInstruction[TokenInstruction["TransferHookExtension"]=36]="TransferHookExtension";TokenInstruction[TokenInstruction["MetadataPointerExtension"]=39]="MetadataPointerExtension";TokenInstruction[TokenInstruction["GroupPointerExtension"]=40]="GroupPointerExtension";TokenInstruction[TokenInstruction["GroupMemberPointerExtension"]=41]="GroupMemberPointerExtension";TokenInstruction[TokenInstruction["ScaledUiAmountExtension"]=43]="ScaledUiAmountExtension";TokenInstruction[TokenInstruction["PausableExtension"]=44]="PausableExtension"})(TokenInstruction||(TokenInstruction={}));var AccountType$1;(function(AccountType){AccountType[AccountType["Uninitialized"]=0]="Uninitialized";AccountType[AccountType["Mint"]=1]="Mint";AccountType[AccountType["Account"]=2]="Account"})(AccountType$1||(AccountType$1={}));const ACCOUNT_TYPE_SIZE=1;const MultisigLayout=LayoutExports$1.struct([LayoutExports$1.u8("m"),LayoutExports$1.u8("n"),bool("isInitialized"),publicKey$1("signer1"),publicKey$1("signer2"),publicKey$1("signer3"),publicKey$1("signer4"),publicKey$1("signer5"),publicKey$1("signer6"),publicKey$1("signer7"),publicKey$1("signer8"),publicKey$1("signer9"),publicKey$1("signer10"),publicKey$1("signer11")]);const MULTISIG_SIZE=MultisigLayout.span;var AccountState;(function(AccountState){AccountState[AccountState["Uninitialized"]=0]="Uninitialized";AccountState[AccountState["Initialized"]=1]="Initialized";AccountState[AccountState["Frozen"]=2]="Frozen"})(AccountState||(AccountState={}));const AccountLayout=LayoutExports$1.struct([publicKey$1("mint"),publicKey$1("owner"),u64$1("amount"),LayoutExports$1.u32("delegateOption"),publicKey$1("delegate"),LayoutExports$1.u8("state"),LayoutExports$1.u32("isNativeOption"),u64$1("isNative"),u64$1("delegatedAmount"),LayoutExports$1.u32("closeAuthorityOption"),publicKey$1("closeAuthority")]);const ACCOUNT_SIZE=AccountLayout.span;async function getAccount(connection,address,commitment,programId=TOKEN_PROGRAM_ID){const info=await connection.getAccountInfo(address,commitment);return unpackAccount(address,info,programId)}function unpackAccount(address,info,programId=TOKEN_PROGRAM_ID){if(!info)throw new TokenAccountNotFoundError;if(!info.owner.equals(programId))throw new TokenInvalidAccountOwnerError;if(info.data.length<ACCOUNT_SIZE)throw new TokenInvalidAccountSizeError;const rawAccount=AccountLayout.decode(info.data.slice(0,ACCOUNT_SIZE));let tlvData=Buffer.alloc(0);if(info.data.length>ACCOUNT_SIZE){if(info.data.length===MULTISIG_SIZE)throw new TokenInvalidAccountSizeError;if(info.data[ACCOUNT_SIZE]!=AccountType$1.Account)throw new TokenInvalidAccountError;tlvData=info.data.slice(ACCOUNT_SIZE+ACCOUNT_TYPE_SIZE)}return{address:address,mint:rawAccount.mint,owner:rawAccount.owner,amount:rawAccount.amount,delegate:rawAccount.delegateOption?rawAccount.delegate:null,delegatedAmount:rawAccount.delegatedAmount,isInitialized:rawAccount.state!==AccountState.Uninitialized,isFrozen:rawAccount.state===AccountState.Frozen,isNative:!!rawAccount.isNativeOption,rentExemptReserve:rawAccount.isNativeOption?rawAccount.isNative:null,closeAuthority:rawAccount.closeAuthorityOption?rawAccount.closeAuthority:null,tlvData:tlvData}}function addSigners(keys,ownerOrAuthority,multiSigners){if(multiSigners.length){keys.push({pubkey:ownerOrAuthority,isSigner:false,isWritable:false});for(const signer of multiSigners){keys.push({pubkey:signer instanceof PublicKey?signer:signer.publicKey,isSigner:true,isWritable:false})}}else{keys.push({pubkey:ownerOrAuthority,isSigner:true,isWritable:false})}return keys}const MintLayout=LayoutExports$1.struct([LayoutExports$1.u32("mintAuthorityOption"),publicKey$1("mintAuthority"),u64$1("supply"),LayoutExports$1.u8("decimals"),bool("isInitialized"),LayoutExports$1.u32("freezeAuthorityOption"),publicKey$1("freezeAuthority")]);MintLayout.span;function getAssociatedTokenAddressSync(mint,owner,allowOwnerOffCurve=false,programId=TOKEN_PROGRAM_ID,associatedTokenProgramId=ASSOCIATED_TOKEN_PROGRAM_ID){if(!allowOwnerOffCurve&&!PublicKey.isOnCurve(owner.toBuffer()))throw new TokenOwnerOffCurveError;const[address]=PublicKey.findProgramAddressSync([owner.toBuffer(),programId.toBuffer(),mint.toBuffer()],associatedTokenProgramId);return address}const approveInstructionData=LayoutExports$1.struct([LayoutExports$1.u8("instruction"),u64$1("amount")]);function createApproveInstruction(account,delegate,owner,amount,multiSigners=[],programId=TOKEN_PROGRAM_ID){const keys=addSigners([{pubkey:account,isSigner:false,isWritable:true},{pubkey:delegate,isSigner:false,isWritable:false}],owner,multiSigners);const data=Buffer.alloc(approveInstructionData.span);approveInstructionData.encode({instruction:TokenInstruction.Approve,amount:BigInt(amount)},data);return new TransactionInstruction({keys:keys,programId:programId,data:data})}function createAssociatedTokenAccountIdempotentInstruction(payer,associatedToken,owner,mint,programId=TOKEN_PROGRAM_ID,associatedTokenProgramId=ASSOCIATED_TOKEN_PROGRAM_ID){return buildAssociatedTokenAccountInstruction(payer,associatedToken,owner,mint,Buffer.from([1]),programId,associatedTokenProgramId)}function buildAssociatedTokenAccountInstruction(payer,associatedToken,owner,mint,instructionData,programId=TOKEN_PROGRAM_ID,associatedTokenProgramId=ASSOCIATED_TOKEN_PROGRAM_ID){const keys=[{pubkey:payer,isSigner:true,isWritable:true},{pubkey:associatedToken,isSigner:false,isWritable:true},{pubkey:owner,isSigner:false,isWritable:false},{pubkey:mint,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:programId,isSigner:false,isWritable:false}];return new TransactionInstruction({keys:keys,programId:associatedTokenProgramId,data:instructionData})}const METADATA_PROGRAM_ID=new PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");const METADATA_MAX_NAME_LENGTH=32;const METADATA_MAX_SYMBOL_LENGTH=10;const METADATA_MAX_URI_LENGTH=200;const STAKE_POOL_PROGRAM_ID=new PublicKey("SP1s4uFeTAX9jsXXmwyDs1gxYYf7cdDZ8qHUHVxE1yr");const DEVNET_STAKE_POOL_PROGRAM_ID=new PublicKey("DPoo15wWDqpPJJtS2MUZ49aRxqz5ZaaJCJP4z8bLuib");const MAX_VALIDATORS_TO_UPDATE=4;const EPHEMERAL_STAKE_SEED_PREFIX=node_buffer.Buffer.from("ephemeral");const TRANSIENT_STAKE_SEED_PREFIX=node_buffer.Buffer.from("transient");const MINIMUM_ACTIVE_STAKE=LAMPORTS_PER_SOL;function encodeData(type,fields){const allocLength=type.layout.span;const data=node_buffer.Buffer.alloc(allocLength);const layoutFields=Object.assign({instruction:type.index},fields);type.layout.encode(layoutFields,data);return data}function decodeData(type,buffer){let data;try{data=type.layout.decode(buffer)}catch(err){throw new Error(`invalid instruction; ${err}`)}if(data.instruction!==type.index){throw new Error(`invalid instruction; instruction index mismatch ${data.instruction} != ${type.index}`)}return data}function solToLamports(amount){if(isNaN(amount)){return Number(0)}return Number(amount*LAMPORTS_PER_SOL)}function lamportsToSol(lamports){if(typeof lamports==="number"){return Math.abs(lamports)/LAMPORTS_PER_SOL}if(typeof lamports==="bigint"){return Math.abs(Number(lamports))/LAMPORTS_PER_SOL}let signMultiplier=1;if(lamports.isNeg()){signMultiplier=-1}const absLamports=lamports.abs();const lamportsString=absLamports.toString(10).padStart(10,"0");const splitIndex=lamportsString.length-9;const solString=`${lamportsString.slice(0,splitIndex)}.${lamportsString.slice(splitIndex)}`;return signMultiplier*Number.parseFloat(solString)}function findWsolTransientProgramAddress(programId,userPubkey){const[publicKey]=PublicKey.findProgramAddressSync([node_buffer.Buffer.from("transient_wsol"),userPubkey.toBuffer()],programId);return publicKey}async function findWithdrawAuthorityProgramAddress(programId,stakePoolAddress){const[publicKey]=PublicKey.findProgramAddressSync([stakePoolAddress.toBuffer(),node_buffer.Buffer.from("withdraw")],programId);return publicKey}async function findStakeProgramAddress(programId,voteAccountAddress,stakePoolAddress,seed){const[publicKey]=PublicKey.findProgramAddressSync([voteAccountAddress.toBuffer(),stakePoolAddress.toBuffer(),seed?new BN(seed).toArrayLike(node_buffer.Buffer,"le",4):node_buffer.Buffer.alloc(0)],programId);return publicKey}async function findTransientStakeProgramAddress(programId,voteAccountAddress,stakePoolAddress,seed){const[publicKey]=PublicKey.findProgramAddressSync([TRANSIENT_STAKE_SEED_PREFIX,voteAccountAddress.toBuffer(),stakePoolAddress.toBuffer(),seed.toArrayLike(node_buffer.Buffer,"le",8)],programId);return publicKey}async function findEphemeralStakeProgramAddress(programId,stakePoolAddress,seed){const[publicKey]=PublicKey.findProgramAddressSync([EPHEMERAL_STAKE_SEED_PREFIX,stakePoolAddress.toBuffer(),seed.toArrayLike(node_buffer.Buffer,"le",8)],programId);return publicKey}function findMetadataAddress(stakePoolMintAddress){const[publicKey]=PublicKey.findProgramAddressSync([node_buffer.Buffer.from("metadata"),METADATA_PROGRAM_ID.toBuffer(),stakePoolMintAddress.toBuffer()],METADATA_PROGRAM_ID);return publicKey}var Layout={};var hasRequiredLayout;function requireLayout(){if(hasRequiredLayout)return Layout;hasRequiredLayout=1;let Layout$1=class Layout{constructor(span,property){if(!Number.isInteger(span)){throw new TypeError("span must be an integer")}this.span=span;this.property=property}makeDestinationObject(){return{}}decode(b,offset){throw new Error("Layout is abstract")}encode(src,b,offset){throw new Error("Layout is abstract")}getSpan(b,offset){if(0>this.span){throw new RangeError("indeterminate span")}return this.span}replicate(property){const rv=Object.create(this.constructor.prototype);Object.assign(rv,this);rv.property=property;return rv}fromArray(values){return undefined}};Layout.Layout=Layout$1;function nameWithProperty(name,lo){if(lo.property){return name+"["+lo.property+"]"}return name}Layout.nameWithProperty=nameWithProperty;function bindConstructorLayout(Class,layout){if("function"!==typeof Class){throw new TypeError("Class must be constructor")}if(Class.hasOwnProperty("layout_")){throw new Error("Class is already bound to a layout")}if(!(layout&&layout instanceof Layout$1)){throw new TypeError("layout must be a Layout")}if(layout.hasOwnProperty("boundConstructor_")){throw new Error("layout is already bound to a constructor")}Class.layout_=layout;layout.boundConstructor_=Class;layout.makeDestinationObject=()=>new Class;Object.defineProperty(Class.prototype,"encode",{value:function(b,offset){return layout.encode(this,b,offset)},writable:true});Object.defineProperty(Class,"decode",{value:function(b,offset){return layout.decode(b,offset)},writable:true})}Layout.bindConstructorLayout=bindConstructorLayout;class ExternalLayout extends Layout$1{isCount(){throw new Error("ExternalLayout is abstract")}}class GreedyCount extends ExternalLayout{constructor(elementSpan,property){if(undefined===elementSpan){elementSpan=1}if(!Number.isInteger(elementSpan)||0>=elementSpan){throw new TypeError("elementSpan must be a (positive) integer")}super(-1,property);this.elementSpan=elementSpan}isCount(){return true}decode(b,offset){if(undefined===offset){offset=0}const rem=b.length-offset;return Math.floor(rem/this.elementSpan)}encode(src,b,offset){return 0}}class OffsetLayout extends ExternalLayout{constructor(layout,offset,property){if(!(layout instanceof Layout$1)){throw new TypeError("layout must be a Layout")}if(undefined===offset){offset=0}else if(!Number.isInteger(offset)){throw new TypeError("offset must be integer or undefined")}super(layout.span,property||layout.property);this.layout=layout;this.offset=offset}isCount(){return this.layout instanceof UInt||this.layout instanceof UIntBE}decode(b,offset){if(undefined===offset){offset=0}return this.layout.decode(b,offset+this.offset)}encode(src,b,offset){if(undefined===offset){offset=0}return this.layout.encode(src,b,offset+this.offset)}}class UInt extends Layout$1{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset){if(undefined===offset){offset=0}return b.readUIntLE(offset,this.span)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeUIntLE(src,offset,this.span);return this.span}}class UIntBE extends Layout$1{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset){if(undefined===offset){offset=0}return b.readUIntBE(offset,this.span)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeUIntBE(src,offset,this.span);return this.span}}class Int extends Layout$1{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset){if(undefined===offset){offset=0}return b.readIntLE(offset,this.span)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeIntLE(src,offset,this.span);return this.span}}class IntBE extends Layout$1{constructor(span,property){super(span,property);if(6<this.span){throw new RangeError("span must not exceed 6 bytes")}}decode(b,offset){if(undefined===offset){offset=0}return b.readIntBE(offset,this.span)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeIntBE(src,offset,this.span);return this.span}}const V2E32=Math.pow(2,32);function divmodInt64(src){const hi32=Math.floor(src/V2E32);const lo32=src-hi32*V2E32;return{hi32:hi32,lo32:lo32}}function roundedInt64(hi32,lo32){return hi32*V2E32+lo32}class NearUInt64 extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}const lo32=b.readUInt32LE(offset);const hi32=b.readUInt32LE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset){if(undefined===offset){offset=0}const split=divmodInt64(src);b.writeUInt32LE(split.lo32,offset);b.writeUInt32LE(split.hi32,offset+4);return 8}}class NearUInt64BE extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}const hi32=b.readUInt32BE(offset);const lo32=b.readUInt32BE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset){if(undefined===offset){offset=0}const split=divmodInt64(src);b.writeUInt32BE(split.hi32,offset);b.writeUInt32BE(split.lo32,offset+4);return 8}}class NearInt64 extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}const lo32=b.readUInt32LE(offset);const hi32=b.readInt32LE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset){if(undefined===offset){offset=0}const split=divmodInt64(src);b.writeUInt32LE(split.lo32,offset);b.writeInt32LE(split.hi32,offset+4);return 8}}class NearInt64BE extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}const hi32=b.readInt32BE(offset);const lo32=b.readUInt32BE(offset+4);return roundedInt64(hi32,lo32)}encode(src,b,offset){if(undefined===offset){offset=0}const split=divmodInt64(src);b.writeInt32BE(split.hi32,offset);b.writeUInt32BE(split.lo32,offset+4);return 8}}class Float extends Layout$1{constructor(property){super(4,property)}decode(b,offset){if(undefined===offset){offset=0}return b.readFloatLE(offset)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeFloatLE(src,offset);return 4}}class FloatBE extends Layout$1{constructor(property){super(4,property)}decode(b,offset){if(undefined===offset){offset=0}return b.readFloatBE(offset)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeFloatBE(src,offset);return 4}}class Double extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}return b.readDoubleLE(offset)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeDoubleLE(src,offset);return 8}}class DoubleBE extends Layout$1{constructor(property){super(8,property)}decode(b,offset){if(undefined===offset){offset=0}return b.readDoubleBE(offset)}encode(src,b,offset){if(undefined===offset){offset=0}b.writeDoubleBE(src,offset);return 8}}class Sequence extends Layout$1{constructor(elementLayout,count,property){if(!(elementLayout instanceof Layout$1)){throw new TypeError("elementLayout must be a Layout")}if(!(count instanceof ExternalLayout&&count.isCount()||Number.isInteger(count)&&0<=count)){throw new TypeError("count must be non-negative integer "+"or an unsigned integer ExternalLayout")}let span=-1;if(!(count instanceof ExternalLayout)&&0<elementLayout.span){span=count*elementLayout.span}super(span,property);this.elementLayout=elementLayout;this.count=count}getSpan(b,offset){if(0<=this.span){return this.span}if(undefined===offset){offset=0}let span=0;let count=this.count;if(count instanceof ExternalLayout){count=count.decode(b,offset)}if(0<this.elementLayout.span){span=count*this.elementLayout.span}else{let idx=0;while(idx<count){span+=this.elementLayout.getSpan(b,offset+span);++idx}}return span}decode(b,offset){if(undefined===offset){offset=0}const rv=[];let i=0;let count=this.count;if(count instanceof ExternalLayout){count=count.decode(b,offset)}while(i<count){rv.push(this.elementLayout.decode(b,offset));offset+=this.elementLayout.getSpan(b,offset);i+=1}return rv}encode(src,b,offset){if(undefined===offset){offset=0}const elo=this.elementLayout;const span=src.reduce((span,v)=>span+elo.encode(v,b,offset+span),0);if(this.count instanceof ExternalLayout){this.count.encode(src.length,b,offset)}return span}}class Structure extends Layout$1{constructor(fields,property,decodePrefixes){if(!(Array.isArray(fields)&&fields.reduce((acc,v)=>acc&&v instanceof Layout$1,true))){throw new TypeError("fields must be array of Layout instances")}if("boolean"===typeof property&&undefined===decodePrefixes){decodePrefixes=property;property=undefined}for(const fd of fields){if(0>fd.span&&undefined===fd.property){throw new Error("fields cannot contain unnamed variable-length layout")}}let span=-1;try{span=fields.reduce((span,fd)=>span+fd.getSpan(),0)}catch(e){}super(span,property);this.fields=fields;this.decodePrefixes=!!decodePrefixes}getSpan(b,offset){if(0<=this.span){return this.span}if(undefined===offset){offset=0}let span=0;try{span=this.fields.reduce((span,fd)=>{const fsp=fd.getSpan(b,offset);offset+=fsp;return span+fsp},0)}catch(e){throw new RangeError("indeterminate span")}return span}decode(b,offset){if(undefined===offset){offset=0}const dest=this.makeDestinationObject();for(const fd of this.fields){if(undefined!==fd.property){dest[fd.property]=fd.decode(b,offset)}offset+=fd.getSpan(b,offset);if(this.decodePrefixes&&b.length===offset){break}}return dest}encode(src,b,offset){if(undefined===offset){offset=0}const firstOffset=offset;let lastOffset=0;let lastWrote=0;for(const fd of this.fields){let span=fd.span;lastWrote=0<span?span:0;if(undefined!==fd.property){const fv=src[fd.property];if(undefined!==fv){lastWrote=fd.encode(fv,b,offset);if(0>span){span=fd.getSpan(b,offset)}}}lastOffset=offset;offset+=span}return lastOffset+lastWrote-firstOffset}fromArray(values){const dest=this.makeDestinationObject();for(const fd of this.fields){if(undefined!==fd.property&&0<values.length){dest[fd.property]=values.shift()}}return dest}layoutFor(property){if("string"!==typeof property){throw new TypeError("property must be string")}for(const fd of this.fields){if(fd.property===property){return fd}}}offsetOf(property){if("string"!==typeof property){throw new TypeError("property must be string")}let offset=0;for(const fd of this.fields){if(fd.property===property){return offset}if(0>fd.span){offset=-1}else if(0<=offset){offset+=fd.span}}}}class UnionDiscriminator{constructor(property){this.property=property}decode(){throw new Error("UnionDiscriminator is abstract")}encode(){throw new Error("UnionDiscriminator is abstract")}}class UnionLayoutDiscriminator extends UnionDiscriminator{constructor(layout,property){if(!(layout instanceof ExternalLayout&&layout.isCount())){throw new TypeError("layout must be an unsigned integer ExternalLayout")}super(property||layout.property||"variant");this.layout=layout}decode(b,offset){return this.layout.decode(b,offset)}encode(src,b,offset){return this.layout.encode(src,b,offset)}}class Union extends Layout$1{constructor(discr,defaultLayout,property){const upv=discr instanceof UInt||discr instanceof UIntBE;if(upv){discr=new UnionLayoutDiscriminator(new OffsetLayout(discr))}else if(discr instanceof ExternalLayout&&discr.isCount()){discr=new UnionLayoutDiscriminator(discr)}else if(!(discr instanceof UnionDiscriminator)){throw new TypeError("discr must be a UnionDiscriminator "+"or an unsigned integer layout")}if(undefined===defaultLayout){defaultLayout=null}if(!(null===defaultLayout||defaultLayout instanceof Layout$1)){throw new TypeError("defaultLayout must be null or a Layout")}if(null!==defaultLayout){if(0>defaultLayout.span){throw new Error("defaultLayout must have constant span")}if(undefined===defaultLayout.property){defaultLayout=defaultLayout.replicate("content")}}let span=-1;if(defaultLayout){span=defaultLayout.span;if(0<=span&&upv){span+=discr.layout.span}}super(span,property);this.discriminator=discr;this.usesPrefixDiscriminator=upv;this.defaultLayout=defaultLayout;this.registry={};let boundGetSourceVariant=this.defaultGetSourceVariant.bind(this);this.getSourceVariant=function(src){return boundGetSourceVariant(src)};this.configGetSourceVariant=function(gsv){boundGetSourceVariant=gsv.bind(this)}}getSpan(b,offset){if(0<=this.span){return this.span}if(undefined===offset){offset=0}const vlo=this.getVariant(b,offset);if(!vlo){throw new Error("unable to determine span for unrecognized variant")}return vlo.getSpan(b,offset)}defaultGetSourceVariant(src){if(src.hasOwnProperty(this.discriminator.property)){if(this.defaultLayout&&src.hasOwnProperty(this.defaultLayout.property)){return undefined}const vlo=this.registry[src[this.discriminator.property]];if(vlo&&(!vlo.layout||src.hasOwnProperty(vlo.property))){return vlo}}else{for(const tag in this.registry){const vlo=this.registry[tag];if(src.hasOwnProperty(vlo.property)){return vlo}}}throw new Error("unable to infer src variant")}decode(b,offset){if(undefined===offset){offset=0}let dest;const dlo=this.discriminator;const discr=dlo.decode(b,offset);let clo=this.registry[discr];if(undefined===clo){let contentOffset=0;clo=this.defaultLayout;if(this.usesPrefixDiscriminator){contentOffset=dlo.layout.span}dest=this.makeDestinationObject();dest[dlo.property]=discr;dest[clo.property]=this.defaultLayout.decode(b,offset+contentOffset)}else{dest=clo.decode(b,offset)}return dest}encode(src,b,offset){if(undefined===offset){offset=0}const vlo=this.getSourceVariant(src);if(undefined===vlo){const dlo=this.discriminator;const clo=this.defaultLayout;let contentOffset=0;if(this.usesPrefixDiscriminator){contentOffset=dlo.layout.span}dlo.encode(src[dlo.property],b,offset);return contentOffset+clo.encode(src[clo.property],b,offset+contentOffset)}return vlo.encode(src,b,offset)}addVariant(variant,layout,property){const rv=new VariantLayout(this,variant,layout,property);this.registry[variant]=rv;return rv}getVariant(vb,offset){let variant=vb;if(Buffer.isBuffer(vb)){if(undefined===offset){offset=0}variant=this.discriminator.decode(vb,offset)}return this.registry[variant]}}class VariantLayout extends Layout$1{constructor(union,variant,layout,property){if(!(union instanceof Union)){throw new TypeError("union must be a Union")}if(!Number.isInteger(variant)||0>variant){throw new TypeError("variant must be a (non-negative) integer")}if("string"===typeof layout&&undefined===property){property=layout;layout=null}if(layout){if(!(layout instanceof Layout$1)){throw new TypeError("layout must be a Layout")}if(null!==union.defaultLayout&&0<=layout.span&&layout.span>union.defaultLayout.span){throw new Error("variant span exceeds span of containing union")}if("string"!==typeof property){throw new TypeError("variant must have a String property")}}let span=union.span;if(0>union.span){span=layout?layout.span:0;if(0<=span&&union.usesPrefixDiscriminator){span+=union.discriminator.layout.span}}super(span,property);this.union=union;this.variant=variant;this.layout=layout||null}getSpan(b,offset){if(0<=this.span){return this.span}if(undefined===offset){offset=0}let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}return contentOffset+this.layout.getSpan(b,offset+contentOffset)}decode(b,offset){const dest=this.makeDestinationObject();if(undefined===offset){offset=0}if(this!==this.union.getVariant(b,offset)){throw new Error("variant mismatch")}let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}if(this.layout){dest[this.property]=this.layout.decode(b,offset+contentOffset)}else if(this.property){dest[this.property]=true}else if(this.union.usesPrefixDiscriminator){dest[this.union.discriminator.property]=this.variant}return dest}encode(src,b,offset){if(undefined===offset){offset=0}let contentOffset=0;if(this.union.usesPrefixDiscriminator){contentOffset=this.union.discriminator.layout.span}if(this.layout&&!src.hasOwnProperty(this.property)){throw new TypeError("variant lacks property "+this.property)}this.union.discriminator.encode(this.variant,b,offset);let span=contentOffset;if(this.layout){this.layout.encode(src[this.property],b,offset+contentOffset);span+=this.layout.getSpan(b,offset+contentOffset);if(0<=this.union.span&&span>this.union.span){throw new Error("encoded variant overruns containing union")}}return span}fromArray(values){if(this.layout){return this.layout.fromArray(values)}}}function fixBitwiseResult(v){if(0>v){v+=4294967296}return v}class BitStructure extends Layout$1{constructor(word,msb,property){if(!(word instanceof UInt||word instanceof UIntBE)){throw new TypeError("word must be a UInt or UIntBE layout")}if("string"===typeof msb&&undefined===property){property=msb;msb=undefined}if(4<word.span){throw new RangeError("word cannot exceed 32 bits")}super(word.span,property);this.word=word;this.msb=!!msb;this.fields=[];let value=0;this._packedSetValue=function(v){value=fixBitwiseResult(v);return this};this._packedGetValue=function(){return value}}decode(b,offset){const dest=this.makeDestinationObject();if(undefined===offset){offset=0}const value=this.word.decode(b,offset);this._packedSetValue(value);for(const fd of this.fields){if(undefined!==fd.property){dest[fd.property]=fd.decode(value)}}return dest}encode(src,b,offset){if(undefined===offset){offset=0}const value=this.word.decode(b,offset);this._packedSetValue(value);for(const fd of this.fields){if(undefined!==fd.property){const fv=src[fd.property];if(undefined!==fv){fd.encode(fv)}}}return this.word.encode(this._packedGetValue(),b,offset)}addField(bits,property){const bf=new BitField(this,bits,property);this.fields.push(bf);return bf}addBoolean(property){const bf=new Boolean(this,property);this.fields.push(bf);return bf}fieldFor(property){if("string"!==typeof property){throw new TypeError("property must be string")}for(const fd of this.fields){if(fd.property===property){return fd}}}}class BitField{constructor(container,bits,property){if(!(container instanceof BitStructure)){throw new TypeError("container must be a BitStructure")}if(!Number.isInteger(bits)||0>=bits){throw new TypeError("bits must be positive integer")}const totalBits=8*container.span;const usedBits=container.fields.reduce((sum,fd)=>sum+fd.bits,0);if(bits+usedBits>totalBits){throw new Error("bits too long for span remainder ("+(totalBits-usedBits)+" of "+totalBits+" remain)")}this.container=container;this.bits=bits;this.valueMask=(1<<bits)-1;if(32===bits){this.valueMask=4294967295}this.start=usedBits;if(this.container.msb){this.start=totalBits-usedBits-bits}this.wordMask=fixBitwiseResult(this.valueMask<<this.start);this.property=property}decode(){const word=this.container._packedGetValue();const wordValue=fixBitwiseResult(word&this.wordMask);const value=wordValue>>>this.start;return value}encode(value){if(!Number.isInteger(value)||value!==fixBitwiseResult(value&this.valueMask)){throw new TypeError(nameWithProperty("BitField.encode",this)+" value must be integer not exceeding "+this.valueMask)}const word=this.container._packedGetValue();const wordValue=fixBitwiseResult(value<<this.start);this.container._packedSetValue(fixBitwiseResult(word&~this.wordMask)|wordValue)}}class Boolean extends BitField{constructor(container,property){super(container,1,property)}decode(b,offset){return!!BitField.prototype.decode.call(this,b,offset)}encode(value){if("boolean"===typeof value){value=+value}return BitField.prototype.encode.call(this,value)}}class Blob extends Layout$1{constructor(length,property){if(!(length instanceof ExternalLayout&&length.isCount()||Number.isInteger(length)&&0<=length)){throw new TypeError("length must be positive integer "+"or an unsigned integer ExternalLayout")}let span=-1;if(!(length instanceof ExternalLayout)){span=length}super(span,property);this.length=length}getSpan(b,offset){let span=this.span;if(0>span){span=this.length.decode(b,offset)}return span}decode(b,offset){if(undefined===offset){offset=0}let span=this.span;if(0>span){span=this.length.decode(b,offset)}return b.slice(offset,offset+span)}encode(src,b,offset){let span=this.length;if(this.length instanceof ExternalLayout){span=src.length}if(!(Buffer.isBuffer(src)&&span===src.length)){throw new TypeError(nameWithProperty("Blob.encode",this)+" requires (length "+span+") Buffer as src")}if(offset+span>b.length){throw new RangeError("encoding overruns Buffer")}b.write(src.toString("hex"),offset,span,"hex");if(this.length instanceof ExternalLayout){this.length.encode(span,b,offset)}return span}}class CString extends Layout$1{constructor(property){super(-1,property)}getSpan(b,offset){if(!Buffer.isBuffer(b)){throw new TypeError("b must be a Buffer")}if(undefined===offset){offset=0}let idx=offset;while(idx<b.length&&0!==b[idx]){idx+=1}return 1+idx-offset}decode(b,offset,dest){if(undefined===offset){offset=0}let span=this.getSpan(b,offset);return b.slice(offset,offset+span-1).toString("utf-8")}encode(src,b,offset){if(undefined===offset){offset=0}if("string"!==typeof src){src=src.toString()}const srcb=new Buffer(src,"utf8");const span=srcb.length;if(offset+span>b.length){throw new RangeError("encoding overruns Buffer")}srcb.copy(b,offset);b[offset+span]=0;return span+1}}class UTF8 extends Layout$1{constructor(maxSpan,property){if("string"===typeof maxSpan&&undefined===property){property=maxSpan;maxSpan=undefined}if(undefined===maxSpan){maxSpan=-1}else if(!Number.isInteger(maxSpan)){throw new TypeError("maxSpan must be an integer")}super(-1,property);this.maxSpan=maxSpan}getSpan(b,offset){if(!Buffer.isBuffer(b)){throw new TypeError("b must be a Buffer")}if(undefined===offset){offset=0}return b.length-offset}decode(b,offset,dest){if(undefined===offset){offset=0}let span=this.getSpan(b,offset);if(0<=this.maxSpan&&this.maxSpan<span){throw new RangeError("text length exceeds maxSpan")}return b.slice(offset,offset+span).toString("utf-8")}encode(src,b,offset){if(undefined===offset){offset=0}if("string"!==typeof src){src=src.toString()}const srcb=new Buffer(src,"utf8");const span=srcb.length;if(0<=this.maxSpan&&this.maxSpan<span){throw new RangeError("text length exceeds maxSpan")}if(offset+span>b.length){throw new RangeError("encoding overruns Buffer")}srcb.copy(b,offset);return span}}class Constant extends Layout$1{constructor(value,property){super(0,property);this.value=value}decode(b,offset,dest){return this.value}encode(src,b,offset){return 0}}Layout.ExternalLayout=ExternalLayout;Layout.GreedyCount=GreedyCount;Layout.OffsetLayout=OffsetLayout;Layout.UInt=UInt;Layout.UIntBE=UIntBE;Layout.Int=Int;Layout.IntBE=IntBE;Layout.Float=Float;Layout.FloatBE=FloatBE;Layout.Double=Double;Layout.DoubleBE=DoubleBE;Layout.Sequence=Sequence;Layout.Structure=Structure;Layout.UnionDiscriminator=UnionDiscriminator;Layout.UnionLayoutDiscriminator=UnionLayoutDiscriminator;Layout.Union=Union;Layout.VariantLayout=VariantLayout;Layout.BitStructure=BitStructure;Layout.BitField=BitField;Layout.Boolean=Boolean;Layout.Blob=Blob;Layout.CString=CString;Layout.UTF8=UTF8;Layout.Constant=Constant;Layout.greedy=(elementSpan,property)=>new GreedyCount(elementSpan,property);Layout.offset=(layout,offset,property)=>new OffsetLayout(layout,offset,property);Layout.u8=property=>new UInt(1,property);Layout.u16=property=>new UInt(2,property);Layout.u24=property=>new UInt(3,property);Layout.u32=property=>new UInt(4,property);Layout.u40=property=>new UInt(5,property);Layout.u48=property=>new UInt(6,property);Layout.nu64=property=>new NearUInt64(property);Layout.u16be=property=>new UIntBE(2,property);Layout.u24be=property=>new UIntBE(3,property);Layout.u32be=property=>new UIntBE(4,property);Layout.u40be=property=>new UIntBE(5,property);Layout.u48be=property=>new UIntBE(6,property);Layout.nu64be=property=>new NearUInt64BE(property);Layout.s8=property=>new Int(1,property);Layout.s16=property=>new Int(2,property);Layout.s24=property=>new Int(3,property);Layout.s32=property=>new Int(4,property);Layout.s40=property=>new Int(5,property);Layout.s48=property=>new Int(6,property);Layout.ns64=property=>new NearInt64(property);Layout.s16be=property=>new IntBE(2,property);Layout.s24be=property=>new IntBE(3,property);Layout.s32be=property=>new IntBE(4,property);Layout.s40be=property=>new IntBE(5,property);Layout.s48be=property=>new IntBE(6,property);Layout.ns64be=property=>new NearInt64BE(property);Layout.f32=property=>new Float(property);Layout.f32be=property=>new FloatBE(property);Layout.f64=property=>new Double(property);Layout.f64be=property=>new DoubleBE(property);Layout.struct=(fields,property,decodePrefixes)=>new Structure(fields,property,decodePrefixes);Layout.bits=(word,msb,property)=>new BitStructure(word,msb,property);Layout.seq=(elementLayout,count,property)=>new Sequence(elementLayout,count,property);Layout.union=(discr,defaultLayout,property)=>new Union(discr,defaultLayout,property);Layout.unionLayoutDiscriminator=(layout,property)=>new UnionLayoutDiscriminator(layout,property);Layout.blob=(length,property)=>new Blob(length,property);Layout.cstr=property=>new CString(property);Layout.utf8=(maxSpan,property)=>new UTF8(maxSpan,property);Layout.const=(value,property)=>new Constant(value,property);return Layout}var LayoutExports=requireLayout();class BNLayout extends LayoutExports.Layout{constructor(span,signed,property){super(span,property);this.blob=LayoutExports.blob(span);this.signed=signed}decode(b,offset=0){const num=new BN(this.blob.decode(b,offset),10,"le");if(this.signed){return num.fromTwos(this.span*8).clone()}return num}encode(src,b,offset=0){if(this.signed){src=src.toTwos(this.span*8)}return this.blob.encode(src.toArrayLike(Buffer,"le",this.span),b,offset)}}function u64(property){return new BNLayout(8,false,property)}class WrappedLayout extends LayoutExports.Layout{constructor(layout,decoder,encoder,property){super(layout.span,property);this.layout=layout;this.decoder=decoder;this.encoder=encoder}decode(b,offset){return this.decoder(this.layout.decode(b,offset))}encode(src,b,offset){return this.layout.encode(this.encoder(src),b,offset)}getSpan(b,offset){return this.layout.getSpan(b,offset)}}function publicKey(property){return new WrappedLayout(LayoutExports.blob(32),b=>new PublicKey(b),key=>key.toBuffer(),property)}class OptionLayout extends LayoutExports.Layout{constructor(layout,property){super(-1,property);this.layout=layout;this.discriminator=LayoutExports.u8()}encode(src,b,offset=0){if(src===null||src===undefined){return this.discriminator.encode(0,b,offset)}this.discriminator.encode(1,b,offset);return this.layout.encode(src,b,offset+1)+1}decode(b,offset=0){const discriminator=this.discriminator.decode(b,offset);if(discriminator===0){return null}else if(discriminator===1){return this.layout.decode(b,offset+1)}throw new Error(`Invalid option ${this.property}`)}getSpan(b,offset=0){const discriminator=this.discriminator.decode(b,offset);if(discriminator===0){return 1}else if(discriminator===1){return this.layout.getSpan(b,offset+1)+1}throw new Error(`Invalid option ${this.property}`)}}function option(layout,property){return new OptionLayout(layout,property)}function vec(elementLayout,property){const length=LayoutExports.u32("length");const layout=LayoutExports.struct([length,LayoutExports.seq(elementLayout,LayoutExports.offset(length,-length.span),"values")]);return new WrappedLayout(layout,({values:values})=>values,values=>({values:values}),property)}const feeFields=[u64("denominator"),u64("numerator")];var AccountType;(function(AccountType){AccountType[AccountType["Uninitialized"]=0]="Uninitialized";AccountType[AccountType["StakePool"]=1]="StakePool";AccountType[AccountType["ValidatorList"]=2]="ValidatorList"})(AccountType||(AccountType={}));const BigNumFromString=coerce(instance(BN),string(),value=>{if(typeof value==="string"){return new BN(value,10)}throw new Error("invalid big num")});const PublicKeyFromString=coerce(instance(PublicKey),string(),value=>new PublicKey(value));class FutureEpochLayout extends LayoutExports.Layout{constructor(layout,property){super(-1,property);this.layout=layout;this.discriminator=LayoutExports.u8()}encode(src,b,offset=0){if(src===null||src===undefined){return this.discriminator.encode(0,b,offset)}this.discriminator.encode(2,b,offset);return this.layout.encode(src,b,offset+1)+1}decode(b,offset=0){const discriminator=this.discriminator.decode(b,offset);if(discriminator===0){return null}else if(discriminator===1||discriminator===2){return this.layout.decode(b,offset+1)}throw new Error(`Invalid future epoch ${this.property}`)}getSpan(b,offset=0){const discriminator=this.discriminator.decode(b,offset);if(discriminator===0){return 1}else if(discriminator===1||discriminator===2){return this.layout.getSpan(b,offset+1)+1}throw new Error(`Invalid future epoch ${this.property}`)}}function futureEpoch(layout,property){return new FutureEpochLayout(layout,property)}const StakeAccountType=enums(["uninitialized","initialized","delegated","rewardsPool"]);const StakeMeta=type({rentExemptReserve:BigNumFromString,authorized:type({staker:PublicKeyFromString,withdrawer:PublicKeyFromString}),lockup:type({unixTimestamp:number(),epoch:number(),custodian:PublicKeyFromString})});const StakeAccountInfo=type({meta:StakeMeta,stake:nullable(type({delegation:type({voter:PublicKeyFromString,stake:BigNumFromString,activationEpoch:BigNumFromString,deactivationEpoch:BigNumFromString,warmupCooldownRate:number()}),creditsObserved:number()}))});const StakeAccount=type({type:StakeAccountType,info:optional(StakeAccountInfo)});const StakePoolLayout=LayoutExports.struct([LayoutExports.u8("accountType"),publicKey("manager"),publicKey("staker"),publicKey("stakeDepositAuthority"),LayoutExports.u8("stakeWithdrawBumpSeed"),publicKey("validatorList"),publicKey("reserveStake"),publicKey("poolMint"),publicKey("managerFeeAccount"),publicKey("tokenProgramId"),u64("totalLamports"),u64("poolTokenSupply"),u64("lastUpdateEpoch"),LayoutExports.struct([u64("unixTimestamp"),u64("epoch"),publicKey("custodian")],"lockup"),LayoutExports.struct(feeFields,"epochFee"),futureEpoch(LayoutExports.struct(feeFields),"nextEpochFee"),option(publicKey(),"preferredDepositValidatorVoteAddress"),option(publicKey(),"preferredWithdrawValidatorVoteAddress"),LayoutExports.struct(feeFields,"stakeDepositFee"),LayoutExports.struct(feeFields,"stakeWithdrawalFee"),futureEpoch(LayoutExports.struct(feeFields),"nextStakeWithdrawalFee"),LayoutExports.u8("stakeReferralFee"),option(publicKey(),"solDepositAuthority"),LayoutExports.struct(feeFields,"solDepositFee"),LayoutExports.u8("solReferralFee"),option(publicKey(),"solWithdrawAuthority"),LayoutExports.struct(feeFields,"solWithdrawalFee"),futureEpoch(LayoutExports.struct(feeFields),"nextSolWithdrawalFee"),u64("lastEpochPoolTokenSupply"),u64("lastEpochTotalLamports")]);var ValidatorStakeInfoStatus;(function(ValidatorStakeInfoStatus){ValidatorStakeInfoStatus[ValidatorStakeInfoStatus["Active"]=0]="Active";ValidatorStakeInfoStatus[ValidatorStakeInfoStatus["DeactivatingTransient"]=1]="DeactivatingTransient";ValidatorStakeInfoStatus[ValidatorStakeInfoStatus["ReadyForRemoval"]=2]="ReadyForRemoval"})(ValidatorStakeInfoStatus||(ValidatorStakeInfoStatus={}));const ValidatorStakeInfoLayout=LayoutExports.struct([u64("activeStakeLamports"),u64("transientStakeLamports"),u64("lastUpdateEpoch"),u64("transientSeedSuffixStart"),u64("transientSeedSuffixEnd"),LayoutExports.u8("status"),publicKey("voteAccountAddress")]);const ValidatorListLayout=LayoutExports.struct([LayoutExports.u8("accountType"),LayoutExports.u32("maxValidators"),vec(ValidatorStakeInfoLayout,"validators")]);async function getValidatorListAccount(connection,pubkey){const account=await connection.getAccountInfo(pubkey);if(!account){throw new Error("Invalid validator list account")}return{pubkey:pubkey,account:{data:ValidatorListLayout.decode(account===null||account===void 0?void 0:account.data),executable:account.executable,lamports:account.lamports,owner:account.owner}}}async function prepareWithdrawAccounts(connection,stakePool,stakePoolAddress,amount,compareFn,skipFee){var _a,_b;const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const validatorListAcc=await connection.getAccountInfo(stakePool.validatorList);const validatorList=ValidatorListLayout.decode(validatorListAcc===null||validatorListAcc===void 0?void 0:validatorListAcc.data);if(!(validatorList===null||validatorList===void 0?void 0:validatorList.validators)||(validatorList===null||validatorList===void 0?void 0:validatorList.validators.length)==0){throw new Error("No accounts found")}const minBalanceForRentExemption=await connection.getMinimumBalanceForRentExemption(StakeProgram.space);const minBalance=new BN(minBalanceForRentExemption+MINIMUM_ACTIVE_STAKE);let accounts=[];for(const validator of validatorList.validators){if(validator.status!==ValidatorStakeInfoStatus.Active){continue}const stakeAccountAddress=await findStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress);if(!validator.activeStakeLamports.isZero()){const isPreferred=(_a=stakePool===null||stakePool===void 0?void 0:stakePool.preferredWithdrawValidatorVoteAddress)===null||_a===void 0?void 0:_a.equals(validator.voteAccountAddress);accounts.push({type:isPreferred?"preferred":"active",voteAddress:validator.voteAccountAddress,stakeAddress:stakeAccountAddress,lamports:validator.activeStakeLamports})}const transientStakeLamports=validator.transientStakeLamports.sub(minBalance);if(transientStakeLamports.gt(new BN(0))){const transientStakeAccountAddress=await findTransientStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress,validator.transientSeedSuffixStart);accounts.push({type:"transient",voteAddress:validator.voteAccountAddress,stakeAddress:transientStakeAccountAddress,lamports:transientStakeLamports})}}accounts=accounts.sort(compareFn||((a,b)=>b.lamports.sub(a.lamports).toNumber()));const reserveStake=await connection.getAccountInfo(stakePool.reserveStake);const reserveStakeBalance=new BN(((_b=reserveStake===null||reserveStake===void 0?void 0:reserveStake.lamports)!==null&&_b!==void 0?_b:0)-minBalanceForRentExemption);if(reserveStakeBalance.gt(new BN(0))){accounts.push({type:"reserve",stakeAddress:stakePool.reserveStake,lamports:reserveStakeBalance})}const withdrawFrom=[];let remainingAmount=new BN(amount);const fee=stakePool.stakeWithdrawalFee;const inverseFee={numerator:fee.denominator.sub(fee.numerator),denominator:fee.denominator};for(const type of["preferred","active","transient","reserve"]){const filteredAccounts=accounts.filter(a=>a.type==type);for(const{stakeAddress:stakeAddress,voteAddress:voteAddress,lamports:lamports}of filteredAccounts){if(lamports.lte(minBalance)&&type=="transient"){continue}let availableForWithdrawal=calcPoolTokensForDeposit(stakePool,lamports);if(!skipFee&&!inverseFee.numerator.isZero()){availableForWithdrawal=availableForWithdrawal.mul(inverseFee.denominator).div(inverseFee.numerator)}const poolAmount=BN.min(availableForWithdrawal,remainingAmount);if(poolAmount.lte(new BN(0))){continue}withdrawFrom.push({stakeAddress:stakeAddress,voteAddress:voteAddress,poolAmount:poolAmount});remainingAmount=remainingAmount.sub(poolAmount);if(remainingAmount.isZero()){break}}if(remainingAmount.isZero()){break}}if(remainingAmount.gt(new BN(0))){throw new Error(`No stake accounts found in this pool with enough balance to withdraw ${lamportsToSol(amount)} pool tokens.`)}return withdrawFrom}function calcPoolTokensForDeposit(stakePool,stakeLamports){if(stakePool.poolTokenSupply.isZero()||stakePool.totalLamports.isZero()){return stakeLamports}const numerator=stakeLamports.mul(stakePool.poolTokenSupply);return numerator.div(stakePool.totalLamports)}function calcLamportsWithdrawAmount(stakePool,poolTokens){const numerator=poolTokens.mul(stakePool.totalLamports);const denominator=stakePool.poolTokenSupply;if(numerator.lt(denominator)){return new BN(0)}return numerator.div(denominator)}function newStakeAccount(feePayer,instructions,lamports){const stakeReceiverKeypair=Keypair.generate();console.log(`Creating account to receive stake ${stakeReceiverKeypair.publicKey}`);instructions.push(SystemProgram.createAccount({fromPubkey:feePayer,newAccountPubkey:stakeReceiverKeypair.publicKey,lamports:lamports,space:StakeProgram.space,programId:StakeProgram.programId}));return stakeReceiverKeypair}function arrayChunk(array,size){const result=[];for(let i=0;i<array.length;i+=size){result.push(array.slice(i,i+size))}return result}const MOVE_STAKE_LAYOUT=LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports"),LayoutExports$1.ns64("transientStakeSeed")]);const UPDATE_VALIDATOR_LIST_BALANCE_LAYOUT=LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("startIndex"),LayoutExports$1.u8("noMerge")]);function tokenMetadataLayout(instruction,nameLength,symbolLength,uriLength){if(nameLength>METADATA_MAX_NAME_LENGTH){throw"maximum token name length is 32 characters"}if(symbolLength>METADATA_MAX_SYMBOL_LENGTH){throw"maximum token symbol length is 10 characters"}if(uriLength>METADATA_MAX_URI_LENGTH){throw"maximum token uri length is 200 characters"}return{index:instruction,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("nameLen"),LayoutExports$1.blob(nameLength,"name"),LayoutExports$1.u32("symbolLen"),LayoutExports$1.blob(symbolLength,"symbol"),LayoutExports$1.u32("uriLen"),LayoutExports$1.blob(uriLength,"uri")])}}const STAKE_POOL_INSTRUCTION_LAYOUTS=Object.freeze({AddValidatorToPool:{index:1,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.u32("seed")])},RemoveValidatorFromPool:{index:2,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction")])},DecreaseValidatorStake:{index:3,layout:MOVE_STAKE_LAYOUT},IncreaseValidatorStake:{index:4,layout:MOVE_STAKE_LAYOUT},UpdateValidatorListBalance:{index:6,layout:UPDATE_VALIDATOR_LIST_BALANCE_LAYOUT},UpdateStakePoolBalance:{index:7,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction")])},CleanupRemovedValidatorEntries:{index:8,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction")])},DepositStake:{index:9,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction")])},WithdrawStake:{index:10,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("poolTokens")])},DepositSol:{index:14,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},WithdrawSol:{index:16,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("poolTokens")])},IncreaseAdditionalValidatorStake:{index:19,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports"),LayoutExports$1.ns64("transientStakeSeed"),LayoutExports$1.ns64("ephemeralStakeSeed")])},DecreaseAdditionalValidatorStake:{index:20,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports"),LayoutExports$1.ns64("transientStakeSeed"),LayoutExports$1.ns64("ephemeralStakeSeed")])},DecreaseValidatorStakeWithReserve:{index:21,layout:MOVE_STAKE_LAYOUT},Redelegate:{index:22,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction")])},DepositStakeWithSlippage:{index:23,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},WithdrawStakeWithSlippage:{index:24,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},DepositSolWithSlippage:{index:25,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},WithdrawSolWithSlippage:{index:26,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamports")])},DepositWsolWithSession:{index:27,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("lamportsIn"),LayoutExports$1.ns64("minimumPoolTokensOut")])},WithdrawWsolWithSession:{index:28,layout:LayoutExports$1.struct([LayoutExports$1.u8("instruction"),LayoutExports$1.ns64("poolTokensIn"),LayoutExports$1.ns64("minimumLamportsOut")])}});class StakePoolInstruction{static addValidatorToPool(params){const{programId:programId,stakePool:stakePool,staker:staker,reserveStake:reserveStake,withdrawAuthority:withdrawAuthority,validatorList:validatorList,validatorStake:validatorStake,validatorVote:validatorVote,seed:seed}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.AddValidatorToPool;const data=encodeData(type,{seed:seed!==null&&seed!==void 0?seed:0});const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:validatorVote,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:STAKE_CONFIG_ID,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static removeValidatorFromPool(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,validatorStake:validatorStake,transientStake:transientStake}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.RemoveValidatorFromPool;const data=encodeData(type);const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static updateValidatorListBalance(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,startIndex:startIndex,noMerge:noMerge,validatorAndTransientStakePairs:validatorAndTransientStakePairs}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.UpdateValidatorListBalance;const data=encodeData(type,{startIndex:startIndex,noMerge:noMerge?1:0});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false},...validatorAndTransientStakePairs.map(pubkey=>({pubkey:pubkey,isSigner:false,isWritable:true}))];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static updateStakePoolBalance(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,managerFeeAccount:managerFeeAccount,poolMint:poolMint}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.UpdateStakePoolBalance;const data=encodeData(type);const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:false},{pubkey:managerFeeAccount,isSigner:false,isWritable:true},{pubkey:poolMint,isSigner:false,isWritable:true},{pubkey:TOKEN_PROGRAM_ID,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static cleanupRemovedValidatorEntries(params){const{programId:programId,stakePool:stakePool,validatorList:validatorList}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.CleanupRemovedValidatorEntries;const data=encodeData(type);const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static increaseValidatorStake(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,transientStake:transientStake,validatorStake:validatorStake,validatorVote:validatorVote,lamports:lamports,transientStakeSeed:transientStakeSeed}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.IncreaseValidatorStake;const data=encodeData(type,{lamports:lamports,transientStakeSeed:transientStakeSeed});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:false},{pubkey:validatorVote,isSigner:false,isWritable:false},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:STAKE_CONFIG_ID,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static increaseAdditionalValidatorStake(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,transientStake:transientStake,validatorStake:validatorStake,validatorVote:validatorVote,lamports:lamports,transientStakeSeed:transientStakeSeed,ephemeralStake:ephemeralStake,ephemeralStakeSeed:ephemeralStakeSeed}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.IncreaseAdditionalValidatorStake;const data=encodeData(type,{lamports:lamports,transientStakeSeed:transientStakeSeed,ephemeralStakeSeed:ephemeralStakeSeed});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:ephemeralStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:false},{pubkey:validatorVote,isSigner:false,isWritable:false},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:STAKE_CONFIG_ID,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static decreaseValidatorStake(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,validatorStake:validatorStake,transientStake:transientStake,lamports:lamports,transientStakeSeed:transientStakeSeed}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DecreaseValidatorStake;const data=encodeData(type,{lamports:lamports,transientStakeSeed:transientStakeSeed});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static decreaseValidatorStakeWithReserve(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,validatorStake:validatorStake,transientStake:transientStake,lamports:lamports,transientStakeSeed:transientStakeSeed}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DecreaseValidatorStakeWithReserve;const data=encodeData(type,{lamports:lamports,transientStakeSeed:transientStakeSeed});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static decreaseAdditionalValidatorStake(params){const{programId:programId,stakePool:stakePool,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,reserveStake:reserveStake,validatorStake:validatorStake,transientStake:transientStake,lamports:lamports,transientStakeSeed:transientStakeSeed,ephemeralStakeSeed:ephemeralStakeSeed,ephemeralStake:ephemeralStake}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DecreaseAdditionalValidatorStake;const data=encodeData(type,{lamports:lamports,transientStakeSeed:transientStakeSeed,ephemeralStakeSeed:ephemeralStakeSeed});const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:staker,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:ephemeralStake,isSigner:false,isWritable:true},{pubkey:transientStake,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static depositStake(params){const{programId:programId,stakePool:stakePool,validatorList:validatorList,depositAuthority:depositAuthority,withdrawAuthority:withdrawAuthority,depositStake:depositStake,validatorStake:validatorStake,reserveStake:reserveStake,destinationPoolAccount:destinationPoolAccount,managerFeeAccount:managerFeeAccount,referralPoolAccount:referralPoolAccount,poolMint:poolMint}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DepositStake;const data=encodeData(type);const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:depositAuthority,isSigner:false,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:depositStake,isSigner:false,isWritable:true},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:destinationPoolAccount,isSigner:false,isWritable:true},{pubkey:managerFeeAccount,isSigner:false,isWritable:true},{pubkey:referralPoolAccount,isSigner:false,isWritable:true},{pubkey:poolMint,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:TOKEN_PROGRAM_ID,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static depositSol(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,depositAuthority:depositAuthority,reserveStake:reserveStake,fundingAccount:fundingAccount,destinationPoolAccount:destinationPoolAccount,managerFeeAccount:managerFeeAccount,referralPoolAccount:referralPoolAccount,poolMint:poolMint,lamports:lamports}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DepositSol;const data=encodeData(type,{lamports:lamports});const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:fundingAccount,isSigner:true,isWritable:true},{pubkey:destinationPoolAccount,isSigner:false,isWritable:true},{pubkey:managerFeeAccount,isSigner:false,isWritable:true},{pubkey:referralPoolAccount,isSigner:false,isWritable:true},{pubkey:poolMint,isSigner:false,isWritable:true},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:TOKEN_PROGRAM_ID,isSigner:false,isWritable:false}];if(depositAuthority){keys.push({pubkey:depositAuthority,isSigner:true,isWritable:false})}return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static depositWsolWithSession(params){var _a;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.DepositWsolWithSession;const data=encodeData(type,{lamportsIn:params.lamportsIn,minimumPoolTokensOut:params.minimumPoolTokensOut});const keys=[{pubkey:params.stakePool,isSigner:false,isWritable:true},{pubkey:params.withdrawAuthority,isSigner:false,isWritable:false},{pubkey:params.reserveStake,isSigner:false,isWritable:true},{pubkey:params.fundingAccount,isSigner:true,isWritable:true},{pubkey:params.destinationPoolAccount,isSigner:false,isWritable:true},{pubkey:params.managerFeeAccount,isSigner:false,isWritable:true},{pubkey:params.referralPoolAccount,isSigner:false,isWritable:true},{pubkey:params.poolMint,isSigner:false,isWritable:true},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:params.tokenProgramId,isSigner:false,isWritable:false},{pubkey:params.wsolMint,isSigner:false,isWritable:false},{pubkey:params.wsolTokenAccount,isSigner:false,isWritable:true},{pubkey:params.wsolTransientAccount,isSigner:false,isWritable:true},{pubkey:params.programSigner,isSigner:false,isWritable:true},{pubkey:(_a=params.payer)!==null&&_a!==void 0?_a:params.fundingAccount,isSigner:true,isWritable:true}];if(params.depositAuthority){keys.push({pubkey:params.depositAuthority,isSigner:true,isWritable:false})}return new TransactionInstruction({programId:params.programId,keys:keys,data:data})}static withdrawStake(params){const{programId:programId,stakePool:stakePool,validatorList:validatorList,withdrawAuthority:withdrawAuthority,validatorStake:validatorStake,destinationStake:destinationStake,destinationStakeAuthority:destinationStakeAuthority,sourceTransferAuthority:sourceTransferAuthority,sourcePoolAccount:sourcePoolAccount,managerFeeAccount:managerFeeAccount,poolMint:poolMint,poolTokens:poolTokens}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.WithdrawStake;const data=encodeData(type,{poolTokens:poolTokens});const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:validatorList,isSigner:false,isWritable:true},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:validatorStake,isSigner:false,isWritable:true},{pubkey:destinationStake,isSigner:false,isWritable:true},{pubkey:destinationStakeAuthority,isSigner:false,isWritable:false},{pubkey:sourceTransferAuthority,isSigner:true,isWritable:false},{pubkey:sourcePoolAccount,isSigner:false,isWritable:true},{pubkey:managerFeeAccount,isSigner:false,isWritable:true},{pubkey:poolMint,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:TOKEN_PROGRAM_ID,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false}];return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static withdrawSol(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,sourceTransferAuthority:sourceTransferAuthority,sourcePoolAccount:sourcePoolAccount,reserveStake:reserveStake,destinationSystemAccount:destinationSystemAccount,managerFeeAccount:managerFeeAccount,solWithdrawAuthority:solWithdrawAuthority,poolMint:poolMint,poolTokens:poolTokens}=params;const type=STAKE_POOL_INSTRUCTION_LAYOUTS.WithdrawSol;const data=encodeData(type,{poolTokens:poolTokens});const keys=[{pubkey:stakePool,isSigner:false,isWritable:true},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:sourceTransferAuthority,isSigner:true,isWritable:false},{pubkey:sourcePoolAccount,isSigner:false,isWritable:true},{pubkey:reserveStake,isSigner:false,isWritable:true},{pubkey:destinationSystemAccount,isSigner:false,isWritable:true},{pubkey:managerFeeAccount,isSigner:false,isWritable:true},{pubkey:poolMint,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false},{pubkey:TOKEN_PROGRAM_ID,isSigner:false,isWritable:false}];if(solWithdrawAuthority){keys.push({pubkey:solWithdrawAuthority,isSigner:true,isWritable:false})}return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static withdrawWsolWithSession(params){const type=STAKE_POOL_INSTRUCTION_LAYOUTS.WithdrawWsolWithSession;const data=encodeData(type,{poolTokensIn:params.poolTokensIn,minimumLamportsOut:params.minimumLamportsOut});const keys=[{pubkey:params.stakePool,isSigner:false,isWritable:true},{pubkey:params.withdrawAuthority,isSigner:false,isWritable:false},{pubkey:params.userTransferAuthority,isSigner:true,isWritable:true},{pubkey:params.poolTokensFrom,isSigner:false,isWritable:true},{pubkey:params.reserveStake,isSigner:false,isWritable:true},{pubkey:params.userWsolAccount,isSigner:false,isWritable:true},{pubkey:params.managerFeeAccount,isSigner:false,isWritable:true},{pubkey:params.poolMint,isSigner:false,isWritable:true},{pubkey:SYSVAR_CLOCK_PUBKEY,isSigner:false,isWritable:false},{pubkey:SYSVAR_STAKE_HISTORY_PUBKEY,isSigner:false,isWritable:false},{pubkey:StakeProgram.programId,isSigner:false,isWritable:false},{pubkey:params.tokenProgramId,isSigner:false,isWritable:false},{pubkey:params.wsolMint,isSigner:false,isWritable:false},{pubkey:params.programSigner,isSigner:false,isWritable:true}];if(params.solWithdrawAuthority){keys.push({pubkey:params.solWithdrawAuthority,isSigner:true,isWritable:false})}return new TransactionInstruction({programId:params.programId,keys:keys,data:data})}static createTokenMetadata(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,tokenMetadata:tokenMetadata,manager:manager,payer:payer,poolMint:poolMint,name:name,symbol:symbol,uri:uri}=params;const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:manager,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:poolMint,isSigner:false,isWritable:false},{pubkey:payer,isSigner:true,isWritable:true},{pubkey:tokenMetadata,isSigner:false,isWritable:true},{pubkey:METADATA_PROGRAM_ID,isSigner:false,isWritable:false},{pubkey:SystemProgram.programId,isSigner:false,isWritable:false},{pubkey:SYSVAR_RENT_PUBKEY,isSigner:false,isWritable:false}];const type=tokenMetadataLayout(17,name.length,symbol.length,uri.length);const data=encodeData(type,{nameLen:name.length,name:Buffer.from(name),symbolLen:symbol.length,symbol:Buffer.from(symbol),uriLen:uri.length,uri:Buffer.from(uri)});return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static updateTokenMetadata(params){const{programId:programId,stakePool:stakePool,withdrawAuthority:withdrawAuthority,tokenMetadata:tokenMetadata,manager:manager,name:name,symbol:symbol,uri:uri}=params;const keys=[{pubkey:stakePool,isSigner:false,isWritable:false},{pubkey:manager,isSigner:true,isWritable:false},{pubkey:withdrawAuthority,isSigner:false,isWritable:false},{pubkey:tokenMetadata,isSigner:false,isWritable:true},{pubkey:METADATA_PROGRAM_ID,isSigner:false,isWritable:false}];const type=tokenMetadataLayout(18,name.length,symbol.length,uri.length);const data=encodeData(type,{nameLen:name.length,name:Buffer.from(name),symbolLen:symbol.length,symbol:Buffer.from(symbol),uriLen:uri.length,uri:Buffer.from(uri)});return new TransactionInstruction({programId:programId!==null&&programId!==void 0?programId:STAKE_POOL_PROGRAM_ID,keys:keys,data:data})}static decodeDepositStake(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,11);decodeData(STAKE_POOL_INSTRUCTION_LAYOUTS.DepositStake,instruction.data);return{programId:instruction.programId,stakePool:instruction.keys[0].pubkey,validatorList:instruction.keys[1].pubkey,depositAuthority:instruction.keys[2].pubkey,withdrawAuthority:instruction.keys[3].pubkey,depositStake:instruction.keys[4].pubkey,validatorStake:instruction.keys[5].pubkey,reserveStake:instruction.keys[6].pubkey,destinationPoolAccount:instruction.keys[7].pubkey,managerFeeAccount:instruction.keys[8].pubkey,referralPoolAccount:instruction.keys[9].pubkey,poolMint:instruction.keys[10].pubkey}}static decodeDepositSol(instruction){this.checkProgramId(instruction.programId);this.checkKeyLength(instruction.keys,9);const{amount:amount}=decodeData(STAKE_POOL_INSTRUCTION_LAYOUTS.DepositSol,instruction.data);return{programId:instruction.programId,stakePool:instruction.keys[0].pubkey,depositAuthority:instruction.keys[1].pubkey,withdrawAuthority:instruction.keys[2].pubkey,reserveStake:instruction.keys[3].pubkey,fundingAccount:instruction.keys[4].pubkey,destinationPoolAccount:instruction.keys[5].pubkey,managerFeeAccount:instruction.keys[6].pubkey,referralPoolAccount:instruction.keys[7].pubkey,poolMint:instruction.keys[8].pubkey,lamports:amount}}static checkProgramId(programId){if(!programId.equals(STAKE_POOL_PROGRAM_ID)&&!programId.equals(DEVNET_STAKE_POOL_PROGRAM_ID)){throw new Error("Invalid instruction; programId is not the stake pool program")}}static checkKeyLength(keys,expectedLength){if(keys.length<expectedLength){throw new Error(`Invalid instruction; found ${keys.length} keys, expected at least ${expectedLength}`)}}}function getStakePoolProgramId(rpcEndpoint){if(rpcEndpoint.includes("devnet")){return DEVNET_STAKE_POOL_PROGRAM_ID}else{return STAKE_POOL_PROGRAM_ID}}async function getStakePoolAccount(connection,stakePoolAddress){const account=await connection.getAccountInfo(stakePoolAddress);if(!account){throw new Error("Invalid stake pool account")}return{pubkey:stakePoolAddress,account:{data:StakePoolLayout.decode(account.data),executable:account.executable,lamports:account.lamports,owner:account.owner}}}async function getStakeAccount(connection,stakeAccount){const result=(await connection.getParsedAccountInfo(stakeAccount)).value;if(!result||!("parsed"in result.data)){throw new Error("Invalid stake account")}const program=result.data.program;if(program!=="stake"){throw new Error("Not a stake account")}return create(result.data.parsed,StakeAccount)}async function getStakePoolAccounts(connection,stakePoolProgramAddress){const response=await connection.getProgramAccounts(stakePoolProgramAddress);return response.map(a=>{try{if(a.account.data.readUInt8()===1){const data=StakePoolLayout.decode(a.account.data);return{pubkey:a.pubkey,account:{data:data,executable:a.account.executable,lamports:a.account.lamports,owner:a.account.owner}}}else if(a.account.data.readUInt8()===2){const data=ValidatorListLayout.decode(a.account.data);return{pubkey:a.pubkey,account:{data:data,executable:a.account.executable,lamports:a.account.lamports,owner:a.account.owner}}}else{console.error(`Could not decode. StakePoolAccount Enum is ${a.account.data.readUInt8()}, expected 1 or 2!`);return undefined}}catch(error){console.error("Could not decode account. Error:",error);return undefined}}).filter(a=>a!==undefined)}async function depositStake(connection,stakePoolAddress,authorizedPubkey,validatorVote,depositStake,poolTokenReceiverAccount){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validatorVote,stakePoolAddress);const instructions=[];const signers=[];const poolMint=stakePool.account.data.poolMint;if(!poolTokenReceiverAccount){const associatedAddress=getAssociatedTokenAddressSync(poolMint,authorizedPubkey);instructions.push(createAssociatedTokenAccountIdempotentInstruction(authorizedPubkey,associatedAddress,authorizedPubkey,poolMint));poolTokenReceiverAccount=associatedAddress}instructions.push(...StakeProgram.authorize({stakePubkey:depositStake,authorizedPubkey:authorizedPubkey,newAuthorizedPubkey:stakePool.account.data.stakeDepositAuthority,stakeAuthorizationType:StakeAuthorizationLayout.Staker}).instructions);instructions.push(...StakeProgram.authorize({stakePubkey:depositStake,authorizedPubkey:authorizedPubkey,newAuthorizedPubkey:stakePool.account.data.stakeDepositAuthority,stakeAuthorizationType:StakeAuthorizationLayout.Withdrawer}).instructions);instructions.push(StakePoolInstruction.depositStake({programId:stakePoolProgramId,stakePool:stakePoolAddress,validatorList:stakePool.account.data.validatorList,depositAuthority:stakePool.account.data.stakeDepositAuthority,reserveStake:stakePool.account.data.reserveStake,managerFeeAccount:stakePool.account.data.managerFeeAccount,referralPoolAccount:poolTokenReceiverAccount,destinationPoolAccount:poolTokenReceiverAccount,withdrawAuthority:withdrawAuthority,depositStake:depositStake,validatorStake:validatorStake,poolMint:poolMint}));return{instructions:instructions,signers:signers}}async function depositWsolWithSession(connection,stakePoolAddress,signerOrSession,userPubkey,lamports,minimumPoolTokensOut=0,destinationTokenAccount,referrerTokenAccount,depositAuthority,payer){const wsolTokenAccount=getAssociatedTokenAddressSync(NATIVE_MINT,userPubkey);const tokenAccountInfo=await connection.getTokenAccountBalance(wsolTokenAccount,"confirmed");const wsolBalance=tokenAccountInfo?parseInt(tokenAccountInfo.value.amount):0;if(wsolBalance<lamports){throw new Error(`Not enough WSOL to deposit into pool. Maximum deposit amount is ${lamportsToSol(wsolBalance)} WSOL.`)}const stakePoolAccount=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const stakePool=stakePoolAccount.account.data;const instructions=[];if(!destinationTokenAccount){const associatedAddress=getAssociatedTokenAddressSync(stakePool.poolMint,userPubkey);instructions.push(createAssociatedTokenAccountIdempotentInstruction(payer!==null&&payer!==void 0?payer:signerOrSession,associatedAddress,userPubkey,stakePool.poolMint));destinationTokenAccount=associatedAddress}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const[programSigner]=PublicKey.findProgramAddressSync([Buffer.from("fogo_session_program_signer")],stakePoolProgramId);const wsolTransientAccount=findWsolTransientProgramAddress(stakePoolProgramId,userPubkey);instructions.push(StakePoolInstruction.depositWsolWithSession({programId:stakePoolProgramId,stakePool:stakePoolAddress,reserveStake:stakePool.reserveStake,fundingAccount:signerOrSession,destinationPoolAccount:destinationTokenAccount,managerFeeAccount:stakePool.managerFeeAccount,referralPoolAccount:referrerTokenAccount!==null&&referrerTokenAccount!==void 0?referrerTokenAccount:destinationTokenAccount,poolMint:stakePool.poolMint,lamportsIn:lamports,minimumPoolTokensOut:minimumPoolTokensOut,withdrawAuthority:withdrawAuthority,depositAuthority:depositAuthority,wsolMint:NATIVE_MINT,wsolTokenAccount:wsolTokenAccount,wsolTransientAccount:wsolTransientAccount,tokenProgramId:stakePool.tokenProgramId,programSigner:programSigner,payer:payer}));return{instructions:instructions,signers:[]}}async function depositSol(connection,stakePoolAddress,from,lamports,destinationTokenAccount,referrerTokenAccount,depositAuthority){const fromBalance=await connection.getBalance(from,"confirmed");if(fromBalance<lamports){throw new Error(`Not enough SOL to deposit into pool. Maximum deposit amount is ${lamportsToSol(fromBalance)} SOL.`)}const stakePoolAccount=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const stakePool=stakePoolAccount.account.data;const userSolTransfer=new Keypair;const signers=[userSolTransfer];const instructions=[];instructions.push(SystemProgram.transfer({fromPubkey:from,toPubkey:userSolTransfer.publicKey,lamports:lamports}));if(!destinationTokenAccount){const associatedAddress=getAssociatedTokenAddressSync(stakePool.poolMint,from);instructions.push(createAssociatedTokenAccountIdempotentInstruction(from,associatedAddress,from,stakePool.poolMint));destinationTokenAccount=associatedAddress}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);instructions.push(StakePoolInstruction.depositSol({programId:stakePoolProgramId,stakePool:stakePoolAddress,reserveStake:stakePool.reserveStake,fundingAccount:userSolTransfer.publicKey,destinationPoolAccount:destinationTokenAccount,managerFeeAccount:stakePool.managerFeeAccount,referralPoolAccount:referrerTokenAccount!==null&&referrerTokenAccount!==void 0?referrerTokenAccount:destinationTokenAccount,poolMint:stakePool.poolMint,lamports:lamports,withdrawAuthority:withdrawAuthority,depositAuthority:depositAuthority}));return{instructions:instructions,signers:signers}}async function withdrawStake(connection,stakePoolAddress,tokenOwner,amount,useReserve=false,voteAccountAddress,stakeReceiver,poolTokenAccount,validatorComparator){var _c,_d,_e,_f;const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const poolAmount=new BN(solToLamports(amount));if(!poolTokenAccount){poolTokenAccount=getAssociatedTokenAddressSync(stakePool.account.data.poolMint,tokenOwner)}const tokenAccount=await getAccount(connection,poolTokenAccount);if(tokenAccount.amount<poolAmount.toNumber()){throw new Error(`Not enough token balance to withdraw ${lamportsToSol(poolAmount)} pool tokens.\n Maximum withdraw amount is ${lamportsToSol(tokenAccount.amount)} pool tokens.`)}const stakeAccountRentExemption=await connection.getMinimumBalanceForRentExemption(StakeProgram.space);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);let stakeReceiverAccount=null;if(stakeReceiver){stakeReceiverAccount=await getStakeAccount(connection,stakeReceiver)}const withdrawAccounts=[];if(useReserve){withdrawAccounts.push({stakeAddress:stakePool.account.data.reserveStake,voteAddress:undefined,poolAmount:poolAmount})}else if(stakeReceiverAccount&&(stakeReceiverAccount===null||stakeReceiverAccount===void 0?void 0:stakeReceiverAccount.type)==="delegated"){const voteAccount=(_d=(_c=stakeReceiverAccount.info)===null||_c===void 0?void 0:_c.stake)===null||_d===void 0?void 0:_d.delegation.voter;if(!voteAccount){throw new Error(`Invalid stake receiver ${stakeReceiver} delegation`)}const validatorListAccount=await connection.getAccountInfo(stakePool.account.data.validatorList);const validatorList=ValidatorListLayout.decode(validatorListAccount===null||validatorListAccount===void 0?void 0:validatorListAccount.data);const isValidVoter=validatorList.validators.find(val=>val.voteAccountAddress.equals(voteAccount));if(voteAccountAddress&&voteAccountAddress!==voteAccount){throw new Error(`Provided withdrawal vote account ${voteAccountAddress} does not match delegation on stake receiver account ${voteAccount},\n remove this flag or provide a different stake account delegated to ${voteAccountAddress}`)}if(isValidVoter){const stakeAccountAddress=await findStakeProgramAddress(stakePoolProgramId,voteAccount,stakePoolAddress);const stakeAccount=await connection.getAccountInfo(stakeAccountAddress);if(!stakeAccount){throw new Error(`Preferred withdraw valdator's stake account is invalid`)}const availableForWithdrawal=calcLamportsWithdrawAmount(stakePool.account.data,new BN(stakeAccount.lamports-MINIMUM_ACTIVE_STAKE-stakeAccountRentExemption));if(availableForWithdrawal.lt(poolAmount)){throw new Error(`Not enough lamports available for withdrawal from ${stakeAccountAddress},\n ${poolAmount} asked, ${availableForWithdrawal} available.`)}withdrawAccounts.push({stakeAddress:stakeAccountAddress,voteAddress:voteAccount,poolAmount:poolAmount})}else{throw new Error(`Provided stake account is delegated to a vote account ${voteAccount} which does not exist in the stake pool`)}}else if(voteAccountAddress){const stakeAccountAddress=await findStakeProgramAddress(stakePoolProgramId,voteAccountAddress,stakePoolAddress);const stakeAccount=await connection.getAccountInfo(stakeAccountAddress);if(!stakeAccount){throw new Error("Invalid Stake Account")}const availableLamports=new BN(stakeAccount.lamports-MINIMUM_ACTIVE_STAKE-stakeAccountRentExemption);if(availableLamports.lt(new BN(0))){throw new Error("Invalid Stake Account")}const availableForWithdrawal=calcLamportsWithdrawAmount(stakePool.account.data,availableLamports);if(availableForWithdrawal.lt(poolAmount)){throw new Error(`Not enough lamports available for withdrawal from ${stakeAccountAddress},\n ${poolAmount} asked, ${availableForWithdrawal} available.`)}withdrawAccounts.push({stakeAddress:stakeAccountAddress,voteAddress:voteAccountAddress,poolAmount:poolAmount})}else{withdrawAccounts.push(...await prepareWithdrawAccounts(connection,stakePool.account.data,stakePoolAddress,poolAmount,validatorComparator,poolTokenAccount.equals(stakePool.account.data.managerFeeAccount)))}const instructions=[];const userTransferAuthority=Keypair.generate();const signers=[userTransferAuthority];instructions.push(createApproveInstruction(poolTokenAccount,userTransferAuthority.publicKey,tokenOwner,poolAmount.toNumber()));let totalRentFreeBalances=0;const maxWithdrawAccounts=5;let i=0;for(const withdrawAccount of withdrawAccounts){if(i>maxWithdrawAccounts){break}const solWithdrawAmount=calcLamportsWithdrawAmount(stakePool.account.data,withdrawAccount.poolAmount);let infoMsg=`Withdrawing ◎${solWithdrawAmount},\n from stake account ${(_e=withdrawAccount.stakeAddress)===null||_e===void 0?void 0:_e.toBase58()}`;if(withdrawAccount.voteAddress){infoMsg=`${infoMsg}, delegated to ${(_f=withdrawAccount.voteAddress)===null||_f===void 0?void 0:_f.toBase58()}`}console.info(infoMsg);let stakeToReceive;if(!stakeReceiver||stakeReceiverAccount&&stakeReceiverAccount.type==="delegated"){const stakeKeypair=newStakeAccount(tokenOwner,instructions,stakeAccountRentExemption);signers.push(stakeKeypair);totalRentFreeBalances+=stakeAccountRentExemption;stakeToReceive=stakeKeypair.publicKey}else{stakeToReceive=stakeReceiver}instructions.push(StakePoolInstruction.withdrawStake({programId:stakePoolProgramId,stakePool:stakePoolAddress,validatorList:stakePool.account.data.validatorList,validatorStake:withdrawAccount.stakeAddress,destinationStake:stakeToReceive,destinationStakeAuthority:tokenOwner,sourceTransferAuthority:userTransferAuthority.publicKey,sourcePoolAccount:poolTokenAccount,managerFeeAccount:stakePool.account.data.managerFeeAccount,poolMint:stakePool.account.data.poolMint,poolTokens:withdrawAccount.poolAmount.toNumber(),withdrawAuthority:withdrawAuthority}));i++}if(stakeReceiver&&stakeReceiverAccount&&stakeReceiverAccount.type==="delegated"){signers.forEach(newStakeKeypair=>{instructions.concat(StakeProgram.merge({stakePubkey:stakeReceiver,sourceStakePubKey:newStakeKeypair.publicKey,authorizedPubkey:tokenOwner}).instructions)})}return{instructions:instructions,signers:signers,stakeReceiver:stakeReceiver,totalRentFreeBalances:totalRentFreeBalances}}async function withdrawSol(connection,stakePoolAddress,tokenOwner,solReceiver,amount,solWithdrawAuthority){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const poolAmount=solToLamports(amount);const poolTokenAccount=getAssociatedTokenAddressSync(stakePool.account.data.poolMint,tokenOwner);const tokenAccount=await getAccount(connection,poolTokenAccount);if(tokenAccount.amount<poolAmount){throw new Error(`Not enough token balance to withdraw ${lamportsToSol(poolAmount)} pool tokens.\n Maximum withdraw amount is ${lamportsToSol(tokenAccount.amount)} pool tokens.`)}const instructions=[];const userTransferAuthority=Keypair.generate();const signers=[userTransferAuthority];instructions.push(createApproveInstruction(poolTokenAccount,userTransferAuthority.publicKey,tokenOwner,poolAmount));const poolWithdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);if(solWithdrawAuthority){const expectedSolWithdrawAuthority=stakePool.account.data.solWithdrawAuthority;if(!expectedSolWithdrawAuthority){throw new Error("SOL withdraw authority specified in arguments but stake pool has none")}if(solWithdrawAuthority.toBase58()!==expectedSolWithdrawAuthority.toBase58()){throw new Error(`Invalid deposit withdraw specified, expected ${expectedSolWithdrawAuthority.toBase58()}, received ${solWithdrawAuthority.toBase58()}`)}}const withdrawTransaction=StakePoolInstruction.withdrawSol({programId:stakePoolProgramId,stakePool:stakePoolAddress,withdrawAuthority:poolWithdrawAuthority,reserveStake:stakePool.account.data.reserveStake,sourcePoolAccount:poolTokenAccount,sourceTransferAuthority:userTransferAuthority.publicKey,destinationSystemAccount:solReceiver,managerFeeAccount:stakePool.account.data.managerFeeAccount,poolMint:stakePool.account.data.poolMint,poolTokens:poolAmount,solWithdrawAuthority:solWithdrawAuthority});instructions.push(withdrawTransaction);return{instructions:instructions,signers:signers}}async function withdrawWsolWithSession(connection,stakePoolAddress,signerOrSession,userPubkey,amount,minimumLamportsOut=0,solWithdrawAuthority){const stakePoolAccount=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const stakePool=stakePoolAccount.account.data;const poolTokens=solToLamports(amount);const poolTokenAccount=getAssociatedTokenAddressSync(stakePool.poolMint,userPubkey);const tokenAccount=await getAccount(connection,poolTokenAccount);if(tokenAccount.amount<poolTokens){throw new Error(`Not enough token balance to withdraw ${amount} pool tokens.\n Maximum withdraw amount is ${lamportsToSol(tokenAccount.amount)} pool tokens.`)}const userWsolAccount=getAssociatedTokenAddressSync(NATIVE_MINT,userPubkey);const instructions=[];const signers=[];instructions.push(createAssociatedTokenAccountIdempotentInstruction(signerOrSession,userWsolAccount,userPubkey,NATIVE_MINT));const[programSigner]=PublicKey.findProgramAddressSync([Buffer.from("fogo_session_program_signer")],stakePoolProgramId);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);instructions.push(StakePoolInstruction.withdrawWsolWithSession({programId:stakePoolProgramId,stakePool:stakePoolAddress,withdrawAuthority:withdrawAuthority,userTransferAuthority:signerOrSession,poolTokensFrom:poolTokenAccount,reserveStake:stakePool.reserveStake,userWsolAccount:userWsolAccount,managerFeeAccount:stakePool.managerFeeAccount,poolMint:stakePool.poolMint,tokenProgramId:stakePool.tokenProgramId,solWithdrawAuthority:solWithdrawAuthority,wsolMint:NATIVE_MINT,programSigner:programSigner,poolTokensIn:poolTokens,minimumLamportsOut:minimumLamportsOut}));return{instructions:instructions,signers:signers}}async function addValidatorToPool(connection,stakePoolAddress,validatorVote,seed){const stakePoolAccount=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const stakePool=stakePoolAccount.account.data;const{reserveStake:reserveStake,staker:staker,validatorList:validatorList}=stakePool;const validatorListAccount=await getValidatorListAccount(connection,validatorList);const validatorInfo=validatorListAccount.account.data.validators.find(v=>v.voteAccountAddress.toBase58()===validatorVote.toBase58());if(validatorInfo){throw new Error("Vote account is already in validator list")}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validatorVote,stakePoolAddress,seed);const instructions=[StakePoolInstruction.addValidatorToPool({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:staker,reserveStake:reserveStake,withdrawAuthority:withdrawAuthority,validatorList:validatorList,validatorStake:validatorStake,validatorVote:validatorVote})];return{instructions:instructions}}async function removeValidatorFromPool(connection,stakePoolAddress,validatorVote,seed){const stakePoolAccount=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const stakePool=stakePoolAccount.account.data;const{staker:staker,validatorList:validatorList}=stakePool;const validatorListAccount=await getValidatorListAccount(connection,validatorList);const validatorInfo=validatorListAccount.account.data.validators.find(v=>v.voteAccountAddress.toBase58()===validatorVote.toBase58());if(!validatorInfo){throw new Error("Vote account is not already in validator list")}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validatorVote,stakePoolAddress,seed);const transientStakeSeed=validatorInfo.transientSeedSuffixStart;const transientStake=await findTransientStakeProgramAddress(stakePoolProgramId,validatorInfo.voteAccountAddress,stakePoolAddress,transientStakeSeed);const instructions=[StakePoolInstruction.removeValidatorFromPool({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:staker,withdrawAuthority:withdrawAuthority,validatorList:validatorList,validatorStake:validatorStake,transientStake:transientStake})];return{instructions:instructions}}async function increaseValidatorStake(connection,stakePoolAddress,validatorVote,lamports,ephemeralStakeSeed){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const validatorList=await getValidatorListAccount(connection,stakePool.account.data.validatorList);const validatorInfo=validatorList.account.data.validators.find(v=>v.voteAccountAddress.toBase58()===validatorVote.toBase58());if(!validatorInfo){throw new Error("Vote account not found in validator list")}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const transientStakeSeed=ephemeralStakeSeed===undefined?validatorInfo.transientSeedSuffixStart.addn(1):validatorInfo.transientSeedSuffixStart;const transientStake=await findTransientStakeProgramAddress(stakePoolProgramId,validatorInfo.voteAccountAddress,stakePoolAddress,transientStakeSeed);const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validatorInfo.voteAccountAddress,stakePoolAddress);const instructions=[];if(ephemeralStakeSeed!==undefined){const ephemeralStake=await findEphemeralStakeProgramAddress(stakePoolProgramId,stakePoolAddress,new BN(ephemeralStakeSeed));instructions.push(StakePoolInstruction.increaseAdditionalValidatorStake({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:stakePool.account.data.staker,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,transientStakeSeed:transientStakeSeed.toNumber(),withdrawAuthority:withdrawAuthority,transientStake:transientStake,validatorStake:validatorStake,validatorVote:validatorVote,lamports:lamports,ephemeralStake:ephemeralStake,ephemeralStakeSeed:ephemeralStakeSeed}))}else{instructions.push(StakePoolInstruction.increaseValidatorStake({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:stakePool.account.data.staker,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,transientStakeSeed:transientStakeSeed.toNumber(),withdrawAuthority:withdrawAuthority,transientStake:transientStake,validatorStake:validatorStake,validatorVote:validatorVote,lamports:lamports}))}return{instructions:instructions}}async function decreaseValidatorStake(connection,stakePoolAddress,validatorVote,lamports,ephemeralStakeSeed){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const validatorList=await getValidatorListAccount(connection,stakePool.account.data.validatorList);const validatorInfo=validatorList.account.data.validators.find(v=>v.voteAccountAddress.toBase58()===validatorVote.toBase58());if(!validatorInfo){throw new Error("Vote account not found in validator list")}const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validatorInfo.voteAccountAddress,stakePoolAddress);const transientStakeSeed=ephemeralStakeSeed===undefined?validatorInfo.transientSeedSuffixStart.addn(1):validatorInfo.transientSeedSuffixStart;const transientStake=await findTransientStakeProgramAddress(stakePoolProgramId,validatorInfo.voteAccountAddress,stakePoolAddress,transientStakeSeed);const instructions=[];if(ephemeralStakeSeed!==undefined){const ephemeralStake=await findEphemeralStakeProgramAddress(stakePoolProgramId,stakePoolAddress,new BN(ephemeralStakeSeed));instructions.push(StakePoolInstruction.decreaseAdditionalValidatorStake({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:stakePool.account.data.staker,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,transientStakeSeed:transientStakeSeed.toNumber(),withdrawAuthority:withdrawAuthority,validatorStake:validatorStake,transientStake:transientStake,lamports:lamports,ephemeralStake:ephemeralStake,ephemeralStakeSeed:ephemeralStakeSeed}))}else{instructions.push(StakePoolInstruction.decreaseValidatorStakeWithReserve({programId:stakePoolProgramId,stakePool:stakePoolAddress,staker:stakePool.account.data.staker,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,transientStakeSeed:transientStakeSeed.toNumber(),withdrawAuthority:withdrawAuthority,validatorStake:validatorStake,transientStake:transientStake,lamports:lamports}))}return{instructions:instructions}}async function updateStakePool(connection,stakePool,noMerge=false){const stakePoolAddress=stakePool.pubkey;const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const validatorList=await getValidatorListAccount(connection,stakePool.account.data.validatorList);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const updateListInstructions=[];const instructions=[];let startIndex=0;const validatorChunks=arrayChunk(validatorList.account.data.validators,MAX_VALIDATORS_TO_UPDATE);for(const validatorChunk of validatorChunks){const validatorAndTransientStakePairs=[];for(const validator of validatorChunk){const validatorStake=await findStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress);validatorAndTransientStakePairs.push(validatorStake);const transientStake=await findTransientStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress,validator.transientSeedSuffixStart);validatorAndTransientStakePairs.push(transientStake)}updateListInstructions.push(StakePoolInstruction.updateValidatorListBalance({programId:stakePoolProgramId,stakePool:stakePoolAddress,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,validatorAndTransientStakePairs:validatorAndTransientStakePairs,withdrawAuthority:withdrawAuthority,startIndex:startIndex,noMerge:noMerge}));startIndex+=MAX_VALIDATORS_TO_UPDATE}instructions.push(StakePoolInstruction.updateStakePoolBalance({programId:stakePoolProgramId,stakePool:stakePoolAddress,validatorList:stakePool.account.data.validatorList,reserveStake:stakePool.account.data.reserveStake,managerFeeAccount:stakePool.account.data.managerFeeAccount,poolMint:stakePool.account.data.poolMint,withdrawAuthority:withdrawAuthority}));instructions.push(StakePoolInstruction.cleanupRemovedValidatorEntries({programId:stakePoolProgramId,stakePool:stakePoolAddress,validatorList:stakePool.account.data.validatorList}));return{updateListInstructions:updateListInstructions,finalInstructions:instructions}}async function stakePoolInfo(connection,stakePoolAddress){var _c,_d;const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const reserveAccountStakeAddress=stakePool.account.data.reserveStake;const totalLamports=stakePool.account.data.totalLamports;const lastUpdateEpoch=stakePool.account.data.lastUpdateEpoch;const validatorList=await getValidatorListAccount(connection,stakePool.account.data.validatorList);const maxNumberOfValidators=validatorList.account.data.maxValidators;const currentNumberOfValidators=validatorList.account.data.validators.length;const epochInfo=await connection.getEpochInfo();const reserveStake=await connection.getAccountInfo(reserveAccountStakeAddress);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const minimumReserveStakeBalance=await connection.getMinimumBalanceForRentExemption(StakeProgram.space);const stakeAccounts=await Promise.all(validatorList.account.data.validators.map(async validator=>{const stakeAccountAddress=await findStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress);const transientStakeAccountAddress=await findTransientStakeProgramAddress(stakePoolProgramId,validator.voteAccountAddress,stakePoolAddress,validator.transientSeedSuffixStart);const updateRequired=!validator.lastUpdateEpoch.eqn(epochInfo.epoch);return{voteAccountAddress:validator.voteAccountAddress.toBase58(),stakeAccountAddress:stakeAccountAddress.toBase58(),validatorActiveStakeLamports:validator.activeStakeLamports.toString(),validatorLastUpdateEpoch:validator.lastUpdateEpoch.toString(),validatorLamports:validator.activeStakeLamports.add(validator.transientStakeLamports).toString(),validatorTransientStakeAccountAddress:transientStakeAccountAddress.toBase58(),validatorTransientStakeLamports:validator.transientStakeLamports.toString(),updateRequired:updateRequired}}));const totalPoolTokens=lamportsToSol(stakePool.account.data.poolTokenSupply);const updateRequired=!lastUpdateEpoch.eqn(epochInfo.epoch);return{address:stakePoolAddress.toBase58(),poolWithdrawAuthority:withdrawAuthority.toBase58(),manager:stakePool.account.data.manager.toBase58(),staker:stakePool.account.data.staker.toBase58(),stakeDepositAuthority:stakePool.account.data.stakeDepositAuthority.toBase58(),stakeWithdrawBumpSeed:stakePool.account.data.stakeWithdrawBumpSeed,maxValidators:maxNumberOfValidators,validatorList:validatorList.account.data.validators.map(validator=>({activeStakeLamports:validator.activeStakeLamports.toString(),transientStakeLamports:validator.transientStakeLamports.toString(),lastUpdateEpoch:validator.lastUpdateEpoch.toString(),transientSeedSuffixStart:validator.transientSeedSuffixStart.toString(),transientSeedSuffixEnd:validator.transientSeedSuffixEnd.toString(),status:validator.status.toString(),voteAccountAddress:validator.voteAccountAddress.toString()})),validatorListStorageAccount:stakePool.account.data.validatorList.toBase58(),reserveStake:stakePool.account.data.reserveStake.toBase58(),poolMint:stakePool.account.data.poolMint.toBase58(),managerFeeAccount:stakePool.account.data.managerFeeAccount.toBase58(),tokenProgramId:stakePool.account.data.tokenProgramId.toBase58(),totalLamports:stakePool.account.data.totalLamports.toString(),poolTokenSupply:stakePool.account.data.poolTokenSupply.toString(),lastUpdateEpoch:stakePool.account.data.lastUpdateEpoch.toString(),lockup:stakePool.account.data.lockup,epochFee:stakePool.account.data.epochFee,nextEpochFee:stakePool.account.data.nextEpochFee,preferredDepositValidatorVoteAddress:stakePool.account.data.preferredDepositValidatorVoteAddress,preferredWithdrawValidatorVoteAddress:stakePool.account.data.preferredWithdrawValidatorVoteAddress,stakeDepositFee:stakePool.account.data.stakeDepositFee,stakeWithdrawalFee:stakePool.account.data.stakeWithdrawalFee,nextStakeWithdrawalFee:stakePool.account.data.nextStakeWithdrawalFee,stakeReferralFee:stakePool.account.data.stakeReferralFee,solDepositAuthority:(_c=stakePool.account.data.solDepositAuthority)===null||_c===void 0?void 0:_c.toBase58(),solDepositFee:stakePool.account.data.solDepositFee,solReferralFee:stakePool.account.data.solReferralFee,solWithdrawAuthority:(_d=stakePool.account.data.solWithdrawAuthority)===null||_d===void 0?void 0:_d.toBase58(),solWithdrawalFee:stakePool.account.data.solWithdrawalFee,nextSolWithdrawalFee:stakePool.account.data.nextSolWithdrawalFee,lastEpochPoolTokenSupply:stakePool.account.data.lastEpochPoolTokenSupply.toString(),lastEpochTotalLamports:stakePool.account.data.lastEpochTotalLamports.toString(),details:{reserveStakeLamports:reserveStake===null||reserveStake===void 0?void 0:reserveStake.lamports,reserveAccountStakeAddress:reserveAccountStakeAddress.toBase58(),minimumReserveStakeBalance:minimumReserveStakeBalance,stakeAccounts:stakeAccounts,totalLamports:totalLamports,totalPoolTokens:totalPoolTokens,currentNumberOfValidators:currentNumberOfValidators,maxNumberOfValidators:maxNumberOfValidators,updateRequired:updateRequired}}}async function createPoolTokenMetadata(connection,stakePoolAddress,payer,name,symbol,uri){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const tokenMetadata=findMetadataAddress(stakePool.account.data.poolMint);const manager=stakePool.account.data.manager;const instructions=[];instructions.push(StakePoolInstruction.createTokenMetadata({programId:stakePoolProgramId,stakePool:stakePoolAddress,poolMint:stakePool.account.data.poolMint,payer:payer,manager:manager,tokenMetadata:tokenMetadata,withdrawAuthority:withdrawAuthority,name:name,symbol:symbol,uri:uri}));return{instructions:instructions}}async function updatePoolTokenMetadata(connection,stakePoolAddress,name,symbol,uri){const stakePool=await getStakePoolAccount(connection,stakePoolAddress);const stakePoolProgramId=getStakePoolProgramId(connection.rpcEndpoint);const withdrawAuthority=await findWithdrawAuthorityProgramAddress(stakePoolProgramId,stakePoolAddress);const tokenMetadata=findMetadataAddress(stakePool.account.data.poolMint);const instructions=[];instructions.push(StakePoolInstruction.updateTokenMetadata({programId:stakePoolProgramId,stakePool:stakePoolAddress,manager:stakePool.account.data.manager,tokenMetadata:tokenMetadata,withdrawAuthority:withdrawAuthority,name:name,symbol:symbol,uri:uri}));return{instructions:instructions}}exports.DEVNET_STAKE_POOL_PROGRAM_ID=DEVNET_STAKE_POOL_PROGRAM_ID;exports.STAKE_POOL_INSTRUCTION_LAYOUTS=STAKE_POOL_INSTRUCTION_LAYOUTS;exports.STAKE_POOL_PROGRAM_ID=STAKE_POOL_PROGRAM_ID;exports.StakePoolInstruction=StakePoolInstruction;exports.StakePoolLayout=StakePoolLayout;exports.ValidatorListLayout=ValidatorListLayout;exports.ValidatorStakeInfoLayout=ValidatorStakeInfoLayout;exports.addValidatorToPool=addValidatorToPool;exports.createPoolTokenMetadata=createPoolTokenMetadata;exports.decreaseValidatorStake=decreaseValidatorStake;exports.depositSol=depositSol;exports.depositStake=depositStake;exports.depositWsolWithSession=depositWsolWithSession;exports.getStakeAccount=getStakeAccount;exports.getStakePoolAccount=getStakePoolAccount;exports.getStakePoolAccounts=getStakePoolAccounts;exports.getStakePoolProgramId=getStakePoolProgramId;exports.increaseValidatorStake=increaseValidatorStake;exports.removeValidatorFromPool=removeValidatorFromPool;exports.stakePoolInfo=stakePoolInfo;exports.tokenMetadataLayout=tokenMetadataLayout;exports.updatePoolTokenMetadata=updatePoolTokenMetadata;exports.updateStakePool=updateStakePool;exports.withdrawSol=withdrawSol;exports.withdrawStake=withdrawStake;exports.withdrawWsolWithSession=withdrawWsolWithSession;return exports}({},node_buffer);
19
19
  //# sourceMappingURL=index.iife.min.js.map