@raydium-io/raydium-sdk-v2 0.1.44-alpha → 0.1.45-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/api/api.d.ts +1 -1
- package/lib/api/index.d.ts +1 -1
- package/lib/api/type.d.ts +1 -1
- package/lib/common/accountInfo.d.ts +1 -1
- package/lib/common/bignumber.d.ts +1 -1
- package/lib/common/fractionUtil.d.ts +1 -1
- package/lib/common/index.d.ts +1 -1
- package/lib/common/transfer.d.ts +1 -1
- package/lib/common/txTool/txTool.d.ts +1 -1
- package/lib/common/txTool/txUtils.d.ts +1 -1
- package/lib/common/utility.d.ts +1 -1
- package/lib/index.d.ts +3 -3
- 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/module/amount.d.ts +1 -1
- package/lib/module/fraction.d.ts +1 -1
- package/lib/module/index.d.ts +1 -1
- package/lib/module/percent.d.ts +1 -1
- package/lib/module/price.d.ts +1 -1
- package/lib/raydium/account/account.d.ts +3 -3
- package/lib/raydium/account/index.d.ts +1 -1
- package/lib/raydium/account/instruction.d.ts +1 -1
- package/lib/raydium/account/types.d.ts +1 -1
- package/lib/raydium/account/util.d.ts +1 -1
- package/lib/raydium/clmm/clmm.d.ts +3 -3
- package/lib/raydium/clmm/index.d.ts +3 -3
- package/lib/raydium/clmm/instrument.d.ts +2 -2
- package/lib/raydium/clmm/layout.d.ts +1 -1
- package/lib/raydium/clmm/type.d.ts +2 -2
- package/lib/raydium/clmm/utils/math.d.ts +2 -2
- package/lib/raydium/clmm/utils/pool.d.ts +2 -2
- package/lib/raydium/clmm/utils/position.d.ts +2 -2
- package/lib/raydium/clmm/utils/tick.d.ts +2 -2
- package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
- package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
- package/lib/raydium/cpmm/cpmm.d.ts +3 -3
- package/lib/raydium/cpmm/cpmm.js +1 -1
- package/lib/raydium/cpmm/cpmm.js.map +1 -1
- package/lib/raydium/cpmm/cpmm.mjs +1 -1
- package/lib/raydium/cpmm/cpmm.mjs.map +1 -1
- package/lib/raydium/cpmm/index.d.ts +1 -1
- package/lib/raydium/cpmm/layout.d.ts +1 -1
- package/lib/raydium/cpmm/type.d.ts +2 -1
- package/lib/raydium/cpmm/type.js.map +1 -1
- package/lib/raydium/farm/config.d.ts +1 -1
- package/lib/raydium/farm/farm.d.ts +3 -3
- package/lib/raydium/farm/index.d.ts +1 -1
- package/lib/raydium/farm/instruction.d.ts +1 -1
- package/lib/raydium/farm/layout.d.ts +1 -1
- package/lib/raydium/farm/type.d.ts +1 -1
- package/lib/raydium/farm/util.d.ts +1 -1
- package/lib/raydium/ido/ido.d.ts +3 -3
- package/lib/raydium/ido/index.d.ts +3 -3
- package/lib/raydium/ido/instruction.d.ts +1 -1
- package/lib/raydium/ido/type.d.ts +1 -1
- package/lib/raydium/index.d.ts +3 -3
- 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/liquidity/index.d.ts +1 -1
- package/lib/raydium/liquidity/instruction.d.ts +1 -1
- package/lib/raydium/liquidity/layout.d.ts +6 -6
- package/lib/raydium/liquidity/liquidity.d.ts +3 -3
- package/lib/raydium/liquidity/type.d.ts +1 -1
- package/lib/raydium/liquidity/utils.d.ts +1 -1
- package/lib/raydium/marketV2/createMarket.d.ts +3 -3
- package/lib/raydium/marketV2/createMarket.js.map +1 -1
- package/lib/raydium/marketV2/createMarket.mjs.map +1 -1
- package/lib/raydium/marketV2/index.d.ts +3 -3
- package/lib/raydium/marketV2/index.js.map +1 -1
- package/lib/raydium/marketV2/index.mjs.map +1 -1
- package/lib/raydium/moduleBase.d.ts +3 -3
- package/lib/raydium/raydium.d.ts +3 -3
- 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/constant.d.ts +1 -1
- package/lib/raydium/token/index.d.ts +1 -1
- package/lib/raydium/token/token.d.ts +3 -3
- package/lib/raydium/token/type.d.ts +1 -1
- package/lib/raydium/token/utils.d.ts +1 -1
- package/lib/raydium/tradeV2/index.d.ts +2 -2
- package/lib/raydium/tradeV2/index.js.map +1 -1
- package/lib/raydium/tradeV2/index.mjs.map +1 -1
- package/lib/raydium/tradeV2/instrument.d.ts +2 -2
- package/lib/raydium/tradeV2/trade.d.ts +3 -3
- package/lib/raydium/tradeV2/trade.js +1 -1
- package/lib/raydium/tradeV2/trade.js.map +1 -1
- package/lib/raydium/tradeV2/trade.mjs +1 -1
- package/lib/raydium/tradeV2/trade.mjs.map +1 -1
- package/lib/raydium/tradeV2/type.d.ts +2 -2
- package/lib/raydium/type.d.ts +1 -1
- package/lib/raydium/utils1216/index.d.ts +3 -3
- package/lib/raydium/utils1216/utils1216.d.ts +3 -3
- package/lib/{raydium-026a0a95.d.ts → raydium-15ed5dcf.d.ts} +3 -3
- package/lib/{type-c1771287.d.ts → type-b868e5e7.d.ts} +1 -1
- package/package.json +1 -1
- package/src/raydium/cpmm/cpmm.ts +2 -1
- package/src/raydium/cpmm/type.ts +1 -0
- package/src/raydium/marketV2/createMarket.ts +2 -2
- package/src/raydium/tradeV2/trade.ts +4 -4
- package/lib/{api-51b11f0d.d.ts → api-00b0713a.d.ts} +5 -5
package/lib/raydium/raydium.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var xu=Object.defineProperty,Su=Object.defineProperties;var Ku=Object.getOwnPropertyDescriptors;var Ir=Object.getOwnPropertySymbols;var es=Object.prototype.hasOwnProperty,ts=Object.prototype.propertyIsEnumerable;var $i=(o,e,t)=>e in o?xu(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,C=(o,e)=>{for(var t in e||(e={}))es.call(e,t)&&$i(o,t,e[t]);if(Ir)for(var t of Ir(e))ts.call(e,t)&&$i(o,t,e[t]);return o},E=(o,e)=>Su(o,Ku(e));var Be=(o,e)=>{var t={};for(var n in o)es.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&Ir)for(var n of Ir(o))e.indexOf(n)<0&&ts.call(o,n)&&(t[n]=o[n]);return t};import{merge as wd}from"lodash";import Ws from"axios";import{get as ns,set as Cu}from"lodash";var Oo=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={},Ru={};function se(o){let e=ns(rs,o);if(!e){let t=ns(Ru,o);e=new Oo({name:o,logLevel:t}),Cu(rs,o,e)}return e}import{PublicKey as Dc}from"@solana/web3.js";import Wc from"bn.js";import Vc from"big.js";import Er from"bn.js";import et from"bn.js";var wn=9e15,Gt=1e9,No="0123456789abcdef",xr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Sr="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Mo={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-wn,maxE:wn,crypto:!1},as,Mt,ne=!0,Cr="[DecimalError] ",Ut=Cr+"Invalid argument: ",us=Cr+"Precision limit exceeded",cs=Cr+"crypto unavailable",ls="[object Decimal]",We=Math.floor,Re=Math.pow,Lu=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Ou=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Nu=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ms=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,yt=1e7,J=7,Mu=9007199254740991,_u=xr.length-1,_o=Sr.length-1,M={toStringTag:ls};M.absoluteValue=M.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),Y(o)};M.ceil=function(){return Y(new this.constructor(this),this.e+1,2)};M.clampedTo=M.clamp=function(o,e){var t,n=this,r=n.constructor;if(o=new r(o),e=new r(e),!o.s||!e.s)return new r(NaN);if(o.gt(e))throw Error(Ut+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new r(n)};M.comparedTo=M.cmp=function(o){var e,t,n,r,i=this,s=i.d,a=(o=new i.constructor(o)).d,u=i.s,c=o.s;if(!s||!a)return!u||!c?NaN:u!==c?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-c:0;if(u!==c)return u;if(i.e!==o.e)return i.e>o.e^u<0?1:-1;for(n=s.length,r=a.length,e=0,t=n<r?n:r;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===r?0:n>r^u<0?1:-1};M.cosine=M.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+J,n.rounding=1,t=vu(n,bs(n,t)),n.precision=o,n.rounding=e,Y(Mt==2||Mt==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};M.cubeRoot=M.cbrt=function(){var o,e,t,n,r,i,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ne=!1,i=l.s*Re(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=ve(l.d),o=l.e,(i=(o-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Re(t,1/3),o=We((o+1)/3)-(o%3==(o<0?-1:2)),i==1/0?t="5e"+o:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(o=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=ge(c.plus(l).times(a),c.plus(u),s+2,1),ve(a.d).slice(0,s)===(t=ve(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(Y(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(Y(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return ne=!0,Y(n,o,m.rounding,e)};M.decimalPlaces=M.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-We(this.e/J))*J,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(o){return ge(this,new this.constructor(o))};M.dividedToIntegerBy=M.divToInt=function(o){var e=this,t=e.constructor;return Y(ge(e,new t(o),0,1,1),t.precision,t.rounding)};M.equals=M.eq=function(o){return this.cmp(o)===0};M.floor=function(){return Y(new this.constructor(this),this.e+1,3)};M.greaterThan=M.gt=function(o){return this.cmp(o)>0};M.greaterThanOrEqualTo=M.gte=function(o){var e=this.cmp(o);return e==1||e===0};M.hyperbolicCosine=M.cosh=function(){var o,e,t,n,r,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,r=i.d.length,r<32?(o=Math.ceil(r/3),e=(1/Lr(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=An(s,1,i.times(e),new s(1),!0);for(var u,c=o,l=new s(8);c--;)u=i.times(i),i=a.minus(u.times(l.minus(u.times(l))));return Y(i,s.precision=t,s.rounding=n,!0)};M.hyperbolicSine=M.sinh=function(){var o,e,t,n,r=this,i=r.constructor;if(!r.isFinite()||r.isZero())return new i(r);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(r.e,r.sd())+4,i.rounding=1,n=r.d.length,n<3)r=An(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/Lr(5,o)),r=An(i,2,r,r,!0);for(var s,a=new i(5),u=new i(16),c=new i(20);o--;)s=r.times(r),r=r.times(a.plus(s.times(u.times(s).plus(c))))}return i.precision=e,i.rounding=t,Y(r,e,t,!0)};M.hyperbolicTangent=M.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,ge(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};M.inverseCosine=M.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),r=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?ft(t,r,i):new t(0):new t(NaN):e.isZero()?ft(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=ft(t,r+4,i).times(.5),t.precision=r,t.rounding=i,o.minus(e))};M.inverseHyperbolicCosine=M.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,ne=!1,t=t.times(t).minus(1).sqrt().plus(t),ne=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};M.inverseHyperbolicSine=M.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,ne=!1,t=t.times(t).plus(1).sqrt().plus(t),ne=!0,n.precision=o,n.rounding=e,t.ln())};M.inverseHyperbolicTangent=M.atanh=function(){var o,e,t,n,r=this,i=r.constructor;return r.isFinite()?r.e>=0?new i(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(o=i.precision,e=i.rounding,n=r.sd(),Math.max(n,o)<2*-r.e-1?Y(new i(r),o,e,!0):(i.precision=t=n-r.e,r=ge(r.plus(1),new i(1).minus(r),t+o,1),i.precision=o+4,i.rounding=1,r=r.ln(),i.precision=o,i.rounding=e,r.times(.5))):new i(NaN)};M.inverseSine=M.asin=function(){var o,e,t,n,r=this,i=r.constructor;return r.isZero()?new i(r):(e=r.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(o=ft(i,t+4,n).times(.5),o.s=r.s,o):new i(NaN):(i.precision=t+6,i.rounding=1,r=r.div(new i(1).minus(r.times(r)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,r.times(2)))};M.inverseTangent=M.atan=function(){var o,e,t,n,r,i,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=_o)return s=ft(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=_o)return s=ft(l,m+4,d).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/J+2|0),o=t;o;--o)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(ne=!1,e=Math.ceil(a/J),n=1,u=c.times(c),s=new l(c),r=c;o!==-1;)if(r=r.times(u),i=s.minus(r.div(n+=2)),r=r.times(u),s=i.plus(r.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===i.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),ne=!0,Y(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&We(this.e/J)>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(o){return this.cmp(o)<0};M.lessThanOrEqualTo=M.lte=function(o){return this.cmp(o)<1};M.logarithm=M.log=function(o){var e,t,n,r,i,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=c.d,c.s<0||!t||!t[0]||c.eq(1))return new l(t&&!t[0]?-1/0:c.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(r=t[0];r%10===0;)r/=10;i=r!==1}if(ne=!1,a=m+p,s=qt(c,a),n=e?Kr(l,a+10):qt(o,a),u=ge(s,n,a,1),Mn(u.d,r=m,d))do if(a+=10,s=qt(c,a),n=e?Kr(l,a+10):qt(o,a),u=ge(s,n,a,1),!i){+ve(u.d).slice(r+1,r+15)+1==1e14&&(u=Y(u,m+1,0));break}while(Mn(u.d,r+=10,d));return ne=!0,Y(u,m,d)};M.minus=M.sub=function(o){var e,t,n,r,i,s,a,u,c,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(c=p.d,d=o.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])o.s=-o.s;else if(c[0])o=new y(p);else return new y(u===3?-0:0);return ne?Y(o,a,u):o}if(t=We(o.e/J),l=We(p.e/J),c=c.slice(),i=l-t,i){for(m=i<0,m?(e=c,i=-i,s=d.length):(e=d,t=l,s=c.length),n=Math.max(Math.ceil(a/J),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=c.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=d[n]){m=c[n]<d[n];break}i=0}for(m&&(e=c,c=d,d=e,o.s=-o.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>i;){if(c[--n]<d[n]){for(r=n;r&&c[--r]===0;)c[r]=yt-1;--c[r],c[n]+=yt}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(o.d=c,o.e=Rr(c,t),ne?Y(o,a,u):o):new y(u===3?-0:0)};M.modulo=M.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?Y(new n(t),n.precision,n.rounding):(ne=!1,n.modulo==9?(e=ge(t,o.abs(),0,3,1),e.s*=o.s):e=ge(t,o,0,n.modulo,1),e=e.times(o),ne=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return vo(this)};M.naturalLogarithm=M.ln=function(){return qt(this)};M.negated=M.neg=function(){var o=new this.constructor(this);return o.s=-o.s,Y(o)};M.plus=M.add=function(o){var e,t,n,r,i,s,a,u,c,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(c=m.d,l=o.d,a=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(o=new d(m)),ne?Y(o,a,u):o;if(i=We(m.e/J),n=We(o.e/J),c=c.slice(),r=i-n,r){for(r<0?(t=c,r=-r,s=l.length):(t=l,n=i,s=c.length),i=Math.ceil(a/J),s=i>s?i+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=c.length,r=l.length,s-r<0&&(r=s,t=l,l=c,c=t),e=0;r;)e=(c[--r]=c[r]+l[r]+e)/yt|0,c[r]%=yt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return o.d=c,o.e=Rr(c,n),ne?Y(o,a,u):o};M.precision=M.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(Ut+o);return t.d?(e=ds(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var o=this,e=o.constructor;return Y(new e(o),o.e+1,e.rounding)};M.sine=M.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+J,n.rounding=1,t=Eu(n,bs(n,t)),n.precision=o,n.rounding=e,Y(Mt>2?t.neg():t,o,e,!0)):new n(NaN)};M.squareRoot=M.sqrt=function(){var o,e,t,n,r,i,s=this,a=s.d,u=s.e,c=s.s,l=s.constructor;if(c!==1||!a||!a[0])return new l(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);for(ne=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=ve(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=We((u+1)/2)-(u<0||u%2),c==1/0?e="5e"+u:(e=c.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new l(e)):n=new l(c.toString()),t=(u=l.precision)+3;;)if(i=n,n=i.plus(ge(s,i,t+2,1)).times(.5),ve(i.d).slice(0,t)===(e=ve(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(Y(i,u+1,0),i.times(i).eq(s))){n=i;break}t+=4,r=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(Y(n,u+1,1),o=!n.times(n).eq(s));break}return ne=!0,Y(n,u,l.rounding,o)};M.tangent=M.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=ge(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,Y(Mt==2||Mt==4?t.neg():t,o,e,!0)):new n(NaN)};M.times=M.mul=function(o){var e,t,n,r,i,s,a,u,c,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=We(l.e/J)+We(o.e/J),u=d.length,c=p.length,u<c&&(i=d,d=p,p=i,s=u,u=c,c=s),i=[],s=u+c,n=s;n--;)i.push(0);for(n=c;--n>=0;){for(e=0,r=u+n;r>n;)a=i[r]+p[n]*d[r-n-1]+e,i[r--]=a%yt|0,e=a/yt|0;i[r]=(i[r]+e)%yt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),o.d=i,o.e=Rr(i,t),ne?Y(o,m.precision,m.rounding):o};M.toBinary=function(o,e){return Eo(this,2,o,e)};M.toDecimalPlaces=M.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(Je(o,0,Gt),e===void 0?e=n.rounding:Je(e,0,8),Y(t,o+t.e+1,e))};M.toExponential=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Bt(n,!0):(Je(o,0,Gt),e===void 0?e=r.rounding:Je(e,0,8),n=Y(new r(n),o+1,e),t=Bt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toFixed=function(o,e){var t,n,r=this,i=r.constructor;return o===void 0?t=Bt(r):(Je(o,0,Gt),e===void 0?e=i.rounding:Je(e,0,8),n=Y(new i(r),o+r.e+1,e),t=Bt(n,!1,o+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};M.toFraction=function(o){var e,t,n,r,i,s,a,u,c,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(c=t=new f(1),n=u=new f(0),e=new f(n),i=e.e=ds(y)-p.e-1,s=i%J,e.d[0]=Re(10,s<0?J+s:s),o==null)o=i>0?e:c;else{if(a=new f(o),!a.isInt()||a.lt(c))throw Error(Ut+a);o=a.gt(e)?i>0?e:c:a}for(ne=!1,a=new f(ve(y)),l=f.precision,f.precision=i=y.length*J*2;m=ge(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(o)!=1;)t=n,n=r,r=c,c=u.plus(m.times(r)),u=r,r=e,e=a.minus(m.times(r)),a=r;return r=ge(o.minus(t),n,0,1,1),u=u.plus(r.times(c)),t=t.plus(r.times(n)),u.s=c.s=p.s,d=ge(c,n,i,1).minus(p).abs().cmp(ge(u,t,i,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,ne=!0,d};M.toHexadecimal=M.toHex=function(o,e){return Eo(this,16,o,e)};M.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:Je(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(ne=!1,t=ge(t,o,0,e,1).times(o),ne=!0,Y(t)):(o.s=t.s,t=o),t};M.toNumber=function(){return+this};M.toOctal=function(o,e){return Eo(this,8,o,e)};M.toPower=M.pow=function(o){var e,t,n,r,i,s,a=this,u=a.constructor,c=+(o=new u(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new u(Re(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,i=u.rounding,o.eq(1))return Y(a,n,i);if(e=We(o.e/J),e>=o.d.length-1&&(t=c<0?-c:c)<=Mu)return r=ps(u,a,t,n),o.s<0?new u(1).div(r):Y(r,n,i);if(s=a.s,s<0){if(e<o.d.length-1)return new u(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Re(+a,c),e=t==0||!isFinite(t)?We(c*(Math.log("0."+ve(a.d))/Math.LN10+a.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?s/0:0):(ne=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),r=vo(o.times(qt(a,n+t)),n),r.d&&(r=Y(r,n+5,1),Mn(r.d,n,i)&&(e=n+10,r=Y(vo(o.times(qt(a,e+t)),e),e+5,1),+ve(r.d).slice(n+1,n+15)+1==1e14&&(r=Y(r,n+1,0)))),r.s=s,ne=!0,u.rounding=i,Y(r,n,i))};M.toPrecision=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Bt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(Je(o,1,Gt),e===void 0?e=r.rounding:Je(e,0,8),n=Y(new r(n),o,e),t=Bt(n,o<=n.e||n.e<=r.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toSignificantDigits=M.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(Je(o,1,Gt),e===void 0?e=n.rounding:Je(e,0,8)),Y(new n(t),o,e)};M.toString=function(){var o=this,e=o.constructor,t=Bt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};M.truncated=M.trunc=function(){return Y(new this.constructor(this),this.e+1,1)};M.valueOf=M.toJSON=function(){var o=this,e=o.constructor,t=Bt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function ve(o){var e,t,n,r=o.length-1,i="",s=o[0];if(r>0){for(i+=s,e=1;e<r;e++)n=o[e]+"",t=J-n.length,t&&(i+=Wt(t)),i+=n;s=o[e],n=s+"",t=J-n.length,t&&(i+=Wt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function Je(o,e,t){if(o!==~~o||o<e||o>t)throw Error(Ut+o)}function Mn(o,e,t,n){var r,i,s,a;for(i=o[0];i>=10;i/=10)--e;return--e<0?(e+=J,r=0):(r=Math.ceil((e+1)/J),e%=J),i=Re(10,J-e),a=o[r]%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)&&(o[r+1]/i/100|0)==Re(10,e-2)-1||(a==i/2||a==0)&&(o[r+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)&&(o[r+1]/i/1e3|0)==Re(10,e-3)-1,s}function Br(o,e,t){for(var n,r=[0],i,s=0,a=o.length;s<a;){for(i=r.length;i--;)r[i]*=e;for(r[0]+=No.indexOf(o.charAt(s++)),n=0;n<r.length;n++)r[n]>t-1&&(r[n+1]===void 0&&(r[n+1]=0),r[n+1]+=r[n]/t|0,r[n]%=t)}return r.reverse()}function vu(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/Lr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=An(o,1,e.times(r),new o(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var ge=function(){function o(n,r,i){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*r+a,n[u]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,r,i,s){var a,u;if(i!=s)u=i>s?1:-1;else for(a=u=0;a<i;a++)if(n[a]!=r[a]){u=n[a]>r[a]?1:-1;break}return u}function t(n,r,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<r[i]?1:0,n[i]=a*s+n[i]-r[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,r,i,s,a,u){var c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I,L,D,F=n.constructor,Z=n.s==r.s?1:-1,G=n.d,q=r.d;if(!G||!G[0]||!q||!q[0])return new F(!n.s||!r.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?Z*0:Z/0);for(u?(p=1,l=n.e-r.e):(u=yt,p=J,l=We(n.e/p)-We(r.e/p)),L=q.length,R=G.length,g=new F(Z),h=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,i==null?(T=i=F.precision,s=F.rounding):a?T=i+(n.e-r.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*u+(G[m]||0),h[m]=S/q|0,d=S%q|0;y=d||m<R}else{for(d=u/(q[0]+1)|0,d>1&&(q=o(q,d,u),G=o(G,d,u),L=q.length,R=G.length),x=L,A=G.slice(0,L),k=A.length;k<L;)A[k++]=0;D=q.slice(),D.unshift(0),I=q[0],q[1]>=u/2&&++I;do d=0,c=e(q,A,L,k),c<0?(B=A[0],L!=k&&(B=B*u+(A[1]||0)),d=B/I|0,d>1?(d>=u&&(d=u-1),f=o(q,d,u),b=f.length,k=A.length,c=e(f,A,b,k),c==1&&(d--,t(f,L<b?D:q,b,u))):(d==0&&(c=d=1),f=q.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,u),c==-1&&(k=A.length,c=e(q,A,L,k),c<1&&(d++,t(A,L<k?D:q,k,u))),k=A.length):c===0&&(d++,A=[0]),h[m++]=d,c&&A[0]?A[k++]=G[x]||0:(A=[G[x]],k=1);while((x++<R||A[0]!==void 0)&&T--);y=A[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,as=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,Y(g,a?i+g.e+1:i,s,y)}return g}}();function Y(o,e,t,n){var r,i,s,a,u,c,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(r=1,a=m[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=J,s=e,l=m[d=0],u=l/Re(10,r-s-1)%10|0;else if(d=Math.ceil((i+1)/J),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,r=1,i%=J,s=i-J+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;i%=J,s=i-J+r,u=s<0?0:l/Re(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Re(10,r-s-1)),c=t<4?(u||n)&&(t==0||t==(o.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(i>0?s>0?l/Re(10,r-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=o.e+1,m[0]=Re(10,(J-e%J)%J),o.e=-e||0):m[0]=o.e=0,o;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Re(10,J-i),m[d]=s>0?(l/Re(10,r-s)%Re(10,s)|0)*a:0),c)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&&(o.e++,m[0]==yt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=yt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return ne&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Bt(o,e,t){if(!o.isFinite())return ys(o);var n,r=o.e,i=ve(o.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Wt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+Wt(-r-1)+i,t&&(n=t-s)>0&&(i+=Wt(n))):r>=s?(i+=Wt(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+Wt(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=Wt(n))),i}function Rr(o,e){var t=o[0];for(e*=J;t>=10;t/=10)e++;return e}function Kr(o,e,t){if(e>_u)throw ne=!0,t&&(o.precision=t),Error(us);return Y(new o(xr),e,1,!0)}function ft(o,e,t){if(e>_o)throw Error(us);return Y(new o(Sr),e,t,!0)}function ds(o){var e=o.length-1,t=e*J+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function Wt(o){for(var e="";o--;)e+="0";return e}function ps(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/J+4);for(ne=!1;;){if(t%2&&(i=i.times(e),is(i.d,s)&&(r=!0)),t=We(t/2),t===0){t=i.d.length-1,r&&i.d[t]===0&&++i.d[t];break}e=e.times(e),is(e.d,s)}return ne=!0,i}function os(o){return o.d[o.d.length-1]&1}function fs(o,e,t){for(var n,r=new o(e[0]),i=0;++i<e.length;)if(n=new o(e[i]),n.s)r[t](n)&&(r=n);else{r=n;break}return r}function vo(o,e){var t,n,r,i,s,a,u,c=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(ne=!1,u=y):u=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Re(2,m))/Math.LN10*2+5|0,u+=n,t=i=s=new d(1),d.precision=u;;){if(i=Y(i.times(o),u,1),t=t.times(++l),a=s.plus(ge(i,t,u,1)),ve(a.d).slice(0,u)===ve(s.d).slice(0,u)){for(r=m;r--;)s=Y(s.times(s),u,1);if(e==null)if(c<3&&Mn(s.d,u-n,p,c))d.precision=u+=10,t=i=a=new d(1),l=0,c++;else return Y(s,d.precision=y,p,ne=!0);else return d.precision=y,s}s=a}}function qt(o,e){var t,n,r,i,s,a,u,c,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,h=g.rounding,A=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?(ne=!1,l=A):l=e,g.precision=l+=y,t=ve(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(o),t=ve(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 c=Kr(g,l+2,A).times(i+""),f=qt(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?Y(f,A,h,ne=!0):f;for(m=f,u=s=f=ge(f.minus(1),f.plus(1),l,1),d=Y(f.times(f),l,1),r=3;;){if(s=Y(s.times(d),l,1),c=u.plus(ge(s,new g(r),l,1)),ve(c.d).slice(0,l)===ve(u.d).slice(0,l))if(u=u.times(2),i!==0&&(u=u.plus(Kr(g,l+2,A).times(i+""))),u=ge(u,new g(p),l,1),e==null)if(Mn(u.d,l-y,h,a))g.precision=l+=y,c=s=f=ge(m.minus(1),m.plus(1),l,1),d=Y(f.times(f),l,1),r=a=1;else return Y(u,g.precision=A,h,ne=!0);else return g.precision=A,u;u=c,r+=2}}function ys(o){return String(o.s*o.s/0)}function Vo(o,e){var t,n,r;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(r=e.length;e.charCodeAt(r-1)===48;--r);if(e=e.slice(n,r),e){if(r-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%J,t<0&&(n+=J),n<r){for(n&&o.d.push(+e.slice(0,n)),r-=J;n<r;)o.d.push(+e.slice(n,n+=J));e=e.slice(n),n=J-e.length}else n-=r;for(;n--;)e+="0";o.d.push(+e),ne&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function Vu(o,e){var t,n,r,i,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ms.test(e))return Vo(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(Ou.test(e))t=16,e=e.toLowerCase();else if(Lu.test(e))t=2;else if(Nu.test(e))t=8;else throw Error(Ut+e);for(i=e.search(/p/i),i>0?(u=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,r=ps(n,new n(t),i,i*2)),c=Br(e,t,yt),l=c.length-1,i=l;c[i]===0;--i)c.pop();return i<0?new n(o.s*0):(o.e=Rr(c,l),o.d=c,ne=!1,s&&(o=ge(o,r,a*4)),u&&(o=o.times(Math.abs(u)<54?Re(2,u):_n.pow(2,u))),ne=!0,o)}function Eu(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:An(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Lr(5,t)),e=An(o,2,e,e);for(var r,i=new o(5),s=new o(16),a=new o(20);t--;)r=e.times(e),e=e.times(i.plus(r.times(s.times(r).minus(a))));return e}function An(o,e,t,n,r){var i,s,a,u,c=1,l=o.precision,m=Math.ceil(l/J);for(ne=!1,u=t.times(t),a=new o(n);;){if(s=ge(a.times(u),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=ge(s.times(u),new o(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,c++}return ne=!0,s.d.length=m+1,s}function Lr(o,e){for(var t=o;--e;)t*=o;return t}function bs(o,e){var t,n=e.s<0,r=ft(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return Mt=n?4:1,e;if(t=e.divToInt(r),t.isZero())Mt=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return Mt=os(t)?n?2:3:n?4:1,e;Mt=os(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Eo(o,e,t,n){var r,i,s,a,u,c,l,m,d,p=o.constructor,y=t!==void 0;if(y?(Je(t,1,Gt),n===void 0?n=p.rounding:Je(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=ys(o);else{for(l=Bt(o),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Br(Bt(d),10,r),d.e=d.d.length),m=Br(l,10,r),i=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=m,o.e=i,o=ge(o,d,t,n,0,r),m=o.d,i=o.e,c=as),s=m[t],a=r/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,c)for(;++m[--t]>r-1;)m[t]=0,t||(++i,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=No.charAt(m[s]);if(y){if(u>1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)l+="0";for(m=Br(l,r,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=No.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>u)for(i-=u;i--;)l+="0";else i<u&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function is(o,e){if(o.length>e)return o.length=e,!0}function Fu(o){return new this(o).abs()}function Du(o){return new this(o).acos()}function Wu(o){return new this(o).acosh()}function qu(o,e){return new this(o).plus(e)}function Uu(o){return new this(o).asin()}function Gu(o){return new this(o).asinh()}function Xu(o){return new this(o).atan()}function zu(o){return new this(o).atanh()}function Qu(o,e){o=new this(o),e=new this(e);var t,n=this.precision,r=this.rounding,i=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=ft(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?ft(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=ft(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(ge(o,e,i,1)),e=ft(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(ge(o,e,i,1)),t}function Yu(o){return new this(o).cbrt()}function ju(o){return Y(o=new this(o),o.e+1,2)}function Hu(o,e,t){return new this(o).clamp(e,t)}function Zu(o){if(!o||typeof o!="object")throw Error(Cr+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,Gt,"rounding",0,8,"toExpNeg",-wn,0,"toExpPos",0,wn,"maxE",0,wn,"minE",-wn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=Mo[t]),(n=o[t])!==void 0)if(We(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Ut+t+": "+n);if(t="crypto",r&&(this[t]=Mo[t]),(n=o[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(cs);else this[t]=!1;else throw Error(Ut+t+": "+n);return this}function Ju(o){return new this(o).cos()}function $u(o){return new this(o).cosh()}function gs(o){var e,t,n;function r(i){var s,a,u,c=this;if(!(c instanceof r))return new r(i);if(c.constructor=r,ss(i)){c.s=i.s,ne?!i.d||i.e>r.maxE?(c.e=NaN,c.d=null):i.e<r.minE?(c.e=0,c.d=[0]):(c.e=i.e,c.d=i.d.slice()):(c.e=i.e,c.d=i.d?i.d.slice():i.d);return}if(u=typeof i,u==="number"){if(i===0){c.s=1/i<0?-1:1,c.e=0,c.d=[0];return}if(i<0?(i=-i,c.s=-1):c.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;ne?s>r.maxE?(c.e=NaN,c.d=null):s<r.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[i]):(c.e=s,c.d=[i]);return}else if(i*0!==0){i||(c.s=NaN),c.e=NaN,c.d=null;return}return Vo(c,i.toString())}else if(u!=="string")throw Error(Ut+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),c.s=-1):(a===43&&(i=i.slice(1)),c.s=1),ms.test(i)?Vo(c,i):Vu(c,i)}if(r.prototype=M,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=Zu,r.clone=gs,r.isDecimal=ss,r.abs=Fu,r.acos=Du,r.acosh=Wu,r.add=qu,r.asin=Uu,r.asinh=Gu,r.atan=Xu,r.atanh=zu,r.atan2=Qu,r.cbrt=Yu,r.ceil=ju,r.clamp=Hu,r.cos=Ju,r.cosh=$u,r.div=ec,r.exp=tc,r.floor=nc,r.hypot=rc,r.ln=oc,r.log=ic,r.log10=ac,r.log2=sc,r.max=uc,r.min=cc,r.mod=lc,r.mul=mc,r.pow=dc,r.random=pc,r.round=fc,r.sign=yc,r.sin=bc,r.sinh=gc,r.sqrt=wc,r.sub=Ac,r.sum=hc,r.tan=Pc,r.tanh=kc,r.trunc=Tc,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return r.config(o),r}function ec(o,e){return new this(o).div(e)}function tc(o){return new this(o).exp()}function nc(o){return Y(o=new this(o),o.e+1,3)}function rc(){var o,e,t=new this(0);for(ne=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return ne=!0,new this(1/0);t=e}return ne=!0,t.sqrt()}function ss(o){return o instanceof _n||o&&o.toStringTag===ls||!1}function oc(o){return new this(o).ln()}function ic(o,e){return new this(o).log(e)}function sc(o){return new this(o).log(2)}function ac(o){return new this(o).log(10)}function uc(){return fs(this,arguments,"lt")}function cc(){return fs(this,arguments,"gt")}function lc(o,e){return new this(o).mod(e)}function mc(o,e){return new this(o).mul(e)}function dc(o,e){return new this(o).pow(e)}function pc(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:Je(o,1,Gt),n=Math.ceil(o/J),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)r=e[i],r>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=r%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)r=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(r%1e7),i+=4);i=n/4}else throw Error(cs);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=J,n&&o&&(r=Re(10,J-o),a[i]=(n/r|0)*r);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=J)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<J&&(t-=J-n)}return s.e=t,s.d=a,s}function fc(o){return Y(o=new this(o),o.e+1,this.rounding)}function yc(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function bc(o){return new this(o).sin()}function gc(o){return new this(o).sinh()}function wc(o){return new this(o).sqrt()}function Ac(o,e){return new this(o).sub(e)}function hc(){var o=0,e=arguments,t=new this(e[o]);for(ne=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return ne=!0,Y(t,this.precision,this.rounding)}function Pc(o){return new this(o).tan()}function kc(o){return new this(o).tanh()}function Tc(o){return Y(o=new this(o),o.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var _n=M.constructor=gs(Mo);xr=new _n(xr);Sr=new _n(Sr);var _=_n;import{PublicKey as Uo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ic}from"@solana/spl-token";import{PublicKey as Ae,SystemProgram as ws,SYSVAR_RENT_PUBKEY as Bc}from"@solana/web3.js";function P({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var Fo=[P({pubkey:Ic,isWritable:!1}),P({pubkey:ws.programId,isWritable:!1}),P({pubkey:Bc,isWritable:!1})];function Do({publicKey:o,transformSol:e}){let t=Wo(o.toString());if(t instanceof Ae)return e&&t.equals(Le)?j:t;if(e&&t.toString()===Le.toBase58())return j;if(typeof t=="string"){if(t===Ae.default.toBase58())return Ae.default;try{return new Ae(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Wo(o){try{return new Ae(o)}catch{return o}}var Or=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Nr=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),bt=new Ae("SysvarRent111111111111111111111111111111111"),As=new Ae("SysvarC1ock11111111111111111111111111111111"),hn=new Ae("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),xc=new Ae("Sysvar1nstructions1111111111111111111111111"),qo=ws.programId,xd=new Ae("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Sd=new Ae("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Kd=new Ae("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Cd=new Ae("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Rd=new Ae("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Ld=new Ae("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Od=new Ae("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Nd=new Ae("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Md=new Ae("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),_d=new Ae("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),vd=new Ae("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new Ae("So11111111111111111111111111111111111111112"),Le=Ae.default;function nt(o){return Do({publicKey:o,transformSol:!0})}import{PublicKey as Sc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hs}from"@solana/spl-token";var Xt={chainId:101,address:Sc.default.toBase58(),programId:hs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ve={chainId:101,address:"So11111111111111111111111111111111111111112",programId:hs.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 Go=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===Le.toBase58()||e instanceof Uo&&Le.equals(e)){this.decimals=Ve.decimals,this.symbol=Ve.symbol,this.name=Ve.name,this.mint=new Uo(Ve.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=r||e.toString().substring(0,6),this.mint=i?Uo.default:Do({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},he=Go;he.WSOL=new Go(E(C({},Ve),{mint:Ve.address}));import _r from"big.js";import Rc from"bn.js";import Lc from"decimal.js-light";import Kc from"toformat";var Cc=Kc,vn=Cc;var Mr=se("module/fraction"),Xo=vn(_r),Vn=vn(Lc),Oc={[0]:Vn.ROUND_DOWN,[1]:Vn.ROUND_HALF_UP,[2]:Vn.ROUND_UP},Nc={[0]:_r.roundDown,[1]:_r.roundHalfUp,[2]:_r.roundUp},de=class{constructor(e,t=new Rc(1)){this.numerator=H(e),this.denominator=H(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new de(this.denominator,this.numerator)}add(e){let t=e instanceof de?e:new de(H(e));return this.denominator.eq(t.denominator)?new de(this.numerator.add(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof de?e:new de(H(e));return this.denominator.eq(t.denominator)?new de(this.numerator.sub(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof de?e:new de(H(e));return new de(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof de?e:new de(H(e));return new de(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Mr.logWithError(`${e} is not an integer.`),e<=0&&Mr.logWithError(`${e} is not positive.`),Vn.set({precision:e+1,rounding:Oc[n]});let r=new Vn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return r.toFormat(r.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Mr.logWithError(`${e} is not an integer.`),e<0&&Mr.logWithError(`${e} is negative.`),Xo.DP=e,Xo.RM=Nc[n]||1,new Xo(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var _c=se("Raydium_price"),$e=class extends de{constructor(t){let{baseToken:n,quoteToken:r,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=r,this.scalar=new de(zo(n.decimals),zo(r.decimals))}get raw(){return new de(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new $e({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&_c.logWithError("mul token not equals");let n=super.mul(t);return new $e({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,r){return this.adjusted.toSignificant(t,n,r)}toFixed(t=this.quoteToken.decimals,n,r){return this.adjusted.toFixed(t,n,r)}};var Qo=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},vr=Qo;vr.SOL=new Qo(Xt);import vc from"bn.js";var Ps=new de(new vc(100)),Ye=class extends de{toSignificant(e=5,t,n){return this.mul(Ps).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Ps).toFixed(e,t,n)}};var at=new et(0),Ts=new et(1),Op=new et(2),Np=new et(3),Mp=new et(5),Yo=new et(10),_p=new et(100),vp=new et(1e3),Vp=new et(1e4),ks=9007199254740991;function H(o){let e=se("Raydium_parseBigNumberish");if(o instanceof et)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new et(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=ks||o<=-ks)&&e.logWithError(`BigNumberish number overflow: ${o}`),new et(String(o))):typeof o=="bigint"?new et(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new et(0))}function zo(o){return Yo.pow(H(o))}function Vr(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var Ec=se("Raydium_amount"),Bs=vn(Vc);function Fc(o,e){let t="0",n="0";if(o.includes(".")){let r=o.split(".");r.length===2?([t,n]=r,n=n.padEnd(e,"0")):Ec.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var ye=class extends de{constructor(t,n,r=!0,i){let s=new Er(0),a=Yo.pow(new Er(t.decimals));if(r)s=H(n);else{let u=new Er(0),c=new Er(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Fc(n.toString(),t.decimals);u=H(l),c=H(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=se(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 ye(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ye(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.token.decimals,n,r=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return Bs.DP=this.token.decimals,new Bs(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function Is(o){return typeof o=="object"&&o!==null&&![he,ye,Dc,de,Wc,$e,Ye].some(e=>typeof e=="object"&&o instanceof e)}function Ee(o){return typeof o=="string"?Wo(o):Array.isArray(o)?o.map(e=>Ee(e)):Is(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ee(t)])):o}import{PublicKey as Dn,sendAndConfirmTransaction as $o,Transaction as Wn,TransactionMessage as qn,VersionedTransaction as Un}from"@solana/web3.js";import Hc 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 qc,ComputeBudgetProgram as xs,Transaction as Ks,TransactionMessage as Uc,Keypair as Cs,VersionedTransaction as Rs}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gc}from"@solana/spl-token";var Ss=se("Raydium_txUtil"),Ls=1644;function Fr(o){let e=[],t=[];return o.microLamports&&(e.push(xs.setComputeUnitPrice({microLamports:o.microLamports})),t.push(v.SetComputeUnitPrice)),o.units&&(e.push(xs.setComputeUnitLimit({units:o.units})),t.push(v.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Pn(o,e){var n,r;let t=e!=null?e:"confirmed";try{return((r=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:r.blockhash)||(await o.getRecentBlockhash(t)).blockhash}catch{return(await o.getRecentBlockhash(t)).blockhash}}function jo(o,e){o.length<1&&Ss.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Ss.logWithError(`no signers provided:, ${e.toString()}`);let t=new Ks;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Ls}catch{return!1}}function le(o,e){let[t,n]=qc.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}function En({instructions:o,payer:e,signers:t}){return jo(o,[e,...t])}function Fn({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Cs.generate().publicKey.toString()}){let i=new Uc({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Rs(i).serialize()).toString("base64").length<Ls}catch{return!1}}var Xc=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o);function en(o){let e=[];return o.forEach(t=>{t instanceof Ks&&(t.recentBlockhash||(t.recentBlockhash=Gc.toBase58()),t.feePayer||(t.feePayer=Cs.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof Rs&&(n=Xc(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}import{PublicKey as Ns,AddressLookupTableAccount as Dr}from"@solana/web3.js";import{PublicKey as Os}from"@solana/web3.js";import{MINT_SIZE as zc,TOKEN_PROGRAM_ID as Qc,getTransferFeeConfig as Yc,unpackMint as jc}from"@solana/spl-token";var Ho=se("Raydium_accountInfo_util");async function gt(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=Zo(e,i),a=new Array(s.length).fill([]);if(n){let u=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),c=Zo(u,10);a=(await(await Promise.all(c.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Ho.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"&&Ho.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Os(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(u=>o.getMultipleAccountsInfo(u,r)))}catch(u){u instanceof Error&&Ho.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Ne(o,e,t){let n=await gt(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>E(C({},r),{accountInfo:n[i]}))}async function kn({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await Ne(o,e.map(u=>({pubkey:nt(u)})),t),r={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<zc){console.log("invalid mint account",u.pubkey.toBase58());continue}let c=jc(u.pubkey,u.accountInfo,(i=u.accountInfo)==null?void 0:i.owner);r[u.pubkey.toString()]=E(C({},c),{programId:((s=u.accountInfo)==null?void 0:s.owner)||Qc,feeConfig:(a=Yc(c))!=null?a:void 0})}return r[Os.default.toBase58()]=r[j.toBase58()],r}async function Jo({connection:o,address:e}){let t=await gt(o,[...new Set(e.map(r=>r.toString()))].map(r=>new Ns(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new Dr({key:s,state:Dr.deserialize(i.data)});n[s.toString()]=a,Wr[s.toString()]=a}return n}var Wr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new Dr({key:new Ns("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:Dr.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 qr=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 Hc.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}=Fr(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:r=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...r),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Dn.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 Wn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.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 r=>{var c;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=r||{},u=i!=null?i:await Pn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),en([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await $o(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 c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.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:u,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Pn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let A=await $o(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(A)}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((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));en(g);let h=await this.signAllTransactions(g);if(m){let A=0,k=[],B=async()=>{if(!h[A])return;let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[A]}),d==null||d([...k]),A++,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 A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});A.push(B)}return{txIds:A,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:r}=d,i=Be(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:Wr),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of a)s[y]===void 0&&u.push(new Dn(y));let c=await Jo({connection:this.connection,address:u});for(let[y,f]of Object.entries(c))s[y]=f;let l=new qn({payerKey:this.feePayer,recentBlockhash:r?Dn.default.toBase58():await Pn(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 Un(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),en([m]),(h=this.owner)!=null&&h.isKeyPair){let A=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:A},"confirmed")}return{txId:A,signedTx:m}}if(this.signAllTransactions){let A=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(A[0],{skipPreflight:b}),signedTx:A[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.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:u,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),en(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:A,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:A,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=[],A=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||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let A=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(A)}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 c=e||{},{computeBudgetConfig:t}=c,n=Be(c,["computeBudgetConfig"]),r=t?Fr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>E(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(m=>{let d=[...u,m],p=t?[...r.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 Dn(b));if(u.length<12&&En({instructions:p,payer:this.feePayer,signers:f})||En({instructions:d,payer:this.feePayer,signers:f}))u.push(m);else{if(u.length===0)throw Error("item ins too big");En({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:f})?s.push(new Wn().add(...r.instructions,...u)):s.push(new Wn().add(...u)),a.push(Array.from(new Set(u.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),u=[m]}}),u.length>0){let d=[...new Set(u.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);En({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Wn().add(...r.instructions,...u)):s.push(new Wn().add(...u)),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))||m.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 Pn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,A)=>{h.recentBlockhash=b,a[A].length&&h.sign(...a[A])}),en(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let A of s){let k=await $o(this.connection,A,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 A=0,k=[],B=async()=>{if(!h[A])return;let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[A]}),p==null||p([...k]),A++,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 A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});A.push(B)}return{txIds:A,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:r=[]}=b,i=Be(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:Wr),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let h of a)s[h]===void 0&&u.push(new Dn(h));let c=await Jo({connection:this.connection,address:u});for(let[h,A]of Object.entries(c))s[h]=A;let l=t?Fr(t):{instructions:[],instructionTypes:[]},m=await Pn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,A)=>E(C({},h),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let A=[...f,h],k=t?[...l.instructions,...A]:A;if(f.length<12&&Fn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Fn({instructions:A,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&&Fn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(T))}else{let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(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 A=[...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&&Fn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}else{let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(A=>A.publicKey.equals(this.owner.publicKey))||h.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:A,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)}),en(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let x=[];for(let R of p){let I=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:D}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:D,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(A){let R=0,I=[],L=async()=>{if(!x[R])return;let D=await this.connection.sendTransaction(x[R],{skipPreflight:T});I.push({txId:D,status:"sent",signedTx:x[R]}),k==null||k([...I]),R++,this.connection.onSignature(D,F=>{let Z=I.findIndex(G=>G.txId===D);Z>-1&&(I[Z].status=F.err?"error":"success"),k==null||k([...I]),F.err||L()},"processed"),this.connection.getSignatureStatus(D)};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 wt=class{constructor(e){this._owner=e}get publicKey(){return wt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return wt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return wt.isKeyPair(this._owner)}get isPublicKey(){return wt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!wt.isKeyPair(e)}};function Zo(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}import{PublicKey as ue}from"@solana/web3.js";var Ms=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),_s=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Xn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Yf=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),jf=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),ei=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),vs=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Hf=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Vs=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Es=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Zf=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Jf=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Zc=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Jc=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),$c=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),el=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Fs=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),$f=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),ey=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),tl=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),nl=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),rl=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),zn={IDO_PROGRAM_ID_V1:Zc,IDO_PROGRAM_ID_V2:Jc,IDO_PROGRAM_ID_V3:$c,IDO_PROGRAM_ID_V4:el};var ty={SERUM_MARKET:ue.default,OPENBOOK_MARKET:new ue("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ue.default,FarmV3:new ue("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ue("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ue("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ue("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ue("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ue("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:tl,CREATE_CPMM_POOL_AUTH:nl,CREATE_CPMM_POOL_FEE_ACC:rl,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as ol}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as il}from"@solana/spl-token";function Pe(o,e,t){return le([o.toBuffer(),(t!=null?t:il).toBuffer(),e.toBuffer()],new ol("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import At from"bn.js";var Qn=1e4;function we(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=E(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<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new At(i.maximumFee.toString()),a=t.epoch<r.newerTransferFee.epoch?(Number(r.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Qn){let u=new At(i.maximumFee.toString());return{amount:o.add(u),fee:u,expirationTime:a}}else{let u=Yn(o.mul(new At(Qn)),new At(Qn-i.transferFeeBasisPoints)),c=new At(i.maximumFee.toString()),l=u.sub(o).gt(c)?o.add(c):u,m=Yn(l.mul(new At(i.transferFeeBasisPoints)),new At(Qn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=Yn(o.mul(new At(i.transferFeeBasisPoints)),new At(Qn)),c=u.gt(s)?s:u;return{amount:o,fee:c,expirationTime:a}}}function xt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function Yn(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new At(0))?t.add(new At(1)):t}var Ce={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://tokens.jup.ag/tokens?tags=lst,community",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"},Sy=C({},Ce);var Ds="ray_tab_hash",ti="ray_req_hash",sl=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Ds);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Ds,o)),o},Ur=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=Be(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(ti)||"[]").slice(0,o-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(E(C({},t),{time:Date.now(),session:sl()}));try{localStorage.setItem(ti,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 u=JSON.stringify(t.data).substring(0,100);i[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(ti,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(u=>u())}return Ur(E(C({},t),{logCount:o,removeLastLog:!0}))}};var Gr=se("Raydium_Api"),ni=new Map;var Xr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=Ws.create({baseURL:this.urlConfigs.BASE_HOST||Ce.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return Gr.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(Gr.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:u,status:c}=s,{method:l,baseURL:m,url:d}=a;return n&&Ur({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),Gr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:d}=a;return n&&Ur({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Gr.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ce.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ce.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Ws.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(r=>r.numSlots);return n.reduce((r,i)=>r+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ce.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ce.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ce.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Ce.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ce.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:r="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ce.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${r}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ce.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>ni.has(s)?(n.push(ni.get(s)),!1):!0),i=[];return r.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ce.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),i.forEach(a=>{ni.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:r="all",sort:i="default",order:s="desc",page:a=1}=e,[u,c]=[t&&nt(t).toBase58(),n&&n!=="undefined"?nt(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ce.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&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||Ce.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ce.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ce.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ce.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ce.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ce.JITO})).data}};var zr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",qs="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as pi,TOKEN_PROGRAM_ID as Yt,AccountLayout as Bn,TOKEN_2022_PROGRAM_ID as _l}from"@solana/spl-token";import{PublicKey as eo,SystemProgram as vl}from"@solana/web3.js";var ri=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),ke=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=se(t)}createTxBuilder(e){return this.scope.checkOwner(),new qr({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(ri(e))}logInfo(...e){this.logger.info(ri(e))}logAndCreateError(...e){let t=ri(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Cl,createCloseAccountInstruction as Rl,createTransferInstruction as Ll,TOKEN_PROGRAM_ID as In}from"@solana/spl-token";import{PublicKey as Ol,SystemProgram as Nl}from"@solana/web3.js";import Ml from"bn.js";import{PublicKey as na,Keypair as Bl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as xl}from"@solana/spl-token";import Sl from"bn.js";import{PublicKey as wl}from"@solana/web3.js";import Qs,{isBN as Ys}from"bn.js";import{bits as al,BitStructure as ub,blob as ul,Blob as cb,cstr as lb,f32 as mb,f32be as db,f64 as pb,f64be as fb,greedy as yb,Layout as cl,ns64 as bb,ns64be as gb,nu64 as ll,nu64be as wb,offset as Ab,s16 as hb,s16be as Pb,s24 as kb,s24be as Tb,s32 as ml,s32be as Ib,s40 as Bb,s40be as xb,s48 as Sb,s48be as Kb,s8 as Cb,seq as dl,struct as Rb,Structure as pl,u16 as fl,u16be as Lb,u24 as Ob,u24be as Nb,u32 as yl,u32be as Mb,u40 as _b,u40be as vb,u48 as Vb,u48be as Eb,u8 as bl,UInt as gl,union as Fb,Union as Db,unionLayoutDiscriminator as Wb,utf8 as qb}from"@solana/buffer-layout";var Qr=cl,Us=pl;var oi=gl;var Gs=bl,St=fl;var ii=yl;var Xs=ll;var Fe=ml;var zs=dl;var pe=ul;var si=al;var tn=class extends Qr{constructor(t,n,r){super(t,r);this.blob=pe(t),this.signed=n}decode(t,n=0){let r=new Qs(this.blob.decode(t,n),10,"le");return this.signed?r.fromTwos(this.span*8).clone():r}encode(t,n,r=0){return typeof t=="number"&&(t=new Qs(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},Yr=class extends Qr{constructor(t){super(8,t);this._lower=si(ii(),!1),this._upper=si(ii(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function W(o){return new oi(1,o)}function je(o){return new oi(4,o)}function w(o){return new tn(8,!1,o)}function z(o){return new tn(16,!1,o)}function js(o){return new tn(1,!0,o)}function Hr(o){return new tn(8,!0,o)}function Hs(o){return new tn(16,!0,o)}var jr=class extends Qr{constructor(t,n,r,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=r}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,r){return this.layout.encode(this.encoder(t),n,r)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new jr(pe(32),e=>new wl(e),e=>e.toBuffer(),o)}function qe(o){return new jr(Gs(),Al,hl,o)}function Al(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function hl(o){return o?1:0}var ai=class extends Us{decode(e,t){return super.decode(e,t)}};function V(o,e,t){return new ai(o,e,t)}function X(o,e,t){let n,r=typeof e=="number"?e:Ys(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Ys(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 zs(o,r,t)}var Tn=V([K("mint"),K("owner"),w("amount"),je("delegateOption"),K("delegate"),W("state"),je("isNativeOption"),w("isNative"),w("delegatedAmount"),je("closeAuthorityOption"),K("closeAuthority")]);function Pl(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function ui(o,...e){if(!Pl(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function ci(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function Zs(o,e){ui(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Jr=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),ht=(o,e)=>o<<32-e|o>>>e;var rg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function kl(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function li(o){return typeof o=="string"&&(o=kl(o)),ui(o),o}var Zr=class{clone(){return this._cloneInto()}},og={}.toString;function Js(o){let e=n=>o().update(li(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Tl(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let r=BigInt(32),i=BigInt(4294967295),s=Number(t>>r&i),a=Number(t&i),u=n?4:0,c=n?0:4;o.setUint32(e+u,s,n),o.setUint32(e+c,a,n)}var $s=(o,e,t)=>o&e^~o&t,ea=(o,e,t)=>o&e^o&t^e&t,$r=class extends Zr{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Jr(this.buffer)}update(e){ci(this);let{view:t,buffer:n,blockLen:r}=this;e=li(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let u=Jr(e);for(;r<=i-s;s+=r)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ci(this),Zs(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;Tl(n,r-8,BigInt(this.length*8),i),this.process(n,0);let a=Jr(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,l=this.get();if(c>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<c;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:r,finished:i,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=i,e.destroyed=s,r%t&&e.buffer.set(n),e}};var Il=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]),zt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Qt=new Uint32Array(64),mi=class extends $r{constructor(){super(64,32,8,!1),this.A=zt[0]|0,this.B=zt[1]|0,this.C=zt[2]|0,this.D=zt[3]|0,this.E=zt[4]|0,this.F=zt[5]|0,this.G=zt[6]|0,this.H=zt[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:s,G:a,H:u}=this;return[e,t,n,r,i,s,a,u]}set(e,t,n,r,i,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=u|0}process(e,t){for(let m=0;m<16;m++,t+=4)Qt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=Qt[m-15],p=Qt[m-2],y=ht(d,7)^ht(d,18)^d>>>3,f=ht(p,17)^ht(p,19)^p>>>10;Qt[m]=f+Qt[m-7]+y+Qt[m-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=ht(a,6)^ht(a,11)^ht(a,25),p=l+d+$s(a,u,c)+Il[m]+Qt[m]|0,f=(ht(n,2)^ht(n,13)^ht(n,22))+ea(n,r,i)|0;l=c,c=u,u=a,a=s+p|0,s=i,i=r,r=n,n=p+f|0}n=n+this.A|0,r=r+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,r,i,s,a,u,c,l)}roundClean(){Qt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ta=Js(()=>new mi);var Pg=se("Raydium_Util");function ra({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=Tn.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:i,mint:u,amount:c,isAssociated:Pe(o,u,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),r.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:na.default,amount:new Sl(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Ue({fromPublicKey:o,programId:e=xl}){let t=Bl.generate().publicKey.toBase58().slice(0,32);return{publicKey:Kl(o,t,e),seed:t}}function Kl(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=ta(n);return new na(r)}function di(o){let{mint:e,tokenAccount:t,owner:n,programId:r=In}=o;return Cl(t,e,n,r)}function Kt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=In}=o;return Rl(e,t,r,n,i)}async function _t(o){let{connection:e,amount:t,commitment:n,payer:r,owner:i,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(Tn.span,n),u=H(t).add(new Ml(a)),c=Ue({fromPublicKey:r,programId:In});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[Nl.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:Tn.span,programId:In}),di({mint:new Ol(Ve.address),tokenAccount:c.publicKey,owner:i,programId:In})],instructionTypes:[v.CreateAccount,v.InitAccount],endInstructionTypes:s?[]:[v.CloseAccount],endInstructions:s?[]:[Kt({tokenAccount:c.publicKey,payer:r,owner:i})]}}function jn({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=In}){return Ll(o,e,t,BigInt(String(n)),r,i)}var Hn=class extends ke{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=r||[],this._clientOwnedToken=!!(n||r)}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 Pe(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 r=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Yt},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:_l},r.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=ra({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,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:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=Yt,associatedOnly:r=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:u}=a;if(u&&(!r||r&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new eo(t.tokenProgram||Yt),m=this.getAssociatedTokenAccount(n,new eo(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,A)=>h.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=pi(s,m,s,n,l);if(c){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(v.CreateATA);else if(!(A.owner.equals(l)&&Bn.decode(A.data).mint.equals(n)&&Bn.decode(A.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(j)&&r.amount){let A=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.amount)!=null?f:0,skipCloseAccount:u});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),r.amount&&(p.instructions.push(jn({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:Yt})),p.instructionTypes.push(v.TransferAmount))}return u||(p.endInstructions.push(Kt({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:m,instructionParams:p}}else{let h=Ue({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(Bn.span),k=vl.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:A+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:Bn.span,programId:l});return p.instructions.push(k,di({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(v.CreateAccount),p.instructionTypes.push(v.InitAccount),u||(p.endInstructions.push(Kt({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=Yt,autoUnwrapWSOLToSOL:r}){var u;await this.fetchWalletTokenAccounts();let i=(u=this.scope.account.tokenAccounts.find(({mint:c})=>(c==null?void 0:c.toBase58())===t.toBase58()))==null?void 0:u.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let c=this.getAssociatedTokenAccount(t,n),l=await pi(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[v.CreateATA],i=c}return r&&j.toBase58()===t.toBase58()&&(a.endInstructions=[Kt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[v.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=Yt,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new eo(j).equals(i)){let p=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:r,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=pi(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(Yt)&&Bn.decode(f.data).mint.equals(i)&&Bn.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:r=Yt,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new eo(j))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Be(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Be(m,["tokenAccount"]);u=d,c.addInstruction(p)}return C({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as $l}from"@solana/spl-token";import{PublicKey as fe,SystemProgram as em}from"@solana/web3.js";import{PublicKey as sa}from"@solana/web3.js";var fi=V([W("instruction")]),yi=V([W("instruction")]),Vl=V([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),z("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),El=V([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),z("perShareReward"),w("lastSlot"),w("perSlotReward")]),Fl=V([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),z("perShareRewardA"),w("perSlotRewardA"),W("option"),K("rewardVaultB"),pe(7),w("totalRewardB"),z("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),Dl=V([w(),w("state"),w("nonce"),w("validRewardTokenNum"),z("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(Vl,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Wl=new Proxy(El,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),ql=new Proxy(Fl,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(o,e,t)}}),to=new Proxy(Dl,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return E(C({},i),{rewardType:((s=Object.entries(jt).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),Ul=V([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),bi=V([W("instruction"),w("nonce"),X(Ul,5,"rewardTimeInfo")]),gi=V([W("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),wi=V([W("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),$g=V([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),Ai=V([w("state"),K("id"),K("owner"),w("deposited"),X(z(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),ew=V([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),oa=V([w("state"),K("id"),K("owner"),w("deposited"),X(z(),2,"rewardDebts"),X(w(),17)]),ia=V([w(),w("state"),K("id"),K("owner"),w("deposited"),X(z(),5,"rewardDebts"),X(w(),16)]),rt=V([W("instruction"),w("amount")]),Gl=V([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),js("digitShift"),X(W(),7,"reserved1"),X(w(),7,"reserved2")]),Xl=V([pe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(W(),32,"reserved1"),X(Gl,4,"votingMints"),Hr("timeOffset"),W("bump"),X(W(),7,"reserved2"),X(w(),11,"reserved3")]),zl=V([Hr("startTime"),Hr("endTime"),W("kind"),X(W(),15,"reserved")]),Ql=V([X(zl,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),W("votingMintConfigIdx"),X(W(),29,"reserved")]),Yl=V([pe(8),K("voterAuthority"),K("registrar"),X(Ql,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),X(W(),94,"reserved")]);var uw=se("Raydium_farm_config"),aa=new sa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ua=new sa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var ca={3:Ai,5:oa,6:ia},hi=o=>[3,5,6].indexOf(o)!==-1,Pi=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,r=`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: ${r}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${r}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${r}`}};return(s=i[e])==null?void 0:s.call(i)},jt={"Standard SPL":0,"Option tokens":1},ut={[Ms.toString()]:3,[_s.toString()]:5,[Xn.toString()]:6};import{PublicKey as me,SystemProgram as da,SYSVAR_RENT_PUBKEY as Zl,SYSVAR_CLOCK_PUBKEY as no,TransactionInstruction as Pt}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Fw,TOKEN_PROGRAM_ID as Ht,ASSOCIATED_TOKEN_PROGRAM_ID as Dw}from"@solana/spl-token";import pa from"bn.js";import jl from"bn.js";var Hl=se("Raydium.farm.util");function Zn({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return r}function ct({programId:o,poolId:e,owner:t,version:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var la=({programId:o,poolId:e})=>le([e.toBuffer()],o);function ma(o){return{isSet:new jl(1),rewardPerSecond:H(o.perSecond),rewardOpenTime:H(o.openTime),rewardEndTime:H(o.endTime),rewardType:H(jt[o.rewardType])}}function ki(o){return H(o.endTime).sub(H(o.openTime)).mul(H(o.perSecond))}function Jn(o){let e=ca[o];return e||Hl.logWithError("invalid version",o),e}var Jl=se("Raydium_farm_instruction"),$w={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 $n(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||Jl.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(fi.span);fi.encode({instruction:s},a);let u=[P({pubkey:t}),P({pubkey:n}),P({pubkey:i,isWritable:!1}),P({pubkey:da.programId,isWritable:!1}),P({pubkey:Zl,isWritable:!1})];return{instruction:new Pt({programId:r,keys:u,data:a}),instructionType:v.FarmV3CreateLedger}}function fa(o){var n;let e=Buffer.alloc(bi.span);bi.encode({instruction:0,nonce:new pa(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...Fo,P({pubkey:o.farmId}),P({pubkey:o.farmAuthority,isWritable:!1}),P({pubkey:o.lpVault}),P({pubkey:o.lpMint,isWritable:!1}),P({pubkey:o.lockVault}),P({pubkey:o.lockMint,isWritable:!1}),P({pubkey:(n=o.lockUserAccount)!=null?n:Le}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(P({pubkey:r.rewardMint,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}));return{instruction:new Pt({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6Create}}function ya(o){let e=Buffer.alloc(yi.span);yi.encode({instruction:5},e);let t=[P({pubkey:Ht,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.lpVault,isWritable:!1}),P({pubkey:o.rewardVault}),P({pubkey:o.userRewardToken}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Pt({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6CreatorWithdraw}}function Ti({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(gi.span);gi.encode({instruction:3,rewardReopenTime:H(r.openTime),rewardEndTime:H(r.endTime),rewardPerSecond:H(r.perSecond)},i);let s=[P({pubkey:Ht,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Pt({programId:n.programId,keys:s,data:i})}function Ii({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(wi.span);wi.encode({instruction:4,isSet:new pa(1),rewardPerSecond:H(r.perSecond),rewardOpenTime:H(r.openTime),rewardEndTime:H(r.endTime),rewardType:H(jt[r.rewardType])},i);let s=[...Fo,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:r.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Pt({programId:t.programId,keys:s,data:i})}function er(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:2,amount:H(s)},l);let m=[P({pubkey:Ht,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Pt({programId:a,keys:m,data:l})}function tr(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:12,amount:H(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:no,isWritable:!1}),P({pubkey:Ht,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function nr(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:H(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:no,isWritable:!1}),P({pubkey:Ht,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function ba(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:10,amount:H(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:no,isWritable:!1}),P({pubkey:Ht,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function ga(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:H(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:no,isWritable:!1}),P({pubkey:Ht,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function wa(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:1,amount:H(s)},l);let m=[P({pubkey:Ht,isWritable:!1}),P({pubkey:da.programId,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Pt({programId:a,keys:m,data:l})}var rr=class extends ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Le)){let n=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ki(E(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:r=Xn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new fe(e.lpMint.address),lockInfo:{lockMint:aa,lockVault:ua},version:6,rewardInfos:t,programId:r},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ue({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(to.span);u.addInstruction({instructions:[em.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:to.span,programId:a.programId})]});let{publicKey:d,nonce:p}=la({programId:new fe(a.programId),poolId:l.publicKey}),y=Zn({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(jt[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(ma(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:c});S&&u.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Le)?new fe(Ve.address):B.mint;b.push({rewardMint:x,rewardVault:Zn({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new fe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&u.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=fa({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 u.addInstruction({instructions:[A],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:r}){var b;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((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 u=t||this.scope.ownerPubKey,c=n.mint.equals(Le)?new fe(Ve.address):n.mint,l=a.rewardInfos.findIndex(g=>new fe(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let d=(b=m.vault)!=null?b:Le,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Ti({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[v.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((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 u=t||this.scope.ownerPubKey,c=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Le)?new fe(Ve.address):m.mint,p=a.rewardInfos.findIndex(A=>new fe(A.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Le,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:u});g&&c.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=Ti({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[h],instructionTypes:[v.FarmV6Restart]})}return c.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder(),l=r.mint.equals(Le)?new fe(Ve.address):r.mint,m=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,c.addInstruction({instructions:[Ii({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[v.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of r){let m=l.mint.equals(Le)?new fe(Ve.address):l.mint,d=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Ii({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:E(C({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[v.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:r,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ut[d];hi(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new fe(n.programId),new fe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=ct({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let A={};for(let F of this.scope.account.tokenAccounts)if(a){let Z=Pe(this.scope.ownerPubKey,F.mint,F.programId).publicKey;F.publicKey&&Z.equals(F.publicKey)&&(A[F.mint.toString()]=F.publicKey)}else A[F.mint.toString()]=F.publicKey;let k=b.lpMint,B=A[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let F of m){let Z=s&&F.mint.address===j.toString(),G=A[F.mint.address];if(!G){let{account:q,instructionParams:Qe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:F.mint.programId,mint:new fe(F.mint.address),notUseTokenAccount:Z,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!Z,associatedOnly:Z?!1:a,checkCreateATAOwner:u});G=q,Qe&&h.addInstruction(Qe)}A[F.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Jn(p).decode(x.data)),n.programId!==Xn.toString()&&!S){let{instruction:F,instructionType:Z}=$n({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[F],instructionTypes:[Z]})}let R=Pi({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:H(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:c==null?void 0:c.map(F=>new fe(F))},L=p===6?wa(I):p===5?ga(I):ba(I),D={3:v.FarmV3Deposit,5:v.FarmV5Deposit,6:v.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[D[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:r,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!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=ut[n.programId];hi(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(u){let I=Pe(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=ct({programId:new fe(n.programId),poolId:new fe(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);if(I)Jn(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:D}=$n({id:new fe(y.id),programId:new fe(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[D]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I})}let g=y.lpMint.address,h=s&&g===j.toString(),A=b[g.toString()];if(!A){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new fe(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:u,checkCreateATAOwner:c});A=R,I&&f.addInstruction(I)}b[g.toString()]=A;let k=[];for(let R of d){let I=s&&R.mint.address===j.toString(),L=b[R.mint.address];if(!L){let{account:D,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new fe(R.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:u,checkCreateATAOwner:c});L=D,F&&f.addInstruction(F)}b[R.mint.address]=L,k.push(L)}let B=Pi({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:H(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new fe(R))},S=p===6?er(T):p===5?tr(T):nr(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 r=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Le.toString()?new fe(Ve.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Le,c=this.createTxBuilder(),l;if(t.equals(Le)){let y=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ki(E(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new _(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,c.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),c.addInstruction({instructions:[$l(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[v.CreateATA]})):l=y}let{instruction:m,instructionType:d}=ya({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=Pe(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)=>E(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,A=ut[f],k=b.address,B=n&&k===j.toString(),T=m[k];if(!T){let{account:D,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new fe(k),notUseTokenAccount:B,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=D,F&&l.addInstruction(F)}m[k.toString()]=T;let S=[];for(let D of g){let F=n&&D.mint.address===j.toString(),Z=m[D.mint.address];if(!Z){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new fe(D.mint.address),notUseTokenAccount:F,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!F,associatedOnly:F?!1:i,checkCreateATAOwner:s});Z=G,q&&l.addInstruction(q)}m[D.mint.address]=Z,S.push(Z)}let x=p[h],R={amount:at,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(D=>new fe(D))},I=A===6?er(R):A===5?tr(R):nr(R),L={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[L[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as Xe}from"@solana/web3.js";import{AccountLayout as vm,NATIVE_MINT as Ja,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";var kA=V([je("mintAuthorityOption"),K("mintAuthority"),w("supply"),W("decimals"),W("isInitialized"),je("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as xA}from"@solana/web3.js";import{MintLayout as KA,TOKEN_PROGRAM_ID as RA}from"@solana/spl-token";var ro=o=>new he({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),or=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=Be(i,["amount","isRaw","name"]);return new ye(new he({mint:nt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};var He=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=Be(i,["address","programId","decimals"]);return C({chainId:101,address:nt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Zt=o=>o?E(C({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:E(C({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(C({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as sr,ASSOCIATED_TOKEN_PROGRAM_ID as fm}from"@solana/spl-token";import{PublicKey as Ct,TransactionInstruction as Sn,SystemProgram as ym,SYSVAR_RENT_PUBKEY as th}from"@solana/web3.js";var Bi=V([W("instruction"),w("amountIn"),w("minAmountOut")]),xi=V([W("instruction"),w("maxAmountIn"),w("amountOut")]),zA=V([W("instruction"),W("nonce")]),tm=V([W("instruction"),W("nonce"),w("startTime")]),oo=V([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"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),w("swapBase2QuoteFee"),z("swapQuoteInAmount"),z("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")]),QA=V([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"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),z("swapQuoteInAmount"),z("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")]),Si=V([W("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Ki=V([W("instruction"),w("amountIn")]);var Aa=V([w("fee")]);import{PublicKey as nm}from"@solana/web3.js";var xn=new nm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),rn=5e4,rm=V([w("x"),w("y"),w("price")]),om=V([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(rm,rn,"DataElement")]);function im(o,e){return[0,rn-2]}function sm(o){return[0,rn-2]}function am(o){return[0,rn-2]}function um(o,e,t){let[n,r]=im(e,t),i=n,s=r,a=0,u=e*o.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=rn-2)return[a,a,!1];let c=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(u===c)return[a,a,!0];if(u===l)return[a-1,a-1,!0];if(u===m)return[a+1,a+1,!0];if(u<l)s=a-1;else{if(u>l&&u<c)return[a-1,a,!0];if(u>c&&u<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Ci(o,e,t){let[n,r,i]=um(o,e,t);if(!i)return 0;if(n===r){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,u=o.DataElement[r].x,c=o.DataElement[r].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*o.multiplier*l/p}}function nn(o,e,t){return e*o.multiplier/t}function ha(o,e,t){return e*t/o.multiplier}function cm(o,e){let[t,n]=sm(e),r=t,i=n,s=0,a=e;for(;r<i;){if(s=Math.floor((i+r)/2),s<=0||s>rn-2)return[s,s,!1];let u=o.DataElement[s].x,c=o.DataElement[s-1].x,l=o.DataElement[s+1].x;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<c)i=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];r=s+1}}return[s,s,!1]}function lm(o,e){let[t,n]=am(e),r=t,i=n,s=0,a=e;for(;r<=i;){if(s=Math.floor((i+r)/2),s<=0||s>=rn-2)return[s,s,!1];let u=o.DataElement[s].y,c=o.DataElement[s-1].y,l=o.DataElement[s+1].y;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)r=s+1;else{if(a<c&&a>u)return[s-1,s,!0];if(a<u&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function Pa(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=cm(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let u=o.DataElement[i].x,c=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=u&&e<=c)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=d-(r-u)*o.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-r)*o.multiplier/l),[y,f,!1,a]}}}function mm(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=lm(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let u=o.DataElement[i].x,c=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=u+m*(d-r)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function dm(o,e){let t=Pa(o,e,0,!1);return t[3]?t[0]:0}function ka(o,e,t,n){let r=Ci(o,e,t),i=nn(o,e,r),s=nn(o,t,r),a=nn(o,n,r),u=!0,[c,l,m,d]=Pa(o,i,a,u);if(!d)return 0;if(m)return n*o.multiplier/c;{let p=s-l;return ha(o,p,r)}}function Ta(o,e,t,n){let r=Ci(o,e,t),i=nn(o,e,r),s=nn(o,t,r),a=nn(o,n,r),u=!1,[c,l,m,d]=mm(o,s,a,u);if(!d)return 0;if(m)return n*c/o.multiplier;{let p=i-l;return ha(o,p,r)}}function pm(o){let e=om.decode(o);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 Ia(o,e,t,n){let r=dm(o,nn(o,e,Ci(o,e,t)))/o.multiplier;return n?r:1/r}var ir=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(xn);e&&(this._layoutData=pm(e==null?void 0:e.data))}}};var Ba=se("Raydium_liquidity_instruction");function xa(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(Si.span);Si.encode({instruction:3,baseAmountIn:H(r),quoteAmountIn:H(i),fixedSide:s==="base"?at:Ts},a);let u=[P({pubkey:sr,isWritable:!1}),P({pubkey:new Ct(e.id)}),P({pubkey:new Ct(t.authority),isWritable:!1}),P({pubkey:new Ct(t.openOrders),isWritable:!1}),P({pubkey:new Ct(t.targetOrders)}),P({pubkey:new Ct(e.lpMint.address)}),P({pubkey:new Ct(t.vault.A)}),P({pubkey:new Ct(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(P({pubkey:xn})),u.push(P({pubkey:new Ct(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new Ct(t.marketEventQueue),isWritable:!1})),new Sn({programId:new Ct(e.programId),keys:u,data:a})}function Ri(o){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=o,i=Ee(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Ki.span);Ki.encode({instruction:4,amountIn:H(r)},a);let u=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.mintLp.address}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return s===5?u.push(P({pubkey:xn})):(u.push(P({pubkey:i.id})),u.push(P({pubkey:i.id}))),u.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks})),new Sn({programId:i.programId,keys:u,data:a})}return new Sn({programId:i.programId,keys:[]})}function Sa({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:i,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:A,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=V([W("instruction"),W("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:fm,isSigner:!1,isWritable:!1},{pubkey:ym.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,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:A,coinAmount:k,pcAmount:B},I),{instruction:new Sn({keys:R,programId:o,data:I}),instructionType:v.AmmV4CreatePool}}function bm({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=Ee(o),s=Buffer.alloc(Bi.span);Bi.encode({instruction:9,amountIn:H(t),minAmountOut:H(n)},s);let a=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders})];return r===4&&a.push(P({pubkey:i.targetOrders})),a.push(P({pubkey:i.vault.A}),P({pubkey:i.vault.B})),r===5&&a.push(P({pubkey:xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new Sn({programId:i.programId,keys:a,data:s})}function gm({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=Ee(o),s=Buffer.alloc(xi.span);xi.encode({instruction:11,maxAmountIn:H(t),amountOut:H(n)},s);let a=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return r===5&&a.push(P({pubkey:xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Sn({programId:i.programId,keys:a,data:s})}function io(o){let{poolKeys:e,version:t,userKeys:n,amountIn:r,amountOut:i,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return bm(E(C({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return gm(E(C({},a),{maxAmountIn:r,amountOut:i}),t);Ba.logWithError("invalid params","params",o)}throw Ba.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{TOKEN_PROGRAM_ID as De,TOKEN_2022_PROGRAM_ID as Jt,ASSOCIATED_TOKEN_PROGRAM_ID as Ga}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as Tt,SystemProgram as Kn,Keypair as Fi}from"@solana/web3.js";import Xa from"bn.js";import xm from"bn.js";function so(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Li(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function Oi(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function ar(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Ka(o,e){return ar(o,e)?null:Li(o,e)}function Ca(o,e){return ar(o,e)?null:Oi(o,e)}var yh=Buffer.from("amm_config","utf8"),wm=Buffer.from("pool","utf8"),Am=Buffer.from("pool_vault","utf8"),hm=Buffer.from("pool_reward_vault","utf8"),Ra=Buffer.from("position","utf8"),Pm=Buffer.from("tick_array","utf8"),km=Buffer.from("operation","utf8"),Tm=Buffer.from("pool_tick_array_bitmap_extension","utf8");function La(o,e,t,n){return le([wm,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Ni(o,e,t){return le([Am,e.toBuffer(),t.toBuffer()],o)}function Oa(o,e,t){return le([hm,e.toBuffer(),t.toBuffer()],o)}function be(o,e,t){return le([Pm,e.toBuffer(),so(t)],o)}function on(o,e,t,n){return le([Ra,e.toBuffer(),so(t),so(n)],o)}function lt(o,e){return le([Ra,e.toBuffer()],o)}function ao(o){return le([Buffer.from("metadata","utf8"),hn.toBuffer(),o.toBuffer()],hn)}function ur(o){return le([km],o)}function ot(o,e){return le([Tm,e.toBuffer()],o)}import mt from"bn.js";var xe=new mt(0),it=new mt(1),vt=new mt(-1),st=new mt(1).shln(64),uo=new mt(1).shln(128),Mi=st.sub(it),cr=64,Na=uo.subn(1),Ge=-443636,Ze=-Ge,Rt=new mt("4295048016"),Lt=new mt("79226673521066979257578248091"),co=new mt("4295048017"),lo=new mt("79226673521066979257578248090"),Ma=16,_a="59543866431248",va="184467440737095516",Va="15793534762490258745",mo=new mt(10).pow(new mt(6));var Ea={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:[]},wh=new mt("18446744073700000000");var Im=15,ae=class{static async getTickArrays(e,t,n,r,i,s,a){let u=[],c=Q.getTickArrayStartIndexByTick(r,i),l=Q.getInitializedTickArrayInRange(s,a,i,c,Math.floor(Im/2));for(let p=0;p<l.length;p++){let{publicKey:y}=be(t,n,l[p]);u.push(y)}let m=(await gt(e,u)).map(p=>p!==null?lr.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=E(C({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,r,i,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,r,i,s);for(;a==null||a.liquidityGross.lten(0);){if(c=Q.getNextTickArrayStartIndex(c,i,s),this.checkIsValidStartIndex(c,i))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,r,i){let s=Math.floor(e/ae.tickCount(t)),a=n?Q.searchLowBitFromStart(r,i,s-1,1,t):Q.searchHightBitFromStart(r,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,r){let i;if(r){let a=Oe-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a-1}}else{let a=0;for(;a<Oe;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a+1}}let{publicKey:s}=be(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,i,s){let a=Q.getTickArrayStartIndexByTick(r,i),u=Math.floor((r-a)/i),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u-1}else for(u=u+1;u<Oe;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=be(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:c.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Q.checkIsOutOfBoundary(e)){if(e>Ze)return!1;let n=Q.getTickArrayStartIndexByTick(Ge,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Oe*e}};import oe from"bn.js";import{PublicKey as kt}from"@solana/web3.js";import Se from"bn.js";var _i=14,Vt=class{static maxTickInTickarrayBitmap(e){return e*Oe*sn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(r+=1);let i=n*r;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,r){if(!ae.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=r?t-ae.tickCount(n):t+ae.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Oe,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(r){let l=e.shln(1024-c-1),m=Ka(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(c),m=Ca(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-ae.tickCount(n)}}}},mr=class{static getBitmapOffset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Vt.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&r--,r}static getBitmap(e,t,n){let r=this.getBitmapOffset(e,t);return e<0?{offset:r,tickarrayBitmap:n.negativeTickArrayBitmap[r]}:{offset:r,tickarrayBitmap:n.positiveTickArrayBitmap[r]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:r}=this.extensionTickBoundary(t);if(e>=r&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;if(Ze<=t)throw Error(`extensionTickBoundary check error: ${Ze}, ${t}`);if(n<=Ge)throw Error(`extensionTickBoundary check error: ${n}, ${Ge}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:r}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Q.mergeTickArrayBitmap(r).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let i=ae.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,r);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,r){let{minValue:i,maxValue:s}=Vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let u=Q.mergeTickArrayBitmap(e).shln(sn-1-a),c=ar(512,u)?null:Li(512,u);if(c!==null){let l=t-c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let u=Q.mergeTickArrayBitmap(e).shrn(a),c=ar(512,u)?null:Oi(512,u);if(c!==null){let l=t+c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-ae.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Vt.maxTickInTickarrayBitmap(t),r=Math.floor(n/ae.tickCount(t));return e<0&&n!=0&&(r=sn-r),r}};import Ot from"bn.js";var dr=class{static getfeeGrowthInside(e,t,n){let r=new Ot(0),i=new Ot(0);e.tickCurrent>=t.tick?(r=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Ot(0),a=new Ot(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let u=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),c=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,r){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,r){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Ot(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return i}static getRewardGrowthInsideV2(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Ot(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,add:i,epochInfo:s}){var b,g,h,A;let a=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),u=re.getSqrtPriceX64FromTick(t.tickLower),c=re.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+r:1-r,m=ce.getAmountsFromLiquidity(a,u,c,n,i),[d,p]=[we(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),we(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[we(new Ot(new _(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),we(new Ot(new _(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Fa}from"@solana/spl-token";var Ke=class{static getOutputAmountAndRemainAccounts(e,t,n,r,i,s=!1){let a=n.toBase58()===e.mintA.address,u=[],{isExist:c,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!c||l===void 0||!m)throw new Error("Invalid tick array");u.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=an.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,l,i,s);return u.push(...y),{allTrade:d,expectedAmountOut:p.mul(vt),remainingAccounts:u,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=be(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=an.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(vt),c,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Ke.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?mr.checkTickArrayIsInit(ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Q.checkTickArrayIsInitialized(Q.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=be(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=be(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/ae.tickCount(e.tickSpacing)),r=t?Q.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Q.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return r.length>0?{isExist:!0,nextStartIndex:r[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:i}=Vt.nextInitializedTickArrayStartIndex(Q.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=mr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Ge||t>Ze)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,rewardInfos:i}){var a,u,c;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(d===void 0)throw Error("get new reward mint info error");let p=E(C({},m),{perSecond:te.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new kt(d)});if(p.tokenMint.equals(kt.default))continue;if(n<=p.openTime.toNumber()||r.eq(xe)){s.push(p);continue}let y=new Se(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=te.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=te.mulDivFloor(f,p.emissionsPerSecondX64,st),A=p.rewardTotalEmissioned.add(h);s.push(E(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let i of t){let s=Q.getTickArrayStartIndexByTick(i,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;return t>Ze&&(t=ae.getArrayStartIndex(Ze,e)+ae.tickCount(e)),n<Ge&&(n=ae.getArrayStartIndex(Ge,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/ae.tickCount(t)*sn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await Ne(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=Wa.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},i=[];for(let u of t){let c=Q.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=Q.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=be(u.programId,u.id,m);i.push({pubkey:d}),r[d.toString()]=u.id}}let s=await Ne(e,i,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=r[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=lr.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=E(C({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:r=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let u=0;u<e.length;u++){let c=e[u];c!==null&&(s.find(l=>l.equals(c.state.programId))||s.push(c.state.programId))}if(n){let u=n.tokenAccounts.map(d=>d.accountInfo.mint),c=[];for(let d of u)for(let p of s)c.push(lt(p,d).publicKey);let l=await gt(t,c,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=po.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=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,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:A,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=>E(C({},x),{pendingReward:new Se(0)})),leverage:B,tokenFeeAmountA:new Se(0),tokenFeeAmountB:new Se(0)}];let T=await Q.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Q.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 gt(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=lr.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}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[A].toString()],T=k.ticks[Q.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[Q.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await dr.GetPositionFees(f,g,T,S),I=await dr.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Se(0))?x:new Se(0),g.tokenFeeAmountB=R.gte(new Se(0))?R:new Se(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new Se(0))?I[L]:new Se(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:i,slippage:s,priceLimit:a=new _(0),catchLiquidityInsufficient:u=!1}){var D;let c,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 _(0))?c=l?Rt.add(new Se(1)):Lt.sub(new Se(1)):c=re.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=we(i,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Ke.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((D=p.fee)!=null?D:xe),c,u),A=we(f,d,r,!1),k=re.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new _(1).div(k),T=f.mul(new Se(Math.floor((1-s)*1e10))).div(new Se(1e10)),S=we(T,d,r,!1),x=l?e.currentPrice:new _(1).div(e.currentPrice),R=new _(B).sub(x).abs(),I=x,L=new Ye(new _(R).mul(10**15).toFixed(0),new _(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:xt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let u=r.address===e.mintB.address,[c,l]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new he(E(C({},c),{mint:c.address,isToken2022:c.programId===Fa.toBase58()})),new he(E(C({},l),{mint:l.address,isToken2022:l.programId===Fa.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:A,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Ke.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new kt(c.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=E(C({},y),{amount:new ye(m,y.amount),fee:y.fee===void 0?void 0:new ye(m,y.fee)}),R=E(C({},f),{amount:new ye(d,f.amount),fee:f.fee===void 0?void 0:new ye(d,f.fee)}),I=E(C({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),L=new $e({baseToken:m,denominator:new Se(10).pow(new Se(20+m.decimals)),quoteToken:d,numerator:h.mul(new _(10**(20+d.decimals))).toFixed(0)}),D=new $e({baseToken:m,denominator:new Se(10).pow(new Se(20+m.decimals)),quoteToken:d,numerator:A.mul(new _(10**(20+d.decimals))).toFixed(0)}),F=new ye(m,B);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:I,expirationTime:g,currentPrice:L,executionPrice:D,priceImpact:k,fee:F,remainingAccounts:T,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let i=e[t],s=Q.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Q.getTickPrice({poolInfo:e,tick:r,baseIn:!0}).price.toNumber(),u=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-u,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:r,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[nt(e.mintA.address).toString()],d=r[nt(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=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),b=re.getSqrtPriceX64FromTick(s),g=re.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new _(h.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(A.toString()).div(new _(10).pow(y)).mul(d.value)),S=new _(k.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(B.toString()).div(new _(10).pow(y)).mul(d.value)),x=new _(1).div(T.add(S)),I=new _(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),L=3600*24*365,D=e.rewardDefaultInfos.map(F=>{var q,Qe;let Z=F.mint.decimals,G=r[F.mint.address];return u<((q=F.startTime)!=null?q:0)||u>((Qe=F.endTime)!=null?Qe:0)||!F.perSecond||!G||Z===void 0?0:new _(G.value).mul(new _(F.perSecond).mul(L)).div(new _(10).pow(Z)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:D,apr:I+D.reduce((F,Z)=>F+Z,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:r,amount:i,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,h;let l=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),m=re.getSqrtPriceX64FromTick(n),d=re.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=we(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new Se(new _(y.amount.sub((h=y.fee)!=null?h:xe).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Se(0);else if(l.lte(d)){let A=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new Se(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Ke.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:r,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:r,liquidity:i,slippage:s,add:a}){var b,g,h,A;let u=re.getSqrtPriceX64FromTick(n),c=re.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(re.priceToSqrtPriceX64(new _(t.price),t.mintA.decimals,t.mintB.decimals),u,c,i,a),[d,p]=[we(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),we(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[we(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),we(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(u=>!n[u.id]).map(u=>new kt(u.id));(await gt(e,r)).forEach((u,c)=>{!u||(n[r[c].toBase58()]=un.decode(u.data))});let s=t.map(u=>ot(new kt(u.programId),new kt(u.id)).publicKey),a=await Ke.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((u,c)=>E(C({},u),{[c.id]:E(C({},n[c.id]),{id:new kt(c.id),version:6,programId:new kt(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:E(C({},c.config),{id:new kt(c.config.id),fundOwner:""}),currentPrice:new _(c.price),exBitmapInfo:a[ot(new kt(c.programId),new kt(c.id)).publicKey.toBase58()],startTime:n[c.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]}};var vi={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Da(o){return E(C({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:vi,week:vi,month:vi,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:E(C({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var te=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),i=r.div(n);return r.mod(n).eq(xe)||(i=i.add(it)),i}static mulDivFloor(e,t,n){if(n.eq(xe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(xe))throw new Error("division by 0");return e.mul(t).add(n.sub(it)).div(n)}static x64ToDecimal(e,t){return new _(e.toString()).div(_.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new oe(e.mul(_.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(uo).sub(t).mod(uo)}};function Me(o,e){return Vi(o.mul(e),64,256)}function Bm(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Vi(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var re=class{static sqrtPriceX64ToPrice(e,t,n){return te.x64ToDecimal(e).pow(2).mul(_.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return te.decimalToX64(e.mul(_.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(xe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,r){if(!e.gt(xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(xe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,r){if(n.eq(xe))return e;let i=t.shln(cr);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?te.mulDivCeil(s,e,a):te.mulDivRoundingUp(s,it,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 te.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let i=n.shln(cr);if(r)return e.add(i.div(t));{let s=te.mulDivRoundingUp(i,it,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<Ge||e>Ze)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new oe("18445821805675395072"):new oe("18446744073709551616");return(t&2)!=0&&(n=Me(n,new oe("18444899583751176192"))),(t&4)!=0&&(n=Me(n,new oe("18443055278223355904"))),(t&8)!=0&&(n=Me(n,new oe("18439367220385607680"))),(t&16)!=0&&(n=Me(n,new oe("18431993317065453568"))),(t&32)!=0&&(n=Me(n,new oe("18417254355718170624"))),(t&64)!=0&&(n=Me(n,new oe("18387811781193609216"))),(t&128)!=0&&(n=Me(n,new oe("18329067761203558400"))),(t&256)!=0&&(n=Me(n,new oe("18212142134806163456"))),(t&512)!=0&&(n=Me(n,new oe("17980523815641700352"))),(t&1024)!=0&&(n=Me(n,new oe("17526086738831433728"))),(t&2048)!=0&&(n=Me(n,new oe("16651378430235570176"))),(t&4096)!=0&&(n=Me(n,new oe("15030750278694412288"))),(t&8192)!=0&&(n=Me(n,new oe("12247334978884435968"))),(t&16384)!=0&&(n=Me(n,new oe("8131365268886854656"))),(t&32768)!=0&&(n=Me(n,new oe("3584323654725218816"))),(t&65536)!=0&&(n=Me(n,new oe("696457651848324352"))),(t&131072)!=0&&(n=Me(n,new oe("26294789957507116"))),(t&262144)!=0&&(n=Me(n,new oe("37481735321082"))),e>0&&(n=Na.div(n)),n}static getTickFromPrice(e,t,n){return re.getTickFromSqrtPriceX64(re.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Lt)||e.lt(Rt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new oe(t-64),r=Bm(n,32,128),i=new oe("8000000000000000","hex"),s=0,a=new oe(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new oe(0))&&s<Ma;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let c=a.shrn(32),m=r.add(c).mul(new oe(_a)),d=Vi(m.sub(new oe(va)),64,128).toNumber(),p=Vi(m.add(new oe(Va)),64,128).toNumber();return d==p?d:re.getSqrtPriceX64FromTick(p).lte(e)?p:d}},cn=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=re.getTickFromSqrtPriceX64(re.priceToSqrtPriceX64(e,n,r))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,r){let i=cn.getTickWithPriceAndTickspacing(e,t,n,r),s=re.getSqrtPriceX64FromTick(i);return re.sqrtPriceX64ToPrice(s,n,r)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(xe))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(cr),s=t.sub(e);return r?te.mulDivRoundingUp(te.mulDivCeil(i,s,t),it,e):te.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(xe))throw new Error("sqrtPriceX64A must greater than 0");return r?te.mulDivCeil(n,t.sub(e),st):te.mulDivFloor(n,t.sub(e),st)}static getLiquidityFromTokenAmountA(e,t,n,r){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return r?te.mulDivRoundingUp(a,it,Mi):a.shrn(cr)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),te.mulDivFloor(n,Mi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,r,!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,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,r,i),amountB:new oe(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,r,i),a=ce.getTokenAmountBFromLiquidity(t,e,r,i);return{amountA:s,amountB:a}}else return{amountA:new oe(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,r,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,i,s,a){let{amountA:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,r,s),l=i?1+a:1-a,m=new oe(new _(u.toString()).mul(l).toFixed(0)),d=new oe(new _(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee:u}){var h,A,k,B;let c=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),l=re.getSqrtPriceX64FromTick(t),m=re.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(c,l,m,r,s),[y,f]=[we(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),we(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[we(new oe(new _(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,u),we(new oe(new _(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,u)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:xt(y.expirationTime,f.expirationTime)}}},an=class{static swapCompute(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f=!1){if(d.eq(xe))throw new Error("amountSpecified must not be 0");if(y||(y=s?Rt.add(it):Lt.sub(it)),s){if(y.lt(Rt))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(Lt))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(xe),g={amountSpecifiedRemaining:d,amountCalculated:xe,sqrtPriceX64:m,tick:c>p?Math.min(p+ae.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new oe(0)},h=p,A=n[p],k=0,B=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(xe)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=Q.nextInitTick(A,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Ke.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,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:D}=be(e,t,h);R=D,A=n[h];try{x=Q.firstInitializedTick(A,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<Ge?T.tickNext=Ge:T.tickNext>Ze&&(T.tickNext=Ze),T.sqrtPriceNextX64=re.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]=an.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(vt)),g.liquidity=ce.addDelta(g.liquidity,L)}B=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=re.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&A.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=ae.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==T&&(g.accounts.push(be(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:xe,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,r,i){let s={sqrtPriceX64Next:new oe(0),amountIn:new oe(0),amountOut:new oe(0),feeAmount:new oe(0)},a=e.gte(t),u=r.gte(xe);if(u){let l=te.mulDivFloor(r,mo.sub(new oe(i.toString())),mo);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=re.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(vt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=re.getNextSqrtPriceX64FromOutput(e,n,r.mul(vt),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(r.mul(vt))&&(s.amountOut=r.mul(vt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=te.mulDivCeil(s.amountIn,new oe(i),mo.sub(new oe(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Oe=60,sn=512,Q=class{static getTickArrayAddressByTick(e,t,n,r){let i=Q.getTickArrayStartIndexByTick(n,r),{publicKey:s}=be(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Q.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=Oe)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=ae.tickCount(t),r=e/n;return e<0&&e%n!=0?r=Math.ceil(r)-1:r=Math.floor(r),r}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*ae.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Oe,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*Oe,i=Math.floor(t/r)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*r}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Oe:e+t*Oe}static mergeTickArrayBitmap(e){let t=new xm(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,r,i){let s=Math.floor(r/(n*Oe));return[...Q.searchLowBitFromStart(e,t,s-1,i,n),...Q.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Q.searchHightBitFromStart(e,t,0,sn,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=Q.getAllInitializedTickArrayStartIndex(n,r,i);for(let u of a){let{publicKey:c}=be(e,t,u);s.push({tickArrayStartIndex:u,tickArrayAddress:c})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Q.mergeTickArrayBitmap(c)),a=[];for(;n>=-7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n--,a.length===r)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Q.mergeTickArrayBitmap(c)),a=[];for(;n<7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n++,a.length===r)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Ge||e>Ze}static nextInitTick(e,t,n,r,i){if(ae.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(r)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<Oe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Oe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Oe;){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 r=re.getSqrtPriceX64FromTick(t),i=re.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new _(1).div(t),i=cn.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=re.getSqrtPriceX64FromTick(i),a=re.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=re.getSqrtPriceX64FromTick(t),i=re.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new _(1).div(t),i=cn.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=re.getSqrtPriceX64FromTick(i),a=re.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}};var qa=V([pe(8),W("bump"),St("index"),K(""),je("protocolFeeRate"),je("tradeFeeRate"),St("tickSpacing"),X(w(),8,"")]),Sm=V([je("blockTimestamp"),z("sqrtPriceX64"),z("cumulativeTimePriceX64"),X(z(),1,"")]),Ei=V([pe(8),qe("initialized"),K("poolId"),X(Sm,1e3,"observations"),X(z(),5,"")]),Km=V([W("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),z("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),z("rewardGrowthGlobalX64")]),un=V([pe(8),W("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),St("tickSpacing"),z("liquidity"),z("sqrtPriceX64"),Fe("tickCurrent"),St("observationIndex"),St("observationUpdateDuration"),z("feeGrowthGlobalX64A"),z("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),z("swapInAmountTokenA"),z("swapOutAmountTokenB"),z("swapInAmountTokenB"),z("swapOutAmountTokenA"),W("status"),X(W(),7,""),X(Km,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")]),Cm=V([z("growthInsideLastX64"),w("rewardAmountOwed")]),po=V([pe(8),W("bump"),K("nftMint"),K("poolId"),Fe("tickLower"),Fe("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Cm,3,"rewardInfos"),X(w(),8,"")]),xP=V([pe(8),W("bump"),K("poolId"),Fe("tickLowerIndex"),Fe("tickUpperIndex"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(z(),3,"rewardGrowthInside"),X(w(),8,"")]),Rm=V([Fe("tick"),Hs("liquidityNet"),z("liquidityGross"),z("feeGrowthOutsideX64A"),z("feeGrowthOutsideX64B"),X(z(),3,"rewardGrowthsOutsideX64"),X(je(),13,"")]),lr=V([pe(8),K("poolId"),Fe("startTickIndex"),X(Rm,Oe,"ticks"),W("initializedTickCount"),X(W(),115,"")]),Ua=V([pe(329),X(K(),100,"whitelistMints")]),Wa=V([pe(8),K("poolId"),X(X(w(),8),_i,"positiveTickArrayBitmap"),X(X(w(),8),_i,"negativeTickArrayBitmap")]);var za=se("Raydium_Clmm"),It={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]},Te=class{static createPoolInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([z("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,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:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...It.createPool,...g]);return new Tt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:r,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ue({fromPublicKey:r,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[Kn.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Ei.span),space:Ei.span,programId:n})],{publicKey:f}=La(n,a,d,p),{publicKey:b}=Ni(n,f,d),{publicKey:g}=Ni(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,m.publicKey,d,b,new U(i.programId||De),p,g,new U(s.programId||De),ot(n,f).publicKey,u,c)),{signers:[],instructions:y,instructionTypes:[v.CreateAccount,v.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I){let L=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),z("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),W("optionBaseFlag"),qe("baseFlag")]),D=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,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:u,isSigner:!1,isWritable:!0},{pubkey:c,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:bt,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Ga,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],Z=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},Z);let G=Buffer.from([...It.openPosition,...Z]);return new Tt({keys:F,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,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=Fi.generate();m.push(x),y=x.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(d,p,f),{publicKey:h}=be(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=ao(y),{publicKey:B}=lt(d,y),{publicKey:T}=on(d,p,r,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,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),r,i,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,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=Fi.generate();m.push(x),y=x.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(d,p,f),{publicKey:h}=be(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=ao(y),{publicKey:B}=lt(d,y),{publicKey:T}=on(d,p,r,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,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),r,i,f,b,c,s,a,u,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,R,I){let L=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),z("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),W("optionBaseFlag"),qe("baseFlag")]),D=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,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:u,isSigner:!1,isWritable:!0},{pubkey:c,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:bt,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Ga,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],Z=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new Xa(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},Z);let G=Buffer.from([...It.openPosition,...Z]);return new Tt({keys:F,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=Fi.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(p,y,f),{publicKey:h}=be(p,y,b),{publicKey:A}=Pe(n.wallet,m,De),{publicKey:k}=ao(m),{publicKey:B}=lt(p,m),{publicKey:T}=on(p,y,r,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,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),r,i,f,b,s,a,u,c,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,i){let s=V([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...It.closePosition,...u]);return new Tt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new U(e.programId),{publicKey:s}=Pe(n.wallet,r.nftMint,De),{publicKey:a}=lt(i,r.nftMint),u=[];return u.push(this.closePositionInstruction(i,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[v.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=V([z("liquidity"),w("amountMaxA"),w("amountMaxB"),W("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:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=be(u,c,l),{publicKey:p}=be(u,c,m),{publicKey:y}=Pe(r.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=on(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).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:r,base:i,baseAmount:s,otherAmountMax:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=be(u,c,l),{publicKey:p}=be(u,c,m),{publicKey:y}=Pe(r.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=on(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).publicKey:void 0)],signers:[],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=V([z("liquidity"),w("amountMaxA"),w("amountMaxB"),W("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:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:new Xa(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=V([z("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...A?[{pubkey:A,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:r,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:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:Or,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([...It.decreaseLiquidity,...S]);return new Tt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new U(e.programId),new U(e.id)],m=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=be(c,l,m),{publicKey:y}=be(c,l,d),{publicKey:f}=Pe(r.wallet,n.nftMint,u),{publicKey:b}=lt(c,n.nftMint),{publicKey:g}=on(c,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:r.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.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,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[v.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g){let h=V([w("amount"),w("otherAmountThreshold"),z("sqrtPriceLimitX64"),qe("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,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:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:Or,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...It.swap,...B]);return new Tt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){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,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[v.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,u,c,l,m,d){let p=V([w("openTime"),w("endTime"),z("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:r,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:H(l),endTime:H(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...It.initReward,...f]);return new Tt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a=Oa(i,s,r.mint).publicKey,u=ur(i).publicKey,c=[this.initRewardInstruction(i,n.wallet,s,u,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[v.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,u,c,l,m,d){let p=V([W("rewardIndex"),z("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:r,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:H(l),endTime:H(m)},f);let b=Buffer.from([...It.setRewardEmissions,...f]);return new Tt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===r.mint.toString()&&(a=d,u=new U(t.rewardInfos[d].vault),c=new U(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&za.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=ur(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,u,c,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[v.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let u=V([W("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:Or,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...It.collectReward,...l]);return new Tt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,u=new U(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&za.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,u,r,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[v.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:r,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,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===r.toString(),b=[this.swapInstruction(c,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,u,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[v.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as Nm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Mm}from"@solana/spl-token";import{PublicKey as Lm}from"@solana/web3.js";import Qa from"bn.js";var Ya=new Qa(25),ja=new Qa(1e4);var Om=se("Raydium_liquidity_serum");function Ha({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,r;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));r=Lm.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw Om.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}import uk from"bn.js";function fo({programId:o}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function ln({name:o,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function _m({programId:o,marketId:e}){let{publicKey:t}=le([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function Wi({programId:o}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function Za({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:u}){let c=ln({name:"amm_associated_seed",programId:a,marketId:t}),l=ln({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Wi({programId:a}),p=ln({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=ln({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=ln({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=_m({programId:a,marketId:t}),g=ln({name:"target_associated_seed",programId:a,marketId:t}),h=ln({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=Ha({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:Nm.default,configId:fo({programId:a})}}var Di={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},yo=o=>{let e={},t=Mm.toBase58();return Object.keys(o).map(n=>{let r=o[n],[i,s]=[r.baseMint.toBase58(),r.quoteMint.toBase58()];e[n]={id:n,version:4,status:r.status.toNumber(),programId:r.programId.toBase58(),mintA:He({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:He({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new _(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new _(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new _(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:Di,week:Di,month:Di,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:fo({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:He({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import tt from"bn.js";var pr=class extends ke{constructor(t){super(t);this.stableLayout=new ir({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:r,baseIn:i}){let s=new tt(new _(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=ro(t[i?"mintB":"mintA"]),[u,c]=[new tt(new _(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new tt(new _(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new tt(new _(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${r.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=at;s.isZero()||(d=m==="base"?Vr(s.mul(c),u):Vr(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Vr(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let f=new Ye(new tt(1)).add(r).mul(d).quotient,b=new ye(a,d),g=new ye(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:r,amountInA:i,amountInB:s,fixedSide:a,config:u,txVersion:c,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},u),[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 Xe(n.lpMint.address)}),A=[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"?(A.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=A,[I,L]=k,[D,F]=B,Z=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Nt=await m.handleTokenAccount({side:"in",amount:D,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=Nt,Qe=Be(Nt,["tokenAccount"]);G.addInstruction(Qe);let gn=await m.handleTokenAccount({side:"in",amount:F,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:yn}=gn,$t=Be(gn,["tokenAccount"]);G.addInstruction($t);let Tr=await m.handleTokenAccount({side:"out",amount:0,mint:new Xe(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Ft}=Tr,bn=Be(Tr,["tokenAccount"]);return G.addInstruction(bn),G.addInstruction({instructions:[xa({poolInfo:n,poolKeys:Z,userKeys:{baseTokenAccount:q,quoteTokenAccount:yn,lpTokenAccount:Ft,owner:this.scope.ownerPubKey},baseAmountIn:D,quoteAmountIn:F,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5AddLiquidity:v.AmmV4AddLiquidity],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),c===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:r,amountIn:i,config:s,txVersion:a,computeBudgetConfig:u}=t,c=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new Xe(n.mintA.address),new Xe(n.mintB.address),new Xe(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:A}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:k}=x,B=Be(x,["tokenAccount"]);g.addInstruction(B);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:T}=R,S=Be(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[Ri({poolInfo:n,poolKeys:c,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(u),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Cn,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(c);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||Pe(this.scope.ownerPubKey,q.accountInfo.mint,Cn).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 A=r.add(a!=null?a:new tt(0)),k=t.mintA.address===he.WSOL.mint.toString(),B=t.mintB.address===he.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(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:Cn,mint:new Xe(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=ut[s.programId],Qe=ct({programId:new Xe(s.programId),poolId:new Xe(s.id),owner:this.scope.ownerPubKey,version:q}),yn,$t=await this.scope.connection.getAccountInfo(Qe);if($t&&(yn=Jn(q).decode($t.data)),q!==6&&!yn){let{instruction:Dt,instructionType:Lo}=$n({id:new Xe(s.id),programId:new Xe(s.programId),version:q,ledger:Qe,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Dt],instructionTypes:[Lo]})}let Ft=[];for(let Dt of s.rewardInfos){let Lo=Dt.mint.address===he.WSOL.mint.toString();if(g[Dt.mint.address])Ft.push(g[Dt.mint.address]);else{let{account:Zi,instructionParams:Ji}=await this.scope.account.getOrCreateTokenAccount({mint:new Xe(Dt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Lo,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Zi||this.logAndCreateError("farm reward account not found:",Dt.mint.address),Ji&&b.addInstruction(Ji),Ft.push(Zi)}}let bn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Nt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:bn,lpAccount:h,rewardAccounts:Ft},gn=ut[s.programId],Tr=gn===6?er(Nt):gn===5?tr(Nt):nr(Nt),Bu={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};b.addInstruction({instructions:[Tr],instructionTypes:[Bu[gn]]})}let I=await this.getAmmPoolKeys(t.id),L=Ri({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[D,F]=t.mintA.address===n.mintA.address?[T,x]:[x,T],Z=await this.scope.clmm.getClmmPoolKeys(t.id),G=await Te.openPositionFromBaseInstructions(E(C({poolInfo:n,poolKeys:Z,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:D,tokenAccountB:F},withMetadata:"create"},i),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:r,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var D;let b=c.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),g=c.useSOLBalance&&r.mint.equals(Ja),h=c.useSOLBalance&&i.mint.equals(Ja),A=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.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(A.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=Za({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.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}=Sa(E(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:Pe(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[I],instructionTypes:[L]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=fo({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return Aa.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:i,slippage:s}){let[a,u]=[r.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:c,quoteReserve:l}=t,m=[c,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 _(y.toString()).div(p.toString());else{let I=Ia(this.stableLayout.stableModelData,c.toNumber(),l.toNumber(),!1);d==="quote"?b=new _(1e6).div(I*1e6):b=new _(I*1e6).div(1e6)}let g=n,h=new tt(0),A=new tt(0);if(!g.isZero())if(f){A=Yn(g.mul(Ya),ja);let I=g.sub(A),L=p.add(I);h=y.mul(I).div(L)}else{A=g.mul(new tt(2)).div(new tt(1e4));let I=g.sub(A);d==="quote"?h=new tt(ka(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber())):h=new tt(Ta(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber()))}let k=new tt(new _(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new _(h.toString()).div(new _(g.sub(A).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new _(h.toString()).div(g.sub(A).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:A}}async swap({poolInfo:t,poolKeys:n,amountIn:r,amountOut:i,inputMint:s,fixedSide:a,txVersion:u,config:c,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=c||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===j.toBase58(),h=y&&b.address===j.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(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:[io({version:x,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:r,amountOut:i,fixedSide:a})],instructionTypes:[x===4?v.AmmV4SwapBaseIn:v.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await Ne(this.scope.connection,t.map(l=>({pubkey:new Xe(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=oo.decode(m.accountInfo.data);i[String(t[l])]=E(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},u=await Ne(this.scope.connection,s.map(l=>({pubkey:new Xe(l)})),n);for(let l=0;l<s.length;l++){let m=u[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new tt(vm.decode(m.data).amount.toString())}let c={};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);c[l]=E(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new _(p.toString()).div(new _(10).pow(m.quoteDecimal.toString())).div(new _(d.toString()).div(new _(10).pow(m.baseDecimal.toString())))})}return c}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),r=yo({[t]:n}),i=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as ie}from"@solana/web3.js";import dt from"bn.js";import{AccountLayout as $a,TOKEN_PROGRAM_ID as eu}from"@solana/spl-token";var fr=class extends ke{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)||ie.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new dt(new ie(r.address).toBuffer()).gt(new dt(new ie(i.address).toBuffer()))?[i,r,new _(1).div(a)]:[r,i,a],b=re.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Te.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(c),d.versionBuild({txVersion:m,extInfo:{address:E(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:u.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:u.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:[]}},Ea),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!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===j.toString(),A=n.useSOLBalance&&e.mintB.address===j.toString(),[k,B]=s==="MintA"?[a,u]:[u,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(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:c,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,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 Te.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:E(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,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:r,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!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===j.toBase58(),h=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(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:c,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 Te.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:r,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:r,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=u.useSOLBalance&&t.mintA.address===j.toString(),g=u.useSOLBalance&&t.mintB.address===j.toString(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(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:c,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(A||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(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:c,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=Te.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,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:r,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===j.toString(),b=a.useSOLBalance&&t.mintB.address===j.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(r==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(h||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(r==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),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=Te.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,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:r,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:u,associatedOnly:c=!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===j.toString(),f=i.useSOLBalance&&t.mintB.address===j.toString(),b,g,{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:l});b=h,A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===j.toString(),D;if(I.mint.address===t.mintA.address)D=b;else if(I.mint.address===t.mintB.address)D=g;else{let{account:F,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(I.mint.programId),mint:new ie(I.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:c,checkCreateATAOwner:l});D=F,Z&&p.addInstruction(Z)}T.push(D)}!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 Te.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:u,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[v.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let I=await Te.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});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:r}){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=Te.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.address.toString()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(n.mint.address),mint:new ie(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new _(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:r,checkCreateATAOwner:i});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Te.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ie(n.mint.programId),mint:new ie(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let c=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===j.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&c.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Te.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ie(m.mint.programId),mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),c.addInstruction(g)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.equals(j),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new _(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:c?!1:r,checkCreateATAOwner:i});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Te.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){let c=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===j.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(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&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Te.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});c.addInstruction(b),l=C(C({},l),b.address)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:r=!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(),u=t.useSOLBalance&&n.equals(j),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(s.mint.programId),mint:n,notUseTokenAccount:u,owner:this.scope.ownerPubKey,skipCloseAccount:!u,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:u?!1:r,checkCreateATAOwner:i});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Te.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let u of n){let c=e.rewardDefaultInfos.find(f=>f.mint.address===u.toString());if(!c){this.logAndCreateError("reward mint error","not found reward mint",u);continue}let l=t.useSOLBalance&&u.equals(j),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(c.mint.programId),mint:u,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:r,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Te.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:r,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=u.useSOLBalance&&e.mintA.address===j.toBase58(),b=u.useSOLBalance&&e.mintB.address===j.toBase58(),g;!s||s.equals(new _(0))?g=y?Rt.add(new dt(1)):Lt.sub(new dt(1)):g=re.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 ie(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?r:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let A;if(!A){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?0:r}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=B,T&&p.addInstruction(T)}(!h||!A)&&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:A,mintAUseSOLBalance:f,mintBUseSOLBalance:b,associatedOnly:l});let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(Te.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:A},inputMint:new ie(n),amountIn:r,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:c})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)r?Pe(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(c[m.accountInfo.mint.toString()]=m.pubkey):c[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(A=>!A.liquidity.isZero()||A.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===j.toString(),y=n.useSOLBalance&&d.mintB.address===j.toString(),f=c[d.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ie(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:i});f=A,k&&l.addInstruction(k)}let b=c[d.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ie(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:i});b=A,k&&l.addInstruction(k)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===j.toString(),B=c[A.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(A.mint.programId),mint:new ie(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});B=T,S&&l.addInstruction(S)}c[A.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let k=Te.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new dt(0),amountMinA:new dt(0),amountMinB:new dt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(ur(e).publicKey);return t?Ua.decode(t.data).whitelistMints.filter(r=>!r.equals(ie.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new dt(1))).map(s=>lt(new ie(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=po.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 Ne(this.scope.connection,e.map(i=>({pubkey:new ie(i)})),t),r={};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=un.decode(s.accountInfo.data),u=re.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[i])]=E(C({},a),{currentPrice:u,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].ammConfig.toBase58())),r=await Ne(this.scope.connection,Array.from(n).map(u=>({pubkey:new ie(u)}))),i={};r.forEach(u=>{!u.accountInfo||(i[u.pubkey.toBase58()]=qa.decode(u.accountInfo.data))});let s=await Ke.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var m,d,p,y;let[c,l]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:He({address:c,decimals:e[u].mintDecimalsA,programId:t[c].programId.toBase58()||eu.toBase58(),extensions:{feeConfig:(m=t[c])!=null&&m.feeConfig?Zt((d=t[c])==null?void 0:d.feeConfig):void 0}}),mintB:He({address:l,decimals:e[u].mintDecimalsB,programId:t[l].programId.toBase58()||eu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Zt((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[u].currentPrice,config:E(C({},i[e[u].ammConfig.toBase58()]),{id:e[u].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ke.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()]),r=await kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ie(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await Ne(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=Da(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number($a.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number($a.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let c=E(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:u.config});return{poolInfo:u,poolKeys:c,computePoolInfo:i[e],tickData:s}}};import{PublicKey as ee}from"@solana/web3.js";import{NATIVE_MINT as Io,TOKEN_PROGRAM_ID as mn,AccountLayout as Zm}from"@solana/spl-token";import nu from"bn.js";var qi=new nu(1e6);function Vm(o,e,t){return o.mul(e).add(t).sub(new nu(1)).div(t)}function tu(o,e,t){return o.mul(e).div(t)}var bo=class{static tradingFee(e,t){return Vm(e,t,qi)}static protocolFee(e,t){return tu(e,t,qi)}static fundFee(e,t){return tu(e,t,qi)}};import yr from"bn.js";function go(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Em(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=go(o,e);if(n.gt(Rn)){t=t.add(new yr(1));let r=o.div(t);n=go(o,t),n.gt(Rn)&&(r=r.add(new yr(1)))}return[t,e]}var Rn=new yr(0),wo=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=Em(r,i),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}static lpTokensToTradingTokens(e,t,n,r,i){let s=e.mul(n).div(t),a=e.mul(r).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return go(e.mul(n),t).gt(Rn)&&s.gt(Rn)&&(s=s.add(new yr(1))),go(e.mul(r),t).gt(Rn)&&a.gt(Rn)&&(a=a.add(new yr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Ao=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,r){let i=bo.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:u}=wo.swapWithoutFees(s,t,n),c=a.add(i);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:i}}};var Fm=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Dm=Buffer.from("amm_config","utf8"),Wm=Buffer.from("pool","utf8"),qm=Buffer.from("pool_lp_mint","utf8"),Um=Buffer.from("pool_vault","utf8"),Gm=Buffer.from("observation","utf8");function Ln(o){return le([Fm],o)}function Xm(o,e){return le([Dm,Ym(e)],o)}function zm(o,e,t,n){return le([Wm,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Qm(o,e){return le([qm,e.toBuffer()],o)}function ru(o,e,t){return le([Um,e.toBuffer(),t.toBuffer()],o)}function Ui(o,e){return le([Gm,e.toBuffer()],o)}function Ym(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function ou({programId:o,mintA:e,mintB:t}){let n=Xm(o,0).publicKey,r=Ln(o).publicKey,i=zm(o,n,e,t).publicKey,s=Qm(o,i).publicKey,a=ru(o,i,e).publicKey,u=ru(o,i,t).publicKey,c=Ui(o,i).publicKey;return{poolId:i,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as ho}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gi,TOKEN_2022_PROGRAM_ID as iu,ASSOCIATED_TOKEN_PROGRAM_ID as jm}from"@solana/spl-token";var Hm=se("Raydium_cpmm"),Po={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 su(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=V([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:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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:Gi,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:jm,isSigner:!1,isWritable:!1},{pubkey:qo,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:A},T),new ho({keys:B,programId:o,data:Buffer.from([...Po.initialize,...T])})}function au(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([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:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:iu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Hm.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new ho({keys:b,programId:o,data:Buffer.from([...Po.deposit,...g])})}function uu(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([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:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:iu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Nr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new ho({keys:b,programId:o,data:Buffer.from([...Po.withdraw,...g])})}function ko(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y,f){let b=V([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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 ho({keys:g,programId:o,data:Buffer.from([...Po.swapBaseInput,...h])})}import _e from"bn.js";var cu=V([pe(8),W("bump"),qe("disableCreatePool"),St("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),To=V([pe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var br=class extends ke{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 Ne(this.scope.connection,e.map(m=>({pubkey:new ee(m)}))),r={},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=To.decode(d.accountInfo.data);r[String(e[m])]=E(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 Ne(this.scope.connection,m.map(p=>({pubkey:new ee(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]]=cu.decode(y.data)}}let u={},c=await Ne(this.scope.connection,s.map(m=>({pubkey:new ee(m)})));for(let m=0;m<s.length;m++){let d=c[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new _e(Zm.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=E(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:u[d.vaultA.toString()],vaultBAmount:u[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new _(y.toString()).div(new _(10).pow(d.mintDecimalB)).div(new _(p.toString()).div(new _(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var u,c,l,m;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return E(C({},n),{[r]:E(C({},i),{id:new ee(r),configInfo:i.configInfo,version:7,authority:Ln(i.programId).publicKey,mintA:He({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[s])!=null&&u.feeConfig?Zt((c=t[s])==null?void 0:c.feeConfig):void 0}}),mintB:He({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Zt((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]}),r=He({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Zt(n[t.mintA.toBase58()].feeConfig):void 0}}),i=He({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Zt(n[t.mintB.toBase58()].feeConfig):void 0}}),s=He({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:mn.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()},u={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:r,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new _(t.vaultAAmount.toString()).div(10**r.decimals).toNumber(),mintAmountB:new _(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:r,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Ln(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=Be(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var D,F,Z;let d=r.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),p=new _e(new ee(c.mintA.address).toBuffer()).lte(new _e(new ee(c.mintB.address).toBuffer())),[y,f]=p?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=p?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],h=r.useSOLBalance&&y.address===Io.toBase58(),A=r.useSOLBalance&&f.address===Io.toBase58(),[k,B]=[new ee(y.address),new ee(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 ee(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:d,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!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=ou({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[su(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,Pe(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new ee((F=y.programId)!=null?F:mn),new ee((Z=f.programId)!=null?Z:mn),L.observationId,b,g,n)],instructionTypes:[v.CpmmCreatePool]}),T.addCustomComputeBudget(u),T.versionBuild({txVersion:a,extInfo:{address:E(C({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:r,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:u,config:c,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:E(C({},t),{lpAmount:new _(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Ye(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new _(r.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,A=t.mintA.address===Io.toString(),k=t.mintB.address===Io.toString(),B=this.createTxBuilder(),[T,S]=[new ee(t.mintA.address),new ee(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ee(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(i?r:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?r:h}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{});let{account:I,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ee(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:r).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:r}: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 D=await m.getCreatedTokenAccount({mint:new ee(t.lpMint.address)}),Qe=await m.handleTokenAccount({side:"out",amount:0,mint:new ee(t.lpMint.address),tokenAccount:D,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:F}=Qe,Z=Be(Qe,["tokenAccount"]);B.addInstruction(Z);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Ye(new _e(1)).sub(s);return B.addInstruction({instructions:[au(new ee(t.programId),this.scope.ownerPubKey,new ee(G.authority),new ee(t.id),F,x,I,new ee(G.vault.A),new ee(G.vault.B),T,S,new ee(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(u),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var F,Z;let{poolInfo:t,poolKeys:n,lpAmount:r,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new Ye(new _e(1)).sub(i),c=await this.getRpcPoolInfo(t.id),[l,m]=[u.mul(r.mul(c.baseReserve).div(c.lpAmount)).quotient,u.mul(r.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[we(l,t.mintA.extensions.feeConfig,d,!1),we(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new ee(t.mintA.address),new ee(t.mintB.address)],A=g.equals(j),k=h.equals(j),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ee(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ee(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 ee(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let D=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[uu(new ee(t.programId),this.scope.ownerPubKey,new ee(D.authority),new ee(t.id),L,B,T,new ee(D.vault.A),new ee(D.vault.B),g,h,new ee(t.lpMint.address),r,l.sub((F=p.fee)!=null?F:new _e(0)),m.sub((Z=y.fee)!=null?Z:new _e(0)))],instructionTypes:[v.CpmmWithdrawLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var S,x,R,I;let{poolInfo:t,poolKeys:n,baseIn:r,swapResult:i,slippage:s=0,config:a,computeBudgetConfig:u,txVersion:c}=e,{bypassAssociatedCheck:l,checkCreateATAOwner:m,associatedOnly:d}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},a),p=this.createTxBuilder(),[y,f]=[new ee(t.mintA.address),new ee(t.mintB.address)];i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new _e((1-s)*1e4)).div(new _e(1e4));let b=t.mintA.address===j.toBase58(),g=t.mintB.address===j.toBase58(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new ee((S=t.mintA.programId)!=null?S:mn),owner:this.scope.ownerPubKey,createInfo:b||!r?{payer:this.scope.ownerPubKey,amount:r?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new ee((x=t.mintB.programId)!=null?x:mn),owner:this.scope.ownerPubKey,createInfo:g||r?{payer:this.scope.ownerPubKey,amount:r?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:[ko(new ee(t.programId),this.scope.ownerPubKey,new ee(T.authority),new ee(T.config.id),new ee(t.id),r?h:k,r?k:h,new ee(T.vault[r?"A":"B"]),new ee(T.vault[r?"B":"A"]),new ee((R=t[r?"mintA":"mintB"].programId)!=null?R:mn),new ee((I=t[r?"mintB":"mintA"].programId)!=null?I:mn),r?y:f,r?f:y,Ui(new ee(t.programId),new ee(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[r?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut]}),p.addCustomComputeBudget(u),p.versionBuild({txVersion:c})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=Ao.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new _(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),u=s.destinationAmountSwapped.mul(new _e((1-r)*1e4)).div(new _e(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:u,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:r,slippage:i,epochInfo:s,baseIn:a}){var h,A,k,B,T,S,x,R;let u=1-Number(i.toSignificant())/100,c=new _e(new _(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=we(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((h=l.fee)!=null?h:new _e(0)),d=new _e(new _(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.toString(),"amountInFee:",(k=(A=l.fee)==null?void 0:A.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:at,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=Jm(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=we(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Ye(new _e(1)).add(i),g=we(b.mul(f.amount.sub((B=f.fee)!=null?B:new _e(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 Jm(o,e,t,n){let r=o.mul(e).div(n);!r.isZero()&&!o.mul(e).mod(n).isZero()&&(r=r.add(new _e(1)));let i=o.mul(t).div(n);return!i.isZero()&&!o.mul(t).mod(n).isZero()&&(i=i.add(new _e(1))),{amountA:r,amountB:i}}import{PublicKey as pn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ie,TOKEN_2022_PROGRAM_ID as So,createTransferInstruction as yu}from"@solana/spl-token";import Ko from"bn.js";import{TOKEN_PROGRAM_ID as $m,TOKEN_2022_PROGRAM_ID as ed,ASSOCIATED_TOKEN_PROGRAM_ID as td}from"@solana/spl-token";import{PublicKey as $,TransactionInstruction as nd,SystemProgram as rd}from"@solana/web3.js";import dn from"bn.js";function od(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){var T;let f=[],b=[P({pubkey:$m,isWritable:!1}),P({pubkey:ed,isWritable:!1}),P({pubkey:td,isWritable:!1}),P({pubkey:rd.programId,isWritable:!1}),P({pubkey:e,isSigner:!0})];b.push(P({pubkey:t})),b.push(P({pubkey:r}));let g=[u,c],h=[l,m],A=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=A[S]===x.mintA.address;if(b.push(P({pubkey:new $(x.programId),isWritable:!1})),S===g.length-1?b.push(P({pubkey:r})):b.push(P({pubkey:n})),b.push(P({pubkey:new $(A[S])})),b.push(P({pubkey:new $(A[S+1])})),x.version===6){let I=h[S];b.push(P({pubkey:new $(I.config.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(R?I.vault.A:I.vault.B)})),b.push(P({pubkey:new $(R?I.vault.B:I.vault.A)})),b.push(P({pubkey:new $(x.observationId)})),b.push(P({pubkey:Nr})),b.push(P({pubkey:ot(new $(x.programId),new $(x.id)).publicKey})),f.push(id(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(P({pubkey:new $(L)}))}else if(x.version===5){let I=h[S];b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.authority),isWritable:!1})),b.push(P({pubkey:new $(I.marketProgramId)})),b.push(P({pubkey:new $(I.marketAuthority)})),b.push(P({pubkey:Vs,isWritable:!1})),b.push(P({pubkey:new $(I.openOrders)})),b.push(P({pubkey:new $(I.vault.A)})),b.push(P({pubkey:new $(I.vault.B)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.marketId)})),b.push(P({pubkey:new $(I.marketBids)})),b.push(P({pubkey:new $(I.marketAsks)})),b.push(P({pubkey:new $(I.marketEventQueue)})),b.push(P({pubkey:new $(I.marketBaseVault)})),b.push(P({pubkey:new $(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],L=x.status!==1;b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.authority),isWritable:!1})),b.push(P({pubkey:new $(L?I.id:I.marketProgramId)})),b.push(P({pubkey:new $(L?I.id:I.marketAuthority)})),b.push(P({pubkey:new $(L?I.id:I.openOrders)})),b.push(P({pubkey:new $(I.vault.A)})),b.push(P({pubkey:new $(I.vault.B)})),b.push(P({pubkey:new $(L?I.id:I.marketId)})),b.push(P({pubkey:new $(L?I.id:I.marketBids)})),b.push(P({pubkey:new $(L?I.id:I.marketAsks)})),b.push(P({pubkey:new $(L?I.id:I.marketEventQueue)})),b.push(P({pubkey:new $(L?I.id:I.marketBaseVault)})),b.push(P({pubkey:new $(L?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(P({pubkey:new $(I.authority)})),b.push(P({pubkey:new $(I.config.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(R?I.vault.A:I.vault.B)})),b.push(P({pubkey:new $(R?I.vault.B:I.vault.A)})),b.push(P({pubkey:new $(x.observationId)}))}else throw Error("pool type error")}let k=V([W("insId"),w("amountIn"),w("amountOut"),X(z(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new nd({keys:b,programId:o,data:B})}function id(o,e){if(o)if(e){let t=new dn(o).div(new dn(25));return t.gt(co)?t:co}else{let t=new dn(o).mul(new dn(25));return t.lt(lo)?t:lo}else return e?co:lo}function lu({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var r,i,s,a,u,c,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ee(m),p=t.equals(d.mintA.address)?Rt.add(it):Lt.sub(it);return Te.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=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?i:new dn(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:[ko(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new $(m[d?"mintA":"mintB"].address),new $(m[d?"mintB":"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:[io({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((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new dn(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:[od(o,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=(c=n.minAmountOut.fee)==null?void 0:c.raw)!=null?l:new dn(0)),n.remainingAccounts)],instructionTypes:[v.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var mu={[ei.toBase58()]:3},du={3:ei};var Xi=V([pe(5),pe(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"),pe(7)]),pu={3:Xi};import{PublicKey as fu}from"@solana/web3.js";var Bo=se("Serum"),xo=class{static getProgramId(e){let t=du[e];return t||Bo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=mu[t];return n||Bo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=pu[e];return t||Bo.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()],r=0,i;for(;r<100;){try{let s=n.concat(Buffer.from([r]),Buffer.alloc(7));i=fu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return Bo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:fu.default,nonce:r}}};var Et=new Ko(0),gr=class extends ke{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(j));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:r=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let u=H(t);for(let c=0;c<i.length;c++)u.gte(i[c].amount)?(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(i[c].amount)):(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),jn({destination:a.addresses.newAccount,source:i[c].publicKey,amount:u,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:r})}async wrapWSol(e,t,n){let r=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),r.length&&i.addInstruction({instructions:[jn({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Kt({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:r,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),u=e.amountIn,c=e.amountOut,l=u.amount.token.mint.equals(j),m=c.amount.token.mint.equals(j),d=u.amount.token.mint,p=c.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?So:Ie,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:u.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;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,c.amount.token.isToken2022?So:Ie);else{let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?So:Ie,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=k,B&&a.addInstruction(B)}m&&a.addInstruction({endInstructions:[Kt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ie})],endInstructionTypes:[v.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?So:Ie)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=lu({routeProgram:i,inputMint:d,swapInfo:E(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:[yu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]}),k.addInstruction(A);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[yu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=vs,clmm:n=Es,cpmm:r=Fs}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:oo.offsetOf("baseMint"),length:64}}),s=V([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})),u=V([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:un.span}],dataSlice:{offset:un.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(r,{dataSlice:{offset:To.offsetOf("mintA"),length:64}})).map(p=>{let y=u.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:r,cpmmPools:i}){e=e.toString()===pn.default.toString()?j:e,t=t.toString()===pn.default.toString()?j:t;let s={},a={},u={},c=[],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))&&(c.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ie,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:Ie,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:Ie,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:Ie,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.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:Ie,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:Ie,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:Ie,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:Ie,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))&&(c.push(d),u[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ie,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:Ie,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:Ie,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:Ie,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?u[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?u[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:c,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let r=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=yo(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new pn(f.mintA.address),programId:Ie,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},r.delete(f.mintB.address),a[f.mintB.address]={address:new pn(f.mintB.address),programId:Ie,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 u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(u).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Ie)?(r.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}):r.add(b),f.mintProgramB.equals(Ie)?(r.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}):r.add(g)}),console.log("fetching mints info, total: ",r.size);let c=await kn({connection:this.scope.connection,mints:Array.from(r).map(f=>new pn(f))});a=C(C({},a),c);let l=this.scope.cpmm.toComputePoolInfos({pools:u,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)=>E(C({},f),{[b]:E(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:r,simulateCache:i,tickCache:s,slippage:a,chainTime:u,epochInfo:c,feeConfig:l}){var g,h,A,k,B,T,S,x,R;let m=l===void 0?new Ko(0):e.raw.mul(new Ko(l.feeBps.toNumber())).div(new Ko(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=E(C({},t),{address:nt(t.address).toString()}),b=[];for(let I of n)try{b.push(E(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,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(r)){let D={chainId:101,address:I,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},F=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:D,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var $t,Ft,bn,Nt;let Qe=G===void 0?Et:G.data.amountOut.amount.raw.sub((Ft=($t=G.data.amountOut.fee)==null?void 0:$t.raw)!=null?Ft:Et),yn=q===void 0?Et:q.data.amountOut.amount.raw.sub((Nt=(bn=q.data.amountOut.fee)==null?void 0:bn.raw)!=null?Nt:Et);return Qe.lt(yn)?1:-1})[0];if(F===void 0)continue;let Z=new ye(ro(D),F.data.amountOut.amount.raw.sub((h=(g=F.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Et));for(let G of L.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:Z});b.push(E(C({},q),{allTrade:!!(F.data.allTrade&&q.allTrade),amountIn:F.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new _(new $e({baseToken:F.data.amountIn.amount.token,denominator:F.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((k=(A=q.amountOut.fee)==null?void 0:A.raw)!=null?k:Et)}).toFixed()),priceImpact:new _(F.data.priceImpact.add(q.priceImpact).toFixed()),fee:[F.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[F.pool,G],remainingAccounts:[F.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(B=q.amountOut.fee)!=null&&B.raw?new ye(F.data.amountOut.amount.token,((S=(T=F.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Et).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:Et)):void 0,middleToken:F.data.amountOut.amount.token,poolReady:F.data.poolReady&&q.poolReady,poolType:[F.data.poolType,q.poolType],feeConfig:y,expirationTime:xt(F.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(I=>(I.allTrade||this.logDebug(`pool ${I.poolInfoList.map(L=>L.id.toString()).join(",")} filter out since not all trade`),I.allTrade)).sort((I,L)=>I.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(Et)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,epochInfo:i,slippage:s,outputToken:a,amountIn:u}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:A}=Ke.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new _(y.toFixed()),executionPrice:new _(f.toFixed()),priceImpact:new _(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:xt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:s});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:or(E(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:or(E(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(u.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<r,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:c,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:or(E(C({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:or(E(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(u.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<r,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 r=new Set(e.filter(c=>c.version===6&&!t[c.id.toString()]).map(c=>c.id.toString()));if(r.size>0){let c=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});Object.keys(c).forEach(l=>{t[l]=c[l]})}if(new Set(e.filter(c=>c.version===4&&!n[c.id.toString()]).map(c=>c.id.toString())).size>0){let c=this.scope.liquidity.getRpcPoolInfos(Array.from(r));Object.keys(c).forEach(l=>{n[l]=c[l]})}let s=new Set(e.filter(c=>c.version===4).map(c=>c.marketId)),a={};s.size>0&&(await Ne(this.scope.connection,Array.from(s).map(l=>({pubkey:new pn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Xi.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:xo.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 u=[];return e.forEach(c=>{if(c.version===6){let l=t[c.id.toString()],m={programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:E(C({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};u.push(m)}else if(c.version===4){let l=n[c.id.toString()],m=C({programId:c.programId,id:c.id,mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Wi({programId:new pn(c.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:c.lpMint},a[c.marketId]);u.push(m)}else c.version===7&&u.push({programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),authority:Ln(c.programId).publicKey.toBase58(),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},mintLp:He({address:c.mintLp.toBase58(),programId:Ie.toBase58(),decimals:c.lpDecimals}),config:E(C({id:c.configId.toBase58()},c.configInfo),{protocolFeeRate:c.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:c.configInfo.tradeFeeRate.toNumber(),fundFeeRate:c.configInfo.fundFeeRate.toNumber(),createPoolFee:c.configInfo.createPoolFee.toString()})})}),u}};import{TOKEN_PROGRAM_ID as sd}from"@solana/spl-token";import{PublicKey as ad,Transaction as zi,TransactionInstruction as ud}from"@solana/web3.js";import bu from"bn.js";var ze=class extends ke{static getPdaPoolId(e,t){return le([ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return le([ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new bu(r).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:r,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>ze.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<ze.VERSION_PROJECT.length;l++)a.push(...s.map(m=>ze.getPdaOwnerId(t,m,r,l).publicKey));let u=await gt(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=u[d],b=u[n.length+l];if(!(f&&b)||f.data.length!==ze.POOL_LAYOUT.span||b.data.length!==ze.OWNER_LAYOUT.span)continue;let g=ze.POOL_LAYOUT.decode(f.data),h=ze.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new bu(0))).filter(x=>!x).length!==3,T=i>A&&i<k&&g.status===1,S=B&&T;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:ze.VERSION_PROJECT[m],openTime:A,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 c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i=[];for(let u of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(he.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(he.WSOL.mint),associatedOnly:u.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(c)}n.addInstruction({instructions:[ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,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(),r=t.wallet||this.scope.ownerPubKey,i={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(he.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(he.WSOL.mint),associatedOnly:m.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[ze.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:r,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return jo(u,[r,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new zi().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new zi().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new zi().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=V([]),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(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:sd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new ud({keys:i,programId:e,data:a})}},pt=ze;pt.CLAIMED_NUM=3,pt.POOL_LAYOUT=V([pe(8),W("bump"),W("status"),w("openTime"),w("endTime"),K("ammId"),X(V([W("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),pt.OWNER_LAYOUT=V([pe(8),W("bump"),W("version"),K("poolId"),K("owner"),w("lpAmount"),X(V([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new ad(e)),pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as wr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Pu}from"@solana/spl-token";import Ar from"bn.js";import{TransactionInstruction as ld,SYSVAR_RENT_PUBKEY as md}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as gu}from"@solana/spl-token";import{createInitializeAccountInstruction as wu}from"@solana/spl-token";import{SystemProgram as fn,Transaction as Au}from"@solana/web3.js";function cd(o="accountFlags"){let e=new Yr(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Qi=V([pe(5),cd("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"),pe(7)]);function dd({programId:o,marketInfo:e}){let t=V([W("version"),je("instruction"),w("baseLotSize"),w("quoteLotSize"),St("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:md,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}:[]),r=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},r),new ld({keys:n,programId:o,data:r})}async function hu({connection:o,wallet:e,marketInfo:t}){var s,a,u,c,l,m,d,p;let n=new Au,r=await o.getMinimumBalanceForRentExemption(165);n.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:gu}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:gu}),wu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),wu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new Au;return i.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(Qi.span),space:Qi.span,programId:t.programId}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((u=t.eventQueueSpace)!=null?u:262144+12),space:(c=t.eventQueueSpace)!=null?c:262144+12,programId:t.programId}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),dd({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 On=class extends ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:i,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u,txVersion:c,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=Ue({fromPublicKey:m,programId:i}),p=Ue({fromPublicKey:m,programId:i}),y=Ue({fromPublicKey:m,programId:i}),f=Ue({fromPublicKey:m,programId:i}),b=Ue({fromPublicKey:m,programId:i}),g=Ue({fromPublicKey:m,programId:Pu}),h=Ue({fromPublicKey:m,programId:Pu}),A=0,k=new Ar(100);function B(){let D=new Ar(0);for(;;)try{return{vaultOwner:wr.createProgramAddressSync([d.publicKey.toBuffer(),D.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:D}}catch{if(D.iaddn(1),D.gt(new Ar(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=B(),x=new Ar(Math.round(10**e.decimals*n)),R=new Ar(Math.round(n*10**t.decimals*r));if(x.eq(at))throw Error("lot size is too small");if(R.eq(at))throw Error("tick size or lot size is too small");let I=await hu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:d,baseMint:e.mint,quoteMint:t.mint,baseVault:g,quoteVault:h,vaultOwner:T,requestQueue:p,eventQueue:y,bids:f,asks:b,feeRateBps:A,quoteDustThreshold:k,vaultSignerNonce:S,baseLotSize:x,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u}}),L=this.createTxBuilder();L.addInstruction({instructions:I[0].transaction.instructions,signers:I[0].signer});for await(let D of I.slice(1,I.length))L.addInstruction({instructions:D.transaction.instructions,signers:D.signer,instructionTypes:D.instructionTypes});return c===0?L.sizeCheckBuildV0({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:h.publicKey,baseMint:new wr(e.mint),quoteMin:new wr(t.mint)}}):L.sizeCheckBuild({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:h.publicKey,baseMint:new wr(e.mint),quoteMin:new wr(t.mint)}})}};import{PublicKey as Pr}from"@solana/web3.js";import{TransactionInstruction as ku,SYSVAR_CLOCK_PUBKEY as fd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Tu}from"@solana/spl-token";var pd=V([W("instruction"),Xs("amount")]),hr=V([W("instruction")]);function Co({programId:o},e){let t=[{pubkey:Tu,isSigner:!1,isWritable:!1},{pubkey:As,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(hr.span);return hr.encode({instruction:2},n),new ku({keys:t,programId:o,data:n})}function Yi(o){let{poolConfig:e,userKeys:t,side:n}=o,r=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(hr.span);hr.encode({instruction:2},s);let a=[{pubkey:Tu,isWritable:!1,isSigner:!1},{pubkey:fd,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:r,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new ku({programId:e.programId,keys:a,data:s})}import Iu from"bn.js";var yd={[zn.IDO_PROGRAM_ID_V1.toString()]:1,[zn.IDO_PROGRAM_ID_V2.toString()]:2,[zn.IDO_PROGRAM_ID_V3.toString()]:3,[zn.IDO_PROGRAM_ID_V4.toString()]:4},Nn=class extends ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=yd[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ee(t),[c,l]=[!new Iu(e.coin).isZero(),!new Iu(e.pc).isZero()],m=u.projectInfo.mint.address.equals(j),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:r});!d&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&p&&s.addInstruction(p);let y=u.buyInfo.mint.address.equals(j),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});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:[...c?[Co({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Co({programId:new Pr(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Co({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new Pr(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[Yi(E(C({},g),{side:"base"}))]:[],...l?[Yi(E(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as bd}from"@solana/web3.js";import{MintLayout as gd,TOKEN_2022_PROGRAM_ID as ji,TOKEN_PROGRAM_ID as Hi}from"@solana/spl-token";var kr=class extends ke{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:r="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(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(Xt.address,Xt),this._mintGroup.official.add(Xt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,E(C({},c),{priority:-1}))}),i.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?ji.toBase58():Hi.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?ji.toBase58():Hi.toBase58()})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?ji.toBase58():Hi.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[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(),r=this._tokenMap.get(n);if(r)return r;if(n.toLocaleUpperCase()==="SOL")return Xt;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new bd(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=gd.decode(s.data),u=n.toString().substring(0,6),c={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var Ro=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:c="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new wt(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=c,this.api=i,this._apiCacheTime=u||5*60*1e3,this.logger=se("Raydium"),this.farm=new rr({scope:this,moduleName:"Raydium_Farm"}),this.account=new Hn({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new pr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new kr({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new gr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new fr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new br({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new On({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Nn({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=wd({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,u=new Xr({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),c=new Ro(E(C({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(zr);return this._owner.publicKey}setOwner(e){return this._owner=e?new wt(e):void 0,this}get connection(){if(!this._connection)throw new Error(qs);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(zr),new Error(zr)}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){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}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{}}}};export{Ro as Raydium};
|
|
1
|
+
var xu=Object.defineProperty,Su=Object.defineProperties;var Ku=Object.getOwnPropertyDescriptors;var Ir=Object.getOwnPropertySymbols;var es=Object.prototype.hasOwnProperty,ts=Object.prototype.propertyIsEnumerable;var $i=(o,e,t)=>e in o?xu(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,C=(o,e)=>{for(var t in e||(e={}))es.call(e,t)&&$i(o,t,e[t]);if(Ir)for(var t of Ir(e))ts.call(e,t)&&$i(o,t,e[t]);return o},E=(o,e)=>Su(o,Ku(e));var Be=(o,e)=>{var t={};for(var n in o)es.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&Ir)for(var n of Ir(o))e.indexOf(n)<0&&ts.call(o,n)&&(t[n]=o[n]);return t};import{merge as wd}from"lodash";import Ws from"axios";import{get as ns,set as Cu}from"lodash";var Oo=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={},Ru={};function se(o){let e=ns(rs,o);if(!e){let t=ns(Ru,o);e=new Oo({name:o,logLevel:t}),Cu(rs,o,e)}return e}import{PublicKey as Dc}from"@solana/web3.js";import Wc from"bn.js";import Vc from"big.js";import Er from"bn.js";import et from"bn.js";var wn=9e15,Gt=1e9,No="0123456789abcdef",xr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Sr="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Mo={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-wn,maxE:wn,crypto:!1},as,Mt,ne=!0,Cr="[DecimalError] ",Ut=Cr+"Invalid argument: ",us=Cr+"Precision limit exceeded",cs=Cr+"crypto unavailable",ls="[object Decimal]",We=Math.floor,Re=Math.pow,Lu=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Ou=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Nu=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,ms=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,yt=1e7,J=7,Mu=9007199254740991,_u=xr.length-1,_o=Sr.length-1,M={toStringTag:ls};M.absoluteValue=M.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),Y(o)};M.ceil=function(){return Y(new this.constructor(this),this.e+1,2)};M.clampedTo=M.clamp=function(o,e){var t,n=this,r=n.constructor;if(o=new r(o),e=new r(e),!o.s||!e.s)return new r(NaN);if(o.gt(e))throw Error(Ut+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new r(n)};M.comparedTo=M.cmp=function(o){var e,t,n,r,i=this,s=i.d,a=(o=new i.constructor(o)).d,u=i.s,c=o.s;if(!s||!a)return!u||!c?NaN:u!==c?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-c:0;if(u!==c)return u;if(i.e!==o.e)return i.e>o.e^u<0?1:-1;for(n=s.length,r=a.length,e=0,t=n<r?n:r;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===r?0:n>r^u<0?1:-1};M.cosine=M.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+J,n.rounding=1,t=vu(n,bs(n,t)),n.precision=o,n.rounding=e,Y(Mt==2||Mt==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};M.cubeRoot=M.cbrt=function(){var o,e,t,n,r,i,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(ne=!1,i=l.s*Re(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=ve(l.d),o=l.e,(i=(o-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Re(t,1/3),o=We((o+1)/3)-(o%3==(o<0?-1:2)),i==1/0?t="5e"+o:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(o=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=ge(c.plus(l).times(a),c.plus(u),s+2,1),ve(a.d).slice(0,s)===(t=ve(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(Y(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(Y(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return ne=!0,Y(n,o,m.rounding,e)};M.decimalPlaces=M.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-We(this.e/J))*J,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(o){return ge(this,new this.constructor(o))};M.dividedToIntegerBy=M.divToInt=function(o){var e=this,t=e.constructor;return Y(ge(e,new t(o),0,1,1),t.precision,t.rounding)};M.equals=M.eq=function(o){return this.cmp(o)===0};M.floor=function(){return Y(new this.constructor(this),this.e+1,3)};M.greaterThan=M.gt=function(o){return this.cmp(o)>0};M.greaterThanOrEqualTo=M.gte=function(o){var e=this.cmp(o);return e==1||e===0};M.hyperbolicCosine=M.cosh=function(){var o,e,t,n,r,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,r=i.d.length,r<32?(o=Math.ceil(r/3),e=(1/Lr(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),i=An(s,1,i.times(e),new s(1),!0);for(var u,c=o,l=new s(8);c--;)u=i.times(i),i=a.minus(u.times(l.minus(u.times(l))));return Y(i,s.precision=t,s.rounding=n,!0)};M.hyperbolicSine=M.sinh=function(){var o,e,t,n,r=this,i=r.constructor;if(!r.isFinite()||r.isZero())return new i(r);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(r.e,r.sd())+4,i.rounding=1,n=r.d.length,n<3)r=An(i,2,r,r,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,r=r.times(1/Lr(5,o)),r=An(i,2,r,r,!0);for(var s,a=new i(5),u=new i(16),c=new i(20);o--;)s=r.times(r),r=r.times(a.plus(s.times(u.times(s).plus(c))))}return i.precision=e,i.rounding=t,Y(r,e,t,!0)};M.hyperbolicTangent=M.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,ge(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};M.inverseCosine=M.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),r=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?ft(t,r,i):new t(0):new t(NaN):e.isZero()?ft(t,r+4,i).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),o=ft(t,r+4,i).times(.5),t.precision=r,t.rounding=i,o.minus(e))};M.inverseHyperbolicCosine=M.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,ne=!1,t=t.times(t).minus(1).sqrt().plus(t),ne=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};M.inverseHyperbolicSine=M.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,ne=!1,t=t.times(t).plus(1).sqrt().plus(t),ne=!0,n.precision=o,n.rounding=e,t.ln())};M.inverseHyperbolicTangent=M.atanh=function(){var o,e,t,n,r=this,i=r.constructor;return r.isFinite()?r.e>=0?new i(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(o=i.precision,e=i.rounding,n=r.sd(),Math.max(n,o)<2*-r.e-1?Y(new i(r),o,e,!0):(i.precision=t=n-r.e,r=ge(r.plus(1),new i(1).minus(r),t+o,1),i.precision=o+4,i.rounding=1,r=r.ln(),i.precision=o,i.rounding=e,r.times(.5))):new i(NaN)};M.inverseSine=M.asin=function(){var o,e,t,n,r=this,i=r.constructor;return r.isZero()?new i(r):(e=r.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(o=ft(i,t+4,n).times(.5),o.s=r.s,o):new i(NaN):(i.precision=t+6,i.rounding=1,r=r.div(new i(1).minus(r.times(r)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,r.times(2)))};M.inverseTangent=M.atan=function(){var o,e,t,n,r,i,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=_o)return s=ft(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=_o)return s=ft(l,m+4,d).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/J+2|0),o=t;o;--o)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(ne=!1,e=Math.ceil(a/J),n=1,u=c.times(c),s=new l(c),r=c;o!==-1;)if(r=r.times(u),i=s.minus(r.div(n+=2)),r=r.times(u),s=i.plus(r.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===i.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),ne=!0,Y(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&We(this.e/J)>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(o){return this.cmp(o)<0};M.lessThanOrEqualTo=M.lte=function(o){return this.cmp(o)<1};M.logarithm=M.log=function(o){var e,t,n,r,i,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.eq(10)}if(t=c.d,c.s<0||!t||!t[0]||c.eq(1))return new l(t&&!t[0]?-1/0:c.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(r=t[0];r%10===0;)r/=10;i=r!==1}if(ne=!1,a=m+p,s=qt(c,a),n=e?Kr(l,a+10):qt(o,a),u=ge(s,n,a,1),Mn(u.d,r=m,d))do if(a+=10,s=qt(c,a),n=e?Kr(l,a+10):qt(o,a),u=ge(s,n,a,1),!i){+ve(u.d).slice(r+1,r+15)+1==1e14&&(u=Y(u,m+1,0));break}while(Mn(u.d,r+=10,d));return ne=!0,Y(u,m,d)};M.minus=M.sub=function(o){var e,t,n,r,i,s,a,u,c,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(c=p.d,d=o.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])o.s=-o.s;else if(c[0])o=new y(p);else return new y(u===3?-0:0);return ne?Y(o,a,u):o}if(t=We(o.e/J),l=We(p.e/J),c=c.slice(),i=l-t,i){for(m=i<0,m?(e=c,i=-i,s=d.length):(e=d,t=l,s=c.length),n=Math.max(Math.ceil(a/J),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=c.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=d[n]){m=c[n]<d[n];break}i=0}for(m&&(e=c,c=d,d=e,o.s=-o.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>i;){if(c[--n]<d[n]){for(r=n;r&&c[--r]===0;)c[r]=yt-1;--c[r],c[n]+=yt}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(o.d=c,o.e=Rr(c,t),ne?Y(o,a,u):o):new y(u===3?-0:0)};M.modulo=M.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?Y(new n(t),n.precision,n.rounding):(ne=!1,n.modulo==9?(e=ge(t,o.abs(),0,3,1),e.s*=o.s):e=ge(t,o,0,n.modulo,1),e=e.times(o),ne=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return vo(this)};M.naturalLogarithm=M.ln=function(){return qt(this)};M.negated=M.neg=function(){var o=new this.constructor(this);return o.s=-o.s,Y(o)};M.plus=M.add=function(o){var e,t,n,r,i,s,a,u,c,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(c=m.d,l=o.d,a=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(o=new d(m)),ne?Y(o,a,u):o;if(i=We(m.e/J),n=We(o.e/J),c=c.slice(),r=i-n,r){for(r<0?(t=c,r=-r,s=l.length):(t=l,n=i,s=c.length),i=Math.ceil(a/J),s=i>s?i+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=c.length,r=l.length,s-r<0&&(r=s,t=l,l=c,c=t),e=0;r;)e=(c[--r]=c[r]+l[r]+e)/yt|0,c[r]%=yt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return o.d=c,o.e=Rr(c,n),ne?Y(o,a,u):o};M.precision=M.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(Ut+o);return t.d?(e=ds(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var o=this,e=o.constructor;return Y(new e(o),o.e+1,e.rounding)};M.sine=M.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+J,n.rounding=1,t=Eu(n,bs(n,t)),n.precision=o,n.rounding=e,Y(Mt>2?t.neg():t,o,e,!0)):new n(NaN)};M.squareRoot=M.sqrt=function(){var o,e,t,n,r,i,s=this,a=s.d,u=s.e,c=s.s,l=s.constructor;if(c!==1||!a||!a[0])return new l(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);for(ne=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=ve(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=We((u+1)/2)-(u<0||u%2),c==1/0?e="5e"+u:(e=c.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new l(e)):n=new l(c.toString()),t=(u=l.precision)+3;;)if(i=n,n=i.plus(ge(s,i,t+2,1)).times(.5),ve(i.d).slice(0,t)===(e=ve(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(Y(i,u+1,0),i.times(i).eq(s))){n=i;break}t+=4,r=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(Y(n,u+1,1),o=!n.times(n).eq(s));break}return ne=!0,Y(n,u,l.rounding,o)};M.tangent=M.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=ge(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,Y(Mt==2||Mt==4?t.neg():t,o,e,!0)):new n(NaN)};M.times=M.mul=function(o){var e,t,n,r,i,s,a,u,c,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=We(l.e/J)+We(o.e/J),u=d.length,c=p.length,u<c&&(i=d,d=p,p=i,s=u,u=c,c=s),i=[],s=u+c,n=s;n--;)i.push(0);for(n=c;--n>=0;){for(e=0,r=u+n;r>n;)a=i[r]+p[n]*d[r-n-1]+e,i[r--]=a%yt|0,e=a/yt|0;i[r]=(i[r]+e)%yt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),o.d=i,o.e=Rr(i,t),ne?Y(o,m.precision,m.rounding):o};M.toBinary=function(o,e){return Eo(this,2,o,e)};M.toDecimalPlaces=M.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(Je(o,0,Gt),e===void 0?e=n.rounding:Je(e,0,8),Y(t,o+t.e+1,e))};M.toExponential=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Bt(n,!0):(Je(o,0,Gt),e===void 0?e=r.rounding:Je(e,0,8),n=Y(new r(n),o+1,e),t=Bt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toFixed=function(o,e){var t,n,r=this,i=r.constructor;return o===void 0?t=Bt(r):(Je(o,0,Gt),e===void 0?e=i.rounding:Je(e,0,8),n=Y(new i(r),o+r.e+1,e),t=Bt(n,!1,o+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};M.toFraction=function(o){var e,t,n,r,i,s,a,u,c,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(c=t=new f(1),n=u=new f(0),e=new f(n),i=e.e=ds(y)-p.e-1,s=i%J,e.d[0]=Re(10,s<0?J+s:s),o==null)o=i>0?e:c;else{if(a=new f(o),!a.isInt()||a.lt(c))throw Error(Ut+a);o=a.gt(e)?i>0?e:c:a}for(ne=!1,a=new f(ve(y)),l=f.precision,f.precision=i=y.length*J*2;m=ge(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(o)!=1;)t=n,n=r,r=c,c=u.plus(m.times(r)),u=r,r=e,e=a.minus(m.times(r)),a=r;return r=ge(o.minus(t),n,0,1,1),u=u.plus(r.times(c)),t=t.plus(r.times(n)),u.s=c.s=p.s,d=ge(c,n,i,1).minus(p).abs().cmp(ge(u,t,i,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,ne=!0,d};M.toHexadecimal=M.toHex=function(o,e){return Eo(this,16,o,e)};M.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:Je(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(ne=!1,t=ge(t,o,0,e,1).times(o),ne=!0,Y(t)):(o.s=t.s,t=o),t};M.toNumber=function(){return+this};M.toOctal=function(o,e){return Eo(this,8,o,e)};M.toPower=M.pow=function(o){var e,t,n,r,i,s,a=this,u=a.constructor,c=+(o=new u(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new u(Re(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,i=u.rounding,o.eq(1))return Y(a,n,i);if(e=We(o.e/J),e>=o.d.length-1&&(t=c<0?-c:c)<=Mu)return r=ps(u,a,t,n),o.s<0?new u(1).div(r):Y(r,n,i);if(s=a.s,s<0){if(e<o.d.length-1)return new u(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Re(+a,c),e=t==0||!isFinite(t)?We(c*(Math.log("0."+ve(a.d))/Math.LN10+a.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?s/0:0):(ne=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),r=vo(o.times(qt(a,n+t)),n),r.d&&(r=Y(r,n+5,1),Mn(r.d,n,i)&&(e=n+10,r=Y(vo(o.times(qt(a,e+t)),e),e+5,1),+ve(r.d).slice(n+1,n+15)+1==1e14&&(r=Y(r,n+1,0)))),r.s=s,ne=!0,u.rounding=i,Y(r,n,i))};M.toPrecision=function(o,e){var t,n=this,r=n.constructor;return o===void 0?t=Bt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(Je(o,1,Gt),e===void 0?e=r.rounding:Je(e,0,8),n=Y(new r(n),o,e),t=Bt(n,o<=n.e||n.e<=r.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toSignificantDigits=M.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(Je(o,1,Gt),e===void 0?e=n.rounding:Je(e,0,8)),Y(new n(t),o,e)};M.toString=function(){var o=this,e=o.constructor,t=Bt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};M.truncated=M.trunc=function(){return Y(new this.constructor(this),this.e+1,1)};M.valueOf=M.toJSON=function(){var o=this,e=o.constructor,t=Bt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function ve(o){var e,t,n,r=o.length-1,i="",s=o[0];if(r>0){for(i+=s,e=1;e<r;e++)n=o[e]+"",t=J-n.length,t&&(i+=Wt(t)),i+=n;s=o[e],n=s+"",t=J-n.length,t&&(i+=Wt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function Je(o,e,t){if(o!==~~o||o<e||o>t)throw Error(Ut+o)}function Mn(o,e,t,n){var r,i,s,a;for(i=o[0];i>=10;i/=10)--e;return--e<0?(e+=J,r=0):(r=Math.ceil((e+1)/J),e%=J),i=Re(10,J-e),a=o[r]%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)&&(o[r+1]/i/100|0)==Re(10,e-2)-1||(a==i/2||a==0)&&(o[r+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)&&(o[r+1]/i/1e3|0)==Re(10,e-3)-1,s}function Br(o,e,t){for(var n,r=[0],i,s=0,a=o.length;s<a;){for(i=r.length;i--;)r[i]*=e;for(r[0]+=No.indexOf(o.charAt(s++)),n=0;n<r.length;n++)r[n]>t-1&&(r[n+1]===void 0&&(r[n+1]=0),r[n+1]+=r[n]/t|0,r[n]%=t)}return r.reverse()}function vu(o,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/Lr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),o.precision+=t,e=An(o,1,e.times(r),new o(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var ge=function(){function o(n,r,i){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*r+a,n[u]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,r,i,s){var a,u;if(i!=s)u=i>s?1:-1;else for(a=u=0;a<i;a++)if(n[a]!=r[a]){u=n[a]>r[a]?1:-1;break}return u}function t(n,r,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<r[i]?1:0,n[i]=a*s+n[i]-r[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,r,i,s,a,u){var c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,L,I,R,D,F=n.constructor,Z=n.s==r.s?1:-1,G=n.d,q=r.d;if(!G||!G[0]||!q||!q[0])return new F(!n.s||!r.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?Z*0:Z/0);for(u?(p=1,l=n.e-r.e):(u=yt,p=J,l=We(n.e/p)-We(r.e/p)),R=q.length,L=G.length,g=new F(Z),h=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,i==null?(T=i=F.precision,s=F.rounding):a?T=i+(n.e-r.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,R==1){for(d=0,q=q[0],T++;(m<L||d)&&T--;m++)S=d*u+(G[m]||0),h[m]=S/q|0,d=S%q|0;y=d||m<L}else{for(d=u/(q[0]+1)|0,d>1&&(q=o(q,d,u),G=o(G,d,u),R=q.length,L=G.length),x=R,A=G.slice(0,R),k=A.length;k<R;)A[k++]=0;D=q.slice(),D.unshift(0),I=q[0],q[1]>=u/2&&++I;do d=0,c=e(q,A,R,k),c<0?(B=A[0],R!=k&&(B=B*u+(A[1]||0)),d=B/I|0,d>1?(d>=u&&(d=u-1),f=o(q,d,u),b=f.length,k=A.length,c=e(f,A,b,k),c==1&&(d--,t(f,R<b?D:q,b,u))):(d==0&&(c=d=1),f=q.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,u),c==-1&&(k=A.length,c=e(q,A,R,k),c<1&&(d++,t(A,R<k?D:q,k,u))),k=A.length):c===0&&(d++,A=[0]),h[m++]=d,c&&A[0]?A[k++]=G[x]||0:(A=[G[x]],k=1);while((x++<L||A[0]!==void 0)&&T--);y=A[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,as=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,Y(g,a?i+g.e+1:i,s,y)}return g}}();function Y(o,e,t,n){var r,i,s,a,u,c,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(r=1,a=m[0];a>=10;a/=10)r++;if(i=e-r,i<0)i+=J,s=e,l=m[d=0],u=l/Re(10,r-s-1)%10|0;else if(d=Math.ceil((i+1)/J),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,r=1,i%=J,s=i-J+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;i%=J,s=i-J+r,u=s<0?0:l/Re(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Re(10,r-s-1)),c=t<4?(u||n)&&(t==0||t==(o.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(i>0?s>0?l/Re(10,r-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=o.e+1,m[0]=Re(10,(J-e%J)%J),o.e=-e||0):m[0]=o.e=0,o;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Re(10,J-i),m[d]=s>0?(l/Re(10,r-s)%Re(10,s)|0)*a:0),c)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&&(o.e++,m[0]==yt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=yt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return ne&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Bt(o,e,t){if(!o.isFinite())return ys(o);var n,r=o.e,i=ve(o.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Wt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o.e<0?"e":"e+")+o.e):r<0?(i="0."+Wt(-r-1)+i,t&&(n=t-s)>0&&(i+=Wt(n))):r>=s?(i+=Wt(r+1-s),t&&(n=t-r-1)>0&&(i=i+"."+Wt(n))):((n=r+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(i+="."),i+=Wt(n))),i}function Rr(o,e){var t=o[0];for(e*=J;t>=10;t/=10)e++;return e}function Kr(o,e,t){if(e>_u)throw ne=!0,t&&(o.precision=t),Error(us);return Y(new o(xr),e,1,!0)}function ft(o,e,t){if(e>_o)throw Error(us);return Y(new o(Sr),e,t,!0)}function ds(o){var e=o.length-1,t=e*J+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function Wt(o){for(var e="";o--;)e+="0";return e}function ps(o,e,t,n){var r,i=new o(1),s=Math.ceil(n/J+4);for(ne=!1;;){if(t%2&&(i=i.times(e),is(i.d,s)&&(r=!0)),t=We(t/2),t===0){t=i.d.length-1,r&&i.d[t]===0&&++i.d[t];break}e=e.times(e),is(e.d,s)}return ne=!0,i}function os(o){return o.d[o.d.length-1]&1}function fs(o,e,t){for(var n,r=new o(e[0]),i=0;++i<e.length;)if(n=new o(e[i]),n.s)r[t](n)&&(r=n);else{r=n;break}return r}function vo(o,e){var t,n,r,i,s,a,u,c=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(ne=!1,u=y):u=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Re(2,m))/Math.LN10*2+5|0,u+=n,t=i=s=new d(1),d.precision=u;;){if(i=Y(i.times(o),u,1),t=t.times(++l),a=s.plus(ge(i,t,u,1)),ve(a.d).slice(0,u)===ve(s.d).slice(0,u)){for(r=m;r--;)s=Y(s.times(s),u,1);if(e==null)if(c<3&&Mn(s.d,u-n,p,c))d.precision=u+=10,t=i=a=new d(1),l=0,c++;else return Y(s,d.precision=y,p,ne=!0);else return d.precision=y,s}s=a}}function qt(o,e){var t,n,r,i,s,a,u,c,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,h=g.rounding,A=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?(ne=!1,l=A):l=e,g.precision=l+=y,t=ve(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(o),t=ve(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 c=Kr(g,l+2,A).times(i+""),f=qt(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?Y(f,A,h,ne=!0):f;for(m=f,u=s=f=ge(f.minus(1),f.plus(1),l,1),d=Y(f.times(f),l,1),r=3;;){if(s=Y(s.times(d),l,1),c=u.plus(ge(s,new g(r),l,1)),ve(c.d).slice(0,l)===ve(u.d).slice(0,l))if(u=u.times(2),i!==0&&(u=u.plus(Kr(g,l+2,A).times(i+""))),u=ge(u,new g(p),l,1),e==null)if(Mn(u.d,l-y,h,a))g.precision=l+=y,c=s=f=ge(m.minus(1),m.plus(1),l,1),d=Y(f.times(f),l,1),r=a=1;else return Y(u,g.precision=A,h,ne=!0);else return g.precision=A,u;u=c,r+=2}}function ys(o){return String(o.s*o.s/0)}function Vo(o,e){var t,n,r;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(r=e.length;e.charCodeAt(r-1)===48;--r);if(e=e.slice(n,r),e){if(r-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%J,t<0&&(n+=J),n<r){for(n&&o.d.push(+e.slice(0,n)),r-=J;n<r;)o.d.push(+e.slice(n,n+=J));e=e.slice(n),n=J-e.length}else n-=r;for(;n--;)e+="0";o.d.push(+e),ne&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function Vu(o,e){var t,n,r,i,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),ms.test(e))return Vo(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(Ou.test(e))t=16,e=e.toLowerCase();else if(Lu.test(e))t=2;else if(Nu.test(e))t=8;else throw Error(Ut+e);for(i=e.search(/p/i),i>0?(u=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,r=ps(n,new n(t),i,i*2)),c=Br(e,t,yt),l=c.length-1,i=l;c[i]===0;--i)c.pop();return i<0?new n(o.s*0):(o.e=Rr(c,l),o.d=c,ne=!1,s&&(o=ge(o,r,a*4)),u&&(o=o.times(Math.abs(u)<54?Re(2,u):_n.pow(2,u))),ne=!0,o)}function Eu(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:An(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Lr(5,t)),e=An(o,2,e,e);for(var r,i=new o(5),s=new o(16),a=new o(20);t--;)r=e.times(e),e=e.times(i.plus(r.times(s.times(r).minus(a))));return e}function An(o,e,t,n,r){var i,s,a,u,c=1,l=o.precision,m=Math.ceil(l/J);for(ne=!1,u=t.times(t),a=new o(n);;){if(s=ge(a.times(u),new o(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=ge(s.times(u),new o(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,c++}return ne=!0,s.d.length=m+1,s}function Lr(o,e){for(var t=o;--e;)t*=o;return t}function bs(o,e){var t,n=e.s<0,r=ft(o,o.precision,1),i=r.times(.5);if(e=e.abs(),e.lte(i))return Mt=n?4:1,e;if(t=e.divToInt(r),t.isZero())Mt=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(i))return Mt=os(t)?n?2:3:n?4:1,e;Mt=os(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Eo(o,e,t,n){var r,i,s,a,u,c,l,m,d,p=o.constructor,y=t!==void 0;if(y?(Je(t,1,Gt),n===void 0?n=p.rounding:Je(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=ys(o);else{for(l=Bt(o),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Br(Bt(d),10,r),d.e=d.d.length),m=Br(l,10,r),i=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(o=new p(o),o.d=m,o.e=i,o=ge(o,d,t,n,0,r),m=o.d,i=o.e,c=as),s=m[t],a=r/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,c)for(;++m[--t]>r-1;)m[t]=0,t||(++i,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=No.charAt(m[s]);if(y){if(u>1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)l+="0";for(m=Br(l,r,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=No.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>u)for(i-=u;i--;)l+="0";else i<u&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function is(o,e){if(o.length>e)return o.length=e,!0}function Fu(o){return new this(o).abs()}function Du(o){return new this(o).acos()}function Wu(o){return new this(o).acosh()}function qu(o,e){return new this(o).plus(e)}function Uu(o){return new this(o).asin()}function Gu(o){return new this(o).asinh()}function Xu(o){return new this(o).atan()}function zu(o){return new this(o).atanh()}function Qu(o,e){o=new this(o),e=new this(e);var t,n=this.precision,r=this.rounding,i=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=ft(this,i,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?ft(this,n,r):new this(0),t.s=o.s):!o.d||e.isZero()?(t=ft(this,i,1).times(.5),t.s=o.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(ge(o,e,i,1)),e=ft(this,i,1),this.precision=n,this.rounding=r,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(ge(o,e,i,1)),t}function Yu(o){return new this(o).cbrt()}function ju(o){return Y(o=new this(o),o.e+1,2)}function Hu(o,e,t){return new this(o).clamp(e,t)}function Zu(o){if(!o||typeof o!="object")throw Error(Cr+"Object expected");var e,t,n,r=o.defaults===!0,i=["precision",1,Gt,"rounding",0,8,"toExpNeg",-wn,0,"toExpPos",0,wn,"maxE",0,wn,"minE",-wn,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],r&&(this[t]=Mo[t]),(n=o[t])!==void 0)if(We(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(Ut+t+": "+n);if(t="crypto",r&&(this[t]=Mo[t]),(n=o[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(cs);else this[t]=!1;else throw Error(Ut+t+": "+n);return this}function Ju(o){return new this(o).cos()}function $u(o){return new this(o).cosh()}function gs(o){var e,t,n;function r(i){var s,a,u,c=this;if(!(c instanceof r))return new r(i);if(c.constructor=r,ss(i)){c.s=i.s,ne?!i.d||i.e>r.maxE?(c.e=NaN,c.d=null):i.e<r.minE?(c.e=0,c.d=[0]):(c.e=i.e,c.d=i.d.slice()):(c.e=i.e,c.d=i.d?i.d.slice():i.d);return}if(u=typeof i,u==="number"){if(i===0){c.s=1/i<0?-1:1,c.e=0,c.d=[0];return}if(i<0?(i=-i,c.s=-1):c.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;ne?s>r.maxE?(c.e=NaN,c.d=null):s<r.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[i]):(c.e=s,c.d=[i]);return}else if(i*0!==0){i||(c.s=NaN),c.e=NaN,c.d=null;return}return Vo(c,i.toString())}else if(u!=="string")throw Error(Ut+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),c.s=-1):(a===43&&(i=i.slice(1)),c.s=1),ms.test(i)?Vo(c,i):Vu(c,i)}if(r.prototype=M,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=Zu,r.clone=gs,r.isDecimal=ss,r.abs=Fu,r.acos=Du,r.acosh=Wu,r.add=qu,r.asin=Uu,r.asinh=Gu,r.atan=Xu,r.atanh=zu,r.atan2=Qu,r.cbrt=Yu,r.ceil=ju,r.clamp=Hu,r.cos=Ju,r.cosh=$u,r.div=ec,r.exp=tc,r.floor=nc,r.hypot=rc,r.ln=oc,r.log=ic,r.log10=ac,r.log2=sc,r.max=uc,r.min=cc,r.mod=lc,r.mul=mc,r.pow=dc,r.random=pc,r.round=fc,r.sign=yc,r.sin=bc,r.sinh=gc,r.sqrt=wc,r.sub=Ac,r.sum=hc,r.tan=Pc,r.tanh=kc,r.trunc=Tc,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return r.config(o),r}function ec(o,e){return new this(o).div(e)}function tc(o){return new this(o).exp()}function nc(o){return Y(o=new this(o),o.e+1,3)}function rc(){var o,e,t=new this(0);for(ne=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return ne=!0,new this(1/0);t=e}return ne=!0,t.sqrt()}function ss(o){return o instanceof _n||o&&o.toStringTag===ls||!1}function oc(o){return new this(o).ln()}function ic(o,e){return new this(o).log(e)}function sc(o){return new this(o).log(2)}function ac(o){return new this(o).log(10)}function uc(){return fs(this,arguments,"lt")}function cc(){return fs(this,arguments,"gt")}function lc(o,e){return new this(o).mod(e)}function mc(o,e){return new this(o).mul(e)}function dc(o,e){return new this(o).pow(e)}function pc(o){var e,t,n,r,i=0,s=new this(1),a=[];if(o===void 0?o=this.precision:Je(o,1,Gt),n=Math.ceil(o/J),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)r=e[i],r>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=r%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)r=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(r%1e7),i+=4);i=n/4}else throw Error(cs);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],o%=J,n&&o&&(r=Re(10,J-o),a[i]=(n/r|0)*r);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=J)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<J&&(t-=J-n)}return s.e=t,s.d=a,s}function fc(o){return Y(o=new this(o),o.e+1,this.rounding)}function yc(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function bc(o){return new this(o).sin()}function gc(o){return new this(o).sinh()}function wc(o){return new this(o).sqrt()}function Ac(o,e){return new this(o).sub(e)}function hc(){var o=0,e=arguments,t=new this(e[o]);for(ne=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return ne=!0,Y(t,this.precision,this.rounding)}function Pc(o){return new this(o).tan()}function kc(o){return new this(o).tanh()}function Tc(o){return Y(o=new this(o),o.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var _n=M.constructor=gs(Mo);xr=new _n(xr);Sr=new _n(Sr);var _=_n;import{PublicKey as Uo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ic}from"@solana/spl-token";import{PublicKey as Ae,SystemProgram as ws,SYSVAR_RENT_PUBKEY as Bc}from"@solana/web3.js";function P({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var Fo=[P({pubkey:Ic,isWritable:!1}),P({pubkey:ws.programId,isWritable:!1}),P({pubkey:Bc,isWritable:!1})];function Do({publicKey:o,transformSol:e}){let t=Wo(o.toString());if(t instanceof Ae)return e&&t.equals(Le)?j:t;if(e&&t.toString()===Le.toBase58())return j;if(typeof t=="string"){if(t===Ae.default.toBase58())return Ae.default;try{return new Ae(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Wo(o){try{return new Ae(o)}catch{return o}}var Or=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Nr=new Ae("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),bt=new Ae("SysvarRent111111111111111111111111111111111"),As=new Ae("SysvarC1ock11111111111111111111111111111111"),hn=new Ae("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),xc=new Ae("Sysvar1nstructions1111111111111111111111111"),qo=ws.programId,xd=new Ae("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Sd=new Ae("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Kd=new Ae("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Cd=new Ae("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Rd=new Ae("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Ld=new Ae("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Od=new Ae("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Nd=new Ae("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Md=new Ae("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),_d=new Ae("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),vd=new Ae("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new Ae("So11111111111111111111111111111111111111112"),Le=Ae.default;function nt(o){return Do({publicKey:o,transformSol:!0})}import{PublicKey as Sc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hs}from"@solana/spl-token";var Xt={chainId:101,address:Sc.default.toBase58(),programId:hs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ve={chainId:101,address:"So11111111111111111111111111111111111111112",programId:hs.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 Go=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:i=!1,isToken2022:s=!1}){if(e===Le.toBase58()||e instanceof Uo&&Le.equals(e)){this.decimals=Ve.decimals,this.symbol=Ve.symbol,this.name=Ve.name,this.mint=new Uo(Ve.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=r||e.toString().substring(0,6),this.mint=i?Uo.default:Do({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},he=Go;he.WSOL=new Go(E(C({},Ve),{mint:Ve.address}));import _r from"big.js";import Rc from"bn.js";import Lc from"decimal.js-light";import Kc from"toformat";var Cc=Kc,vn=Cc;var Mr=se("module/fraction"),Xo=vn(_r),Vn=vn(Lc),Oc={[0]:Vn.ROUND_DOWN,[1]:Vn.ROUND_HALF_UP,[2]:Vn.ROUND_UP},Nc={[0]:_r.roundDown,[1]:_r.roundHalfUp,[2]:_r.roundUp},de=class{constructor(e,t=new Rc(1)){this.numerator=H(e),this.denominator=H(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new de(this.denominator,this.numerator)}add(e){let t=e instanceof de?e:new de(H(e));return this.denominator.eq(t.denominator)?new de(this.numerator.add(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof de?e:new de(H(e));return this.denominator.eq(t.denominator)?new de(this.numerator.sub(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof de?e:new de(H(e));return new de(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof de?e:new de(H(e));return new de(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Mr.logWithError(`${e} is not an integer.`),e<=0&&Mr.logWithError(`${e} is not positive.`),Vn.set({precision:e+1,rounding:Oc[n]});let r=new Vn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return r.toFormat(r.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Mr.logWithError(`${e} is not an integer.`),e<0&&Mr.logWithError(`${e} is negative.`),Xo.DP=e,Xo.RM=Nc[n]||1,new Xo(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var _c=se("Raydium_price"),$e=class extends de{constructor(t){let{baseToken:n,quoteToken:r,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=r,this.scalar=new de(zo(n.decimals),zo(r.decimals))}get raw(){return new de(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new $e({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&_c.logWithError("mul token not equals");let n=super.mul(t);return new $e({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,r){return this.adjusted.toSignificant(t,n,r)}toFixed(t=this.quoteToken.decimals,n,r){return this.adjusted.toFixed(t,n,r)}};var Qo=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},vr=Qo;vr.SOL=new Qo(Xt);import vc from"bn.js";var Ps=new de(new vc(100)),Ye=class extends de{toSignificant(e=5,t,n){return this.mul(Ps).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Ps).toFixed(e,t,n)}};var at=new et(0),Ts=new et(1),Op=new et(2),Np=new et(3),Mp=new et(5),Yo=new et(10),_p=new et(100),vp=new et(1e3),Vp=new et(1e4),ks=9007199254740991;function H(o){let e=se("Raydium_parseBigNumberish");if(o instanceof et)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new et(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=ks||o<=-ks)&&e.logWithError(`BigNumberish number overflow: ${o}`),new et(String(o))):typeof o=="bigint"?new et(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new et(0))}function zo(o){return Yo.pow(H(o))}function Vr(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var Ec=se("Raydium_amount"),Bs=vn(Vc);function Fc(o,e){let t="0",n="0";if(o.includes(".")){let r=o.split(".");r.length===2?([t,n]=r,n=n.padEnd(e,"0")):Ec.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var ye=class extends de{constructor(t,n,r=!0,i){let s=new Er(0),a=Yo.pow(new Er(t.decimals));if(r)s=H(n);else{let u=new Er(0),c=new Er(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Fc(n.toString(),t.decimals);u=H(l),c=H(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=se(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 ye(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ye(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.token.decimals,n,r=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return Bs.DP=this.token.decimals,new Bs(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function Is(o){return typeof o=="object"&&o!==null&&![he,ye,Dc,de,Wc,$e,Ye].some(e=>typeof e=="object"&&o instanceof e)}function Ee(o){return typeof o=="string"?Wo(o):Array.isArray(o)?o.map(e=>Ee(e)):Is(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ee(t)])):o}import{PublicKey as Dn,sendAndConfirmTransaction as $o,Transaction as Wn,TransactionMessage as qn,VersionedTransaction as Un}from"@solana/web3.js";import Hc 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 qc,ComputeBudgetProgram as xs,Transaction as Ks,TransactionMessage as Uc,Keypair as Cs,VersionedTransaction as Rs}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gc}from"@solana/spl-token";var Ss=se("Raydium_txUtil"),Ls=1644;function Fr(o){let e=[],t=[];return o.microLamports&&(e.push(xs.setComputeUnitPrice({microLamports:o.microLamports})),t.push(v.SetComputeUnitPrice)),o.units&&(e.push(xs.setComputeUnitLimit({units:o.units})),t.push(v.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Pn(o,e){var n,r;let t=e!=null?e:"confirmed";try{return((r=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:r.blockhash)||(await o.getRecentBlockhash(t)).blockhash}catch{return(await o.getRecentBlockhash(t)).blockhash}}function jo(o,e){o.length<1&&Ss.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Ss.logWithError(`no signers provided:, ${e.toString()}`);let t=new Ks;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Ls}catch{return!1}}function le(o,e){let[t,n]=qc.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}function En({instructions:o,payer:e,signers:t}){return jo(o,[e,...t])}function Fn({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Cs.generate().publicKey.toString()}){let i=new Uc({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Rs(i).serialize()).toString("base64").length<Ls}catch{return!1}}var Xc=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o);function en(o){let e=[];return o.forEach(t=>{t instanceof Ks&&(t.recentBlockhash||(t.recentBlockhash=Gc.toBase58()),t.feePayer||(t.feePayer=Cs.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof Rs&&(n=Xc(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}import{PublicKey as Ns,AddressLookupTableAccount as Dr}from"@solana/web3.js";import{PublicKey as Os}from"@solana/web3.js";import{MINT_SIZE as zc,TOKEN_PROGRAM_ID as Qc,getTransferFeeConfig as Yc,unpackMint as jc}from"@solana/spl-token";var Ho=se("Raydium_accountInfo_util");async function gt(o,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=Zo(e,i),a=new Array(s.length).fill([]);if(n){let u=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),c=Zo(u,10);a=(await(await Promise.all(c.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Ho.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"&&Ho.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Os(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(u=>o.getMultipleAccountsInfo(u,r)))}catch(u){u instanceof Error&&Ho.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Ne(o,e,t){let n=await gt(o,e.map(r=>r.pubkey),t);return e.map((r,i)=>E(C({},r),{accountInfo:n[i]}))}async function kn({connection:o,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await Ne(o,e.map(u=>({pubkey:nt(u)})),t),r={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<zc){console.log("invalid mint account",u.pubkey.toBase58());continue}let c=jc(u.pubkey,u.accountInfo,(i=u.accountInfo)==null?void 0:i.owner);r[u.pubkey.toString()]=E(C({},c),{programId:((s=u.accountInfo)==null?void 0:s.owner)||Qc,feeConfig:(a=Yc(c))!=null?a:void 0})}return r[Os.default.toBase58()]=r[j.toBase58()],r}async function Jo({connection:o,address:e}){let t=await gt(o,[...new Set(e.map(r=>r.toString()))].map(r=>new Ns(r))),n={};for(let r=0;r<e.length;r++){let i=t[r],s=e[r];if(!i)continue;let a=new Dr({key:s,state:Dr.deserialize(i.data)});n[s.toString()]=a,Wr[s.toString()]=a}return n}var Wr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new Dr({key:new Ns("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:Dr.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 qr=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 Hc.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}=Fr(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:r=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...r),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Dn.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 Wn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.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 r=>{var c;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=r||{},u=i!=null?i:await Pn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),en([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await $o(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 c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.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:u,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Pn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let A=await $o(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(A)}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((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));en(g);let h=await this.signAllTransactions(g);if(m){let A=0,k=[],B=async()=>{if(!h[A])return;let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[A]}),d==null||d([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(L=>L.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 A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});A.push(B)}return{txIds:A,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:r}=d,i=Be(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:Wr),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of a)s[y]===void 0&&u.push(new Dn(y));let c=await Jo({connection:this.connection,address:u});for(let[y,f]of Object.entries(c))s[y]=f;let l=new qn({payerKey:this.feePayer,recentBlockhash:r?Dn.default.toBase58():await Pn(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 Un(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),en([m]),(h=this.owner)!=null&&h.isKeyPair){let A=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:A},"confirmed")}return{txId:A,signedTx:m}}if(this.signAllTransactions){let A=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(A[0],{skipPreflight:b}),signedTx:A[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[r,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],u=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.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:u,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),en(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:A,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:A,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=[],A=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||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let A=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(A)}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 c=e||{},{computeBudgetConfig:t}=c,n=Be(c,["computeBudgetConfig"]),r=t?Fr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>E(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(m=>{let d=[...u,m],p=t?[...r.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 Dn(b));if(u.length<12&&En({instructions:p,payer:this.feePayer,signers:f})||En({instructions:d,payer:this.feePayer,signers:f}))u.push(m);else{if(u.length===0)throw Error("item ins too big");En({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:f})?s.push(new Wn().add(...r.instructions,...u)):s.push(new Wn().add(...u)),a.push(Array.from(new Set(u.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),u=[m]}}),u.length>0){let d=[...new Set(u.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);En({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Wn().add(...r.instructions,...u)):s.push(new Wn().add(...u)),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))||m.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 Pn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,A)=>{h.recentBlockhash=b,a[A].length&&h.sign(...a[A])}),en(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let A of s){let k=await $o(this.connection,A,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 A=0,k=[],B=async()=>{if(!h[A])return;let T=await this.connection.sendRawTransaction(h[A].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[A]}),p==null||p([...k]),A++,this.connection.onSignature(T,S=>{let x=k.findIndex(L=>L.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 A=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});A.push(B)}return{txIds:A,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:r=[]}=b,i=Be(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:Wr),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let h of a)s[h]===void 0&&u.push(new Dn(h));let c=await Jo({connection:this.connection,address:u});for(let[h,A]of Object.entries(c))s[h]=A;let l=t?Fr(t):{instructions:[],instructionTypes:[]},m=await Pn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,A)=>E(C({},h),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let A=[...f,h],k=t?[...l.instructions,...A]:A;if(f.length<12&&Fn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Fn({instructions:A,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&&Fn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(T))}else{let T=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(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 A=[...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&&Fn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}else{let k=new qn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Un(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(A=>A.publicKey.equals(this.owner.publicKey))||h.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:A,onTxUpdate:k,recentBlockHash:B,skipPreflight:T=!0}=h||{};if(p.map(async(x,L)=>{y[L].length&&x.sign(y[L]),B&&(x.message.recentBlockhash=B)}),en(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let x=[];for(let L of p){let I=await this.connection.sendTransaction(L,{skipPreflight:T}),{lastValidBlockHeight:R,blockhash:D}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:D,lastValidBlockHeight:R,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(A){let L=0,I=[],R=async()=>{if(!x[L])return;let D=await this.connection.sendTransaction(x[L],{skipPreflight:T});I.push({txId:D,status:"sent",signedTx:x[L]}),k==null||k([...I]),L++,this.connection.onSignature(D,F=>{let Z=I.findIndex(G=>G.txId===D);Z>-1&&(I[Z].status=F.err?"error":"success"),k==null||k([...I]),F.err||R()},"processed"),this.connection.getSignatureStatus(D)};return R(),{txIds:[],signedTxs:x}}else{let L=[];for(let I=0;I<x.length;I+=1){let R=await this.connection.sendTransaction(x[I],{skipPreflight:T});L.push(R)}return{txIds:L,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var wt=class{constructor(e){this._owner=e}get publicKey(){return wt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return wt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return wt.isKeyPair(this._owner)}get isPublicKey(){return wt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!wt.isKeyPair(e)}};function Zo(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}import{PublicKey as ue}from"@solana/web3.js";var Ms=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),_s=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Xn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Yf=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),jf=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),ei=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),vs=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Hf=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Vs=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Es=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Zf=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Jf=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Zc=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Jc=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),$c=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),el=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Fs=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),$f=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),ey=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),tl=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),nl=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),rl=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),zn={IDO_PROGRAM_ID_V1:Zc,IDO_PROGRAM_ID_V2:Jc,IDO_PROGRAM_ID_V3:$c,IDO_PROGRAM_ID_V4:el};var ty={SERUM_MARKET:ue.default,OPENBOOK_MARKET:new ue("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ue.default,FarmV3:new ue("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ue("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ue("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ue("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ue("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ue("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:tl,CREATE_CPMM_POOL_AUTH:nl,CREATE_CPMM_POOL_FEE_ACC:rl,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as ol}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as il}from"@solana/spl-token";function Pe(o,e,t){return le([o.toBuffer(),(t!=null?t:il).toBuffer(),e.toBuffer()],new ol("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import At from"bn.js";var Qn=1e4;function we(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let r=E(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<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new At(i.maximumFee.toString()),a=t.epoch<r.newerTransferFee.epoch?(Number(r.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===Qn){let u=new At(i.maximumFee.toString());return{amount:o.add(u),fee:u,expirationTime:a}}else{let u=Yn(o.mul(new At(Qn)),new At(Qn-i.transferFeeBasisPoints)),c=new At(i.maximumFee.toString()),l=u.sub(o).gt(c)?o.add(c):u,m=Yn(l.mul(new At(i.transferFeeBasisPoints)),new At(Qn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=Yn(o.mul(new At(i.transferFeeBasisPoints)),new At(Qn)),c=u.gt(s)?s:u;return{amount:o,fee:c,expirationTime:a}}}function xt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function Yn(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new At(0))?t.add(new At(1)):t}var Ce={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://tokens.jup.ag/tokens?tags=lst,community",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"},Sy=C({},Ce);var Ds="ray_tab_hash",ti="ray_req_hash",sl=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(Ds);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(Ds,o)),o},Ur=async n=>{var r=n,{logCount:o=1e3,removeLastLog:e}=r,t=Be(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(ti)||"[]").slice(0,o-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(E(C({},t),{time:Date.now(),session:sl()}));try{localStorage.setItem(ti,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 u=JSON.stringify(t.data).substring(0,100);i[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(ti,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(u=>u())}return Ur(E(C({},t),{logCount:o,removeLastLog:!0}))}};var Gr=se("Raydium_Api"),ni=new Map;var Xr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=r||1e3,this.api=Ws.create({baseURL:this.urlConfigs.BASE_HOST||Ce.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return Gr.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(Gr.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:u,status:c}=s,{method:l,baseURL:m,url:d}=a;return n&&Ur({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),Gr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:d}=a;return n&&Ur({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Gr.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ce.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ce.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Ws.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(r=>r.numSlots);return n.reduce((r,i)=>r+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ce.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ce.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ce.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Ce.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ce.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:r="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ce.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${r}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ce.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>ni.has(s)?(n.push(ni.get(s)),!1):!0),i=[];return r.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ce.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),i.forEach(a=>{ni.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:r="all",sort:i="default",order:s="desc",page:a=1}=e,[u,c]=[t&&nt(t).toBase58(),n&&n!=="undefined"?nt(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ce.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&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||Ce.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ce.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ce.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ce.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ce.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ce.JITO})).data}};var zr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",qs="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as pi,TOKEN_PROGRAM_ID as Yt,AccountLayout as Bn,TOKEN_2022_PROGRAM_ID as _l}from"@solana/spl-token";import{PublicKey as eo,SystemProgram as vl}from"@solana/web3.js";var ri=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),ke=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=se(t)}createTxBuilder(e){return this.scope.checkOwner(),new qr({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(ri(e))}logInfo(...e){this.logger.info(ri(e))}logAndCreateError(...e){let t=ri(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Cl,createCloseAccountInstruction as Rl,createTransferInstruction as Ll,TOKEN_PROGRAM_ID as In}from"@solana/spl-token";import{PublicKey as Ol,SystemProgram as Nl}from"@solana/web3.js";import Ml from"bn.js";import{PublicKey as na,Keypair as Bl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as xl}from"@solana/spl-token";import Sl from"bn.js";import{PublicKey as wl}from"@solana/web3.js";import Qs,{isBN as Ys}from"bn.js";import{bits as al,BitStructure as ub,blob as ul,Blob as cb,cstr as lb,f32 as mb,f32be as db,f64 as pb,f64be as fb,greedy as yb,Layout as cl,ns64 as bb,ns64be as gb,nu64 as ll,nu64be as wb,offset as Ab,s16 as hb,s16be as Pb,s24 as kb,s24be as Tb,s32 as ml,s32be as Ib,s40 as Bb,s40be as xb,s48 as Sb,s48be as Kb,s8 as Cb,seq as dl,struct as Rb,Structure as pl,u16 as fl,u16be as Lb,u24 as Ob,u24be as Nb,u32 as yl,u32be as Mb,u40 as _b,u40be as vb,u48 as Vb,u48be as Eb,u8 as bl,UInt as gl,union as Fb,Union as Db,unionLayoutDiscriminator as Wb,utf8 as qb}from"@solana/buffer-layout";var Qr=cl,Us=pl;var oi=gl;var Gs=bl,St=fl;var ii=yl;var Xs=ll;var Fe=ml;var zs=dl;var pe=ul;var si=al;var tn=class extends Qr{constructor(t,n,r){super(t,r);this.blob=pe(t),this.signed=n}decode(t,n=0){let r=new Qs(this.blob.decode(t,n),10,"le");return this.signed?r.fromTwos(this.span*8).clone():r}encode(t,n,r=0){return typeof t=="number"&&(t=new Qs(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},Yr=class extends Qr{constructor(t){super(8,t);this._lower=si(ii(),!1),this._upper=si(ii(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},r),i)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function W(o){return new oi(1,o)}function je(o){return new oi(4,o)}function w(o){return new tn(8,!1,o)}function z(o){return new tn(16,!1,o)}function js(o){return new tn(1,!0,o)}function Hr(o){return new tn(8,!0,o)}function Hs(o){return new tn(16,!0,o)}var jr=class extends Qr{constructor(t,n,r,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=r}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,r){return this.layout.encode(this.encoder(t),n,r)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new jr(pe(32),e=>new wl(e),e=>e.toBuffer(),o)}function qe(o){return new jr(Gs(),Al,hl,o)}function Al(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function hl(o){return o?1:0}var ai=class extends Us{decode(e,t){return super.decode(e,t)}};function V(o,e,t){return new ai(o,e,t)}function X(o,e,t){let n,r=typeof e=="number"?e:Ys(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Ys(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 zs(o,r,t)}var Tn=V([K("mint"),K("owner"),w("amount"),je("delegateOption"),K("delegate"),W("state"),je("isNativeOption"),w("isNative"),w("delegatedAmount"),je("closeAuthorityOption"),K("closeAuthority")]);function Pl(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function ui(o,...e){if(!Pl(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function ci(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function Zs(o,e){ui(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Jr=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),ht=(o,e)=>o<<32-e|o>>>e;var rg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function kl(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function li(o){return typeof o=="string"&&(o=kl(o)),ui(o),o}var Zr=class{clone(){return this._cloneInto()}},og={}.toString;function Js(o){let e=n=>o().update(li(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Tl(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let r=BigInt(32),i=BigInt(4294967295),s=Number(t>>r&i),a=Number(t&i),u=n?4:0,c=n?0:4;o.setUint32(e+u,s,n),o.setUint32(e+c,a,n)}var $s=(o,e,t)=>o&e^~o&t,ea=(o,e,t)=>o&e^o&t^e&t,$r=class extends Zr{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=Jr(this.buffer)}update(e){ci(this);let{view:t,buffer:n,blockLen:r}=this;e=li(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(r-this.pos,i-s);if(a===r){let u=Jr(e);for(;r<=i-s;s+=r)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){ci(this),Zs(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;Tl(n,r-8,BigInt(this.length*8),i),this.process(n,0);let a=Jr(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,l=this.get();if(c>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<c;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:r,finished:i,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=i,e.destroyed=s,r%t&&e.buffer.set(n),e}};var Il=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]),zt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Qt=new Uint32Array(64),mi=class extends $r{constructor(){super(64,32,8,!1),this.A=zt[0]|0,this.B=zt[1]|0,this.C=zt[2]|0,this.D=zt[3]|0,this.E=zt[4]|0,this.F=zt[5]|0,this.G=zt[6]|0,this.H=zt[7]|0}get(){let{A:e,B:t,C:n,D:r,E:i,F:s,G:a,H:u}=this;return[e,t,n,r,i,s,a,u]}set(e,t,n,r,i,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=u|0}process(e,t){for(let m=0;m<16;m++,t+=4)Qt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=Qt[m-15],p=Qt[m-2],y=ht(d,7)^ht(d,18)^d>>>3,f=ht(p,17)^ht(p,19)^p>>>10;Qt[m]=f+Qt[m-7]+y+Qt[m-16]|0}let{A:n,B:r,C:i,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=ht(a,6)^ht(a,11)^ht(a,25),p=l+d+$s(a,u,c)+Il[m]+Qt[m]|0,f=(ht(n,2)^ht(n,13)^ht(n,22))+ea(n,r,i)|0;l=c,c=u,u=a,a=s+p|0,s=i,i=r,r=n,n=p+f|0}n=n+this.A|0,r=r+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,r,i,s,a,u,c,l)}roundClean(){Qt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ta=Js(()=>new mi);var Pg=se("Raydium_Util");function ra({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:i,account:s}of t.value){let a=Tn.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:i,mint:u,amount:c,isAssociated:Pe(o,u,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),r.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:na.default,amount:new Sl(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Ue({fromPublicKey:o,programId:e=xl}){let t=Bl.generate().publicKey.toBase58().slice(0,32);return{publicKey:Kl(o,t,e),seed:t}}function Kl(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),r=ta(n);return new na(r)}function di(o){let{mint:e,tokenAccount:t,owner:n,programId:r=In}=o;return Cl(t,e,n,r)}function Kt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:i=In}=o;return Rl(e,t,r,n,i)}async function _t(o){let{connection:e,amount:t,commitment:n,payer:r,owner:i,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(Tn.span,n),u=H(t).add(new Ml(a)),c=Ue({fromPublicKey:r,programId:In});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[Nl.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:Tn.span,programId:In}),di({mint:new Ol(Ve.address),tokenAccount:c.publicKey,owner:i,programId:In})],instructionTypes:[v.CreateAccount,v.InitAccount],endInstructionTypes:s?[]:[v.CloseAccount],endInstructions:s?[]:[Kt({tokenAccount:c.publicKey,payer:r,owner:i})]}}function jn({source:o,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:i=In}){return Ll(o,e,t,BigInt(String(n)),r,i)}var Hn=class extends ke{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=r||[],this._clientOwnedToken=!!(n||r)}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 Pe(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 r=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Yt},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:_l},r.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=ra({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,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:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=Yt,associatedOnly:r=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:u}=a;if(u&&(!r||r&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new eo(t.tokenProgram||Yt),m=this.getAssociatedTokenAccount(n,new eo(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,A)=>h.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=pi(s,m,s,n,l);if(c){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(v.CreateATA);else if(!(A.owner.equals(l)&&Bn.decode(A.data).mint.equals(n)&&Bn.decode(A.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(j)&&r.amount){let A=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.amount)!=null?f:0,skipCloseAccount:u});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),r.amount&&(p.instructions.push(jn({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:Yt})),p.instructionTypes.push(v.TransferAmount))}return u||(p.endInstructions.push(Kt({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:m,instructionParams:p}}else{let h=Ue({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(Bn.span),k=vl.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:A+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:Bn.span,programId:l});return p.instructions.push(k,di({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(v.CreateAccount),p.instructionTypes.push(v.InitAccount),u||(p.endInstructions.push(Kt({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(v.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=Yt,autoUnwrapWSOLToSOL:r}){var u;await this.fetchWalletTokenAccounts();let i=(u=this.scope.account.tokenAccounts.find(({mint:c})=>(c==null?void 0:c.toBase58())===t.toBase58()))==null?void 0:u.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let c=this.getAssociatedTokenAccount(t,n),l=await pi(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[v.CreateATA],i=c}return r&&j.toBase58()===t.toBase58()&&(a.endInstructions=[Kt({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[v.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:i,programId:s=Yt,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new eo(j).equals(i)){let p=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:r,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=pi(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(Yt)&&Bn.decode(f.data).mint.equals(i)&&Bn.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:r=Yt,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new eo(j))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Be(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Be(m,["tokenAccount"]);u=d,c.addInstruction(p)}return C({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as $l}from"@solana/spl-token";import{PublicKey as fe,SystemProgram as em}from"@solana/web3.js";import{PublicKey as sa}from"@solana/web3.js";var fi=V([W("instruction")]),yi=V([W("instruction")]),Vl=V([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),z("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),El=V([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),z("perShareReward"),w("lastSlot"),w("perSlotReward")]),Fl=V([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),z("perShareRewardA"),w("perSlotRewardA"),W("option"),K("rewardVaultB"),pe(7),w("totalRewardB"),z("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),Dl=V([w(),w("state"),w("nonce"),w("validRewardTokenNum"),z("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(Vl,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Wl=new Proxy(El,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(o,e,t)}}),ql=new Proxy(Fl,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(o,e,t)}}),to=new Proxy(Dl,{get(o,e,t){return e==="decode"?(...n)=>{let r=o.decode(...n);return E(C({},r),{version:6,rewardInfos:r.rewardInfos.map(i=>{var s;return E(C({},i),{rewardType:((s=Object.entries(jt).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),Ul=V([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),bi=V([W("instruction"),w("nonce"),X(Ul,5,"rewardTimeInfo")]),gi=V([W("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),wi=V([W("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),$g=V([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),Ai=V([w("state"),K("id"),K("owner"),w("deposited"),X(z(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),ew=V([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),oa=V([w("state"),K("id"),K("owner"),w("deposited"),X(z(),2,"rewardDebts"),X(w(),17)]),ia=V([w(),w("state"),K("id"),K("owner"),w("deposited"),X(z(),5,"rewardDebts"),X(w(),16)]),rt=V([W("instruction"),w("amount")]),Gl=V([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),js("digitShift"),X(W(),7,"reserved1"),X(w(),7,"reserved2")]),Xl=V([pe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(W(),32,"reserved1"),X(Gl,4,"votingMints"),Hr("timeOffset"),W("bump"),X(W(),7,"reserved2"),X(w(),11,"reserved3")]),zl=V([Hr("startTime"),Hr("endTime"),W("kind"),X(W(),15,"reserved")]),Ql=V([X(zl,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),W("votingMintConfigIdx"),X(W(),29,"reserved")]),Yl=V([pe(8),K("voterAuthority"),K("registrar"),X(Ql,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),X(W(),94,"reserved")]);var uw=se("Raydium_farm_config"),aa=new sa("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ua=new sa("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var ca={3:Ai,5:oa,6:ia},hi=o=>[3,5,6].indexOf(o)!==-1,Pi=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,r=`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: ${r}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${r}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${r}`}};return(s=i[e])==null?void 0:s.call(i)},jt={"Standard SPL":0,"Option tokens":1},ut={[Ms.toString()]:3,[_s.toString()]:5,[Xn.toString()]:6};import{PublicKey as me,SystemProgram as da,SYSVAR_RENT_PUBKEY as Zl,SYSVAR_CLOCK_PUBKEY as no,TransactionInstruction as Pt}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Fw,TOKEN_PROGRAM_ID as Ht,ASSOCIATED_TOKEN_PROGRAM_ID as Dw}from"@solana/spl-token";import pa from"bn.js";import jl from"bn.js";var Hl=se("Raydium.farm.util");function Zn({programId:o,poolId:e,mint:t,type:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return r}function ct({programId:o,poolId:e,owner:t,version:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return r}var la=({programId:o,poolId:e})=>le([e.toBuffer()],o);function ma(o){return{isSet:new jl(1),rewardPerSecond:H(o.perSecond),rewardOpenTime:H(o.openTime),rewardEndTime:H(o.endTime),rewardType:H(jt[o.rewardType])}}function ki(o){return H(o.endTime).sub(H(o.openTime)).mul(H(o.perSecond))}function Jn(o){let e=ca[o];return e||Hl.logWithError("invalid version",o),e}var Jl=se("Raydium_farm_instruction"),$w={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 $n(o){let{version:e,id:t,ledger:n,programId:r,owner:i}=o,s={3:9,5:10}[e];s||Jl.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(fi.span);fi.encode({instruction:s},a);let u=[P({pubkey:t}),P({pubkey:n}),P({pubkey:i,isWritable:!1}),P({pubkey:da.programId,isWritable:!1}),P({pubkey:Zl,isWritable:!1})];return{instruction:new Pt({programId:r,keys:u,data:a}),instructionType:v.FarmV3CreateLedger}}function fa(o){var n;let e=Buffer.alloc(bi.span);bi.encode({instruction:0,nonce:new pa(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...Fo,P({pubkey:o.farmId}),P({pubkey:o.farmAuthority,isWritable:!1}),P({pubkey:o.lpVault}),P({pubkey:o.lpMint,isWritable:!1}),P({pubkey:o.lockVault}),P({pubkey:o.lockMint,isWritable:!1}),P({pubkey:(n=o.lockUserAccount)!=null?n:Le}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let r of o.rewardInfo)t.push(P({pubkey:r.rewardMint,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}));return{instruction:new Pt({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6Create}}function ya(o){let e=Buffer.alloc(yi.span);yi.encode({instruction:5},e);let t=[P({pubkey:Ht,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.lpVault,isWritable:!1}),P({pubkey:o.rewardVault}),P({pubkey:o.userRewardToken}),P({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new Pt({programId:o.programId,keys:t,data:e}),instructionType:v.FarmV6CreatorWithdraw}}function Ti({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let i=Buffer.alloc(gi.span);gi.encode({instruction:3,rewardReopenTime:H(r.openTime),rewardEndTime:H(r.endTime),rewardPerSecond:H(r.perSecond)},i);let s=[P({pubkey:Ht,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Pt({programId:n.programId,keys:s,data:i})}function Ii({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let i=Buffer.alloc(wi.span);wi.encode({instruction:4,isSet:new pa(1),rewardPerSecond:H(r.perSecond),rewardOpenTime:H(r.openTime),rewardEndTime:H(r.endTime),rewardType:H(jt[r.rewardType])},i);let s=[...Fo,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:r.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:o,isWritable:!1,isSigner:!0})];return new Pt({programId:t.programId,keys:s,data:i})}function er(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:2,amount:H(s)},l);let m=[P({pubkey:Ht,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Pt({programId:a,keys:m,data:l})}function tr(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:12,amount:H(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:no,isWritable:!1}),P({pubkey:Ht,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function nr(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:H(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:no,isWritable:!1}),P({pubkey:Ht,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function ba(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:3}),m=Buffer.alloc(rt.span);rt.encode({instruction:10,amount:H(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:no,isWritable:!1}),P({pubkey:Ht,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function ga(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new me(e.programId),new me(e.id)],l=ct({programId:u,poolId:c,owner:i,version:5}),m=Buffer.alloc(rt.span);rt.encode({instruction:11,amount:H(s)},m);let d=[P({pubkey:c}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new me(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new me(t.rewardInfos[0].vault)}),P({pubkey:no,isWritable:!1}),P({pubkey:Ht,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new Pt({programId:u,keys:d,data:m})}function wa(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:i,amount:s}=o,[a,u]=[new me(e.programId),new me(e.id)],c=ct({programId:a,poolId:u,owner:i,version:6}),l=Buffer.alloc(rt.span);rt.encode({instruction:1,amount:H(s)},l);let m=[P({pubkey:Ht,isWritable:!1}),P({pubkey:da.programId,isWritable:!1}),P({pubkey:u}),P({pubkey:new me(t.authority),isWritable:!1}),P({pubkey:new me(t.lpVault)}),P({pubkey:c}),P({pubkey:i,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new me(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new Pt({programId:a,keys:m,data:l})}var rr=class extends ke{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Le)){let n=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:ki(E(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:r=Xn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new fe(e.lpMint.address),lockInfo:{lockMint:aa,lockVault:ua},version:6,rewardInfos:t,programId:r},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ue({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(to.span);u.addInstruction({instructions:[em.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:to.span,programId:a.programId})]});let{publicKey:d,nonce:p}=la({programId:new fe(a.programId),poolId:l.publicKey}),y=Zn({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(jt[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(ma(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:c});S&&u.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Le)?new fe(Ve.address):B.mint;b.push({rewardMint:x,rewardVault:Zn({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new fe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&u.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=fa({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 u.addInstruction({instructions:[A],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:r}){var b;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((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 u=t||this.scope.ownerPubKey,c=n.mint.equals(Le)?new fe(Ve.address):n.mint,l=a.rewardInfos.findIndex(g=>new fe(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let d=(b=m.vault)!=null?b:Le,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Ti({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[v.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=Ee((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 u=t||this.scope.ownerPubKey,c=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Le)?new fe(Ve.address):m.mint,p=a.rewardInfos.findIndex(A=>new fe(A.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Le,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:u});g&&c.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=Ti({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[h],instructionTypes:[v.FarmV6Restart]})}return c.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder(),l=r.mint.equals(Le)?new fe(Ve.address):r.mint,m=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,c.addInstruction({instructions:[Ii({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[v.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:i}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=i!=null?i:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of r){let m=l.mint.equals(Le)?new fe(Ve.address):l.mint,d=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=Ii({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:E(C({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[v.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:r,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ut[d];hi(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new fe(n.programId),new fe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=ct({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let A={};for(let F of this.scope.account.tokenAccounts)if(a){let Z=Pe(this.scope.ownerPubKey,F.mint,F.programId).publicKey;F.publicKey&&Z.equals(F.publicKey)&&(A[F.mint.toString()]=F.publicKey)}else A[F.mint.toString()]=F.publicKey;let k=b.lpMint,B=A[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",A);let T=[];for(let F of m){let Z=s&&F.mint.address===j.toString(),G=A[F.mint.address];if(!G){let{account:q,instructionParams:Qe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:F.mint.programId,mint:new fe(F.mint.address),notUseTokenAccount:Z,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!Z,associatedOnly:Z?!1:a,checkCreateATAOwner:u});G=q,Qe&&h.addInstruction(Qe)}A[F.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Jn(p).decode(x.data)),n.programId!==Xn.toString()&&!S){let{instruction:F,instructionType:Z}=$n({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[F],instructionTypes:[Z]})}let L=Pi({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});L&&this.logAndCreateError(L);let I={amount:H(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:c==null?void 0:c.map(F=>new fe(F))},R=p===6?wa(I):p===5?ga(I):ba(I),D={3:v.FarmV3Deposit,5:v.FarmV5Deposit,6:v.FarmV6Deposit};return h.addInstruction({instructions:[R],instructionTypes:[D[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:r,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!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=ut[n.programId];hi(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 L of this.scope.account.tokenAccounts)if(u){let I=Pe(this.scope.ownerPubKey,L.mint).publicKey;L.publicKey&&I.equals(L.publicKey)&&(b[L.mint.toString()]=L.publicKey)}else b[L.mint.toString()]=L.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let L=ct({programId:new fe(n.programId),poolId:new fe(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(L);if(I)Jn(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:R,instructionType:D}=$n({id:new fe(y.id),programId:new fe(y.programId),version:p,ledger:L,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[R],instructionTypes:[D]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I})}let g=y.lpMint.address,h=s&&g===j.toString(),A=b[g.toString()];if(!A){let{account:L,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new fe(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:u,checkCreateATAOwner:c});A=L,I&&f.addInstruction(I)}b[g.toString()]=A;let k=[];for(let L of d){let I=s&&L.mint.address===j.toString(),R=b[L.mint.address];if(!R){let{account:D,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new fe(L.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:u,checkCreateATAOwner:c});R=D,F&&f.addInstruction(F)}b[L.mint.address]=R,k.push(R)}let B=Pi({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:H(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(L=>new fe(L))},S=p===6?er(T):p===5?tr(T):nr(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 r=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ut[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Le.toString()?new fe(Ve.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Le,c=this.createTxBuilder(),l;if(t.equals(Le)){let y=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:ki(E(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new _(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,c.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),c.addInstruction({instructions:[$l(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[v.CreateATA]})):l=y}let{instruction:m,instructionType:d}=ya({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=Pe(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)=>E(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,A=ut[f],k=b.address,B=n&&k===j.toString(),T=m[k];if(!T){let{account:D,instructionParams:F}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new fe(k),notUseTokenAccount:B,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=D,F&&l.addInstruction(F)}m[k.toString()]=T;let S=[];for(let D of g){let F=n&&D.mint.address===j.toString(),Z=m[D.mint.address];if(!Z){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new fe(D.mint.address),notUseTokenAccount:F,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!F,associatedOnly:F?!1:i,checkCreateATAOwner:s});Z=G,q&&l.addInstruction(q)}m[D.mint.address]=Z,S.push(Z)}let x=p[h],L={amount:at,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(D=>new fe(D))},I=A===6?er(L):A===5?tr(L):nr(L),R={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[R[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as Xe}from"@solana/web3.js";import{AccountLayout as vm,NATIVE_MINT as Ja,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";var kA=V([je("mintAuthorityOption"),K("mintAuthority"),w("supply"),W("decimals"),W("isInitialized"),je("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as xA}from"@solana/web3.js";import{MintLayout as KA,TOKEN_PROGRAM_ID as RA}from"@solana/spl-token";var ro=o=>new he({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),or=r=>{var i=r,{amount:o,isRaw:e,name:t}=i,n=Be(i,["amount","isRaw","name"]);return new ye(new he({mint:nt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};var He=r=>{var i=r,{address:o,programId:e,decimals:t}=i,n=Be(i,["address","programId","decimals"]);return C({chainId:101,address:nt(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Zt=o=>o?E(C({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:E(C({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:E(C({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as sr,ASSOCIATED_TOKEN_PROGRAM_ID as fm}from"@solana/spl-token";import{PublicKey as Ct,TransactionInstruction as Sn,SystemProgram as ym,SYSVAR_RENT_PUBKEY as th}from"@solana/web3.js";var Bi=V([W("instruction"),w("amountIn"),w("minAmountOut")]),xi=V([W("instruction"),w("maxAmountIn"),w("amountOut")]),zA=V([W("instruction"),W("nonce")]),tm=V([W("instruction"),W("nonce"),w("startTime")]),oo=V([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"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),w("swapBase2QuoteFee"),z("swapQuoteInAmount"),z("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")]),QA=V([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"),z("swapBaseInAmount"),z("swapQuoteOutAmount"),z("swapQuoteInAmount"),z("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")]),Si=V([W("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Ki=V([W("instruction"),w("amountIn")]);var Aa=V([w("fee")]);import{PublicKey as nm}from"@solana/web3.js";var xn=new nm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),rn=5e4,rm=V([w("x"),w("y"),w("price")]),om=V([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(rm,rn,"DataElement")]);function im(o,e){return[0,rn-2]}function sm(o){return[0,rn-2]}function am(o){return[0,rn-2]}function um(o,e,t){let[n,r]=im(e,t),i=n,s=r,a=0,u=e*o.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=rn-2)return[a,a,!1];let c=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.DataElement[a+1].y;if(u===c)return[a,a,!0];if(u===l)return[a-1,a-1,!0];if(u===m)return[a+1,a+1,!0];if(u<l)s=a-1;else{if(u>l&&u<c)return[a-1,a,!0];if(u>c&&u<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Ci(o,e,t){let[n,r,i]=um(o,e,t);if(!i)return 0;if(n===r){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,u=o.DataElement[r].x,c=o.DataElement[r].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*o.multiplier*l/p}}function nn(o,e,t){return e*o.multiplier/t}function ha(o,e,t){return e*t/o.multiplier}function cm(o,e){let[t,n]=sm(e),r=t,i=n,s=0,a=e;for(;r<i;){if(s=Math.floor((i+r)/2),s<=0||s>rn-2)return[s,s,!1];let u=o.DataElement[s].x,c=o.DataElement[s-1].x,l=o.DataElement[s+1].x;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<c)i=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];r=s+1}}return[s,s,!1]}function lm(o,e){let[t,n]=am(e),r=t,i=n,s=0,a=e;for(;r<=i;){if(s=Math.floor((i+r)/2),s<=0||s>=rn-2)return[s,s,!1];let u=o.DataElement[s].y,c=o.DataElement[s-1].y,l=o.DataElement[s+1].y;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)r=s+1;else{if(a<c&&a>u)return[s-1,s,!0];if(a<u&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function Pa(o,e,t,n){let r=n?e+t:e-t,[i,s,a]=cm(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let u=o.DataElement[i].x,c=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=u&&e<=c)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=d-(r-u)*o.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-r)*o.multiplier/l),[y,f,!1,a]}}}function mm(o,e,t,n){let r=n?e-t:e+t,[i,s,a]=lm(o,r);if(!a)return[0,0,!1,a];if(i===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let u=o.DataElement[i].x,c=o.DataElement[s].x,l=o.DataElement[i].price,m=o.DataElement[s].price,d=o.DataElement[i].y,p=o.DataElement[s].y;if(e>=p&&e<=d)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=u+m*(d-r)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(r-p)/o.multiplier),[y,f,!1,a]}}}function dm(o,e){let t=Pa(o,e,0,!1);return t[3]?t[0]:0}function ka(o,e,t,n){let r=Ci(o,e,t),i=nn(o,e,r),s=nn(o,t,r),a=nn(o,n,r),u=!0,[c,l,m,d]=Pa(o,i,a,u);if(!d)return 0;if(m)return n*o.multiplier/c;{let p=s-l;return ha(o,p,r)}}function Ta(o,e,t,n){let r=Ci(o,e,t),i=nn(o,e,r),s=nn(o,t,r),a=nn(o,n,r),u=!1,[c,l,m,d]=mm(o,s,a,u);if(!d)return 0;if(m)return n*c/o.multiplier;{let p=i-l;return ha(o,p,r)}}function pm(o){let e=om.decode(o);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 Ia(o,e,t,n){let r=dm(o,nn(o,e,Ci(o,e,t)))/o.multiplier;return n?r:1/r}var ir=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(xn);e&&(this._layoutData=pm(e==null?void 0:e.data))}}};var Ba=se("Raydium_liquidity_instruction");function xa(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:i,fixedSide:s}=o,a=Buffer.alloc(Si.span);Si.encode({instruction:3,baseAmountIn:H(r),quoteAmountIn:H(i),fixedSide:s==="base"?at:Ts},a);let u=[P({pubkey:sr,isWritable:!1}),P({pubkey:new Ct(e.id)}),P({pubkey:new Ct(t.authority),isWritable:!1}),P({pubkey:new Ct(t.openOrders),isWritable:!1}),P({pubkey:new Ct(t.targetOrders)}),P({pubkey:new Ct(e.lpMint.address)}),P({pubkey:new Ct(t.vault.A)}),P({pubkey:new Ct(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(P({pubkey:xn})),u.push(P({pubkey:new Ct(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new Ct(t.marketEventQueue),isWritable:!1})),new Sn({programId:new Ct(e.programId),keys:u,data:a})}function Ri(o){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=o,i=Ee(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Ki.span);Ki.encode({instruction:4,amountIn:H(r)},a);let u=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.mintLp.address}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return s===5?u.push(P({pubkey:xn})):(u.push(P({pubkey:i.id})),u.push(P({pubkey:i.id}))),u.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks})),new Sn({programId:i.programId,keys:u,data:a})}return new Sn({programId:i.programId,keys:[]})}function Sa({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:i,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:A,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=V([W("instruction"),W("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),L=[{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:fm,isSigner:!1,isWritable:!1},{pubkey:ym.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,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:A,coinAmount:k,pcAmount:B},I),{instruction:new Sn({keys:L,programId:o,data:I}),instructionType:v.AmmV4CreatePool}}function bm({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},r){let i=Ee(o),s=Buffer.alloc(Bi.span);Bi.encode({instruction:9,amountIn:H(t),minAmountOut:H(n)},s);let a=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders})];return r===4&&a.push(P({pubkey:i.targetOrders})),a.push(P({pubkey:i.vault.A}),P({pubkey:i.vault.B})),r===5&&a.push(P({pubkey:xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new Sn({programId:i.programId,keys:a,data:s})}function gm({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},r){let i=Ee(o),s=Buffer.alloc(xi.span);xi.encode({instruction:11,maxAmountIn:H(t),amountOut:H(n)},s);let a=[P({pubkey:sr,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.openOrders}),P({pubkey:i.targetOrders}),P({pubkey:i.vault.A}),P({pubkey:i.vault.B})];return r===5&&a.push(P({pubkey:xn})),a.push(P({pubkey:i.marketProgramId,isWritable:!1}),P({pubkey:i.marketId}),P({pubkey:i.marketBids}),P({pubkey:i.marketAsks}),P({pubkey:i.marketEventQueue}),P({pubkey:i.marketBaseVault}),P({pubkey:i.marketQuoteVault}),P({pubkey:i.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Sn({programId:i.programId,keys:a,data:s})}function io(o){let{poolKeys:e,version:t,userKeys:n,amountIn:r,amountOut:i,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return bm(E(C({},a),{amountIn:r,minAmountOut:i}),t);if(s==="out")return gm(E(C({},a),{maxAmountIn:r,amountOut:i}),t);Ba.logWithError("invalid params","params",o)}throw Ba.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{TOKEN_PROGRAM_ID as De,TOKEN_2022_PROGRAM_ID as Jt,ASSOCIATED_TOKEN_PROGRAM_ID as Ga}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as Tt,SystemProgram as Kn,Keypair as Fi}from"@solana/web3.js";import Xa from"bn.js";import xm from"bn.js";function so(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Li(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function Oi(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function ar(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Ka(o,e){return ar(o,e)?null:Li(o,e)}function Ca(o,e){return ar(o,e)?null:Oi(o,e)}var yh=Buffer.from("amm_config","utf8"),wm=Buffer.from("pool","utf8"),Am=Buffer.from("pool_vault","utf8"),hm=Buffer.from("pool_reward_vault","utf8"),Ra=Buffer.from("position","utf8"),Pm=Buffer.from("tick_array","utf8"),km=Buffer.from("operation","utf8"),Tm=Buffer.from("pool_tick_array_bitmap_extension","utf8");function La(o,e,t,n){return le([wm,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Ni(o,e,t){return le([Am,e.toBuffer(),t.toBuffer()],o)}function Oa(o,e,t){return le([hm,e.toBuffer(),t.toBuffer()],o)}function be(o,e,t){return le([Pm,e.toBuffer(),so(t)],o)}function on(o,e,t,n){return le([Ra,e.toBuffer(),so(t),so(n)],o)}function lt(o,e){return le([Ra,e.toBuffer()],o)}function ao(o){return le([Buffer.from("metadata","utf8"),hn.toBuffer(),o.toBuffer()],hn)}function ur(o){return le([km],o)}function ot(o,e){return le([Tm,e.toBuffer()],o)}import mt from"bn.js";var xe=new mt(0),it=new mt(1),vt=new mt(-1),st=new mt(1).shln(64),uo=new mt(1).shln(128),Mi=st.sub(it),cr=64,Na=uo.subn(1),Ge=-443636,Ze=-Ge,Rt=new mt("4295048016"),Lt=new mt("79226673521066979257578248091"),co=new mt("4295048017"),lo=new mt("79226673521066979257578248090"),Ma=16,_a="59543866431248",va="184467440737095516",Va="15793534762490258745",mo=new mt(10).pow(new mt(6));var Ea={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:[]},wh=new mt("18446744073700000000");var Im=15,ae=class{static async getTickArrays(e,t,n,r,i,s,a){let u=[],c=Q.getTickArrayStartIndexByTick(r,i),l=Q.getInitializedTickArrayInRange(s,a,i,c,Math.floor(Im/2));for(let p=0;p<l.length;p++){let{publicKey:y}=be(t,n,l[p]);u.push(y)}let m=(await gt(e,u)).map(p=>p!==null?lr.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=E(C({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,r,i,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,r,i,s);for(;a==null||a.liquidityGross.lten(0);){if(c=Q.getNextTickArrayStartIndex(c,i,s),this.checkIsValidStartIndex(c,i))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,r,i){let s=Math.floor(e/ae.tickCount(t)),a=n?Q.searchLowBitFromStart(r,i,s-1,1,t):Q.searchHightBitFromStart(r,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,r){let i;if(r){let a=Oe-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a-1}}else{let a=0;for(;a<Oe;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){i=u;break}a=a+1}}let{publicKey:s}=be(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,i,s){let a=Q.getTickArrayStartIndexByTick(r,i),u=Math.floor((r-a)/i),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u-1}else for(u=u+1;u<Oe;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=be(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:c.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Q.checkIsOutOfBoundary(e)){if(e>Ze)return!1;let n=Q.getTickArrayStartIndexByTick(Ge,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Oe*e}};import oe from"bn.js";import{PublicKey as kt}from"@solana/web3.js";import Se from"bn.js";var _i=14,Vt=class{static maxTickInTickarrayBitmap(e){return e*Oe*sn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(r+=1);let i=n*r;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,r){if(!ae.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=r?t-ae.tickCount(n):t+ae.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*Oe,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(r){let l=e.shln(1024-c-1),m=Ka(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(c),m=Ca(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-ae.tickCount(n)}}}},mr=class{static getBitmapOffset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Vt.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&r--,r}static getBitmap(e,t,n){let r=this.getBitmapOffset(e,t);return e<0?{offset:r,tickarrayBitmap:n.negativeTickArrayBitmap[r]}:{offset:r,tickarrayBitmap:n.positiveTickArrayBitmap[r]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:r}=this.extensionTickBoundary(t);if(e>=r&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;if(Ze<=t)throw Error(`extensionTickBoundary check error: ${Ze}, ${t}`);if(n<=Ge)throw Error(`extensionTickBoundary check error: ${n}, ${Ge}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:r}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Q.mergeTickArrayBitmap(r).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let i=ae.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,r);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,r){let{minValue:i,maxValue:s}=Vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let u=Q.mergeTickArrayBitmap(e).shln(sn-1-a),c=ar(512,u)?null:Li(512,u);if(c!==null){let l=t-c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let u=Q.mergeTickArrayBitmap(e).shrn(a),c=ar(512,u)?null:Oi(512,u);if(c!==null){let l=t+c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-ae.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Vt.maxTickInTickarrayBitmap(t),r=Math.floor(n/ae.tickCount(t));return e<0&&n!=0&&(r=sn-r),r}};import Ot from"bn.js";var dr=class{static getfeeGrowthInside(e,t,n){let r=new Ot(0),i=new Ot(0);e.tickCurrent>=t.tick?(r=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Ot(0),a=new Ot(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let u=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),c=te.wrappingSubU128(te.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=te.mulDivFloor(te.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,st),u=t.tokenFeesOwedA.add(a),c=te.mulDivFloor(te.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,st),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,r){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,r){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=te.wrappingSubU128(u,c.growthInsideLastX64),m=te.mulDivFloor(l,t.liquidity,st),d=c.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Ot(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return i}static getRewardGrowthInsideV2(e,t,n,r){let i=[];for(let s=0;s<r.length;s++){let a=new Ot(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Ot(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(te.wrappingSubU128(te.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,add:i,epochInfo:s}){var b,g,h,A;let a=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),u=re.getSqrtPriceX64FromTick(t.tickLower),c=re.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+r:1-r,m=ce.getAmountsFromLiquidity(a,u,c,n,i),[d,p]=[we(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),we(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[we(new Ot(new _(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),we(new Ot(new _(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Fa}from"@solana/spl-token";var Ke=class{static getOutputAmountAndRemainAccounts(e,t,n,r,i,s=!1){let a=n.toBase58()===e.mintA.address,u=[],{isExist:c,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!c||l===void 0||!m)throw new Error("Invalid tick array");u.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=an.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,l,i,s);return u.push(...y),{allTrade:d,expectedAmountOut:p.mul(vt),remainingAccounts:u,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=be(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=an.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(vt),c,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=Ke.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?mr.checkTickArrayIsInit(ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Q.checkTickArrayIsInitialized(Q.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=be(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=be(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/ae.tickCount(e.tickSpacing)),r=t?Q.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Q.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return r.length>0?{isExist:!0,nextStartIndex:r[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:i}=Vt.nextInitializedTickArrayStartIndex(Q.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=mr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Ge||t>Ze)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,rewardInfos:i}){var a,u,c;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(d===void 0)throw Error("get new reward mint info error");let p=E(C({},m),{perSecond:te.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new kt(d)});if(p.tokenMint.equals(kt.default))continue;if(n<=p.openTime.toNumber()||r.eq(xe)){s.push(p);continue}let y=new Se(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=te.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=te.mulDivFloor(f,p.emissionsPerSecondX64,st),A=p.rewardTotalEmissioned.add(h);s.push(E(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let i of t){let s=Q.getTickArrayStartIndexByTick(i,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;return t>Ze&&(t=ae.getArrayStartIndex(Ze,e)+ae.tickCount(e)),n<Ge&&(n=ae.getArrayStartIndex(Ge,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/ae.tickCount(t)*sn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await Ne(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of r)s.accountInfo!==null&&(i[s.pubkey.toString()]=Wa.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},i=[];for(let u of t){let c=Q.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=Q.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=be(u.programId,u.id,m);i.push({pubkey:d}),r[d.toString()]=u.id}}let s=await Ne(e,i,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=r[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=lr.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=E(C({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:r=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let u=0;u<e.length;u++){let c=e[u];c!==null&&(s.find(l=>l.equals(c.state.programId))||s.push(c.state.programId))}if(n){let u=n.tokenAccounts.map(d=>d.accountInfo.mint),c=[];for(let d of u)for(let p of s)c.push(lt(p,d).publicKey);let l=await gt(t,c,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=po.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=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,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:A,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=>E(C({},x),{pendingReward:new Se(0)})),leverage:B,tokenFeeAmountA:new Se(0),tokenFeeAmountB:new Se(0)}];let T=await Q.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Q.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 gt(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=lr.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}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[A].toString()],T=k.ticks[Q.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[Q.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:L}=await dr.GetPositionFees(f,g,T,S),I=await dr.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Se(0))?x:new Se(0),g.tokenFeeAmountB=L.gte(new Se(0))?L:new Se(0);for(let R=0;R<I.length;R++)g.rewardInfos[R].pendingReward=I[R].gte(new Se(0))?I[R]:new Se(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:i,slippage:s,priceLimit:a=new _(0),catchLiquidityInsufficient:u=!1}){var D;let c,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 _(0))?c=l?Rt.add(new Se(1)):Lt.sub(new Se(1)):c=re.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=we(i,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Ke.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((D=p.fee)!=null?D:xe),c,u),A=we(f,d,r,!1),k=re.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new _(1).div(k),T=f.mul(new Se(Math.floor((1-s)*1e10))).div(new Se(1e10)),S=we(T,d,r,!1),x=l?e.currentPrice:new _(1).div(e.currentPrice),L=new _(B).sub(x).abs(),I=x,R=new Ye(new _(L).mul(10**15).toFixed(0),new _(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:xt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:R,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let u=r.address===e.mintB.address,[c,l]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new he(E(C({},c),{mint:c.address,isToken2022:c.programId===Fa.toBase58()})),new he(E(C({},l),{mint:l.address,isToken2022:l.programId===Fa.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:A,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Ke.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new kt(c.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=E(C({},y),{amount:new ye(m,y.amount),fee:y.fee===void 0?void 0:new ye(m,y.fee)}),L=E(C({},f),{amount:new ye(d,f.amount),fee:f.fee===void 0?void 0:new ye(d,f.fee)}),I=E(C({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),R=new $e({baseToken:m,denominator:new Se(10).pow(new Se(20+m.decimals)),quoteToken:d,numerator:h.mul(new _(10**(20+d.decimals))).toFixed(0)}),D=new $e({baseToken:m,denominator:new Se(10).pow(new Se(20+m.decimals)),quoteToken:d,numerator:A.mul(new _(10**(20+d.decimals))).toFixed(0)}),F=new ye(m,B);return{allTrade:p,realAmountIn:x,amountOut:L,minAmountOut:I,expirationTime:g,currentPrice:R,executionPrice:D,priceImpact:k,fee:F,remainingAccounts:T,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let i=e[t],s=Q.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Q.getTickPrice({poolInfo:e,tick:r,baseIn:!0}).price.toNumber(),u=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-u,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:r,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[nt(e.mintA.address).toString()],d=r[nt(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=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),b=re.getSqrtPriceX64FromTick(s),g=re.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:A}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new _(h.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(A.toString()).div(new _(10).pow(y)).mul(d.value)),S=new _(k.toString()).div(new _(10).pow(p)).mul(m.value).add(new _(B.toString()).div(new _(10).pow(y)).mul(d.value)),x=new _(1).div(T.add(S)),I=new _(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),R=3600*24*365,D=e.rewardDefaultInfos.map(F=>{var q,Qe;let Z=F.mint.decimals,G=r[F.mint.address];return u<((q=F.startTime)!=null?q:0)||u>((Qe=F.endTime)!=null?Qe:0)||!F.perSecond||!G||Z===void 0?0:new _(G.value).mul(new _(F.perSecond).mul(R)).div(new _(10).pow(Z)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:D,apr:I+D.reduce((F,Z)=>F+Z,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:r,amount:i,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,h;let l=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),m=re.getSqrtPriceX64FromTick(n),d=re.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=we(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new Se(new _(y.amount.sub((h=y.fee)!=null?h:xe).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Se(0);else if(l.lte(d)){let A=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new Se(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Ke.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:r,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:r,liquidity:i,slippage:s,add:a}){var b,g,h,A;let u=re.getSqrtPriceX64FromTick(n),c=re.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(re.priceToSqrtPriceX64(new _(t.price),t.mintA.decimals,t.mintB.decimals),u,c,i,a),[d,p]=[we(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),we(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[we(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),we(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:xt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(u=>!n[u.id]).map(u=>new kt(u.id));(await gt(e,r)).forEach((u,c)=>{!u||(n[r[c].toBase58()]=un.decode(u.data))});let s=t.map(u=>ot(new kt(u.programId),new kt(u.id)).publicKey),a=await Ke.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((u,c)=>E(C({},u),{[c.id]:E(C({},n[c.id]),{id:new kt(c.id),version:6,programId:new kt(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:E(C({},c.config),{id:new kt(c.config.id),fundOwner:""}),currentPrice:new _(c.price),exBitmapInfo:a[ot(new kt(c.programId),new kt(c.id)).publicKey.toBase58()],startTime:n[c.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]}};var vi={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Da(o){return E(C({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:vi,week:vi,month:vi,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:E(C({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var te=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),i=r.div(n);return r.mod(n).eq(xe)||(i=i.add(it)),i}static mulDivFloor(e,t,n){if(n.eq(xe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(xe))throw new Error("division by 0");return e.mul(t).add(n.sub(it)).div(n)}static x64ToDecimal(e,t){return new _(e.toString()).div(_.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new oe(e.mul(_.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(uo).sub(t).mod(uo)}};function Me(o,e){return Vi(o.mul(e),64,256)}function Bm(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Vi(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var re=class{static sqrtPriceX64ToPrice(e,t,n){return te.x64ToDecimal(e).pow(2).mul(_.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return te.decimalToX64(e.mul(_.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(xe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,r){if(!e.gt(xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(xe))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,r){if(n.eq(xe))return e;let i=t.shln(cr);if(r){let s=i,a=i.add(n.mul(e));return a.gte(s)?te.mulDivCeil(s,e,a):te.mulDivRoundingUp(s,it,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 te.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let i=n.shln(cr);if(r)return e.add(i.div(t));{let s=te.mulDivRoundingUp(i,it,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<Ge||e>Ze)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new oe("18445821805675395072"):new oe("18446744073709551616");return(t&2)!=0&&(n=Me(n,new oe("18444899583751176192"))),(t&4)!=0&&(n=Me(n,new oe("18443055278223355904"))),(t&8)!=0&&(n=Me(n,new oe("18439367220385607680"))),(t&16)!=0&&(n=Me(n,new oe("18431993317065453568"))),(t&32)!=0&&(n=Me(n,new oe("18417254355718170624"))),(t&64)!=0&&(n=Me(n,new oe("18387811781193609216"))),(t&128)!=0&&(n=Me(n,new oe("18329067761203558400"))),(t&256)!=0&&(n=Me(n,new oe("18212142134806163456"))),(t&512)!=0&&(n=Me(n,new oe("17980523815641700352"))),(t&1024)!=0&&(n=Me(n,new oe("17526086738831433728"))),(t&2048)!=0&&(n=Me(n,new oe("16651378430235570176"))),(t&4096)!=0&&(n=Me(n,new oe("15030750278694412288"))),(t&8192)!=0&&(n=Me(n,new oe("12247334978884435968"))),(t&16384)!=0&&(n=Me(n,new oe("8131365268886854656"))),(t&32768)!=0&&(n=Me(n,new oe("3584323654725218816"))),(t&65536)!=0&&(n=Me(n,new oe("696457651848324352"))),(t&131072)!=0&&(n=Me(n,new oe("26294789957507116"))),(t&262144)!=0&&(n=Me(n,new oe("37481735321082"))),e>0&&(n=Na.div(n)),n}static getTickFromPrice(e,t,n){return re.getTickFromSqrtPriceX64(re.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Lt)||e.lt(Rt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new oe(t-64),r=Bm(n,32,128),i=new oe("8000000000000000","hex"),s=0,a=new oe(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new oe(0))&&s<Ma;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let c=a.shrn(32),m=r.add(c).mul(new oe(_a)),d=Vi(m.sub(new oe(va)),64,128).toNumber(),p=Vi(m.add(new oe(Va)),64,128).toNumber();return d==p?d:re.getSqrtPriceX64FromTick(p).lte(e)?p:d}},cn=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=re.getTickFromSqrtPriceX64(re.priceToSqrtPriceX64(e,n,r))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,r){let i=cn.getTickWithPriceAndTickspacing(e,t,n,r),s=re.getSqrtPriceX64FromTick(i);return re.sqrtPriceX64ToPrice(s,n,r)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(xe))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(cr),s=t.sub(e);return r?te.mulDivRoundingUp(te.mulDivCeil(i,s,t),it,e):te.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(xe))throw new Error("sqrtPriceX64A must greater than 0");return r?te.mulDivCeil(n,t.sub(e),st):te.mulDivFloor(n,t.sub(e),st)}static getLiquidityFromTokenAmountA(e,t,n,r){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return r?te.mulDivRoundingUp(a,it,Mi):a.shrn(cr)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),te.mulDivFloor(n,Mi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,r,!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,r,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,r,i),amountB:new oe(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,r,i),a=ce.getTokenAmountBFromLiquidity(t,e,r,i);return{amountA:s,amountB:a}}else return{amountA:new oe(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,r,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,i,s,a){let{amountA:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,r,s),l=i?1+a:1-a,m=new oe(new _(u.toString()).mul(l).toFixed(0)),d=new oe(new _(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:i,add:s,epochInfo:a,amountAddFee:u}){var h,A,k,B;let c=re.priceToSqrtPriceX64(new _(e.price),e.mintA.decimals,e.mintB.decimals),l=re.getSqrtPriceX64FromTick(t),m=re.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(c,l,m,r,s),[y,f]=[we(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),we(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[we(new oe(new _(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,u),we(new oe(new _(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,u)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:xt(y.expirationTime,f.expirationTime)}}},an=class{static swapCompute(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f=!1){if(d.eq(xe))throw new Error("amountSpecified must not be 0");if(y||(y=s?Rt.add(it):Lt.sub(it)),s){if(y.lt(Rt))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(Lt))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(xe),g={amountSpecifiedRemaining:d,amountCalculated:xe,sqrtPriceX64:m,tick:c>p?Math.min(p+ae.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new oe(0)},h=p,A=n[p],k=0,B=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(xe)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=Q.nextInitTick(A,g.tick,l,s,B),x=S||null,L=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let R=Ke.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:i},h,s);if(!R.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=R.nextStartIndex;let{publicKey:D}=be(e,t,h);L=D,A=n[h];try{x=Q.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&L&&(g.accounts.push(L),p=h),T.tickNext<Ge?T.tickNext=Ge:T.tickNext>Ze&&(T.tickNext=Ze),T.sqrtPriceNextX64=re.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]=an.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 R=x.liquidityNet;s&&(R=R.mul(vt)),g.liquidity=ce.addDelta(g.liquidity,R)}B=T.tickNext!=g.tick&&!s&&A.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let R=re.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=R!=g.tick&&!s&&A.startTickIndex===R,g.tick=R}++k}try{let{nextStartIndex:T,isExist:S}=ae.nextInitializedTickArray(g.tick,l,s,r,i);S&&p!==T&&(g.accounts.push(be(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:xe,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,r,i){let s={sqrtPriceX64Next:new oe(0),amountIn:new oe(0),amountOut:new oe(0),feeAmount:new oe(0)},a=e.gte(t),u=r.gte(xe);if(u){let l=te.mulDivFloor(r,mo.sub(new oe(i.toString())),mo);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=re.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(vt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=re.getNextSqrtPriceX64FromOutput(e,n,r.mul(vt),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(r.mul(vt))&&(s.amountOut=r.mul(vt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=te.mulDivCeil(s.amountIn,new oe(i),mo.sub(new oe(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Oe=60,sn=512,Q=class{static getTickArrayAddressByTick(e,t,n,r){let i=Q.getTickArrayStartIndexByTick(n,r),{publicKey:s}=be(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Q.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=Oe)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=ae.tickCount(t),r=e/n;return e<0&&e%n!=0?r=Math.ceil(r)-1:r=Math.floor(r),r}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*ae.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Oe,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*Oe,i=Math.floor(t/r)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*r}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Oe:e+t*Oe}static mergeTickArrayBitmap(e){let t=new xm(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,r,i){let s=Math.floor(r/(n*Oe));return[...Q.searchLowBitFromStart(e,t,s-1,i,n),...Q.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Q.searchHightBitFromStart(e,t,0,sn,n)}static getAllInitializedTickArrayInfo(e,t,n,r,i){let s=[],a=Q.getAllInitializedTickArrayStartIndex(n,r,i);for(let u of a){let{publicKey:c}=be(e,t,u);s.push({tickArrayStartIndex:u,tickArrayAddress:c})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Q.mergeTickArrayBitmap(c)),a=[];for(;n>=-7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n--,a.length===r)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,r,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Q.mergeTickArrayBitmap(c)),a=[];for(;n<7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n++,a.length===r)break}let u=ae.tickCount(i);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Ge||e>Ze}static nextInitTick(e,t,n,r,i){if(ae.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(r)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<Oe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Oe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Oe;){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 r=re.getSqrtPriceX64FromTick(t),i=re.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new _(1).div(t),i=cn.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=re.getSqrtPriceX64FromTick(i),a=re.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=re.getSqrtPriceX64FromTick(t),i=re.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:r}:{tick:t,price:new _(1).div(i),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new _(1).div(t),i=cn.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=re.getSqrtPriceX64FromTick(i),a=re.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new _(1).div(a)}}};var qa=V([pe(8),W("bump"),St("index"),K(""),je("protocolFeeRate"),je("tradeFeeRate"),St("tickSpacing"),X(w(),8,"")]),Sm=V([je("blockTimestamp"),z("sqrtPriceX64"),z("cumulativeTimePriceX64"),X(z(),1,"")]),Ei=V([pe(8),qe("initialized"),K("poolId"),X(Sm,1e3,"observations"),X(z(),5,"")]),Km=V([W("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),z("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),z("rewardGrowthGlobalX64")]),un=V([pe(8),W("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),St("tickSpacing"),z("liquidity"),z("sqrtPriceX64"),Fe("tickCurrent"),St("observationIndex"),St("observationUpdateDuration"),z("feeGrowthGlobalX64A"),z("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),z("swapInAmountTokenA"),z("swapOutAmountTokenB"),z("swapInAmountTokenB"),z("swapOutAmountTokenA"),W("status"),X(W(),7,""),X(Km,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")]),Cm=V([z("growthInsideLastX64"),w("rewardAmountOwed")]),po=V([pe(8),W("bump"),K("nftMint"),K("poolId"),Fe("tickLower"),Fe("tickUpper"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Cm,3,"rewardInfos"),X(w(),8,"")]),xP=V([pe(8),W("bump"),K("poolId"),Fe("tickLowerIndex"),Fe("tickUpperIndex"),z("liquidity"),z("feeGrowthInsideLastX64A"),z("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(z(),3,"rewardGrowthInside"),X(w(),8,"")]),Rm=V([Fe("tick"),Hs("liquidityNet"),z("liquidityGross"),z("feeGrowthOutsideX64A"),z("feeGrowthOutsideX64B"),X(z(),3,"rewardGrowthsOutsideX64"),X(je(),13,"")]),lr=V([pe(8),K("poolId"),Fe("startTickIndex"),X(Rm,Oe,"ticks"),W("initializedTickCount"),X(W(),115,"")]),Ua=V([pe(329),X(K(),100,"whitelistMints")]),Wa=V([pe(8),K("poolId"),X(X(w(),8),_i,"positiveTickArrayBitmap"),X(X(w(),8),_i,"negativeTickArrayBitmap")]);var za=se("Raydium_Clmm"),It={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]},Te=class{static createPoolInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([z("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,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:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...It.createPool,...g]);return new Tt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:r,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ue({fromPublicKey:r,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[Kn.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Ei.span),space:Ei.span,programId:n})],{publicKey:f}=La(n,a,d,p),{publicKey:b}=Ni(n,f,d),{publicKey:g}=Ni(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,m.publicKey,d,b,new U(i.programId||De),p,g,new U(s.programId||De),ot(n,f).publicKey,u,c)),{signers:[],instructions:y,instructionTypes:[v.CreateAccount,v.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,L,I){let R=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),z("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),W("optionBaseFlag"),qe("baseFlag")]),D=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,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:u,isSigner:!1,isWritable:!0},{pubkey:c,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:bt,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Ga,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],Z=Buffer.alloc(R.span);R.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:L==="create",baseFlag:!1,optionBaseFlag:0},Z);let G=Buffer.from([...It.openPosition,...Z]);return new Tt({keys:F,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,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=Fi.generate();m.push(x),y=x.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(d,p,f),{publicKey:h}=be(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=ao(y),{publicKey:B}=lt(d,y),{publicKey:T}=on(d,p,r,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,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),r,i,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,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=Fi.generate();m.push(x),y=x.publicKey}let f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(d,p,f),{publicKey:h}=be(d,p,b),{publicKey:A}=Pe(n.wallet,y,De),{publicKey:k}=ao(y),{publicKey:B}=lt(d,y),{publicKey:T}=on(d,p,r,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,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),r,i,f,b,c,s,a,u,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A,k,B,T,S,x,L,I){let R=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),z("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),W("optionBaseFlag"),qe("baseFlag")]),D=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],F=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,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:u,isSigner:!1,isWritable:!0},{pubkey:c,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:bt,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Ga,isSigner:!1,isWritable:!1},{pubkey:hn,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],Z=Buffer.alloc(R.span);R.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new Xa(0),amountMaxA:S==="MintA"?x:L,amountMaxB:S==="MintA"?L:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},Z);let G=Buffer.from([...It.openPosition,...Z]);return new Tt({keys:F,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=Fi.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=be(p,y,f),{publicKey:h}=be(p,y,b),{publicKey:A}=Pe(n.wallet,m,De),{publicKey:k}=ao(m),{publicKey:B}=lt(p,m),{publicKey:T}=on(p,y,r,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,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),r,i,f,b,s,a,u,c,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[v.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,i){let s=V([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...It.closePosition,...u]);return new Tt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let i=new U(e.programId),{publicKey:s}=Pe(n.wallet,r.nftMint,De),{publicKey:a}=lt(i,r.nftMint),u=[];return u.push(this.closePositionInstruction(i,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[v.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=V([z("liquidity"),w("amountMaxA"),w("amountMaxB"),W("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:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMaxA:s,amountMaxB:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=be(u,c,l),{publicKey:p}=be(u,c,m),{publicKey:y}=Pe(r.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=on(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).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:r,base:i,baseAmount:s,otherAmountMax:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=be(u,c,l),{publicKey:p}=be(u,c,m),{publicKey:y}=Pe(r.wallet,n.nftMint,De),{publicKey:f}=lt(u,n.nftMint),{publicKey:b}=on(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).publicKey:void 0)],signers:[],instructionTypes:[v.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h){let A=V([z("liquidity"),w("amountMaxA"),w("amountMaxB"),W("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:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(A.span);A.encode({liquidity:new Xa(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...It.increaseLiquidity,...T]);return new Tt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=V([z("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(L=>[{pubkey:L.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:L.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:L.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,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:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:Or,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([...It.decreaseLiquidity,...S]);return new Tt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:i,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new U(e.programId),new U(e.id)],m=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=be(c,l,m),{publicKey:y}=be(c,l,d),{publicKey:f}=Pe(r.wallet,n.nftMint,u),{publicKey:b}=lt(c,n.nftMint),{publicKey:g}=on(c,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:r.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.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,Ke.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[v.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g){let h=V([w("amount"),w("otherAmountThreshold"),z("sqrtPriceLimitX64"),qe("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,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:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:Or,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...It.swap,...B]);return new Tt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){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,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[v.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,i,s,a,u,c,l,m,d){let p=V([w("openTime"),w("endTime"),z("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:r,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:Kn.programId,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:H(l),endTime:H(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...It.initReward,...f]);return new Tt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a=Oa(i,s,r.mint).publicKey,u=ur(i).publicKey,c=[this.initRewardInstruction(i,n.wallet,s,u,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[v.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,i,s,a,u,c,l,m,d){let p=V([W("rewardIndex"),z("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:r,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:H(l),endTime:H(m)},f);let b=Buffer.from([...It.setRewardEmissions,...f]);return new Tt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===r.mint.toString()&&(a=d,u=new U(t.rewardInfos[d].vault),c=new U(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&za.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=ur(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,u,c,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[v.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,i,s,a){let u=V([W("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:Jt,isSigner:!1,isWritable:!1},{pubkey:Or,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...It.collectReward,...l]);return new Tt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[i,s]=[new U(e.programId),new U(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,u=new U(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&za.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,u,r,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[v.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:r,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,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===r.toString(),b=[this.swapInstruction(c,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,u,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[v.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as Nm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Mm}from"@solana/spl-token";import{PublicKey as Lm}from"@solana/web3.js";import Qa from"bn.js";var Ya=new Qa(25),ja=new Qa(1e4);var Om=se("Raydium_liquidity_serum");function Ha({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,r;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));r=Lm.createProgramAddressSync(i,o)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:r,nonce:n}}throw Om.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}import uk from"bn.js";function fo({programId:o}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function ln({name:o,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function _m({programId:o,marketId:e}){let{publicKey:t}=le([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function Wi({programId:o}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function Za({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:u}){let c=ln({name:"amm_associated_seed",programId:a,marketId:t}),l=ln({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Wi({programId:a}),p=ln({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=ln({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=ln({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=_m({programId:a,marketId:t}),g=ln({name:"target_associated_seed",programId:a,marketId:t}),h=ln({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=Ha({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:Nm.default,configId:fo({programId:a})}}var Di={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},yo=o=>{let e={},t=Mm.toBase58();return Object.keys(o).map(n=>{let r=o[n],[i,s]=[r.baseMint.toBase58(),r.quoteMint.toBase58()];e[n]={id:n,version:4,status:r.status.toNumber(),programId:r.programId.toBase58(),mintA:He({address:i,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:He({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new _(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new _(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new _(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:Di,week:Di,month:Di,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:fo({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:He({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import tt from"bn.js";var pr=class extends ke{constructor(t){super(t);this.stableLayout=new ir({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:r,baseIn:i}){let s=new tt(new _(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=ro(t[i?"mintB":"mintA"]),[u,c]=[new tt(new _(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new tt(new _(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new tt(new _(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${r.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=at;s.isZero()||(d=m==="base"?Vr(s.mul(c),u):Vr(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Vr(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let f=new Ye(new tt(1)).add(r).mul(d).quotient,b=new ye(a,d),g=new ye(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:r,amountInA:i,amountInB:s,fixedSide:a,config:u,txVersion:c,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},u),[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 Xe(n.lpMint.address)}),A=[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"?(A.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,L]=A,[I,R]=k,[D,F]=B,Z=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Nt=await m.handleTokenAccount({side:"in",amount:D,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=Nt,Qe=Be(Nt,["tokenAccount"]);G.addInstruction(Qe);let gn=await m.handleTokenAccount({side:"in",amount:F,mint:L.mint,tokenAccount:R,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:yn}=gn,$t=Be(gn,["tokenAccount"]);G.addInstruction($t);let Tr=await m.handleTokenAccount({side:"out",amount:0,mint:new Xe(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Ft}=Tr,bn=Be(Tr,["tokenAccount"]);return G.addInstruction(bn),G.addInstruction({instructions:[xa({poolInfo:n,poolKeys:Z,userKeys:{baseTokenAccount:q,quoteTokenAccount:yn,lpTokenAccount:Ft,owner:this.scope.ownerPubKey},baseAmountIn:D,quoteAmountIn:F,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5AddLiquidity:v.AmmV4AddLiquidity],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),c===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:r,amountIn:i,config:s,txVersion:a,computeBudgetConfig:u}=t,c=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new Xe(n.mintA.address),new Xe(n.mintB.address),new Xe(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:A}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:k}=x,B=Be(x,["tokenAccount"]);g.addInstruction(B);let L=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:A}),{tokenAccount:T}=L,S=Be(L,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[Ri({poolInfo:n,poolKeys:c,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(u),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Cn,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(c);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||Pe(this.scope.ownerPubKey,q.accountInfo.mint,Cn).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 A=r.add(a!=null?a:new tt(0)),k=t.mintA.address===he.WSOL.mint.toString(),B=t.mintB.address===he.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(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:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(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(L||{}),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=ut[s.programId],Qe=ct({programId:new Xe(s.programId),poolId:new Xe(s.id),owner:this.scope.ownerPubKey,version:q}),yn,$t=await this.scope.connection.getAccountInfo(Qe);if($t&&(yn=Jn(q).decode($t.data)),q!==6&&!yn){let{instruction:Dt,instructionType:Lo}=$n({id:new Xe(s.id),programId:new Xe(s.programId),version:q,ledger:Qe,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Dt],instructionTypes:[Lo]})}let Ft=[];for(let Dt of s.rewardInfos){let Lo=Dt.mint.address===he.WSOL.mint.toString();if(g[Dt.mint.address])Ft.push(g[Dt.mint.address]);else{let{account:Zi,instructionParams:Ji}=await this.scope.account.getOrCreateTokenAccount({mint:new Xe(Dt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Lo,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Zi||this.logAndCreateError("farm reward account not found:",Dt.mint.address),Ji&&b.addInstruction(Ji),Ft.push(Zi)}}let bn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Nt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:bn,lpAccount:h,rewardAccounts:Ft},gn=ut[s.programId],Tr=gn===6?er(Nt):gn===5?tr(Nt):nr(Nt),Bu={3:v.FarmV3Withdraw,5:v.FarmV5Withdraw,6:v.FarmV6Withdraw};b.addInstruction({instructions:[Tr],instructionTypes:[Bu[gn]]})}let I=await this.getAmmPoolKeys(t.id),R=Ri({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:A});b.addInstruction({instructions:[R],instructionTypes:[t.pooltype.includes("StablePool")?v.AmmV5RemoveLiquidity:v.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[D,F]=t.mintA.address===n.mintA.address?[T,x]:[x,T],Z=await this.scope.clmm.getClmmPoolKeys(t.id),G=await Te.openPositionFromBaseInstructions(E(C({poolInfo:n,poolKeys:Z,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:D,tokenAccountB:F},withMetadata:"create"},i),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:Z.lookupTableAccount?[Z.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:r,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var D;let b=c.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),g=c.useSOLBalance&&r.mint.equals(Ja),h=c.useSOLBalance&&i.mint.equals(Ja),A=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});A.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(A.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=Za({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:i.mint,baseDecimals:r.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),L={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:R}=Sa(E(C({},L),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:Pe(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[I],instructionTypes:[R]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:L}})}async getCreatePoolFee({programId:t}){let n=fo({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return Aa.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:i,slippage:s}){let[a,u]=[r.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:c,quoteReserve:l}=t,m=[c,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 _(y.toString()).div(p.toString());else{let I=Ia(this.stableLayout.stableModelData,c.toNumber(),l.toNumber(),!1);d==="quote"?b=new _(1e6).div(I*1e6):b=new _(I*1e6).div(1e6)}let g=n,h=new tt(0),A=new tt(0);if(!g.isZero())if(f){A=Yn(g.mul(Ya),ja);let I=g.sub(A),R=p.add(I);h=y.mul(I).div(R)}else{A=g.mul(new tt(2)).div(new tt(1e4));let I=g.sub(A);d==="quote"?h=new tt(ka(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber())):h=new tt(Ta(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),I.toNumber()))}let k=new tt(new _(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new _(h.toString()).div(new _(g.sub(A).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new _(h.toString()).div(g.sub(A).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:A}}async swap({poolInfo:t,poolKeys:n,amountIn:r,amountOut:i,inputMint:s,fixedSide:a,txVersion:u,config:c,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=c||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===j.toBase58(),h=y&&b.address===j.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Cn,mint:new Xe(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:[io({version:x,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:r,amountOut:i,fixedSide:a})],instructionTypes:[x===4?v.AmmV4SwapBaseIn:v.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await Ne(this.scope.connection,t.map(l=>({pubkey:new Xe(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=oo.decode(m.accountInfo.data);i[String(t[l])]=E(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},u=await Ne(this.scope.connection,s.map(l=>({pubkey:new Xe(l)})),n);for(let l=0;l<s.length;l++){let m=u[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new tt(vm.decode(m.data).amount.toString())}let c={};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);c[l]=E(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new _(p.toString()).div(new _(10).pow(m.quoteDecimal.toString())).div(new _(d.toString()).div(new _(10).pow(m.baseDecimal.toString())))})}return c}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),r=yo({[t]:n}),i=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as ie}from"@solana/web3.js";import dt from"bn.js";import{AccountLayout as $a,TOKEN_PROGRAM_ID as eu}from"@solana/spl-token";var fr=class extends ke{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)||ie.default,mint1:r,mint2:i,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new dt(new ie(r.address).toBuffer()).gt(new dt(new ie(i.address).toBuffer()))?[i,r,new _(1).div(a)]:[r,i,a],b=re.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await Te.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(c),d.versionBuild({txVersion:m,extInfo:{address:E(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:u.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:u.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:[]}},Ea),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!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===j.toString(),A=n.useSOLBalance&&e.mintB.address===j.toString(),[k,B]=s==="MintA"?[a,u]:[u,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(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:c,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(L||{}),(!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),R=await Te.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:E(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:i,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(R),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:R.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:r,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!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===j.toBase58(),h=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(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:c,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 Te.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:r,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:r,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=u.useSOLBalance&&t.mintA.address===j.toString(),g=u.useSOLBalance&&t.mintB.address===j.toString(),{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(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:c,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(A||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(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:c,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=Te.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,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:r,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===j.toString(),b=a.useSOLBalance&&t.mintB.address===j.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(r==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(h||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(r==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),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=Te.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,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:r,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:u,associatedOnly:c=!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===j.toString(),f=i.useSOLBalance&&t.mintB.address===j.toString(),b,g,{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:l});b=h,A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let R=i.useSOLBalance&&I.mint.address===j.toString(),D;if(I.mint.address===t.mintA.address)D=b;else if(I.mint.address===t.mintB.address)D=g;else{let{account:F,instructionParams:Z}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(I.mint.programId),mint:new ie(I.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:c,checkCreateATAOwner:l});D=F,Z&&p.addInstruction(Z)}T.push(D)}!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 Te.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:u,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[v.ClmmDecreasePosition]});let L=C({},x.address);if(i.closePosition){let I=await Te.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),L=C(C({},L),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:L}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){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=Te.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.address.toString()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(n.mint.address),mint:new ie(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new _(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:r,checkCreateATAOwner:i});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Te.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ie(n.mint.programId),mint:new ie(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let c=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===j.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&c.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Te.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ie(m.mint.programId),mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),c.addInstruction(g)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.equals(j),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new _(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:c?!1:r,checkCreateATAOwner:i});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Te.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:te.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){let c=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===j.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new dt(new _(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&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Te.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:te.decimalToX64(m.perSecond)}});c.addInstruction(b),l=C(C({},l),b.address)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:r=!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(),u=t.useSOLBalance&&n.equals(j),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(s.mint.programId),mint:n,notUseTokenAccount:u,owner:this.scope.ownerPubKey,skipCloseAccount:!u,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:u?!1:r,checkCreateATAOwner:i});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Te.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let u of n){let c=e.rewardDefaultInfos.find(f=>f.mint.address===u.toString());if(!c){this.logAndCreateError("reward mint error","not found reward mint",u);continue}let l=t.useSOLBalance&&u.equals(j),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(c.mint.programId),mint:u,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:r,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Te.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:r,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=u.useSOLBalance&&e.mintA.address===j.toBase58(),b=u.useSOLBalance&&e.mintB.address===j.toBase58(),g;!s||s.equals(new _(0))?g=y?Rt.add(new dt(1)):Lt.sub(new dt(1)):g=re.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 ie(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?r:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let A;if(!A){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:u.feePayer||this.scope.ownerPubKey,amount:y?0:r}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=B,T&&p.addInstruction(T)}(!h||!A)&&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:A,mintAUseSOLBalance:f,mintBUseSOLBalance:b,associatedOnly:l});let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(Te.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:A},inputMint:new ie(n),amountIn:r,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:c})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)r?Pe(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(c[m.accountInfo.mint.toString()]=m.pubkey):c[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(A=>!A.liquidity.isZero()||A.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===j.toString(),y=n.useSOLBalance&&d.mintB.address===j.toString(),f=c[d.mintA.address];if(!f){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ie(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:i});f=A,k&&l.addInstruction(k)}let b=c[d.mintB.address];if(!b){let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ie(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:i});b=A,k&&l.addInstruction(k)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let k=n.useSOLBalance&&A.mint.address===j.toString(),B=c[A.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(A.mint.programId),mint:new ie(A.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:r});B=T,S&&l.addInstruction(S)}c[A.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let k=Te.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new dt(0),amountMinA:new dt(0),amountMinB:new dt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(ur(e).publicKey);return t?Ua.decode(t.data).whitelistMints.filter(r=>!r.equals(ie.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new dt(1))).map(s=>lt(new ie(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return r.forEach(s=>{if(!s)return;let a=po.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 Ne(this.scope.connection,e.map(i=>({pubkey:new ie(i)})),t),r={};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=un.decode(s.accountInfo.data),u=re.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[i])]=E(C({},a),{currentPrice:u,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].ammConfig.toBase58())),r=await Ne(this.scope.connection,Array.from(n).map(u=>({pubkey:new ie(u)}))),i={};r.forEach(u=>{!u.accountInfo||(i[u.pubkey.toBase58()]=qa.decode(u.accountInfo.data))});let s=await Ke.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var m,d,p,y;let[c,l]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:He({address:c,decimals:e[u].mintDecimalsA,programId:t[c].programId.toBase58()||eu.toBase58(),extensions:{feeConfig:(m=t[c])!=null&&m.feeConfig?Zt((d=t[c])==null?void 0:d.feeConfig):void 0}}),mintB:He({address:l,decimals:e[u].mintDecimalsB,programId:t[l].programId.toBase58()||eu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Zt((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[u].currentPrice,config:E(C({},i[e[u].ammConfig.toBase58()]),{id:e[u].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Ke.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()]),r=await kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ie(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await Ne(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=Da(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number($a.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number($a.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let c=E(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:u.config});return{poolInfo:u,poolKeys:c,computePoolInfo:i[e],tickData:s}}};import{PublicKey as ee}from"@solana/web3.js";import{NATIVE_MINT as Io,TOKEN_PROGRAM_ID as mn,AccountLayout as Zm}from"@solana/spl-token";import nu from"bn.js";var qi=new nu(1e6);function Vm(o,e,t){return o.mul(e).add(t).sub(new nu(1)).div(t)}function tu(o,e,t){return o.mul(e).div(t)}var bo=class{static tradingFee(e,t){return Vm(e,t,qi)}static protocolFee(e,t){return tu(e,t,qi)}static fundFee(e,t){return tu(e,t,qi)}};import yr from"bn.js";function go(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function Em(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=go(o,e);if(n.gt(Rn)){t=t.add(new yr(1));let r=o.div(t);n=go(o,t),n.gt(Rn)&&(r=r.add(new yr(1)))}return[t,e]}var Rn=new yr(0),wo=class{static swapWithoutFees(e,t,n){let r=t.mul(n),i=t.add(e),[s,a]=Em(r,i),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}static lpTokensToTradingTokens(e,t,n,r,i){let s=e.mul(n).div(t),a=e.mul(r).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return go(e.mul(n),t).gt(Rn)&&s.gt(Rn)&&(s=s.add(new yr(1))),go(e.mul(r),t).gt(Rn)&&a.gt(Rn)&&(a=a.add(new yr(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Ao=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,r){let i=bo.tradingFee(e,r),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:u}=wo.swapWithoutFees(s,t,n),c=a.add(i);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:i}}};var Fm=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Dm=Buffer.from("amm_config","utf8"),Wm=Buffer.from("pool","utf8"),qm=Buffer.from("pool_lp_mint","utf8"),Um=Buffer.from("pool_vault","utf8"),Gm=Buffer.from("observation","utf8");function Ln(o){return le([Fm],o)}function Xm(o,e){return le([Dm,Ym(e)],o)}function zm(o,e,t,n){return le([Wm,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Qm(o,e){return le([qm,e.toBuffer()],o)}function ru(o,e,t){return le([Um,e.toBuffer(),t.toBuffer()],o)}function Ui(o,e){return le([Gm,e.toBuffer()],o)}function Ym(o){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,o,!1),new Uint8Array(e)}function ou({programId:o,mintA:e,mintB:t}){let n=Xm(o,0).publicKey,r=Ln(o).publicKey,i=zm(o,n,e,t).publicKey,s=Qm(o,i).publicKey,a=ru(o,i,e).publicKey,u=ru(o,i,t).publicKey,c=Ui(o,i).publicKey;return{poolId:i,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as ho}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Gi,TOKEN_2022_PROGRAM_ID as iu,ASSOCIATED_TOKEN_PROGRAM_ID as jm}from"@solana/spl-token";var Hm=se("Raydium_cpmm"),Po={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 su(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let k=V([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:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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:Gi,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:jm,isSigner:!1,isWritable:!1},{pubkey:qo,isSigner:!1,isWritable:!1},{pubkey:bt,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:A},T),new ho({keys:B,programId:o,data:Buffer.from([...Po.initialize,...T])})}function au(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([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:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:iu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Hm.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new ho({keys:b,programId:o,data:Buffer.from([...Po.deposit,...g])})}function uu(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){let f=V([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:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:iu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Nr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new ho({keys:b,programId:o,data:Buffer.from([...Po.withdraw,...g])})}function ko(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y,f){let b=V([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,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 ho({keys:g,programId:o,data:Buffer.from([...Po.swapBaseInput,...h])})}import _e from"bn.js";var cu=V([pe(8),W("bump"),qe("disableCreatePool"),St("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),To=V([pe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var br=class extends ke{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 Ne(this.scope.connection,e.map(m=>({pubkey:new ee(m)}))),r={},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=To.decode(d.accountInfo.data);r[String(e[m])]=E(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 Ne(this.scope.connection,m.map(p=>({pubkey:new ee(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]]=cu.decode(y.data)}}let u={},c=await Ne(this.scope.connection,s.map(m=>({pubkey:new ee(m)})));for(let m=0;m<s.length;m++){let d=c[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new _e(Zm.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=E(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:u[d.vaultA.toString()],vaultBAmount:u[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new _(y.toString()).div(new _(10).pow(d.mintDecimalB)).div(new _(p.toString()).div(new _(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var u,c,l,m;let i=e[r],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return E(C({},n),{[r]:E(C({},i),{id:new ee(r),configInfo:i.configInfo,version:7,authority:Ln(i.programId).publicKey,mintA:He({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[s])!=null&&u.feeConfig?Zt((c=t[s])==null?void 0:c.feeConfig):void 0}}),mintB:He({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Zt((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]}),r=He({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Zt(n[t.mintA.toBase58()].feeConfig):void 0}}),i=He({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Zt(n[t.mintB.toBase58()].feeConfig):void 0}}),s=He({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:mn.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()},u={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:r,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new _(t.vaultAAmount.toString()).div(10**r.decimals).toNumber(),mintAmountB:new _(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:r,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Ln(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=Be(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var D,F,Z;let d=r.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),p=new _e(new ee(c.mintA.address).toBuffer()).lte(new _e(new ee(c.mintB.address).toBuffer())),[y,f]=p?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=p?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],h=r.useSOLBalance&&y.address===Io.toBase58(),A=r.useSOLBalance&&f.address===Io.toBase58(),[k,B]=[new ee(y.address),new ee(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:L,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:new ee(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:d,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:i,checkCreateATAOwner:s});if(T.addInstruction(I||{}),S===void 0||L===void 0)throw Error("you don't has some token account");let R=ou({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[su(e,this.scope.ownerPubKey,R.configId,R.authority,R.poolId,k,B,R.lpMint,S,L,Pe(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,t,new ee((F=y.programId)!=null?F:mn),new ee((Z=f.programId)!=null?Z:mn),R.observationId,b,g,n)],instructionTypes:[v.CpmmCreatePool]}),T.addCustomComputeBudget(u),T.versionBuild({txVersion:a,extInfo:{address:E(C({},R),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:r,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:u,config:c,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:E(C({},t),{lpAmount:new _(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Ye(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new _(r.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,A=t.mintA.address===Io.toString(),k=t.mintB.address===Io.toString(),B=this.createTxBuilder(),[T,S]=[new ee(t.mintA.address),new ee(t.mintB.address)],{account:x,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ee(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(i?r:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?r:h}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{});let{account:I,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ee(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:r).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:r}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let D=await m.getCreatedTokenAccount({mint:new ee(t.lpMint.address)}),Qe=await m.handleTokenAccount({side:"out",amount:0,mint:new ee(t.lpMint.address),tokenAccount:D,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:F}=Qe,Z=Be(Qe,["tokenAccount"]);B.addInstruction(Z);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Ye(new _e(1)).sub(s);return B.addInstruction({instructions:[au(new ee(t.programId),this.scope.ownerPubKey,new ee(G.authority),new ee(t.id),F,x,I,new ee(G.vault.A),new ee(G.vault.B),T,S,new ee(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(u),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var F,Z;let{poolInfo:t,poolKeys:n,lpAmount:r,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new Ye(new _e(1)).sub(i),c=await this.getRpcPoolInfo(t.id),[l,m]=[u.mul(r.mul(c.baseReserve).div(c.lpAmount)).quotient,u.mul(r.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[we(l,t.mintA.extensions.feeConfig,d,!1),we(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new ee(t.mintA.address),new ee(t.mintB.address)],A=g.equals(j),k=h.equals(j),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ee(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:L,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ee(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});T=L,I&&b.addInstruction(I),(!B||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let R=await f.getCreatedTokenAccount({mint:new ee(t.lpMint.address)});R||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let D=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[uu(new ee(t.programId),this.scope.ownerPubKey,new ee(D.authority),new ee(t.id),R,B,T,new ee(D.vault.A),new ee(D.vault.B),g,h,new ee(t.lpMint.address),r,l.sub((F=p.fee)!=null?F:new _e(0)),m.sub((Z=y.fee)!=null?Z:new _e(0)))],instructionTypes:[v.CpmmWithdrawLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var x,L,I,R;let{poolInfo:t,poolKeys:n,baseIn:r,inputAmount:i,swapResult:s,slippage:a=0,config:u,computeBudgetConfig:c,txVersion:l}=e,{bypassAssociatedCheck:m,checkCreateATAOwner:d,associatedOnly:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),y=this.createTxBuilder(),[f,b]=[new ee(t.mintA.address),new ee(t.mintB.address)];s.destinationAmountSwapped=s.destinationAmountSwapped.mul(new _e((1-a)*1e4)).div(new _e(1e4));let g=t.mintA.address===j.toBase58(),h=t.mintB.address===j.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new ee((x=t.mintA.programId)!=null?x:mn),owner:this.scope.ownerPubKey,createInfo:g||!r?{payer:this.scope.ownerPubKey,amount:r?s.sourceAmountSwapped:0}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:p,checkCreateATAOwner:d});k&&y.addInstruction(k);let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new ee((L=t.mintB.programId)!=null?L:mn),owner:this.scope.ownerPubKey,createInfo:h||r?{payer:this.scope.ownerPubKey,amount:r?0:s.sourceAmountSwapped}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:p,checkCreateATAOwner:d});T&&y.addInstruction(T),(!A||!B)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:A,mintBTokenAcc:B,mintAUseSOLBalance:g,mintBUseSOLBalance:h,associatedOnly:p});let S=n!=null?n:await this.getCpmmPoolKeys(t.id);return y.addInstruction({instructions:[ko(new ee(t.programId),this.scope.ownerPubKey,new ee(S.authority),new ee(S.config.id),new ee(t.id),r?A:B,r?B:A,new ee(S.vault[r?"A":"B"]),new ee(S.vault[r?"B":"A"]),new ee((I=t[r?"mintA":"mintB"].programId)!=null?I:mn),new ee((R=t[r?"mintB":"mintA"].programId)!=null?R:mn),r?f:b,r?b:f,Ui(new ee(t.programId),new ee(t.id)).publicKey,i,s.destinationAmountSwapped)],instructionTypes:[r?v.CpmmSwapBaseIn:v.CpmmSwapBaseOut]}),y.addCustomComputeBudget(c),y.versionBuild({txVersion:l})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let i=n.toString()===e.mintB.address,s=Ao.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new _(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),u=s.destinationAmountSwapped.mul(new _e((1-r)*1e4)).div(new _e(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:u,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:r,slippage:i,epochInfo:s,baseIn:a}){var h,A,k,B,T,S,x,L;let u=1-Number(i.toSignificant())/100,c=new _e(new _(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=we(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((h=l.fee)!=null?h:new _e(0)),d=new _e(new _(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,_.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.toString(),"amountInFee:",(k=(A=l.fee)==null?void 0:A.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:at,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=Jm(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=we(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Ye(new _e(1)).add(i),g=we(b.mul(f.amount.sub((B=f.fee)!=null?B:new _e(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:",(L=(x=g.fee)==null?void 0:x.toString())!=null?L:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function Jm(o,e,t,n){let r=o.mul(e).div(n);!r.isZero()&&!o.mul(e).mod(n).isZero()&&(r=r.add(new _e(1)));let i=o.mul(t).div(n);return!i.isZero()&&!o.mul(t).mod(n).isZero()&&(i=i.add(new _e(1))),{amountA:r,amountB:i}}import{PublicKey as pn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ie,TOKEN_2022_PROGRAM_ID as So,createTransferInstruction as yu}from"@solana/spl-token";import Ko from"bn.js";import{TOKEN_PROGRAM_ID as $m,TOKEN_2022_PROGRAM_ID as ed,ASSOCIATED_TOKEN_PROGRAM_ID as td}from"@solana/spl-token";import{PublicKey as $,TransactionInstruction as nd,SystemProgram as rd}from"@solana/web3.js";import dn from"bn.js";function od(o,e,t,n,r,i,s,a,u,c,l,m,d,p,y){var T;let f=[],b=[P({pubkey:$m,isWritable:!1}),P({pubkey:ed,isWritable:!1}),P({pubkey:td,isWritable:!1}),P({pubkey:rd.programId,isWritable:!1}),P({pubkey:e,isSigner:!0})];b.push(P({pubkey:t})),b.push(P({pubkey:r}));let g=[u,c],h=[l,m],A=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],L=A[S]===x.mintA.address;if(b.push(P({pubkey:new $(x.programId),isWritable:!1})),S===g.length-1?b.push(P({pubkey:r})):b.push(P({pubkey:n})),b.push(P({pubkey:new $(A[S])})),b.push(P({pubkey:new $(A[S+1])})),x.version===6){let I=h[S];b.push(P({pubkey:new $(I.config.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(L?I.vault.A:I.vault.B)})),b.push(P({pubkey:new $(L?I.vault.B:I.vault.A)})),b.push(P({pubkey:new $(x.observationId)})),b.push(P({pubkey:Nr})),b.push(P({pubkey:ot(new $(x.programId),new $(x.id)).publicKey})),f.push(id(x.sqrtPriceX64.toString(),L));for(let R of(T=y[S])!=null?T:[])b.push(P({pubkey:new $(R)}))}else if(x.version===5){let I=h[S];b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.authority),isWritable:!1})),b.push(P({pubkey:new $(I.marketProgramId)})),b.push(P({pubkey:new $(I.marketAuthority)})),b.push(P({pubkey:Vs,isWritable:!1})),b.push(P({pubkey:new $(I.openOrders)})),b.push(P({pubkey:new $(I.vault.A)})),b.push(P({pubkey:new $(I.vault.B)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.marketId)})),b.push(P({pubkey:new $(I.marketBids)})),b.push(P({pubkey:new $(I.marketAsks)})),b.push(P({pubkey:new $(I.marketEventQueue)})),b.push(P({pubkey:new $(I.marketBaseVault)})),b.push(P({pubkey:new $(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],R=x.status!==1;b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(I.authority),isWritable:!1})),b.push(P({pubkey:new $(R?I.id:I.marketProgramId)})),b.push(P({pubkey:new $(R?I.id:I.marketAuthority)})),b.push(P({pubkey:new $(R?I.id:I.openOrders)})),b.push(P({pubkey:new $(I.vault.A)})),b.push(P({pubkey:new $(I.vault.B)})),b.push(P({pubkey:new $(R?I.id:I.marketId)})),b.push(P({pubkey:new $(R?I.id:I.marketBids)})),b.push(P({pubkey:new $(R?I.id:I.marketAsks)})),b.push(P({pubkey:new $(R?I.id:I.marketEventQueue)})),b.push(P({pubkey:new $(R?I.id:I.marketBaseVault)})),b.push(P({pubkey:new $(R?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(P({pubkey:new $(I.authority)})),b.push(P({pubkey:new $(I.config.id)})),b.push(P({pubkey:new $(I.id)})),b.push(P({pubkey:new $(L?I.vault.A:I.vault.B)})),b.push(P({pubkey:new $(L?I.vault.B:I.vault.A)})),b.push(P({pubkey:new $(x.observationId)}))}else throw Error("pool type error")}let k=V([W("insId"),w("amountIn"),w("amountOut"),X(z(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new nd({keys:b,programId:o,data:B})}function id(o,e){if(o)if(e){let t=new dn(o).div(new dn(25));return t.gt(co)?t:co}else{let t=new dn(o).mul(new dn(25));return t.lt(lo)?t:lo}else return e?co:lo}function lu({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var r,i,s,a,u,c,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ee(m),p=t.equals(d.mintA.address)?Rt.add(it):Lt.sub(it);return Te.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=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?i:new dn(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:[ko(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new $(m[d?"mintA":"mintB"].address),new $(m[d?"mintB":"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:[io({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((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new dn(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:[od(o,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=(c=n.minAmountOut.fee)==null?void 0:c.raw)!=null?l:new dn(0)),n.remainingAccounts)],instructionTypes:[v.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var mu={[ei.toBase58()]:3},du={3:ei};var Xi=V([pe(5),pe(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"),pe(7)]),pu={3:Xi};import{PublicKey as fu}from"@solana/web3.js";var Bo=se("Serum"),xo=class{static getProgramId(e){let t=du[e];return t||Bo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=mu[t];return n||Bo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=pu[e];return t||Bo.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()],r=0,i;for(;r<100;){try{let s=n.concat(Buffer.from([r]),Buffer.alloc(7));i=fu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:i,nonce:r}}return Bo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:fu.default,nonce:r}}};var Et=new Ko(0),gr=class extends ke{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(j));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:r=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let u=H(t);for(let c=0;c<i.length;c++)u.gte(i[c].amount)?(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(i[c].amount)):(s.addInstruction({instructions:[Kt({tokenAccount:i[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),jn({destination:a.addresses.newAccount,source:i[c].publicKey,amount:u,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:r})}async wrapWSol(e,t,n){let r=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),r.length&&i.addInstruction({instructions:[jn({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Kt({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:r,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),u=e.amountIn,c=e.amountOut,l=u.amount.token.mint.equals(j),m=c.amount.token.mint.equals(j),d=u.amount.token.mint,p=c.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?So:Ie,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:u.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;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,c.amount.token.isToken2022?So:Ie);else{let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?So:Ie,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=k,B&&a.addInstruction(B)}m&&a.addInstruction({endInstructions:[Kt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ie})],endInstructionTypes:[v.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?So:Ie)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=lu({routeProgram:i,inputMint:d,swapInfo:E(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:[yu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]}),k.addInstruction(A);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[yu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[v.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=vs,clmm:n=Es,cpmm:r=Fs}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:oo.offsetOf("baseMint"),length:64}}),s=V([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})),u=V([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:un.span}],dataSlice:{offset:un.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(r,{dataSlice:{offset:To.offsetOf("mintA"),length:64}})).map(p=>{let y=u.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:r,cpmmPools:i}){e=e.toString()===pn.default.toString()?j:e,t=t.toString()===pn.default.toString()?j:t;let s={},a={},u={},c=[],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))&&(c.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ie,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:Ie,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:Ie,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:Ie,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.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:Ie,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:Ie,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:Ie,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:Ie,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))&&(c.push(d),u[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ie,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:Ie,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:Ie,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:Ie,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&&u[y.id.toString()]===void 0?u[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&&u[f.id.toString()]===void 0?u[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:c,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let r=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=yo(i),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new pn(f.mintA.address),programId:Ie,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},r.delete(f.mintB.address),a[f.mintB.address]={address:new pn(f.mintB.address),programId:Ie,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 u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(u).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Ie)?(r.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}):r.add(b),f.mintProgramB.equals(Ie)?(r.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}):r.add(g)}),console.log("fetching mints info, total: ",r.size);let c=await kn({connection:this.scope.connection,mints:Array.from(r).map(f=>new pn(f))});a=C(C({},a),c);let l=this.scope.cpmm.toComputePoolInfos({pools:u,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)=>E(C({},f),{[b]:E(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:r,simulateCache:i,tickCache:s,slippage:a,chainTime:u,epochInfo:c,feeConfig:l}){var g,h,A,k,B,T,S,x,L;let m=l===void 0?new Ko(0):e.raw.mul(new Ko(l.feeBps.toNumber())).div(new Ko(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=E(C({},t),{address:nt(t.address).toString()}),b=[];for(let I of n)try{b.push(E(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(R){this.logDebug("direct error",I.version,I.id.toString(),R.message)}this.logDebug("direct done");for(let[I,R]of Object.entries(r)){let D={chainId:101,address:I,programId:R.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:R.mDecimals,tags:[],extensions:{}},F=R.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:D,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var $t,Ft,bn,Nt;let Qe=G===void 0?Et:G.data.amountOut.amount.raw.sub((Ft=($t=G.data.amountOut.fee)==null?void 0:$t.raw)!=null?Ft:Et),yn=q===void 0?Et:q.data.amountOut.amount.raw.sub((Nt=(bn=q.data.amountOut.fee)==null?void 0:bn.raw)!=null?Nt:Et);return Qe.lt(yn)?1:-1})[0];if(F===void 0)continue;let Z=new ye(ro(D),F.data.amountOut.amount.raw.sub((h=(g=F.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Et));for(let G of R.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:Z});b.push(E(C({},q),{allTrade:!!(F.data.allTrade&&q.allTrade),amountIn:F.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new _(new $e({baseToken:F.data.amountIn.amount.token,denominator:F.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((k=(A=q.amountOut.fee)==null?void 0:A.raw)!=null?k:Et)}).toFixed()),priceImpact:new _(F.data.priceImpact.add(q.priceImpact).toFixed()),fee:[F.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[F.pool,G],remainingAccounts:[F.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(B=q.amountOut.fee)!=null&&B.raw?new ye(F.data.amountOut.amount.token,((S=(T=F.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Et).add((L=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?L:Et)):void 0,middleToken:F.data.amountOut.amount.token,poolReady:F.data.poolReady&&q.poolReady,poolType:[F.data.poolType,q.poolType],feeConfig:y,expirationTime:xt(F.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(I=>(I.allTrade||this.logDebug(`pool ${I.poolInfoList.map(R=>R.id.toString()).join(",")} filter out since not all trade`),I.allTrade)).sort((I,R)=>I.amountOut.amount.raw.sub(R.amountOut.amount.raw).gt(Et)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,epochInfo:i,slippage:s,outputToken:a,amountIn:u}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:A}=Ke.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new _(y.toFixed()),executionPrice:new _(f.toFixed()),priceImpact:new _(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:xt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:s});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:or(E(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:or(E(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(u.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<r,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:c,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:or(E(C({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:or(E(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(u.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<r,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 r=new Set(e.filter(c=>c.version===6&&!t[c.id.toString()]).map(c=>c.id.toString()));if(r.size>0){let c=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});Object.keys(c).forEach(l=>{t[l]=c[l]})}if(new Set(e.filter(c=>c.version===4&&!n[c.id.toString()]).map(c=>c.id.toString())).size>0){let c=await this.scope.liquidity.getRpcPoolInfos(Array.from(r));Object.keys(c).forEach(l=>{n[l]=c[l]})}let s=new Set(e.filter(c=>c.version===4).map(c=>c.marketId)),a={};s.size>0&&(await Ne(this.scope.connection,Array.from(s).map(l=>({pubkey:new pn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Xi.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:xo.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 u=[];return e.forEach(c=>{if(c.version===6){let l=t[c.id.toString()],m={programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:E(C({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};u.push(m)}else if(c.version===4){let l=n[c.id.toString()],m=C({programId:c.programId,id:c.id,mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Wi({programId:new pn(c.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:c.lpMint},a[c.marketId]);u.push(m)}else c.version===7&&u.push({programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),authority:Ln(c.programId).publicKey.toBase58(),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},mintLp:He({address:c.mintLp.toBase58(),programId:Ie.toBase58(),decimals:c.lpDecimals}),config:E(C({id:c.configId.toBase58()},c.configInfo),{protocolFeeRate:c.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:c.configInfo.tradeFeeRate.toNumber(),fundFeeRate:c.configInfo.fundFeeRate.toNumber(),createPoolFee:c.configInfo.createPoolFee.toString()})})}),u}};import{TOKEN_PROGRAM_ID as sd}from"@solana/spl-token";import{PublicKey as ad,Transaction as zi,TransactionInstruction as ud}from"@solana/web3.js";import bu from"bn.js";var ze=class extends ke{static getPdaPoolId(e,t){return le([ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return le([ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new bu(r).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:r,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>ze.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<ze.VERSION_PROJECT.length;l++)a.push(...s.map(m=>ze.getPdaOwnerId(t,m,r,l).publicKey));let u=await gt(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=u[d],b=u[n.length+l];if(!(f&&b)||f.data.length!==ze.POOL_LAYOUT.span||b.data.length!==ze.OWNER_LAYOUT.span)continue;let g=ze.POOL_LAYOUT.decode(f.data),h=ze.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new bu(0))).filter(x=>!x).length!==3,T=i>A&&i<k&&g.status===1,S=B&&T;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:ze.VERSION_PROJECT[m],openTime:A,endTime:k,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,L)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[L].debtAmount.add(h.tokenInfo[L].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,i=[];for(let u of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(he.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(he.WSOL.mint),associatedOnly:u.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(c)}n.addInstruction({instructions:[ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,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(),r=t.wallet||this.scope.ownerPubKey,i={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(he.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(he.WSOL.mint),associatedOnly:m.mintAddress.equals(he.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[ze.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:r,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return jo(u,[r,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new zi().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new zi().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new zi().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=V([]),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(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:sd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new ud({keys:i,programId:e,data:a})}},pt=ze;pt.CLAIMED_NUM=3,pt.POOL_LAYOUT=V([pe(8),W("bump"),W("status"),w("openTime"),w("endTime"),K("ammId"),X(V([W("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),pt.OWNER_LAYOUT=V([pe(8),W("bump"),W("version"),K("poolId"),K("owner"),w("lpAmount"),X(V([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),ze.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),pt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new ad(e)),pt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},pt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as wr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Pu}from"@solana/spl-token";import Ar from"bn.js";import{TransactionInstruction as ld,SYSVAR_RENT_PUBKEY as md}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as gu}from"@solana/spl-token";import{createInitializeAccountInstruction as wu}from"@solana/spl-token";import{SystemProgram as fn,Transaction as Au}from"@solana/web3.js";function cd(o="accountFlags"){let e=new Yr(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Qi=V([pe(5),cd("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"),pe(7)]);function dd({programId:o,marketInfo:e}){let t=V([W("version"),je("instruction"),w("baseLotSize"),w("quoteLotSize"),St("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:md,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}:[]),r=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},r),new ld({keys:n,programId:o,data:r})}async function hu({connection:o,wallet:e,marketInfo:t}){var s,a,u,c,l,m,d,p;let n=new Au,r=await o.getMinimumBalanceForRentExemption(165);n.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:gu}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:gu}),wu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),wu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new Au;return i.add(fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(Qi.span),space:Qi.span,programId:t.programId}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((u=t.eventQueueSpace)!=null?u:262144+12),space:(c=t.eventQueueSpace)!=null?c:262144+12,programId:t.programId}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),fn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),dd({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 On=class extends ke{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:i,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u,txVersion:c,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=Ue({fromPublicKey:m,programId:i}),p=Ue({fromPublicKey:m,programId:i}),y=Ue({fromPublicKey:m,programId:i}),f=Ue({fromPublicKey:m,programId:i}),b=Ue({fromPublicKey:m,programId:i}),g=Ue({fromPublicKey:m,programId:Pu}),h=Ue({fromPublicKey:m,programId:Pu}),A=0,k=new Ar(100);function B(){let D=new Ar(0);for(;;)try{return{vaultOwner:wr.createProgramAddressSync([d.publicKey.toBuffer(),D.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:D}}catch{if(D.iaddn(1),D.gt(new Ar(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=B(),x=new Ar(Math.round(10**e.decimals*n)),L=new Ar(Math.round(n*10**t.decimals*r));if(x.eq(at))throw Error("lot size is too small");if(L.eq(at))throw Error("tick size or lot size is too small");let I=await hu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:i,id:d,baseMint:e.mint,quoteMint:t.mint,baseVault:g,quoteVault:h,vaultOwner:T,requestQueue:p,eventQueue:y,bids:f,asks:b,feeRateBps:A,quoteDustThreshold:k,vaultSignerNonce:S,baseLotSize:x,quoteLotSize:L,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u}}),R=this.createTxBuilder();R.addInstruction({instructions:I[0].transaction.instructions,signers:I[0].signer});for await(let D of I.slice(1,I.length))R.addInstruction({instructions:D.transaction.instructions,signers:D.signer,instructionTypes:D.instructionTypes});return c===0?R.sizeCheckBuildV0({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:h.publicKey,baseMint:new wr(e.mint),quoteMin:new wr(t.mint)}}):R.sizeCheckBuild({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:h.publicKey,baseMint:new wr(e.mint),quoteMin:new wr(t.mint)}})}};import{PublicKey as Pr}from"@solana/web3.js";import{TransactionInstruction as ku,SYSVAR_CLOCK_PUBKEY as fd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Tu}from"@solana/spl-token";var pd=V([W("instruction"),Xs("amount")]),hr=V([W("instruction")]);function Co({programId:o},e){let t=[{pubkey:Tu,isSigner:!1,isWritable:!1},{pubkey:As,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,i])=>({pubkey:i,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(hr.span);return hr.encode({instruction:2},n),new ku({keys:t,programId:o,data:n})}function Yi(o){let{poolConfig:e,userKeys:t,side:n}=o,r=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(hr.span);hr.encode({instruction:2},s);let a=[{pubkey:Tu,isWritable:!1,isSigner:!1},{pubkey:fd,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:r,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new ku({programId:e.programId,keys:a,data:s})}import Iu from"bn.js";var yd={[zn.IDO_PROGRAM_ID_V1.toString()]:1,[zn.IDO_PROGRAM_ID_V2.toString()]:2,[zn.IDO_PROGRAM_ID_V3.toString()]:3,[zn.IDO_PROGRAM_ID_V4.toString()]:4},Nn=class extends ke{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:i}){let s=this.createTxBuilder(),a=yd[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ee(t),[c,l]=[!new Iu(e.coin).isZero(),!new Iu(e.pc).isZero()],m=u.projectInfo.mint.address.equals(j),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:r});!d&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&p&&s.addInstruction(p);let y=u.buyInfo.mint.address.equals(j),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});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:[...c?[Co({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Co({programId:new Pr(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Co({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Pr(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new Pr(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[Yi(E(C({},g),{side:"base"}))]:[],...l?[Yi(E(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as bd}from"@solana/web3.js";import{MintLayout as gd,TOKEN_2022_PROGRAM_ID as ji,TOKEN_PROGRAM_ID as Hi}from"@solana/spl-token";var kr=class extends ke{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:r="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(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(Xt.address,Xt),this._mintGroup.official.add(Xt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,E(C({},c),{priority:-1}))}),i.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?ji.toBase58():Hi.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?ji.toBase58():Hi.toBase58()})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,E(C({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?ji.toBase58():Hi.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[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(),r=this._tokenMap.get(n);if(r)return r;if(n.toLocaleUpperCase()==="SOL")return Xt;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,E(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new bd(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=gd.decode(s.data),u=n.toString().substring(0,6),c={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var Ro=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:c="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new wt(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=c,this.api=i,this._apiCacheTime=u||5*60*1e3,this.logger=se("Raydium"),this.farm=new rr({scope:this,moduleName:"Raydium_Farm"}),this.account=new Hn({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new pr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new kr({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new gr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new fr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new br({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new pt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new On({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Nn({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=wd({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:i,logRequests:s,urlConfigs:a}=t,u=new Xr({cluster:n,timeout:r,urlConfigs:a,logCount:i,logRequests:s}),c=new Ro(E(C({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(zr);return this._owner.publicKey}setOwner(e){return this._owner=e?new wt(e):void 0,this}get connection(){if(!this._connection)throw new Error(qs);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(zr),new Error(zr)}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){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}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{}}}};export{Ro as Raydium};
|
|
2
2
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
3
3
|
//# sourceMappingURL=raydium.mjs.map
|