@raydium-io/raydium-sdk-v2 0.1.36-alpha → 0.1.37-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/lib/raydium/index.js +1 -1
- package/lib/raydium/index.js.map +1 -1
- package/lib/raydium/index.mjs +1 -1
- package/lib/raydium/index.mjs.map +1 -1
- package/lib/raydium/raydium.js +1 -1
- package/lib/raydium/raydium.js.map +1 -1
- package/lib/raydium/raydium.mjs +1 -1
- package/lib/raydium/raydium.mjs.map +1 -1
- package/lib/raydium/token/token.js.map +1 -1
- package/lib/raydium/token/token.mjs.map +1 -1
- package/package.json +1 -1
- package/src/raydium/raydium.ts +31 -17
- package/src/raydium/token/token.ts +0 -2
package/lib/raydium/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var uc=Object.defineProperty,cc=Object.defineProperties;var lc=Object.getOwnPropertyDescriptors;var Fo=Object.getOwnPropertySymbols;var Ss=Object.prototype.hasOwnProperty,Ks=Object.prototype.propertyIsEnumerable;var xs=(r,e,t)=>e in r?uc(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,C=(r,e)=>{for(var t in e||(e={}))Ss.call(e,t)&&xs(r,t,e[t]);if(Fo)for(var t of Fo(e))Ks.call(e,t)&&xs(r,t,e[t]);return r},F=(r,e)=>cc(r,lc(e));var Se=(r,e)=>{var t={};for(var n in r)Ss.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Fo)for(var n of Fo(r))e.indexOf(n)<0&&Ks.call(r,n)&&(t[n]=r[n]);return t};import{merge as ip}from"lodash";import ga from"axios";import{get as Cs,set as mc}from"lodash";var zr=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},Rs={},dc={};function ue(r){let e=Cs(Rs,r);if(!e){let t=Cs(dc,r);e=new zr({name:r,logLevel:t}),mc(Rs,r,e)}return e}import{PublicKey as hl}from"@solana/web3.js";import kl from"bn.js";import Al from"big.js";import er from"bn.js";import it from"bn.js";var In=9e15,Zt=1e9,Yr="0123456789abcdef",Do="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Wo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Qr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-In,maxE:In,crypto:!1},Ms,vt,oe=!0,Uo="[DecimalError] ",Ht=Uo+"Invalid argument: ",_s=Uo+"Precision limit exceeded",Vs=Uo+"crypto unavailable",vs="[object Decimal]",Ge=Math.floor,Oe=Math.pow,pc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,fc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,yc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Fs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Pt=1e7,ee=7,bc=9007199254740991,gc=Do.length-1,jr=Wo.length-1,M={toStringTag:vs};M.absoluteValue=M.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),H(r)};M.ceil=function(){return H(new this.constructor(this),this.e+1,2)};M.clampedTo=M.clamp=function(r,e){var t,n=this,o=n.constructor;if(r=new o(r),e=new o(e),!r.s||!e.s)return new o(NaN);if(r.gt(e))throw Error(Ht+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new o(n)};M.comparedTo=M.cmp=function(r){var e,t,n,o,i=this,s=i.d,a=(r=new i.constructor(r)).d,c=i.s,u=r.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==r.e)return i.e>r.e^c<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};M.cosine=M.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+ee,n.rounding=1,t=Ac(n,Us(n,t)),n.precision=r,n.rounding=e,H(vt==2||vt==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};M.cubeRoot=M.cbrt=function(){var r,e,t,n,o,i,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,i=l.s*Oe(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=De(l.d),r=l.e,(i=(r-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Oe(t,1/3),r=Ge((r+1)/3)-(r%3==(r<0?-1:2)),i==1/0?t="5e"+r:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(r=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Pe(u.plus(l).times(a),u.plus(c),s+2,1),De(a.d).slice(0,s)===(t=De(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(H(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(H(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,H(n,r,m.rounding,e)};M.decimalPlaces=M.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-Ge(this.e/ee))*ee,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(r){return Pe(this,new this.constructor(r))};M.dividedToIntegerBy=M.divToInt=function(r){var e=this,t=e.constructor;return H(Pe(e,new t(r),0,1,1),t.precision,t.rounding)};M.equals=M.eq=function(r){return this.cmp(r)===0};M.floor=function(){return H(new this.constructor(this),this.e+1,3)};M.greaterThan=M.gt=function(r){return this.cmp(r)>0};M.greaterThanOrEqualTo=M.gte=function(r){var e=this.cmp(r);return e==1||e===0};M.hyperbolicCosine=M.cosh=function(){var r,e,t,n,o,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,o=i.d.length,o<32?(r=Math.ceil(o/3),e=(1/Xo(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),i=Bn(s,1,i.times(e),new s(1),!0);for(var c,u=r,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return H(i,s.precision=t,s.rounding=n,!0)};M.hyperbolicSine=M.sinh=function(){var r,e,t,n,o=this,i=o.constructor;if(!o.isFinite()||o.isZero())return new i(o);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(o.e,o.sd())+4,i.rounding=1,n=o.d.length,n<3)o=Bn(i,2,o,o,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,o=o.times(1/Xo(5,r)),o=Bn(i,2,o,o,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);r--;)s=o.times(o),o=o.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,H(o,e,t,!0)};M.hyperbolicTangent=M.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,Pe(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};M.inverseCosine=M.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?wt(t,o,i):new t(0):new t(NaN):e.isZero()?wt(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),r=wt(t,o+4,i).times(.5),t.precision=o,t.rounding=i,r.minus(e))};M.inverseHyperbolicCosine=M.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};M.inverseHyperbolicSine=M.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln())};M.inverseHyperbolicTangent=M.atanh=function(){var r,e,t,n,o=this,i=o.constructor;return o.isFinite()?o.e>=0?new i(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(r=i.precision,e=i.rounding,n=o.sd(),Math.max(n,r)<2*-o.e-1?H(new i(o),r,e,!0):(i.precision=t=n-o.e,o=Pe(o.plus(1),new i(1).minus(o),t+r,1),i.precision=r+4,i.rounding=1,o=o.ln(),i.precision=r,i.rounding=e,o.times(.5))):new i(NaN)};M.inverseSine=M.asin=function(){var r,e,t,n,o=this,i=o.constructor;return o.isZero()?new i(o):(e=o.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(r=wt(i,t+4,n).times(.5),r.s=o.s,r):new i(NaN):(i.precision=t+6,i.rounding=1,o=o.div(new i(1).minus(o.times(o)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,o.times(2)))};M.inverseTangent=M.atan=function(){var r,e,t,n,o,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=jr)return s=wt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=jr)return s=wt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ee+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/ee),n=1,c=u.times(u),s=new l(u),o=u;r!==-1;)if(o=o.times(c),i=s.minus(o.div(n+=2)),o=o.times(c),s=i.plus(o.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===i.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),oe=!0,H(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&Ge(this.e/ee)>this.d.length-2};M.isNaN=function(){return!this.s};M.isNegative=M.isNeg=function(){return this.s<0};M.isPositive=M.isPos=function(){return this.s>0};M.isZero=function(){return!!this.d&&this.d[0]===0};M.lessThan=M.lt=function(r){return this.cmp(r)<0};M.lessThanOrEqualTo=M.lte=function(r){return this.cmp(r)<1};M.logarithm=M.log=function(r){var e,t,n,o,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(o=t[0];o%10===0;)o/=10;i=o!==1}if(oe=!1,a=m+p,s=jt(u,a),n=e?qo(l,a+10):jt(r,a),c=Pe(s,n,a,1),Wn(c.d,o=m,d))do if(a+=10,s=jt(u,a),n=e?qo(l,a+10):jt(r,a),c=Pe(s,n,a,1),!i){+De(c.d).slice(o+1,o+15)+1==1e14&&(c=H(c,m+1,0));break}while(Wn(c.d,o+=10,d));return oe=!0,H(c,m,d)};M.minus=M.sub=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.constructor;if(r=new y(r),!p.d||!r.d)return!p.s||!r.s?r=new y(NaN):p.d?r.s=-r.s:r=new y(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(u=p.d,d=r.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])r.s=-r.s;else if(u[0])r=new y(p);else return new y(c===3?-0:0);return oe?H(r,a,c):r}if(t=Ge(r.e/ee),l=Ge(p.e/ee),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ee),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,r.s=-r.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=Pt-1;--u[o],u[n]+=Pt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(r.d=u,r.e=Go(u,t),oe?H(r,a,c):r):new y(c===3?-0:0)};M.modulo=M.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?H(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=Pe(t,r.abs(),0,3,1),e.s*=r.s):e=Pe(t,r,0,n.modulo,1),e=e.times(r),oe=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return Hr(this)};M.naturalLogarithm=M.ln=function(){return jt(this)};M.negated=M.neg=function(){var r=new this.constructor(this);return r.s=-r.s,H(r)};M.plus=M.add=function(r){var e,t,n,o,i,s,a,c,u,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(u=m.d,l=r.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(r=new d(m)),oe?H(r,a,c):r;if(i=Ge(m.e/ee),n=Ge(r.e/ee),u=u.slice(),o=i-n,o){for(o<0?(t=u,o=-o,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/ee),s=i>s?i+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/Pt|0,u[o]%=Pt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=Go(u,n),oe?H(r,a,c):r};M.precision=M.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Ht+r);return t.d?(e=Es(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var r=this,e=r.constructor;return H(new e(r),r.e+1,e.rounding)};M.sine=M.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+ee,n.rounding=1,t=Pc(n,Us(n,t)),n.precision=r,n.rounding=e,H(vt>2?t.neg():t,r,e,!0)):new n(NaN)};M.squareRoot=M.sqrt=function(){var r,e,t,n,o,i,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(oe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=De(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=Ge((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(Pe(s,i,t+2,1)).times(.5),De(i.d).slice(0,t)===(e=De(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(H(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(H(n,c+1,1),r=!n.times(n).eq(s));break}return oe=!0,H(n,c,l.rounding,r)};M.tangent=M.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=Pe(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,H(vt==2||vt==4?t.neg():t,r,e,!0)):new n(NaN)};M.times=M.mul=function(r){var e,t,n,o,i,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=Ge(l.e/ee)+Ge(r.e/ee),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,s=c,c=u,u=s),i=[],s=c+u,n=s;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=i[o]+p[n]*d[o-n-1]+e,i[o--]=a%Pt|0,e=a/Pt|0;i[o]=(i[o]+e)%Pt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),r.d=i,r.e=Go(i,t),oe?H(r,m.precision,m.rounding):r};M.toBinary=function(r,e){return Jr(this,2,r,e)};M.toDecimalPlaces=M.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(nt(r,0,Zt),e===void 0?e=n.rounding:nt(e,0,8),H(t,r+t.e+1,e))};M.toExponential=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Kt(n,!0):(nt(r,0,Zt),e===void 0?e=o.rounding:nt(e,0,8),n=H(new o(n),r+1,e),t=Kt(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toFixed=function(r,e){var t,n,o=this,i=o.constructor;return r===void 0?t=Kt(o):(nt(r,0,Zt),e===void 0?e=i.rounding:nt(e,0,8),n=H(new i(o),r+o.e+1,e),t=Kt(n,!1,r+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};M.toFraction=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),i=e.e=Es(y)-p.e-1,s=i%ee,e.d[0]=Oe(10,s<0?ee+s:s),r==null)r=i>0?e:u;else{if(a=new f(r),!a.isInt()||a.lt(u))throw Error(Ht+a);r=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(De(y)),l=f.precision,f.precision=i=y.length*ee*2;m=Pe(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(r)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=Pe(r.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=Pe(u,n,i,1).minus(p).abs().cmp(Pe(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};M.toHexadecimal=M.toHex=function(r,e){return Jr(this,16,r,e)};M.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:nt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(oe=!1,t=Pe(t,r,0,e,1).times(r),oe=!0,H(t)):(r.s=t.s,t=r),t};M.toNumber=function(){return+this};M.toOctal=function(r,e){return Jr(this,8,r,e)};M.toPower=M.pow=function(r){var e,t,n,o,i,s,a=this,c=a.constructor,u=+(r=new c(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new c(Oe(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,r.eq(1))return H(a,n,i);if(e=Ge(r.e/ee),e>=r.d.length-1&&(t=u<0?-u:u)<=bc)return o=Ds(c,a,t,n),r.s<0?new c(1).div(o):H(o,n,i);if(s=a.s,s<0){if(e<r.d.length-1)return new c(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Oe(+a,u),e=t==0||!isFinite(t)?Ge(u*(Math.log("0."+De(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(oe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=Hr(r.times(jt(a,n+t)),n),o.d&&(o=H(o,n+5,1),Wn(o.d,n,i)&&(e=n+10,o=H(Hr(r.times(jt(a,e+t)),e),e+5,1),+De(o.d).slice(n+1,n+15)+1==1e14&&(o=H(o,n+1,0)))),o.s=s,oe=!0,c.rounding=i,H(o,n,i))};M.toPrecision=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Kt(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(nt(r,1,Zt),e===void 0?e=o.rounding:nt(e,0,8),n=H(new o(n),r,e),t=Kt(n,r<=n.e||n.e<=o.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toSignificantDigits=M.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(nt(r,1,Zt),e===void 0?e=n.rounding:nt(e,0,8)),H(new n(t),r,e)};M.toString=function(){var r=this,e=r.constructor,t=Kt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};M.truncated=M.trunc=function(){return H(new this.constructor(this),this.e+1,1)};M.valueOf=M.toJSON=function(){var r=this,e=r.constructor,t=Kt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function De(r){var e,t,n,o=r.length-1,i="",s=r[0];if(o>0){for(i+=s,e=1;e<o;e++)n=r[e]+"",t=ee-n.length,t&&(i+=Qt(t)),i+=n;s=r[e],n=s+"",t=ee-n.length,t&&(i+=Qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function nt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Ht+r)}function Wn(r,e,t,n){var o,i,s,a;for(i=r[0];i>=10;i/=10)--e;return--e<0?(e+=ee,o=0):(o=Math.ceil((e+1)/ee),e%=ee),i=Oe(10,ee-e),a=r[o]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==i||t>3&&a+1==i/2)&&(r[o+1]/i/100|0)==Oe(10,e-2)-1||(a==i/2||a==0)&&(r[o+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(r[o+1]/i/1e3|0)==Oe(10,e-3)-1,s}function Eo(r,e,t){for(var n,o=[0],i,s=0,a=r.length;s<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=Yr.indexOf(r.charAt(s++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function Ac(r,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/Xo(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),r.precision+=t,e=Bn(r,1,e.times(o),new r(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var Pe=function(){function r(n,o,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*o+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,o,i,s){var a,c;if(i!=s)c=i>s?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*s+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,s,a,c){var u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I,L,W,D=n.constructor,$=n.s==o.s?1:-1,G=n.d,q=o.d;if(!G||!G[0]||!q||!q[0])return new D(!n.s||!o.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?$*0:$/0);for(c?(p=1,l=n.e-o.e):(c=Pt,p=ee,l=Ge(n.e/p)-Ge(o.e/p)),L=q.length,R=G.length,g=new D($),h=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,i==null?(T=i=D.precision,s=D.rounding):a?T=i+(n.e-o.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,q=q[0],T++;(m<R||d)&&T--;m++)S=d*c+(G[m]||0),h[m]=S/q|0,d=S%q|0;y=d||m<R}else{for(d=c/(q[0]+1)|0,d>1&&(q=r(q,d,c),G=r(G,d,c),L=q.length,R=G.length),x=L,P=G.slice(0,L),k=P.length;k<L;)P[k++]=0;W=q.slice(),W.unshift(0),I=q[0],q[1]>=c/2&&++I;do d=0,u=e(q,P,L,k),u<0?(B=P[0],L!=k&&(B=B*c+(P[1]||0)),d=B/I|0,d>1?(d>=c&&(d=c-1),f=r(q,d,c),b=f.length,k=P.length,u=e(f,P,b,k),u==1&&(d--,t(f,L<b?W:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<k&&f.unshift(0),t(P,f,k,c),u==-1&&(k=P.length,u=e(q,P,L,k),u<1&&(d++,t(P,L<k?W:q,k,c))),k=P.length):u===0&&(d++,P=[0]),h[m++]=d,u&&P[0]?P[k++]=G[x]||0:(P=[G[x]],k=1);while((x++<R||P[0]!==void 0)&&T--);y=P[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,Ms=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,H(g,a?i+g.e+1:i,s,y)}return g}}();function H(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=ee,s=e,l=m[d=0],c=l/Oe(10,o-s-1)%10|0;else if(d=Math.ceil((i+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=ee,s=i-ee+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=ee,s=i-ee+o,c=s<0?0:l/Oe(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Oe(10,o-s-1)),u=t<4?(c||n)&&(t==0||t==(r.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/Oe(10,o-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=r.e+1,m[0]=Oe(10,(ee-e%ee)%ee),r.e=-e||0):m[0]=r.e=0,r;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Oe(10,ee-i),m[d]=s>0?(l/Oe(10,o-s)%Oe(10,s)|0)*a:0),u)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(r.e++,m[0]==Pt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Pt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function Kt(r,e,t){if(!r.isFinite())return qs(r);var n,o=r.e,i=De(r.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Qt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(r.e<0?"e":"e+")+r.e):o<0?(i="0."+Qt(-o-1)+i,t&&(n=t-s)>0&&(i+=Qt(n))):o>=s?(i+=Qt(o+1-s),t&&(n=t-o-1)>0&&(i=i+"."+Qt(n))):((n=o+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(i+="."),i+=Qt(n))),i}function Go(r,e){var t=r[0];for(e*=ee;t>=10;t/=10)e++;return e}function qo(r,e,t){if(e>gc)throw oe=!0,t&&(r.precision=t),Error(_s);return H(new r(Do),e,1,!0)}function wt(r,e,t){if(e>jr)throw Error(_s);return H(new r(Wo),e,t,!0)}function Es(r){var e=r.length-1,t=e*ee+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function Qt(r){for(var e="";r--;)e+="0";return e}function Ds(r,e,t,n){var o,i=new r(1),s=Math.ceil(n/ee+4);for(oe=!1;;){if(t%2&&(i=i.times(e),Os(i.d,s)&&(o=!0)),t=Ge(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Os(e.d,s)}return oe=!0,i}function Ls(r){return r.d[r.d.length-1]&1}function Ws(r,e,t){for(var n,o=new r(e[0]),i=0;++i<e.length;)if(n=new r(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function Hr(r,e){var t,n,o,i,s,a,c,u=0,l=0,m=0,d=r.constructor,p=d.rounding,y=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(oe=!1,c=y):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Oe(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=H(i.times(r),c,1),t=t.times(++l),a=s.plus(Pe(i,t,c,1)),De(a.d).slice(0,c)===De(s.d).slice(0,c)){for(o=m;o--;)s=H(s.times(s),c,1);if(e==null)if(u<3&&Wn(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return H(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function jt(r,e){var t,n,o,i,s,a,c,u,l,m,d,p=1,y=10,f=r,b=f.d,g=f.constructor,h=g.rounding,P=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(oe=!1,l=P):l=e,g.precision=l+=y,t=De(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=De(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return u=qo(g,l+2,P).times(i+""),f=jt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=P,e==null?H(f,P,h,oe=!0):f;for(m=f,c=s=f=Pe(f.minus(1),f.plus(1),l,1),d=H(f.times(f),l,1),o=3;;){if(s=H(s.times(d),l,1),u=c.plus(Pe(s,new g(o),l,1)),De(u.d).slice(0,l)===De(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(qo(g,l+2,P).times(i+""))),c=Pe(c,new g(p),l,1),e==null)if(Wn(c.d,l-y,h,a))g.precision=l+=y,u=s=f=Pe(m.minus(1),m.plus(1),l,1),d=H(f.times(f),l,1),o=a=1;else return H(c,g.precision=P,h,oe=!0);else return g.precision=P,c;c=u,o+=2}}function qs(r){return String(r.s*r.s/0)}function Zr(r,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<o){for(n&&r.d.push(+e.slice(0,n)),o-=ee;n<o;)r.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=o;for(;n--;)e+="0";r.d.push(+e),oe&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function wc(r,e){var t,n,o,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Fs.test(e))return Zr(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(fc.test(e))t=16,e=e.toLowerCase();else if(pc.test(e))t=2;else if(yc.test(e))t=8;else throw Error(Ht+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,o=Ds(n,new n(t),i,i*2)),u=Eo(e,t,Pt),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(r.s*0):(r.e=Go(u,l),r.d=u,oe=!1,s&&(r=Pe(r,o,a*4)),c&&(r=r.times(Math.abs(c)<54?Oe(2,c):qn.pow(2,c))),oe=!0,r)}function Pc(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Bn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Xo(5,t)),e=Bn(r,2,e,e);for(var o,i=new r(5),s=new r(16),a=new r(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(s.times(o).minus(a))));return e}function Bn(r,e,t,n,o){var i,s,a,c,u=1,l=r.precision,m=Math.ceil(l/ee);for(oe=!1,c=t.times(t),a=new r(n);;){if(s=Pe(a.times(c),new r(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=Pe(s.times(c),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function Xo(r,e){for(var t=r;--e;)t*=r;return t}function Us(r,e){var t,n=e.s<0,o=wt(r,r.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return vt=n?4:1,e;if(t=e.divToInt(o),t.isZero())vt=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return vt=Ls(t)?n?2:3:n?4:1,e;vt=Ls(t)?n?1:4:n?3:2}return e.minus(o).abs()}function Jr(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor,y=t!==void 0;if(y?(nt(t,1,Zt),n===void 0?n=p.rounding:nt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=qs(r);else{for(l=Kt(r),s=l.indexOf("."),y?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Eo(Kt(d),10,o),d.e=d.d.length),m=Eo(l,10,o),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(r=new p(r),r.d=m,r.e=i,r=Pe(r,d,t,n,0,o),m=r.d,i=r.e,u=Ms),s=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=Yr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=Eo(l,o,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=Yr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function Os(r,e){if(r.length>e)return r.length=e,!0}function hc(r){return new this(r).abs()}function kc(r){return new this(r).acos()}function Tc(r){return new this(r).acosh()}function Ic(r,e){return new this(r).plus(e)}function Bc(r){return new this(r).asin()}function xc(r){return new this(r).asinh()}function Sc(r){return new this(r).atan()}function Kc(r){return new this(r).atanh()}function Cc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=wt(this,i,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?wt(this,n,o):new this(0),t.s=r.s):!r.d||e.isZero()?(t=wt(this,i,1).times(.5),t.s=r.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(Pe(r,e,i,1)),e=wt(this,i,1),this.precision=n,this.rounding=o,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(Pe(r,e,i,1)),t}function Rc(r){return new this(r).cbrt()}function Lc(r){return H(r=new this(r),r.e+1,2)}function Oc(r,e,t){return new this(r).clamp(e,t)}function Nc(r){if(!r||typeof r!="object")throw Error(Uo+"Object expected");var e,t,n,o=r.defaults===!0,i=["precision",1,Zt,"rounding",0,8,"toExpNeg",-In,0,"toExpPos",0,In,"maxE",0,In,"minE",-In,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=Qr[t]),(n=r[t])!==void 0)if(Ge(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Ht+t+": "+n);if(t="crypto",o&&(this[t]=Qr[t]),(n=r[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(Vs);else this[t]=!1;else throw Error(Ht+t+": "+n);return this}function Mc(r){return new this(r).cos()}function _c(r){return new this(r).cosh()}function Gs(r){var e,t,n;function o(i){var s,a,c,u=this;if(!(u instanceof o))return new o(i);if(u.constructor=o,Ns(i)){u.s=i.s,oe?!i.d||i.e>o.maxE?(u.e=NaN,u.d=null):i.e<o.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;oe?s>o.maxE?(u.e=NaN,u.d=null):s<o.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[i]):(u.e=s,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return Zr(u,i.toString())}else if(c!=="string")throw Error(Ht+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Fs.test(i)?Zr(u,i):wc(u,i)}if(o.prototype=M,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=Nc,o.clone=Gs,o.isDecimal=Ns,o.abs=hc,o.acos=kc,o.acosh=Tc,o.add=Ic,o.asin=Bc,o.asinh=xc,o.atan=Sc,o.atanh=Kc,o.atan2=Cc,o.cbrt=Rc,o.ceil=Lc,o.clamp=Oc,o.cos=Mc,o.cosh=_c,o.div=Vc,o.exp=vc,o.floor=Fc,o.hypot=Ec,o.ln=Dc,o.log=Wc,o.log10=Uc,o.log2=qc,o.max=Gc,o.min=Xc,o.mod=zc,o.mul=Yc,o.pow=Qc,o.random=jc,o.round=Hc,o.sign=Zc,o.sin=Jc,o.sinh=$c,o.sqrt=el,o.sub=tl,o.sum=nl,o.tan=ol,o.tanh=rl,o.trunc=il,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return o.config(r),o}function Vc(r,e){return new this(r).div(e)}function vc(r){return new this(r).exp()}function Fc(r){return H(r=new this(r),r.e+1,3)}function Ec(){var r,e,t=new this(0);for(oe=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function Ns(r){return r instanceof qn||r&&r.toStringTag===vs||!1}function Dc(r){return new this(r).ln()}function Wc(r,e){return new this(r).log(e)}function qc(r){return new this(r).log(2)}function Uc(r){return new this(r).log(10)}function Gc(){return Ws(this,arguments,"lt")}function Xc(){return Ws(this,arguments,"gt")}function zc(r,e){return new this(r).mod(e)}function Yc(r,e){return new this(r).mul(e)}function Qc(r,e){return new this(r).pow(e)}function jc(r){var e,t,n,o,i=0,s=new this(1),a=[];if(r===void 0?r=this.precision:nt(r,1,Zt),n=Math.ceil(r/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)o=e[i],o>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)o=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(o%1e7),i+=4);i=n/4}else throw Error(Vs);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],r%=ee,n&&r&&(o=Oe(10,ee-r),a[i]=(n/o|0)*o);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ee)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<ee&&(t-=ee-n)}return s.e=t,s.d=a,s}function Hc(r){return H(r=new this(r),r.e+1,this.rounding)}function Zc(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Jc(r){return new this(r).sin()}function $c(r){return new this(r).sinh()}function el(r){return new this(r).sqrt()}function tl(r,e){return new this(r).sub(e)}function nl(){var r=0,e=arguments,t=new this(e[r]);for(oe=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return oe=!0,H(t,this.precision,this.rounding)}function ol(r){return new this(r).tan()}function rl(r){return new this(r).tanh()}function il(r){return H(r=new this(r),r.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var qn=M.constructor=Gs(Qr);Do=new qn(Do);Wo=new qn(Wo);var V=qn;import{PublicKey as oi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sl}from"@solana/spl-token";import{PublicKey as Te,SystemProgram as Xs,SYSVAR_RENT_PUBKEY as al}from"@solana/web3.js";function A({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var $r=[A({pubkey:sl,isWritable:!1}),A({pubkey:Xs.programId,isWritable:!1}),A({pubkey:al,isWritable:!1})];function ei({publicKey:r,transformSol:e}){let t=ti(r.toString());if(t instanceof Te)return e&&t.equals(Ne)?Z:t;if(e&&t.toString()===Ne.toBase58())return Z;if(typeof t=="string"){if(t===Te.default.toBase58())return Te.default;try{return new Te(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ti(r){try{return new Te(r)}catch{return r}}var zo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Yo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new Te("SysvarRent111111111111111111111111111111111"),ni=new Te("SysvarC1ock11111111111111111111111111111111"),xn=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Qo=new Te("Sysvar1nstructions1111111111111111111111111"),jo=Xs.programId,pp=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),fp=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),yp=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),bp=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),gp=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Ap=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),wp=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Pp=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),hp=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),kp=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Tp=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new Te("So11111111111111111111111111111111111111112"),Ne=Te.default;function ut(r){return ei({publicKey:r,transformSol:!0})}import{PublicKey as ul}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as zs}from"@solana/spl-token";var Ct={chainId:101,address:ul.default.toBase58(),programId:zs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Me={chainId:101,address:"So11111111111111111111111111111111111111112",programId:zs.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};var ri=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:s=!1}){if(e===Ne.toBase58()||e instanceof oi&&Ne.equals(e)){this.decimals=Me.decimals,this.symbol=Me.symbol,this.name=Me.name,this.mint=new oi(Me.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?oi.default:ei({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ie=ri;Ie.WSOL=new ri(F(C({},Me),{mint:Me.address}));import Zo from"big.js";import ml from"bn.js";import dl from"decimal.js-light";import cl from"toformat";var ll=cl,Un=ll;var Ho=ue("module/fraction"),ii=Un(Zo),Gn=Un(dl),pl={[0]:Gn.ROUND_DOWN,[1]:Gn.ROUND_HALF_UP,[2]:Gn.ROUND_UP},fl={[0]:Zo.roundDown,[1]:Zo.roundHalfUp,[2]:Zo.roundUp},pe=class{constructor(e,t=new ml(1)){this.numerator=J(e),this.denominator=J(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new pe(this.denominator,this.numerator)}add(e){let t=e instanceof pe?e:new pe(J(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.add(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof pe?e:new pe(J(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.sub(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof pe?e:new pe(J(e));return new pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof pe?e:new pe(J(e));return new pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Ho.logWithError(`${e} is not an integer.`),e<=0&&Ho.logWithError(`${e} is not positive.`),Gn.set({precision:e+1,rounding:pl[n]});let o=new Gn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Ho.logWithError(`${e} is not an integer.`),e<0&&Ho.logWithError(`${e} is negative.`),ii.DP=e,ii.RM=fl[n]||1,new ii(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var bl=ue("Raydium_price"),rt=class extends pe{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=o,this.scalar=new pe(si(n.decimals),si(o.decimals))}get raw(){return new pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new rt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&bl.logWithError("mul token not equals");let n=super.mul(t);return new rt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};var ai=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Jo=ai;Jo.SOL=new ai(Ct);import gl from"bn.js";var Ys=new pe(new gl(100)),Je=class extends pe{toSignificant(e=5,t,n){return this.mul(Ys).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Ys).toFixed(e,t,n)}};var pt=new it(0),js=new it(1),Pf=new it(2),hf=new it(3),kf=new it(5),ui=new it(10),Tf=new it(100),If=new it(1e3),Bf=new it(1e4),Qs=9007199254740991;function J(r){let e=ue("Raydium_parseBigNumberish");if(r instanceof it)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new it(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Qs||r<=-Qs)&&e.logWithError(`BigNumberish number overflow: ${r}`),new it(String(r))):typeof r=="bigint"?new it(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new it(0))}function si(r){return ui.pow(J(r))}function $o(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var wl=ue("Raydium_amount"),Zs=Un(Al);function Pl(r,e){let t="0",n="0";if(r.includes(".")){let o=r.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):wl.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var be=class extends pe{constructor(t,n,o=!0,i){let s=new er(0),a=ui.pow(new er(t.decimals));if(o)s=J(n);else{let c=new er(0),u=new er(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Pl(n.toString(),t.decimals);c=J(l),u=J(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ue(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Zs.DP=this.token.decimals,new Zs(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function Hs(r){return typeof r=="object"&&r!==null&&![Ie,be,hl,pe,kl,rt,Je].some(e=>typeof e=="object"&&r instanceof e)}function ke(r){return typeof r=="string"?ti(r):Array.isArray(r)?r.map(e=>ke(e)):Hs(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,ke(t)])):r}import{PublicKey as Yn,sendAndConfirmTransaction as di,Transaction as Qn,TransactionMessage as jn,VersionedTransaction as Hn}from"@solana/web3.js";import Ll from"axios";var v={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut"};import{PublicKey as $s,ComputeBudgetProgram as Js,Transaction as tr,TransactionMessage as Tl,Keypair as ea,VersionedTransaction as ta}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Il}from"@solana/spl-token";var Ft=ue("Raydium_txUtil"),na=1644;function nr(r){let e=[],t=[];return r.microLamports&&(e.push(Js.setComputeUnitPrice({microLamports:r.microLamports})),t.push(v.SetComputeUnitPrice)),r.units&&(e.push(Js.setComputeUnitLimit({units:r.units})),t.push(v.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Sn(r,e){var n,o;let t=e!=null?e:"confirmed";try{return((o=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:o.blockhash)||(await r.getRecentBlockhash(t)).blockhash}catch{return(await r.getRecentBlockhash(t)).blockhash}}function or(r,e){r.length<1&&Ft.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Ft.logWithError(`no signers provided:, ${e.toString()}`);let t=new tr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<na}catch{return!1}}async function oa(r,e,t,n=!0){let o=new $s("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new tr;s.feePayer=o;for(let u of e)or([...s.instructions,u],[o])||(i.push(s),s=new tr,s.feePayer=o),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await Bl(r,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Ft.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Ft.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Ft.debug("filteredLog:",c),l.length||Ft.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function ra(r,e){let t=r.match(/{["\w:,]+}/g);return!t||t.length!==1?Ft.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Et(r,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(r);return!n||n.length!==2?Ft.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ae(r,e){let[t,n]=$s.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}async function Bl(r,e,t){let n=[];if(t){let o=await r.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=o.blockhash,u.lastValidBlockHeight=o.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.map(u=>{let l=r._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await r._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async o=>await(await r.simulateTransaction(o)).value))}catch(o){o instanceof Error&&Ft.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:o.message})}return n}function Xn({instructions:r,payer:e,signers:t}){return or(r,[e,...t])}function zn({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=ea.generate().publicKey.toString()}){let i=new Tl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new ta(i).serialize()).toString("base64").length<na}catch{return!1}}var xl=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r);function an(r){let e=[];return r.forEach(t=>{t instanceof tr&&(t.recentBlockhash||(t.recentBlockhash=Il.toBase58()),t.feePayer||(t.feePayer=ea.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof ta&&(n=xl(n));let o=n.toString("base64");e.push(o)}),console.log("simulate tx string:",e),e}import{PublicKey as sa,AddressLookupTableAccount as rr}from"@solana/web3.js";import{PublicKey as ia}from"@solana/web3.js";import{MINT_SIZE as Sl,TOKEN_PROGRAM_ID as Kl,getTransferFeeConfig as Cl,unpackMint as Rl}from"@solana/spl-token";var ci=ue("Raydium_accountInfo_util");async function ht(r,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=li(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=li(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&ci.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&ci.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new ia(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&ci.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function _e(r,e,t){let n=await ht(r,e.map(o=>o.pubkey),t);return e.map((o,i)=>F(C({},o),{accountInfo:n[i]}))}async function Kn({connection:r,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await _e(r,e.map(c=>({pubkey:ut(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Sl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Rl(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=F(C({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Kl,feeConfig:(a=Cl(u))!=null?a:void 0})}return o[ia.default.toBase58()]=o[Z.toBase58()],o}async function mi({connection:r,address:e}){let t=await ht(r,[...new Set(e.map(o=>o.toString()))].map(o=>new sa(o))),n={};for(let o=0;o<e.length;o++){let i=t[o],s=e[o];if(!i)continue;let a=new rr({key:s,state:rr.deserialize(i.data)});n[s.toString()]=a,ir[s.toString()]=a}return n}var ir={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new rr({key:new sa("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:rr.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};var sr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Ll.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=nr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Yn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;let t=new Qn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=o||{},c=i!=null?i:await Sn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),an([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await di(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Sn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let P=await di(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(P)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((P,k)=>(P.recentBlockhash=f,a[k].length&&P.sign(...a[k]),P));an(g);let h=await this.signAllTransactions(g);if(m){let P=0,k=[],B=async()=>{if(!h[P])return;let T=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[P]}),d==null||d([...k]),P++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let P=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});P.push(B)}return{txIds:P,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var p;let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o}=d,i=Se(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:ir),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let y of a)s[y]===void 0&&c.push(new Yn(y));let u=await mi({connection:this.connection,address:c});for(let[y,f]of Object.entries(u))s[y]=f;let l=new jn({payerKey:this.feePayer,recentBlockhash:o?Yn.default.toBase58():await Sn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s));((p=this.owner)==null?void 0:p.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new Hn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var h;let{recentBlockHash:f,skipPreflight:b=!0,sendAndConfirm:g}=y||{};if(f&&(m.message.recentBlockhash=f),an([m]),(h=this.owner)!=null&&h.isKeyPair){let P=await this.connection.sendTransaction(m,{skipPreflight:b});if(g){let{lastValidBlockHeight:k,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:k,signature:P},"confirmed")}return{txId:P,signedTx:m}}if(this.signAllTransactions){let P=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(P[0],{skipPreflight:b}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),an(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:P,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:P,signature:h},"confirmed"),b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,h=[],P=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});h.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(k,B=>{let T=h.findIndex(S=>S.txId===k);T>-1&&(h[T].status=B.err?"error":"success"),d==null||d([...h]),B.err||P()},"processed"),this.connection.getSignatureStatus(k)};return P(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let P=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(P)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=Se(u,["computeBudgetConfig"]),o=t?nr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>F(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...o.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Yn(b));if(c.length<12&&Xn({instructions:p,payer:this.feePayer,signers:f})||Xn({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");Xn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new Qn().add(...o.instructions,...c)):s.push(new Qn().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);Xn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Qn().add(...o.instructions,...c)):s.push(new Qn().add(...c)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Sn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,P)=>{h.recentBlockhash=b,a[P].length&&h.sign(...a[P])}),an(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let P of s){let k=await di(this.connection,P,this.signers.find(B=>B.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(k)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let P=0,k=[],B=async()=>{if(!h[P])return;let T=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[P]}),p==null||p([...k]),P++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let P=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});P.push(B)}return{txIds:P,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:o=[]}=b,i=Se(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:ir),n),a=Array.from(new Set([...this.lookupTableAddress,...o])),c=[];for(let h of a)s[h]===void 0&&c.push(new Yn(h));let u=await mi({connection:this.connection,address:c});for(let[h,P]of Object.entries(u))s[h]=P;let l=t?nr(t):{instructions:[],instructionTypes:[]},m=await Sn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,P)=>F(C({},h),{[P.publicKey.toBase58()]:P}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let P=[...f,h],k=t?[...l.instructions,...P]:P;if(f.length<12&&zn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||zn({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let B={};for(let T of[...new Set(a)])s[T]!==void 0&&(B[T]=s[T]);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Hn(T))}else{let T=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Hn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[h]}}),f.length>0){let P=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Hn(k))}else{let k=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Hn(k))}y.push(P)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(P=>P.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:P,onTxUpdate:k,recentBlockHash:B,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),B&&(x.message.recentBlockhash=B)}),an(p),(S=this.owner)!=null&&S.isKeyPair){if(P){let x=[];for(let R of p){let I=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:W}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:W,lastValidBlockHeight:L,signature:I},"confirmed"),x.push(I)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(P){let R=0,I=[],L=async()=>{if(!x[R])return;let W=await this.connection.sendTransaction(x[R],{skipPreflight:T});I.push({txId:W,status:"sent",signedTx:x[R]}),k==null||k([...I]),R++,this.connection.onSignature(W,D=>{let $=I.findIndex(G=>G.txId===W);$>-1&&(I[$].status=D.err?"error":"success"),k==null||k([...I]),D.err||L()},"processed"),this.connection.getSignatureStatus(W)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let I=0;I<x.length;I+=1){let L=await this.connection.sendTransaction(x[I],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var kt=class{constructor(e){this._owner=e}get publicKey(){return kt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return kt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return kt.isKeyPair(this._owner)}get isPublicKey(){return kt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!kt.isKeyPair(e)}};function li(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var aa=r=>typeof r=="number";function ua(r,e,t){let n=aa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()<=n}function ca(r,e,t){let n=aa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()>n}import{PublicKey as me}from"@solana/web3.js";var la=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),ma=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Jn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),_y=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Vy=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),pi=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),da=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),vy=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),pa=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),fa=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Fy=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Ey=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Ol=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Nl=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ml=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),_l=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),ya=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Dy=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Wy=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Vl=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),vl=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Fl=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),$n={IDO_PROGRAM_ID_V1:Ol,IDO_PROGRAM_ID_V2:Nl,IDO_PROGRAM_ID_V3:Ml,IDO_PROGRAM_ID_V4:_l};var qy={SERUM_MARKET:me.default,OPENBOOK_MARKET:new me("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:me.default,FarmV3:new me("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new me("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new me("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new me("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new me("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new me("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new me("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Vl,CREATE_CPMM_POOL_AUTH:vl,CREATE_CPMM_POOL_FEE_ACC:Fl,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as El}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Dl}from"@solana/spl-token";function ge(r,e,t){return ae([r.toBuffer(),(t!=null?t:Dl).toBuffer(),e.toBuffer()],new El("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Tt from"bn.js";var eo=1e4;function he(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let o=F(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,s=new Tt(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===eo){let c=new Tt(i.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=to(r.mul(new Tt(eo)),new Tt(eo-i.transferFeeBasisPoints)),u=new Tt(i.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=to(l.mul(new Tt(i.transferFeeBasisPoints)),new Tt(eo)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=to(r.mul(new Tt(i.transferFeeBasisPoints)),new Tt(eo)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function Rt(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function to(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Tt(0))?t.add(new Tt(1)):t}var Le={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://token.jup.ag/{type}",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},fb=C({},Le);var ba="ray_tab_hash",fi="ray_req_hash",Wl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(ba);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(ba,r)),r},ar=async n=>{var o=n,{logCount:r=1e3,removeLastLog:e}=o,t=Se(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(fi)||"[]").slice(0,r-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(F(C({},t),{time:Date.now(),session:Wl()}));try{localStorage.setItem(fi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(fi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return ar(F(C({},t),{logCount:r,removeLastLog:!0}))}};var ur=ue("Raydium_Api"),yi=new Map;var cr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=ga.create({baseURL:this.urlConfigs.BASE_HOST||Le.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return ur.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(ur.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&ar({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),ur.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&ar({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),ur.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Le.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Le.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ga.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Le.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Le.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Le.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||Le.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Le.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Le.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Le.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>yi.has(s)?(n.push(yi.get(s)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Le.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{yi.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&ut(t).toBase58(),n&&n!=="undefined"?ut(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Le.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Le.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Le.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Le.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Le.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Le.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Le.JITO})).data}};var lr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Aa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as xi,TOKEN_PROGRAM_ID as tn,AccountLayout as Rn,TOKEN_2022_PROGRAM_ID as gm}from"@solana/spl-token";import{PublicKey as Ar,SystemProgram as Am}from"@solana/web3.js";var bi=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Be=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ue(t)}createTxBuilder(e){return this.scope.checkOwner(),new sr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(bi(e))}logInfo(...e){this.logger.info(bi(e))}logAndCreateError(...e){let t=bi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as mm,createCloseAccountInstruction as dm,createTransferInstruction as pm,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";import{PublicKey as fm,SystemProgram as ym}from"@solana/web3.js";import bm from"bn.js";import{PublicKey as Oa,Keypair as am}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as um}from"@solana/spl-token";import cm from"bn.js";import{PublicKey as em}from"@solana/web3.js";import Ta,{isBN as Ia}from"bn.js";import{bits as Ul,BitStructure as Qb,blob as Gl,Blob as jb,cstr as Hb,f32 as Zb,f32be as Jb,f64 as $b,f64be as eg,greedy as tg,Layout as Xl,ns64 as ng,ns64be as og,nu64 as zl,nu64be as rg,offset as ig,s16 as sg,s16be as ag,s24 as ug,s24be as cg,s32 as Yl,s32be as lg,s40 as mg,s40be as dg,s48 as pg,s48be as fg,s8 as yg,seq as Ql,struct as bg,Structure as jl,u16 as Hl,u16be as gg,u24 as Ag,u24be as wg,u32 as Zl,u32be as Pg,u40 as hg,u40be as kg,u48 as Tg,u48be as Ig,u8 as Jl,UInt as $l,union as Bg,Union as xg,unionLayoutDiscriminator as Sg,utf8 as Kg}from"@solana/buffer-layout";var mr=Xl,wa=jl;var gi=$l;var Pa=Jl,Lt=Hl;var Ai=Zl;var ha=zl;var We=Yl;var ka=Ql;var fe=Gl;var wi=Ul;var un=class extends mr{constructor(t,n,o){super(t,o);this.blob=fe(t),this.signed=n}decode(t,n=0){let o=new Ta(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new Ta(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},dr=class extends mr{constructor(t){super(8,t);this._lower=wi(Ai(),!1),this._upper=wi(Ai(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function E(r){return new gi(1,r)}function Xe(r){return new gi(4,r)}function w(r){return new un(8,!1,r)}function Q(r){return new un(16,!1,r)}function Ba(r){return new un(1,!0,r)}function fr(r){return new un(8,!0,r)}function xa(r){return new un(16,!0,r)}var pr=class extends mr{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(r){return new pr(fe(32),e=>new em(e),e=>e.toBuffer(),r)}function qe(r){return new pr(Pa(),tm,nm,r)}function tm(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function nm(r){return r?1:0}var Pi=class extends wa{decode(e,t){return super.decode(e,t)}};function _(r,e,t){return new Pi(r,e,t)}function X(r,e,t){let n,o=typeof e=="number"?e:Ia(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Ia(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,s)},set(i,s,a){return s==="count"&&(n=a),Reflect.set(i,s,a)}});return ka(r,o,t)}var Jt=_([K("mint"),K("owner"),w("amount"),Xe("delegateOption"),K("delegate"),E("state"),Xe("isNativeOption"),w("isNative"),w("delegatedAmount"),Xe("closeAuthorityOption"),K("closeAuthority")]);function om(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function hi(r,...e){if(!om(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function ki(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Sa(r,e){hi(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var br=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),It=(r,e)=>r<<32-e|r>>>e;var Ug=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function rm(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Ti(r){return typeof r=="string"&&(r=rm(r)),hi(r),r}var yr=class{clone(){return this._cloneInto()}},Gg={}.toString;function Ka(r){let e=n=>r().update(Ti(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function im(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+u,a,n)}var Ca=(r,e,t)=>r&e^~r&t,Ra=(r,e,t)=>r&e^r&t^e&t,gr=class extends yr{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=br(this.buffer)}update(e){ki(this);let{view:t,buffer:n,blockLen:o}=this;e=Ti(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=br(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ki(this),Sa(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;im(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=br(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var sm=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),$t=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),en=new Uint32Array(64),Ii=class extends gr{constructor(){super(64,32,8,!1),this.A=$t[0]|0,this.B=$t[1]|0,this.C=$t[2]|0,this.D=$t[3]|0,this.E=$t[4]|0,this.F=$t[5]|0,this.G=$t[6]|0,this.H=$t[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)en[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=en[m-15],p=en[m-2],y=It(d,7)^It(d,18)^d>>>3,f=It(p,17)^It(p,19)^p>>>10;en[m]=f+en[m-7]+y+en[m-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=It(a,6)^It(a,11)^It(a,25),p=l+d+Ca(a,c,u)+sm[m]+en[m]|0,f=(It(n,2)^It(n,13)^It(n,22))+Ra(n,o,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=o,o=n,n=p+f|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,i,s,a,c,u,l)}roundClean(){en.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var La=Ka(()=>new Ii);var aA=ue("Raydium_Util");function Na({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:s}of t.value){let a=Jt.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:ge(r,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),o.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Oa.default,amount:new cm(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function ze({fromPublicKey:r,programId:e=um}){let t=am.generate().publicKey.toBase58().slice(0,32);return{publicKey:lm(r,t,e),seed:t}}function lm(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),o=La(n);return new Oa(o)}function Bi(r){let{mint:e,tokenAccount:t,owner:n,programId:o=Cn}=r;return mm(t,e,n,o)}function Ot(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Cn}=r;return dm(e,t,o,n,i)}async function Dt(r){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Jt.span,n),c=J(t).add(new bm(a)),u=ze({fromPublicKey:o,programId:Cn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[ym.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Jt.span,programId:Cn}),Bi({mint:new fm(Me.address),tokenAccount:u.publicKey,owner:i,programId:Cn})],instructionTypes:[v.CreateAccount,v.InitAccount],endInstructionTypes:s?[]:[v.CloseAccount],endInstructions:s?[]:[Ot({tokenAccount:u.publicKey,payer:o,owner:i})]}}function no({source:r,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Cn}){return pm(r,e,t,BigInt(String(n)),o,i)}var oo=class extends Be{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return ge(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:tn},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:gm},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Na({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=tn,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!o||o&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Ar(t.tokenProgram||tn),m=this.getAssociatedTokenAccount(n,new Ar(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,P)=>h.accountInfo.amount.lt(P.accountInfo.amount)?1:-1);if(o===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=xi(s,m,s,n,l);if(u){let P=await this.scope.connection.getAccountInfo(m);if(P===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(v.CreateATA);else if(!(P.owner.equals(l)&&Rn.decode(P.data).mint.equals(n)&&Rn.decode(P.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(v.CreateATA);if(n.equals(Z)&&o.amount){let P=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(f=o.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...P.instructions||[]),p.endInstructions.push(...P.endInstructions||[]),p.instructionTypes.push(...P.instructionTypes||[]),p.endInstructionTypes.push(...P.endInstructionTypes||[]),o.amount&&(p.instructions.push(no({source:P.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:tn})),p.instructionTypes.push(v.TransferAmount))}return c||(p.endInstructions.push(Ot({owner:s,payer:o.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:m,instructionParams:p}}else{let h=ze({fromPublicKey:s,programId:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(Rn.span),k=Am.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:P+Number((g=(b=o.amount)==null?void 0:b.toString())!=null?g:0),space:Rn.span,programId:l});return p.instructions.push(k,Bi({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(v.CreateAccount),p.instructionTypes.push(v.InitAccount),c||(p.endInstructions.push(Ot({owner:s,payer:o.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=tn,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await xi(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[v.CreateATA],i=u}return o&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[Ot({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[v.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:s=tn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Ar(Z).equals(i)){let p=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=xi(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(tn)&&Rn.decode(f.data).mint.equals(i)&&Rn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[v.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=tn,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Ar(Z))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=l,p=Se(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=m,p=Se(m,["tokenAccount"]);c=d,u.addInstruction(p)}return C({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as Em}from"@solana/spl-token";import{PublicKey as ye,SystemProgram as Dm}from"@solana/web3.js";import{PublicKey as Da}from"@solana/web3.js";var Si=_([E("instruction")]),Ki=_([E("instruction")]),wm=_([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Q("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),Pm=_([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),Q("perShareReward"),w("lastSlot"),w("perSlotReward")]),hm=_([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),Q("perShareRewardA"),w("perSlotRewardA"),E("option"),K("rewardVaultB"),fe(7),w("totalRewardB"),Q("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),km=_([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Q("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(wm,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Ma=new Proxy(Pm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(r,e,t)}}),_a=new Proxy(hm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(r,e,t)}}),ro=new Proxy(km,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var s;return F(C({},i),{rewardType:((s=Object.entries(nn).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),Tm=_([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Ci=_([E("instruction"),w("nonce"),X(Tm,5,"rewardTimeInfo")]),Ri=_([E("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Li=_([E("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),EA=_([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),io=_([w("state"),K("id"),K("owner"),w("deposited"),X(Q(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),DA=_([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),Va=_([w("state"),K("id"),K("owner"),w("deposited"),X(Q(),2,"rewardDebts"),X(w(),17)]),va=_([w(),w("state"),K("id"),K("owner"),w("deposited"),X(Q(),5,"rewardDebts"),X(w(),16)]),$e=_([E("instruction"),w("amount")]),Im=_([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Ba("digitShift"),X(E(),7,"reserved1"),X(w(),7,"reserved2")]),Fa=_([fe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(E(),32,"reserved1"),X(Im,4,"votingMints"),fr("timeOffset"),E("bump"),X(E(),7,"reserved2"),X(w(),11,"reserved3")]),Bm=_([fr("startTime"),fr("endTime"),E("kind"),X(E(),15,"reserved")]),xm=_([X(Bm,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),E("votingMintConfigIdx"),X(E(),29,"reserved")]),Ea=_([fe(8),K("voterAuthority"),K("registrar"),X(xm,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),X(E(),94,"reserved")]);var QA=ue("Raydium_farm_config"),Wa=new Da("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),qa=new Da("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Ua={3:Ma,5:_a,6:ro},Ga={3:io,5:Va,6:va},Oi=r=>[3,5,6].indexOf(r)!==-1,Ni=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(s=i[e])==null?void 0:s.call(i)},nn={"Standard SPL":0,"Option tokens":1},ft={[la.toString()]:3,[ma.toString()]:5,[Jn.toString()]:6};import{PublicKey as ie,SystemProgram as cn,SYSVAR_RENT_PUBKEY as Cm,SYSVAR_CLOCK_PUBKEY as uo,TransactionInstruction as ve}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Rm,TOKEN_PROGRAM_ID as ct,ASSOCIATED_TOKEN_PROGRAM_ID as Lm}from"@solana/spl-token";import wr from"bn.js";function Mi(r,e,t){return ae([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],r)}function _i(r,e){return ae([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],r)}function Vi(r,e){return ae([e.toBuffer()],r)}function vi(r,e,t){return ae([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],r)}function Fi(r,e,t){return ae([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],r)}function Ei(r,e,t,n){return ae([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}import st from"bn.js";var so=ue("Raydium.farm.util");function ao({programId:r,poolId:e,mint:t,type:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return o}function Ye({programId:r,poolId:e,owner:t,version:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return o}var Xa=({programId:r,poolId:e})=>ae([e.toBuffer()],r);function za(r){return{isSet:new st(1),rewardPerSecond:J(r.perSecond),rewardOpenTime:J(r.openTime),rewardEndTime:J(r.endTime),rewardType:J(nn[r.rewardType])}}function Di(r){return J(r.endTime).sub(J(r.openTime)).mul(J(r.perSecond))}function Ln(r){let e=Ga[r];return e||so.logWithError("invalid version",r),e}function Sm(r){let e=Ua[r];return e||so.logWithError("invalid version",r),e}function Km(r,e,t,n){if(r.version===3||r.version===5){if(r.lastSlot.gte(new st(t)))return r;let o=new st(t).sub(r.lastSlot);r.lastSlot=new st(t);for(let i of r.rewardInfos){if(e.amount.eq(new st(0)))continue;let s=i.perSlotReward.mul(o);i.perShareReward=i.perShareReward.add(s.mul(new st(10).pow(new st(r.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(r.version===6)for(let o of r.rewardInfos){if(o.rewardState.eq(new st(0)))continue;let i=st.min(new st(n),o.rewardEndTime);if(o.rewardOpenTime.gte(i))continue;let a=i.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),c=o.totalReward.sub(o.totalRewardEmissioned);c.lt(a)?(a=c,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(c.div(o.rewardPerSecond))):o.rewardLastUpdateTime=i,!e.amount.eq(new st(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(r.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return r}async function mw({connection:r,farmPools:e,owner:t,config:n,chainTime:o}){let i=!1,s=!1,a=new st(10),c=[];for(let d of e){let p=ke(d);p.version===6?s=!0:i=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:Ye({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await _e(r,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=C({},u[g]),y==="state"){let h=Sm(p);(!b||!b.data||b.data.length!==h.span)&&so.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=h.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Jt.span)&&so.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=Jt.decode(b.data);else if(y==="ledger"){let h=Ln(p);b&&b.data&&(b.data.length!==h.span&&so.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=h.decode(b.data))}}let m=s||i?await r.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Km(u[d].state,u[d].lpVault,m,o));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new st(9)):a.pow(new st(15)),b=p.rewardInfos.map((g,h)=>{let P=y.rewardDebts[h];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(P)});u[d].wrapped=F(C({},u[d].wrapped),{pendingRewards:b})}return u}function dw(r,e=Date.now()){if(r.version===6){let t=r.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>ua(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ca(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=r.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Wi(r,e,t,n){let o=await r.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let s=Fa.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await r.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=Ea.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Om=ue("Raydium_farm_instruction"),co={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function lo(r){let{version:e,id:t,ledger:n,programId:o,owner:i}=r,s={3:9,5:10}[e];s||Om.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Si.span);Si.encode({instruction:s},a);let c=[A({pubkey:t}),A({pubkey:n}),A({pubkey:i,isWritable:!1}),A({pubkey:cn.programId,isWritable:!1}),A({pubkey:Cm,isWritable:!1})];return{instruction:new ve({programId:o,keys:c,data:a}),instructionType:v.FarmV3CreateLedger}}function Ya(r){var n;let e=Buffer.alloc(Ci.span);Ci.encode({instruction:0,nonce:new wr(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...$r,A({pubkey:r.farmId}),A({pubkey:r.farmAuthority,isWritable:!1}),A({pubkey:r.lpVault}),A({pubkey:r.lpMint,isWritable:!1}),A({pubkey:r.lockVault}),A({pubkey:r.lockMint,isWritable:!1}),A({pubkey:(n=r.lockUserAccount)!=null?n:Ne}),A({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let o of r.rewardInfo)t.push(A({pubkey:o.rewardMint,isWritable:!1}),A({pubkey:o.rewardVault}),A({pubkey:o.userRewardToken}));return{instruction:new ve({programId:r.programId,keys:t,data:e}),instructionType:v.FarmV6Create}}function Qa(r){let e=Buffer.alloc(Ki.span);Ki.encode({instruction:5},e);let t=[A({pubkey:ct,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.authority,isWritable:!1}),A({pubkey:r.lpVault,isWritable:!1}),A({pubkey:r.rewardVault}),A({pubkey:r.userRewardToken}),A({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new ve({programId:r.programId,keys:t,data:e}),instructionType:v.FarmV6CreatorWithdraw}}function Nm(r,e,t,n,o,i,s,a,c,u,l,m,d){let p=_([E("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...co.voterStakeRegistryDeposit,...f]);return new ve({keys:y,programId:r,data:b})}function Mm(r,e,t,n){let o=_([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([...co.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new ve({keys:i,programId:r,data:a})}function _m(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([E("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let h=Buffer.from([...co.voterStakeRegistryWithdraw,...g]);return new ve({keys:b,programId:r,data:h})}function Vm(r,e,t,n,o,i){let s=_([E("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new ve({keys:a,programId:r,data:c})}function vm(r,e,t,n,o,i,s,a){let c=_([E("voterBump"),E("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...co.voterStakeRegistryCreateVoter,...l]);return new ve({keys:u,programId:r,data:m})}function Fm(r,e,t,n,o,i,s,a,c,u,l,m){let d=_([E("depositEntryIndex"),E("kind"),E("option"),w("startTs"),Xe("periods"),qe("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:cn.programId,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:Lm,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...co.voterStakeRegistryCreateDepositEntry,...y]);return new ve({keys:p,programId:r,data:f})}async function Cw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Mi(n,o,i).publicKey,l=Ye({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new wr(0)))throw Error("user do not has new stake amount");let y=_i(e,a).publicKey,f=Vi(e,a).publicKey,{publicKey:b,nonce:g}=vi(n,u,s),h=ge(b,y,c).publicKey,{publicKey:P,nonce:k}=Fi(n,u,s),B=Ei(t,o,i,s).publicKey,T=[],S=ge(s,y,c).publicKey;if(await r.getAccountInfo(S)===null&&T.push(Rm(s,S,s,y)),await r.getAccountInfo(b)===null){let W=Vm(t,o,s,i,s,B);T.push(W,vm(n,u,b,P,s,s,g,k))}let{index:I,isInit:L}=await Wi(r,u,b,y);return L||T.push(Fm(n,u,b,h,s,s,y,I,0,void 0,0,!1)),T.push(Nm(n,u,b,h,S,s,l,a,y,f,e,I,p),Mm(n,u,b,P)),T}async function Rw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Mi(n,o,i).publicKey,l=Ye({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data);if(d.voteLockedBalance.eq(new wr(0)))throw Error("user has vote locked balance = 0");let p=_i(e,a).publicKey,y=Vi(e,a).publicKey,{publicKey:f}=vi(n,u,s),b=ge(f,p,c).publicKey,{publicKey:g}=Fi(n,u,s),h=Ei(t,o,i,s).publicKey,P=[],{index:k,isInit:B}=await Wi(r,u,f,p);if(!B)throw Error("deposit entry index check error");return P.push(_m(n,u,f,s,h,g,b,ge(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),P}function qi({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(Ri.span);Ri.encode({instruction:3,rewardReopenTime:J(o.openTime),rewardEndTime:J(o.endTime),rewardPerSecond:J(o.perSecond)},i);let s=[A({pubkey:ct,isWritable:!1}),A({pubkey:n.id}),A({pubkey:n.lpVault,isWritable:!1}),A({pubkey:e}),A({pubkey:t}),A({pubkey:r,isWritable:!1,isSigner:!0})];return new ve({programId:n.programId,keys:s,data:i})}function Ui({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(Li.span);Li.encode({instruction:4,isSet:new wr(1),rewardPerSecond:J(o.perSecond),rewardOpenTime:J(o.openTime),rewardEndTime:J(o.endTime),rewardType:J(nn[o.rewardType])},i);let s=[...$r,A({pubkey:t.id}),A({pubkey:t.authority,isWritable:!1}),A({pubkey:o.mint,isWritable:!1}),A({pubkey:n}),A({pubkey:e}),A({pubkey:r,isWritable:!1,isSigner:!0})];return new ve({programId:t.programId,keys:s,data:i})}function Lw(r){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=r,[l,m]=[new ie(e.programId),new ie(e.id)],d=Ye({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc($e.span);$e.encode({instruction:a,amount:c},p);let y=n===6?[A({pubkey:ct,isWritable:!1}),...u?[A({pubkey:cn.programId,isWritable:!1})]:[],A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:o})]:[A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:o}),A({pubkey:new ie(t.lpVault)}),A({pubkey:i[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(A({pubkey:i[f]})),y.push(A({pubkey:new ie(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(A({pubkey:new ie(t.rewardInfos[f].vault)})),y.push(A({pubkey:i[f]}));return new ve({programId:l,keys:y,data:p})}function mo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new ie(e.programId),new ie(e.id)],u=Ye({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:2,amount:J(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:o[d]}));return new ve({programId:a,keys:m,data:l})}function po(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:12,amount:J(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:o[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function fo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:J(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function ja(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:10,amount:J(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function Ha(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:J(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:o[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function Za(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new ie(e.programId),new ie(e.id)],u=Ye({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:1,amount:J(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:cn.programId,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:o[d]}));return new ve({programId:a,keys:m,data:l})}var yo=class extends Be{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ne)){let n=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Di(F(C({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Jn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ye(e.lpMint.address),lockInfo:{lockMint:Wa,lockVault:qa},version:6,rewardInfos:t,programId:o},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=ze({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ro.span);c.addInstruction({instructions:[Dm.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ro.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Xa({programId:new ye(a.programId),poolId:l.publicKey}),y=ao({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(nn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(za(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Ne)?new ye(Me.address):B.mint;b.push({rewardMint:x,rewardVault:ao({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new ye(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&c.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:k}=Ya({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[P],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o}){var b;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Ne)?new ye(Me.address):n.mint,l=a.rewardInfos.findIndex(g=>new ye(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:Ne,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[qi({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[v.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o}){var l;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Ne)?new ye(Me.address):m.mint,p=a.rewardInfos.findIndex(P=>new ye(P.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Ne,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=qi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[h],instructionTypes:[v.FarmV6Restart]})}return u.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=o.mint.equals(Ne)?new ye(Me.address):o.mint,m=ao({programId:new ye(n.programId),poolId:new ye(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:o,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,u.addInstruction({instructions:[Ui({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:o})],instructionTypes:[v.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of o){let m=l.mint.equals(Ne)?new ye(Me.address):l.mint,d=ao({programId:new ye(n.programId),poolId:new ye(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Ui({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(C({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[v.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ft[d];Oi(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ye(n.programId),new ye(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Ye({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let P={};for(let D of this.scope.account.tokenAccounts)if(a){let $=ge(this.scope.ownerPubKey,D.mint,D.programId).publicKey;D.publicKey&&$.equals(D.publicKey)&&(P[D.mint.toString()]=D.publicKey)}else P[D.mint.toString()]=D.publicKey;let k=b.lpMint,B=P[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",P);let T=[];for(let D of m){let $=s&&D.mint.address===Z.toString(),G=P[D.mint.address];if(!G){let{account:q,instructionParams:Ze}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new ye(D.mint.address),notUseTokenAccount:$,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!$,associatedOnly:$?!1:a,checkCreateATAOwner:c});G=q,Ze&&h.addInstruction(Ze)}P[D.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Ln(p).decode(x.data)),n.programId!==Jn.toString()&&!S){let{instruction:D,instructionType:$}=lo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[D],instructionTypes:[$]})}let R=Ni({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:J(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(D=>new ye(D))},L=p===6?Za(I):p===5?Ha(I):ja(I),W={3:v.FarmV3Deposit,5:v.FarmV5Deposit,6:v.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[W[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=ft[n.programId];Oi(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(c){let I=ge(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&I.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=Ye({programId:new ye(n.programId),poolId:new ye(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);if(I)Ln(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:W}=lo({id:new ye(y.id),programId:new ye(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[W]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I})}let g=y.lpMint.address,h=s&&g===Z.toString(),P=b[g.toString()];if(!P){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ye(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:c,checkCreateATAOwner:u});P=R,I&&f.addInstruction(I)}b[g.toString()]=P;let k=[];for(let R of d){let I=s&&R.mint.address===Z.toString(),L=b[R.mint.address];if(!L){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new ye(R.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:c,checkCreateATAOwner:u});L=W,D&&f.addInstruction(D)}b[R.mint.address]=L,k.push(L)}let B=Ni({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:J(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:P,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new ye(R))},S=p===6?mo(T):p===5?po(T):fo(T),x={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let o=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Ne.toString()?new ye(Me.address):t),a=o.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Ne,u=this.createTxBuilder(),l;if(t.equals(Ne)){let y=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Di(F(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new V(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[Em(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[v.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Qa({programId:o.programId,id:o.id,authority:o.authority,lpVault:o.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=ge(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,P=ft[f],k=b.address,B=n&&k===Z.toString(),T=m[k];if(!T){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ye(k),notUseTokenAccount:B,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=W,D&&l.addInstruction(D)}m[k.toString()]=T;let S=[];for(let W of g){let D=n&&W.mint.address===Z.toString(),$=m[W.mint.address];if(!$){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new ye(W.mint.address),notUseTokenAccount:D,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!D,associatedOnly:D?!1:i,checkCreateATAOwner:s});$=G,q&&l.addInstruction(q)}m[W.mint.address]=$,S.push($)}let x=p[h],R={amount:pt,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(W=>new ye(W))},I=P===6?mo(R):P===5?po(R):fo(R),L={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[L[P]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as je}from"@solana/web3.js";import{AccountLayout as Sd,NATIVE_MINT as _u,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";var eP=_([Xe("mintAuthorityOption"),K("mintAuthority"),w("supply"),E("decimals"),E("isInitialized"),Xe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Wm}from"@solana/web3.js";import{MintLayout as Ja,TOKEN_PROGRAM_ID as qm}from"@solana/spl-token";var lP=async({connection:r,mint:e})=>{let t=await r.getAccountInfo(new Wm(e));return!t||t.data.length!==Ja.span?void 0:Ja.decode(t.data)},mP=({mint:r,decimals:e,programId:t=qm,logoURI:n="",priority:o=3})=>{let i=r.toBase58().substring(0,6);return{address:r.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:o}},Pr=r=>new Ie({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),bo=o=>{var i=o,{amount:r,isRaw:e,name:t}=i,n=Se(i,["amount","isRaw","name"]);return new be(new Ie({mint:ut(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};function dP(r){return r.address===Ct.address?Me:r}function pP(r){return r.address===Me.address?Ct:r}var et=o=>{var i=o,{address:r,programId:e,decimals:t}=i,n=Se(i,["address","programId","decimals"]);return C({chainId:101,address:ut(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},on=r=>r?F(C({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:F(C({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(C({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as Mn,ASSOCIATED_TOKEN_PROGRAM_ID as nd}from"@solana/spl-token";import{PublicKey as Ae,TransactionInstruction as Wt,SystemProgram as su,SYSVAR_RENT_PUBKEY as od}from"@solana/web3.js";var Gi=_([E("instruction"),w("amountIn"),w("minAmountOut")]),Xi=_([E("instruction"),w("maxAmountIn"),w("amountOut")]),BP=_([E("instruction"),E("nonce")]),zi=_([E("instruction"),E("nonce"),w("startTime")]),go=_([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),w("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),w("lpReserve"),X(w(),3,"padding")]),Um=_([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(w(),64,"padding")]),Yi=_([E("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Qi=_([E("instruction"),w("amountIn")]),xP={4:go,5:Um},$a=_([w("fee")]);import{PublicKey as Gm}from"@solana/web3.js";var Nn=new Gm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),mn=5e4,Xm=_([w("x"),w("y"),w("price")]),zm=_([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(Xm,mn,"DataElement")]);function Ym(r,e){return[0,mn-2]}function Qm(r){return[0,mn-2]}function jm(r){return[0,mn-2]}function Hm(r,e,t){let[n,o]=Ym(e,t),i=n,s=o,a=0,c=e*r.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=mn-2)return[a,a,!1];let u=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function ji(r,e,t){let[n,o,i]=Hm(r,e,t);if(!i)return 0;if(n===o){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,c=r.DataElement[o].x,u=r.DataElement[o].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*r.multiplier*l/p}}function ln(r,e,t){return e*r.multiplier/t}function eu(r,e,t){return e*t/r.multiplier}function Zm(r,e){let[t,n]=Qm(e),o=t,i=n,s=0,a=e;for(;o<i;){if(s=Math.floor((i+o)/2),s<=0||s>mn-2)return[s,s,!1];let c=r.DataElement[s].x,u=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)i=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];o=s+1}}return[s,s,!1]}function Jm(r,e){let[t,n]=jm(e),o=t,i=n,s=0,a=e;for(;o<=i;){if(s=Math.floor((i+o)/2),s<=0||s>=mn-2)return[s,s,!1];let c=r.DataElement[s].y,u=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)o=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function tu(r,e,t,n){let o=n?e+t:e-t,[i,s,a]=Zm(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(o-c)*r.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-o)*r.multiplier/l),[y,f,!1,a]}}}function $m(r,e,t,n){let o=n?e-t:e+t,[i,s,a]=Jm(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-o)/r.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(o-p)/r.multiplier),[y,f,!1,a]}}}function ed(r,e){let t=tu(r,e,0,!1);return t[3]?t[0]:0}function nu(r,e,t,n){let o=ji(r,e,t),i=ln(r,e,o),s=ln(r,t,o),a=ln(r,n,o),c=!0,[u,l,m,d]=tu(r,i,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return eu(r,p,o)}}function ou(r,e,t,n){let o=ji(r,e,t),i=ln(r,e,o),s=ln(r,t,o),a=ln(r,n,o),c=!1,[u,l,m,d]=$m(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=i-l;return eu(r,p,o)}}function td(r){let e=zm.decode(r);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function ru(r,e,t,n){let o=ed(r,ln(r,e,ji(r,e,t)))/r.multiplier;return n?o:1/o}var On=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(Nn);e&&(this._layoutData=td(e==null?void 0:e.data))}}};var iu=ue("Raydium_liquidity_instruction");function au(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:s}=r,a=Buffer.alloc(Yi.span);Yi.encode({instruction:3,baseAmountIn:J(o),quoteAmountIn:J(i),fixedSide:s==="base"?pt:js},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:new Ae(e.id)}),A({pubkey:new Ae(t.authority),isWritable:!1}),A({pubkey:new Ae(t.openOrders),isWritable:!1}),A({pubkey:new Ae(t.targetOrders)}),A({pubkey:new Ae(e.lpMint.address)}),A({pubkey:new Ae(t.vault.A)}),A({pubkey:new Ae(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(A({pubkey:Nn})),c.push(A({pubkey:new Ae(e.marketId),isWritable:!1}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:new Ae(t.marketEventQueue),isWritable:!1})),new Wt({programId:new Ae(e.programId),keys:c,data:a})}function Hi(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:o}=r,i=ke(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Qi.span);Qi.encode({instruction:4,amountIn:J(o)},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.mintLp.address}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return s===5?c.push(A({pubkey:Nn})):(c.push(A({pubkey:i.id})),c.push(A({pubkey:i.id}))),c.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks})),new Wt({programId:i.programId,keys:c,data:a})}return new Wt({programId:i.programId,keys:[]})}function uu({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:P,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=_([E("instruction"),E("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:Mn,isSigner:!1,isWritable:!1},{pubkey:nd,isSigner:!1,isWritable:!1},{pubkey:su.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:P,coinAmount:k,pcAmount:B},I),{instruction:new Wt({keys:R,programId:r,data:I}),instructionType:v.AmmV4CreatePool}}function qP(r){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new Ae(r.id),isWritable:!1}),A({pubkey:new Ae(r.authority),isWritable:!1}),A({pubkey:new Ae(r.openOrders),isWritable:!1}),A({pubkey:new Ae(r.vault.A),isWritable:!1}),A({pubkey:new Ae(r.vault.B),isWritable:!1}),A({pubkey:new Ae(r.mintLp.address),isWritable:!1}),A({pubkey:new Ae(r.marketId),isWritable:!1}),A({pubkey:new Ae(r.marketEventQueue),isWritable:!1})];return new Wt({programId:new Ae(r.programId),keys:n,data:t})}function rd({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},o){let i=ke(r),s=Buffer.alloc(Gi.span);Gi.encode({instruction:9,amountIn:J(t),minAmountOut:J(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders})];return o===4&&a.push(A({pubkey:i.targetOrders})),a.push(A({pubkey:i.vault.A}),A({pubkey:i.vault.B})),o===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1})),new Wt({programId:i.programId,keys:a,data:s})}function id({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},o){let i=ke(r),s=Buffer.alloc(Xi.span);Xi.encode({instruction:11,maxAmountIn:J(t),amountOut:J(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return o===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Wt({programId:i.programId,keys:a,data:s})}function hr(r){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return rd(F(C({},a),{amountIn:o,minAmountOut:i}),t);if(s==="out")return id(F(C({},a),{maxAmountIn:o,amountOut:i}),t);iu.logWithError("invalid params","params",r)}throw iu.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function UP({poolKeys:r,userKeys:e,startTime:t}){let n=Buffer.alloc(zi.span);zi.encode({instruction:0,nonce:5,startTime:J(t)},n);let o=ke(r),i=[A({pubkey:Mn,isWritable:!1}),A({pubkey:su.programId,isWritable:!1}),A({pubkey:od,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.authority,isWritable:!1}),A({pubkey:o.openOrders}),A({pubkey:o.mintLp.address}),A({pubkey:o.mintA.address,isWritable:!1}),A({pubkey:o.mintB.address,isWritable:!1}),A({pubkey:o.vault.A,isWritable:!1}),A({pubkey:o.vault.B,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.targetOrders}),A({pubkey:e.lpTokenAccount}),A({pubkey:o.id,isWritable:!1}),A({pubkey:o.marketProgramId,isWritable:!1}),A({pubkey:o.marketId,isWritable:!1}),A({pubkey:e.payer,isSigner:!0})];return new Wt({programId:o.programId,keys:i,data:n})}function cu({poolKeys:r}){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new Ae(r.id),isWritable:!1}),A({pubkey:new Ae(r.authority),isWritable:!1}),A({pubkey:new Ae(r.openOrders),isWritable:!1}),A({pubkey:new Ae(r.vault.A),isWritable:!1}),A({pubkey:new Ae(r.vault.B),isWritable:!1}),A({pubkey:new Ae(r.mintLp.address),isWritable:!1}),A({pubkey:new Ae(r.marketId),isWritable:!1}),A({pubkey:new Ae(r.marketEventQueue),isWritable:!1})];return{instruction:new Wt({programId:new Ae(r.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as Ue,TOKEN_2022_PROGRAM_ID as rn,ASSOCIATED_TOKEN_PROGRAM_ID as Su}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as xt,SystemProgram as _n,Keypair as is}from"@solana/web3.js";import Ku from"bn.js";import bd from"bn.js";function lu(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function XP(r){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,r,!1),new Uint8Array(e)}function zP(r){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,r,!1),new Uint8Array(e)}function kr(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Zi(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Ji(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function Ao(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function mu(r,e){return Ao(r,e)?null:Zi(r,e)}function du(r,e){return Ao(r,e)?null:Ji(r,e)}var sd=Buffer.from("amm_config","utf8"),ad=Buffer.from("pool","utf8"),ud=Buffer.from("pool_vault","utf8"),cd=Buffer.from("pool_reward_vault","utf8"),pu=Buffer.from("position","utf8"),ld=Buffer.from("tick_array","utf8"),md=Buffer.from("operation","utf8"),dd=Buffer.from("pool_tick_array_bitmap_extension","utf8");function HP(r,e){return ae([sd,lu(e)],r)}function fu(r,e,t,n){return ae([ad,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function $i(r,e,t){return ae([ud,e.toBuffer(),t.toBuffer()],r)}function yu(r,e,t){return ae([cd,e.toBuffer(),t.toBuffer()],r)}function we(r,e,t){return ae([ld,e.toBuffer(),kr(t)],r)}function dn(r,e,t,n){return ae([pu,e.toBuffer(),kr(t),kr(n)],r)}function yt(r,e){return ae([pu,e.toBuffer()],r)}function Tr(r){return ae([Buffer.from("metadata","utf8"),xn.toBuffer(),r.toBuffer()],xn)}function wo(r){return ae([md],r)}function lt(r,e){return ae([dd,e.toBuffer()],r)}import bt from"bn.js";var de=new bt(0),mt=new bt(1),qt=new bt(-1),dt=new bt(1).shln(64),Ir=new bt(1).shln(128),es=dt.sub(mt),Po=64,bu=Ir.subn(1),Qe=-443636,tt=-Qe,Nt=new bt("4295048016"),Mt=new bt("79226673521066979257578248091"),Br=new bt("4295048017"),xr=new bt("79226673521066979257578248090"),gu=16,Au="59543866431248",wu="184467440737095516",Pu="15793534762490258745",Sr=new bt(10).pow(new bt(6)),pd=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(pd||{}),$P={[500]:10,[3e3]:60,[1e4]:200},eh={version:6,liquidity:de,tickCurrent:0,observationIndex:0,observationUpdateDuration:0,feeGrowthGlobalX64A:de,feeGrowthGlobalX64B:de,protocolFeesTokenA:de,protocolFeesTokenB:de,swapInAmountTokenA:de,swapOutAmountTokenB:de,swapInAmountTokenB:de,swapOutAmountTokenA:de,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},hu={tvl:0,volumeQuote:0,mintAmountA:0,mintAmountB:0,rewardDefaultInfos:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,day:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},week:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},month:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},pooltype:[]},th=new bt("18446744073700000000");var fd=15,le=class{static async getTickArrays(e,t,n,o,i,s,a){let c=[],u=j.getTickArrayStartIndexByTick(o,i),l=j.getInitializedTickArrayInRange(s,a,i,u,Math.floor(fd/2));for(let p=0;p<l.length;p++){let{publicKey:y}=we(t,n,l[p]);c.push(y)}let m=(await ht(e,c)).map(p=>p!==null?ho.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(C({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,i,s),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,i){let s=Math.floor(e/le.tickCount(t)),a=n?j.searchLowBitFromStart(o,i,s-1,1,t):j.searchHightBitFromStart(o,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let i;if(o){let a=Ve-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<Ve;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=we(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,s){let a=j.getTickArrayStartIndexByTick(o,i),c=Math.floor((o-a)/i),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<Ve;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=we(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(j.checkIsOutOfBoundary(e)){if(e>tt)return!1;let n=j.getTickArrayStartIndexByTick(Qe,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ve*e}};import re from"bn.js";import{PublicKey as Bt}from"@solana/web3.js";import Ke from"bn.js";var ts=14,Ut=class{static maxTickInTickarrayBitmap(e){return e*Ve*pn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let i=n*o;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=o?t-le.tickCount(n):t+le.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Ve,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=mu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=du(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-le.tickCount(n)}}}},ko=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Ut.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;if(tt<=t)throw Error(`extensionTickBoundary check error: ${tt}, ${t}`);if(n<=Qe)throw Error(`extensionTickBoundary check error: ${n}, ${Qe}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=le.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:s}=Ut.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=j.mergeTickArrayBitmap(e).shln(pn-1-a),u=Ao(512,c)?null:Zi(512,c);if(u!==null){let l=t-u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=Ao(512,c)?null:Ji(512,c);if(u!==null){let l=t+u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-le.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Ut.maxTickInTickarrayBitmap(t),o=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(o=pn-o),o}};import _t from"bn.js";var To=class{static getfeeGrowthInside(e,t,n){let o=new _t(0),i=new _t(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new _t(0),a=new _t(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:s}){var b,g,h,P;let a=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),c=te.getSqrtPriceX64FromTick(t.tickLower),u=te.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=ce.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[he(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),he(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[he(new _t(new V(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),he(new _t(new V(m.amountB.toString()).mul(l).toFixed(0)),(P=e.mintB.extensions)==null?void 0:P.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as ku}from"@solana/spl-token";var Ce=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,i,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(qt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=we(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(qt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Ce.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ko.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=we(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=we(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/le.tickCount(e.tickSpacing)),o=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=Ut.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=ko.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Qe||t>tt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(C({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Bt(d)});if(p.tokenMint.equals(Bt.default))continue;if(n<=p.openTime.toNumber()||o.eq(de)){s.push(p);continue}let y=new Ke(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),h=ne.mulDivFloor(f,p.emissionsPerSecondX64,dt),P=p.rewardTotalEmissioned.add(h);s.push(F(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:P,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let s=j.getTickArrayStartIndexByTick(i,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;return t>tt&&(t=le.getArrayStartIndex(tt,e)+le.tickCount(e)),n<Qe&&(n=le.getArrayStartIndex(Qe,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/le.tickCount(t)*pn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await _e(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of o)s.accountInfo!==null&&(i[s.pubkey.toString()]=Iu.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=we(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let s=await _e(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=ho.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=F(C({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(yt(p,d).publicKey);let l=await ht(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=Kr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:P,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA:P,amountB:k,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>F(C({},x),{pendingReward:new Ke(0)})),leverage:B,tokenFeeAmountA:new Ke(0),tokenFeeAmountB:new Ke(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await ht(t,d,{batchRequest:o}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=ho.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,P=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[P].toString()],T=k.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await To.GetPositionFees(f,g,T,S),I=await To.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Ke(0))?x:new Ke(0),g.tokenFeeAmountB=R.gte(new Ke(0))?R:new Ke(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new Ke(0))?I[L]:new Ke(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:s,priceLimit:a=new V(0),catchLiquidityInsufficient:c=!1}){var W;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new V(0))?u=l?Nt.add(new Ke(1)):Mt.sub(new Ke(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=he(i,m,o,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Ce.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((W=p.fee)!=null?W:de),u,c),P=he(f,d,o,!1),k=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new V(1).div(k),T=f.mul(new Ke(Math.floor((1-s)*1e10))).div(new Ke(1e10)),S=he(T,d,o,!1),x=l?e.currentPrice:new V(1).div(e.currentPrice),R=new V(B).sub(x).abs(),I=x,L=new Je(new V(R).mul(10**15).toFixed(0),new V(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:P,minAmountOut:S,expirationTime:Rt(p.expirationTime,P.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ie(F(C({},u),{mint:u.address,isToken2022:u.programId===ku.toBase58()})),new Ie(F(C({},l),{mint:l.address,isToken2022:l.programId===ku.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:P,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Ce.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Bt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=F(C({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),R=F(C({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),I=F(C({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),L=new rt({baseToken:m,denominator:new Ke(10).pow(new Ke(20+m.decimals)),quoteToken:d,numerator:h.mul(new V(10**(20+d.decimals))).toFixed(0)}),W=new rt({baseToken:m,denominator:new Ke(10).pow(new Ke(20+m.decimals)),quoteToken:d,numerator:P.mul(new V(10**(20+d.decimals))).toFixed(0)}),D=new be(m,B);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:I,expirationTime:g,currentPrice:L,executionPrice:W,priceImpact:k,fee:D,remainingAccounts:T,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var y,f,b;let i=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[ut(e.mintA.address).toString()],d=o[ut(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:P}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new V(h.toString()).div(new V(10).pow(p)).mul(m.value).add(new V(P.toString()).div(new V(10).pow(y)).mul(d.value)),S=new V(k.toString()).div(new V(10).pow(p)).mul(m.value).add(new V(B.toString()).div(new V(10).pow(y)).mul(d.value)),x=new V(1).div(T.add(S)),I=new V(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),L=3600*24*365,W=e.rewardDefaultInfos.map(D=>{var q,Ze;let $=D.mint.decimals,G=o[D.mint.address];return c<((q=D.startTime)!=null?q:0)||c>((Ze=D.endTime)!=null?Ze:0)||!D.perSecond||!G||$===void 0?0:new V(G.value).mul(new V(D.perSecond).mul(L)).div(new V(10).pow($)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:W,apr:I+W.reduce((D,$)=>D+$,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,h;let l=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(o),p=a?1-s:1+s,y=he(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ke(new V(y.amount.sub((h=y.fee)!=null?h:de).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Ke(0);else if(l.lte(d)){let P=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?P:k}else b=t?new Ke(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Ce.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:s,add:a}){var b,g,h,P;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new V(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[he(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),he(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[he(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),he(m.amountB.muln(l),(P=t.mintB.extensions)==null?void 0:P.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Bt(c.id));(await ht(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=yn.decode(c.data))});let s=t.map(c=>lt(new Bt(c.programId),new Bt(c.id)).publicKey),a=await Ce.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(C({},c),{[u.id]:F(C({},n[u.id]),{id:new Bt(u.id),version:6,programId:new Bt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(C({},u.config),{id:new Bt(u.config.id),fundOwner:""}),currentPrice:new V(u.price),exBitmapInfo:a[lt(new Bt(u.programId),new Bt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber()})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function Dh({poolInfo:r,tickLower:e,tickUpper:t,amountA:n,amountB:o,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var P,k,B,T;let[u,l,m,d]=e<t?[e,t,n,o]:[t,e,o,n],p=te.priceToSqrtPriceX64(new V(r.price),r.mintA.decimals,r.mintB.decimals),y=te.getSqrtPriceX64FromTick(u),f=te.getSqrtPriceX64FromTick(l),[b,g]=[he(m,(P=r.mintA.extensions)==null?void 0:P.feeConfig,a,!c),he(d,(k=r.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],h=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((B=b.fee)!=null?B:de),g.amount.sub((T=g.fee)!=null?T:de));return ce.getAmountsOutFromLiquidity({poolInfo:r,tickLower:e,tickUpper:t,liquidity:h,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var ns={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Tu(r){return F(C({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:ns,week:ns,month:ns,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:F(C({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(de)||(i=i.add(mt)),i}static mulDivFloor(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).add(n.sub(mt)).div(n)}static x64ToDecimal(e,t){return new V(e.toString()).div(V.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(V.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ir).sub(t).mod(Ir)}};function Fe(r,e){return os(r.mul(e),64,256)}function yd(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function os(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var te=class{static sqrtPriceX64ToPrice(e,t,n){return ne.x64ToDecimal(e).pow(2).mul(V.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(V.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(de))return e;let i=t.shln(Po);if(o){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,mt,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return ne.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(Po);if(o)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,mt,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<Qe||e>tt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=Fe(n,new re("18444899583751176192"))),(t&4)!=0&&(n=Fe(n,new re("18443055278223355904"))),(t&8)!=0&&(n=Fe(n,new re("18439367220385607680"))),(t&16)!=0&&(n=Fe(n,new re("18431993317065453568"))),(t&32)!=0&&(n=Fe(n,new re("18417254355718170624"))),(t&64)!=0&&(n=Fe(n,new re("18387811781193609216"))),(t&128)!=0&&(n=Fe(n,new re("18329067761203558400"))),(t&256)!=0&&(n=Fe(n,new re("18212142134806163456"))),(t&512)!=0&&(n=Fe(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=Fe(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=Fe(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=Fe(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=Fe(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=Fe(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=Fe(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=Fe(n,new re("696457651848324352"))),(t&131072)!=0&&(n=Fe(n,new re("26294789957507116"))),(t&262144)!=0&&(n=Fe(n,new re("37481735321082"))),e>0&&(n=bu.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Mt)||e.lt(Nt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),o=yd(n,32,128),i=new re("8000000000000000","hex"),s=0,a=new re(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new re(0))&&s<gu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let u=a.shrn(32),m=o.add(u).mul(new re(Au)),d=os(m.sub(new re(wu)),64,128).toNumber(),p=os(m.add(new re(Pu)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},bn=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let i=bn.getTickWithPriceAndTickspacing(e,t,n,o),s=te.getSqrtPriceX64FromTick(i);return te.sqrtPriceX64ToPrice(s,n,o)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Po),s=t.sub(e);return o?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),mt,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");return o?ne.mulDivCeil(n,t.sub(e),dt):ne.mulDivFloor(n,t.sub(e),dt)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return o?ne.mulDivRoundingUp(a,mt,es):a.shrn(Po)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,es,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,o,!1),a=ce.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,o,i),a=ce.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,s,a){let{amountA:c,amountB:u}=ce.getAmountsFromLiquidity(e,t,n,o,s),l=i?1+a:1-a,m=new re(new V(c.toString()).mul(l).toFixed(0)),d=new re(new V(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:i,add:s,epochInfo:a,amountAddFee:c}){var h,P,k,B;let u=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(u,l,m,o,s),[y,f]=[he(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),he(p.amountB,(P=e.mintB.extensions)==null?void 0:P.feeConfig,a,c)],[b,g]=[he(new re(new V(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),he(new re(new V(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:o,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Rt(y.expirationTime,f.expirationTime)}}},fn=class{static swapCompute(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?Nt.add(mt):Mt.sub(mt)),s){if(y.lt(Nt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(Mt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(de),g={amountSpecifiedRemaining:d,amountCalculated:de,sqrtPriceX64:m,tick:u>p?Math.min(p+le.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new re(0)},h=p,P=n[p],k=0,B=!s&&P.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(de)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(P,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Ce.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},h,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=L.nextStartIndex;let{publicKey:W}=we(e,t,h);R=W,P=n[h];try{x=j.firstInitializedTick(P,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<Qe?T.tickNext=Qe:T.tickNext>tt&&(T.tickNext=tt),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let I;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?I=y:I=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=fn.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=x.liquidityNet;s&&(L=L.mul(qt)),g.liquidity=ce.addDelta(g.liquidity,L)}B=T.tickNext!=g.tick&&!s&&P.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&P.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=le.nextInitializedTickArray(g.tick,l,s,o,i);S&&p!==T&&(g.accounts.push(we(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:de,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,i){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),c=o.gte(de);if(c){let l=ne.mulDivFloor(o,Sr.sub(new re(i.toString())),Sr);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(qt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,o.mul(qt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(o.mul(qt))&&(s.amountOut=o.mul(qt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=o.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new re(i),Sr.sub(new re(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ve=60,pn=512,j=class{static getTickArrayAddressByTick(e,t,n,o){let i=j.getTickArrayStartIndexByTick(n,o),{publicKey:s}=we(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=Ve)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=le.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ve,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*Ve,i=Math.floor(t/o)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ve:e+t*Ve}static mergeTickArrayBitmap(e){let t=new bd(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,i){let s=Math.floor(o/(n*Ve));return[...j.searchLowBitFromStart(e,t,s-1,i,n),...j.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,pn,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=we(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<Qe||e>tt}static nextInitTick(e,t,n,o,i){if(le.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<Ve;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ve-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ve;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=te.getSqrtPriceX64FromTick(t),i=te.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new V(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new V(1).div(t),i=bn.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(i),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new V(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=te.getSqrtPriceX64FromTick(t),i=te.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new V(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new V(1).div(t),i=bn.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(i),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new V(1).div(a)}}};var Bu=_([fe(8),E("bump"),Lt("index"),K(""),Xe("protocolFeeRate"),Xe("tradeFeeRate"),Lt("tickSpacing"),X(w(),8,"")]),gd=_([Xe("blockTimestamp"),Q("sqrtPriceX64"),Q("cumulativeTimePriceX64"),X(Q(),1,"")]),rs=_([fe(8),qe("initialized"),K("poolId"),X(gd,1e3,"observations"),X(Q(),5,"")]),Ad=_([E("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Q("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Q("rewardGrowthGlobalX64")]),yn=_([fe(8),E("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Lt("tickSpacing"),Q("liquidity"),Q("sqrtPriceX64"),We("tickCurrent"),Lt("observationIndex"),Lt("observationUpdateDuration"),Q("feeGrowthGlobalX64A"),Q("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Q("swapInAmountTokenA"),Q("swapOutAmountTokenB"),Q("swapInAmountTokenB"),Q("swapOutAmountTokenA"),E("status"),X(E(),7,""),X(Ad,3,"rewardInfos"),X(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),X(w(),15*4-3,"padding")]),wd=_([Q("growthInsideLastX64"),w("rewardAmountOwed")]),Kr=_([fe(8),E("bump"),K("nftMint"),K("poolId"),We("tickLower"),We("tickUpper"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(wd,3,"rewardInfos"),X(w(),8,"")]),lk=_([fe(8),E("bump"),K("poolId"),We("tickLowerIndex"),We("tickUpperIndex"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Q(),3,"rewardGrowthInside"),X(w(),8,"")]),Pd=_([We("tick"),xa("liquidityNet"),Q("liquidityGross"),Q("feeGrowthOutsideX64A"),Q("feeGrowthOutsideX64B"),X(Q(),3,"rewardGrowthsOutsideX64"),X(Xe(),13,"")]),ho=_([fe(8),K("poolId"),We("startTickIndex"),X(Pd,Ve,"ticks"),E("initializedTickCount"),X(E(),115,"")]),xu=_([fe(329),X(K(),100,"whitelistMints")]),Iu=_([fe(8),K("poolId"),X(X(w(),8),ts,"positiveTickArrayBitmap"),X(X(w(),8),ts,"negativeTickArrayBitmap")]);var Cu=ue("Raydium_Clmm"),St={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},xe=class{static createPoolInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([Q("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...St.createPool,...g]);return new xt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:o,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:c,startTime:u,forerunCreate:l}=e,m=ze({fromPublicKey:o,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[_n.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(rs.span),space:rs.span,programId:n})],{publicKey:f}=fu(n,a,d,p),{publicKey:b}=$i(n,f,d),{publicKey:g}=$i(n,f,p);return y.push(this.createPoolInstruction(n,f,o,a,m.publicKey,d,b,new U(i.programId||Ue),p,g,new U(s.programId||Ue),lt(n,f).publicKey,c,u)),{signers:[],instructions:y,instructionTypes:[v.CreateAccount,v.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=_([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),Q("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),E("optionBaseFlag"),qe("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Su,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},$);let G=Buffer.from([...St.openPosition,...$]);return new xt({keys:D,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=is.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:h}=we(d,p,b),{publicKey:P}=ge(n.wallet,y,Ue),{publicKey:k}=Tr(y),{publicKey:B}=yt(d,y),{publicKey:T}=dn(d,p,o,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=is.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:h}=we(d,p,b),{publicKey:P}=ge(n.wallet,y,Ue),{publicKey:k}=Tr(y),{publicKey:B}=yt(d,y),{publicKey:T}=dn(d,p,o,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,u,s,a,c,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=_([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),Q("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),E("optionBaseFlag"),qe("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Su,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new Ku(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},$);let G=Buffer.from([...St.openPosition,...$]);return new xt({keys:D,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=is.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(p,y,f),{publicKey:h}=we(p,y,b),{publicKey:P}=ge(n.wallet,m,Ue),{publicKey:k}=Tr(m),{publicKey:B}=yt(p,m),{publicKey:T}=dn(p,y,o,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,i,f,b,s,a,c,u,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i){let s=_([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...St.closePosition,...c]);return new xt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o}){let i=new U(e.programId),{publicKey:s}=ge(n.wallet,o.nftMint,Ue),{publicKey:a}=yt(i,o.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,o.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[v.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=_([Q("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(P.span);P.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(c,u,l),{publicKey:p}=we(c,u,m),{publicKey:y}=ge(o.wallet,n.nftMint,Ue),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=dn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(c,u,l),{publicKey:p}=we(c,u,m),{publicKey:y}=ge(o.wallet,n.nftMint,Ue),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=dn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0)],signers:[],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=_([Q("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(P.span);P.encode({liquidity:new Ku(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=_([Q("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...St.decreaseLiquidity,...S]);return new xt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(u,l,m),{publicKey:y}=we(u,l,d),{publicKey:f}=ge(o.wallet,n.nftMint,c),{publicKey:b}=yt(u,n.nftMint),{publicKey:g}=dn(u,l,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let P=[];return P.push(this.decreaseLiquidityInstruction(u,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?lt(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:P,instructionTypes:[v.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g){let h=_([w("amount"),w("otherAmountThreshold"),Q("sqrtPriceLimitX64"),qe("isBaseInput")]),P=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...P],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...St.swap,...B]);return new xt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,lt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[v.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=_([w("openTime"),w("endTime"),Q("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:J(l),endTime:J(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...St.initReward,...f]);return new xt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a=yu(i,s,o.mint).publicKey,c=wo(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[v.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=_([E("rewardIndex"),Q("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:J(l),endTime:J(m)},f);let b=Buffer.from([...St.setRewardEmissions,...f]);return new xt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Cu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=wo(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[v.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,s,a){let c=_([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...St.collectReward,...l]);return new xt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Cu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[v.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:o,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:c}){let[u,l]=[new U(e.programId),new U(e.id)],[m,d]=[new U(t.vault.A),new U(t.vault.B)],[p,y]=[new U(e.mintA.address),new U(e.mintB.address)],f=e.mintA.address===o.toString(),b=[this.swapInstruction(u,n.wallet,l,new U(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,c,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[v.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as Id}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bd}from"@solana/spl-token";import{PublicKey as kd}from"@solana/web3.js";import Ru from"bn.js";var Lu=new Ru(25),Ou=new Ru(1e4),hd={4:3,5:3};var Td=ue("Raydium_liquidity_serum");function Nu({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=kd.createProgramAddressSync(i,r)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw Td.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}import Io from"bn.js";function Cr({programId:r}){let{publicKey:e}=ae([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function gn({name:r,programId:e,marketId:t}){let{publicKey:n}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function xd({programId:r,marketId:e}){let{publicKey:t}=ae([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function us({programId:r}){return ae([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function Mu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:c}){let u=gn({name:"amm_associated_seed",programId:a,marketId:t}),l=gn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=us({programId:a}),p=gn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=gn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=gn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=xd({programId:a,marketId:t}),g=gn({name:"target_associated_seed",programId:a,marketId:t}),h=gn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:P}=Nu({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:P,lookupTableAccount:Id.default,configId:Cr({programId:a})}}var ss;async function qk({connection:r,poolKeysList:e,config:t}){ss||(ss=new On({connection:r}),await ss.initStableModelLayout());let n=e.map(s=>cu({poolKeys:s}));return(await oa(r,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=ra(s,"GetPoolData"),c=new Io(Et(a,"status")),u=Number(Et(a,"coin_decimals")),l=Number(Et(a,"pc_decimals")),m=Number(Et(a,"lp_decimals")),d=new Io(Et(a,"pool_coin_amount")),p=new Io(Et(a,"pool_pc_amount")),y=new Io(Et(a,"pool_lp_supply")),f="0";try{f=Et(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Io(f)}})}var as={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Rr=r=>{let e={},t=Bd.toBase58();return Object.keys(r).map(n=>{let o=r[n],[i,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:et({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:et({address:s,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new V(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new V(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new V(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:as,week:as,month:as,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Cr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:et({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())})}}),e};import at from"bn.js";var Bo=class extends Be{constructor(t){super(t);this.stableLayout=new On({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let s=new at(new V(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Pr(t[i?"mintB":"mintA"]),[c,u]=[new at(new V(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new at(new V(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new at(new V(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,V.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=pt;s.isZero()||(d=m==="base"?$o(s.mul(u),c):$o(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=$o(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Je(new at(1)).add(o).mul(d).quotient,b=new be(a,d),g=new be(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:s,fixedSide:a,config:c,txVersion:u,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new je(n.lpMint.address)}),P=[y,f],k=[b,g],B=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(P.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=P,[I,L]=k,[W,D]=B,$=o!=null?o:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Vt=await m.handleTokenAccount({side:"in",amount:W,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=Vt,Ze=Se(Vt,["tokenAccount"]);G.addInstruction(Ze);let Tn=await m.handleTokenAccount({side:"in",amount:D,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:hn}=Tn,sn=Se(Tn,["tokenAccount"]);G.addInstruction(sn);let vo=await m.handleTokenAccount({side:"out",amount:0,mint:new je(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:zt}=vo,kn=Se(vo,["tokenAccount"]);return G.addInstruction(kn),G.addInstruction({instructions:[au({poolInfo:n,poolKeys:$,userKeys:{baseTokenAccount:q,quoteTokenAccount:hn,lpTokenAccount:zt,owner:this.scope.ownerPubKey},baseAmountIn:W,quoteAmountIn:D,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5AddLiquidity:v.AmmV4AddLiquidity],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),u===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=o!=null?o:await this.getAmmPoolKeys(n.id),[l,m,d]=[new je(n.mintA.address),new je(n.mintB.address),new je(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:P}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:P}),{tokenAccount:k}=x,B=Se(x,["tokenAccount"]);g.addInstruction(B);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:P}),{tokenAccount:T}=R,S=Se(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[Hi({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(c),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Vn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||ge(this.scope.ownerPubKey,q.accountInfo.mint,Vn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let h=g[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let P=o.add(a!=null?a:new at(0)),k=t.mintA.address===Ie.WSOL.mint.toString(),B=t.mintB.address===Ie.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let q=ft[s.programId],Ze=Ye({programId:new je(s.programId),poolId:new je(s.id),owner:this.scope.ownerPubKey,version:q}),hn,sn=await this.scope.connection.getAccountInfo(Ze);if(sn&&(hn=Ln(q).decode(sn.data)),q!==6&&!hn){let{instruction:Yt,instructionType:Xr}=lo({id:new je(s.id),programId:new je(s.programId),version:q,ledger:Ze,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Yt],instructionTypes:[Xr]})}let zt=[];for(let Yt of s.rewardInfos){let Xr=Yt.mint.address===Ie.WSOL.mint.toString();if(g[Yt.mint.address])zt.push(g[Yt.mint.address]);else{let{account:Is,instructionParams:Bs}=await this.scope.account.getOrCreateTokenAccount({mint:new je(Yt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Xr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Is||this.logAndCreateError("farm reward account not found:",Yt.mint.address),Bs&&b.addInstruction(Bs),zt.push(Is)}}let kn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Vt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:kn,lpAccount:h,rewardAccounts:zt},Tn=ft[s.programId],vo=Tn===6?mo(Vt):Tn===5?po(Vt):fo(Vt),ac={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};b.addInstruction({instructions:[vo],instructionTypes:[ac[Tn]]})}let I=await this.getAmmPoolKeys(t.id),L=Hi({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:P});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[W,D]=t.mintA.address===n.mintA.address?[T,x]:[x,T],$=await this.scope.clmm.getClmmPoolKeys(t.id),G=await xe.openPositionFromBaseInstructions(F(C({poolInfo:n,poolKeys:$,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:W,tokenAccountB:D},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var W;let b=u.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),g=u.useSOLBalance&&o.mint.equals(_u),h=u.useSOLBalance&&i.mint.equals(_u),P=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});P.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(P.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=Mu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:I,instructionType:L}=uu(F(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:ge(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:c,coinAmount:s,pcAmount:a}));return P.addInstruction({instructions:[I],instructionTypes:[L]}),P.addCustomComputeBudget(f),P.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=Cr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return $a.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:s}){let[a,c]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=a==t.mintA.address?"base":"quote";d==="quote"&&m.reverse();let[p,y]=m,f=t.version===4,b;if(f)b=new V(y.toString()).div(p.toString());else{let I=ru(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);d==="quote"?b=new V(1e6).div(I*1e6):b=new V(I*1e6).div(1e6)}let g=n,h=new at(0),P=new at(0);if(!g.isZero())if(f){P=to(g.mul(Lu),Ou);let I=g.sub(P),L=p.add(I);h=y.mul(I).div(L)}else{P=g.mul(new at(2)).div(new at(1e4));let I=g.sub(P);d==="quote"?h=new at(nu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber())):h=new at(ou(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber()))}let k=new at(new V(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new V(h.toString()).div(new V(g.sub(P).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new V(h.toString()).div(g.sub(P).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:P}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===Z.toBase58(),h=y&&b.address===Z.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),P||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:P,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d});m.addInstruction(T||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:h,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[hr({version:x,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[x===4?v.AmmV4SwapBaseIn:v.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await _e(this.scope.connection,t.map(l=>({pubkey:new je(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=go.decode(m.accountInfo.data);i[String(t[l])]=F(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await _e(this.scope.connection,s.map(l=>({pubkey:new je(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new at(Sd.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=F(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new V(p.toString()).div(new V(10).pow(m.quoteDecimal.toString())).div(new V(d.toString()).div(new V(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=Rr({[t]:n}),i=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as se}from"@solana/web3.js";import gt from"bn.js";import{AccountLayout as Vu,TOKEN_PROGRAM_ID as vu}from"@solana/spl-token";var xo=class extends Be{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var h;let{programId:t,owner:n=((h=this.scope.owner)==null?void 0:h.publicKey)||se.default,mint1:o,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new gt(new se(o.address).toBuffer()).gt(new gt(new se(i.address).toBuffer()))?[i,o,new V(1).div(a)]:[o,i,a],b=te.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await xe.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:c,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(u),d.versionBuild({txVersion:m,extInfo:{address:F(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:c.toString(),vault:{A:g.address.mintAVault.toString(),B:g.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:f.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}},hu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),P=n.useSOLBalance&&e.mintB.address===Z.toString(),[k,B]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let I=t||await this.getClmmPoolKeys(e.id),L=await xe.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:F(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===Z.toBase58(),h=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:u,checkCreateATAOwner:l});P&&(f=P),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(T||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await xe.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===Z.toString(),g=c.useSOLBalance&&t.mintB.address===Z.toString(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(P||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=xe.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===Z.toString(),b=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(o==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(h||{});let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(o==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});P&&(y=P),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=xe.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:o,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===Z.toString(),f=i.useSOLBalance&&t.mintB.address===Z.toString(),b,g,{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=h,P&&p.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===Z.toString(),W;if(I.mint.address===t.mintA.address)W=b;else if(I.mint.address===t.mintB.address)W=g;else{let{account:D,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(I.mint.programId),mint:new se(I.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});W=D,$&&p.addInstruction($)}T.push(W)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await xe.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[v.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let I=await xe.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),R=C(C({},R),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=xe.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:o,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===Z.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(n.mint.address),mint:new se(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new V(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=xe.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new se(n.mint.programId),mint:new se(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of o){let d=n.useSOLBalance&&m.mint.address===Z.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new V(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=xe.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new se(m.mint.programId),mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(Z),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new V(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=xe.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===Z.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new V(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=xe.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});u.addInstruction(b),l=C(C({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(Z),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:o,checkCreateATAOwner:i});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=xe.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(Z),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:o,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=xe.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=c.useSOLBalance&&e.mintA.address===Z.toBase58(),b=c.useSOLBalance&&e.mintB.address===Z.toBase58(),g;!s||s.equals(new V(0))?g=y?Nt.add(new gt(1)):Mt.sub(new gt(1)):g=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?o:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let P;if(!P){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?0:o}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});P=B,T&&p.addInstruction(T)}(!h||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:P,mintAUseSOLBalance:f,mintBUseSOLBalance:b,associatedOnly:l});let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(xe.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:P},inputMint:new se(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:u})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)o?ge(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(P=>!P.liquidity.isZero()||P.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===Z.toString(),y=n.useSOLBalance&&d.mintB.address===Z.toString(),f=u[d.mintA.address];if(!f){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new se(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f=P,k&&l.addInstruction(k)}let b=u[d.mintB.address];if(!b){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new se(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:o,checkCreateATAOwner:i});b=P,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let P of d.rewardDefaultInfos){let k=n.useSOLBalance&&P.mint.address===Z.toString(),B=u[P.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(P.mint.programId),mint:new se(P.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:o});B=T,S&&l.addInstruction(S)}u[P.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let P of t[m.id]){let k=xe.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new gt(0),amountMinA:new gt(0),amountMinB:new gt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:c}):l.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(wo(e).publicKey);return t?xu.decode(t.data).whitelistMints.filter(o=>!o.equals(se.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new gt(1))).map(s=>yt(new se(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(s=>{if(!s)return;let a=Kr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await _e(this.scope.connection,e.map(i=>({pubkey:new se(i)})),t),o={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=yn.decode(s.accountInfo.data),c=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=F(C({},a),{currentPrice:c,programId:s.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await _e(this.scope.connection,Array.from(n).map(c=>({pubkey:new se(c)}))),i={};o.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Bu.decode(c.accountInfo.data))});let s=await Ce.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:et({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||vu.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?on((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:et({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||vu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?on((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:F(C({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ce.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await Kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new se(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await _e(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Tu(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Vu.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Vu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=F(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:c.config});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:s}}};import{PublicKey as Y}from"@solana/web3.js";import{NATIVE_MINT as Er,TOKEN_PROGRAM_ID as Gt,AccountLayout as qd}from"@solana/spl-token";import Eu from"bn.js";var cs=new Eu(1e6);function Kd(r,e,t){return r.mul(e).add(t).sub(new Eu(1)).div(t)}function Fu(r,e,t){return r.mul(e).div(t)}var Lr=class{static tradingFee(e,t){return Kd(e,t,cs)}static protocolFee(e,t){return Fu(e,t,cs)}static fundFee(e,t){return Fu(e,t,cs)}};import So from"bn.js";function Or(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Cd(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=Or(r,e);return n.gt(vn)&&(t=t.add(new So(1)),e=r.div(t),n=Or(r,t),n.gt(vn)&&(e=e.add(new So(1)))),[t,e]}var vn=new So(0),Nr=class{static swapWithoutFees(e,t,n){let o=t.mul(n),i=t.add(e),[s,a]=Cd(o,i),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,o,i){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Or(e.mul(n),t).gt(vn)&&s.gt(vn)&&(s=s.add(new So(1))),Or(e.mul(o),t).gt(vn)&&a.gt(vn)&&(a=a.add(new So(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Du=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Du||{}),Mr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,o){let i=Lr.tradingFee(e,o),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Nr.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}};var Rd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Ld=Buffer.from("amm_config","utf8"),Od=Buffer.from("pool","utf8"),Nd=Buffer.from("pool_lp_mint","utf8"),Md=Buffer.from("pool_vault","utf8"),_d=Buffer.from("observation","utf8");function Fn(r){return ae([Rd],r)}function Vd(r,e){return ae([Ld,Ed(e)],r)}function vd(r,e,t,n){return ae([Od,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Fd(r,e){return ae([Nd,e.toBuffer()],r)}function Wu(r,e,t){return ae([Md,e.toBuffer(),t.toBuffer()],r)}function _r(r,e){return ae([_d,e.toBuffer()],r)}function Ed(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function qu({programId:r,mintA:e,mintB:t}){let n=Vd(r,0).publicKey,o=Fn(r).publicKey,i=vd(r,n,e,t).publicKey,s=Fd(r,i).publicKey,a=Wu(r,i,e).publicKey,c=Wu(r,i,t).publicKey,u=_r(r,i).publicKey;return{poolId:i,configId:n,authority:o,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as Ko}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ls,TOKEN_2022_PROGRAM_ID as Uu,ASSOCIATED_TOKEN_PROGRAM_ID as Dd}from"@solana/spl-token";var Wd=ue("Raydium_cpmm"),Co={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173]};function Gu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=_([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Dd,isSigner:!1,isWritable:!1},{pubkey:jo,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:P},T),new Ko({keys:B,programId:r,data:Buffer.from([...Co.initialize,...T])})}function Xu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:Uu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Wd.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Ko({keys:b,programId:r,data:Buffer.from([...Co.deposit,...g])})}function zu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:Uu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Yo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Ko({keys:b,programId:r,data:Buffer.from([...Co.withdraw,...g])})}function Vr(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=_([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new Ko({keys:g,programId:r,data:Buffer.from([...Co.swapBaseInput,...h])})}function vr(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=_([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new Ko({keys:g,programId:r,data:Buffer.from([...Co.swapBaseOutput,...h])})}import Ee from"bn.js";var Yu=_([fe(8),E("bump"),qe("disableCreatePool"),Lt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),Fr=_([fe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),E("bump"),E("status"),E("lpDecimals"),E("mintDecimalA"),E("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var Ro=class extends Be{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await _e(this.scope.connection,e.map(m=>({pubkey:new Y(m)}))),o={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Fr.decode(d.accountInfo.data);o[String(e[m])]=F(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await _e(this.scope.connection,m.map(p=>({pubkey:new Y(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Yu.decode(y.data)}}let c={},u=await _e(this.scope.connection,s.map(m=>({pubkey:new Y(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Ee(qd.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=F(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new V(y.toString()).div(new V(10).pow(d.mintDecimalB)).div(new V(p.toString()).div(new V(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let i=e[o],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return F(C({},n),{[o]:F(C({},i),{id:new Y(o),configInfo:i.configInfo,version:7,authority:Fn(i.programId).publicKey,mintA:et({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?on((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:et({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?on((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Kn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=et({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?on(n[t.mintA.toBase58()].feeConfig):void 0}}),i=et({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?on(n[t.mintB.toBase58()].feeConfig):void 0}}),s=et({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Gt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new V(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new V(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Fn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:o,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:c}=m,u=Se(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var W,D,$;let d=o.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),p=new Ee(new Y(u.mintA.address).toBuffer()).lte(new Ee(new Y(u.mintB.address).toBuffer())),[y,f]=p?[u.mintA,u.mintB]:[u.mintB,u.mintA],[b,g]=p?[u.mintAAmount,u.mintBAmount]:[u.mintBAmount,u.mintAAmount],h=o.useSOLBalance&&y.address===Er.toBase58(),P=o.useSOLBalance&&f.address===Er.toBase58(),[k,B]=[new Y(y.address),new Y(f.address)],T=this.createTxBuilder(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:d,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:i,checkCreateATAOwner:s});T.addInstruction(x||{});let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new Y(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:d,amount:g}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:i,checkCreateATAOwner:s});if(T.addInstruction(I||{}),S===void 0||R===void 0)throw Error("you don't has some token account");let L=qu({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[Gu(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,ge(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new Y((D=y.programId)!=null?D:Gt),new Y(($=f.programId)!=null?$:Gt),L.observationId,b,g,n)],instructionTypes:[v.CpmmCreatePool]}),T.addCustomComputeBudget(c),T.versionBuild({txVersion:a,extInfo:{address:F(C({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:F(C({},t),{lpAmount:new V(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Je(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new V(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,P=t.mintA.address===Er.toString(),k=t.mintB.address===Er.toString(),B=this.createTxBuilder(),[T,S]=[new Y(t.mintA.address),new Y(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?o:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{});let{account:I,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let W=await m.getCreatedTokenAccount({mint:new Y(t.lpMint.address)}),Ze=await m.handleTokenAccount({side:"out",amount:0,mint:new Y(t.lpMint.address),tokenAccount:W,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:D}=Ze,$=Se(Ze,["tokenAccount"]);B.addInstruction($);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Je(new Ee(1)).sub(s);return B.addInstruction({instructions:[Xu(new Y(t.programId),this.scope.ownerPubKey,new Y(G.authority),new Y(t.id),D,x,I,new Y(G.vault.A),new Y(G.vault.B),T,S,new Y(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,i?b.amount:h,i?h:b.amount)],instructionTypes:[v.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var D,$;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Je(new Ee(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(o.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(o.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[he(l,t.mintA.extensions.feeConfig,d,!1),he(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new Y(t.mintA.address),new Y(t.mintB.address)],P=g.equals(Z),k=h.equals(Z),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,I&&b.addInstruction(I),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new Y(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let W=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[zu(new Y(t.programId),this.scope.ownerPubKey,new Y(W.authority),new Y(t.id),L,B,T,new Y(W.vault.A),new Y(W.vault.B),g,h,new Y(t.lpMint.address),o,l.sub((D=p.fee)!=null?D:new Ee(0)),m.sub(($=y.fee)!=null?$:new Ee(0)))],instructionTypes:[v.CpmmWithdrawLiquidity],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var S,x,R,I,L,W;let{poolInfo:t,poolKeys:n,baseIn:o,swapResult:i,slippage:s=0,config:a,computeBudgetConfig:c,txVersion:u}=e,{bypassAssociatedCheck:l,checkCreateATAOwner:m,associatedOnly:d}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},a),p=this.createTxBuilder(),[y,f]=[new Y(t.mintA.address),new Y(t.mintB.address)];i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new Ee((1-s)*1e4)).div(new Ee(1e4));let b=t.mintA.address===Z.toBase58(),g=t.mintB.address===Z.toBase58(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new Y((S=t.mintA.programId)!=null?S:Gt),owner:this.scope.ownerPubKey,createInfo:b||!o?{payer:this.scope.ownerPubKey,amount:o?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});P&&p.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new Y((x=t.mintB.programId)!=null?x:Gt),owner:this.scope.ownerPubKey,createInfo:g||o?{payer:this.scope.ownerPubKey,amount:o?0:i.sourceAmountSwapped}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:d,checkCreateATAOwner:m});B&&p.addInstruction(B),(!h||!k)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:d});let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return p.addInstruction({instructions:[o?Vr(new Y(t.programId),this.scope.ownerPubKey,new Y(T.authority),new Y(T.config.id),new Y(t.id),h,k,new Y(T.vault.A),new Y(T.vault.B),new Y((R=t.mintA.programId)!=null?R:Gt),new Y((I=t.mintB.programId)!=null?I:Gt),y,f,_r(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):vr(new Y(t.programId),this.scope.ownerPubKey,new Y(T.authority),new Y(T.config.id),new Y(t.id),k,h,new Y(T.vault.B),new Y(T.vault.A),new Y((L=t.mintB.programId)!=null?L:Gt),new Y((W=t.mintA.programId)!=null?W:Gt),f,y,_r(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[o?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut]}),p.addCustomComputeBudget(c),p.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let i=n.toString()===e.mintB.address,s=Mr.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new V(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ee((1-o)*1e4)).div(new Ee(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:s,baseIn:a}){var h,P,k,B,T,S,x,R;let c=1-Number(i.toSignificant())/100,u=new Ee(new V(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=he(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Ee(0)),d=new Ee(new V(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,V.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(P=l.fee)==null?void 0:P.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:pt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=Ud(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=he(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Je(new Ee(1)).add(i),g=he(b.mul(f.amount.sub((B=f.fee)!=null?B:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function Ud(r,e,t,n){let o=r.mul(e).div(n);!o.isZero()&&!r.mul(e).mod(n).isZero()&&(o=o.add(new Ee(1)));let i=r.mul(t).div(n);return!i.isZero()&&!r.mul(t).mod(n).isZero()&&(i=i.add(new Ee(1))),{amountA:o,amountB:i}}import{PublicKey as wn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Re,TOKEN_2022_PROGRAM_ID as ys,createTransferInstruction as $u}from"@solana/spl-token";import qr from"bn.js";import{TOKEN_PROGRAM_ID as ms,TOKEN_2022_PROGRAM_ID as Gd,ASSOCIATED_TOKEN_PROGRAM_ID as Xd}from"@solana/spl-token";import{PublicKey as z,TransactionInstruction as ds,SystemProgram as ps}from"@solana/web3.js";import An from"bn.js";function bB(r,e,t,n,o,i,s,a,c,u,l,m){let d=_([E("instruction"),w("amountIn"),w("amountOut")]),p=[{pubkey:ps.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new z(t.programId),isSigner:!1,isWritable:!1},{pubkey:new z(t.id),isSigner:!1,isWritable:!0},{pubkey:new z(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=ke(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new z("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new ds({keys:p,programId:r,data:y})}function gB(r,e,t,n,o,i,s,a,c,u){let l=_([E("instruction")]),m=[{pubkey:ps.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new z(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new z(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new z(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=ke(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new z("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new ds({keys:m,programId:r,data:d})}function zd(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[A({pubkey:ms,isWritable:!1}),A({pubkey:Gd,isWritable:!1}),A({pubkey:Xd,isWritable:!1}),A({pubkey:ps.programId,isWritable:!1}),A({pubkey:e,isSigner:!0})];b.push(A({pubkey:t})),b.push(A({pubkey:o}));let g=[c,u],h=[l,m],P=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=P[S]===x.mintA.address;if(b.push(A({pubkey:new z(x.programId),isWritable:!1})),S===g.length-1?b.push(A({pubkey:o})):b.push(A({pubkey:n})),b.push(A({pubkey:new z(P[S])})),b.push(A({pubkey:new z(P[S+1])})),x.version===6){let I=h[S];b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(R?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(R?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)})),b.push(A({pubkey:Yo})),b.push(A({pubkey:lt(new z(x.programId),new z(x.id)).publicKey})),f.push(Yd(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(A({pubkey:new z(L)}))}else if(x.version===5){let I=h[S];b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(I.marketProgramId)})),b.push(A({pubkey:new z(I.marketAuthority)})),b.push(A({pubkey:pa,isWritable:!1})),b.push(A({pubkey:new z(I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.marketId)})),b.push(A({pubkey:new z(I.marketBids)})),b.push(A({pubkey:new z(I.marketAsks)})),b.push(A({pubkey:new z(I.marketEventQueue)})),b.push(A({pubkey:new z(I.marketBaseVault)})),b.push(A({pubkey:new z(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],L=x.status!==1;b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(L?I.id:I.marketProgramId)})),b.push(A({pubkey:new z(L?I.id:I.marketAuthority)})),b.push(A({pubkey:new z(L?I.id:I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(L?I.id:I.marketId)})),b.push(A({pubkey:new z(L?I.id:I.marketBids)})),b.push(A({pubkey:new z(L?I.id:I.marketAsks)})),b.push(A({pubkey:new z(L?I.id:I.marketEventQueue)})),b.push(A({pubkey:new z(L?I.id:I.marketBaseVault)})),b.push(A({pubkey:new z(L?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(A({pubkey:new z(I.authority)})),b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(R?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(R?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)}))}else throw Error("pool type error")}let k=_([E("insId"),w("amountIn"),w("amountOut"),X(Q(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new ds({keys:b,programId:r,data:B})}function Yd(r,e){if(r)if(e){let t=new An(r).div(new An(25));return t.gt(Br)?t:Br}else{let t=new An(r).mul(new An(25));return t.lt(xr)?t:xr}else return e?Br:xr}function Qu({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=ke(m),p=t.equals(d.mintA.address)?Nt.add(mt):Mt.sub(mt);return xe.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new An(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[d?Vr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,m.vaultA,m.vaultB,m.mintProgramA,m.mintProgramA,new z(m.mintA.address),new z(m.mintB.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw):vr(m.programId,e.wallet,m.authority,m.configId,m.id,e.destinationToken,e.sourceToken,m.vaultB,m.vaultA,m.mintProgramB,m.mintProgramA,new z(m.mintB.address),new z(m.mintA.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[hr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new An(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?v.AmmV5SwapBaseIn:v.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[zd(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new An(0)),n.remainingAccounts)],instructionTypes:[v.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var ju={[pi.toBase58()]:3},Hu={3:pi};var fs=_([fe(5),fe(8),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]),Zu={3:fs};import{PublicKey as Ju}from"@solana/web3.js";var Dr=ue("Serum"),Wr=class{static getProgramId(e){let t=Hu[e];return t||Dr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ju[t];return n||Dr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Zu[e];return t||Dr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let s=n.concat(Buffer.from([o]),Buffer.alloc(7));i=Ju.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:i,nonce:o}}return Dr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Ju.default,nonce:o}}};var Xt=new qr(0),Lo=class extends Be{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Z));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=J(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),no({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:o})}async wrapWSol(e,t,n){let o=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),o.length&&i.addInstruction({instructions:[no({destination:o[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Ot({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(Z),m=u.amount.token.mint.equals(Z),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?ys:Re,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?ys:Re);m&&a.addInstruction({endInstructions:[Ot({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Re})],endInstructionTypes:[v.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?ys:Re)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),P=Qu({routeProgram:i,inputMint:d,swapInfo:F(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[$u(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]}),k.addInstruction(P);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[$u(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]})}return a.addInstruction(P),s===0?a.sizeCheckBuildV0({computeBudgetConfig:o,address:P.address}):a.sizeCheckBuild({computeBudgetConfig:o,address:P.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=da,clmm:n=fa,cpmm:o=ya}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:go.offsetOf("baseMint"),length:64}}),s=_([K("baseMint"),K("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=_([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:yn.span}],dataSlice:{offset:yn.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Fr.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===wn.default.toString()?Z:e,t=t.toString()===wn.default.toString()?Z:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&i[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&i[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Rr(i),a={};Object.values(s).forEach(f=>{o.delete(f.mintA.address),a[f.mintA.address]={address:new wn(f.mintA.address),programId:Re,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(f.mintB.address),a[f.mintB.address]={address:new wn(f.mintB.address),programId:Re,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Re)?(o.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),f.mintProgramB.equals(Re)?(o.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await Kn({connection:this.scope.connection,mints:Array.from(o).map(f=>new wn(f))});a=C(C({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(C({},f),{[b]:F(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,h,P,k,B,T,S,x,R;let m=l===void 0?new qr(0):e.raw.mul(new qr(l.feeBps.toNumber())).div(new qr(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(C({},t),{address:ut(t.address).toString()}),b=[];for(let I of n)try{b.push(F(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",I.version,I.id.toString(),L.message)}this.logDebug("direct done");for(let[I,L]of Object.entries(o)){let W={chainId:101,address:I,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},D=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:W,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var sn,zt,kn,Vt;let Ze=G===void 0?Xt:G.data.amountOut.amount.raw.sub((zt=(sn=G.data.amountOut.fee)==null?void 0:sn.raw)!=null?zt:Xt),hn=q===void 0?Xt:q.data.amountOut.amount.raw.sub((Vt=(kn=q.data.amountOut.fee)==null?void 0:kn.raw)!=null?Vt:Xt);return Ze.lt(hn)?1:-1})[0];if(D===void 0)continue;let $=new be(Pr(W),D.data.amountOut.amount.raw.sub((h=(g=D.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Xt));for(let G of L.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:$});b.push(F(C({},q),{allTrade:!!(D.data.allTrade&&q.allTrade),amountIn:D.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new V(new rt({baseToken:D.data.amountIn.amount.token,denominator:D.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((k=(P=q.amountOut.fee)==null?void 0:P.raw)!=null?k:Xt)}).toFixed()),priceImpact:new V(D.data.priceImpact.add(q.priceImpact).toFixed()),fee:[D.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[D.pool,G],remainingAccounts:[D.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(B=q.amountOut.fee)!=null&&B.raw?new be(D.data.amountOut.amount.token,((S=(T=D.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Xt).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:Xt)):void 0,middleToken:D.data.amountOut.amount.token,poolReady:D.data.poolReady&&q.poolReady,poolType:[D.data.poolType,q.poolType],feeConfig:y,expirationTime:Rt(D.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(I=>I.allTrade).sort((I,L)=>I.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Xt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:P}=Ce.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new V(y.toFixed()),executionPrice:new V(f.toFixed()),priceImpact:new V(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[P],expirationTime:Rt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(F(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(F(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(F(C({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(F(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await _e(this.scope.connection,Array.from(s).map(l=>({pubkey:new wn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=fs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Wr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(C({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=C({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:us({programId:new wn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Fn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:et({address:u.mintLp.toBase58(),programId:Re.toBase58(),decimals:u.lpDecimals}),config:F(C({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{TOKEN_PROGRAM_ID as Qd}from"@solana/spl-token";import{PublicKey as jd,Transaction as bs,TransactionInstruction as Hd}from"@solana/web3.js";import ec from"bn.js";var He=class extends Be{static getPdaPoolId(e,t){return ae([He.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ae([He.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new ec(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>He.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<He.VERSION_PROJECT.length;l++)a.push(...s.map(m=>He.getPdaOwnerId(t,m,o,l).publicKey));let c=await ht(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==He.POOL_LAYOUT.span||b.data.length!==He.OWNER_LAYOUT.span)continue;let g=He.POOL_LAYOUT.decode(f.data),h=He.OWNER_LAYOUT.decode(b.data),P=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new ec(0))).filter(x=>!x).length!==3,T=i>P&&i<k&&g.status===1,S=B&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:He.VERSION_PROJECT[m],openTime:P,endTime:k,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Ie.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!c.mintAddress.equals(Ie.WSOL.mint),associatedOnly:c.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[He.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Ie.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!m.mintAddress.equals(Ie.WSOL.mint),associatedOnly:m.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[He.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:o,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return or(c,[o,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new bs().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new bs().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new bs().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=_([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Qd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Hd({keys:i,programId:e,data:a})}},At=He;At.CLAIMED_NUM=3,At.POOL_LAYOUT=_([fe(8),E("bump"),E("status"),w("openTime"),w("endTime"),K("ammId"),X(_([E("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),At.OWNER_LAYOUT=_([fe(8),E("bump"),E("version"),K("poolId"),K("owner"),w("lpAmount"),X(_([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),At.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new jd(e)),At.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},At.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Oo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ic}from"@solana/spl-token";import No from"bn.js";import{TransactionInstruction as Jd,SYSVAR_RENT_PUBKEY as $d}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as tc}from"@solana/spl-token";import{createInitializeAccountInstruction as nc}from"@solana/spl-token";import{SystemProgram as Pn,Transaction as oc}from"@solana/web3.js";function Zd(r="accountFlags"){let e=new dr(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var gs=_([fe(5),Zd("accountFlags"),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]);function ep({programId:r,marketInfo:e}){let t=_([E("version"),Xe("instruction"),w("baseLotSize"),w("quoteLotSize"),Lt("feeRateBps"),w("vaultSignerNonce"),w("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:$d,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new Jd({keys:n,programId:r,data:o})}async function rc({connection:r,wallet:e,marketInfo:t}){let n=new oc,o=await r.getMinimumBalanceForRentExemption(165);n.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:tc}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:tc}),nc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),nc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new oc;return i.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(gs.span),space:gs.span,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(5120+12),space:5120+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(262144+12),space:262144+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),ep({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[v.CreateAccount,v.CreateAccount,v.InitAccount,v.InitAccount]},{transaction:i,signer:[],instructionTypes:[v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.InitMarket]}]}var En=class extends Be{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,txVersion:s,computeBudgetConfig:a}){let c=this.scope.ownerPubKey,u=ze({fromPublicKey:c,programId:i}),l=ze({fromPublicKey:c,programId:i}),m=ze({fromPublicKey:c,programId:i}),d=ze({fromPublicKey:c,programId:i}),p=ze({fromPublicKey:c,programId:i}),y=ze({fromPublicKey:c,programId:ic}),f=ze({fromPublicKey:c,programId:ic}),b=0,g=new No(100);function h(){let R=new No(0);for(;;)try{return{vaultOwner:Oo.createProgramAddressSync([u.publicKey.toBuffer(),R.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:R}}catch{if(R.iaddn(1),R.gt(new No(25555)))throw Error("find vault owner error")}}let{vaultOwner:P,vaultSignerNonce:k}=h(),B=new No(Math.round(10**e.decimals*n)),T=new No(Math.round(n*10**t.decimals*o));if(B.eq(pt))throw Error("lot size is too small");if(T.eq(pt))throw Error("tick size or lot size is too small");let S=await rc({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:u,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:P,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:k,baseLotSize:B,quoteLotSize:T}}),x=this.createTxBuilder();x.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let R of S.slice(1,S.length))x.addInstruction({instructions:R.transaction.instructions,signers:R.signer,instructionTypes:R.instructionTypes});return s===0?x.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Oo(e.mint),quoteMin:new Oo(t.mint)}}):x.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Oo(e.mint),quoteMin:new Oo(t.mint)}})}};import{PublicKey as _o}from"@solana/web3.js";import{TransactionInstruction as ws,SYSVAR_CLOCK_PUBKEY as tp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ps}from"@solana/spl-token";var As=_([E("instruction"),ha("amount")]),Mo=_([E("instruction")]);function eS({programId:r,amount:e,instructionKeys:t}){let n=[{pubkey:jo,isSigner:!1,isWritable:!1},{pubkey:Ps,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:ni,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],o=Buffer.alloc(As.span);return As.encode({instruction:1,amount:Number(e)},o),new ws({keys:n,programId:r,data:o})}function Ur({programId:r},e){let t=[{pubkey:Ps,isSigner:!1,isWritable:!1},{pubkey:ni,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(Mo.span);return Mo.encode({instruction:2},n),new ws({keys:t,programId:r,data:n})}function hs(r){let{poolConfig:e,userKeys:t,side:n}=r,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Mo.span);Mo.encode({instruction:2},s);let a=[{pubkey:Ps,isWritable:!1,isSigner:!1},{pubkey:tp,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new ws({programId:e.programId,keys:a,data:s})}import sc from"bn.js";var np={[$n.IDO_PROGRAM_ID_V1.toString()]:1,[$n.IDO_PROGRAM_ID_V2.toString()]:2,[$n.IDO_PROGRAM_ID_V3.toString()]:3,[$n.IDO_PROGRAM_ID_V4.toString()]:4},Dn=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i}){let s=this.createTxBuilder(),a=np[t.programId];a||this.logAndCreateError("invalid version",a);let c=ke(t),[u,l]=[!new sc(e.coin).isZero(),!new sc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(Z),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:o});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(Z),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[Ur({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Ur({programId:new _o(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Ur({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new _o(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[hs(F(C({},g),{side:"base"}))]:[],...l?[hs(F(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as op}from"@solana/web3.js";import{MintLayout as rp,TOKEN_2022_PROGRAM_ID as ks,TOKEN_PROGRAM_ID as Ts}from"@solana/spl-token";var Vo=class extends Be{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(o,n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Ct.address,Ct),this._mintGroup.official.add(Ct.address),s.forEach(u=>{this._blackTokenMap.set(u.address,F(C({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ks.toBase58():Ts.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ks.toBase58():Ts.toBase58()})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?ks.toBase58():Ts.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return Ct;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new op(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=rp.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var Gr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new kt(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ue("Raydium"),this.farm=new yo({scope:this,moduleName:"Raydium_Farm"}),this.account=new oo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Bo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Vo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Lo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new xo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ro({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new At({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new En({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Dn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=ip({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:s,urlConfigs:a}=t,c=new cr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:s}),u=new Gr(F(C({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(lr);return this._owner.publicKey}setOwner(e){return this._owner=e?new kt(e):void 0,this}get connection(){if(!this._connection)throw new Error(Aa);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw this.logger.error(lr),new Error(lr)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}async fetchJupTokenList(e,t){var i;let n=(i=this.apiData.jupTokenList)==null?void 0:i[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let o=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=F(C({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:o}}),this.apiData.jupTokenList[e].data}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var nK=r=>r;export{sd as AMM_CONFIG_SEED,gu as BIT_PRECISION,xo as Clmm,Bu as ClmmConfigLayout,xe as ClmmInstrument,Nr as ConstantProductCurve,Yu as CpmmConfigInfoLayout,Lr as CpmmFee,Fr as CpmmPoolInfoLayout,Mr as CurveCalculator,Xm as DataElement,ts as EXTENSION_TICKARRAY_BITMAP_SIZE,Wa as FARM_LOCK_MINT,qa as FARM_LOCK_VAULT,ft as FARM_PROGRAM_TO_VERSION,Ga as FARM_VERSION_TO_LEDGER_LAYOUT,Ua as FARM_VERSION_TO_STATE_LAYOUT,Sr as FEE_RATE_DENOMINATOR,cs as FEE_RATE_DENOMINATOR_VALUE,fd as FETCH_TICKARRAY_COUNT,pd as Fee,Ou as LIQUIDITY_FEES_DENOMINATOR,Lu as LIQUIDITY_FEES_NUMERATOR,hd as LIQUIDITY_VERSION_TO_SERUM_VERSION,xP as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Au as LOG_B_2_X32,wu as LOG_B_P_ERR_MARGIN_LOWER_X64,Pu as LOG_B_P_ERR_MARGIN_UPPER_X64,ce as LiquidityMath,gs as MARKET_STATE_LAYOUT_V2,fs as MARKET_STATE_LAYOUT_V3,Zu as MARKET_VERSION_TO_STATE_LAYOUT,Mt as MAX_SQRT_PRICE_X64,xr as MAX_SQRT_PRICE_X64_SUB_ONE,tt as MAX_TICK,Nt as MIN_SQRT_PRICE_X64,Br as MIN_SQRT_PRICE_X64_ADD_ONE,Qe as MIN_TICK,Nn as MODEL_DATA_PUBKEY,Wr as Market,ne as MathUtil,es as MaxU64,bu as MaxUint128,qt as NEGATIVE_ONE,mt as ONE,md as OPERATION_SEED,rs as ObservationInfoLayout,gd as ObservationLayout,xu as OperationLayout,cd as POOL_REWARD_VAULT_SEED,ad as POOL_SEED,dd as POOL_TICK_ARRAY_BITMAP_SEED,ud as POOL_VAULT_SEED,pu as POSITION_SEED,yn as PoolInfoLayout,Ce as PoolUtils,Kr as PositionInfoLayout,wd as PositionRewardInfoLayout,To as PositionUtils,lk as ProtocolPositionLayout,Ir as Q128,dt as Q64,Gr as Raydium,Ad as RewardInfo,Du as RoundDirection,ju as SERUM_PROGRAMID_TO_VERSION,Hu as SERUM_VERSION_TO_PROGRAMID,Ct as SOL_INFO,eP as SPL_MINT_LAYOUT,te as SqrtPriceMath,On as StableLayout,fn as SwapMath,pn as TICK_ARRAY_BITMAP_SIZE,ld as TICK_ARRAY_SEED,Ve as TICK_ARRAY_SIZE,$P as TICK_SPACINGS,Me as TOKEN_WSOL,Ut as TickArrayBitmap,Iu as TickArrayBitmapExtensionLayout,ko as TickArrayBitmapExtensionUtils,ho as TickArrayLayout,Pd as TickLayout,bn as TickMath,le as TickQuery,j as TickUtils,Po as U64Resolution,th as U64_IGNORE_RANGE,Ea as Voter,xm as VoterDepositEntry,Bm as VoterLockup,Fa as VoterRegistrar,Im as VoterVotingMintConfig,de as ZERO,Yi as addLiquidityLayout,Si as associatedLedgerAccountLayout,Di as calFarmRewardAmount,Kd as ceilDiv,Mo as claimLayout,Tu as clmmComputeInfoToApiInfo,Ot as closeAccountInstruction,lo as createAssociatedLedgerAccountInstruction,$a as createPoolFeeLayout,uu as createPoolV4InstructionV2,BP as createPoolV4Layout,Dt as createWSolAccountInstructions,$e as dwLayout,Li as farmAddRewardLayout,EA as farmLedgerLayoutV3_1,io as farmLedgerLayoutV3_2,DA as farmLedgerLayoutV5_1,Va as farmLedgerLayoutV5_2,va as farmLedgerLayoutV6_1,za as farmRewardInfoToConfig,Ci as farmRewardLayout,Ri as farmRewardRestartLayout,Tm as farmRewardTimeInfoLayout,Ma as farmStateV3Layout,_a as farmStateV5Layout,ro as farmStateV6Layout,mw as fetchMultipleFarmInfoAndUpdate,qk as fetchMultipleInfo,Gi as fixedSwapInLayout,Xi as fixedSwapOutLayout,Fu as floorDiv,td as formatLayout,ze as generatePubKey,Xa as getAssociatedAuthority,Cr as getAssociatedConfigId,Ye as getAssociatedLedgerAccount,ao as getAssociatedLedgerPoolAccount,xd as getAssociatedOpenOrders,Mu as getAssociatedPoolKeys,Vd as getCpmmPdaAmmConfigId,vd as getCpmmPdaPoolId,qu as getCreatePoolKeys,Wi as getDepositEntryIndex,ou as getDxByDyBaseIn,nu as getDyByDxBaseIn,Ln as getFarmLedgerLayout,Sm as getFarmStateLayout,us as getLiquidityAssociatedAuthority,gn as getLiquidityAssociatedId,Dh as getLiquidityFromAmounts,HP as getPdaAmmConfigId,lt as getPdaExBitmapAccount,Fd as getPdaLpMint,Tr as getPdaMetadataKey,_r as getPdaObservationId,wo as getPdaOperationAccount,yt as getPdaPersonalPositionAddress,Fn as getPdaPoolAuthority,fu as getPdaPoolId,yu as getPdaPoolRewardVaulId,$i as getPdaPoolVaultId,dn as getPdaProtocolPositionAddress,we as getPdaTickArrayAddress,Wu as getPdaVault,Mi as getRegistrarAddress,ru as getStablePrice,Ei as getTokenOwnerRecordAddress,vi as getVoterAddress,Fi as getVoterWeightRecordAddress,Vi as getVotingMintAuthority,_i as getVotingTokenMint,Vm as governanceCreateTokenOwnerRecord,XP as i16ToBytes,kr as i32ToBytes,zi as initPoolLayout,Bi as initTokenAccountInstruction,ep as initializeMarket,Oi as isValidFarmVersion,Ao as isZero,dw as judgeFarmType,Zi as leadingZeros,du as leastSignificantBit,go as liquidityStateV4Layout,Um as liquidityStateV5Layout,hr as makeAMMSwapInstruction,au as makeAddLiquidityInstruction,Ui as makeAddNewRewardInstruction,Ur as makeClaimInstruction,hs as makeClaimInstructionV4,Gu as makeCreateCpmmPoolInInstruction,Ya as makeCreateFarmInstruction,rc as makeCreateMarketInstruction,Qa as makeCreatorWithdrawFarmRewardInstruction,Xu as makeDepositCpmmInInstruction,ja as makeDepositInstructionV3,Ha as makeDepositInstructionV5,Za as makeDepositInstructionV6,Cw as makeDepositTokenInstruction,Lw as makeDepositWithdrawInstruction,UP as makeInitPoolInstructionV4,eS as makePurchaseInstruction,qi as makeRestartRewardInstruction,cu as makeSimulatePoolInfoInstruction,Vr as makeSwapCpmmBaseInInInstruction,vr as makeSwapCpmmBaseOutInInstruction,rd as makeSwapFixedInInstruction,id as makeSwapFixedOutInstruction,Qu as makeSwapInstruction,no as makeTransferInstruction,zu as makeWithdrawCpmmInInstruction,fo as makeWithdrawInstructionV3,po as makeWithdrawInstructionV5,mo as makeWithdrawInstructionV6,Rw as makeWithdrawTokenInstruction,eh as mockCreatePoolInfo,hu as mockV3CreatePoolInfo,zm as modelDataInfoLayout,mu as mostSignificantBit,Na as parseTokenAccountResp,lP as parseTokenInfo,nn as poolTypeV6,As as purchaseLayout,Pm as realFarmStateV3Layout,hm as realFarmStateV5Layout,km as realFarmV6Layout,Hi as removeLiquidityInstruction,Qi as removeLiquidityLayout,bB as route1Instruction,gB as route2Instruction,zd as routeInstruction,qP as simulatePoolInfoInstruction,dP as solToWSolToken,Jt as splAccountLayout,Rr as toAmmComputePoolInfo,et as toApiV3Token,on as toFeeConfig,Pr as toToken,bo as toTokenAmount,mP as toTokenInfo,Ji as trailingZeros,lu as u16ToBytes,zP as u32ToBytes,nK as unionArr,Km as updateFarmPoolInfo,Ni as validateFarmRewards,Fm as voterStakeRegistryCreateDepositEntry,vm as voterStakeRegistryCreateVoter,Nm as voterStakeRegistryDeposit,Mm as voterStakeRegistryUpdateVoterWeightRecord,_m as voterStakeRegistryWithdraw,pP as wSolToSolToken,Ki as withdrawRewardLayout};
|
|
1
|
+
var uc=Object.defineProperty,cc=Object.defineProperties;var lc=Object.getOwnPropertyDescriptors;var Fo=Object.getOwnPropertySymbols;var Ss=Object.prototype.hasOwnProperty,Ks=Object.prototype.propertyIsEnumerable;var xs=(r,e,t)=>e in r?uc(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,C=(r,e)=>{for(var t in e||(e={}))Ss.call(e,t)&&xs(r,t,e[t]);if(Fo)for(var t of Fo(e))Ks.call(e,t)&&xs(r,t,e[t]);return r},F=(r,e)=>cc(r,lc(e));var Se=(r,e)=>{var t={};for(var n in r)Ss.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Fo)for(var n of Fo(r))e.indexOf(n)<0&&Ks.call(r,n)&&(t[n]=r[n]);return t};import{merge as ip}from"lodash";import ga from"axios";import{get as Cs,set as mc}from"lodash";var zr=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},Rs={},dc={};function ue(r){let e=Cs(Rs,r);if(!e){let t=Cs(dc,r);e=new zr({name:r,logLevel:t}),mc(Rs,r,e)}return e}import{PublicKey as hl}from"@solana/web3.js";import kl from"bn.js";import Al from"big.js";import er from"bn.js";import it from"bn.js";var In=9e15,Zt=1e9,Yr="0123456789abcdef",Do="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Wo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Qr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-In,maxE:In,crypto:!1},Ms,vt,oe=!0,Uo="[DecimalError] ",Ht=Uo+"Invalid argument: ",_s=Uo+"Precision limit exceeded",Vs=Uo+"crypto unavailable",vs="[object Decimal]",Ge=Math.floor,Oe=Math.pow,pc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,fc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,yc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Fs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Pt=1e7,ee=7,bc=9007199254740991,gc=Do.length-1,jr=Wo.length-1,M={toStringTag:vs};M.absoluteValue=M.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),H(r)};M.ceil=function(){return H(new this.constructor(this),this.e+1,2)};M.clampedTo=M.clamp=function(r,e){var t,n=this,o=n.constructor;if(r=new o(r),e=new o(e),!r.s||!e.s)return new o(NaN);if(r.gt(e))throw Error(Ht+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new o(n)};M.comparedTo=M.cmp=function(r){var e,t,n,o,i=this,s=i.d,a=(r=new i.constructor(r)).d,c=i.s,u=r.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==r.e)return i.e>r.e^c<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};M.cosine=M.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+ee,n.rounding=1,t=Ac(n,Us(n,t)),n.precision=r,n.rounding=e,H(vt==2||vt==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};M.cubeRoot=M.cbrt=function(){var r,e,t,n,o,i,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,i=l.s*Oe(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=De(l.d),r=l.e,(i=(r-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Oe(t,1/3),r=Ge((r+1)/3)-(r%3==(r<0?-1:2)),i==1/0?t="5e"+r:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(r=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Pe(u.plus(l).times(a),u.plus(c),s+2,1),De(a.d).slice(0,s)===(t=De(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(H(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(H(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,H(n,r,m.rounding,e)};M.decimalPlaces=M.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-Ge(this.e/ee))*ee,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(r){return Pe(this,new this.constructor(r))};M.dividedToIntegerBy=M.divToInt=function(r){var e=this,t=e.constructor;return H(Pe(e,new t(r),0,1,1),t.precision,t.rounding)};M.equals=M.eq=function(r){return this.cmp(r)===0};M.floor=function(){return H(new this.constructor(this),this.e+1,3)};M.greaterThan=M.gt=function(r){return this.cmp(r)>0};M.greaterThanOrEqualTo=M.gte=function(r){var e=this.cmp(r);return e==1||e===0};M.hyperbolicCosine=M.cosh=function(){var r,e,t,n,o,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,o=i.d.length,o<32?(r=Math.ceil(o/3),e=(1/Xo(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),i=Bn(s,1,i.times(e),new s(1),!0);for(var c,u=r,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return H(i,s.precision=t,s.rounding=n,!0)};M.hyperbolicSine=M.sinh=function(){var r,e,t,n,o=this,i=o.constructor;if(!o.isFinite()||o.isZero())return new i(o);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(o.e,o.sd())+4,i.rounding=1,n=o.d.length,n<3)o=Bn(i,2,o,o,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,o=o.times(1/Xo(5,r)),o=Bn(i,2,o,o,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);r--;)s=o.times(o),o=o.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,H(o,e,t,!0)};M.hyperbolicTangent=M.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,Pe(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};M.inverseCosine=M.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?wt(t,o,i):new t(0):new t(NaN):e.isZero()?wt(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),r=wt(t,o+4,i).times(.5),t.precision=o,t.rounding=i,r.minus(e))};M.inverseHyperbolicCosine=M.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};M.inverseHyperbolicSine=M.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln())};M.inverseHyperbolicTangent=M.atanh=function(){var r,e,t,n,o=this,i=o.constructor;return o.isFinite()?o.e>=0?new i(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(r=i.precision,e=i.rounding,n=o.sd(),Math.max(n,r)<2*-o.e-1?H(new i(o),r,e,!0):(i.precision=t=n-o.e,o=Pe(o.plus(1),new i(1).minus(o),t+r,1),i.precision=r+4,i.rounding=1,o=o.ln(),i.precision=r,i.rounding=e,o.times(.5))):new i(NaN)};M.inverseSine=M.asin=function(){var r,e,t,n,o=this,i=o.constructor;return o.isZero()?new i(o):(e=o.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(r=wt(i,t+4,n).times(.5),r.s=o.s,r):new i(NaN):(i.precision=t+6,i.rounding=1,o=o.div(new i(1).minus(o.times(o)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,o.times(2)))};M.inverseTangent=M.atan=function(){var r,e,t,n,o,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=jr)return s=wt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=jr)return s=wt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ee+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/ee),n=1,c=u.times(u),s=new l(u),o=u;r!==-1;)if(o=o.times(c),i=s.minus(o.div(n+=2)),o=o.times(c),s=i.plus(o.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===i.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),oe=!0,H(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&Ge(this.e/ee)>this.d.length-2};M.isNaN=function(){return!this.s};M.isNegative=M.isNeg=function(){return this.s<0};M.isPositive=M.isPos=function(){return this.s>0};M.isZero=function(){return!!this.d&&this.d[0]===0};M.lessThan=M.lt=function(r){return this.cmp(r)<0};M.lessThanOrEqualTo=M.lte=function(r){return this.cmp(r)<1};M.logarithm=M.log=function(r){var e,t,n,o,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(o=t[0];o%10===0;)o/=10;i=o!==1}if(oe=!1,a=m+p,s=jt(u,a),n=e?qo(l,a+10):jt(r,a),c=Pe(s,n,a,1),Wn(c.d,o=m,d))do if(a+=10,s=jt(u,a),n=e?qo(l,a+10):jt(r,a),c=Pe(s,n,a,1),!i){+De(c.d).slice(o+1,o+15)+1==1e14&&(c=H(c,m+1,0));break}while(Wn(c.d,o+=10,d));return oe=!0,H(c,m,d)};M.minus=M.sub=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.constructor;if(r=new y(r),!p.d||!r.d)return!p.s||!r.s?r=new y(NaN):p.d?r.s=-r.s:r=new y(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(u=p.d,d=r.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])r.s=-r.s;else if(u[0])r=new y(p);else return new y(c===3?-0:0);return oe?H(r,a,c):r}if(t=Ge(r.e/ee),l=Ge(p.e/ee),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ee),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,r.s=-r.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=Pt-1;--u[o],u[n]+=Pt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(r.d=u,r.e=Go(u,t),oe?H(r,a,c):r):new y(c===3?-0:0)};M.modulo=M.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?H(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=Pe(t,r.abs(),0,3,1),e.s*=r.s):e=Pe(t,r,0,n.modulo,1),e=e.times(r),oe=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return Hr(this)};M.naturalLogarithm=M.ln=function(){return jt(this)};M.negated=M.neg=function(){var r=new this.constructor(this);return r.s=-r.s,H(r)};M.plus=M.add=function(r){var e,t,n,o,i,s,a,c,u,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(u=m.d,l=r.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(r=new d(m)),oe?H(r,a,c):r;if(i=Ge(m.e/ee),n=Ge(r.e/ee),u=u.slice(),o=i-n,o){for(o<0?(t=u,o=-o,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/ee),s=i>s?i+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/Pt|0,u[o]%=Pt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=Go(u,n),oe?H(r,a,c):r};M.precision=M.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(Ht+r);return t.d?(e=Es(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var r=this,e=r.constructor;return H(new e(r),r.e+1,e.rounding)};M.sine=M.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+ee,n.rounding=1,t=Pc(n,Us(n,t)),n.precision=r,n.rounding=e,H(vt>2?t.neg():t,r,e,!0)):new n(NaN)};M.squareRoot=M.sqrt=function(){var r,e,t,n,o,i,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(oe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=De(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=Ge((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(Pe(s,i,t+2,1)).times(.5),De(i.d).slice(0,t)===(e=De(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(H(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(H(n,c+1,1),r=!n.times(n).eq(s));break}return oe=!0,H(n,c,l.rounding,r)};M.tangent=M.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=Pe(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,H(vt==2||vt==4?t.neg():t,r,e,!0)):new n(NaN)};M.times=M.mul=function(r){var e,t,n,o,i,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=Ge(l.e/ee)+Ge(r.e/ee),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,s=c,c=u,u=s),i=[],s=c+u,n=s;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=i[o]+p[n]*d[o-n-1]+e,i[o--]=a%Pt|0,e=a/Pt|0;i[o]=(i[o]+e)%Pt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),r.d=i,r.e=Go(i,t),oe?H(r,m.precision,m.rounding):r};M.toBinary=function(r,e){return Jr(this,2,r,e)};M.toDecimalPlaces=M.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(nt(r,0,Zt),e===void 0?e=n.rounding:nt(e,0,8),H(t,r+t.e+1,e))};M.toExponential=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Kt(n,!0):(nt(r,0,Zt),e===void 0?e=o.rounding:nt(e,0,8),n=H(new o(n),r+1,e),t=Kt(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toFixed=function(r,e){var t,n,o=this,i=o.constructor;return r===void 0?t=Kt(o):(nt(r,0,Zt),e===void 0?e=i.rounding:nt(e,0,8),n=H(new i(o),r+o.e+1,e),t=Kt(n,!1,r+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};M.toFraction=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),i=e.e=Es(y)-p.e-1,s=i%ee,e.d[0]=Oe(10,s<0?ee+s:s),r==null)r=i>0?e:u;else{if(a=new f(r),!a.isInt()||a.lt(u))throw Error(Ht+a);r=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(De(y)),l=f.precision,f.precision=i=y.length*ee*2;m=Pe(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(r)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=Pe(r.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=Pe(u,n,i,1).minus(p).abs().cmp(Pe(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};M.toHexadecimal=M.toHex=function(r,e){return Jr(this,16,r,e)};M.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:nt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(oe=!1,t=Pe(t,r,0,e,1).times(r),oe=!0,H(t)):(r.s=t.s,t=r),t};M.toNumber=function(){return+this};M.toOctal=function(r,e){return Jr(this,8,r,e)};M.toPower=M.pow=function(r){var e,t,n,o,i,s,a=this,c=a.constructor,u=+(r=new c(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new c(Oe(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,r.eq(1))return H(a,n,i);if(e=Ge(r.e/ee),e>=r.d.length-1&&(t=u<0?-u:u)<=bc)return o=Ds(c,a,t,n),r.s<0?new c(1).div(o):H(o,n,i);if(s=a.s,s<0){if(e<r.d.length-1)return new c(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Oe(+a,u),e=t==0||!isFinite(t)?Ge(u*(Math.log("0."+De(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(oe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=Hr(r.times(jt(a,n+t)),n),o.d&&(o=H(o,n+5,1),Wn(o.d,n,i)&&(e=n+10,o=H(Hr(r.times(jt(a,e+t)),e),e+5,1),+De(o.d).slice(n+1,n+15)+1==1e14&&(o=H(o,n+1,0)))),o.s=s,oe=!0,c.rounding=i,H(o,n,i))};M.toPrecision=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Kt(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(nt(r,1,Zt),e===void 0?e=o.rounding:nt(e,0,8),n=H(new o(n),r,e),t=Kt(n,r<=n.e||n.e<=o.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toSignificantDigits=M.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(nt(r,1,Zt),e===void 0?e=n.rounding:nt(e,0,8)),H(new n(t),r,e)};M.toString=function(){var r=this,e=r.constructor,t=Kt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};M.truncated=M.trunc=function(){return H(new this.constructor(this),this.e+1,1)};M.valueOf=M.toJSON=function(){var r=this,e=r.constructor,t=Kt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function De(r){var e,t,n,o=r.length-1,i="",s=r[0];if(o>0){for(i+=s,e=1;e<o;e++)n=r[e]+"",t=ee-n.length,t&&(i+=Qt(t)),i+=n;s=r[e],n=s+"",t=ee-n.length,t&&(i+=Qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function nt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(Ht+r)}function Wn(r,e,t,n){var o,i,s,a;for(i=r[0];i>=10;i/=10)--e;return--e<0?(e+=ee,o=0):(o=Math.ceil((e+1)/ee),e%=ee),i=Oe(10,ee-e),a=r[o]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==i||t>3&&a+1==i/2)&&(r[o+1]/i/100|0)==Oe(10,e-2)-1||(a==i/2||a==0)&&(r[o+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(r[o+1]/i/1e3|0)==Oe(10,e-3)-1,s}function Eo(r,e,t){for(var n,o=[0],i,s=0,a=r.length;s<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=Yr.indexOf(r.charAt(s++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function Ac(r,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/Xo(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),r.precision+=t,e=Bn(r,1,e.times(o),new r(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var Pe=function(){function r(n,o,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*o+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,o,i,s){var a,c;if(i!=s)c=i>s?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*s+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,s,a,c){var u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I,L,W,D=n.constructor,$=n.s==o.s?1:-1,G=n.d,q=o.d;if(!G||!G[0]||!q||!q[0])return new D(!n.s||!o.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?$*0:$/0);for(c?(p=1,l=n.e-o.e):(c=Pt,p=ee,l=Ge(n.e/p)-Ge(o.e/p)),L=q.length,R=G.length,g=new D($),h=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,i==null?(T=i=D.precision,s=D.rounding):a?T=i+(n.e-o.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,q=q[0],T++;(m<R||d)&&T--;m++)S=d*c+(G[m]||0),h[m]=S/q|0,d=S%q|0;y=d||m<R}else{for(d=c/(q[0]+1)|0,d>1&&(q=r(q,d,c),G=r(G,d,c),L=q.length,R=G.length),x=L,P=G.slice(0,L),k=P.length;k<L;)P[k++]=0;W=q.slice(),W.unshift(0),I=q[0],q[1]>=c/2&&++I;do d=0,u=e(q,P,L,k),u<0?(B=P[0],L!=k&&(B=B*c+(P[1]||0)),d=B/I|0,d>1?(d>=c&&(d=c-1),f=r(q,d,c),b=f.length,k=P.length,u=e(f,P,b,k),u==1&&(d--,t(f,L<b?W:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<k&&f.unshift(0),t(P,f,k,c),u==-1&&(k=P.length,u=e(q,P,L,k),u<1&&(d++,t(P,L<k?W:q,k,c))),k=P.length):u===0&&(d++,P=[0]),h[m++]=d,u&&P[0]?P[k++]=G[x]||0:(P=[G[x]],k=1);while((x++<R||P[0]!==void 0)&&T--);y=P[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,Ms=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,H(g,a?i+g.e+1:i,s,y)}return g}}();function H(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=ee,s=e,l=m[d=0],c=l/Oe(10,o-s-1)%10|0;else if(d=Math.ceil((i+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=ee,s=i-ee+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=ee,s=i-ee+o,c=s<0?0:l/Oe(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Oe(10,o-s-1)),u=t<4?(c||n)&&(t==0||t==(r.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/Oe(10,o-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=r.e+1,m[0]=Oe(10,(ee-e%ee)%ee),r.e=-e||0):m[0]=r.e=0,r;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Oe(10,ee-i),m[d]=s>0?(l/Oe(10,o-s)%Oe(10,s)|0)*a:0),u)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(r.e++,m[0]==Pt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Pt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function Kt(r,e,t){if(!r.isFinite())return qs(r);var n,o=r.e,i=De(r.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Qt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(r.e<0?"e":"e+")+r.e):o<0?(i="0."+Qt(-o-1)+i,t&&(n=t-s)>0&&(i+=Qt(n))):o>=s?(i+=Qt(o+1-s),t&&(n=t-o-1)>0&&(i=i+"."+Qt(n))):((n=o+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(i+="."),i+=Qt(n))),i}function Go(r,e){var t=r[0];for(e*=ee;t>=10;t/=10)e++;return e}function qo(r,e,t){if(e>gc)throw oe=!0,t&&(r.precision=t),Error(_s);return H(new r(Do),e,1,!0)}function wt(r,e,t){if(e>jr)throw Error(_s);return H(new r(Wo),e,t,!0)}function Es(r){var e=r.length-1,t=e*ee+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function Qt(r){for(var e="";r--;)e+="0";return e}function Ds(r,e,t,n){var o,i=new r(1),s=Math.ceil(n/ee+4);for(oe=!1;;){if(t%2&&(i=i.times(e),Os(i.d,s)&&(o=!0)),t=Ge(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Os(e.d,s)}return oe=!0,i}function Ls(r){return r.d[r.d.length-1]&1}function Ws(r,e,t){for(var n,o=new r(e[0]),i=0;++i<e.length;)if(n=new r(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function Hr(r,e){var t,n,o,i,s,a,c,u=0,l=0,m=0,d=r.constructor,p=d.rounding,y=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(oe=!1,c=y):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Oe(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=H(i.times(r),c,1),t=t.times(++l),a=s.plus(Pe(i,t,c,1)),De(a.d).slice(0,c)===De(s.d).slice(0,c)){for(o=m;o--;)s=H(s.times(s),c,1);if(e==null)if(u<3&&Wn(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return H(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function jt(r,e){var t,n,o,i,s,a,c,u,l,m,d,p=1,y=10,f=r,b=f.d,g=f.constructor,h=g.rounding,P=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(oe=!1,l=P):l=e,g.precision=l+=y,t=De(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=De(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return u=qo(g,l+2,P).times(i+""),f=jt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=P,e==null?H(f,P,h,oe=!0):f;for(m=f,c=s=f=Pe(f.minus(1),f.plus(1),l,1),d=H(f.times(f),l,1),o=3;;){if(s=H(s.times(d),l,1),u=c.plus(Pe(s,new g(o),l,1)),De(u.d).slice(0,l)===De(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(qo(g,l+2,P).times(i+""))),c=Pe(c,new g(p),l,1),e==null)if(Wn(c.d,l-y,h,a))g.precision=l+=y,u=s=f=Pe(m.minus(1),m.plus(1),l,1),d=H(f.times(f),l,1),o=a=1;else return H(c,g.precision=P,h,oe=!0);else return g.precision=P,c;c=u,o+=2}}function qs(r){return String(r.s*r.s/0)}function Zr(r,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<o){for(n&&r.d.push(+e.slice(0,n)),o-=ee;n<o;)r.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=o;for(;n--;)e+="0";r.d.push(+e),oe&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function wc(r,e){var t,n,o,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Fs.test(e))return Zr(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(fc.test(e))t=16,e=e.toLowerCase();else if(pc.test(e))t=2;else if(yc.test(e))t=8;else throw Error(Ht+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,o=Ds(n,new n(t),i,i*2)),u=Eo(e,t,Pt),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(r.s*0):(r.e=Go(u,l),r.d=u,oe=!1,s&&(r=Pe(r,o,a*4)),c&&(r=r.times(Math.abs(c)<54?Oe(2,c):qn.pow(2,c))),oe=!0,r)}function Pc(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Bn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Xo(5,t)),e=Bn(r,2,e,e);for(var o,i=new r(5),s=new r(16),a=new r(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(s.times(o).minus(a))));return e}function Bn(r,e,t,n,o){var i,s,a,c,u=1,l=r.precision,m=Math.ceil(l/ee);for(oe=!1,c=t.times(t),a=new r(n);;){if(s=Pe(a.times(c),new r(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=Pe(s.times(c),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function Xo(r,e){for(var t=r;--e;)t*=r;return t}function Us(r,e){var t,n=e.s<0,o=wt(r,r.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return vt=n?4:1,e;if(t=e.divToInt(o),t.isZero())vt=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return vt=Ls(t)?n?2:3:n?4:1,e;vt=Ls(t)?n?1:4:n?3:2}return e.minus(o).abs()}function Jr(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor,y=t!==void 0;if(y?(nt(t,1,Zt),n===void 0?n=p.rounding:nt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=qs(r);else{for(l=Kt(r),s=l.indexOf("."),y?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Eo(Kt(d),10,o),d.e=d.d.length),m=Eo(l,10,o),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(r=new p(r),r.d=m,r.e=i,r=Pe(r,d,t,n,0,o),m=r.d,i=r.e,u=Ms),s=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=Yr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=Eo(l,o,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=Yr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function Os(r,e){if(r.length>e)return r.length=e,!0}function hc(r){return new this(r).abs()}function kc(r){return new this(r).acos()}function Tc(r){return new this(r).acosh()}function Ic(r,e){return new this(r).plus(e)}function Bc(r){return new this(r).asin()}function xc(r){return new this(r).asinh()}function Sc(r){return new this(r).atan()}function Kc(r){return new this(r).atanh()}function Cc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=wt(this,i,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?wt(this,n,o):new this(0),t.s=r.s):!r.d||e.isZero()?(t=wt(this,i,1).times(.5),t.s=r.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(Pe(r,e,i,1)),e=wt(this,i,1),this.precision=n,this.rounding=o,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(Pe(r,e,i,1)),t}function Rc(r){return new this(r).cbrt()}function Lc(r){return H(r=new this(r),r.e+1,2)}function Oc(r,e,t){return new this(r).clamp(e,t)}function Nc(r){if(!r||typeof r!="object")throw Error(Uo+"Object expected");var e,t,n,o=r.defaults===!0,i=["precision",1,Zt,"rounding",0,8,"toExpNeg",-In,0,"toExpPos",0,In,"maxE",0,In,"minE",-In,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=Qr[t]),(n=r[t])!==void 0)if(Ge(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Ht+t+": "+n);if(t="crypto",o&&(this[t]=Qr[t]),(n=r[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(Vs);else this[t]=!1;else throw Error(Ht+t+": "+n);return this}function Mc(r){return new this(r).cos()}function _c(r){return new this(r).cosh()}function Gs(r){var e,t,n;function o(i){var s,a,c,u=this;if(!(u instanceof o))return new o(i);if(u.constructor=o,Ns(i)){u.s=i.s,oe?!i.d||i.e>o.maxE?(u.e=NaN,u.d=null):i.e<o.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;oe?s>o.maxE?(u.e=NaN,u.d=null):s<o.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[i]):(u.e=s,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return Zr(u,i.toString())}else if(c!=="string")throw Error(Ht+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Fs.test(i)?Zr(u,i):wc(u,i)}if(o.prototype=M,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=Nc,o.clone=Gs,o.isDecimal=Ns,o.abs=hc,o.acos=kc,o.acosh=Tc,o.add=Ic,o.asin=Bc,o.asinh=xc,o.atan=Sc,o.atanh=Kc,o.atan2=Cc,o.cbrt=Rc,o.ceil=Lc,o.clamp=Oc,o.cos=Mc,o.cosh=_c,o.div=Vc,o.exp=vc,o.floor=Fc,o.hypot=Ec,o.ln=Dc,o.log=Wc,o.log10=Uc,o.log2=qc,o.max=Gc,o.min=Xc,o.mod=zc,o.mul=Yc,o.pow=Qc,o.random=jc,o.round=Hc,o.sign=Zc,o.sin=Jc,o.sinh=$c,o.sqrt=el,o.sub=tl,o.sum=nl,o.tan=ol,o.tanh=rl,o.trunc=il,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return o.config(r),o}function Vc(r,e){return new this(r).div(e)}function vc(r){return new this(r).exp()}function Fc(r){return H(r=new this(r),r.e+1,3)}function Ec(){var r,e,t=new this(0);for(oe=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function Ns(r){return r instanceof qn||r&&r.toStringTag===vs||!1}function Dc(r){return new this(r).ln()}function Wc(r,e){return new this(r).log(e)}function qc(r){return new this(r).log(2)}function Uc(r){return new this(r).log(10)}function Gc(){return Ws(this,arguments,"lt")}function Xc(){return Ws(this,arguments,"gt")}function zc(r,e){return new this(r).mod(e)}function Yc(r,e){return new this(r).mul(e)}function Qc(r,e){return new this(r).pow(e)}function jc(r){var e,t,n,o,i=0,s=new this(1),a=[];if(r===void 0?r=this.precision:nt(r,1,Zt),n=Math.ceil(r/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)o=e[i],o>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)o=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(o%1e7),i+=4);i=n/4}else throw Error(Vs);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],r%=ee,n&&r&&(o=Oe(10,ee-r),a[i]=(n/o|0)*o);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ee)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<ee&&(t-=ee-n)}return s.e=t,s.d=a,s}function Hc(r){return H(r=new this(r),r.e+1,this.rounding)}function Zc(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Jc(r){return new this(r).sin()}function $c(r){return new this(r).sinh()}function el(r){return new this(r).sqrt()}function tl(r,e){return new this(r).sub(e)}function nl(){var r=0,e=arguments,t=new this(e[r]);for(oe=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return oe=!0,H(t,this.precision,this.rounding)}function ol(r){return new this(r).tan()}function rl(r){return new this(r).tanh()}function il(r){return H(r=new this(r),r.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var qn=M.constructor=Gs(Qr);Do=new qn(Do);Wo=new qn(Wo);var V=qn;import{PublicKey as oi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sl}from"@solana/spl-token";import{PublicKey as Te,SystemProgram as Xs,SYSVAR_RENT_PUBKEY as al}from"@solana/web3.js";function A({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var $r=[A({pubkey:sl,isWritable:!1}),A({pubkey:Xs.programId,isWritable:!1}),A({pubkey:al,isWritable:!1})];function ei({publicKey:r,transformSol:e}){let t=ti(r.toString());if(t instanceof Te)return e&&t.equals(Ne)?Z:t;if(e&&t.toString()===Ne.toBase58())return Z;if(typeof t=="string"){if(t===Te.default.toBase58())return Te.default;try{return new Te(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ti(r){try{return new Te(r)}catch{return r}}var zo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Yo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new Te("SysvarRent111111111111111111111111111111111"),ni=new Te("SysvarC1ock11111111111111111111111111111111"),xn=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Qo=new Te("Sysvar1nstructions1111111111111111111111111"),jo=Xs.programId,pp=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),fp=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),yp=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),bp=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),gp=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Ap=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),wp=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Pp=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),hp=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),kp=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Tp=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Z=new Te("So11111111111111111111111111111111111111112"),Ne=Te.default;function ut(r){return ei({publicKey:r,transformSol:!0})}import{PublicKey as ul}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as zs}from"@solana/spl-token";var Ct={chainId:101,address:ul.default.toBase58(),programId:zs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Me={chainId:101,address:"So11111111111111111111111111111111111111112",programId:zs.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};var ri=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:s=!1}){if(e===Ne.toBase58()||e instanceof oi&&Ne.equals(e)){this.decimals=Me.decimals,this.symbol=Me.symbol,this.name=Me.name,this.mint=new oi(Me.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?oi.default:ei({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ie=ri;Ie.WSOL=new ri(F(C({},Me),{mint:Me.address}));import Zo from"big.js";import ml from"bn.js";import dl from"decimal.js-light";import cl from"toformat";var ll=cl,Un=ll;var Ho=ue("module/fraction"),ii=Un(Zo),Gn=Un(dl),pl={[0]:Gn.ROUND_DOWN,[1]:Gn.ROUND_HALF_UP,[2]:Gn.ROUND_UP},fl={[0]:Zo.roundDown,[1]:Zo.roundHalfUp,[2]:Zo.roundUp},pe=class{constructor(e,t=new ml(1)){this.numerator=J(e),this.denominator=J(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new pe(this.denominator,this.numerator)}add(e){let t=e instanceof pe?e:new pe(J(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.add(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof pe?e:new pe(J(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.sub(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof pe?e:new pe(J(e));return new pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof pe?e:new pe(J(e));return new pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Ho.logWithError(`${e} is not an integer.`),e<=0&&Ho.logWithError(`${e} is not positive.`),Gn.set({precision:e+1,rounding:pl[n]});let o=new Gn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Ho.logWithError(`${e} is not an integer.`),e<0&&Ho.logWithError(`${e} is negative.`),ii.DP=e,ii.RM=fl[n]||1,new ii(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var bl=ue("Raydium_price"),rt=class extends pe{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=o,this.scalar=new pe(si(n.decimals),si(o.decimals))}get raw(){return new pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new rt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&bl.logWithError("mul token not equals");let n=super.mul(t);return new rt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};var ai=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Jo=ai;Jo.SOL=new ai(Ct);import gl from"bn.js";var Ys=new pe(new gl(100)),Je=class extends pe{toSignificant(e=5,t,n){return this.mul(Ys).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Ys).toFixed(e,t,n)}};var pt=new it(0),js=new it(1),Pf=new it(2),hf=new it(3),kf=new it(5),ui=new it(10),Tf=new it(100),If=new it(1e3),Bf=new it(1e4),Qs=9007199254740991;function J(r){let e=ue("Raydium_parseBigNumberish");if(r instanceof it)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new it(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Qs||r<=-Qs)&&e.logWithError(`BigNumberish number overflow: ${r}`),new it(String(r))):typeof r=="bigint"?new it(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new it(0))}function si(r){return ui.pow(J(r))}function $o(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var wl=ue("Raydium_amount"),Zs=Un(Al);function Pl(r,e){let t="0",n="0";if(r.includes(".")){let o=r.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):wl.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var be=class extends pe{constructor(t,n,o=!0,i){let s=new er(0),a=ui.pow(new er(t.decimals));if(o)s=J(n);else{let c=new er(0),u=new er(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Pl(n.toString(),t.decimals);c=J(l),u=J(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ue(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Zs.DP=this.token.decimals,new Zs(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function Hs(r){return typeof r=="object"&&r!==null&&![Ie,be,hl,pe,kl,rt,Je].some(e=>typeof e=="object"&&r instanceof e)}function ke(r){return typeof r=="string"?ti(r):Array.isArray(r)?r.map(e=>ke(e)):Hs(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,ke(t)])):r}import{PublicKey as Yn,sendAndConfirmTransaction as di,Transaction as Qn,TransactionMessage as jn,VersionedTransaction as Hn}from"@solana/web3.js";import Ll from"axios";var v={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut"};import{PublicKey as $s,ComputeBudgetProgram as Js,Transaction as tr,TransactionMessage as Tl,Keypair as ea,VersionedTransaction as ta}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Il}from"@solana/spl-token";var Ft=ue("Raydium_txUtil"),na=1644;function nr(r){let e=[],t=[];return r.microLamports&&(e.push(Js.setComputeUnitPrice({microLamports:r.microLamports})),t.push(v.SetComputeUnitPrice)),r.units&&(e.push(Js.setComputeUnitLimit({units:r.units})),t.push(v.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Sn(r,e){var n,o;let t=e!=null?e:"confirmed";try{return((o=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:o.blockhash)||(await r.getRecentBlockhash(t)).blockhash}catch{return(await r.getRecentBlockhash(t)).blockhash}}function or(r,e){r.length<1&&Ft.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Ft.logWithError(`no signers provided:, ${e.toString()}`);let t=new tr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<na}catch{return!1}}async function oa(r,e,t,n=!0){let o=new $s("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new tr;s.feePayer=o;for(let u of e)or([...s.instructions,u],[o])||(i.push(s),s=new tr,s.feePayer=o),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await Bl(r,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Ft.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Ft.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Ft.debug("filteredLog:",c),l.length||Ft.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function ra(r,e){let t=r.match(/{["\w:,]+}/g);return!t||t.length!==1?Ft.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Et(r,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(r);return!n||n.length!==2?Ft.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ae(r,e){let[t,n]=$s.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}async function Bl(r,e,t){let n=[];if(t){let o=await r.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=o.blockhash,u.lastValidBlockHeight=o.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.map(u=>{let l=r._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await r._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async o=>await(await r.simulateTransaction(o)).value))}catch(o){o instanceof Error&&Ft.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:o.message})}return n}function Xn({instructions:r,payer:e,signers:t}){return or(r,[e,...t])}function zn({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=ea.generate().publicKey.toString()}){let i=new Tl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new ta(i).serialize()).toString("base64").length<na}catch{return!1}}var xl=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r);function an(r){let e=[];return r.forEach(t=>{t instanceof tr&&(t.recentBlockhash||(t.recentBlockhash=Il.toBase58()),t.feePayer||(t.feePayer=ea.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof ta&&(n=xl(n));let o=n.toString("base64");e.push(o)}),console.log("simulate tx string:",e),e}import{PublicKey as sa,AddressLookupTableAccount as rr}from"@solana/web3.js";import{PublicKey as ia}from"@solana/web3.js";import{MINT_SIZE as Sl,TOKEN_PROGRAM_ID as Kl,getTransferFeeConfig as Cl,unpackMint as Rl}from"@solana/spl-token";var ci=ue("Raydium_accountInfo_util");async function ht(r,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=li(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=li(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&ci.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&ci.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new ia(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&ci.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function _e(r,e,t){let n=await ht(r,e.map(o=>o.pubkey),t);return e.map((o,i)=>F(C({},o),{accountInfo:n[i]}))}async function Kn({connection:r,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await _e(r,e.map(c=>({pubkey:ut(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<Sl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Rl(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=F(C({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Kl,feeConfig:(a=Cl(u))!=null?a:void 0})}return o[ia.default.toBase58()]=o[Z.toBase58()],o}async function mi({connection:r,address:e}){let t=await ht(r,[...new Set(e.map(o=>o.toString()))].map(o=>new sa(o))),n={};for(let o=0;o<e.length;o++){let i=t[o],s=e[o];if(!i)continue;let a=new rr({key:s,state:rr.deserialize(i.data)});n[s.toString()]=a,ir[s.toString()]=a}return n}var ir={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new rr({key:new sa("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:rr.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};var sr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Ll.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=nr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Yn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;let t=new Qn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=o||{},c=i!=null?i:await Sn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),an([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await di(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Sn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let P=await di(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(P)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((P,k)=>(P.recentBlockhash=f,a[k].length&&P.sign(...a[k]),P));an(g);let h=await this.signAllTransactions(g);if(m){let P=0,k=[],B=async()=>{if(!h[P])return;let T=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[P]}),d==null||d([...k]),P++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let P=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});P.push(B)}return{txIds:P,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var p;let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o}=d,i=Se(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:ir),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let y of a)s[y]===void 0&&c.push(new Yn(y));let u=await mi({connection:this.connection,address:c});for(let[y,f]of Object.entries(u))s[y]=f;let l=new jn({payerKey:this.feePayer,recentBlockhash:o?Yn.default.toBase58():await Sn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s));((p=this.owner)==null?void 0:p.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new Hn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var h;let{recentBlockHash:f,skipPreflight:b=!0,sendAndConfirm:g}=y||{};if(f&&(m.message.recentBlockhash=f),an([m]),(h=this.owner)!=null&&h.isKeyPair){let P=await this.connection.sendTransaction(m,{skipPreflight:b});if(g){let{lastValidBlockHeight:k,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:k,signature:P},"confirmed")}return{txId:P,signedTx:m}}if(this.signAllTransactions){let P=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(P[0],{skipPreflight:b}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),an(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:P,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:P,signature:h},"confirmed"),b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,h=[],P=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});h.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(k,B=>{let T=h.findIndex(S=>S.txId===k);T>-1&&(h[T].status=B.err?"error":"success"),d==null||d([...h]),B.err||P()},"processed"),this.connection.getSignatureStatus(k)};return P(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let P=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(P)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=Se(u,["computeBudgetConfig"]),o=t?nr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>F(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...o.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Yn(b));if(c.length<12&&Xn({instructions:p,payer:this.feePayer,signers:f})||Xn({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");Xn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new Qn().add(...o.instructions,...c)):s.push(new Qn().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);Xn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Qn().add(...o.instructions,...c)):s.push(new Qn().add(...c)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Sn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,P)=>{h.recentBlockhash=b,a[P].length&&h.sign(...a[P])}),an(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let P of s){let k=await di(this.connection,P,this.signers.find(B=>B.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(k)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let P=0,k=[],B=async()=>{if(!h[P])return;let T=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[P]}),p==null||p([...k]),P++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let P=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});P.push(B)}return{txIds:P,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:o=[]}=b,i=Se(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:ir),n),a=Array.from(new Set([...this.lookupTableAddress,...o])),c=[];for(let h of a)s[h]===void 0&&c.push(new Yn(h));let u=await mi({connection:this.connection,address:c});for(let[h,P]of Object.entries(u))s[h]=P;let l=t?nr(t):{instructions:[],instructionTypes:[]},m=await Sn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,P)=>F(C({},h),{[P.publicKey.toBase58()]:P}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let P=[...f,h],k=t?[...l.instructions,...P]:P;if(f.length<12&&zn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||zn({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let B={};for(let T of[...new Set(a)])s[T]!==void 0&&(B[T]=s[T]);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Hn(T))}else{let T=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Hn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[h]}}),f.length>0){let P=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Hn(k))}else{let k=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Hn(k))}y.push(P)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(P=>P.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:P,onTxUpdate:k,recentBlockHash:B,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),B&&(x.message.recentBlockhash=B)}),an(p),(S=this.owner)!=null&&S.isKeyPair){if(P){let x=[];for(let R of p){let I=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:W}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:W,lastValidBlockHeight:L,signature:I},"confirmed"),x.push(I)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(P){let R=0,I=[],L=async()=>{if(!x[R])return;let W=await this.connection.sendTransaction(x[R],{skipPreflight:T});I.push({txId:W,status:"sent",signedTx:x[R]}),k==null||k([...I]),R++,this.connection.onSignature(W,D=>{let $=I.findIndex(G=>G.txId===W);$>-1&&(I[$].status=D.err?"error":"success"),k==null||k([...I]),D.err||L()},"processed"),this.connection.getSignatureStatus(W)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let I=0;I<x.length;I+=1){let L=await this.connection.sendTransaction(x[I],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var kt=class{constructor(e){this._owner=e}get publicKey(){return kt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return kt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return kt.isKeyPair(this._owner)}get isPublicKey(){return kt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!kt.isKeyPair(e)}};function li(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var aa=r=>typeof r=="number";function ua(r,e,t){let n=aa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()<=n}function ca(r,e,t){let n=aa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()>n}import{PublicKey as me}from"@solana/web3.js";var la=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),ma=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Jn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),_y=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),Vy=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),pi=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),da=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),vy=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),pa=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),fa=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Fy=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Ey=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Ol=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Nl=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Ml=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),_l=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),ya=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Dy=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Wy=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Vl=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),vl=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Fl=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),$n={IDO_PROGRAM_ID_V1:Ol,IDO_PROGRAM_ID_V2:Nl,IDO_PROGRAM_ID_V3:Ml,IDO_PROGRAM_ID_V4:_l};var qy={SERUM_MARKET:me.default,OPENBOOK_MARKET:new me("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:me.default,FarmV3:new me("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new me("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new me("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new me("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new me("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new me("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new me("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Vl,CREATE_CPMM_POOL_AUTH:vl,CREATE_CPMM_POOL_FEE_ACC:Fl,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as El}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Dl}from"@solana/spl-token";function ge(r,e,t){return ae([r.toBuffer(),(t!=null?t:Dl).toBuffer(),e.toBuffer()],new El("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Tt from"bn.js";var eo=1e4;function he(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let o=F(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,s=new Tt(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===eo){let c=new Tt(i.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=to(r.mul(new Tt(eo)),new Tt(eo-i.transferFeeBasisPoints)),u=new Tt(i.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=to(l.mul(new Tt(i.transferFeeBasisPoints)),new Tt(eo)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=to(r.mul(new Tt(i.transferFeeBasisPoints)),new Tt(eo)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function Rt(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function to(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Tt(0))?t.add(new Tt(1)):t}var Le={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://token.jup.ag/{type}",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},fb=C({},Le);var ba="ray_tab_hash",fi="ray_req_hash",Wl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(ba);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(ba,r)),r},ar=async n=>{var o=n,{logCount:r=1e3,removeLastLog:e}=o,t=Se(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(fi)||"[]").slice(0,r-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(F(C({},t),{time:Date.now(),session:Wl()}));try{localStorage.setItem(fi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(fi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return ar(F(C({},t),{logCount:r,removeLastLog:!0}))}};var ur=ue("Raydium_Api"),yi=new Map;var cr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=ga.create({baseURL:this.urlConfigs.BASE_HOST||Le.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return ur.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(ur.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&ar({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),ur.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&ar({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),ur.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Le.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Le.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ga.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Le.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Le.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Le.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||Le.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Le.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Le.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Le.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>yi.has(s)?(n.push(yi.get(s)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Le.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{yi.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&ut(t).toBase58(),n&&n!=="undefined"?ut(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Le.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Le.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Le.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Le.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Le.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Le.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Le.JITO})).data}};var lr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Aa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as xi,TOKEN_PROGRAM_ID as tn,AccountLayout as Rn,TOKEN_2022_PROGRAM_ID as gm}from"@solana/spl-token";import{PublicKey as Ar,SystemProgram as Am}from"@solana/web3.js";var bi=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Be=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ue(t)}createTxBuilder(e){return this.scope.checkOwner(),new sr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(bi(e))}logInfo(...e){this.logger.info(bi(e))}logAndCreateError(...e){let t=bi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as mm,createCloseAccountInstruction as dm,createTransferInstruction as pm,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";import{PublicKey as fm,SystemProgram as ym}from"@solana/web3.js";import bm from"bn.js";import{PublicKey as Oa,Keypair as am}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as um}from"@solana/spl-token";import cm from"bn.js";import{PublicKey as em}from"@solana/web3.js";import Ta,{isBN as Ia}from"bn.js";import{bits as Ul,BitStructure as Qb,blob as Gl,Blob as jb,cstr as Hb,f32 as Zb,f32be as Jb,f64 as $b,f64be as eg,greedy as tg,Layout as Xl,ns64 as ng,ns64be as og,nu64 as zl,nu64be as rg,offset as ig,s16 as sg,s16be as ag,s24 as ug,s24be as cg,s32 as Yl,s32be as lg,s40 as mg,s40be as dg,s48 as pg,s48be as fg,s8 as yg,seq as Ql,struct as bg,Structure as jl,u16 as Hl,u16be as gg,u24 as Ag,u24be as wg,u32 as Zl,u32be as Pg,u40 as hg,u40be as kg,u48 as Tg,u48be as Ig,u8 as Jl,UInt as $l,union as Bg,Union as xg,unionLayoutDiscriminator as Sg,utf8 as Kg}from"@solana/buffer-layout";var mr=Xl,wa=jl;var gi=$l;var Pa=Jl,Lt=Hl;var Ai=Zl;var ha=zl;var We=Yl;var ka=Ql;var fe=Gl;var wi=Ul;var un=class extends mr{constructor(t,n,o){super(t,o);this.blob=fe(t),this.signed=n}decode(t,n=0){let o=new Ta(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new Ta(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},dr=class extends mr{constructor(t){super(8,t);this._lower=wi(Ai(),!1),this._upper=wi(Ai(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function E(r){return new gi(1,r)}function Xe(r){return new gi(4,r)}function w(r){return new un(8,!1,r)}function Q(r){return new un(16,!1,r)}function Ba(r){return new un(1,!0,r)}function fr(r){return new un(8,!0,r)}function xa(r){return new un(16,!0,r)}var pr=class extends mr{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(r){return new pr(fe(32),e=>new em(e),e=>e.toBuffer(),r)}function qe(r){return new pr(Pa(),tm,nm,r)}function tm(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function nm(r){return r?1:0}var Pi=class extends wa{decode(e,t){return super.decode(e,t)}};function _(r,e,t){return new Pi(r,e,t)}function X(r,e,t){let n,o=typeof e=="number"?e:Ia(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Ia(a)?a.toNumber():a,Reflect.set(i,"count",n)}return Reflect.get(i,s)},set(i,s,a){return s==="count"&&(n=a),Reflect.set(i,s,a)}});return ka(r,o,t)}var Jt=_([K("mint"),K("owner"),w("amount"),Xe("delegateOption"),K("delegate"),E("state"),Xe("isNativeOption"),w("isNative"),w("delegatedAmount"),Xe("closeAuthorityOption"),K("closeAuthority")]);function om(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function hi(r,...e){if(!om(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function ki(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function Sa(r,e){hi(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var br=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),It=(r,e)=>r<<32-e|r>>>e;var Ug=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function rm(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Ti(r){return typeof r=="string"&&(r=rm(r)),hi(r),r}var yr=class{clone(){return this._cloneInto()}},Gg={}.toString;function Ka(r){let e=n=>r().update(Ti(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function im(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+u,a,n)}var Ca=(r,e,t)=>r&e^~r&t,Ra=(r,e,t)=>r&e^r&t^e&t,gr=class extends yr{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=br(this.buffer)}update(e){ki(this);let{view:t,buffer:n,blockLen:o}=this;e=Ti(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=br(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ki(this),Sa(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;im(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=br(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var sm=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),$t=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),en=new Uint32Array(64),Ii=class extends gr{constructor(){super(64,32,8,!1),this.A=$t[0]|0,this.B=$t[1]|0,this.C=$t[2]|0,this.D=$t[3]|0,this.E=$t[4]|0,this.F=$t[5]|0,this.G=$t[6]|0,this.H=$t[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)en[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=en[m-15],p=en[m-2],y=It(d,7)^It(d,18)^d>>>3,f=It(p,17)^It(p,19)^p>>>10;en[m]=f+en[m-7]+y+en[m-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=It(a,6)^It(a,11)^It(a,25),p=l+d+Ca(a,c,u)+sm[m]+en[m]|0,f=(It(n,2)^It(n,13)^It(n,22))+Ra(n,o,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=o,o=n,n=p+f|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,i,s,a,c,u,l)}roundClean(){en.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var La=Ka(()=>new Ii);var aA=ue("Raydium_Util");function Na({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:s}of t.value){let a=Jt.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:ge(r,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),o.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Oa.default,amount:new cm(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function ze({fromPublicKey:r,programId:e=um}){let t=am.generate().publicKey.toBase58().slice(0,32);return{publicKey:lm(r,t,e),seed:t}}function lm(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),o=La(n);return new Oa(o)}function Bi(r){let{mint:e,tokenAccount:t,owner:n,programId:o=Cn}=r;return mm(t,e,n,o)}function Ot(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Cn}=r;return dm(e,t,o,n,i)}async function Dt(r){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Jt.span,n),c=J(t).add(new bm(a)),u=ze({fromPublicKey:o,programId:Cn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[ym.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Jt.span,programId:Cn}),Bi({mint:new fm(Me.address),tokenAccount:u.publicKey,owner:i,programId:Cn})],instructionTypes:[v.CreateAccount,v.InitAccount],endInstructionTypes:s?[]:[v.CloseAccount],endInstructions:s?[]:[Ot({tokenAccount:u.publicKey,payer:o,owner:i})]}}function no({source:r,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Cn}){return pm(r,e,t,BigInt(String(n)),o,i)}var oo=class extends Be{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return ge(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:tn},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:gm},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Na({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=tn,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!o||o&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Ar(t.tokenProgram||tn),m=this.getAssociatedTokenAccount(n,new Ar(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,P)=>h.accountInfo.amount.lt(P.accountInfo.amount)?1:-1);if(o===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=xi(s,m,s,n,l);if(u){let P=await this.scope.connection.getAccountInfo(m);if(P===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(v.CreateATA);else if(!(P.owner.equals(l)&&Rn.decode(P.data).mint.equals(n)&&Rn.decode(P.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(v.CreateATA);if(n.equals(Z)&&o.amount){let P=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(f=o.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...P.instructions||[]),p.endInstructions.push(...P.endInstructions||[]),p.instructionTypes.push(...P.instructionTypes||[]),p.endInstructionTypes.push(...P.endInstructionTypes||[]),o.amount&&(p.instructions.push(no({source:P.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:tn})),p.instructionTypes.push(v.TransferAmount))}return c||(p.endInstructions.push(Ot({owner:s,payer:o.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:m,instructionParams:p}}else{let h=ze({fromPublicKey:s,programId:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(Rn.span),k=Am.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:P+Number((g=(b=o.amount)==null?void 0:b.toString())!=null?g:0),space:Rn.span,programId:l});return p.instructions.push(k,Bi({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(v.CreateAccount),p.instructionTypes.push(v.InitAccount),c||(p.endInstructions.push(Ot({owner:s,payer:o.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=tn,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await xi(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[v.CreateATA],i=u}return o&&Z.toBase58()===t.toBase58()&&(a.endInstructions=[Ot({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[v.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:s=tn,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Ar(Z).equals(i)){let p=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=xi(this.scope.ownerPubKey,d,this.scope.ownerPubKey,i,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(tn)&&Rn.decode(f.data).mint.equals(i)&&Rn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[v.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=tn,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Ar(Z))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=l,p=Se(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=m,p=Se(m,["tokenAccount"]);c=d,u.addInstruction(p)}return C({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as Em}from"@solana/spl-token";import{PublicKey as ye,SystemProgram as Dm}from"@solana/web3.js";import{PublicKey as Da}from"@solana/web3.js";var Si=_([E("instruction")]),Ki=_([E("instruction")]),wm=_([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Q("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),Pm=_([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),Q("perShareReward"),w("lastSlot"),w("perSlotReward")]),hm=_([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),Q("perShareRewardA"),w("perSlotRewardA"),E("option"),K("rewardVaultB"),fe(7),w("totalRewardB"),Q("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),km=_([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Q("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(wm,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Ma=new Proxy(Pm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(r,e,t)}}),_a=new Proxy(hm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(r,e,t)}}),ro=new Proxy(km,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var s;return F(C({},i),{rewardType:((s=Object.entries(nn).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),Tm=_([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Ci=_([E("instruction"),w("nonce"),X(Tm,5,"rewardTimeInfo")]),Ri=_([E("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Li=_([E("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),EA=_([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),io=_([w("state"),K("id"),K("owner"),w("deposited"),X(Q(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),DA=_([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),Va=_([w("state"),K("id"),K("owner"),w("deposited"),X(Q(),2,"rewardDebts"),X(w(),17)]),va=_([w(),w("state"),K("id"),K("owner"),w("deposited"),X(Q(),5,"rewardDebts"),X(w(),16)]),$e=_([E("instruction"),w("amount")]),Im=_([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Ba("digitShift"),X(E(),7,"reserved1"),X(w(),7,"reserved2")]),Fa=_([fe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(E(),32,"reserved1"),X(Im,4,"votingMints"),fr("timeOffset"),E("bump"),X(E(),7,"reserved2"),X(w(),11,"reserved3")]),Bm=_([fr("startTime"),fr("endTime"),E("kind"),X(E(),15,"reserved")]),xm=_([X(Bm,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),E("votingMintConfigIdx"),X(E(),29,"reserved")]),Ea=_([fe(8),K("voterAuthority"),K("registrar"),X(xm,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),X(E(),94,"reserved")]);var QA=ue("Raydium_farm_config"),Wa=new Da("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),qa=new Da("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),Ua={3:Ma,5:_a,6:ro},Ga={3:io,5:Va,6:va},Oi=r=>[3,5,6].indexOf(r)!==-1,Ni=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(s=i[e])==null?void 0:s.call(i)},nn={"Standard SPL":0,"Option tokens":1},ft={[la.toString()]:3,[ma.toString()]:5,[Jn.toString()]:6};import{PublicKey as ie,SystemProgram as cn,SYSVAR_RENT_PUBKEY as Cm,SYSVAR_CLOCK_PUBKEY as uo,TransactionInstruction as ve}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Rm,TOKEN_PROGRAM_ID as ct,ASSOCIATED_TOKEN_PROGRAM_ID as Lm}from"@solana/spl-token";import wr from"bn.js";function Mi(r,e,t){return ae([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],r)}function _i(r,e){return ae([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],r)}function Vi(r,e){return ae([e.toBuffer()],r)}function vi(r,e,t){return ae([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],r)}function Fi(r,e,t){return ae([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],r)}function Ei(r,e,t,n){return ae([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}import st from"bn.js";var so=ue("Raydium.farm.util");function ao({programId:r,poolId:e,mint:t,type:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return o}function Ye({programId:r,poolId:e,owner:t,version:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return o}var Xa=({programId:r,poolId:e})=>ae([e.toBuffer()],r);function za(r){return{isSet:new st(1),rewardPerSecond:J(r.perSecond),rewardOpenTime:J(r.openTime),rewardEndTime:J(r.endTime),rewardType:J(nn[r.rewardType])}}function Di(r){return J(r.endTime).sub(J(r.openTime)).mul(J(r.perSecond))}function Ln(r){let e=Ga[r];return e||so.logWithError("invalid version",r),e}function Sm(r){let e=Ua[r];return e||so.logWithError("invalid version",r),e}function Km(r,e,t,n){if(r.version===3||r.version===5){if(r.lastSlot.gte(new st(t)))return r;let o=new st(t).sub(r.lastSlot);r.lastSlot=new st(t);for(let i of r.rewardInfos){if(e.amount.eq(new st(0)))continue;let s=i.perSlotReward.mul(o);i.perShareReward=i.perShareReward.add(s.mul(new st(10).pow(new st(r.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(r.version===6)for(let o of r.rewardInfos){if(o.rewardState.eq(new st(0)))continue;let i=st.min(new st(n),o.rewardEndTime);if(o.rewardOpenTime.gte(i))continue;let a=i.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),c=o.totalReward.sub(o.totalRewardEmissioned);c.lt(a)?(a=c,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(c.div(o.rewardPerSecond))):o.rewardLastUpdateTime=i,!e.amount.eq(new st(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(r.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return r}async function mw({connection:r,farmPools:e,owner:t,config:n,chainTime:o}){let i=!1,s=!1,a=new st(10),c=[];for(let d of e){let p=ke(d);p.version===6?s=!0:i=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:Ye({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await _e(r,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=C({},u[g]),y==="state"){let h=Sm(p);(!b||!b.data||b.data.length!==h.span)&&so.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=h.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Jt.span)&&so.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=Jt.decode(b.data);else if(y==="ledger"){let h=Ln(p);b&&b.data&&(b.data.length!==h.span&&so.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=h.decode(b.data))}}let m=s||i?await r.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=Km(u[d].state,u[d].lpVault,m,o));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new st(9)):a.pow(new st(15)),b=p.rewardInfos.map((g,h)=>{let P=y.rewardDebts[h];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(P)});u[d].wrapped=F(C({},u[d].wrapped),{pendingRewards:b})}return u}function dw(r,e=Date.now()){if(r.version===6){let t=r.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>ua(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ca(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=r.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Wi(r,e,t,n){let o=await r.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let s=Fa.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await r.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=Ea.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Om=ue("Raydium_farm_instruction"),co={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function lo(r){let{version:e,id:t,ledger:n,programId:o,owner:i}=r,s={3:9,5:10}[e];s||Om.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Si.span);Si.encode({instruction:s},a);let c=[A({pubkey:t}),A({pubkey:n}),A({pubkey:i,isWritable:!1}),A({pubkey:cn.programId,isWritable:!1}),A({pubkey:Cm,isWritable:!1})];return{instruction:new ve({programId:o,keys:c,data:a}),instructionType:v.FarmV3CreateLedger}}function Ya(r){var n;let e=Buffer.alloc(Ci.span);Ci.encode({instruction:0,nonce:new wr(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...$r,A({pubkey:r.farmId}),A({pubkey:r.farmAuthority,isWritable:!1}),A({pubkey:r.lpVault}),A({pubkey:r.lpMint,isWritable:!1}),A({pubkey:r.lockVault}),A({pubkey:r.lockMint,isWritable:!1}),A({pubkey:(n=r.lockUserAccount)!=null?n:Ne}),A({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let o of r.rewardInfo)t.push(A({pubkey:o.rewardMint,isWritable:!1}),A({pubkey:o.rewardVault}),A({pubkey:o.userRewardToken}));return{instruction:new ve({programId:r.programId,keys:t,data:e}),instructionType:v.FarmV6Create}}function Qa(r){let e=Buffer.alloc(Ki.span);Ki.encode({instruction:5},e);let t=[A({pubkey:ct,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.authority,isWritable:!1}),A({pubkey:r.lpVault,isWritable:!1}),A({pubkey:r.rewardVault}),A({pubkey:r.userRewardToken}),A({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new ve({programId:r.programId,keys:t,data:e}),instructionType:v.FarmV6CreatorWithdraw}}function Nm(r,e,t,n,o,i,s,a,c,u,l,m,d){let p=_([E("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...co.voterStakeRegistryDeposit,...f]);return new ve({keys:y,programId:r,data:b})}function Mm(r,e,t,n){let o=_([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([...co.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new ve({keys:i,programId:r,data:a})}function _m(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([E("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let h=Buffer.from([...co.voterStakeRegistryWithdraw,...g]);return new ve({keys:b,programId:r,data:h})}function Vm(r,e,t,n,o,i){let s=_([E("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new ve({keys:a,programId:r,data:c})}function vm(r,e,t,n,o,i,s,a){let c=_([E("voterBump"),E("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:cn.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Qo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...co.voterStakeRegistryCreateVoter,...l]);return new ve({keys:u,programId:r,data:m})}function Fm(r,e,t,n,o,i,s,a,c,u,l,m){let d=_([E("depositEntryIndex"),E("kind"),E("option"),w("startTs"),Xe("periods"),qe("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:cn.programId,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:Lm,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...co.voterStakeRegistryCreateDepositEntry,...y]);return new ve({keys:p,programId:r,data:f})}async function Cw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Mi(n,o,i).publicKey,l=Ye({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new wr(0)))throw Error("user do not has new stake amount");let y=_i(e,a).publicKey,f=Vi(e,a).publicKey,{publicKey:b,nonce:g}=vi(n,u,s),h=ge(b,y,c).publicKey,{publicKey:P,nonce:k}=Fi(n,u,s),B=Ei(t,o,i,s).publicKey,T=[],S=ge(s,y,c).publicKey;if(await r.getAccountInfo(S)===null&&T.push(Rm(s,S,s,y)),await r.getAccountInfo(b)===null){let W=Vm(t,o,s,i,s,B);T.push(W,vm(n,u,b,P,s,s,g,k))}let{index:I,isInit:L}=await Wi(r,u,b,y);return L||T.push(Fm(n,u,b,h,s,s,y,I,0,void 0,0,!1)),T.push(Nm(n,u,b,h,S,s,l,a,y,f,e,I,p),Mm(n,u,b,P)),T}async function Rw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Mi(n,o,i).publicKey,l=Ye({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data);if(d.voteLockedBalance.eq(new wr(0)))throw Error("user has vote locked balance = 0");let p=_i(e,a).publicKey,y=Vi(e,a).publicKey,{publicKey:f}=vi(n,u,s),b=ge(f,p,c).publicKey,{publicKey:g}=Fi(n,u,s),h=Ei(t,o,i,s).publicKey,P=[],{index:k,isInit:B}=await Wi(r,u,f,p);if(!B)throw Error("deposit entry index check error");return P.push(_m(n,u,f,s,h,g,b,ge(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),P}function qi({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(Ri.span);Ri.encode({instruction:3,rewardReopenTime:J(o.openTime),rewardEndTime:J(o.endTime),rewardPerSecond:J(o.perSecond)},i);let s=[A({pubkey:ct,isWritable:!1}),A({pubkey:n.id}),A({pubkey:n.lpVault,isWritable:!1}),A({pubkey:e}),A({pubkey:t}),A({pubkey:r,isWritable:!1,isSigner:!0})];return new ve({programId:n.programId,keys:s,data:i})}function Ui({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(Li.span);Li.encode({instruction:4,isSet:new wr(1),rewardPerSecond:J(o.perSecond),rewardOpenTime:J(o.openTime),rewardEndTime:J(o.endTime),rewardType:J(nn[o.rewardType])},i);let s=[...$r,A({pubkey:t.id}),A({pubkey:t.authority,isWritable:!1}),A({pubkey:o.mint,isWritable:!1}),A({pubkey:n}),A({pubkey:e}),A({pubkey:r,isWritable:!1,isSigner:!0})];return new ve({programId:t.programId,keys:s,data:i})}function Lw(r){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=r,[l,m]=[new ie(e.programId),new ie(e.id)],d=Ye({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc($e.span);$e.encode({instruction:a,amount:c},p);let y=n===6?[A({pubkey:ct,isWritable:!1}),...u?[A({pubkey:cn.programId,isWritable:!1})]:[],A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:o})]:[A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:o}),A({pubkey:new ie(t.lpVault)}),A({pubkey:i[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(A({pubkey:i[f]})),y.push(A({pubkey:new ie(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(A({pubkey:new ie(t.rewardInfos[f].vault)})),y.push(A({pubkey:i[f]}));return new ve({programId:l,keys:y,data:p})}function mo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new ie(e.programId),new ie(e.id)],u=Ye({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:2,amount:J(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:o[d]}));return new ve({programId:a,keys:m,data:l})}function po(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:12,amount:J(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:o[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function fo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:J(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function ja(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:10,amount:J(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function Ha(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Ye({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:J(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:o[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new ve({programId:c,keys:d,data:m})}function Za(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new ie(e.programId),new ie(e.id)],u=Ye({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:1,amount:J(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:cn.programId,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:o[d]}));return new ve({programId:a,keys:m,data:l})}var yo=class extends Be{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ne)){let n=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Di(F(C({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Jn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ye(e.lpMint.address),lockInfo:{lockMint:Wa,lockVault:qa},version:6,rewardInfos:t,programId:o},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=ze({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ro.span);c.addInstruction({instructions:[Dm.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ro.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Xa({programId:new ye(a.programId),poolId:l.publicKey}),y=ao({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(nn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(za(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Ne)?new ye(Me.address):B.mint;b.push({rewardMint:x,rewardVault:ao({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new ye(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&c.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:k}=Ya({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[P],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o}){var b;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Ne)?new ye(Me.address):n.mint,l=a.rewardInfos.findIndex(g=>new ye(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:Ne,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[qi({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[v.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o}){var l;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Ne)?new ye(Me.address):m.mint,p=a.rewardInfos.findIndex(P=>new ye(P.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Ne,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=qi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[h],instructionTypes:[v.FarmV6Restart]})}return u.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=o.mint.equals(Ne)?new ye(Me.address):o.mint,m=ao({programId:new ye(n.programId),poolId:new ye(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:o,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,u.addInstruction({instructions:[Ui({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:o})],instructionTypes:[v.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of o){let m=l.mint.equals(Ne)?new ye(Me.address):l.mint,d=ao({programId:new ye(n.programId),poolId:new ye(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Ui({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(C({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[v.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ft[d];Oi(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ye(n.programId),new ye(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Ye({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let P={};for(let D of this.scope.account.tokenAccounts)if(a){let $=ge(this.scope.ownerPubKey,D.mint,D.programId).publicKey;D.publicKey&&$.equals(D.publicKey)&&(P[D.mint.toString()]=D.publicKey)}else P[D.mint.toString()]=D.publicKey;let k=b.lpMint,B=P[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",P);let T=[];for(let D of m){let $=s&&D.mint.address===Z.toString(),G=P[D.mint.address];if(!G){let{account:q,instructionParams:Ze}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new ye(D.mint.address),notUseTokenAccount:$,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!$,associatedOnly:$?!1:a,checkCreateATAOwner:c});G=q,Ze&&h.addInstruction(Ze)}P[D.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Ln(p).decode(x.data)),n.programId!==Jn.toString()&&!S){let{instruction:D,instructionType:$}=lo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[D],instructionTypes:[$]})}let R=Ni({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:J(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(D=>new ye(D))},L=p===6?Za(I):p===5?Ha(I):ja(I),W={3:v.FarmV3Deposit,5:v.FarmV5Deposit,6:v.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[W[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=ft[n.programId];Oi(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(c){let I=ge(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&I.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=Ye({programId:new ye(n.programId),poolId:new ye(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);if(I)Ln(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:W}=lo({id:new ye(y.id),programId:new ye(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[W]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I})}let g=y.lpMint.address,h=s&&g===Z.toString(),P=b[g.toString()];if(!P){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ye(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:c,checkCreateATAOwner:u});P=R,I&&f.addInstruction(I)}b[g.toString()]=P;let k=[];for(let R of d){let I=s&&R.mint.address===Z.toString(),L=b[R.mint.address];if(!L){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new ye(R.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:c,checkCreateATAOwner:u});L=W,D&&f.addInstruction(D)}b[R.mint.address]=L,k.push(L)}let B=Ni({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:J(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:P,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new ye(R))},S=p===6?mo(T):p===5?po(T):fo(T),x={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let o=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Ne.toString()?new ye(Me.address):t),a=o.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Ne,u=this.createTxBuilder(),l;if(t.equals(Ne)){let y=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Di(F(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new V(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[Em(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[v.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Qa({programId:o.programId,id:o.id,authority:o.authority,lpVault:o.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=ge(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,P=ft[f],k=b.address,B=n&&k===Z.toString(),T=m[k];if(!T){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ye(k),notUseTokenAccount:B,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=W,D&&l.addInstruction(D)}m[k.toString()]=T;let S=[];for(let W of g){let D=n&&W.mint.address===Z.toString(),$=m[W.mint.address];if(!$){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new ye(W.mint.address),notUseTokenAccount:D,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!D,associatedOnly:D?!1:i,checkCreateATAOwner:s});$=G,q&&l.addInstruction(q)}m[W.mint.address]=$,S.push($)}let x=p[h],R={amount:pt,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(W=>new ye(W))},I=P===6?mo(R):P===5?po(R):fo(R),L={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[L[P]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as je}from"@solana/web3.js";import{AccountLayout as Sd,NATIVE_MINT as _u,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";var eP=_([Xe("mintAuthorityOption"),K("mintAuthority"),w("supply"),E("decimals"),E("isInitialized"),Xe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Wm}from"@solana/web3.js";import{MintLayout as Ja,TOKEN_PROGRAM_ID as qm}from"@solana/spl-token";var lP=async({connection:r,mint:e})=>{let t=await r.getAccountInfo(new Wm(e));return!t||t.data.length!==Ja.span?void 0:Ja.decode(t.data)},mP=({mint:r,decimals:e,programId:t=qm,logoURI:n="",priority:o=3})=>{let i=r.toBase58().substring(0,6);return{address:r.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:o}},Pr=r=>new Ie({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),bo=o=>{var i=o,{amount:r,isRaw:e,name:t}=i,n=Se(i,["amount","isRaw","name"]);return new be(new Ie({mint:ut(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};function dP(r){return r.address===Ct.address?Me:r}function pP(r){return r.address===Me.address?Ct:r}var et=o=>{var i=o,{address:r,programId:e,decimals:t}=i,n=Se(i,["address","programId","decimals"]);return C({chainId:101,address:ut(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},on=r=>r?F(C({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:F(C({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(C({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as Mn,ASSOCIATED_TOKEN_PROGRAM_ID as nd}from"@solana/spl-token";import{PublicKey as Ae,TransactionInstruction as Wt,SystemProgram as su,SYSVAR_RENT_PUBKEY as od}from"@solana/web3.js";var Gi=_([E("instruction"),w("amountIn"),w("minAmountOut")]),Xi=_([E("instruction"),w("maxAmountIn"),w("amountOut")]),BP=_([E("instruction"),E("nonce")]),zi=_([E("instruction"),E("nonce"),w("startTime")]),go=_([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),w("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),w("lpReserve"),X(w(),3,"padding")]),Um=_([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(w(),64,"padding")]),Yi=_([E("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Qi=_([E("instruction"),w("amountIn")]),xP={4:go,5:Um},$a=_([w("fee")]);import{PublicKey as Gm}from"@solana/web3.js";var Nn=new Gm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),mn=5e4,Xm=_([w("x"),w("y"),w("price")]),zm=_([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(Xm,mn,"DataElement")]);function Ym(r,e){return[0,mn-2]}function Qm(r){return[0,mn-2]}function jm(r){return[0,mn-2]}function Hm(r,e,t){let[n,o]=Ym(e,t),i=n,s=o,a=0,c=e*r.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=mn-2)return[a,a,!1];let u=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function ji(r,e,t){let[n,o,i]=Hm(r,e,t);if(!i)return 0;if(n===o){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,c=r.DataElement[o].x,u=r.DataElement[o].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*r.multiplier*l/p}}function ln(r,e,t){return e*r.multiplier/t}function eu(r,e,t){return e*t/r.multiplier}function Zm(r,e){let[t,n]=Qm(e),o=t,i=n,s=0,a=e;for(;o<i;){if(s=Math.floor((i+o)/2),s<=0||s>mn-2)return[s,s,!1];let c=r.DataElement[s].x,u=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)i=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];o=s+1}}return[s,s,!1]}function Jm(r,e){let[t,n]=jm(e),o=t,i=n,s=0,a=e;for(;o<=i;){if(s=Math.floor((i+o)/2),s<=0||s>=mn-2)return[s,s,!1];let c=r.DataElement[s].y,u=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)o=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function tu(r,e,t,n){let o=n?e+t:e-t,[i,s,a]=Zm(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(o-c)*r.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-o)*r.multiplier/l),[y,f,!1,a]}}}function $m(r,e,t,n){let o=n?e-t:e+t,[i,s,a]=Jm(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-o)/r.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(o-p)/r.multiplier),[y,f,!1,a]}}}function ed(r,e){let t=tu(r,e,0,!1);return t[3]?t[0]:0}function nu(r,e,t,n){let o=ji(r,e,t),i=ln(r,e,o),s=ln(r,t,o),a=ln(r,n,o),c=!0,[u,l,m,d]=tu(r,i,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return eu(r,p,o)}}function ou(r,e,t,n){let o=ji(r,e,t),i=ln(r,e,o),s=ln(r,t,o),a=ln(r,n,o),c=!1,[u,l,m,d]=$m(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=i-l;return eu(r,p,o)}}function td(r){let e=zm.decode(r);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function ru(r,e,t,n){let o=ed(r,ln(r,e,ji(r,e,t)))/r.multiplier;return n?o:1/o}var On=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(Nn);e&&(this._layoutData=td(e==null?void 0:e.data))}}};var iu=ue("Raydium_liquidity_instruction");function au(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:s}=r,a=Buffer.alloc(Yi.span);Yi.encode({instruction:3,baseAmountIn:J(o),quoteAmountIn:J(i),fixedSide:s==="base"?pt:js},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:new Ae(e.id)}),A({pubkey:new Ae(t.authority),isWritable:!1}),A({pubkey:new Ae(t.openOrders),isWritable:!1}),A({pubkey:new Ae(t.targetOrders)}),A({pubkey:new Ae(e.lpMint.address)}),A({pubkey:new Ae(t.vault.A)}),A({pubkey:new Ae(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(A({pubkey:Nn})),c.push(A({pubkey:new Ae(e.marketId),isWritable:!1}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:new Ae(t.marketEventQueue),isWritable:!1})),new Wt({programId:new Ae(e.programId),keys:c,data:a})}function Hi(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:o}=r,i=ke(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Qi.span);Qi.encode({instruction:4,amountIn:J(o)},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.mintLp.address}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return s===5?c.push(A({pubkey:Nn})):(c.push(A({pubkey:i.id})),c.push(A({pubkey:i.id}))),c.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks})),new Wt({programId:i.programId,keys:c,data:a})}return new Wt({programId:i.programId,keys:[]})}function uu({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:P,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=_([E("instruction"),E("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:Mn,isSigner:!1,isWritable:!1},{pubkey:nd,isSigner:!1,isWritable:!1},{pubkey:su.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:P,coinAmount:k,pcAmount:B},I),{instruction:new Wt({keys:R,programId:r,data:I}),instructionType:v.AmmV4CreatePool}}function qP(r){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new Ae(r.id),isWritable:!1}),A({pubkey:new Ae(r.authority),isWritable:!1}),A({pubkey:new Ae(r.openOrders),isWritable:!1}),A({pubkey:new Ae(r.vault.A),isWritable:!1}),A({pubkey:new Ae(r.vault.B),isWritable:!1}),A({pubkey:new Ae(r.mintLp.address),isWritable:!1}),A({pubkey:new Ae(r.marketId),isWritable:!1}),A({pubkey:new Ae(r.marketEventQueue),isWritable:!1})];return new Wt({programId:new Ae(r.programId),keys:n,data:t})}function rd({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},o){let i=ke(r),s=Buffer.alloc(Gi.span);Gi.encode({instruction:9,amountIn:J(t),minAmountOut:J(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders})];return o===4&&a.push(A({pubkey:i.targetOrders})),a.push(A({pubkey:i.vault.A}),A({pubkey:i.vault.B})),o===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1})),new Wt({programId:i.programId,keys:a,data:s})}function id({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},o){let i=ke(r),s=Buffer.alloc(Xi.span);Xi.encode({instruction:11,maxAmountIn:J(t),amountOut:J(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return o===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Wt({programId:i.programId,keys:a,data:s})}function hr(r){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return rd(F(C({},a),{amountIn:o,minAmountOut:i}),t);if(s==="out")return id(F(C({},a),{maxAmountIn:o,amountOut:i}),t);iu.logWithError("invalid params","params",r)}throw iu.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function UP({poolKeys:r,userKeys:e,startTime:t}){let n=Buffer.alloc(zi.span);zi.encode({instruction:0,nonce:5,startTime:J(t)},n);let o=ke(r),i=[A({pubkey:Mn,isWritable:!1}),A({pubkey:su.programId,isWritable:!1}),A({pubkey:od,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.authority,isWritable:!1}),A({pubkey:o.openOrders}),A({pubkey:o.mintLp.address}),A({pubkey:o.mintA.address,isWritable:!1}),A({pubkey:o.mintB.address,isWritable:!1}),A({pubkey:o.vault.A,isWritable:!1}),A({pubkey:o.vault.B,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.targetOrders}),A({pubkey:e.lpTokenAccount}),A({pubkey:o.id,isWritable:!1}),A({pubkey:o.marketProgramId,isWritable:!1}),A({pubkey:o.marketId,isWritable:!1}),A({pubkey:e.payer,isSigner:!0})];return new Wt({programId:o.programId,keys:i,data:n})}function cu({poolKeys:r}){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new Ae(r.id),isWritable:!1}),A({pubkey:new Ae(r.authority),isWritable:!1}),A({pubkey:new Ae(r.openOrders),isWritable:!1}),A({pubkey:new Ae(r.vault.A),isWritable:!1}),A({pubkey:new Ae(r.vault.B),isWritable:!1}),A({pubkey:new Ae(r.mintLp.address),isWritable:!1}),A({pubkey:new Ae(r.marketId),isWritable:!1}),A({pubkey:new Ae(r.marketEventQueue),isWritable:!1})];return{instruction:new Wt({programId:new Ae(r.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as Ue,TOKEN_2022_PROGRAM_ID as rn,ASSOCIATED_TOKEN_PROGRAM_ID as Su}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as xt,SystemProgram as _n,Keypair as is}from"@solana/web3.js";import Ku from"bn.js";import bd from"bn.js";function lu(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function XP(r){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,r,!1),new Uint8Array(e)}function zP(r){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,r,!1),new Uint8Array(e)}function kr(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Zi(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Ji(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function Ao(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function mu(r,e){return Ao(r,e)?null:Zi(r,e)}function du(r,e){return Ao(r,e)?null:Ji(r,e)}var sd=Buffer.from("amm_config","utf8"),ad=Buffer.from("pool","utf8"),ud=Buffer.from("pool_vault","utf8"),cd=Buffer.from("pool_reward_vault","utf8"),pu=Buffer.from("position","utf8"),ld=Buffer.from("tick_array","utf8"),md=Buffer.from("operation","utf8"),dd=Buffer.from("pool_tick_array_bitmap_extension","utf8");function HP(r,e){return ae([sd,lu(e)],r)}function fu(r,e,t,n){return ae([ad,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function $i(r,e,t){return ae([ud,e.toBuffer(),t.toBuffer()],r)}function yu(r,e,t){return ae([cd,e.toBuffer(),t.toBuffer()],r)}function we(r,e,t){return ae([ld,e.toBuffer(),kr(t)],r)}function dn(r,e,t,n){return ae([pu,e.toBuffer(),kr(t),kr(n)],r)}function yt(r,e){return ae([pu,e.toBuffer()],r)}function Tr(r){return ae([Buffer.from("metadata","utf8"),xn.toBuffer(),r.toBuffer()],xn)}function wo(r){return ae([md],r)}function lt(r,e){return ae([dd,e.toBuffer()],r)}import bt from"bn.js";var de=new bt(0),mt=new bt(1),qt=new bt(-1),dt=new bt(1).shln(64),Ir=new bt(1).shln(128),es=dt.sub(mt),Po=64,bu=Ir.subn(1),Qe=-443636,tt=-Qe,Nt=new bt("4295048016"),Mt=new bt("79226673521066979257578248091"),Br=new bt("4295048017"),xr=new bt("79226673521066979257578248090"),gu=16,Au="59543866431248",wu="184467440737095516",Pu="15793534762490258745",Sr=new bt(10).pow(new bt(6)),pd=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(pd||{}),$P={[500]:10,[3e3]:60,[1e4]:200},eh={version:6,liquidity:de,tickCurrent:0,observationIndex:0,observationUpdateDuration:0,feeGrowthGlobalX64A:de,feeGrowthGlobalX64B:de,protocolFeesTokenA:de,protocolFeesTokenB:de,swapInAmountTokenA:de,swapOutAmountTokenB:de,swapInAmountTokenB:de,swapOutAmountTokenA:de,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},hu={tvl:0,volumeQuote:0,mintAmountA:0,mintAmountB:0,rewardDefaultInfos:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,day:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},week:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},month:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},pooltype:[]},th=new bt("18446744073700000000");var fd=15,le=class{static async getTickArrays(e,t,n,o,i,s,a){let c=[],u=j.getTickArrayStartIndexByTick(o,i),l=j.getInitializedTickArrayInRange(s,a,i,u,Math.floor(fd/2));for(let p=0;p<l.length;p++){let{publicKey:y}=we(t,n,l[p]);c.push(y)}let m=(await ht(e,c)).map(p=>p!==null?ho.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(C({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=j.getNextTickArrayStartIndex(u,i,s),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,i){let s=Math.floor(e/le.tickCount(t)),a=n?j.searchLowBitFromStart(o,i,s-1,1,t):j.searchHightBitFromStart(o,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let i;if(o){let a=Ve-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<Ve;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=we(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,s){let a=j.getTickArrayStartIndexByTick(o,i),c=Math.floor((o-a)/i),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<Ve;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=we(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(j.checkIsOutOfBoundary(e)){if(e>tt)return!1;let n=j.getTickArrayStartIndexByTick(Qe,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ve*e}};import re from"bn.js";import{PublicKey as Bt}from"@solana/web3.js";import Ke from"bn.js";var ts=14,Ut=class{static maxTickInTickarrayBitmap(e){return e*Ve*pn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let i=n*o;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=o?t-le.tickCount(n):t+le.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Ve,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=mu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=du(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-le.tickCount(n)}}}},ko=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Ut.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;if(tt<=t)throw Error(`extensionTickBoundary check error: ${tt}, ${t}`);if(n<=Qe)throw Error(`extensionTickBoundary check error: ${n}, ${Qe}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:j.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=le.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:s}=Ut.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=j.mergeTickArrayBitmap(e).shln(pn-1-a),u=Ao(512,c)?null:Zi(512,c);if(u!==null){let l=t-u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=j.mergeTickArrayBitmap(e).shrn(a),u=Ao(512,c)?null:Ji(512,c);if(u!==null){let l=t+u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-le.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Ut.maxTickInTickarrayBitmap(t),o=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(o=pn-o),o}};import _t from"bn.js";var To=class{static getfeeGrowthInside(e,t,n){let o=new _t(0),i=new _t(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new _t(0),a=new _t(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:s}){var b,g,h,P;let a=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),c=te.getSqrtPriceX64FromTick(t.tickLower),u=te.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=ce.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[he(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),he(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[he(new _t(new V(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),he(new _t(new V(m.amountB.toString()).mul(l).toFixed(0)),(P=e.mintB.extensions)==null?void 0:P.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as ku}from"@solana/spl-token";var Ce=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,i,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(qt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=we(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(qt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Ce.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ko.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):j.checkTickArrayIsInitialized(j.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=we(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=we(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/le.tickCount(e.tickSpacing)),o=t?j.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):j.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=Ut.nextInitializedTickArrayStartIndex(j.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=ko.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Qe||t>tt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(C({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Bt(d)});if(p.tokenMint.equals(Bt.default))continue;if(n<=p.openTime.toNumber()||o.eq(de)){s.push(p);continue}let y=new Ke(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),h=ne.mulDivFloor(f,p.emissionsPerSecondX64,dt),P=p.rewardTotalEmissioned.add(h);s.push(F(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:P,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let s=j.getTickArrayStartIndexByTick(i,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;return t>tt&&(t=le.getArrayStartIndex(tt,e)+le.tickCount(e)),n<Qe&&(n=le.getArrayStartIndex(Qe,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/le.tickCount(t)*pn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await _e(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of o)s.accountInfo!==null&&(i[s.pubkey.toString()]=Iu.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=j.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=j.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=we(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let s=await _e(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=ho.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=F(C({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(yt(p,d).publicKey);let l=await ht(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=Kr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=j._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=j._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:P,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA:P,amountB:k,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>F(C({},x),{pendingReward:new Ke(0)})),leverage:B,tokenFeeAmountA:new Ke(0),tokenFeeAmountB:new Ke(0)}];let T=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await j.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await ht(t,d,{batchRequest:o}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=ho.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,P=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[P].toString()],T=k.ticks[j.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[j.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await To.GetPositionFees(f,g,T,S),I=await To.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Ke(0))?x:new Ke(0),g.tokenFeeAmountB=R.gte(new Ke(0))?R:new Ke(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new Ke(0))?I[L]:new Ke(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:s,priceLimit:a=new V(0),catchLiquidityInsufficient:c=!1}){var W;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new V(0))?u=l?Nt.add(new Ke(1)):Mt.sub(new Ke(1)):u=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=he(i,m,o,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Ce.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((W=p.fee)!=null?W:de),u,c),P=he(f,d,o,!1),k=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new V(1).div(k),T=f.mul(new Ke(Math.floor((1-s)*1e10))).div(new Ke(1e10)),S=he(T,d,o,!1),x=l?e.currentPrice:new V(1).div(e.currentPrice),R=new V(B).sub(x).abs(),I=x,L=new Je(new V(R).mul(10**15).toFixed(0),new V(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:P,minAmountOut:S,expirationTime:Rt(p.expirationTime,P.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ie(F(C({},u),{mint:u.address,isToken2022:u.programId===ku.toBase58()})),new Ie(F(C({},l),{mint:l.address,isToken2022:l.programId===ku.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:P,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Ce.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Bt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=F(C({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),R=F(C({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),I=F(C({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),L=new rt({baseToken:m,denominator:new Ke(10).pow(new Ke(20+m.decimals)),quoteToken:d,numerator:h.mul(new V(10**(20+d.decimals))).toFixed(0)}),W=new rt({baseToken:m,denominator:new Ke(10).pow(new Ke(20+m.decimals)),quoteToken:d,numerator:P.mul(new V(10**(20+d.decimals))).toFixed(0)}),D=new be(m,B);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:I,expirationTime:g,currentPrice:L,executionPrice:W,priceImpact:k,fee:D,remainingAccounts:T,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var y,f,b;let i=e[t],s=j.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=j.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[ut(e.mintA.address).toString()],d=o[ut(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:P}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new V(h.toString()).div(new V(10).pow(p)).mul(m.value).add(new V(P.toString()).div(new V(10).pow(y)).mul(d.value)),S=new V(k.toString()).div(new V(10).pow(p)).mul(m.value).add(new V(B.toString()).div(new V(10).pow(y)).mul(d.value)),x=new V(1).div(T.add(S)),I=new V(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),L=3600*24*365,W=e.rewardDefaultInfos.map(D=>{var q,Ze;let $=D.mint.decimals,G=o[D.mint.address];return c<((q=D.startTime)!=null?q:0)||c>((Ze=D.endTime)!=null?Ze:0)||!D.perSecond||!G||$===void 0?0:new V(G.value).mul(new V(D.perSecond).mul(L)).div(new V(10).pow($)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:W,apr:I+W.reduce((D,$)=>D+$,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,h;let l=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(o),p=a?1-s:1+s,y=he(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ke(new V(y.amount.sub((h=y.fee)!=null?h:de).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Ke(0);else if(l.lte(d)){let P=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?P:k}else b=t?new Ke(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Ce.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:s,add:a}){var b,g,h,P;let c=te.getSqrtPriceX64FromTick(n),u=te.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new V(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[he(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),he(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[he(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),he(m.amountB.muln(l),(P=t.mintB.extensions)==null?void 0:P.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Bt(c.id));(await ht(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=yn.decode(c.data))});let s=t.map(c=>lt(new Bt(c.programId),new Bt(c.id)).publicKey),a=await Ce.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(C({},c),{[u.id]:F(C({},n[u.id]),{id:new Bt(u.id),version:6,programId:new Bt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(C({},u.config),{id:new Bt(u.config.id),fundOwner:""}),currentPrice:new V(u.price),exBitmapInfo:a[lt(new Bt(u.programId),new Bt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber()})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function Dh({poolInfo:r,tickLower:e,tickUpper:t,amountA:n,amountB:o,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var P,k,B,T;let[u,l,m,d]=e<t?[e,t,n,o]:[t,e,o,n],p=te.priceToSqrtPriceX64(new V(r.price),r.mintA.decimals,r.mintB.decimals),y=te.getSqrtPriceX64FromTick(u),f=te.getSqrtPriceX64FromTick(l),[b,g]=[he(m,(P=r.mintA.extensions)==null?void 0:P.feeConfig,a,!c),he(d,(k=r.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],h=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((B=b.fee)!=null?B:de),g.amount.sub((T=g.fee)!=null?T:de));return ce.getAmountsOutFromLiquidity({poolInfo:r,tickLower:e,tickUpper:t,liquidity:h,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var ns={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Tu(r){return F(C({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:ns,week:ns,month:ns,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:F(C({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(de)||(i=i.add(mt)),i}static mulDivFloor(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).add(n.sub(mt)).div(n)}static x64ToDecimal(e,t){return new V(e.toString()).div(V.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(V.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ir).sub(t).mod(Ir)}};function Fe(r,e){return os(r.mul(e),64,256)}function yd(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function os(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var te=class{static sqrtPriceX64ToPrice(e,t,n){return ne.x64ToDecimal(e).pow(2).mul(V.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(V.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(de))return e;let i=t.shln(Po);if(o){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,mt,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return ne.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(Po);if(o)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,mt,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<Qe||e>tt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=Fe(n,new re("18444899583751176192"))),(t&4)!=0&&(n=Fe(n,new re("18443055278223355904"))),(t&8)!=0&&(n=Fe(n,new re("18439367220385607680"))),(t&16)!=0&&(n=Fe(n,new re("18431993317065453568"))),(t&32)!=0&&(n=Fe(n,new re("18417254355718170624"))),(t&64)!=0&&(n=Fe(n,new re("18387811781193609216"))),(t&128)!=0&&(n=Fe(n,new re("18329067761203558400"))),(t&256)!=0&&(n=Fe(n,new re("18212142134806163456"))),(t&512)!=0&&(n=Fe(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=Fe(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=Fe(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=Fe(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=Fe(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=Fe(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=Fe(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=Fe(n,new re("696457651848324352"))),(t&131072)!=0&&(n=Fe(n,new re("26294789957507116"))),(t&262144)!=0&&(n=Fe(n,new re("37481735321082"))),e>0&&(n=bu.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Mt)||e.lt(Nt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),o=yd(n,32,128),i=new re("8000000000000000","hex"),s=0,a=new re(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new re(0))&&s<gu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let u=a.shrn(32),m=o.add(u).mul(new re(Au)),d=os(m.sub(new re(wu)),64,128).toNumber(),p=os(m.add(new re(Pu)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},bn=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let i=bn.getTickWithPriceAndTickspacing(e,t,n,o),s=te.getSqrtPriceX64FromTick(i);return te.sqrtPriceX64ToPrice(s,n,o)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Po),s=t.sub(e);return o?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),mt,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");return o?ne.mulDivCeil(n,t.sub(e),dt):ne.mulDivFloor(n,t.sub(e),dt)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return o?ne.mulDivRoundingUp(a,mt,es):a.shrn(Po)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,es,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,o,!1),a=ce.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,o,i),a=ce.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,s,a){let{amountA:c,amountB:u}=ce.getAmountsFromLiquidity(e,t,n,o,s),l=i?1+a:1-a,m=new re(new V(c.toString()).mul(l).toFixed(0)),d=new re(new V(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:i,add:s,epochInfo:a,amountAddFee:c}){var h,P,k,B;let u=te.priceToSqrtPriceX64(new V(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(u,l,m,o,s),[y,f]=[he(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),he(p.amountB,(P=e.mintB.extensions)==null?void 0:P.feeConfig,a,c)],[b,g]=[he(new re(new V(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),he(new re(new V(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:o,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Rt(y.expirationTime,f.expirationTime)}}},fn=class{static swapCompute(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?Nt.add(mt):Mt.sub(mt)),s){if(y.lt(Nt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(Mt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(de),g={amountSpecifiedRemaining:d,amountCalculated:de,sqrtPriceX64:m,tick:u>p?Math.min(p+le.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new re(0)},h=p,P=n[p],k=0,B=!s&&P.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(de)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=j.nextInitTick(P,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Ce.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},h,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=L.nextStartIndex;let{publicKey:W}=we(e,t,h);R=W,P=n[h];try{x=j.firstInitializedTick(P,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<Qe?T.tickNext=Qe:T.tickNext>tt&&(T.tickNext=tt),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let I;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?I=y:I=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=fn.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=x.liquidityNet;s&&(L=L.mul(qt)),g.liquidity=ce.addDelta(g.liquidity,L)}B=T.tickNext!=g.tick&&!s&&P.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&P.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=le.nextInitializedTickArray(g.tick,l,s,o,i);S&&p!==T&&(g.accounts.push(we(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:de,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,i){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),c=o.gte(de);if(c){let l=ne.mulDivFloor(o,Sr.sub(new re(i.toString())),Sr);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(qt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,o.mul(qt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(o.mul(qt))&&(s.amountOut=o.mul(qt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=o.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new re(i),Sr.sub(new re(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ve=60,pn=512,j=class{static getTickArrayAddressByTick(e,t,n,o){let i=j.getTickArrayStartIndexByTick(n,o),{publicKey:s}=we(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=j.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=Ve)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=le.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ve,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*Ve,i=Math.floor(t/o)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ve:e+t*Ve}static mergeTickArrayBitmap(e){let t=new bd(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,i){let s=Math.floor(o/(n*Ve));return[...j.searchLowBitFromStart(e,t,s-1,i,n),...j.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return j.searchHightBitFromStart(e,t,0,pn,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let s=[],a=j.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=we(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>j.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<Qe||e>tt}static nextInitTick(e,t,n,o,i){if(le.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<Ve;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ve-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ve;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=te.getSqrtPriceX64FromTick(t),i=te.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new V(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new V(1).div(t),i=bn.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(i),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new V(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=te.getSqrtPriceX64FromTick(t),i=te.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new V(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new V(1).div(t),i=bn.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(i),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new V(1).div(a)}}};var Bu=_([fe(8),E("bump"),Lt("index"),K(""),Xe("protocolFeeRate"),Xe("tradeFeeRate"),Lt("tickSpacing"),X(w(),8,"")]),gd=_([Xe("blockTimestamp"),Q("sqrtPriceX64"),Q("cumulativeTimePriceX64"),X(Q(),1,"")]),rs=_([fe(8),qe("initialized"),K("poolId"),X(gd,1e3,"observations"),X(Q(),5,"")]),Ad=_([E("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Q("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Q("rewardGrowthGlobalX64")]),yn=_([fe(8),E("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Lt("tickSpacing"),Q("liquidity"),Q("sqrtPriceX64"),We("tickCurrent"),Lt("observationIndex"),Lt("observationUpdateDuration"),Q("feeGrowthGlobalX64A"),Q("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Q("swapInAmountTokenA"),Q("swapOutAmountTokenB"),Q("swapInAmountTokenB"),Q("swapOutAmountTokenA"),E("status"),X(E(),7,""),X(Ad,3,"rewardInfos"),X(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),X(w(),15*4-3,"padding")]),wd=_([Q("growthInsideLastX64"),w("rewardAmountOwed")]),Kr=_([fe(8),E("bump"),K("nftMint"),K("poolId"),We("tickLower"),We("tickUpper"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(wd,3,"rewardInfos"),X(w(),8,"")]),lk=_([fe(8),E("bump"),K("poolId"),We("tickLowerIndex"),We("tickUpperIndex"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Q(),3,"rewardGrowthInside"),X(w(),8,"")]),Pd=_([We("tick"),xa("liquidityNet"),Q("liquidityGross"),Q("feeGrowthOutsideX64A"),Q("feeGrowthOutsideX64B"),X(Q(),3,"rewardGrowthsOutsideX64"),X(Xe(),13,"")]),ho=_([fe(8),K("poolId"),We("startTickIndex"),X(Pd,Ve,"ticks"),E("initializedTickCount"),X(E(),115,"")]),xu=_([fe(329),X(K(),100,"whitelistMints")]),Iu=_([fe(8),K("poolId"),X(X(w(),8),ts,"positiveTickArrayBitmap"),X(X(w(),8),ts,"negativeTickArrayBitmap")]);var Cu=ue("Raydium_Clmm"),St={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},xe=class{static createPoolInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([Q("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...St.createPool,...g]);return new xt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:o,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:c,startTime:u,forerunCreate:l}=e,m=ze({fromPublicKey:o,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[_n.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(rs.span),space:rs.span,programId:n})],{publicKey:f}=fu(n,a,d,p),{publicKey:b}=$i(n,f,d),{publicKey:g}=$i(n,f,p);return y.push(this.createPoolInstruction(n,f,o,a,m.publicKey,d,b,new U(i.programId||Ue),p,g,new U(s.programId||Ue),lt(n,f).publicKey,c,u)),{signers:[],instructions:y,instructionTypes:[v.CreateAccount,v.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=_([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),Q("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),E("optionBaseFlag"),qe("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Su,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},$);let G=Buffer.from([...St.openPosition,...$]);return new xt({keys:D,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=is.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:h}=we(d,p,b),{publicKey:P}=ge(n.wallet,y,Ue),{publicKey:k}=Tr(y),{publicKey:B}=yt(d,y),{publicKey:T}=dn(d,p,o,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=is.generate();m.push(x),y=x.publicKey}let f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:h}=we(d,p,b),{publicKey:P}=ge(n.wallet,y,Ue),{publicKey:k}=Tr(y),{publicKey:B}=yt(d,y),{publicKey:T}=dn(d,p,o,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,u,s,a,c,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=_([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),Q("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),E("optionBaseFlag"),qe("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:Su,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],$=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new Ku(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},$);let G=Buffer.from([...St.openPosition,...$]);return new xt({keys:D,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=is.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=j.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=j.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(p,y,f),{publicKey:h}=we(p,y,b),{publicKey:P}=ge(n.wallet,m,Ue),{publicKey:k}=Tr(m),{publicKey:B}=yt(p,m),{publicKey:T}=dn(p,y,o,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,i,f,b,s,a,c,u,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i){let s=_([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...St.closePosition,...c]);return new xt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o}){let i=new U(e.programId),{publicKey:s}=ge(n.wallet,o.nftMint,Ue),{publicKey:a}=yt(i,o.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,o.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[v.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=_([Q("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(P.span);P.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(c,u,l),{publicKey:p}=we(c,u,m),{publicKey:y}=ge(o.wallet,n.nftMint,Ue),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=dn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(c,u,l),{publicKey:p}=we(c,u,m),{publicKey:y}=ge(o.wallet,n.nftMint,Ue),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=dn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0)],signers:[],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=_([Q("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(P.span);P.encode({liquidity:new Ku(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=_([Q("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...St.decreaseLiquidity,...S]);return new xt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=j.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=j.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(u,l,m),{publicKey:y}=we(u,l,d),{publicKey:f}=ge(o.wallet,n.nftMint,c),{publicKey:b}=yt(u,n.nftMint),{publicKey:g}=dn(u,l,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let P=[];return P.push(this.decreaseLiquidityInstruction(u,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Ce.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?lt(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:P,instructionTypes:[v.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g){let h=_([w("amount"),w("otherAmountThreshold"),Q("sqrtPriceLimitX64"),qe("isBaseInput")]),P=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...P],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...St.swap,...B]);return new xt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,lt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[v.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=_([w("openTime"),w("endTime"),Q("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:J(l),endTime:J(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...St.initReward,...f]);return new xt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a=yu(i,s,o.mint).publicKey,c=wo(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[v.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=_([E("rewardIndex"),Q("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:J(l),endTime:J(m)},f);let b=Buffer.from([...St.setRewardEmissions,...f]);return new xt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Cu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=wo(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[v.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,s,a){let c=_([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...St.collectReward,...l]);return new xt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Cu.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[v.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:o,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:c}){let[u,l]=[new U(e.programId),new U(e.id)],[m,d]=[new U(t.vault.A),new U(t.vault.B)],[p,y]=[new U(e.mintA.address),new U(e.mintB.address)],f=e.mintA.address===o.toString(),b=[this.swapInstruction(u,n.wallet,l,new U(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,c,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[v.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as Id}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bd}from"@solana/spl-token";import{PublicKey as kd}from"@solana/web3.js";import Ru from"bn.js";var Lu=new Ru(25),Ou=new Ru(1e4),hd={4:3,5:3};var Td=ue("Raydium_liquidity_serum");function Nu({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=kd.createProgramAddressSync(i,r)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw Td.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}import Io from"bn.js";function Cr({programId:r}){let{publicKey:e}=ae([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function gn({name:r,programId:e,marketId:t}){let{publicKey:n}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function xd({programId:r,marketId:e}){let{publicKey:t}=ae([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function us({programId:r}){return ae([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function Mu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:c}){let u=gn({name:"amm_associated_seed",programId:a,marketId:t}),l=gn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=us({programId:a}),p=gn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=gn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=gn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=xd({programId:a,marketId:t}),g=gn({name:"target_associated_seed",programId:a,marketId:t}),h=gn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:P}=Nu({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:P,lookupTableAccount:Id.default,configId:Cr({programId:a})}}var ss;async function qk({connection:r,poolKeysList:e,config:t}){ss||(ss=new On({connection:r}),await ss.initStableModelLayout());let n=e.map(s=>cu({poolKeys:s}));return(await oa(r,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=ra(s,"GetPoolData"),c=new Io(Et(a,"status")),u=Number(Et(a,"coin_decimals")),l=Number(Et(a,"pc_decimals")),m=Number(Et(a,"lp_decimals")),d=new Io(Et(a,"pool_coin_amount")),p=new Io(Et(a,"pool_pc_amount")),y=new Io(Et(a,"pool_lp_supply")),f="0";try{f=Et(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Io(f)}})}var as={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Rr=r=>{let e={},t=Bd.toBase58();return Object.keys(r).map(n=>{let o=r[n],[i,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:et({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:et({address:s,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new V(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new V(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new V(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:as,week:as,month:as,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Cr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:et({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())})}}),e};import at from"bn.js";var Bo=class extends Be{constructor(t){super(t);this.stableLayout=new On({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let s=new at(new V(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Pr(t[i?"mintB":"mintA"]),[c,u]=[new at(new V(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new at(new V(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new at(new V(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,V.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=pt;s.isZero()||(d=m==="base"?$o(s.mul(u),c):$o(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=$o(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Je(new at(1)).add(o).mul(d).quotient,b=new be(a,d),g=new be(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:s,fixedSide:a,config:c,txVersion:u,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new je(n.lpMint.address)}),P=[y,f],k=[b,g],B=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(P.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=P,[I,L]=k,[W,D]=B,$=o!=null?o:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Vt=await m.handleTokenAccount({side:"in",amount:W,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=Vt,Ze=Se(Vt,["tokenAccount"]);G.addInstruction(Ze);let Tn=await m.handleTokenAccount({side:"in",amount:D,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:hn}=Tn,sn=Se(Tn,["tokenAccount"]);G.addInstruction(sn);let vo=await m.handleTokenAccount({side:"out",amount:0,mint:new je(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:zt}=vo,kn=Se(vo,["tokenAccount"]);return G.addInstruction(kn),G.addInstruction({instructions:[au({poolInfo:n,poolKeys:$,userKeys:{baseTokenAccount:q,quoteTokenAccount:hn,lpTokenAccount:zt,owner:this.scope.ownerPubKey},baseAmountIn:W,quoteAmountIn:D,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5AddLiquidity:v.AmmV4AddLiquidity],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),u===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=o!=null?o:await this.getAmmPoolKeys(n.id),[l,m,d]=[new je(n.mintA.address),new je(n.mintB.address),new je(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:P}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:P}),{tokenAccount:k}=x,B=Se(x,["tokenAccount"]);g.addInstruction(B);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:P}),{tokenAccount:T}=R,S=Se(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[Hi({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(c),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Vn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||ge(this.scope.ownerPubKey,q.accountInfo.mint,Vn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let h=g[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let P=o.add(a!=null?a:new at(0)),k=t.mintA.address===Ie.WSOL.mint.toString(),B=t.mintB.address===Ie.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let q=ft[s.programId],Ze=Ye({programId:new je(s.programId),poolId:new je(s.id),owner:this.scope.ownerPubKey,version:q}),hn,sn=await this.scope.connection.getAccountInfo(Ze);if(sn&&(hn=Ln(q).decode(sn.data)),q!==6&&!hn){let{instruction:Yt,instructionType:Xr}=lo({id:new je(s.id),programId:new je(s.programId),version:q,ledger:Ze,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Yt],instructionTypes:[Xr]})}let zt=[];for(let Yt of s.rewardInfos){let Xr=Yt.mint.address===Ie.WSOL.mint.toString();if(g[Yt.mint.address])zt.push(g[Yt.mint.address]);else{let{account:Is,instructionParams:Bs}=await this.scope.account.getOrCreateTokenAccount({mint:new je(Yt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Xr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Is||this.logAndCreateError("farm reward account not found:",Yt.mint.address),Bs&&b.addInstruction(Bs),zt.push(Is)}}let kn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Vt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:kn,lpAccount:h,rewardAccounts:zt},Tn=ft[s.programId],vo=Tn===6?mo(Vt):Tn===5?po(Vt):fo(Vt),ac={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};b.addInstruction({instructions:[vo],instructionTypes:[ac[Tn]]})}let I=await this.getAmmPoolKeys(t.id),L=Hi({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:P});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[W,D]=t.mintA.address===n.mintA.address?[T,x]:[x,T],$=await this.scope.clmm.getClmmPoolKeys(t.id),G=await xe.openPositionFromBaseInstructions(F(C({poolInfo:n,poolKeys:$,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:W,tokenAccountB:D},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:$.lookupTableAccount?[$.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var W;let b=u.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),g=u.useSOLBalance&&o.mint.equals(_u),h=u.useSOLBalance&&i.mint.equals(_u),P=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});P.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(P.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=Mu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:I,instructionType:L}=uu(F(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:ge(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:c,coinAmount:s,pcAmount:a}));return P.addInstruction({instructions:[I],instructionTypes:[L]}),P.addCustomComputeBudget(f),P.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=Cr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return $a.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:s}){let[a,c]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=a==t.mintA.address?"base":"quote";d==="quote"&&m.reverse();let[p,y]=m,f=t.version===4,b;if(f)b=new V(y.toString()).div(p.toString());else{let I=ru(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);d==="quote"?b=new V(1e6).div(I*1e6):b=new V(I*1e6).div(1e6)}let g=n,h=new at(0),P=new at(0);if(!g.isZero())if(f){P=to(g.mul(Lu),Ou);let I=g.sub(P),L=p.add(I);h=y.mul(I).div(L)}else{P=g.mul(new at(2)).div(new at(1e4));let I=g.sub(P);d==="quote"?h=new at(nu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber())):h=new at(ou(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber()))}let k=new at(new V(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new V(h.toString()).div(new V(g.sub(P).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new V(h.toString()).div(g.sub(P).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:P}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===Z.toBase58(),h=y&&b.address===Z.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),P||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:P,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new je(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d});m.addInstruction(T||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:h,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[hr({version:x,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[x===4?v.AmmV4SwapBaseIn:v.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await _e(this.scope.connection,t.map(l=>({pubkey:new je(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=go.decode(m.accountInfo.data);i[String(t[l])]=F(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await _e(this.scope.connection,s.map(l=>({pubkey:new je(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new at(Sd.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=F(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new V(p.toString()).div(new V(10).pow(m.quoteDecimal.toString())).div(new V(d.toString()).div(new V(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=Rr({[t]:n}),i=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as se}from"@solana/web3.js";import gt from"bn.js";import{AccountLayout as Vu,TOKEN_PROGRAM_ID as vu}from"@solana/spl-token";var xo=class extends Be{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var h;let{programId:t,owner:n=((h=this.scope.owner)==null?void 0:h.publicKey)||se.default,mint1:o,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new gt(new se(o.address).toBuffer()).gt(new gt(new se(i.address).toBuffer()))?[i,o,new V(1).div(a)]:[o,i,a],b=te.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await xe.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:c,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(u),d.versionBuild({txVersion:m,extInfo:{address:F(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:c.toString(),vault:{A:g.address.mintAVault.toString(),B:g.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:f.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}},hu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===Z.toString(),P=n.useSOLBalance&&e.mintB.address===Z.toString(),[k,B]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let I=t||await this.getClmmPoolKeys(e.id),L=await xe.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:F(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===Z.toBase58(),h=n.useSOLBalance&&e.mintB.address===Z.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:u,checkCreateATAOwner:l});P&&(f=P),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(T||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await xe.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===Z.toString(),g=c.useSOLBalance&&t.mintB.address===Z.toString(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(P||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=xe.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===Z.toString(),b=a.useSOLBalance&&t.mintB.address===Z.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(o==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(h||{});let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(o==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});P&&(y=P),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=xe.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:o,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===Z.toString(),f=i.useSOLBalance&&t.mintB.address===Z.toString(),b,g,{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=h,P&&p.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===Z.toString(),W;if(I.mint.address===t.mintA.address)W=b;else if(I.mint.address===t.mintB.address)W=g;else{let{account:D,instructionParams:$}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(I.mint.programId),mint:new se(I.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});W=D,$&&p.addInstruction($)}T.push(W)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await xe.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[v.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let I=await xe.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),R=C(C({},R),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=xe.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:o,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===Z.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(n.mint.address),mint:new se(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new V(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=xe.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new se(n.mint.programId),mint:new se(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of o){let d=n.useSOLBalance&&m.mint.address===Z.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new V(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=xe.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new se(m.mint.programId),mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(Z),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new V(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=xe.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===Z.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new V(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=xe.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});u.addInstruction(b),l=C(C({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(Z),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:o,checkCreateATAOwner:i});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=xe.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(Z),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:o,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=xe.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=c.useSOLBalance&&e.mintA.address===Z.toBase58(),b=c.useSOLBalance&&e.mintB.address===Z.toBase58(),g;!s||s.equals(new V(0))?g=y?Nt.add(new gt(1)):Mt.sub(new gt(1)):g=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?o:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let P;if(!P){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?0:o}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});P=B,T&&p.addInstruction(T)}(!h||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:P,mintAUseSOLBalance:f,mintBUseSOLBalance:b,associatedOnly:l});let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(xe.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:P},inputMint:new se(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:u})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)o?ge(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(P=>!P.liquidity.isZero()||P.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===Z.toString(),y=n.useSOLBalance&&d.mintB.address===Z.toString(),f=u[d.mintA.address];if(!f){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new se(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f=P,k&&l.addInstruction(k)}let b=u[d.mintB.address];if(!b){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new se(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:o,checkCreateATAOwner:i});b=P,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let P of d.rewardDefaultInfos){let k=n.useSOLBalance&&P.mint.address===Z.toString(),B=u[P.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(P.mint.programId),mint:new se(P.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:o});B=T,S&&l.addInstruction(S)}u[P.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let P of t[m.id]){let k=xe.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new gt(0),amountMinA:new gt(0),amountMinB:new gt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:c}):l.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(wo(e).publicKey);return t?xu.decode(t.data).whitelistMints.filter(o=>!o.equals(se.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new gt(1))).map(s=>yt(new se(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(s=>{if(!s)return;let a=Kr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await _e(this.scope.connection,e.map(i=>({pubkey:new se(i)})),t),o={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=yn.decode(s.accountInfo.data),c=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=F(C({},a),{currentPrice:c,programId:s.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await _e(this.scope.connection,Array.from(n).map(c=>({pubkey:new se(c)}))),i={};o.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Bu.decode(c.accountInfo.data))});let s=await Ce.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:et({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||vu.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?on((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:et({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||vu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?on((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:F(C({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ce.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await Kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new se(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await _e(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=Tu(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(Vu.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(Vu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=F(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:c.config});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:s}}};import{PublicKey as Y}from"@solana/web3.js";import{NATIVE_MINT as Er,TOKEN_PROGRAM_ID as Gt,AccountLayout as qd}from"@solana/spl-token";import Eu from"bn.js";var cs=new Eu(1e6);function Kd(r,e,t){return r.mul(e).add(t).sub(new Eu(1)).div(t)}function Fu(r,e,t){return r.mul(e).div(t)}var Lr=class{static tradingFee(e,t){return Kd(e,t,cs)}static protocolFee(e,t){return Fu(e,t,cs)}static fundFee(e,t){return Fu(e,t,cs)}};import So from"bn.js";function Or(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Cd(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=Or(r,e);return n.gt(vn)&&(t=t.add(new So(1)),e=r.div(t),n=Or(r,t),n.gt(vn)&&(e=e.add(new So(1)))),[t,e]}var vn=new So(0),Nr=class{static swapWithoutFees(e,t,n){let o=t.mul(n),i=t.add(e),[s,a]=Cd(o,i),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,o,i){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Or(e.mul(n),t).gt(vn)&&s.gt(vn)&&(s=s.add(new So(1))),Or(e.mul(o),t).gt(vn)&&a.gt(vn)&&(a=a.add(new So(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Du=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Du||{}),Mr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,o){let i=Lr.tradingFee(e,o),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Nr.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}};var Rd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Ld=Buffer.from("amm_config","utf8"),Od=Buffer.from("pool","utf8"),Nd=Buffer.from("pool_lp_mint","utf8"),Md=Buffer.from("pool_vault","utf8"),_d=Buffer.from("observation","utf8");function Fn(r){return ae([Rd],r)}function Vd(r,e){return ae([Ld,Ed(e)],r)}function vd(r,e,t,n){return ae([Od,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Fd(r,e){return ae([Nd,e.toBuffer()],r)}function Wu(r,e,t){return ae([Md,e.toBuffer(),t.toBuffer()],r)}function _r(r,e){return ae([_d,e.toBuffer()],r)}function Ed(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function qu({programId:r,mintA:e,mintB:t}){let n=Vd(r,0).publicKey,o=Fn(r).publicKey,i=vd(r,n,e,t).publicKey,s=Fd(r,i).publicKey,a=Wu(r,i,e).publicKey,c=Wu(r,i,t).publicKey,u=_r(r,i).publicKey;return{poolId:i,configId:n,authority:o,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as Ko}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ls,TOKEN_2022_PROGRAM_ID as Uu,ASSOCIATED_TOKEN_PROGRAM_ID as Dd}from"@solana/spl-token";var Wd=ue("Raydium_cpmm"),Co={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173]};function Gu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=_([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Dd,isSigner:!1,isWritable:!1},{pubkey:jo,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:P},T),new Ko({keys:B,programId:r,data:Buffer.from([...Co.initialize,...T])})}function Xu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:Uu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Wd.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Ko({keys:b,programId:r,data:Buffer.from([...Co.deposit,...g])})}function zu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:Uu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Yo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Ko({keys:b,programId:r,data:Buffer.from([...Co.withdraw,...g])})}function Vr(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=_([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new Ko({keys:g,programId:r,data:Buffer.from([...Co.swapBaseInput,...h])})}function vr(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=_([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new Ko({keys:g,programId:r,data:Buffer.from([...Co.swapBaseOutput,...h])})}import Ee from"bn.js";var Yu=_([fe(8),E("bump"),qe("disableCreatePool"),Lt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),Fr=_([fe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),E("bump"),E("status"),E("lpDecimals"),E("mintDecimalA"),E("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var Ro=class extends Be{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await _e(this.scope.connection,e.map(m=>({pubkey:new Y(m)}))),o={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Fr.decode(d.accountInfo.data);o[String(e[m])]=F(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await _e(this.scope.connection,m.map(p=>({pubkey:new Y(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Yu.decode(y.data)}}let c={},u=await _e(this.scope.connection,s.map(m=>({pubkey:new Y(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Ee(qd.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=F(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new V(y.toString()).div(new V(10).pow(d.mintDecimalB)).div(new V(p.toString()).div(new V(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let i=e[o],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return F(C({},n),{[o]:F(C({},i),{id:new Y(o),configInfo:i.configInfo,version:7,authority:Fn(i.programId).publicKey,mintA:et({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?on((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:et({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?on((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Kn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=et({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?on(n[t.mintA.toBase58()].feeConfig):void 0}}),i=et({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?on(n[t.mintB.toBase58()].feeConfig):void 0}}),s=et({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Gt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new V(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new V(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Fn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:o,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:c}=m,u=Se(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var W,D,$;let d=o.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),p=new Ee(new Y(u.mintA.address).toBuffer()).lte(new Ee(new Y(u.mintB.address).toBuffer())),[y,f]=p?[u.mintA,u.mintB]:[u.mintB,u.mintA],[b,g]=p?[u.mintAAmount,u.mintBAmount]:[u.mintBAmount,u.mintAAmount],h=o.useSOLBalance&&y.address===Er.toBase58(),P=o.useSOLBalance&&f.address===Er.toBase58(),[k,B]=[new Y(y.address),new Y(f.address)],T=this.createTxBuilder(),{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:k,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:d,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:i,checkCreateATAOwner:s});T.addInstruction(x||{});let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new Y(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:d,amount:g}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:i,checkCreateATAOwner:s});if(T.addInstruction(I||{}),S===void 0||R===void 0)throw Error("you don't has some token account");let L=qu({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[Gu(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,ge(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new Y((D=y.programId)!=null?D:Gt),new Y(($=f.programId)!=null?$:Gt),L.observationId,b,g,n)],instructionTypes:[v.CpmmCreatePool]}),T.addCustomComputeBudget(c),T.versionBuild({txVersion:a,extInfo:{address:F(C({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:F(C({},t),{lpAmount:new V(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Je(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new V(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,P=t.mintA.address===Er.toString(),k=t.mintB.address===Er.toString(),B=this.createTxBuilder(),[T,S]=[new Y(t.mintA.address),new Y(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?o:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{});let{account:I,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let W=await m.getCreatedTokenAccount({mint:new Y(t.lpMint.address)}),Ze=await m.handleTokenAccount({side:"out",amount:0,mint:new Y(t.lpMint.address),tokenAccount:W,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:D}=Ze,$=Se(Ze,["tokenAccount"]);B.addInstruction($);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Je(new Ee(1)).sub(s);return B.addInstruction({instructions:[Xu(new Y(t.programId),this.scope.ownerPubKey,new Y(G.authority),new Y(t.id),D,x,I,new Y(G.vault.A),new Y(G.vault.B),T,S,new Y(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,i?b.amount:h,i?h:b.amount)],instructionTypes:[v.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var D,$;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Je(new Ee(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(o.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(o.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[he(l,t.mintA.extensions.feeConfig,d,!1),he(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new Y(t.mintA.address),new Y(t.mintB.address)],P=g.equals(Z),k=h.equals(Z),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Y(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Y(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=R,I&&b.addInstruction(I),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new Y(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let W=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[zu(new Y(t.programId),this.scope.ownerPubKey,new Y(W.authority),new Y(t.id),L,B,T,new Y(W.vault.A),new Y(W.vault.B),g,h,new Y(t.lpMint.address),o,l.sub((D=p.fee)!=null?D:new Ee(0)),m.sub(($=y.fee)!=null?$:new Ee(0)))],instructionTypes:[v.CpmmWithdrawLiquidity],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var S,x,R,I,L,W;let{poolInfo:t,poolKeys:n,baseIn:o,swapResult:i,slippage:s=0,config:a,computeBudgetConfig:c,txVersion:u}=e,{bypassAssociatedCheck:l,checkCreateATAOwner:m,associatedOnly:d}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},a),p=this.createTxBuilder(),[y,f]=[new Y(t.mintA.address),new Y(t.mintB.address)];i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new Ee((1-s)*1e4)).div(new Ee(1e4));let b=t.mintA.address===Z.toBase58(),g=t.mintB.address===Z.toBase58(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new Y((S=t.mintA.programId)!=null?S:Gt),owner:this.scope.ownerPubKey,createInfo:b||!o?{payer:this.scope.ownerPubKey,amount:o?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});P&&p.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new Y((x=t.mintB.programId)!=null?x:Gt),owner:this.scope.ownerPubKey,createInfo:g||o?{payer:this.scope.ownerPubKey,amount:o?0:i.sourceAmountSwapped}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:d,checkCreateATAOwner:m});B&&p.addInstruction(B),(!h||!k)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:d});let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return p.addInstruction({instructions:[o?Vr(new Y(t.programId),this.scope.ownerPubKey,new Y(T.authority),new Y(T.config.id),new Y(t.id),h,k,new Y(T.vault.A),new Y(T.vault.B),new Y((R=t.mintA.programId)!=null?R:Gt),new Y((I=t.mintB.programId)!=null?I:Gt),y,f,_r(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped):vr(new Y(t.programId),this.scope.ownerPubKey,new Y(T.authority),new Y(T.config.id),new Y(t.id),k,h,new Y(T.vault.B),new Y(T.vault.A),new Y((L=t.mintB.programId)!=null?L:Gt),new Y((W=t.mintA.programId)!=null?W:Gt),f,y,_r(new Y(t.programId),new Y(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[o?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut]}),p.addCustomComputeBudget(c),p.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let i=n.toString()===e.mintB.address,s=Mr.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new V(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ee((1-o)*1e4)).div(new Ee(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:s,baseIn:a}){var h,P,k,B,T,S,x,R;let c=1-Number(i.toSignificant())/100,u=new Ee(new V(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=he(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Ee(0)),d=new Ee(new V(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,V.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(P=l.fee)==null?void 0:P.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:pt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=Ud(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=he(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Je(new Ee(1)).add(i),g=he(b.mul(f.amount.sub((B=f.fee)!=null?B:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function Ud(r,e,t,n){let o=r.mul(e).div(n);!o.isZero()&&!r.mul(e).mod(n).isZero()&&(o=o.add(new Ee(1)));let i=r.mul(t).div(n);return!i.isZero()&&!r.mul(t).mod(n).isZero()&&(i=i.add(new Ee(1))),{amountA:o,amountB:i}}import{PublicKey as wn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Re,TOKEN_2022_PROGRAM_ID as ys,createTransferInstruction as $u}from"@solana/spl-token";import qr from"bn.js";import{TOKEN_PROGRAM_ID as ms,TOKEN_2022_PROGRAM_ID as Gd,ASSOCIATED_TOKEN_PROGRAM_ID as Xd}from"@solana/spl-token";import{PublicKey as z,TransactionInstruction as ds,SystemProgram as ps}from"@solana/web3.js";import An from"bn.js";function bB(r,e,t,n,o,i,s,a,c,u,l,m){let d=_([E("instruction"),w("amountIn"),w("amountOut")]),p=[{pubkey:ps.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new z(t.programId),isSigner:!1,isWritable:!1},{pubkey:new z(t.id),isSigner:!1,isWritable:!0},{pubkey:new z(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=ke(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new z("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new ds({keys:p,programId:r,data:y})}function gB(r,e,t,n,o,i,s,a,c,u){let l=_([E("instruction")]),m=[{pubkey:ps.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new z(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new z(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new z(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=ke(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new z("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new ds({keys:m,programId:r,data:d})}function zd(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[A({pubkey:ms,isWritable:!1}),A({pubkey:Gd,isWritable:!1}),A({pubkey:Xd,isWritable:!1}),A({pubkey:ps.programId,isWritable:!1}),A({pubkey:e,isSigner:!0})];b.push(A({pubkey:t})),b.push(A({pubkey:o}));let g=[c,u],h=[l,m],P=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=P[S]===x.mintA.address;if(b.push(A({pubkey:new z(x.programId),isWritable:!1})),S===g.length-1?b.push(A({pubkey:o})):b.push(A({pubkey:n})),b.push(A({pubkey:new z(P[S])})),b.push(A({pubkey:new z(P[S+1])})),x.version===6){let I=h[S];b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(R?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(R?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)})),b.push(A({pubkey:Yo})),b.push(A({pubkey:lt(new z(x.programId),new z(x.id)).publicKey})),f.push(Yd(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(A({pubkey:new z(L)}))}else if(x.version===5){let I=h[S];b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(I.marketProgramId)})),b.push(A({pubkey:new z(I.marketAuthority)})),b.push(A({pubkey:pa,isWritable:!1})),b.push(A({pubkey:new z(I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.marketId)})),b.push(A({pubkey:new z(I.marketBids)})),b.push(A({pubkey:new z(I.marketAsks)})),b.push(A({pubkey:new z(I.marketEventQueue)})),b.push(A({pubkey:new z(I.marketBaseVault)})),b.push(A({pubkey:new z(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],L=x.status!==1;b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(L?I.id:I.marketProgramId)})),b.push(A({pubkey:new z(L?I.id:I.marketAuthority)})),b.push(A({pubkey:new z(L?I.id:I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(L?I.id:I.marketId)})),b.push(A({pubkey:new z(L?I.id:I.marketBids)})),b.push(A({pubkey:new z(L?I.id:I.marketAsks)})),b.push(A({pubkey:new z(L?I.id:I.marketEventQueue)})),b.push(A({pubkey:new z(L?I.id:I.marketBaseVault)})),b.push(A({pubkey:new z(L?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(A({pubkey:new z(I.authority)})),b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(R?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(R?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)}))}else throw Error("pool type error")}let k=_([E("insId"),w("amountIn"),w("amountOut"),X(Q(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new ds({keys:b,programId:r,data:B})}function Yd(r,e){if(r)if(e){let t=new An(r).div(new An(25));return t.gt(Br)?t:Br}else{let t=new An(r).mul(new An(25));return t.lt(xr)?t:xr}else return e?Br:xr}function Qu({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=ke(m),p=t.equals(d.mintA.address)?Nt.add(mt):Mt.sub(mt);return xe.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new An(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[d?Vr(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,m.vaultA,m.vaultB,m.mintProgramA,m.mintProgramA,new z(m.mintA.address),new z(m.mintB.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw):vr(m.programId,e.wallet,m.authority,m.configId,m.id,e.destinationToken,e.sourceToken,m.vaultB,m.vaultA,m.mintProgramB,m.mintProgramA,new z(m.mintB.address),new z(m.mintA.address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[hr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new An(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?v.AmmV5SwapBaseIn:v.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[zd(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new An(0)),n.remainingAccounts)],instructionTypes:[v.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var ju={[pi.toBase58()]:3},Hu={3:pi};var fs=_([fe(5),fe(8),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]),Zu={3:fs};import{PublicKey as Ju}from"@solana/web3.js";var Dr=ue("Serum"),Wr=class{static getProgramId(e){let t=Hu[e];return t||Dr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ju[t];return n||Dr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Zu[e];return t||Dr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let s=n.concat(Buffer.from([o]),Buffer.alloc(7));i=Ju.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:i,nonce:o}}return Dr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Ju.default,nonce:o}}};var Xt=new qr(0),Lo=class extends Be{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Z));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=J(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),no({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:o})}async wrapWSol(e,t,n){let o=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),o.length&&i.addInstruction({instructions:[no({destination:o[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Ot({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(Z),m=u.amount.token.mint.equals(Z),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?ys:Re,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?ys:Re);m&&a.addInstruction({endInstructions:[Ot({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Re})],endInstructionTypes:[v.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?ys:Re)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),P=Qu({routeProgram:i,inputMint:d,swapInfo:F(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[$u(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]}),k.addInstruction(P);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[$u(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]})}return a.addInstruction(P),s===0?a.sizeCheckBuildV0({computeBudgetConfig:o,address:P.address}):a.sizeCheckBuild({computeBudgetConfig:o,address:P.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=da,clmm:n=fa,cpmm:o=ya}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:go.offsetOf("baseMint"),length:64}}),s=_([K("baseMint"),K("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=_([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:yn.span}],dataSlice:{offset:yn.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:Fr.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===wn.default.toString()?Z:e,t=t.toString()===wn.default.toString()?Z:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Re,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&i[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&i[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Rr(i),a={};Object.values(s).forEach(f=>{o.delete(f.mintA.address),a[f.mintA.address]={address:new wn(f.mintA.address),programId:Re,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(f.mintB.address),a[f.mintB.address]={address:new wn(f.mintB.address),programId:Re,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Re)?(o.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),f.mintProgramB.equals(Re)?(o.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await Kn({connection:this.scope.connection,mints:Array.from(o).map(f=>new wn(f))});a=C(C({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(C({},f),{[b]:F(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,h,P,k,B,T,S,x,R;let m=l===void 0?new qr(0):e.raw.mul(new qr(l.feeBps.toNumber())).div(new qr(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(C({},t),{address:ut(t.address).toString()}),b=[];for(let I of n)try{b.push(F(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",I.version,I.id.toString(),L.message)}this.logDebug("direct done");for(let[I,L]of Object.entries(o)){let W={chainId:101,address:I,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},D=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:W,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var sn,zt,kn,Vt;let Ze=G===void 0?Xt:G.data.amountOut.amount.raw.sub((zt=(sn=G.data.amountOut.fee)==null?void 0:sn.raw)!=null?zt:Xt),hn=q===void 0?Xt:q.data.amountOut.amount.raw.sub((Vt=(kn=q.data.amountOut.fee)==null?void 0:kn.raw)!=null?Vt:Xt);return Ze.lt(hn)?1:-1})[0];if(D===void 0)continue;let $=new be(Pr(W),D.data.amountOut.amount.raw.sub((h=(g=D.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Xt));for(let G of L.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:$});b.push(F(C({},q),{allTrade:!!(D.data.allTrade&&q.allTrade),amountIn:D.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new V(new rt({baseToken:D.data.amountIn.amount.token,denominator:D.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((k=(P=q.amountOut.fee)==null?void 0:P.raw)!=null?k:Xt)}).toFixed()),priceImpact:new V(D.data.priceImpact.add(q.priceImpact).toFixed()),fee:[D.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[D.pool,G],remainingAccounts:[D.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(B=q.amountOut.fee)!=null&&B.raw?new be(D.data.amountOut.amount.token,((S=(T=D.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Xt).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:Xt)):void 0,middleToken:D.data.amountOut.amount.token,poolReady:D.data.poolReady&&q.poolReady,poolType:[D.data.poolType,q.poolType],feeConfig:y,expirationTime:Rt(D.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(I=>I.allTrade).sort((I,L)=>I.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Xt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:P}=Ce.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new V(y.toFixed()),executionPrice:new V(f.toFixed()),priceImpact:new V(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[P],expirationTime:Rt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(F(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(F(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(F(C({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(F(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await _e(this.scope.connection,Array.from(s).map(l=>({pubkey:new wn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=fs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Wr.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(C({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=C({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:us({programId:new wn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Fn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:et({address:u.mintLp.toBase58(),programId:Re.toBase58(),decimals:u.lpDecimals}),config:F(C({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{TOKEN_PROGRAM_ID as Qd}from"@solana/spl-token";import{PublicKey as jd,Transaction as bs,TransactionInstruction as Hd}from"@solana/web3.js";import ec from"bn.js";var He=class extends Be{static getPdaPoolId(e,t){return ae([He.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ae([He.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new ec(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>He.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<He.VERSION_PROJECT.length;l++)a.push(...s.map(m=>He.getPdaOwnerId(t,m,o,l).publicKey));let c=await ht(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==He.POOL_LAYOUT.span||b.data.length!==He.OWNER_LAYOUT.span)continue;let g=He.POOL_LAYOUT.decode(f.data),h=He.OWNER_LAYOUT.decode(b.data),P=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new ec(0))).filter(x=>!x).length!==3,T=i>P&&i<k&&g.status===1,S=B&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:He.VERSION_PROJECT[m],openTime:P,endTime:k,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Ie.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!c.mintAddress.equals(Ie.WSOL.mint),associatedOnly:c.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[He.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Ie.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!m.mintAddress.equals(Ie.WSOL.mint),associatedOnly:m.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[He.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:o,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return or(c,[o,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new bs().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new bs().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new bs().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=_([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Qd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Hd({keys:i,programId:e,data:a})}},At=He;At.CLAIMED_NUM=3,At.POOL_LAYOUT=_([fe(8),E("bump"),E("status"),w("openTime"),w("endTime"),K("ammId"),X(_([E("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),At.OWNER_LAYOUT=_([fe(8),E("bump"),E("version"),K("poolId"),K("owner"),w("lpAmount"),X(_([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),At.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new jd(e)),At.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},At.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Oo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ic}from"@solana/spl-token";import No from"bn.js";import{TransactionInstruction as Jd,SYSVAR_RENT_PUBKEY as $d}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as tc}from"@solana/spl-token";import{createInitializeAccountInstruction as nc}from"@solana/spl-token";import{SystemProgram as Pn,Transaction as oc}from"@solana/web3.js";function Zd(r="accountFlags"){let e=new dr(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var gs=_([fe(5),Zd("accountFlags"),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]);function ep({programId:r,marketInfo:e}){let t=_([E("version"),Xe("instruction"),w("baseLotSize"),w("quoteLotSize"),Lt("feeRateBps"),w("vaultSignerNonce"),w("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:$d,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new Jd({keys:n,programId:r,data:o})}async function rc({connection:r,wallet:e,marketInfo:t}){let n=new oc,o=await r.getMinimumBalanceForRentExemption(165);n.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:tc}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:tc}),nc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),nc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new oc;return i.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(gs.span),space:gs.span,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(5120+12),space:5120+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption(262144+12),space:262144+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await r.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),ep({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[v.CreateAccount,v.CreateAccount,v.InitAccount,v.InitAccount]},{transaction:i,signer:[],instructionTypes:[v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.CreateAccount,v.InitMarket]}]}var En=class extends Be{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,txVersion:s,computeBudgetConfig:a}){let c=this.scope.ownerPubKey,u=ze({fromPublicKey:c,programId:i}),l=ze({fromPublicKey:c,programId:i}),m=ze({fromPublicKey:c,programId:i}),d=ze({fromPublicKey:c,programId:i}),p=ze({fromPublicKey:c,programId:i}),y=ze({fromPublicKey:c,programId:ic}),f=ze({fromPublicKey:c,programId:ic}),b=0,g=new No(100);function h(){let R=new No(0);for(;;)try{return{vaultOwner:Oo.createProgramAddressSync([u.publicKey.toBuffer(),R.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:R}}catch{if(R.iaddn(1),R.gt(new No(25555)))throw Error("find vault owner error")}}let{vaultOwner:P,vaultSignerNonce:k}=h(),B=new No(Math.round(10**e.decimals*n)),T=new No(Math.round(n*10**t.decimals*o));if(B.eq(pt))throw Error("lot size is too small");if(T.eq(pt))throw Error("tick size or lot size is too small");let S=await rc({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:u,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:P,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:k,baseLotSize:B,quoteLotSize:T}}),x=this.createTxBuilder();x.addInstruction({instructions:S[0].transaction.instructions,signers:S[0].signer});for await(let R of S.slice(1,S.length))x.addInstruction({instructions:R.transaction.instructions,signers:R.signer,instructionTypes:R.instructionTypes});return s===0?x.sizeCheckBuildV0({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Oo(e.mint),quoteMin:new Oo(t.mint)}}):x.sizeCheckBuild({computeBudgetConfig:a,address:{marketId:u.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new Oo(e.mint),quoteMin:new Oo(t.mint)}})}};import{PublicKey as _o}from"@solana/web3.js";import{TransactionInstruction as ws,SYSVAR_CLOCK_PUBKEY as tp}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ps}from"@solana/spl-token";var As=_([E("instruction"),ha("amount")]),Mo=_([E("instruction")]);function eS({programId:r,amount:e,instructionKeys:t}){let n=[{pubkey:jo,isSigner:!1,isWritable:!1},{pubkey:Ps,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:ni,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],o=Buffer.alloc(As.span);return As.encode({instruction:1,amount:Number(e)},o),new ws({keys:n,programId:r,data:o})}function Ur({programId:r},e){let t=[{pubkey:Ps,isSigner:!1,isWritable:!1},{pubkey:ni,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(Mo.span);return Mo.encode({instruction:2},n),new ws({keys:t,programId:r,data:n})}function hs(r){let{poolConfig:e,userKeys:t,side:n}=r,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Mo.span);Mo.encode({instruction:2},s);let a=[{pubkey:Ps,isWritable:!1,isSigner:!1},{pubkey:tp,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new ws({programId:e.programId,keys:a,data:s})}import sc from"bn.js";var np={[$n.IDO_PROGRAM_ID_V1.toString()]:1,[$n.IDO_PROGRAM_ID_V2.toString()]:2,[$n.IDO_PROGRAM_ID_V3.toString()]:3,[$n.IDO_PROGRAM_ID_V4.toString()]:4},Dn=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i}){let s=this.createTxBuilder(),a=np[t.programId];a||this.logAndCreateError("invalid version",a);let c=ke(t),[u,l]=[!new sc(e.coin).isZero(),!new sc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(Z),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:o});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(Z),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[Ur({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Ur({programId:new _o(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Ur({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new _o(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[hs(F(C({},g),{side:"base"}))]:[],...l?[hs(F(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as op}from"@solana/web3.js";import{MintLayout as rp,TOKEN_2022_PROGRAM_ID as ks,TOKEN_PROGRAM_ID as Ts}from"@solana/spl-token";var Vo=class extends Be{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(o,n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Ct.address,Ct),this._mintGroup.official.add(Ct.address),s.forEach(u=>{this._blackTokenMap.set(u.address,F(C({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ks.toBase58():Ts.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?ks.toBase58():Ts.toBase58()})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?ks.toBase58():Ts.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return Ct;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new op(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=rp.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var Gr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new kt(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ue("Raydium"),this.farm=new yo({scope:this,moduleName:"Raydium_Farm"}),this.account=new oo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Bo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Vo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Lo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new xo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ro({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new At({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new En({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Dn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=ip({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:s,urlConfigs:a}=t,c=new cr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:s}),u=new Gr(F(C({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(lr);return this._owner.publicKey}setOwner(e){return this._owner=e?new kt(e):void 0,this}get connection(){if(!this._connection)throw new Error(Aa);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw this.logger.error(lr),new Error(lr)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e,t){var o;let n=(o=this.apiData.jupTokenList)==null?void 0:o[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;try{let i=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=F(C({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:i}}),this.apiData.jupTokenList[e].data}catch(i){return console.error(i),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};var nK=r=>r;export{sd as AMM_CONFIG_SEED,gu as BIT_PRECISION,xo as Clmm,Bu as ClmmConfigLayout,xe as ClmmInstrument,Nr as ConstantProductCurve,Yu as CpmmConfigInfoLayout,Lr as CpmmFee,Fr as CpmmPoolInfoLayout,Mr as CurveCalculator,Xm as DataElement,ts as EXTENSION_TICKARRAY_BITMAP_SIZE,Wa as FARM_LOCK_MINT,qa as FARM_LOCK_VAULT,ft as FARM_PROGRAM_TO_VERSION,Ga as FARM_VERSION_TO_LEDGER_LAYOUT,Ua as FARM_VERSION_TO_STATE_LAYOUT,Sr as FEE_RATE_DENOMINATOR,cs as FEE_RATE_DENOMINATOR_VALUE,fd as FETCH_TICKARRAY_COUNT,pd as Fee,Ou as LIQUIDITY_FEES_DENOMINATOR,Lu as LIQUIDITY_FEES_NUMERATOR,hd as LIQUIDITY_VERSION_TO_SERUM_VERSION,xP as LIQUIDITY_VERSION_TO_STATE_LAYOUT,Au as LOG_B_2_X32,wu as LOG_B_P_ERR_MARGIN_LOWER_X64,Pu as LOG_B_P_ERR_MARGIN_UPPER_X64,ce as LiquidityMath,gs as MARKET_STATE_LAYOUT_V2,fs as MARKET_STATE_LAYOUT_V3,Zu as MARKET_VERSION_TO_STATE_LAYOUT,Mt as MAX_SQRT_PRICE_X64,xr as MAX_SQRT_PRICE_X64_SUB_ONE,tt as MAX_TICK,Nt as MIN_SQRT_PRICE_X64,Br as MIN_SQRT_PRICE_X64_ADD_ONE,Qe as MIN_TICK,Nn as MODEL_DATA_PUBKEY,Wr as Market,ne as MathUtil,es as MaxU64,bu as MaxUint128,qt as NEGATIVE_ONE,mt as ONE,md as OPERATION_SEED,rs as ObservationInfoLayout,gd as ObservationLayout,xu as OperationLayout,cd as POOL_REWARD_VAULT_SEED,ad as POOL_SEED,dd as POOL_TICK_ARRAY_BITMAP_SEED,ud as POOL_VAULT_SEED,pu as POSITION_SEED,yn as PoolInfoLayout,Ce as PoolUtils,Kr as PositionInfoLayout,wd as PositionRewardInfoLayout,To as PositionUtils,lk as ProtocolPositionLayout,Ir as Q128,dt as Q64,Gr as Raydium,Ad as RewardInfo,Du as RoundDirection,ju as SERUM_PROGRAMID_TO_VERSION,Hu as SERUM_VERSION_TO_PROGRAMID,Ct as SOL_INFO,eP as SPL_MINT_LAYOUT,te as SqrtPriceMath,On as StableLayout,fn as SwapMath,pn as TICK_ARRAY_BITMAP_SIZE,ld as TICK_ARRAY_SEED,Ve as TICK_ARRAY_SIZE,$P as TICK_SPACINGS,Me as TOKEN_WSOL,Ut as TickArrayBitmap,Iu as TickArrayBitmapExtensionLayout,ko as TickArrayBitmapExtensionUtils,ho as TickArrayLayout,Pd as TickLayout,bn as TickMath,le as TickQuery,j as TickUtils,Po as U64Resolution,th as U64_IGNORE_RANGE,Ea as Voter,xm as VoterDepositEntry,Bm as VoterLockup,Fa as VoterRegistrar,Im as VoterVotingMintConfig,de as ZERO,Yi as addLiquidityLayout,Si as associatedLedgerAccountLayout,Di as calFarmRewardAmount,Kd as ceilDiv,Mo as claimLayout,Tu as clmmComputeInfoToApiInfo,Ot as closeAccountInstruction,lo as createAssociatedLedgerAccountInstruction,$a as createPoolFeeLayout,uu as createPoolV4InstructionV2,BP as createPoolV4Layout,Dt as createWSolAccountInstructions,$e as dwLayout,Li as farmAddRewardLayout,EA as farmLedgerLayoutV3_1,io as farmLedgerLayoutV3_2,DA as farmLedgerLayoutV5_1,Va as farmLedgerLayoutV5_2,va as farmLedgerLayoutV6_1,za as farmRewardInfoToConfig,Ci as farmRewardLayout,Ri as farmRewardRestartLayout,Tm as farmRewardTimeInfoLayout,Ma as farmStateV3Layout,_a as farmStateV5Layout,ro as farmStateV6Layout,mw as fetchMultipleFarmInfoAndUpdate,qk as fetchMultipleInfo,Gi as fixedSwapInLayout,Xi as fixedSwapOutLayout,Fu as floorDiv,td as formatLayout,ze as generatePubKey,Xa as getAssociatedAuthority,Cr as getAssociatedConfigId,Ye as getAssociatedLedgerAccount,ao as getAssociatedLedgerPoolAccount,xd as getAssociatedOpenOrders,Mu as getAssociatedPoolKeys,Vd as getCpmmPdaAmmConfigId,vd as getCpmmPdaPoolId,qu as getCreatePoolKeys,Wi as getDepositEntryIndex,ou as getDxByDyBaseIn,nu as getDyByDxBaseIn,Ln as getFarmLedgerLayout,Sm as getFarmStateLayout,us as getLiquidityAssociatedAuthority,gn as getLiquidityAssociatedId,Dh as getLiquidityFromAmounts,HP as getPdaAmmConfigId,lt as getPdaExBitmapAccount,Fd as getPdaLpMint,Tr as getPdaMetadataKey,_r as getPdaObservationId,wo as getPdaOperationAccount,yt as getPdaPersonalPositionAddress,Fn as getPdaPoolAuthority,fu as getPdaPoolId,yu as getPdaPoolRewardVaulId,$i as getPdaPoolVaultId,dn as getPdaProtocolPositionAddress,we as getPdaTickArrayAddress,Wu as getPdaVault,Mi as getRegistrarAddress,ru as getStablePrice,Ei as getTokenOwnerRecordAddress,vi as getVoterAddress,Fi as getVoterWeightRecordAddress,Vi as getVotingMintAuthority,_i as getVotingTokenMint,Vm as governanceCreateTokenOwnerRecord,XP as i16ToBytes,kr as i32ToBytes,zi as initPoolLayout,Bi as initTokenAccountInstruction,ep as initializeMarket,Oi as isValidFarmVersion,Ao as isZero,dw as judgeFarmType,Zi as leadingZeros,du as leastSignificantBit,go as liquidityStateV4Layout,Um as liquidityStateV5Layout,hr as makeAMMSwapInstruction,au as makeAddLiquidityInstruction,Ui as makeAddNewRewardInstruction,Ur as makeClaimInstruction,hs as makeClaimInstructionV4,Gu as makeCreateCpmmPoolInInstruction,Ya as makeCreateFarmInstruction,rc as makeCreateMarketInstruction,Qa as makeCreatorWithdrawFarmRewardInstruction,Xu as makeDepositCpmmInInstruction,ja as makeDepositInstructionV3,Ha as makeDepositInstructionV5,Za as makeDepositInstructionV6,Cw as makeDepositTokenInstruction,Lw as makeDepositWithdrawInstruction,UP as makeInitPoolInstructionV4,eS as makePurchaseInstruction,qi as makeRestartRewardInstruction,cu as makeSimulatePoolInfoInstruction,Vr as makeSwapCpmmBaseInInInstruction,vr as makeSwapCpmmBaseOutInInstruction,rd as makeSwapFixedInInstruction,id as makeSwapFixedOutInstruction,Qu as makeSwapInstruction,no as makeTransferInstruction,zu as makeWithdrawCpmmInInstruction,fo as makeWithdrawInstructionV3,po as makeWithdrawInstructionV5,mo as makeWithdrawInstructionV6,Rw as makeWithdrawTokenInstruction,eh as mockCreatePoolInfo,hu as mockV3CreatePoolInfo,zm as modelDataInfoLayout,mu as mostSignificantBit,Na as parseTokenAccountResp,lP as parseTokenInfo,nn as poolTypeV6,As as purchaseLayout,Pm as realFarmStateV3Layout,hm as realFarmStateV5Layout,km as realFarmV6Layout,Hi as removeLiquidityInstruction,Qi as removeLiquidityLayout,bB as route1Instruction,gB as route2Instruction,zd as routeInstruction,qP as simulatePoolInfoInstruction,dP as solToWSolToken,Jt as splAccountLayout,Rr as toAmmComputePoolInfo,et as toApiV3Token,on as toFeeConfig,Pr as toToken,bo as toTokenAmount,mP as toTokenInfo,Ji as trailingZeros,lu as u16ToBytes,zP as u32ToBytes,nK as unionArr,Km as updateFarmPoolInfo,Ni as validateFarmRewards,Fm as voterStakeRegistryCreateDepositEntry,vm as voterStakeRegistryCreateVoter,Nm as voterStakeRegistryDeposit,Mm as voterStakeRegistryUpdateVoterWeightRecord,_m as voterStakeRegistryWithdraw,pP as wSolToSolToken,Ki as withdrawRewardLayout};
|
|
2
2
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
3
3
|
//# sourceMappingURL=index.mjs.map
|