@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.
Files changed (106) hide show
  1. package/lib/api/api.d.ts +1 -1
  2. package/lib/api/index.d.ts +1 -1
  3. package/lib/api/type.d.ts +1 -1
  4. package/lib/common/accountInfo.d.ts +1 -1
  5. package/lib/common/bignumber.d.ts +1 -1
  6. package/lib/common/fractionUtil.d.ts +1 -1
  7. package/lib/common/index.d.ts +1 -1
  8. package/lib/common/transfer.d.ts +1 -1
  9. package/lib/common/txTool/txTool.d.ts +1 -1
  10. package/lib/common/txTool/txUtils.d.ts +1 -1
  11. package/lib/common/utility.d.ts +1 -1
  12. package/lib/index.d.ts +3 -3
  13. package/lib/index.js +1 -1
  14. package/lib/index.js.map +1 -1
  15. package/lib/index.mjs +1 -1
  16. package/lib/index.mjs.map +1 -1
  17. package/lib/module/amount.d.ts +1 -1
  18. package/lib/module/fraction.d.ts +1 -1
  19. package/lib/module/index.d.ts +1 -1
  20. package/lib/module/percent.d.ts +1 -1
  21. package/lib/module/price.d.ts +1 -1
  22. package/lib/raydium/account/account.d.ts +3 -3
  23. package/lib/raydium/account/index.d.ts +1 -1
  24. package/lib/raydium/account/instruction.d.ts +1 -1
  25. package/lib/raydium/account/types.d.ts +1 -1
  26. package/lib/raydium/account/util.d.ts +1 -1
  27. package/lib/raydium/clmm/clmm.d.ts +3 -3
  28. package/lib/raydium/clmm/index.d.ts +3 -3
  29. package/lib/raydium/clmm/instrument.d.ts +2 -2
  30. package/lib/raydium/clmm/layout.d.ts +1 -1
  31. package/lib/raydium/clmm/type.d.ts +2 -2
  32. package/lib/raydium/clmm/utils/math.d.ts +2 -2
  33. package/lib/raydium/clmm/utils/pool.d.ts +2 -2
  34. package/lib/raydium/clmm/utils/position.d.ts +2 -2
  35. package/lib/raydium/clmm/utils/tick.d.ts +2 -2
  36. package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
  37. package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
  38. package/lib/raydium/cpmm/cpmm.d.ts +3 -3
  39. package/lib/raydium/cpmm/cpmm.js +1 -1
  40. package/lib/raydium/cpmm/cpmm.js.map +1 -1
  41. package/lib/raydium/cpmm/cpmm.mjs +1 -1
  42. package/lib/raydium/cpmm/cpmm.mjs.map +1 -1
  43. package/lib/raydium/cpmm/index.d.ts +1 -1
  44. package/lib/raydium/cpmm/layout.d.ts +1 -1
  45. package/lib/raydium/cpmm/type.d.ts +2 -1
  46. package/lib/raydium/cpmm/type.js.map +1 -1
  47. package/lib/raydium/farm/config.d.ts +1 -1
  48. package/lib/raydium/farm/farm.d.ts +3 -3
  49. package/lib/raydium/farm/index.d.ts +1 -1
  50. package/lib/raydium/farm/instruction.d.ts +1 -1
  51. package/lib/raydium/farm/layout.d.ts +1 -1
  52. package/lib/raydium/farm/type.d.ts +1 -1
  53. package/lib/raydium/farm/util.d.ts +1 -1
  54. package/lib/raydium/ido/ido.d.ts +3 -3
  55. package/lib/raydium/ido/index.d.ts +3 -3
  56. package/lib/raydium/ido/instruction.d.ts +1 -1
  57. package/lib/raydium/ido/type.d.ts +1 -1
  58. package/lib/raydium/index.d.ts +3 -3
  59. package/lib/raydium/index.js +1 -1
  60. package/lib/raydium/index.js.map +1 -1
  61. package/lib/raydium/index.mjs +1 -1
  62. package/lib/raydium/index.mjs.map +1 -1
  63. package/lib/raydium/liquidity/index.d.ts +1 -1
  64. package/lib/raydium/liquidity/instruction.d.ts +1 -1
  65. package/lib/raydium/liquidity/layout.d.ts +6 -6
  66. package/lib/raydium/liquidity/liquidity.d.ts +3 -3
  67. package/lib/raydium/liquidity/type.d.ts +1 -1
  68. package/lib/raydium/liquidity/utils.d.ts +1 -1
  69. package/lib/raydium/marketV2/createMarket.d.ts +3 -3
  70. package/lib/raydium/marketV2/createMarket.js.map +1 -1
  71. package/lib/raydium/marketV2/createMarket.mjs.map +1 -1
  72. package/lib/raydium/marketV2/index.d.ts +3 -3
  73. package/lib/raydium/marketV2/index.js.map +1 -1
  74. package/lib/raydium/marketV2/index.mjs.map +1 -1
  75. package/lib/raydium/moduleBase.d.ts +3 -3
  76. package/lib/raydium/raydium.d.ts +3 -3
  77. package/lib/raydium/raydium.js +1 -1
  78. package/lib/raydium/raydium.js.map +1 -1
  79. package/lib/raydium/raydium.mjs +1 -1
  80. package/lib/raydium/raydium.mjs.map +1 -1
  81. package/lib/raydium/token/constant.d.ts +1 -1
  82. package/lib/raydium/token/index.d.ts +1 -1
  83. package/lib/raydium/token/token.d.ts +3 -3
  84. package/lib/raydium/token/type.d.ts +1 -1
  85. package/lib/raydium/token/utils.d.ts +1 -1
  86. package/lib/raydium/tradeV2/index.d.ts +2 -2
  87. package/lib/raydium/tradeV2/index.js.map +1 -1
  88. package/lib/raydium/tradeV2/index.mjs.map +1 -1
  89. package/lib/raydium/tradeV2/instrument.d.ts +2 -2
  90. package/lib/raydium/tradeV2/trade.d.ts +3 -3
  91. package/lib/raydium/tradeV2/trade.js +1 -1
  92. package/lib/raydium/tradeV2/trade.js.map +1 -1
  93. package/lib/raydium/tradeV2/trade.mjs +1 -1
  94. package/lib/raydium/tradeV2/trade.mjs.map +1 -1
  95. package/lib/raydium/tradeV2/type.d.ts +2 -2
  96. package/lib/raydium/type.d.ts +1 -1
  97. package/lib/raydium/utils1216/index.d.ts +3 -3
  98. package/lib/raydium/utils1216/utils1216.d.ts +3 -3
  99. package/lib/{raydium-026a0a95.d.ts → raydium-15ed5dcf.d.ts} +3 -3
  100. package/lib/{type-c1771287.d.ts → type-b868e5e7.d.ts} +1 -1
  101. package/package.json +1 -1
  102. package/src/raydium/cpmm/cpmm.ts +2 -1
  103. package/src/raydium/cpmm/type.ts +1 -0
  104. package/src/raydium/marketV2/createMarket.ts +2 -2
  105. package/src/raydium/tradeV2/trade.ts +4 -4
  106. package/lib/{api-51b11f0d.d.ts → api-00b0713a.d.ts} +5 -5
@@ -1,3 +1,3 @@
1
- var ac=Object.defineProperty,uc=Object.defineProperties;var cc=Object.getOwnPropertyDescriptors;var Fo=Object.getOwnPropertySymbols;var xs=Object.prototype.hasOwnProperty,Ss=Object.prototype.propertyIsEnumerable;var Bs=(r,e,t)=>e in r?ac(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,C=(r,e)=>{for(var t in e||(e={}))xs.call(e,t)&&Bs(r,t,e[t]);if(Fo)for(var t of Fo(e))Ss.call(e,t)&&Bs(r,t,e[t]);return r},F=(r,e)=>uc(r,cc(e));var Ke=(r,e)=>{var t={};for(var n in r)xs.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Fo)for(var n of Fo(r))e.indexOf(n)<0&&Ss.call(r,n)&&(t[n]=r[n]);return t};import{merge as op}from"lodash";import ba from"axios";import{get as Ks,set as lc}from"lodash";var Xr=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}},Cs={},mc={};function ue(r){let e=Ks(Cs,r);if(!e){let t=Ks(mc,r);e=new Xr({name:r,logLevel:t}),lc(Cs,r,e)}return e}import{PublicKey as Pl}from"@solana/web3.js";import hl from"bn.js";import gl from"big.js";import er from"bn.js";import it from"bn.js";var In=9e15,Ht=1e9,zr="0123456789abcdef",Do="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Wo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Qr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-In,maxE:In,crypto:!1},Ns,Vt,oe=!0,Uo="[DecimalError] ",jt=Uo+"Invalid argument: ",Ms=Uo+"Precision limit exceeded",_s=Uo+"crypto unavailable",vs="[object Decimal]",Ge=Math.floor,Oe=Math.pow,dc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,pc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,fc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Vs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Pt=1e7,$=7,yc=9007199254740991,bc=Do.length-1,Yr=Wo.length-1,M={toStringTag:vs};M.absoluteValue=M.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),j(r)};M.ceil=function(){return j(new this.constructor(this),this.e+1,2)};M.clampedTo=M.clamp=function(r,e){var t,n=this,o=n.constructor;if(r=new o(r),e=new o(e),!r.s||!e.s)return new o(NaN);if(r.gt(e))throw Error(jt+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new o(n)};M.comparedTo=M.cmp=function(r){var e,t,n,o,i=this,s=i.d,a=(r=new i.constructor(r)).d,c=i.s,u=r.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==r.e)return i.e>r.e^c<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};M.cosine=M.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+$,n.rounding=1,t=gc(n,qs(n,t)),n.precision=r,n.rounding=e,j(Vt==2||Vt==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};M.cubeRoot=M.cbrt=function(){var r,e,t,n,o,i,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,i=l.s*Oe(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=De(l.d),r=l.e,(i=(r-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Oe(t,1/3),r=Ge((r+1)/3)-(r%3==(r<0?-1:2)),i==1/0?t="5e"+r:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(r=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Pe(u.plus(l).times(a),u.plus(c),s+2,1),De(a.d).slice(0,s)===(t=De(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(j(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(j(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,j(n,r,m.rounding,e)};M.decimalPlaces=M.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-Ge(this.e/$))*$,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(r){return Pe(this,new this.constructor(r))};M.dividedToIntegerBy=M.divToInt=function(r){var e=this,t=e.constructor;return j(Pe(e,new t(r),0,1,1),t.precision,t.rounding)};M.equals=M.eq=function(r){return this.cmp(r)===0};M.floor=function(){return j(new this.constructor(this),this.e+1,3)};M.greaterThan=M.gt=function(r){return this.cmp(r)>0};M.greaterThanOrEqualTo=M.gte=function(r){var e=this.cmp(r);return e==1||e===0};M.hyperbolicCosine=M.cosh=function(){var r,e,t,n,o,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,o=i.d.length,o<32?(r=Math.ceil(o/3),e=(1/Xo(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),i=Bn(s,1,i.times(e),new s(1),!0);for(var c,u=r,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return j(i,s.precision=t,s.rounding=n,!0)};M.hyperbolicSine=M.sinh=function(){var r,e,t,n,o=this,i=o.constructor;if(!o.isFinite()||o.isZero())return new i(o);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(o.e,o.sd())+4,i.rounding=1,n=o.d.length,n<3)o=Bn(i,2,o,o,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,o=o.times(1/Xo(5,r)),o=Bn(i,2,o,o,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);r--;)s=o.times(o),o=o.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,j(o,e,t,!0)};M.hyperbolicTangent=M.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,Pe(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};M.inverseCosine=M.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?wt(t,o,i):new t(0):new t(NaN):e.isZero()?wt(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),r=wt(t,o+4,i).times(.5),t.precision=o,t.rounding=i,r.minus(e))};M.inverseHyperbolicCosine=M.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};M.inverseHyperbolicSine=M.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln())};M.inverseHyperbolicTangent=M.atanh=function(){var r,e,t,n,o=this,i=o.constructor;return o.isFinite()?o.e>=0?new i(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(r=i.precision,e=i.rounding,n=o.sd(),Math.max(n,r)<2*-o.e-1?j(new i(o),r,e,!0):(i.precision=t=n-o.e,o=Pe(o.plus(1),new i(1).minus(o),t+r,1),i.precision=r+4,i.rounding=1,o=o.ln(),i.precision=r,i.rounding=e,o.times(.5))):new i(NaN)};M.inverseSine=M.asin=function(){var r,e,t,n,o=this,i=o.constructor;return o.isZero()?new i(o):(e=o.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(r=wt(i,t+4,n).times(.5),r.s=o.s,r):new i(NaN):(i.precision=t+6,i.rounding=1,o=o.div(new i(1).minus(o.times(o)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,o.times(2)))};M.inverseTangent=M.atan=function(){var r,e,t,n,o,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=Yr)return s=wt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Yr)return s=wt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/$+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/$),n=1,c=u.times(u),s=new l(u),o=u;r!==-1;)if(o=o.times(c),i=s.minus(o.div(n+=2)),o=o.times(c),s=i.plus(o.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===i.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),oe=!0,j(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&Ge(this.e/$)>this.d.length-2};M.isNaN=function(){return!this.s};M.isNegative=M.isNeg=function(){return this.s<0};M.isPositive=M.isPos=function(){return this.s>0};M.isZero=function(){return!!this.d&&this.d[0]===0};M.lessThan=M.lt=function(r){return this.cmp(r)<0};M.lessThanOrEqualTo=M.lte=function(r){return this.cmp(r)<1};M.logarithm=M.log=function(r){var e,t,n,o,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(o=t[0];o%10===0;)o/=10;i=o!==1}if(oe=!1,a=m+p,s=Yt(u,a),n=e?qo(l,a+10):Yt(r,a),c=Pe(s,n,a,1),Wn(c.d,o=m,d))do if(a+=10,s=Yt(u,a),n=e?qo(l,a+10):Yt(r,a),c=Pe(s,n,a,1),!i){+De(c.d).slice(o+1,o+15)+1==1e14&&(c=j(c,m+1,0));break}while(Wn(c.d,o+=10,d));return oe=!0,j(c,m,d)};M.minus=M.sub=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.constructor;if(r=new y(r),!p.d||!r.d)return!p.s||!r.s?r=new y(NaN):p.d?r.s=-r.s:r=new y(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(u=p.d,d=r.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])r.s=-r.s;else if(u[0])r=new y(p);else return new y(c===3?-0:0);return oe?j(r,a,c):r}if(t=Ge(r.e/$),l=Ge(p.e/$),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/$),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,r.s=-r.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=Pt-1;--u[o],u[n]+=Pt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(r.d=u,r.e=Go(u,t),oe?j(r,a,c):r):new y(c===3?-0:0)};M.modulo=M.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?j(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=Pe(t,r.abs(),0,3,1),e.s*=r.s):e=Pe(t,r,0,n.modulo,1),e=e.times(r),oe=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return jr(this)};M.naturalLogarithm=M.ln=function(){return Yt(this)};M.negated=M.neg=function(){var r=new this.constructor(this);return r.s=-r.s,j(r)};M.plus=M.add=function(r){var e,t,n,o,i,s,a,c,u,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(u=m.d,l=r.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(r=new d(m)),oe?j(r,a,c):r;if(i=Ge(m.e/$),n=Ge(r.e/$),u=u.slice(),o=i-n,o){for(o<0?(t=u,o=-o,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/$),s=i>s?i+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/Pt|0,u[o]%=Pt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=Go(u,n),oe?j(r,a,c):r};M.precision=M.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(jt+r);return t.d?(e=Fs(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var r=this,e=r.constructor;return j(new e(r),r.e+1,e.rounding)};M.sine=M.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+$,n.rounding=1,t=wc(n,qs(n,t)),n.precision=r,n.rounding=e,j(Vt>2?t.neg():t,r,e,!0)):new n(NaN)};M.squareRoot=M.sqrt=function(){var r,e,t,n,o,i,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(oe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=De(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=Ge((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(Pe(s,i,t+2,1)).times(.5),De(i.d).slice(0,t)===(e=De(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(j(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(j(n,c+1,1),r=!n.times(n).eq(s));break}return oe=!0,j(n,c,l.rounding,r)};M.tangent=M.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=Pe(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,j(Vt==2||Vt==4?t.neg():t,r,e,!0)):new n(NaN)};M.times=M.mul=function(r){var e,t,n,o,i,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=Ge(l.e/$)+Ge(r.e/$),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,s=c,c=u,u=s),i=[],s=c+u,n=s;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=i[o]+p[n]*d[o-n-1]+e,i[o--]=a%Pt|0,e=a/Pt|0;i[o]=(i[o]+e)%Pt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),r.d=i,r.e=Go(i,t),oe?j(r,m.precision,m.rounding):r};M.toBinary=function(r,e){return Zr(this,2,r,e)};M.toDecimalPlaces=M.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(nt(r,0,Ht),e===void 0?e=n.rounding:nt(e,0,8),j(t,r+t.e+1,e))};M.toExponential=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Kt(n,!0):(nt(r,0,Ht),e===void 0?e=o.rounding:nt(e,0,8),n=j(new o(n),r+1,e),t=Kt(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toFixed=function(r,e){var t,n,o=this,i=o.constructor;return r===void 0?t=Kt(o):(nt(r,0,Ht),e===void 0?e=i.rounding:nt(e,0,8),n=j(new i(o),r+o.e+1,e),t=Kt(n,!1,r+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};M.toFraction=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),i=e.e=Fs(y)-p.e-1,s=i%$,e.d[0]=Oe(10,s<0?$+s:s),r==null)r=i>0?e:u;else{if(a=new f(r),!a.isInt()||a.lt(u))throw Error(jt+a);r=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(De(y)),l=f.precision,f.precision=i=y.length*$*2;m=Pe(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(r)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=Pe(r.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=Pe(u,n,i,1).minus(p).abs().cmp(Pe(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};M.toHexadecimal=M.toHex=function(r,e){return Zr(this,16,r,e)};M.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:nt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(oe=!1,t=Pe(t,r,0,e,1).times(r),oe=!0,j(t)):(r.s=t.s,t=r),t};M.toNumber=function(){return+this};M.toOctal=function(r,e){return Zr(this,8,r,e)};M.toPower=M.pow=function(r){var e,t,n,o,i,s,a=this,c=a.constructor,u=+(r=new c(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new c(Oe(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,r.eq(1))return j(a,n,i);if(e=Ge(r.e/$),e>=r.d.length-1&&(t=u<0?-u:u)<=yc)return o=Es(c,a,t,n),r.s<0?new c(1).div(o):j(o,n,i);if(s=a.s,s<0){if(e<r.d.length-1)return new c(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Oe(+a,u),e=t==0||!isFinite(t)?Ge(u*(Math.log("0."+De(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(oe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=jr(r.times(Yt(a,n+t)),n),o.d&&(o=j(o,n+5,1),Wn(o.d,n,i)&&(e=n+10,o=j(jr(r.times(Yt(a,e+t)),e),e+5,1),+De(o.d).slice(n+1,n+15)+1==1e14&&(o=j(o,n+1,0)))),o.s=s,oe=!0,c.rounding=i,j(o,n,i))};M.toPrecision=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Kt(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(nt(r,1,Ht),e===void 0?e=o.rounding:nt(e,0,8),n=j(new o(n),r,e),t=Kt(n,r<=n.e||n.e<=o.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toSignificantDigits=M.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(nt(r,1,Ht),e===void 0?e=n.rounding:nt(e,0,8)),j(new n(t),r,e)};M.toString=function(){var r=this,e=r.constructor,t=Kt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};M.truncated=M.trunc=function(){return j(new this.constructor(this),this.e+1,1)};M.valueOf=M.toJSON=function(){var r=this,e=r.constructor,t=Kt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function De(r){var e,t,n,o=r.length-1,i="",s=r[0];if(o>0){for(i+=s,e=1;e<o;e++)n=r[e]+"",t=$-n.length,t&&(i+=Qt(t)),i+=n;s=r[e],n=s+"",t=$-n.length,t&&(i+=Qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function nt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(jt+r)}function Wn(r,e,t,n){var o,i,s,a;for(i=r[0];i>=10;i/=10)--e;return--e<0?(e+=$,o=0):(o=Math.ceil((e+1)/$),e%=$),i=Oe(10,$-e),a=r[o]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==i||t>3&&a+1==i/2)&&(r[o+1]/i/100|0)==Oe(10,e-2)-1||(a==i/2||a==0)&&(r[o+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(r[o+1]/i/1e3|0)==Oe(10,e-3)-1,s}function Eo(r,e,t){for(var n,o=[0],i,s=0,a=r.length;s<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=zr.indexOf(r.charAt(s++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function gc(r,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/Xo(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),r.precision+=t,e=Bn(r,1,e.times(o),new r(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var Pe=function(){function r(n,o,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*o+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,o,i,s){var a,c;if(i!=s)c=i>s?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*s+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,s,a,c){var u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I,L,W,D=n.constructor,J=n.s==o.s?1:-1,G=n.d,q=o.d;if(!G||!G[0]||!q||!q[0])return new D(!n.s||!o.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?J*0:J/0);for(c?(p=1,l=n.e-o.e):(c=Pt,p=$,l=Ge(n.e/p)-Ge(o.e/p)),L=q.length,R=G.length,g=new D(J),h=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,i==null?(T=i=D.precision,s=D.rounding):a?T=i+(n.e-o.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,L==1){for(d=0,q=q[0],T++;(m<R||d)&&T--;m++)S=d*c+(G[m]||0),h[m]=S/q|0,d=S%q|0;y=d||m<R}else{for(d=c/(q[0]+1)|0,d>1&&(q=r(q,d,c),G=r(G,d,c),L=q.length,R=G.length),x=L,P=G.slice(0,L),k=P.length;k<L;)P[k++]=0;W=q.slice(),W.unshift(0),I=q[0],q[1]>=c/2&&++I;do d=0,u=e(q,P,L,k),u<0?(B=P[0],L!=k&&(B=B*c+(P[1]||0)),d=B/I|0,d>1?(d>=c&&(d=c-1),f=r(q,d,c),b=f.length,k=P.length,u=e(f,P,b,k),u==1&&(d--,t(f,L<b?W:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<k&&f.unshift(0),t(P,f,k,c),u==-1&&(k=P.length,u=e(q,P,L,k),u<1&&(d++,t(P,L<k?W:q,k,c))),k=P.length):u===0&&(d++,P=[0]),h[m++]=d,u&&P[0]?P[k++]=G[x]||0:(P=[G[x]],k=1);while((x++<R||P[0]!==void 0)&&T--);y=P[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,Ns=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,j(g,a?i+g.e+1:i,s,y)}return g}}();function j(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=$,s=e,l=m[d=0],c=l/Oe(10,o-s-1)%10|0;else if(d=Math.ceil((i+1)/$),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=$,s=i-$+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=$,s=i-$+o,c=s<0?0:l/Oe(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Oe(10,o-s-1)),u=t<4?(c||n)&&(t==0||t==(r.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/Oe(10,o-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=r.e+1,m[0]=Oe(10,($-e%$)%$),r.e=-e||0):m[0]=r.e=0,r;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Oe(10,$-i),m[d]=s>0?(l/Oe(10,o-s)%Oe(10,s)|0)*a:0),u)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(r.e++,m[0]==Pt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Pt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function Kt(r,e,t){if(!r.isFinite())return Ws(r);var n,o=r.e,i=De(r.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Qt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(r.e<0?"e":"e+")+r.e):o<0?(i="0."+Qt(-o-1)+i,t&&(n=t-s)>0&&(i+=Qt(n))):o>=s?(i+=Qt(o+1-s),t&&(n=t-o-1)>0&&(i=i+"."+Qt(n))):((n=o+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(i+="."),i+=Qt(n))),i}function Go(r,e){var t=r[0];for(e*=$;t>=10;t/=10)e++;return e}function qo(r,e,t){if(e>bc)throw oe=!0,t&&(r.precision=t),Error(Ms);return j(new r(Do),e,1,!0)}function wt(r,e,t){if(e>Yr)throw Error(Ms);return j(new r(Wo),e,t,!0)}function Fs(r){var e=r.length-1,t=e*$+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function Qt(r){for(var e="";r--;)e+="0";return e}function Es(r,e,t,n){var o,i=new r(1),s=Math.ceil(n/$+4);for(oe=!1;;){if(t%2&&(i=i.times(e),Ls(i.d,s)&&(o=!0)),t=Ge(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Ls(e.d,s)}return oe=!0,i}function Rs(r){return r.d[r.d.length-1]&1}function Ds(r,e,t){for(var n,o=new r(e[0]),i=0;++i<e.length;)if(n=new r(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function jr(r,e){var t,n,o,i,s,a,c,u=0,l=0,m=0,d=r.constructor,p=d.rounding,y=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(oe=!1,c=y):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Oe(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=j(i.times(r),c,1),t=t.times(++l),a=s.plus(Pe(i,t,c,1)),De(a.d).slice(0,c)===De(s.d).slice(0,c)){for(o=m;o--;)s=j(s.times(s),c,1);if(e==null)if(u<3&&Wn(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return j(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function Yt(r,e){var t,n,o,i,s,a,c,u,l,m,d,p=1,y=10,f=r,b=f.d,g=f.constructor,h=g.rounding,P=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(oe=!1,l=P):l=e,g.precision=l+=y,t=De(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=De(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return u=qo(g,l+2,P).times(i+""),f=Yt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=P,e==null?j(f,P,h,oe=!0):f;for(m=f,c=s=f=Pe(f.minus(1),f.plus(1),l,1),d=j(f.times(f),l,1),o=3;;){if(s=j(s.times(d),l,1),u=c.plus(Pe(s,new g(o),l,1)),De(u.d).slice(0,l)===De(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(qo(g,l+2,P).times(i+""))),c=Pe(c,new g(p),l,1),e==null)if(Wn(c.d,l-y,h,a))g.precision=l+=y,u=s=f=Pe(m.minus(1),m.plus(1),l,1),d=j(f.times(f),l,1),o=a=1;else return j(c,g.precision=P,h,oe=!0);else return g.precision=P,c;c=u,o+=2}}function Ws(r){return String(r.s*r.s/0)}function Hr(r,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%$,t<0&&(n+=$),n<o){for(n&&r.d.push(+e.slice(0,n)),o-=$;n<o;)r.d.push(+e.slice(n,n+=$));e=e.slice(n),n=$-e.length}else n-=o;for(;n--;)e+="0";r.d.push(+e),oe&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function Ac(r,e){var t,n,o,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Vs.test(e))return Hr(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(pc.test(e))t=16,e=e.toLowerCase();else if(dc.test(e))t=2;else if(fc.test(e))t=8;else throw Error(jt+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,o=Es(n,new n(t),i,i*2)),u=Eo(e,t,Pt),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(r.s*0):(r.e=Go(u,l),r.d=u,oe=!1,s&&(r=Pe(r,o,a*4)),c&&(r=r.times(Math.abs(c)<54?Oe(2,c):qn.pow(2,c))),oe=!0,r)}function wc(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Bn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Xo(5,t)),e=Bn(r,2,e,e);for(var o,i=new r(5),s=new r(16),a=new r(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(s.times(o).minus(a))));return e}function Bn(r,e,t,n,o){var i,s,a,c,u=1,l=r.precision,m=Math.ceil(l/$);for(oe=!1,c=t.times(t),a=new r(n);;){if(s=Pe(a.times(c),new r(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=Pe(s.times(c),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function Xo(r,e){for(var t=r;--e;)t*=r;return t}function qs(r,e){var t,n=e.s<0,o=wt(r,r.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return Vt=n?4:1,e;if(t=e.divToInt(o),t.isZero())Vt=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return Vt=Rs(t)?n?2:3:n?4:1,e;Vt=Rs(t)?n?1:4:n?3:2}return e.minus(o).abs()}function Zr(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor,y=t!==void 0;if(y?(nt(t,1,Ht),n===void 0?n=p.rounding:nt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=Ws(r);else{for(l=Kt(r),s=l.indexOf("."),y?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Eo(Kt(d),10,o),d.e=d.d.length),m=Eo(l,10,o),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(r=new p(r),r.d=m,r.e=i,r=Pe(r,d,t,n,0,o),m=r.d,i=r.e,u=Ns),s=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=zr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=Eo(l,o,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=zr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function Ls(r,e){if(r.length>e)return r.length=e,!0}function Pc(r){return new this(r).abs()}function hc(r){return new this(r).acos()}function kc(r){return new this(r).acosh()}function Tc(r,e){return new this(r).plus(e)}function Ic(r){return new this(r).asin()}function Bc(r){return new this(r).asinh()}function xc(r){return new this(r).atan()}function Sc(r){return new this(r).atanh()}function Kc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=wt(this,i,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?wt(this,n,o):new this(0),t.s=r.s):!r.d||e.isZero()?(t=wt(this,i,1).times(.5),t.s=r.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(Pe(r,e,i,1)),e=wt(this,i,1),this.precision=n,this.rounding=o,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(Pe(r,e,i,1)),t}function Cc(r){return new this(r).cbrt()}function Rc(r){return j(r=new this(r),r.e+1,2)}function Lc(r,e,t){return new this(r).clamp(e,t)}function Oc(r){if(!r||typeof r!="object")throw Error(Uo+"Object expected");var e,t,n,o=r.defaults===!0,i=["precision",1,Ht,"rounding",0,8,"toExpNeg",-In,0,"toExpPos",0,In,"maxE",0,In,"minE",-In,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=Qr[t]),(n=r[t])!==void 0)if(Ge(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(jt+t+": "+n);if(t="crypto",o&&(this[t]=Qr[t]),(n=r[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(_s);else this[t]=!1;else throw Error(jt+t+": "+n);return this}function Nc(r){return new this(r).cos()}function Mc(r){return new this(r).cosh()}function Us(r){var e,t,n;function o(i){var s,a,c,u=this;if(!(u instanceof o))return new o(i);if(u.constructor=o,Os(i)){u.s=i.s,oe?!i.d||i.e>o.maxE?(u.e=NaN,u.d=null):i.e<o.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;oe?s>o.maxE?(u.e=NaN,u.d=null):s<o.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[i]):(u.e=s,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return Hr(u,i.toString())}else if(c!=="string")throw Error(jt+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Vs.test(i)?Hr(u,i):Ac(u,i)}if(o.prototype=M,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=Oc,o.clone=Us,o.isDecimal=Os,o.abs=Pc,o.acos=hc,o.acosh=kc,o.add=Tc,o.asin=Ic,o.asinh=Bc,o.atan=xc,o.atanh=Sc,o.atan2=Kc,o.cbrt=Cc,o.ceil=Rc,o.clamp=Lc,o.cos=Nc,o.cosh=Mc,o.div=_c,o.exp=vc,o.floor=Vc,o.hypot=Fc,o.ln=Ec,o.log=Dc,o.log10=qc,o.log2=Wc,o.max=Uc,o.min=Gc,o.mod=Xc,o.mul=zc,o.pow=Qc,o.random=Yc,o.round=jc,o.sign=Hc,o.sin=Zc,o.sinh=Jc,o.sqrt=$c,o.sub=el,o.sum=tl,o.tan=nl,o.tanh=ol,o.trunc=rl,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return o.config(r),o}function _c(r,e){return new this(r).div(e)}function vc(r){return new this(r).exp()}function Vc(r){return j(r=new this(r),r.e+1,3)}function Fc(){var r,e,t=new this(0);for(oe=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function Os(r){return r instanceof qn||r&&r.toStringTag===vs||!1}function Ec(r){return new this(r).ln()}function Dc(r,e){return new this(r).log(e)}function Wc(r){return new this(r).log(2)}function qc(r){return new this(r).log(10)}function Uc(){return Ds(this,arguments,"lt")}function Gc(){return Ds(this,arguments,"gt")}function Xc(r,e){return new this(r).mod(e)}function zc(r,e){return new this(r).mul(e)}function Qc(r,e){return new this(r).pow(e)}function Yc(r){var e,t,n,o,i=0,s=new this(1),a=[];if(r===void 0?r=this.precision:nt(r,1,Ht),n=Math.ceil(r/$),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)o=e[i],o>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)o=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(o%1e7),i+=4);i=n/4}else throw Error(_s);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],r%=$,n&&r&&(o=Oe(10,$-r),a[i]=(n/o|0)*o);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=$)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<$&&(t-=$-n)}return s.e=t,s.d=a,s}function jc(r){return j(r=new this(r),r.e+1,this.rounding)}function Hc(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Zc(r){return new this(r).sin()}function Jc(r){return new this(r).sinh()}function $c(r){return new this(r).sqrt()}function el(r,e){return new this(r).sub(e)}function tl(){var r=0,e=arguments,t=new this(e[r]);for(oe=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return oe=!0,j(t,this.precision,this.rounding)}function nl(r){return new this(r).tan()}function ol(r){return new this(r).tanh()}function rl(r){return j(r=new this(r),r.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var qn=M.constructor=Us(Qr);Do=new qn(Do);Wo=new qn(Wo);var v=qn;import{PublicKey as ni}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as il}from"@solana/spl-token";import{PublicKey as Te,SystemProgram as Gs,SYSVAR_RENT_PUBKEY as sl}from"@solana/web3.js";function A({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var Jr=[A({pubkey:il,isWritable:!1}),A({pubkey:Gs.programId,isWritable:!1}),A({pubkey:sl,isWritable:!1})];function $r({publicKey:r,transformSol:e}){let t=ei(r.toString());if(t instanceof Te)return e&&t.equals(Ne)?H:t;if(e&&t.toString()===Ne.toBase58())return H;if(typeof t=="string"){if(t===Te.default.toBase58())return Te.default;try{return new Te(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ei(r){try{return new Te(r)}catch{return r}}var zo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Qo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new Te("SysvarRent111111111111111111111111111111111"),ti=new Te("SysvarC1ock11111111111111111111111111111111"),xn=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Yo=new Te("Sysvar1nstructions1111111111111111111111111"),jo=Gs.programId,mp=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),dp=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),pp=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),fp=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),yp=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),bp=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),gp=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Ap=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),wp=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Pp=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),hp=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Te("So11111111111111111111111111111111111111112"),Ne=Te.default;function ut(r){return $r({publicKey:r,transformSol:!0})}import{PublicKey as al}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Xs}from"@solana/spl-token";var Ct={chainId:101,address:al.default.toBase58(),programId:Xs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Me={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Xs.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 oi=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:s=!1}){if(e===Ne.toBase58()||e instanceof ni&&Ne.equals(e)){this.decimals=Me.decimals,this.symbol=Me.symbol,this.name=Me.name,this.mint=new ni(Me.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?ni.default:$r({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ie=oi;Ie.WSOL=new oi(F(C({},Me),{mint:Me.address}));import Zo from"big.js";import ll from"bn.js";import ml from"decimal.js-light";import ul from"toformat";var cl=ul,Un=cl;var Ho=ue("module/fraction"),ri=Un(Zo),Gn=Un(ml),dl={[0]:Gn.ROUND_DOWN,[1]:Gn.ROUND_HALF_UP,[2]:Gn.ROUND_UP},pl={[0]:Zo.roundDown,[1]:Zo.roundHalfUp,[2]:Zo.roundUp},pe=class{constructor(e,t=new ll(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new pe(this.denominator,this.numerator)}add(e){let t=e instanceof pe?e:new pe(Z(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.add(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof pe?e:new pe(Z(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.sub(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof pe?e:new pe(Z(e));return new pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof pe?e:new pe(Z(e));return new pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Ho.logWithError(`${e} is not an integer.`),e<=0&&Ho.logWithError(`${e} is not positive.`),Gn.set({precision:e+1,rounding:dl[n]});let o=new Gn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Ho.logWithError(`${e} is not an integer.`),e<0&&Ho.logWithError(`${e} is negative.`),ri.DP=e,ri.RM=pl[n]||1,new ri(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var yl=ue("Raydium_price"),rt=class extends pe{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=o,this.scalar=new pe(ii(n.decimals),ii(o.decimals))}get raw(){return new pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new rt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&yl.logWithError("mul token not equals");let n=super.mul(t);return new rt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};var si=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Jo=si;Jo.SOL=new si(Ct);import bl from"bn.js";var zs=new pe(new bl(100)),Je=class extends pe{toSignificant(e=5,t,n){return this.mul(zs).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(zs).toFixed(e,t,n)}};var pt=new it(0),Ys=new it(1),Af=new it(2),wf=new it(3),Pf=new it(5),ai=new it(10),hf=new it(100),kf=new it(1e3),Tf=new it(1e4),Qs=9007199254740991;function Z(r){let e=ue("Raydium_parseBigNumberish");if(r instanceof it)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new it(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Qs||r<=-Qs)&&e.logWithError(`BigNumberish number overflow: ${r}`),new it(String(r))):typeof r=="bigint"?new it(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new it(0))}function ii(r){return ai.pow(Z(r))}function $o(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var Al=ue("Raydium_amount"),Hs=Un(gl);function wl(r,e){let t="0",n="0";if(r.includes(".")){let o=r.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):Al.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var be=class extends pe{constructor(t,n,o=!0,i){let s=new er(0),a=ai.pow(new er(t.decimals));if(o)s=Z(n);else{let c=new er(0),u=new er(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=wl(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ue(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Hs.DP=this.token.decimals,new Hs(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function js(r){return typeof r=="object"&&r!==null&&![Ie,be,Pl,pe,hl,rt,Je].some(e=>typeof e=="object"&&r instanceof e)}function ke(r){return typeof r=="string"?ei(r):Array.isArray(r)?r.map(e=>ke(e)):js(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,ke(t)])):r}import{PublicKey as Qn,sendAndConfirmTransaction as mi,Transaction as Yn,TransactionMessage as jn,VersionedTransaction as Hn}from"@solana/web3.js";import Rl 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 Js,ComputeBudgetProgram as Zs,Transaction as tr,TransactionMessage as kl,Keypair as $s,VersionedTransaction as ea}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Tl}from"@solana/spl-token";var Ft=ue("Raydium_txUtil"),ta=1644;function nr(r){let e=[],t=[];return r.microLamports&&(e.push(Zs.setComputeUnitPrice({microLamports:r.microLamports})),t.push(V.SetComputeUnitPrice)),r.units&&(e.push(Zs.setComputeUnitLimit({units:r.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Sn(r,e){var n,o;let t=e!=null?e:"confirmed";try{return((o=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:o.blockhash)||(await r.getRecentBlockhash(t)).blockhash}catch{return(await r.getRecentBlockhash(t)).blockhash}}function or(r,e){r.length<1&&Ft.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Ft.logWithError(`no signers provided:, ${e.toString()}`);let t=new tr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<ta}catch{return!1}}async function na(r,e,t,n=!0){let o=new Js("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new tr;s.feePayer=o;for(let u of e)or([...s.instructions,u],[o])||(i.push(s),s=new tr,s.feePayer=o),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await Il(r,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Ft.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Ft.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Ft.debug("filteredLog:",c),l.length||Ft.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function oa(r,e){let t=r.match(/{["\w:,]+}/g);return!t||t.length!==1?Ft.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Et(r,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(r);return!n||n.length!==2?Ft.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ae(r,e){let[t,n]=Js.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}async function Il(r,e,t){let n=[];if(t){let o=await r.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=o.blockhash,u.lastValidBlockHeight=o.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.map(u=>{let l=r._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await r._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async o=>await(await r.simulateTransaction(o)).value))}catch(o){o instanceof Error&&Ft.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:o.message})}return n}function Xn({instructions:r,payer:e,signers:t}){return or(r,[e,...t])}function zn({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=$s.generate().publicKey.toString()}){let i=new kl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new ea(i).serialize()).toString("base64").length<ta}catch{return!1}}var Bl=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r);function sn(r){let e=[];return r.forEach(t=>{t instanceof tr&&(t.recentBlockhash||(t.recentBlockhash=Tl.toBase58()),t.feePayer||(t.feePayer=$s.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof ea&&(n=Bl(n));let o=n.toString("base64");e.push(o)}),console.log("simulate tx string:",e),e}import{PublicKey as ia,AddressLookupTableAccount as rr}from"@solana/web3.js";import{PublicKey as ra}from"@solana/web3.js";import{MINT_SIZE as xl,TOKEN_PROGRAM_ID as Sl,getTransferFeeConfig as Kl,unpackMint as Cl}from"@solana/spl-token";var ui=ue("Raydium_accountInfo_util");async function ht(r,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=ci(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=ci(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&ui.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"&&ui.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new ra(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&ui.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function _e(r,e,t){let n=await ht(r,e.map(o=>o.pubkey),t);return e.map((o,i)=>F(C({},o),{accountInfo:n[i]}))}async function Kn({connection:r,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await _e(r,e.map(c=>({pubkey:ut(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<xl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Cl(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=F(C({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Sl,feeConfig:(a=Kl(u))!=null?a:void 0})}return o[ra.default.toBase58()]=o[H.toBase58()],o}async function li({connection:r,address:e}){let t=await ht(r,[...new Set(e.map(o=>o.toString()))].map(o=>new ia(o))),n={};for(let o=0;o<e.length;o++){let i=t[o],s=e[o];if(!i)continue;let a=new rr({key:s,state:rr.deserialize(i.data)});n[s.toString()]=a,ir[s.toString()]=a}return n}var ir={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new rr({key:new ia("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:rr.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};var sr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Rl.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=nr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Qn.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 Yn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=o||{},c=i!=null?i:await Sn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),sn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await mi(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Sn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let P=await mi(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(P)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((P,k)=>(P.recentBlockhash=f,a[k].length&&P.sign(...a[k]),P));sn(g);let h=await this.signAllTransactions(g);if(m){let P=0,k=[],B=async()=>{if(!h[P])return;let T=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[P]}),d==null||d([...k]),P++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),d==null||d([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let P=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});P.push(B)}return{txIds:P,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var p;let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o}=d,i=Ke(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:ir),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let y of a)s[y]===void 0&&c.push(new Qn(y));let u=await li({connection:this.connection,address:c});for(let[y,f]of Object.entries(u))s[y]=f;let l=new jn({payerKey:this.feePayer,recentBlockhash:o?Qn.default.toBase58():await Sn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s));((p=this.owner)==null?void 0:p.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new Hn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var h;let{recentBlockHash:f,skipPreflight:b=!0,sendAndConfirm:g}=y||{};if(f&&(m.message.recentBlockhash=f),sn([m]),(h=this.owner)!=null&&h.isKeyPair){let P=await this.connection.sendTransaction(m,{skipPreflight:b});if(g){let{lastValidBlockHeight:k,blockhash:B}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:B,lastValidBlockHeight:k,signature:P},"confirmed")}return{txId:P,signedTx:m}}if(this.signAllTransactions){let P=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(P[0],{skipPreflight:b}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),sn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:P,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:P,signature:h},"confirmed"),b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,h=[],P=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});h.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(k,B=>{let T=h.findIndex(S=>S.txId===k);T>-1&&(h[T].status=B.err?"error":"success"),d==null||d([...h]),B.err||P()},"processed"),this.connection.getSignatureStatus(k)};return P(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let P=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(P)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=Ke(u,["computeBudgetConfig"]),o=t?nr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>F(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...o.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Qn(b));if(c.length<12&&Xn({instructions:p,payer:this.feePayer,signers:f})||Xn({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");Xn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new Yn().add(...o.instructions,...c)):s.push(new Yn().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);Xn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Yn().add(...o.instructions,...c)):s.push(new Yn().add(...c)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||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 Sn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,P)=>{h.recentBlockhash=b,a[P].length&&h.sign(...a[P])}),sn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let P of s){let k=await mi(this.connection,P,this.signers.find(B=>B.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(k)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let P=0,k=[],B=async()=>{if(!h[P])return;let T=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[P]}),p==null||p([...k]),P++,this.connection.onSignature(T,S=>{let x=k.findIndex(R=>R.txId===T);x>-1&&(k[x].status=S.err?"error":"success"),p==null||p([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(T)};return await B(),{txIds:k.map(T=>T.txId),signedTxs:h}}else{let P=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});P.push(B)}return{txIds:P,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:o=[]}=b,i=Ke(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:ir),n),a=Array.from(new Set([...this.lookupTableAddress,...o])),c=[];for(let h of a)s[h]===void 0&&c.push(new Qn(h));let u=await li({connection:this.connection,address:c});for(let[h,P]of Object.entries(u))s[h]=P;let l=t?nr(t):{instructions:[],instructionTypes:[]},m=await Sn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,P)=>F(C({},h),{[P.publicKey.toBase58()]:P}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let P=[...f,h],k=t?[...l.instructions,...P]:P;if(f.length<12&&zn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||zn({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let B={};for(let T of[...new Set(a)])s[T]!==void 0&&(B[T]=s[T]);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Hn(T))}else{let T=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Hn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[h]}}),f.length>0){let P=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Hn(k))}else{let k=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Hn(k))}y.push(P)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(P=>P.publicKey.equals(this.owner.publicKey))||h.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:P,onTxUpdate:k,recentBlockHash:B,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),B&&(x.message.recentBlockhash=B)}),sn(p),(S=this.owner)!=null&&S.isKeyPair){if(P){let x=[];for(let R of p){let I=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:L,blockhash:W}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:W,lastValidBlockHeight:L,signature:I},"confirmed"),x.push(I)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(P){let R=0,I=[],L=async()=>{if(!x[R])return;let W=await this.connection.sendTransaction(x[R],{skipPreflight:T});I.push({txId:W,status:"sent",signedTx:x[R]}),k==null||k([...I]),R++,this.connection.onSignature(W,D=>{let J=I.findIndex(G=>G.txId===W);J>-1&&(I[J].status=D.err?"error":"success"),k==null||k([...I]),D.err||L()},"processed"),this.connection.getSignatureStatus(W)};return L(),{txIds:[],signedTxs:x}}else{let R=[];for(let I=0;I<x.length;I+=1){let L=await this.connection.sendTransaction(x[I],{skipPreflight:T});R.push(L)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}};var kt=class{constructor(e){this._owner=e}get publicKey(){return kt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return kt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return kt.isKeyPair(this._owner)}get isPublicKey(){return kt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!kt.isKeyPair(e)}};function ci(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var sa=r=>typeof r=="number";function aa(r,e,t){let n=sa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()<=n}function ua(r,e,t){let n=sa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()>n}import{PublicKey as me}from"@solana/web3.js";var ca=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),la=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Jn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Ny=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),My=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),di=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ma=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),_y=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),da=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),pa=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),vy=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Vy=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Ll=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Ol=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Nl=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Ml=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),fa=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Fy=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Ey=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),_l=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),vl=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Vl=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),$n={IDO_PROGRAM_ID_V1:Ll,IDO_PROGRAM_ID_V2:Ol,IDO_PROGRAM_ID_V3:Nl,IDO_PROGRAM_ID_V4:Ml};var Dy={SERUM_MARKET:me.default,OPENBOOK_MARKET:new me("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:me.default,FarmV3:new me("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new me("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new me("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new me("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new me("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new me("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new me("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:_l,CREATE_CPMM_POOL_AUTH:vl,CREATE_CPMM_POOL_FEE_ACC:Vl,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Fl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as El}from"@solana/spl-token";function ge(r,e,t){return ae([r.toBuffer(),(t!=null?t:El).toBuffer(),e.toBuffer()],new Fl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Tt from"bn.js";var eo=1e4;function he(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let o=F(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,s=new Tt(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===eo){let c=new Tt(i.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=to(r.mul(new Tt(eo)),new Tt(eo-i.transferFeeBasisPoints)),u=new Tt(i.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=to(l.mul(new Tt(i.transferFeeBasisPoints)),new Tt(eo)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=to(r.mul(new Tt(i.transferFeeBasisPoints)),new Tt(eo)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function Rt(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function to(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Tt(0))?t.add(new Tt(1)):t}var Le={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://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"},db=C({},Le);var ya="ray_tab_hash",pi="ray_req_hash",Dl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(ya);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(ya,r)),r},ar=async n=>{var o=n,{logCount:r=1e3,removeLastLog:e}=o,t=Ke(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(pi)||"[]").slice(0,r-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(F(C({},t),{time:Date.now(),session:Dl()}));try{localStorage.setItem(pi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(pi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return ar(F(C({},t),{logCount:r,removeLastLog:!0}))}};var ur=ue("Raydium_Api"),fi=new Map;var cr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=ba.create({baseURL:this.urlConfigs.BASE_HOST||Le.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return ur.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(ur.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&ar({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),ur.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&ar({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),ur.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Le.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Le.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ba.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Le.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Le.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Le.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Le.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Le.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Le.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Le.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>fi.has(s)?(n.push(fi.get(s)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Le.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{fi.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&ut(t).toBase58(),n&&n!=="undefined"?ut(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Le.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Le.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Le.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Le.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Le.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Le.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Le.JITO})).data}};var lr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",ga="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Bi,TOKEN_PROGRAM_ID as en,AccountLayout as Rn,TOKEN_2022_PROGRAM_ID as ym}from"@solana/spl-token";import{PublicKey as Ar,SystemProgram as bm}from"@solana/web3.js";var yi=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Be=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ue(t)}createTxBuilder(e){return this.scope.checkOwner(),new sr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(yi(e))}logInfo(...e){this.logger.info(yi(e))}logAndCreateError(...e){let t=yi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as cm,createCloseAccountInstruction as lm,createTransferInstruction as mm,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";import{PublicKey as dm,SystemProgram as pm}from"@solana/web3.js";import fm from"bn.js";import{PublicKey as La,Keypair as im}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sm}from"@solana/spl-token";import am from"bn.js";import{PublicKey as Jl}from"@solana/web3.js";import ka,{isBN as Ta}from"bn.js";import{bits as Wl,BitStructure as Qb,blob as ql,Blob as Yb,cstr as jb,f32 as Hb,f32be as Zb,f64 as Jb,f64be as $b,greedy as eg,Layout as Ul,ns64 as tg,ns64be as ng,nu64 as Gl,nu64be as og,offset as rg,s16 as ig,s16be as sg,s24 as ag,s24be as ug,s32 as Xl,s32be as cg,s40 as lg,s40be as mg,s48 as dg,s48be as pg,s8 as fg,seq as zl,struct as yg,Structure as Ql,u16 as Yl,u16be as bg,u24 as gg,u24be as Ag,u32 as jl,u32be as wg,u40 as Pg,u40be as hg,u48 as kg,u48be as Tg,u8 as Hl,UInt as Zl,union as Ig,Union as Bg,unionLayoutDiscriminator as xg,utf8 as Sg}from"@solana/buffer-layout";var mr=Ul,Aa=Ql;var bi=Zl;var wa=Hl,Lt=Yl;var gi=jl;var Pa=Gl;var We=Xl;var ha=zl;var fe=ql;var Ai=Wl;var an=class extends mr{constructor(t,n,o){super(t,o);this.blob=fe(t),this.signed=n}decode(t,n=0){let o=new ka(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new ka(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},dr=class extends mr{constructor(t){super(8,t);this._lower=Ai(gi(),!1),this._upper=Ai(gi(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function E(r){return new bi(1,r)}function Xe(r){return new bi(4,r)}function w(r){return new an(8,!1,r)}function Q(r){return new an(16,!1,r)}function Ia(r){return new an(1,!0,r)}function fr(r){return new an(8,!0,r)}function Ba(r){return new an(16,!0,r)}var pr=class extends mr{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(r){return new pr(fe(32),e=>new Jl(e),e=>e.toBuffer(),r)}function qe(r){return new pr(wa(),$l,em,r)}function $l(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function em(r){return r?1:0}var wi=class extends Aa{decode(e,t){return super.decode(e,t)}};function _(r,e,t){return new wi(r,e,t)}function X(r,e,t){let n,o=typeof e=="number"?e:Ta(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Ta(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 ha(r,o,t)}var Zt=_([K("mint"),K("owner"),w("amount"),Xe("delegateOption"),K("delegate"),E("state"),Xe("isNativeOption"),w("isNative"),w("delegatedAmount"),Xe("closeAuthorityOption"),K("closeAuthority")]);function tm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Pi(r,...e){if(!tm(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function hi(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function xa(r,e){Pi(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var br=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),It=(r,e)=>r<<32-e|r>>>e;var qg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function nm(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function ki(r){return typeof r=="string"&&(r=nm(r)),Pi(r),r}var yr=class{clone(){return this._cloneInto()}},Ug={}.toString;function Sa(r){let e=n=>r().update(ki(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function om(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+u,a,n)}var Ka=(r,e,t)=>r&e^~r&t,Ca=(r,e,t)=>r&e^r&t^e&t,gr=class extends yr{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=br(this.buffer)}update(e){hi(this);let{view:t,buffer:n,blockLen:o}=this;e=ki(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=br(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){hi(this),xa(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;om(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=br(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var rm=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]),Jt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),$t=new Uint32Array(64),Ti=class extends gr{constructor(){super(64,32,8,!1),this.A=Jt[0]|0,this.B=Jt[1]|0,this.C=Jt[2]|0,this.D=Jt[3]|0,this.E=Jt[4]|0,this.F=Jt[5]|0,this.G=Jt[6]|0,this.H=Jt[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)$t[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=$t[m-15],p=$t[m-2],y=It(d,7)^It(d,18)^d>>>3,f=It(p,17)^It(p,19)^p>>>10;$t[m]=f+$t[m-7]+y+$t[m-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=It(a,6)^It(a,11)^It(a,25),p=l+d+Ka(a,c,u)+rm[m]+$t[m]|0,f=(It(n,2)^It(n,13)^It(n,22))+Ca(n,o,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=o,o=n,n=p+f|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,i,s,a,c,u,l)}roundClean(){$t.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ra=Sa(()=>new Ti);var sA=ue("Raydium_Util");function Oa({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:s}of t.value){let a=Zt.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:ge(r,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),o.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:La.default,amount:new am(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function ze({fromPublicKey:r,programId:e=sm}){let t=im.generate().publicKey.toBase58().slice(0,32);return{publicKey:um(r,t,e),seed:t}}function um(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),o=Ra(n);return new La(o)}function Ii(r){let{mint:e,tokenAccount:t,owner:n,programId:o=Cn}=r;return cm(t,e,n,o)}function Ot(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Cn}=r;return lm(e,t,o,n,i)}async function Dt(r){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Zt.span,n),c=Z(t).add(new fm(a)),u=ze({fromPublicKey:o,programId:Cn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[pm.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Zt.span,programId:Cn}),Ii({mint:new dm(Me.address),tokenAccount:u.publicKey,owner:i,programId:Cn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[Ot({tokenAccount:u.publicKey,payer:o,owner:i})]}}function no({source:r,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Cn}){return mm(r,e,t,BigInt(String(n)),o,i)}var oo=class extends Be{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return ge(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:en},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:ym},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Oa({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=en,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!o||o&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Ar(t.tokenProgram||en),m=this.getAssociatedTokenAccount(n,new Ar(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,P)=>h.accountInfo.amount.lt(P.accountInfo.amount)?1:-1);if(o===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=Bi(s,m,s,n,l);if(u){let P=await this.scope.connection.getAccountInfo(m);if(P===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(V.CreateATA);else if(!(P.owner.equals(l)&&Rn.decode(P.data).mint.equals(n)&&Rn.decode(P.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(V.CreateATA);if(n.equals(H)&&o.amount){let P=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(f=o.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...P.instructions||[]),p.endInstructions.push(...P.endInstructions||[]),p.instructionTypes.push(...P.instructionTypes||[]),p.endInstructionTypes.push(...P.endInstructionTypes||[]),o.amount&&(p.instructions.push(no({source:P.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:en})),p.instructionTypes.push(V.TransferAmount))}return c||(p.endInstructions.push(Ot({owner:s,payer:o.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:p}}else{let h=ze({fromPublicKey:s,programId:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(Rn.span),k=bm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:P+Number((g=(b=o.amount)==null?void 0:b.toString())!=null?g:0),space:Rn.span,programId:l});return p.instructions.push(k,Ii({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(V.CreateAccount),p.instructionTypes.push(V.InitAccount),c||(p.endInstructions.push(Ot({owner:s,payer:o.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=en,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await Bi(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],i=u}return o&&H.toBase58()===t.toBase58()&&(a.endInstructions=[Ot({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:s=en,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Ar(H).equals(i)){let p=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=Bi(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(en)&&Rn.decode(f.data).mint.equals(i)&&Rn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=en,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Ar(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=l,p=Ke(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=m,p=Ke(m,["tokenAccount"]);c=d,u.addInstruction(p)}return C({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as Vm}from"@solana/spl-token";import{PublicKey as ye,SystemProgram as Fm}from"@solana/web3.js";import{PublicKey as Ea}from"@solana/web3.js";var xi=_([E("instruction")]),Si=_([E("instruction")]),gm=_([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),Q("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),w("rewardType"),X(w(),15,"padding")]),Am=_([w("state"),w("nonce"),K("lpVault"),K("rewardVault"),K(),K(),w(),w(),w("totalReward"),Q("perShareReward"),w("lastSlot"),w("perSlotReward")]),wm=_([w("state"),w("nonce"),K("lpVault"),K("rewardVaultA"),w("totalRewardA"),Q("perShareRewardA"),w("perSlotRewardA"),E("option"),K("rewardVaultB"),fe(7),w("totalRewardB"),Q("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),K()]),Pm=_([w(),w("state"),w("nonce"),w("validRewardTokenNum"),Q("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(gm,5,"rewardInfos"),K("creator"),K(),X(w(),32,"padding")]),Na=new Proxy(Am,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(r,e,t)}}),Ma=new Proxy(wm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(r,e,t)}}),ro=new Proxy(Pm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var s;return F(C({},i),{rewardType:((s=Object.entries(tn).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),hm=_([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Ki=_([E("instruction"),w("nonce"),X(hm,5,"rewardTimeInfo")]),Ci=_([E("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Ri=_([E("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),FA=_([w("state"),K("id"),K("owner"),w("deposited"),X(w(),1,"rewardDebts")]),io=_([w("state"),K("id"),K("owner"),w("deposited"),X(Q(),1,"rewardDebts"),w(""),w("voteLockedBalance"),X(w(),15)]),EA=_([w("state"),K("id"),K("owner"),w("deposited"),X(w(),2,"rewardDebts")]),_a=_([w("state"),K("id"),K("owner"),w("deposited"),X(Q(),2,"rewardDebts"),X(w(),17)]),va=_([w(),w("state"),K("id"),K("owner"),w("deposited"),X(Q(),5,"rewardDebts"),X(w(),16)]),$e=_([E("instruction"),w("amount")]),km=_([K("mint"),K("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),Ia("digitShift"),X(E(),7,"reserved1"),X(w(),7,"reserved2")]),Va=_([fe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(E(),32,"reserved1"),X(km,4,"votingMints"),fr("timeOffset"),E("bump"),X(E(),7,"reserved2"),X(w(),11,"reserved3")]),Tm=_([fr("startTime"),fr("endTime"),E("kind"),X(E(),15,"reserved")]),Im=_([X(Tm,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),E("votingMintConfigIdx"),X(E(),29,"reserved")]),Fa=_([fe(8),K("voterAuthority"),K("registrar"),X(Im,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),X(E(),94,"reserved")]);var QA=ue("Raydium_farm_config"),Da=new Ea("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Wa=new Ea("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),qa={3:Na,5:Ma,6:ro},Ua={3:io,5:_a,6:va},Li=r=>[3,5,6].indexOf(r)!==-1,Oi=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(s=i[e])==null?void 0:s.call(i)},tn={"Standard SPL":0,"Option tokens":1},ft={[ca.toString()]:3,[la.toString()]:5,[Jn.toString()]:6};import{PublicKey as ie,SystemProgram as un,SYSVAR_RENT_PUBKEY as Sm,SYSVAR_CLOCK_PUBKEY as uo,TransactionInstruction as Ve}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Km,TOKEN_PROGRAM_ID as ct,ASSOCIATED_TOKEN_PROGRAM_ID as Cm}from"@solana/spl-token";import wr from"bn.js";function Ni(r,e,t){return ae([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],r)}function Mi(r,e){return ae([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],r)}function _i(r,e){return ae([e.toBuffer()],r)}function vi(r,e,t){return ae([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],r)}function Vi(r,e,t){return ae([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],r)}function Fi(r,e,t,n){return ae([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}import st from"bn.js";var so=ue("Raydium.farm.util");function ao({programId:r,poolId:e,mint:t,type:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return o}function Qe({programId:r,poolId:e,owner:t,version:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return o}var Ga=({programId:r,poolId:e})=>ae([e.toBuffer()],r);function Xa(r){return{isSet:new st(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(tn[r.rewardType])}}function Ei(r){return Z(r.endTime).sub(Z(r.openTime)).mul(Z(r.perSecond))}function Ln(r){let e=Ua[r];return e||so.logWithError("invalid version",r),e}function Bm(r){let e=qa[r];return e||so.logWithError("invalid version",r),e}function xm(r,e,t,n){if(r.version===3||r.version===5){if(r.lastSlot.gte(new st(t)))return r;let o=new st(t).sub(r.lastSlot);r.lastSlot=new st(t);for(let i of r.rewardInfos){if(e.amount.eq(new st(0)))continue;let s=i.perSlotReward.mul(o);i.perShareReward=i.perShareReward.add(s.mul(new st(10).pow(new st(r.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(r.version===6)for(let o of r.rewardInfos){if(o.rewardState.eq(new st(0)))continue;let i=st.min(new st(n),o.rewardEndTime);if(o.rewardOpenTime.gte(i))continue;let a=i.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),c=o.totalReward.sub(o.totalRewardEmissioned);c.lt(a)?(a=c,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(c.div(o.rewardPerSecond))):o.rewardLastUpdateTime=i,!e.amount.eq(new st(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(r.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return r}async function lw({connection:r,farmPools:e,owner:t,config:n,chainTime:o}){let i=!1,s=!1,a=new st(10),c=[];for(let d of e){let p=ke(d);p.version===6?s=!0:i=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:Qe({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await _e(r,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=C({},u[g]),y==="state"){let h=Bm(p);(!b||!b.data||b.data.length!==h.span)&&so.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=h.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Zt.span)&&so.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=Zt.decode(b.data);else if(y==="ledger"){let h=Ln(p);b&&b.data&&(b.data.length!==h.span&&so.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=h.decode(b.data))}}let m=s||i?await r.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=xm(u[d].state,u[d].lpVault,m,o));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new st(9)):a.pow(new st(15)),b=p.rewardInfos.map((g,h)=>{let P=y.rewardDebts[h];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(P)});u[d].wrapped=F(C({},u[d].wrapped),{pendingRewards:b})}return u}function mw(r,e=Date.now()){if(r.version===6){let t=r.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>aa(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ua(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=r.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Di(r,e,t,n){let o=await r.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let s=Va.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await r.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=Fa.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Rm=ue("Raydium_farm_instruction"),co={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function lo(r){let{version:e,id:t,ledger:n,programId:o,owner:i}=r,s={3:9,5:10}[e];s||Rm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(xi.span);xi.encode({instruction:s},a);let c=[A({pubkey:t}),A({pubkey:n}),A({pubkey:i,isWritable:!1}),A({pubkey:un.programId,isWritable:!1}),A({pubkey:Sm,isWritable:!1})];return{instruction:new Ve({programId:o,keys:c,data:a}),instructionType:V.FarmV3CreateLedger}}function za(r){var n;let e=Buffer.alloc(Ki.span);Ki.encode({instruction:0,nonce:new wr(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...Jr,A({pubkey:r.farmId}),A({pubkey:r.farmAuthority,isWritable:!1}),A({pubkey:r.lpVault}),A({pubkey:r.lpMint,isWritable:!1}),A({pubkey:r.lockVault}),A({pubkey:r.lockMint,isWritable:!1}),A({pubkey:(n=r.lockUserAccount)!=null?n:Ne}),A({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let o of r.rewardInfo)t.push(A({pubkey:o.rewardMint,isWritable:!1}),A({pubkey:o.rewardVault}),A({pubkey:o.userRewardToken}));return{instruction:new Ve({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function Qa(r){let e=Buffer.alloc(Si.span);Si.encode({instruction:5},e);let t=[A({pubkey:ct,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.authority,isWritable:!1}),A({pubkey:r.lpVault,isWritable:!1}),A({pubkey:r.rewardVault}),A({pubkey:r.userRewardToken}),A({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ve({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function Lm(r,e,t,n,o,i,s,a,c,u,l,m,d){let p=_([E("depositEntryIndex"),w("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Yo,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...co.voterStakeRegistryDeposit,...f]);return new Ve({keys:y,programId:r,data:b})}function Om(r,e,t,n){let o=_([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([...co.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ve({keys:i,programId:r,data:a})}function Nm(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([E("depositEntryIndex"),w("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Yo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let h=Buffer.from([...co.voterStakeRegistryWithdraw,...g]);return new Ve({keys:b,programId:r,data:h})}function Mm(r,e,t,n,o,i){let s=_([E("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Ve({keys:a,programId:r,data:c})}function _m(r,e,t,n,o,i,s,a){let c=_([E("voterBump"),E("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Yo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...co.voterStakeRegistryCreateVoter,...l]);return new Ve({keys:u,programId:r,data:m})}function vm(r,e,t,n,o,i,s,a,c,u,l,m){let d=_([E("depositEntryIndex"),E("kind"),E("option"),w("startTs"),Xe("periods"),qe("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:Cm,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...co.voterStakeRegistryCreateDepositEntry,...y]);return new Ve({keys:p,programId:r,data:f})}async function Kw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Ni(n,o,i).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new wr(0)))throw Error("user do not has new stake amount");let y=Mi(e,a).publicKey,f=_i(e,a).publicKey,{publicKey:b,nonce:g}=vi(n,u,s),h=ge(b,y,c).publicKey,{publicKey:P,nonce:k}=Vi(n,u,s),B=Fi(t,o,i,s).publicKey,T=[],S=ge(s,y,c).publicKey;if(await r.getAccountInfo(S)===null&&T.push(Km(s,S,s,y)),await r.getAccountInfo(b)===null){let W=Mm(t,o,s,i,s,B);T.push(W,_m(n,u,b,P,s,s,g,k))}let{index:I,isInit:L}=await Di(r,u,b,y);return L||T.push(vm(n,u,b,h,s,s,y,I,0,void 0,0,!1)),T.push(Lm(n,u,b,h,S,s,l,a,y,f,e,I,p),Om(n,u,b,P)),T}async function Cw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Ni(n,o,i).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data);if(d.voteLockedBalance.eq(new wr(0)))throw Error("user has vote locked balance = 0");let p=Mi(e,a).publicKey,y=_i(e,a).publicKey,{publicKey:f}=vi(n,u,s),b=ge(f,p,c).publicKey,{publicKey:g}=Vi(n,u,s),h=Fi(t,o,i,s).publicKey,P=[],{index:k,isInit:B}=await Di(r,u,f,p);if(!B)throw Error("deposit entry index check error");return P.push(Nm(n,u,f,s,h,g,b,ge(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),P}function Wi({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(Ci.span);Ci.encode({instruction:3,rewardReopenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardPerSecond:Z(o.perSecond)},i);let s=[A({pubkey:ct,isWritable:!1}),A({pubkey:n.id}),A({pubkey:n.lpVault,isWritable:!1}),A({pubkey:e}),A({pubkey:t}),A({pubkey:r,isWritable:!1,isSigner:!0})];return new Ve({programId:n.programId,keys:s,data:i})}function qi({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(Ri.span);Ri.encode({instruction:4,isSet:new wr(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(tn[o.rewardType])},i);let s=[...Jr,A({pubkey:t.id}),A({pubkey:t.authority,isWritable:!1}),A({pubkey:o.mint,isWritable:!1}),A({pubkey:n}),A({pubkey:e}),A({pubkey:r,isWritable:!1,isSigner:!0})];return new Ve({programId:t.programId,keys:s,data:i})}function Rw(r){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=r,[l,m]=[new ie(e.programId),new ie(e.id)],d=Qe({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc($e.span);$e.encode({instruction:a,amount:c},p);let y=n===6?[A({pubkey:ct,isWritable:!1}),...u?[A({pubkey:un.programId,isWritable:!1})]:[],A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:o})]:[A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:o}),A({pubkey:new ie(t.lpVault)}),A({pubkey:i[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(A({pubkey:i[f]})),y.push(A({pubkey:new ie(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(A({pubkey:new ie(t.rewardInfos[f].vault)})),y.push(A({pubkey:i[f]}));return new Ve({programId:l,keys:y,data:p})}function mo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new ie(e.programId),new ie(e.id)],u=Qe({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:2,amount:Z(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:o[d]}));return new Ve({programId:a,keys:m,data:l})}function po(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:12,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:o[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function fo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function Ya(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:10,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function ja(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:o[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function Ha(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new ie(e.programId),new ie(e.id)],u=Qe({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:1,amount:Z(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:un.programId,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:o[d]}));return new Ve({programId:a,keys:m,data:l})}var yo=class extends Be{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ne)){let n=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Ei(F(C({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Jn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ye(e.lpMint.address),lockInfo:{lockMint:Da,lockVault:Wa},version:6,rewardInfos:t,programId:o},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=ze({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ro.span);c.addInstruction({instructions:[Fm.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ro.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Ga({programId:new ye(a.programId),poolId:l.publicKey}),y=ao({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(tn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(Xa(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Ne)?new ye(Me.address):B.mint;b.push({rewardMint:x,rewardVault:ao({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new ye(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&c.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:P,instructionType:k}=za({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[P],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o}){var b;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Ne)?new ye(Me.address):n.mint,l=a.rewardInfos.findIndex(g=>new ye(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:Ne,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Wi({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o}){var l;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Ne)?new ye(Me.address):m.mint,p=a.rewardInfos.findIndex(P=>new ye(P.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Ne,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=Wi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[h],instructionTypes:[V.FarmV6Restart]})}return u.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=o.mint.equals(Ne)?new ye(Me.address):o.mint,m=ao({programId:new ye(n.programId),poolId:new ye(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:o,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,u.addInstruction({instructions:[qi({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:o})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of o){let m=l.mint.equals(Ne)?new ye(Me.address):l.mint,d=ao({programId:new ye(n.programId),poolId:new ye(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=qi({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(C({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[V.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ft[d];Li(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ye(n.programId),new ye(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Qe({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let P={};for(let D of this.scope.account.tokenAccounts)if(a){let J=ge(this.scope.ownerPubKey,D.mint,D.programId).publicKey;D.publicKey&&J.equals(D.publicKey)&&(P[D.mint.toString()]=D.publicKey)}else P[D.mint.toString()]=D.publicKey;let k=b.lpMint,B=P[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",P);let T=[];for(let D of m){let J=s&&D.mint.address===H.toString(),G=P[D.mint.address];if(!G){let{account:q,instructionParams:Ze}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new ye(D.mint.address),notUseTokenAccount:J,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!J,associatedOnly:J?!1:a,checkCreateATAOwner:c});G=q,Ze&&h.addInstruction(Ze)}P[D.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Ln(p).decode(x.data)),n.programId!==Jn.toString()&&!S){let{instruction:D,instructionType:J}=lo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[D],instructionTypes:[J]})}let R=Oi({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let I={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(D=>new ye(D))},L=p===6?Ha(I):p===5?ja(I):Ya(I),W={3:V.FarmV3Deposit,5:V.FarmV5Deposit,6:V.FarmV6Deposit};return h.addInstruction({instructions:[L],instructionTypes:[W[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=ft[n.programId];Li(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(c){let I=ge(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&I.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(i)i.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=Qe({programId:new ye(n.programId),poolId:new ye(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(R);if(I)Ln(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:W}=lo({id:new ye(y.id),programId:new ye(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[W]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I})}let g=y.lpMint.address,h=s&&g===H.toString(),P=b[g.toString()];if(!P){let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ye(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:c,checkCreateATAOwner:u});P=R,I&&f.addInstruction(I)}b[g.toString()]=P;let k=[];for(let R of d){let I=s&&R.mint.address===H.toString(),L=b[R.mint.address];if(!L){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new ye(R.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:c,checkCreateATAOwner:u});L=W,D&&f.addInstruction(D)}b[R.mint.address]=L,k.push(L)}let B=Oi({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:P,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new ye(R))},S=p===6?mo(T):p===5?po(T):fo(T),x={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let o=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Ne.toString()?new ye(Me.address):t),a=o.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Ne,u=this.createTxBuilder(),l;if(t.equals(Ne)){let y=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Ei(F(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new v(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[Vm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Qa({programId:o.programId,id:o.id,authority:o.authority,lpVault:o.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=ge(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,P=ft[f],k=b.address,B=n&&k===H.toString(),T=m[k];if(!T){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ye(k),notUseTokenAccount:B,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=W,D&&l.addInstruction(D)}m[k.toString()]=T;let S=[];for(let W of g){let D=n&&W.mint.address===H.toString(),J=m[W.mint.address];if(!J){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new ye(W.mint.address),notUseTokenAccount:D,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!D,associatedOnly:D?!1:i,checkCreateATAOwner:s});J=G,q&&l.addInstruction(q)}m[W.mint.address]=J,S.push(J)}let x=p[h],R={amount:pt,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(W=>new ye(W))},I=P===6?mo(R):P===5?po(R):fo(R),L={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[L[P]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as je}from"@solana/web3.js";import{AccountLayout as Bd,NATIVE_MINT as Mu,TOKEN_PROGRAM_ID as vn}from"@solana/spl-token";var $w=_([Xe("mintAuthorityOption"),K("mintAuthority"),w("supply"),E("decimals"),E("isInitialized"),Xe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Em}from"@solana/web3.js";import{MintLayout as Za,TOKEN_PROGRAM_ID as Dm}from"@solana/spl-token";var cP=async({connection:r,mint:e})=>{let t=await r.getAccountInfo(new Em(e));return!t||t.data.length!==Za.span?void 0:Za.decode(t.data)},lP=({mint:r,decimals:e,programId:t=Dm,logoURI:n="",priority:o=3})=>{let i=r.toBase58().substring(0,6);return{address:r.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:o}},Pr=r=>new Ie({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),bo=o=>{var i=o,{amount:r,isRaw:e,name:t}=i,n=Ke(i,["amount","isRaw","name"]);return new be(new Ie({mint:ut(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};function mP(r){return r.address===Ct.address?Me:r}function dP(r){return r.address===Me.address?Ct:r}var et=o=>{var i=o,{address:r,programId:e,decimals:t}=i,n=Ke(i,["address","programId","decimals"]);return C({chainId:101,address:ut(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},nn=r=>r?F(C({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:F(C({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(C({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as Mn,ASSOCIATED_TOKEN_PROGRAM_ID as ed}from"@solana/spl-token";import{PublicKey as Ae,TransactionInstruction as Wt,SystemProgram as iu,SYSVAR_RENT_PUBKEY as td}from"@solana/web3.js";var Ui=_([E("instruction"),w("amountIn"),w("minAmountOut")]),Gi=_([E("instruction"),w("maxAmountIn"),w("amountOut")]),IP=_([E("instruction"),E("nonce")]),Xi=_([E("instruction"),E("nonce"),w("startTime")]),go=_([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),w("swapBase2QuoteFee"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),w("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),w("lpReserve"),X(w(),3,"padding")]),Wm=_([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(w(),64,"padding")]),zi=_([E("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Qi=_([E("instruction"),w("amountIn")]),BP={4:go,5:Wm},Ja=_([w("fee")]);import{PublicKey as qm}from"@solana/web3.js";var Nn=new qm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ln=5e4,Um=_([w("x"),w("y"),w("price")]),Gm=_([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),X(Um,ln,"DataElement")]);function Xm(r,e){return[0,ln-2]}function zm(r){return[0,ln-2]}function Qm(r){return[0,ln-2]}function Ym(r,e,t){let[n,o]=Xm(e,t),i=n,s=o,a=0,c=e*r.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=ln-2)return[a,a,!1];let u=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Yi(r,e,t){let[n,o,i]=Ym(r,e,t);if(!i)return 0;if(n===o){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,c=r.DataElement[o].x,u=r.DataElement[o].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*r.multiplier*l/p}}function cn(r,e,t){return e*r.multiplier/t}function $a(r,e,t){return e*t/r.multiplier}function jm(r,e){let[t,n]=zm(e),o=t,i=n,s=0,a=e;for(;o<i;){if(s=Math.floor((i+o)/2),s<=0||s>ln-2)return[s,s,!1];let c=r.DataElement[s].x,u=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)i=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];o=s+1}}return[s,s,!1]}function Hm(r,e){let[t,n]=Qm(e),o=t,i=n,s=0,a=e;for(;o<=i;){if(s=Math.floor((i+o)/2),s<=0||s>=ln-2)return[s,s,!1];let c=r.DataElement[s].y,u=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)o=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function eu(r,e,t,n){let o=n?e+t:e-t,[i,s,a]=jm(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(o-c)*r.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-o)*r.multiplier/l),[y,f,!1,a]}}}function Zm(r,e,t,n){let o=n?e-t:e+t,[i,s,a]=Hm(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-o)/r.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(o-p)/r.multiplier),[y,f,!1,a]}}}function Jm(r,e){let t=eu(r,e,0,!1);return t[3]?t[0]:0}function tu(r,e,t,n){let o=Yi(r,e,t),i=cn(r,e,o),s=cn(r,t,o),a=cn(r,n,o),c=!0,[u,l,m,d]=eu(r,i,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return $a(r,p,o)}}function nu(r,e,t,n){let o=Yi(r,e,t),i=cn(r,e,o),s=cn(r,t,o),a=cn(r,n,o),c=!1,[u,l,m,d]=Zm(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=i-l;return $a(r,p,o)}}function $m(r){let e=Gm.decode(r);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function ou(r,e,t,n){let o=Jm(r,cn(r,e,Yi(r,e,t)))/r.multiplier;return n?o:1/o}var On=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(Nn);e&&(this._layoutData=$m(e==null?void 0:e.data))}}};var ru=ue("Raydium_liquidity_instruction");function su(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:s}=r,a=Buffer.alloc(zi.span);zi.encode({instruction:3,baseAmountIn:Z(o),quoteAmountIn:Z(i),fixedSide:s==="base"?pt:Ys},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:new Ae(e.id)}),A({pubkey:new Ae(t.authority),isWritable:!1}),A({pubkey:new Ae(t.openOrders),isWritable:!1}),A({pubkey:new Ae(t.targetOrders)}),A({pubkey:new Ae(e.lpMint.address)}),A({pubkey:new Ae(t.vault.A)}),A({pubkey:new Ae(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(A({pubkey:Nn})),c.push(A({pubkey:new Ae(e.marketId),isWritable:!1}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:new Ae(t.marketEventQueue),isWritable:!1})),new Wt({programId:new Ae(e.programId),keys:c,data:a})}function ji(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:o}=r,i=ke(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Qi.span);Qi.encode({instruction:4,amountIn:Z(o)},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.mintLp.address}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return s===5?c.push(A({pubkey:Nn})):(c.push(A({pubkey:i.id})),c.push(A({pubkey:i.id}))),c.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks})),new Wt({programId:i.programId,keys:c,data:a})}return new Wt({programId:i.programId,keys:[]})}function au({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:P,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=_([E("instruction"),E("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),R=[{pubkey:Mn,isSigner:!1,isWritable:!1},{pubkey:ed,isSigner:!1,isWritable:!1},{pubkey:iu.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:P,coinAmount:k,pcAmount:B},I),{instruction:new Wt({keys:R,programId:r,data:I}),instructionType:V.AmmV4CreatePool}}function WP(r){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new Ae(r.id),isWritable:!1}),A({pubkey:new Ae(r.authority),isWritable:!1}),A({pubkey:new Ae(r.openOrders),isWritable:!1}),A({pubkey:new Ae(r.vault.A),isWritable:!1}),A({pubkey:new Ae(r.vault.B),isWritable:!1}),A({pubkey:new Ae(r.mintLp.address),isWritable:!1}),A({pubkey:new Ae(r.marketId),isWritable:!1}),A({pubkey:new Ae(r.marketEventQueue),isWritable:!1})];return new Wt({programId:new Ae(r.programId),keys:n,data:t})}function nd({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},o){let i=ke(r),s=Buffer.alloc(Ui.span);Ui.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders})];return o===4&&a.push(A({pubkey:i.targetOrders})),a.push(A({pubkey:i.vault.A}),A({pubkey:i.vault.B})),o===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1})),new Wt({programId:i.programId,keys:a,data:s})}function od({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},o){let i=ke(r),s=Buffer.alloc(Gi.span);Gi.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return o===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Wt({programId:i.programId,keys:a,data:s})}function hr(r){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return nd(F(C({},a),{amountIn:o,minAmountOut:i}),t);if(s==="out")return od(F(C({},a),{maxAmountIn:o,amountOut:i}),t);ru.logWithError("invalid params","params",r)}throw ru.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function qP({poolKeys:r,userKeys:e,startTime:t}){let n=Buffer.alloc(Xi.span);Xi.encode({instruction:0,nonce:5,startTime:Z(t)},n);let o=ke(r),i=[A({pubkey:Mn,isWritable:!1}),A({pubkey:iu.programId,isWritable:!1}),A({pubkey:td,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.authority,isWritable:!1}),A({pubkey:o.openOrders}),A({pubkey:o.mintLp.address}),A({pubkey:o.mintA.address,isWritable:!1}),A({pubkey:o.mintB.address,isWritable:!1}),A({pubkey:o.vault.A,isWritable:!1}),A({pubkey:o.vault.B,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.targetOrders}),A({pubkey:e.lpTokenAccount}),A({pubkey:o.id,isWritable:!1}),A({pubkey:o.marketProgramId,isWritable:!1}),A({pubkey:o.marketId,isWritable:!1}),A({pubkey:e.payer,isSigner:!0})];return new Wt({programId:o.programId,keys:i,data:n})}function uu({poolKeys:r}){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new Ae(r.id),isWritable:!1}),A({pubkey:new Ae(r.authority),isWritable:!1}),A({pubkey:new Ae(r.openOrders),isWritable:!1}),A({pubkey:new Ae(r.vault.A),isWritable:!1}),A({pubkey:new Ae(r.vault.B),isWritable:!1}),A({pubkey:new Ae(r.mintLp.address),isWritable:!1}),A({pubkey:new Ae(r.marketId),isWritable:!1}),A({pubkey:new Ae(r.marketEventQueue),isWritable:!1})];return{instruction:new Wt({programId:new Ae(r.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as Ue,TOKEN_2022_PROGRAM_ID as on,ASSOCIATED_TOKEN_PROGRAM_ID as xu}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as xt,SystemProgram as _n,Keypair as rs}from"@solana/web3.js";import Su from"bn.js";import fd from"bn.js";function cu(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function GP(r){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,r,!1),new Uint8Array(e)}function XP(r){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,r,!1),new Uint8Array(e)}function kr(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Hi(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Zi(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function Ao(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function lu(r,e){return Ao(r,e)?null:Hi(r,e)}function mu(r,e){return Ao(r,e)?null:Zi(r,e)}var rd=Buffer.from("amm_config","utf8"),id=Buffer.from("pool","utf8"),sd=Buffer.from("pool_vault","utf8"),ad=Buffer.from("pool_reward_vault","utf8"),du=Buffer.from("position","utf8"),ud=Buffer.from("tick_array","utf8"),cd=Buffer.from("operation","utf8"),ld=Buffer.from("pool_tick_array_bitmap_extension","utf8");function jP(r,e){return ae([rd,cu(e)],r)}function pu(r,e,t,n){return ae([id,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Ji(r,e,t){return ae([sd,e.toBuffer(),t.toBuffer()],r)}function fu(r,e,t){return ae([ad,e.toBuffer(),t.toBuffer()],r)}function we(r,e,t){return ae([ud,e.toBuffer(),kr(t)],r)}function mn(r,e,t,n){return ae([du,e.toBuffer(),kr(t),kr(n)],r)}function yt(r,e){return ae([du,e.toBuffer()],r)}function Tr(r){return ae([Buffer.from("metadata","utf8"),xn.toBuffer(),r.toBuffer()],xn)}function wo(r){return ae([cd],r)}function lt(r,e){return ae([ld,e.toBuffer()],r)}import bt from"bn.js";var de=new bt(0),mt=new bt(1),qt=new bt(-1),dt=new bt(1).shln(64),Ir=new bt(1).shln(128),$i=dt.sub(mt),Po=64,yu=Ir.subn(1),Ye=-443636,tt=-Ye,Nt=new bt("4295048016"),Mt=new bt("79226673521066979257578248091"),Br=new bt("4295048017"),xr=new bt("79226673521066979257578248090"),bu=16,gu="59543866431248",Au="184467440737095516",wu="15793534762490258745",Sr=new bt(10).pow(new bt(6)),md=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(md||{}),JP={[500]:10,[3e3]:60,[1e4]:200},$P={version:6,liquidity:de,tickCurrent:0,observationIndex:0,observationUpdateDuration:0,feeGrowthGlobalX64A:de,feeGrowthGlobalX64B:de,protocolFeesTokenA:de,protocolFeesTokenB:de,swapInAmountTokenA:de,swapOutAmountTokenB:de,swapInAmountTokenB:de,swapOutAmountTokenA:de,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},Pu={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:[]},eh=new bt("18446744073700000000");var dd=15,le=class{static async getTickArrays(e,t,n,o,i,s,a){let c=[],u=Y.getTickArrayStartIndexByTick(o,i),l=Y.getInitializedTickArrayInRange(s,a,i,u,Math.floor(dd/2));for(let p=0;p<l.length;p++){let{publicKey:y}=we(t,n,l[p]);c.push(y)}let m=(await ht(e,c)).map(p=>p!==null?ho.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(C({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=Y.getNextTickArrayStartIndex(u,i,s),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,i){let s=Math.floor(e/le.tickCount(t)),a=n?Y.searchLowBitFromStart(o,i,s-1,1,t):Y.searchHightBitFromStart(o,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let i;if(o){let a=ve-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<ve;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=we(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,s){let a=Y.getTickArrayStartIndexByTick(o,i),c=Math.floor((o-a)/i),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<ve;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=we(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Y.checkIsOutOfBoundary(e)){if(e>tt)return!1;let n=Y.getTickArrayStartIndexByTick(Ye,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return ve*e}};import re from"bn.js";import{PublicKey as Bt}from"@solana/web3.js";import Ce from"bn.js";var es=14,Ut=class{static maxTickInTickarrayBitmap(e){return e*ve*dn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let i=n*o;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=o?t-le.tickCount(n):t+le.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*ve,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=lu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=mu(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-le.tickCount(n)}}}},ko=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Ut.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;if(tt<=t)throw Error(`extensionTickBoundary check error: ${tt}, ${t}`);if(n<=Ye)throw Error(`extensionTickBoundary check error: ${n}, ${Ye}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Y.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=le.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:s}=Ut.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=Y.mergeTickArrayBitmap(e).shln(dn-1-a),u=Ao(512,c)?null:Hi(512,c);if(u!==null){let l=t-u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=Y.mergeTickArrayBitmap(e).shrn(a),u=Ao(512,c)?null:Zi(512,c);if(u!==null){let l=t+u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-le.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Ut.maxTickInTickarrayBitmap(t),o=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(o=dn-o),o}};import _t from"bn.js";var To=class{static getfeeGrowthInside(e,t,n){let o=new _t(0),i=new _t(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new _t(0),a=new _t(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:s}){var b,g,h,P;let a=ee.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),c=ee.getSqrtPriceX64FromTick(t.tickLower),u=ee.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=ce.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[he(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),he(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[he(new _t(new v(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),he(new _t(new v(m.amountB.toString()).mul(l).toFixed(0)),(P=e.mintB.extensions)==null?void 0:P.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as hu}from"@solana/spl-token";var Re=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,i,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(qt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=we(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(qt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Re.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ko.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Y.checkTickArrayIsInitialized(Y.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=we(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=we(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/le.tickCount(e.tickSpacing)),o=t?Y.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Y.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=Ut.nextInitializedTickArrayStartIndex(Y.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=ko.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Ye||t>tt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(C({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Bt(d)});if(p.tokenMint.equals(Bt.default))continue;if(n<=p.openTime.toNumber()||o.eq(de)){s.push(p);continue}let y=new Ce(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),h=ne.mulDivFloor(f,p.emissionsPerSecondX64,dt),P=p.rewardTotalEmissioned.add(h);s.push(F(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:P,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let s=Y.getTickArrayStartIndexByTick(i,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;return t>tt&&(t=le.getArrayStartIndex(tt,e)+le.tickCount(e)),n<Ye&&(n=le.getArrayStartIndex(Ye,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/le.tickCount(t)*dn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await _e(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of o)s.accountInfo!==null&&(i[s.pubkey.toString()]=Tu.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=Y.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Y.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=we(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let s=await _e(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=ho.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=F(C({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(yt(p,d).publicKey);let l=await ht(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=Kr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:P,amountB:k}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA:P,amountB:k,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>F(C({},x),{pendingReward:new Ce(0)})),leverage:B,tokenFeeAmountA:new Ce(0),tokenFeeAmountB:new Ce(0)}];let T=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await ht(t,d,{batchRequest:o}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=ho.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,P=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[P].toString()],T=k.ticks[Y.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[Y.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await To.GetPositionFees(f,g,T,S),I=await To.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Ce(0))?x:new Ce(0),g.tokenFeeAmountB=R.gte(new Ce(0))?R:new Ce(0);for(let L=0;L<I.length;L++)g.rewardInfos[L].pendingReward=I[L].gte(new Ce(0))?I[L]:new Ce(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:s,priceLimit:a=new v(0),catchLiquidityInsufficient:c=!1}){var W;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new v(0))?u=l?Nt.add(new Ce(1)):Mt.sub(new Ce(1)):u=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=he(i,m,o,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Re.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((W=p.fee)!=null?W:de),u,c),P=he(f,d,o,!1),k=ee.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new v(1).div(k),T=f.mul(new Ce(Math.floor((1-s)*1e10))).div(new Ce(1e10)),S=he(T,d,o,!1),x=l?e.currentPrice:new v(1).div(e.currentPrice),R=new v(B).sub(x).abs(),I=x,L=new Je(new v(R).mul(10**15).toFixed(0),new v(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:P,minAmountOut:S,expirationTime:Rt(p.expirationTime,P.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ie(F(C({},u),{mint:u.address,isToken2022:u.programId===hu.toBase58()})),new Ie(F(C({},l),{mint:l.address,isToken2022:l.programId===hu.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:P,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Re.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Bt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=F(C({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),R=F(C({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),I=F(C({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),L=new rt({baseToken:m,denominator:new Ce(10).pow(new Ce(20+m.decimals)),quoteToken:d,numerator:h.mul(new v(10**(20+d.decimals))).toFixed(0)}),W=new rt({baseToken:m,denominator:new Ce(10).pow(new Ce(20+m.decimals)),quoteToken:d,numerator:P.mul(new v(10**(20+d.decimals))).toFixed(0)}),D=new be(m,B);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:I,expirationTime:g,currentPrice:L,executionPrice:W,priceImpact:k,fee:D,remainingAccounts:T,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var y,f,b;let i=e[t],s=Y.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Y.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[ut(e.mintA.address).toString()],d=o[ut(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=ee.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),b=ee.getSqrtPriceX64FromTick(s),g=ee.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:P}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new v(h.toString()).div(new v(10).pow(p)).mul(m.value).add(new v(P.toString()).div(new v(10).pow(y)).mul(d.value)),S=new v(k.toString()).div(new v(10).pow(p)).mul(m.value).add(new v(B.toString()).div(new v(10).pow(y)).mul(d.value)),x=new v(1).div(T.add(S)),I=new v(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),L=3600*24*365,W=e.rewardDefaultInfos.map(D=>{var q,Ze;let J=D.mint.decimals,G=o[D.mint.address];return c<((q=D.startTime)!=null?q:0)||c>((Ze=D.endTime)!=null?Ze:0)||!D.perSecond||!G||J===void 0?0:new v(G.value).mul(new v(D.perSecond).mul(L)).div(new v(10).pow(J)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:W,apr:I+W.reduce((D,J)=>D+J,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,h;let l=ee.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),m=ee.getSqrtPriceX64FromTick(n),d=ee.getSqrtPriceX64FromTick(o),p=a?1-s:1+s,y=he(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ce(new v(y.amount.sub((h=y.fee)!=null?h:de).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Ce(0);else if(l.lte(d)){let P=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?P:k}else b=t?new Ce(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Re.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:s,add:a}){var b,g,h,P;let c=ee.getSqrtPriceX64FromTick(n),u=ee.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(ee.priceToSqrtPriceX64(new v(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[he(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),he(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[he(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),he(m.amountB.muln(l),(P=t.mintB.extensions)==null?void 0:P.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Bt(c.id));(await ht(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=fn.decode(c.data))});let s=t.map(c=>lt(new Bt(c.programId),new Bt(c.id)).publicKey),a=await Re.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(C({},c),{[u.id]:F(C({},n[u.id]),{id:new Bt(u.id),version:6,programId:new Bt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(C({},u.config),{id:new Bt(u.config.id),fundOwner:""}),currentPrice:new v(u.price),exBitmapInfo:a[lt(new Bt(u.programId),new Bt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber()})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function Eh({poolInfo:r,tickLower:e,tickUpper:t,amountA:n,amountB:o,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var P,k,B,T;let[u,l,m,d]=e<t?[e,t,n,o]:[t,e,o,n],p=ee.priceToSqrtPriceX64(new v(r.price),r.mintA.decimals,r.mintB.decimals),y=ee.getSqrtPriceX64FromTick(u),f=ee.getSqrtPriceX64FromTick(l),[b,g]=[he(m,(P=r.mintA.extensions)==null?void 0:P.feeConfig,a,!c),he(d,(k=r.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],h=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((B=b.fee)!=null?B:de),g.amount.sub((T=g.fee)!=null?T:de));return ce.getAmountsOutFromLiquidity({poolInfo:r,tickLower:e,tickUpper:t,liquidity:h,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var ts={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function ku(r){return F(C({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:ts,week:ts,month:ts,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:F(C({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(de)||(i=i.add(mt)),i}static mulDivFloor(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).add(n.sub(mt)).div(n)}static x64ToDecimal(e,t){return new v(e.toString()).div(v.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(v.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ir).sub(t).mod(Ir)}};function Fe(r,e){return ns(r.mul(e),64,256)}function pd(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function ns(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ee=class{static sqrtPriceX64ToPrice(e,t,n){return ne.x64ToDecimal(e).pow(2).mul(v.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(v.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(de))return e;let i=t.shln(Po);if(o){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,mt,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return ne.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(Po);if(o)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,mt,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<Ye||e>tt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=Fe(n,new re("18444899583751176192"))),(t&4)!=0&&(n=Fe(n,new re("18443055278223355904"))),(t&8)!=0&&(n=Fe(n,new re("18439367220385607680"))),(t&16)!=0&&(n=Fe(n,new re("18431993317065453568"))),(t&32)!=0&&(n=Fe(n,new re("18417254355718170624"))),(t&64)!=0&&(n=Fe(n,new re("18387811781193609216"))),(t&128)!=0&&(n=Fe(n,new re("18329067761203558400"))),(t&256)!=0&&(n=Fe(n,new re("18212142134806163456"))),(t&512)!=0&&(n=Fe(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=Fe(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=Fe(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=Fe(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=Fe(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=Fe(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=Fe(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=Fe(n,new re("696457651848324352"))),(t&131072)!=0&&(n=Fe(n,new re("26294789957507116"))),(t&262144)!=0&&(n=Fe(n,new re("37481735321082"))),e>0&&(n=yu.div(n)),n}static getTickFromPrice(e,t,n){return ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Mt)||e.lt(Nt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),o=pd(n,32,128),i=new re("8000000000000000","hex"),s=0,a=new re(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new re(0))&&s<bu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let u=a.shrn(32),m=o.add(u).mul(new re(gu)),d=ns(m.sub(new re(Au)),64,128).toNumber(),p=ns(m.add(new re(wu)),64,128).toNumber();return d==p?d:ee.getSqrtPriceX64FromTick(p).lte(e)?p:d}},yn=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let i=yn.getTickWithPriceAndTickspacing(e,t,n,o),s=ee.getSqrtPriceX64FromTick(i);return ee.sqrtPriceX64ToPrice(s,n,o)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Po),s=t.sub(e);return o?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),mt,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");return o?ne.mulDivCeil(n,t.sub(e),dt):ne.mulDivFloor(n,t.sub(e),dt)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return o?ne.mulDivRoundingUp(a,mt,$i):a.shrn(Po)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,$i,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,o,!1),a=ce.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,o,i),a=ce.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,s,a){let{amountA:c,amountB:u}=ce.getAmountsFromLiquidity(e,t,n,o,s),l=i?1+a:1-a,m=new re(new v(c.toString()).mul(l).toFixed(0)),d=new re(new v(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:i,add:s,epochInfo:a,amountAddFee:c}){var h,P,k,B;let u=ee.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),l=ee.getSqrtPriceX64FromTick(t),m=ee.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(u,l,m,o,s),[y,f]=[he(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),he(p.amountB,(P=e.mintB.extensions)==null?void 0:P.feeConfig,a,c)],[b,g]=[he(new re(new v(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),he(new re(new v(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:o,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Rt(y.expirationTime,f.expirationTime)}}},pn=class{static swapCompute(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?Nt.add(mt):Mt.sub(mt)),s){if(y.lt(Nt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(Mt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(de),g={amountSpecifiedRemaining:d,amountCalculated:de,sqrtPriceX64:m,tick:u>p?Math.min(p+le.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new re(0)},h=p,P=n[p],k=0,B=!s&&P.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(de)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=Y.nextInitTick(P,g.tick,l,s,B),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let L=Re.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,exBitmapInfo:i},h,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=L.nextStartIndex;let{publicKey:W}=we(e,t,h);R=W,P=n[h];try{x=Y.firstInitializedTick(P,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<Ye?T.tickNext=Ye:T.tickNext>tt&&(T.tickNext=tt),T.sqrtPriceNextX64=ee.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]=pn.swapStepCompute(g.sqrtPriceX64,I,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let L=x.liquidityNet;s&&(L=L.mul(qt)),g.liquidity=ce.addDelta(g.liquidity,L)}B=T.tickNext!=g.tick&&!s&&P.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let L=ee.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&P.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:T,isExist:S}=le.nextInitializedTickArray(g.tick,l,s,o,i);S&&p!==T&&(g.accounts.push(we(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:de,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,i){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),c=o.gte(de);if(c){let l=ne.mulDivFloor(o,Sr.sub(new re(i.toString())),Sr);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(qt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromOutput(e,n,o.mul(qt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(o.mul(qt))&&(s.amountOut=o.mul(qt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=o.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new re(i),Sr.sub(new re(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var ve=60,dn=512,Y=class{static getTickArrayAddressByTick(e,t,n,o){let i=Y.getTickArrayStartIndexByTick(n,o),{publicKey:s}=we(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Y.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=ve)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=le.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*ve,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*ve,i=Math.floor(t/o)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*ve:e+t*ve}static mergeTickArrayBitmap(e){let t=new fd(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,i){let s=Math.floor(o/(n*ve));return[...Y.searchLowBitFromStart(e,t,s-1,i,n),...Y.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Y.searchHightBitFromStart(e,t,0,dn,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let s=[],a=Y.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=we(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<Ye||e>tt}static nextInitTick(e,t,n,o,i){if(le.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<ve;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=ve-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<ve;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new v(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new v(1).div(t),i=yn.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new v(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new v(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new v(1).div(t),i=yn.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new v(1).div(a)}}};var Iu=_([fe(8),E("bump"),Lt("index"),K(""),Xe("protocolFeeRate"),Xe("tradeFeeRate"),Lt("tickSpacing"),X(w(),8,"")]),yd=_([Xe("blockTimestamp"),Q("sqrtPriceX64"),Q("cumulativeTimePriceX64"),X(Q(),1,"")]),os=_([fe(8),qe("initialized"),K("poolId"),X(yd,1e3,"observations"),X(Q(),5,"")]),bd=_([E("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),Q("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Q("rewardGrowthGlobalX64")]),fn=_([fe(8),E("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Lt("tickSpacing"),Q("liquidity"),Q("sqrtPriceX64"),We("tickCurrent"),Lt("observationIndex"),Lt("observationUpdateDuration"),Q("feeGrowthGlobalX64A"),Q("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),Q("swapInAmountTokenA"),Q("swapOutAmountTokenB"),Q("swapInAmountTokenB"),Q("swapOutAmountTokenA"),E("status"),X(E(),7,""),X(bd,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")]),gd=_([Q("growthInsideLastX64"),w("rewardAmountOwed")]),Kr=_([fe(8),E("bump"),K("nftMint"),K("poolId"),We("tickLower"),We("tickUpper"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(gd,3,"rewardInfos"),X(w(),8,"")]),ck=_([fe(8),E("bump"),K("poolId"),We("tickLowerIndex"),We("tickUpperIndex"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),X(Q(),3,"rewardGrowthInside"),X(w(),8,"")]),Ad=_([We("tick"),Ba("liquidityNet"),Q("liquidityGross"),Q("feeGrowthOutsideX64A"),Q("feeGrowthOutsideX64B"),X(Q(),3,"rewardGrowthsOutsideX64"),X(Xe(),13,"")]),ho=_([fe(8),K("poolId"),We("startTickIndex"),X(Ad,ve,"ticks"),E("initializedTickCount"),X(E(),115,"")]),Bu=_([fe(329),X(K(),100,"whitelistMints")]),Tu=_([fe(8),K("poolId"),X(X(w(),8),es,"positiveTickArrayBitmap"),X(X(w(),8),es,"negativeTickArrayBitmap")]);var Ku=ue("Raydium_Clmm"),St={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},xe=class{static createPoolInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([Q("sqrtPriceX64"),w("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...St.createPool,...g]);return new xt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:o,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:c,startTime:u,forerunCreate:l}=e,m=ze({fromPublicKey:o,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[_n.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(os.span),space:os.span,programId:n})],{publicKey:f}=pu(n,a,d,p),{publicKey:b}=Ji(n,f,d),{publicKey:g}=Ji(n,f,p);return y.push(this.createPoolInstruction(n,f,o,a,m.publicKey,d,b,new U(i.programId||Ue),p,g,new U(s.programId||Ue),lt(n,f).publicKey,c,u)),{signers:[],instructions:y,instructionTypes:[V.CreateAccount,V.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=_([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),Q("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),E("optionBaseFlag"),qe("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:xu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],J=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},J);let G=Buffer.from([...St.openPosition,...J]);return new xt({keys:D,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=rs.generate();m.push(x),y=x.publicKey}let f=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:h}=we(d,p,b),{publicKey:P}=ge(n.wallet,y,Ue),{publicKey:k}=Tr(y),{publicKey:B}=yt(d,y),{publicKey:T}=mn(d,p,o,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=rs.generate();m.push(x),y=x.publicKey}let f=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:h}=we(d,p,b),{publicKey:P}=ge(n.wallet,y,Ue),{publicKey:k}=Tr(y),{publicKey:B}=yt(d,y),{publicKey:T}=mn(d,p,o,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,u,s,a,c,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P,k,B,T,S,x,R,I){let L=_([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),Q("liquidity"),w("amountMaxA"),w("amountMaxB"),qe("withMetadata"),E("optionBaseFlag"),qe("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:xu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],J=Buffer.alloc(L.span);L.encode({tickLowerIndex:h,tickUpperIndex:P,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new Su(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},J);let G=Buffer.from([...St.openPosition,...J]);return new xt({keys:D,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=rs.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(p,y,f),{publicKey:h}=we(p,y,b),{publicKey:P}=ge(n.wallet,m,Ue),{publicKey:k}=Tr(m),{publicKey:B}=yt(p,m),{publicKey:T}=mn(p,y,o,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,P,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,i,f,b,s,a,c,u,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:P,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i){let s=_([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...St.closePosition,...c]);return new xt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o}){let i=new U(e.programId),{publicKey:s}=ge(n.wallet,o.nftMint,Ue),{publicKey:a}=yt(i,o.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,o.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=_([Q("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(P.span);P.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(c,u,l),{publicKey:p}=we(c,u,m),{publicKey:y}=ge(o.wallet,n.nftMint,Ue),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=mn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(c,u,l),{publicKey:p}=we(c,u,m),{publicKey:y}=ge(o.wallet,n.nftMint,Ue),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=mn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let P=_([Q("liquidity"),w("amountMaxA"),w("amountMaxB"),E("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(P.span);P.encode({liquidity:new Su(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=_([Q("liquidity"),w("amountMinA"),w("amountMinB")]),B=[...P?[{pubkey:P,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...St.decreaseLiquidity,...S]);return new xt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(u,l,m),{publicKey:y}=we(u,l,d),{publicKey:f}=ge(o.wallet,n.nftMint,c),{publicKey:b}=yt(u,n.nftMint),{publicKey:g}=mn(u,l,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let P=[];return P.push(this.decreaseLiquidityInstruction(u,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?lt(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:P,instructionTypes:[V.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g){let h=_([w("amount"),w("otherAmountThreshold"),Q("sqrtPriceLimitX64"),qe("isBaseInput")]),P=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...P],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...St.swap,...B]);return new xt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,lt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=_([w("openTime"),w("endTime"),Q("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...St.initReward,...f]);return new xt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a=fu(i,s,o.mint).publicKey,c=wo(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=_([E("rewardIndex"),Q("emissionsPerSecondX64"),w("openTime"),w("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...St.setRewardEmissions,...f]);return new xt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Ku.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=wo(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,s,a){let c=_([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...St.collectReward,...l]);return new xt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Ku.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[V.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:o,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:c}){let[u,l]=[new U(e.programId),new U(e.id)],[m,d]=[new U(t.vault.A),new U(t.vault.B)],[p,y]=[new U(e.mintA.address),new U(e.mintB.address)],f=e.mintA.address===o.toString(),b=[this.swapInstruction(u,n.wallet,l,new U(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,c,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[V.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as kd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Td}from"@solana/spl-token";import{PublicKey as Pd}from"@solana/web3.js";import Cu from"bn.js";var Ru=new Cu(25),Lu=new Cu(1e4),wd={4:3,5:3};var hd=ue("Raydium_liquidity_serum");function Ou({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=Pd.createProgramAddressSync(i,r)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw hd.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}import Io from"bn.js";function Cr({programId:r}){let{publicKey:e}=ae([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function bn({name:r,programId:e,marketId:t}){let{publicKey:n}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function Id({programId:r,marketId:e}){let{publicKey:t}=ae([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function as({programId:r}){return ae([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function Nu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:c}){let u=bn({name:"amm_associated_seed",programId:a,marketId:t}),l=bn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=as({programId:a}),p=bn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=bn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=bn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Id({programId:a,marketId:t}),g=bn({name:"target_associated_seed",programId:a,marketId:t}),h=bn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:P}=Ou({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:P,lookupTableAccount:kd.default,configId:Cr({programId:a})}}var is;async function Wk({connection:r,poolKeysList:e,config:t}){is||(is=new On({connection:r}),await is.initStableModelLayout());let n=e.map(s=>uu({poolKeys:s}));return(await na(r,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=oa(s,"GetPoolData"),c=new Io(Et(a,"status")),u=Number(Et(a,"coin_decimals")),l=Number(Et(a,"pc_decimals")),m=Number(Et(a,"lp_decimals")),d=new Io(Et(a,"pool_coin_amount")),p=new Io(Et(a,"pool_pc_amount")),y=new Io(Et(a,"pool_lp_supply")),f="0";try{f=Et(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Io(f)}})}var ss={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Rr=r=>{let e={},t=Td.toBase58();return Object.keys(r).map(n=>{let o=r[n],[i,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:et({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:et({address:s,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new v(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new v(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new v(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:ss,week:ss,month:ss,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Cr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:et({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())})}}),e};import at from"bn.js";var Bo=class extends Be{constructor(t){super(t);this.stableLayout=new On({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let s=new at(new v(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Pr(t[i?"mintB":"mintA"]),[c,u]=[new at(new v(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new at(new v(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new at(new v(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,v.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=pt;s.isZero()||(d=m==="base"?$o(s.mul(u),c):$o(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=$o(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Je(new at(1)).add(o).mul(d).quotient,b=new be(a,d),g=new be(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:s,fixedSide:a,config:c,txVersion:u,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new je(n.lpMint.address)}),P=[y,f],k=[b,g],B=[i.raw,s.raw],T=i.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(P.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=P,[I,L]=k,[W,D]=B,J=o!=null?o:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),vt=await m.handleTokenAccount({side:"in",amount:W,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=vt,Ze=Ke(vt,["tokenAccount"]);G.addInstruction(Ze);let Tn=await m.handleTokenAccount({side:"in",amount:D,mint:R.mint,tokenAccount:L,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:hn}=Tn,rn=Ke(Tn,["tokenAccount"]);G.addInstruction(rn);let Vo=await m.handleTokenAccount({side:"out",amount:0,mint:new je(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Xt}=Vo,kn=Ke(Vo,["tokenAccount"]);return G.addInstruction(kn),G.addInstruction({instructions:[su({poolInfo:n,poolKeys:J,userKeys:{baseTokenAccount:q,quoteTokenAccount:hn,lpTokenAccount:Xt,owner:this.scope.ownerPubKey},baseAmountIn:W,quoteAmountIn:D,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5AddLiquidity:V.AmmV4AddLiquidity],lookupTableAddress:J.lookupTableAccount?[J.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),u===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=o!=null?o:await this.getAmmPoolKeys(n.id),[l,m,d]=[new je(n.mintA.address),new je(n.mintB.address),new je(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:P}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:P}),{tokenAccount:k}=x,B=Ke(x,["tokenAccount"]);g.addInstruction(B);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:P}),{tokenAccount:T}=R,S=Ke(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[ji({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(c),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=vn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||ge(this.scope.ownerPubKey,q.accountInfo.mint,vn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let h=g[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let P=o.add(a!=null?a:new at(0)),k=t.mintA.address===Ie.WSOL.mint.toString(),B=t.mintB.address===Ie.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:vn,mint:new je(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:vn,mint:new je(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let q=ft[s.programId],Ze=Qe({programId:new je(s.programId),poolId:new je(s.id),owner:this.scope.ownerPubKey,version:q}),hn,rn=await this.scope.connection.getAccountInfo(Ze);if(rn&&(hn=Ln(q).decode(rn.data)),q!==6&&!hn){let{instruction:zt,instructionType:Gr}=lo({id:new je(s.id),programId:new je(s.programId),version:q,ledger:Ze,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[zt],instructionTypes:[Gr]})}let Xt=[];for(let zt of s.rewardInfos){let Gr=zt.mint.address===Ie.WSOL.mint.toString();if(g[zt.mint.address])Xt.push(g[zt.mint.address]);else{let{account:Ts,instructionParams:Is}=await this.scope.account.getOrCreateTokenAccount({mint:new je(zt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Gr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Ts||this.logAndCreateError("farm reward account not found:",zt.mint.address),Is&&b.addInstruction(Is),Xt.push(Ts)}}let kn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],vt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:kn,lpAccount:h,rewardAccounts:Xt},Tn=ft[s.programId],Vo=Tn===6?mo(vt):Tn===5?po(vt):fo(vt),sc={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};b.addInstruction({instructions:[Vo],instructionTypes:[sc[Tn]]})}let I=await this.getAmmPoolKeys(t.id),L=ji({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:P});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[W,D]=t.mintA.address===n.mintA.address?[T,x]:[x,T],J=await this.scope.clmm.getClmmPoolKeys(t.id),G=await xe.openPositionFromBaseInstructions(F(C({poolInfo:n,poolKeys:J,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:W,tokenAccountB:D},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:J.lookupTableAccount?[J.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var W;let b=u.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),g=u.useSOLBalance&&o.mint.equals(Mu),h=u.useSOLBalance&&i.mint.equals(Mu),P=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});P.addInstruction(B||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(P.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=Nu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.decimals,quoteDecimals:i.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:I,instructionType:L}=au(F(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:ge(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:c,coinAmount:s,pcAmount:a}));return P.addInstruction({instructions:[I],instructionTypes:[L]}),P.addCustomComputeBudget(f),P.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=Cr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return Ja.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:s}){let[a,c]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=a==t.mintA.address?"base":"quote";d==="quote"&&m.reverse();let[p,y]=m,f=t.version===4,b;if(f)b=new v(y.toString()).div(p.toString());else{let I=ou(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);d==="quote"?b=new v(1e6).div(I*1e6):b=new v(I*1e6).div(1e6)}let g=n,h=new at(0),P=new at(0);if(!g.isZero())if(f){P=to(g.mul(Ru),Lu);let I=g.sub(P),L=p.add(I);h=y.mul(I).div(L)}else{P=g.mul(new at(2)).div(new at(1e4));let I=g.sub(P);d==="quote"?h=new at(tu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber())):h=new at(nu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber()))}let k=new at(new v(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new v(h.toString()).div(new v(g.sub(P).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new v(h.toString()).div(g.sub(P).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:P}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===H.toBase58(),h=y&&b.address===H.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:vn,mint:new je(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),P||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:P,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:vn,mint:new je(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d});m.addInstruction(T||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:h,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[hr({version:x,poolKeys:S,userKeys:{tokenAccountIn:P,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[x===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await _e(this.scope.connection,t.map(l=>({pubkey:new je(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=go.decode(m.accountInfo.data);i[String(t[l])]=F(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await _e(this.scope.connection,s.map(l=>({pubkey:new je(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new at(Bd.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=F(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new v(p.toString()).div(new v(10).pow(m.quoteDecimal.toString())).div(new v(d.toString()).div(new v(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=Rr({[t]:n}),i=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as se}from"@solana/web3.js";import gt from"bn.js";import{AccountLayout as _u,TOKEN_PROGRAM_ID as vu}from"@solana/spl-token";var xo=class extends Be{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var h;let{programId:t,owner:n=((h=this.scope.owner)==null?void 0:h.publicKey)||se.default,mint1:o,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new gt(new se(o.address).toBuffer()).gt(new gt(new se(i.address).toBuffer()))?[i,o,new v(1).div(a)]:[o,i,a],b=ee.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await xe.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:c,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(u),d.versionBuild({txVersion:m,extInfo:{address:F(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:c.toString(),vault:{A:g.address.mintAVault.toString(),B:g.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:f.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}},Pu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===H.toString(),P=n.useSOLBalance&&e.mintB.address===H.toString(),[k,B]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let I=t||await this.getClmmPoolKeys(e.id),L=await xe.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:F(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:L.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===H.toBase58(),h=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:u,checkCreateATAOwner:l});P&&(f=P),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(T||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await xe.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===H.toString(),g=c.useSOLBalance&&t.mintB.address===H.toString(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(P||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=xe.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===H.toString(),b=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(o==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(h||{});let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(o==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});P&&(y=P),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=xe.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:o,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===H.toString(),f=i.useSOLBalance&&t.mintB.address===H.toString(),b,g,{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=h,P&&p.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let L=i.useSOLBalance&&I.mint.address===H.toString(),W;if(I.mint.address===t.mintA.address)W=b;else if(I.mint.address===t.mintB.address)W=g;else{let{account:D,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(I.mint.programId),mint:new se(I.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:u,checkCreateATAOwner:l});W=D,J&&p.addInstruction(J)}T.push(W)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await xe.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[V.ClmmDecreasePosition]});let R=C({},x.address);if(i.closePosition){let I=await xe.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),R=C(C({},R),I.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:o}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=xe.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:o,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(n.mint.address),mint:new se(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new v(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=xe.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new se(n.mint.programId),mint:new se(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of o){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new v(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=xe.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new se(m.mint.programId),mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(H),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new v(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=xe.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===H.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new v(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=xe.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});u.addInstruction(b),l=C(C({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(H),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:o,checkCreateATAOwner:i});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=xe.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:o,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=xe.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=c.useSOLBalance&&e.mintA.address===H.toBase58(),b=c.useSOLBalance&&e.mintB.address===H.toBase58(),g;!s||s.equals(new v(0))?g=y?Nt.add(new gt(1)):Mt.sub(new gt(1)):g=ee.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?o:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let P;if(!P){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?0:o}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});P=B,T&&p.addInstruction(T)}(!h||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:h,ownerTokenAccountB:P,mintAUseSOLBalance:f,mintBUseSOLBalance:b,associatedOnly:l});let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(xe.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:P},inputMint:new se(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:u})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)o?ge(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(P=>!P.liquidity.isZero()||P.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===H.toString(),y=n.useSOLBalance&&d.mintB.address===H.toString(),f=u[d.mintA.address];if(!f){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new se(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f=P,k&&l.addInstruction(k)}let b=u[d.mintB.address];if(!b){let{account:P,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new se(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:o,checkCreateATAOwner:i});b=P,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let P of d.rewardDefaultInfos){let k=n.useSOLBalance&&P.mint.address===H.toString(),B=u[P.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(P.mint.programId),mint:new se(P.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:o});B=T,S&&l.addInstruction(S)}u[P.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let P of t[m.id]){let k=xe.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:P,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new gt(0),amountMinA:new gt(0),amountMinB:new gt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:c}):l.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(wo(e).publicKey);return t?Bu.decode(t.data).whitelistMints.filter(o=>!o.equals(se.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new gt(1))).map(s=>yt(new se(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(s=>{if(!s)return;let a=Kr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await _e(this.scope.connection,e.map(i=>({pubkey:new se(i)})),t),o={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=fn.decode(s.accountInfo.data),c=ee.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=F(C({},a),{currentPrice:c,programId:s.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await _e(this.scope.connection,Array.from(n).map(c=>({pubkey:new se(c)}))),i={};o.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Iu.decode(c.accountInfo.data))});let s=await Re.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:et({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||vu.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?nn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:et({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||vu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?nn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:F(C({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Re.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await Kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new se(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await _e(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=ku(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(_u.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(_u.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=F(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:c.config});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:s}}};import{PublicKey as te}from"@solana/web3.js";import{NATIVE_MINT as Vr,TOKEN_PROGRAM_ID as gn,AccountLayout as Dd}from"@solana/spl-token";import Fu from"bn.js";var us=new Fu(1e6);function xd(r,e,t){return r.mul(e).add(t).sub(new Fu(1)).div(t)}function Vu(r,e,t){return r.mul(e).div(t)}var Lr=class{static tradingFee(e,t){return xd(e,t,us)}static protocolFee(e,t){return Vu(e,t,us)}static fundFee(e,t){return Vu(e,t,us)}};import So from"bn.js";function Or(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Sd(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=Or(r,e);if(n.gt(Vn)){t=t.add(new So(1));let o=r.div(t);n=Or(r,t),n.gt(Vn)&&(o=o.add(new So(1)))}return[t,e]}var Vn=new So(0),Nr=class{static swapWithoutFees(e,t,n){let o=t.mul(n),i=t.add(e),[s,a]=Sd(o,i),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,o,i){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Or(e.mul(n),t).gt(Vn)&&s.gt(Vn)&&(s=s.add(new So(1))),Or(e.mul(o),t).gt(Vn)&&a.gt(Vn)&&(a=a.add(new So(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Eu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Eu||{}),Mr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,o){let i=Lr.tradingFee(e,o),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Nr.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}};var Kd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Cd=Buffer.from("amm_config","utf8"),Rd=Buffer.from("pool","utf8"),Ld=Buffer.from("pool_lp_mint","utf8"),Od=Buffer.from("pool_vault","utf8"),Nd=Buffer.from("observation","utf8");function Fn(r){return ae([Kd],r)}function Md(r,e){return ae([Cd,Vd(e)],r)}function _d(r,e,t,n){return ae([Rd,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function vd(r,e){return ae([Ld,e.toBuffer()],r)}function Du(r,e,t){return ae([Od,e.toBuffer(),t.toBuffer()],r)}function cs(r,e){return ae([Nd,e.toBuffer()],r)}function Vd(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function Wu({programId:r,mintA:e,mintB:t}){let n=Md(r,0).publicKey,o=Fn(r).publicKey,i=_d(r,n,e,t).publicKey,s=vd(r,i).publicKey,a=Du(r,i,e).publicKey,c=Du(r,i,t).publicKey,u=cs(r,i).publicKey;return{poolId:i,configId:n,authority:o,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as Ko}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ls,TOKEN_2022_PROGRAM_ID as qu,ASSOCIATED_TOKEN_PROGRAM_ID as Fd}from"@solana/spl-token";var Ed=ue("Raydium_cpmm"),Co={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173]};function Uu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,P){let k=_([w("amountMaxA"),w("amountMaxB"),w("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Fd,isSigner:!1,isWritable:!1},{pubkey:jo,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:P},T),new Ko({keys:B,programId:r,data:Buffer.from([...Co.initialize,...T])})}function Gu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([w("lpAmount"),w("amountMaxA"),w("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:qu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Ed.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Ko({keys:b,programId:r,data:Buffer.from([...Co.deposit,...g])})}function Xu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([w("lpAmount"),w("amountMinA"),w("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:qu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Qo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Ko({keys:b,programId:r,data:Buffer.from([...Co.withdraw,...g])})}function _r(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=_([w("amountIn"),w("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new Ko({keys:g,programId:r,data:Buffer.from([...Co.swapBaseInput,...h])})}function hI(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=_([w("amountInMax"),w("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new Ko({keys:g,programId:r,data:Buffer.from([...Co.swapBaseOutput,...h])})}import Ee from"bn.js";var zu=_([fe(8),E("bump"),qe("disableCreatePool"),Lt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(w(),16)]),vr=_([fe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),E("bump"),E("status"),E("lpDecimals"),E("mintDecimalA"),E("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),X(w(),32)]);var Ro=class extends Be{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await _e(this.scope.connection,e.map(m=>({pubkey:new te(m)}))),o={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=vr.decode(d.accountInfo.data);o[String(e[m])]=F(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await _e(this.scope.connection,m.map(p=>({pubkey:new te(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]]=zu.decode(y.data)}}let c={},u=await _e(this.scope.connection,s.map(m=>({pubkey:new te(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Ee(Dd.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=F(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new v(y.toString()).div(new v(10).pow(d.mintDecimalB)).div(new v(p.toString()).div(new v(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let i=e[o],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return F(C({},n),{[o]:F(C({},i),{id:new te(o),configInfo:i.configInfo,version:7,authority:Fn(i.programId).publicKey,mintA:et({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?nn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:et({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?nn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Kn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=et({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?nn(n[t.mintA.toBase58()].feeConfig):void 0}}),i=et({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?nn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=et({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:gn.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new v(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new v(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Fn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:o,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:c}=m,u=Ke(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var W,D,J;let d=o.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),p=new Ee(new te(u.mintA.address).toBuffer()).lte(new Ee(new te(u.mintB.address).toBuffer())),[y,f]=p?[u.mintA,u.mintB]:[u.mintB,u.mintA],[b,g]=p?[u.mintAAmount,u.mintBAmount]:[u.mintBAmount,u.mintAAmount],h=o.useSOLBalance&&y.address===Vr.toBase58(),P=o.useSOLBalance&&f.address===Vr.toBase58(),[k,B]=[new te(y.address),new te(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 te(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:d,amount:g}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:i,checkCreateATAOwner:s});if(T.addInstruction(I||{}),S===void 0||R===void 0)throw Error("you don't has some token account");let L=Wu({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[Uu(e,this.scope.ownerPubKey,L.configId,L.authority,L.poolId,k,B,L.lpMint,S,R,ge(this.scope.ownerPubKey,L.lpMint).publicKey,L.vaultA,L.vaultB,t,new te((D=y.programId)!=null?D:gn),new te((J=f.programId)!=null?J:gn),L.observationId,b,g,n)],instructionTypes:[V.CpmmCreatePool]}),T.addCustomComputeBudget(c),T.versionBuild({txVersion:a,extInfo:{address:F(C({},L),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:F(C({},t),{lpAmount:new v(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Je(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new v(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,P=t.mintA.address===Vr.toString(),k=t.mintB.address===Vr.toString(),B=this.createTxBuilder(),[T,S]=[new te(t.mintA.address),new te(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new te(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P||(i?o:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{});let{account:I,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new te(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let W=await m.getCreatedTokenAccount({mint:new te(t.lpMint.address)}),Ze=await m.handleTokenAccount({side:"out",amount:0,mint:new te(t.lpMint.address),tokenAccount:W,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:D}=Ze,J=Ke(Ze,["tokenAccount"]);B.addInstruction(J);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Je(new Ee(1)).sub(s);return B.addInstruction({instructions:[Gu(new te(t.programId),this.scope.ownerPubKey,new te(G.authority),new te(t.id),D,x,I,new te(G.vault.A),new te(G.vault.B),T,S,new te(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,i?b.amount:h,i?h:b.amount)],instructionTypes:[V.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var D,J;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Je(new Ee(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(o.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(o.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[he(l,t.mintA.extensions.feeConfig,d,!1),he(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new te(t.mintA.address),new te(t.mintB.address)],P=g.equals(H),k=h.equals(H),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new te(t.mintA.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:R,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new te(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 te(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let W=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Xu(new te(t.programId),this.scope.ownerPubKey,new te(W.authority),new te(t.id),L,B,T,new te(W.vault.A),new te(W.vault.B),g,h,new te(t.lpMint.address),o,l.sub((D=p.fee)!=null?D:new Ee(0)),m.sub((J=y.fee)!=null?J:new Ee(0)))],instructionTypes:[V.CpmmWithdrawLiquidity],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var S,x,R,I;let{poolInfo:t,poolKeys:n,baseIn:o,swapResult:i,slippage:s=0,config:a,computeBudgetConfig:c,txVersion:u}=e,{bypassAssociatedCheck:l,checkCreateATAOwner:m,associatedOnly:d}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},a),p=this.createTxBuilder(),[y,f]=[new te(t.mintA.address),new te(t.mintB.address)];i.destinationAmountSwapped=i.destinationAmountSwapped.mul(new Ee((1-s)*1e4)).div(new Ee(1e4));let b=t.mintA.address===H.toBase58(),g=t.mintB.address===H.toBase58(),{account:h,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new te((S=t.mintA.programId)!=null?S:gn),owner:this.scope.ownerPubKey,createInfo:b||!o?{payer:this.scope.ownerPubKey,amount:o?i.sourceAmountSwapped:0}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:d,checkCreateATAOwner:m});P&&p.addInstruction(P);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new te((x=t.mintB.programId)!=null?x:gn),owner:this.scope.ownerPubKey,createInfo:g||o?{payer:this.scope.ownerPubKey,amount:o?0:i.sourceAmountSwapped}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:d,checkCreateATAOwner:m});B&&p.addInstruction(B),(!h||!k)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:h,mintBTokenAcc:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:d});let T=n!=null?n:await this.getCpmmPoolKeys(t.id);return p.addInstruction({instructions:[_r(new te(t.programId),this.scope.ownerPubKey,new te(T.authority),new te(T.config.id),new te(t.id),o?h:k,o?k:h,new te(T.vault[o?"A":"B"]),new te(T.vault[o?"B":"A"]),new te((R=t[o?"mintA":"mintB"].programId)!=null?R:gn),new te((I=t[o?"mintB":"mintA"].programId)!=null?I:gn),o?y:f,o?f:y,cs(new te(t.programId),new te(t.id)).publicKey,i.sourceAmountSwapped,i.destinationAmountSwapped)],instructionTypes:[o?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut]}),p.addCustomComputeBudget(c),p.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let i=n.toString()===e.mintB.address,s=Mr.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new v(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ee((1-o)*1e4)).div(new Ee(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:s,baseIn:a}){var h,P,k,B,T,S,x,R;let c=1-Number(i.toSignificant())/100,u=new Ee(new v(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=he(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Ee(0)),d=new Ee(new v(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,v.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(P=l.fee)==null?void 0:P.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:pt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=Wd(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=he(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Je(new Ee(1)).add(i),g=he(b.mul(f.amount.sub((B=f.fee)!=null?B:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function Wd(r,e,t,n){let o=r.mul(e).div(n);!o.isZero()&&!r.mul(e).mod(n).isZero()&&(o=o.add(new Ee(1)));let i=r.mul(t).div(n);return!i.isZero()&&!r.mul(t).mod(n).isZero()&&(i=i.add(new Ee(1))),{amountA:o,amountB:i}}import{PublicKey as wn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Se,TOKEN_2022_PROGRAM_ID as Dr,createTransferInstruction as Ju}from"@solana/spl-token";import Wr from"bn.js";import{TOKEN_PROGRAM_ID as ms,TOKEN_2022_PROGRAM_ID as qd,ASSOCIATED_TOKEN_PROGRAM_ID as Ud}from"@solana/spl-token";import{PublicKey as z,TransactionInstruction as ds,SystemProgram as ps}from"@solana/web3.js";import An from"bn.js";function AB(r,e,t,n,o,i,s,a,c,u,l,m){let d=_([E("instruction"),w("amountIn"),w("amountOut")]),p=[{pubkey:ps.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new z(t.programId),isSigner:!1,isWritable:!1},{pubkey:new z(t.id),isSigner:!1,isWritable:!0},{pubkey:new z(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=ke(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new z("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new ds({keys:p,programId:r,data:y})}function wB(r,e,t,n,o,i,s,a,c,u){let l=_([E("instruction")]),m=[{pubkey:ps.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new z(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new z(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new z(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=ke(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new z("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new ds({keys:m,programId:r,data:d})}function Gd(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[A({pubkey:ms,isWritable:!1}),A({pubkey:qd,isWritable:!1}),A({pubkey:Ud,isWritable:!1}),A({pubkey:ps.programId,isWritable:!1}),A({pubkey:e,isSigner:!0})];b.push(A({pubkey:t})),b.push(A({pubkey:o}));let g=[c,u],h=[l,m],P=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=P[S]===x.mintA.address;if(b.push(A({pubkey:new z(x.programId),isWritable:!1})),S===g.length-1?b.push(A({pubkey:o})):b.push(A({pubkey:n})),b.push(A({pubkey:new z(P[S])})),b.push(A({pubkey:new z(P[S+1])})),x.version===6){let I=h[S];b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(R?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(R?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)})),b.push(A({pubkey:Qo})),b.push(A({pubkey:lt(new z(x.programId),new z(x.id)).publicKey})),f.push(Xd(x.sqrtPriceX64.toString(),R));for(let L of(T=y[S])!=null?T:[])b.push(A({pubkey:new z(L)}))}else if(x.version===5){let I=h[S];b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(I.marketProgramId)})),b.push(A({pubkey:new z(I.marketAuthority)})),b.push(A({pubkey:da,isWritable:!1})),b.push(A({pubkey:new z(I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.marketId)})),b.push(A({pubkey:new z(I.marketBids)})),b.push(A({pubkey:new z(I.marketAsks)})),b.push(A({pubkey:new z(I.marketEventQueue)})),b.push(A({pubkey:new z(I.marketBaseVault)})),b.push(A({pubkey:new z(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],L=x.status!==1;b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(L?I.id:I.marketProgramId)})),b.push(A({pubkey:new z(L?I.id:I.marketAuthority)})),b.push(A({pubkey:new z(L?I.id:I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(L?I.id:I.marketId)})),b.push(A({pubkey:new z(L?I.id:I.marketBids)})),b.push(A({pubkey:new z(L?I.id:I.marketAsks)})),b.push(A({pubkey:new z(L?I.id:I.marketEventQueue)})),b.push(A({pubkey:new z(L?I.id:I.marketBaseVault)})),b.push(A({pubkey:new z(L?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(A({pubkey:new z(I.authority)})),b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(R?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(R?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)}))}else throw Error("pool type error")}let k=_([E("insId"),w("amountIn"),w("amountOut"),X(Q(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new ds({keys:b,programId:r,data:B})}function Xd(r,e){if(r)if(e){let t=new An(r).div(new An(25));return t.gt(Br)?t:Br}else{let t=new An(r).mul(new An(25));return t.lt(xr)?t:xr}else return e?Br:xr}function Qu({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=ke(m),p=t.equals(d.mintA.address)?Nt.add(mt):Mt.sub(mt);return xe.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new An(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[_r(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 z(m[d?"mintA":"mintB"].address),new z(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:[hr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new An(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?V.AmmV5SwapBaseIn:V.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Gd(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new An(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var Yu={[di.toBase58()]:3},ju={3:di};var fs=_([fe(5),fe(8),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]),Hu={3:fs};import{PublicKey as Zu}from"@solana/web3.js";var Fr=ue("Serum"),Er=class{static getProgramId(e){let t=ju[e];return t||Fr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Yu[t];return n||Fr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Hu[e];return t||Fr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let s=n.concat(Buffer.from([o]),Buffer.alloc(7));i=Zu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:i,nonce:o}}return Fr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Zu.default,nonce:o}}};var Gt=new Wr(0),Lo=class extends Be{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(H));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Z(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),no({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:o})}async wrapWSol(e,t,n){let o=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),o.length&&i.addInstruction({instructions:[no({destination:o[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Ot({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(H),m=u.amount.token.mint.equals(H),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Dr:Se,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?Dr:Se);else{let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Dr:Se,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:[Ot({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Se})],endInstructionTypes:[V.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?Dr:Se)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),P=Qu({routeProgram:i,inputMint:d,swapInfo:F(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[Ju(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]}),k.addInstruction(P);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[Ju(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]})}return a.addInstruction(P),s===0?a.sizeCheckBuildV0({computeBudgetConfig:o,address:P.address}):a.sizeCheckBuild({computeBudgetConfig:o,address:P.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ma,clmm:n=pa,cpmm:o=fa}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:go.offsetOf("baseMint"),length:64}}),s=_([K("baseMint"),K("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=_([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:fn.span}],dataSlice:{offset:fn.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:vr.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===wn.default.toString()?H:e,t=t.toString()===wn.default.toString()?H:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Se,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:Se,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:Se,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:Se,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,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:Se,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:Se,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:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,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:Se,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:Se,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:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&i[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&i[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Rr(i),a={};Object.values(s).forEach(f=>{o.delete(f.mintA.address),a[f.mintA.address]={address:new wn(f.mintA.address),programId:Se,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(f.mintB.address),a[f.mintB.address]={address:new wn(f.mintB.address),programId:Se,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Se)?(o.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),f.mintProgramB.equals(Se)?(o.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await Kn({connection:this.scope.connection,mints:Array.from(o).map(f=>new wn(f))});a=C(C({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(C({},f),{[b]:F(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,h,P,k,B,T,S,x,R;let m=l===void 0?new Wr(0):e.raw.mul(new Wr(l.feeBps.toNumber())).div(new Wr(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(C({},t),{address:ut(t.address).toString()}),b=[];for(let I of n)try{b.push(F(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",I.version,I.id.toString(),L.message)}this.logDebug("direct done");for(let[I,L]of Object.entries(o)){let W={chainId:101,address:I,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},D=L.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:W,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var rn,Xt,kn,vt;let Ze=G===void 0?Gt:G.data.amountOut.amount.raw.sub((Xt=(rn=G.data.amountOut.fee)==null?void 0:rn.raw)!=null?Xt:Gt),hn=q===void 0?Gt:q.data.amountOut.amount.raw.sub((vt=(kn=q.data.amountOut.fee)==null?void 0:kn.raw)!=null?vt:Gt);return Ze.lt(hn)?1:-1})[0];if(D===void 0)continue;let J=new be(Pr(W),D.data.amountOut.amount.raw.sub((h=(g=D.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Gt));for(let G of L.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:J});b.push(F(C({},q),{allTrade:!!(D.data.allTrade&&q.allTrade),amountIn:D.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new v(new rt({baseToken:D.data.amountIn.amount.token,denominator:D.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((k=(P=q.amountOut.fee)==null?void 0:P.raw)!=null?k:Gt)}).toFixed()),priceImpact:new v(D.data.priceImpact.add(q.priceImpact).toFixed()),fee:[D.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[D.pool,G],remainingAccounts:[D.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(B=q.amountOut.fee)!=null&&B.raw?new be(D.data.amountOut.amount.token,((S=(T=D.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Gt).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:Gt)):void 0,middleToken:D.data.amountOut.amount.token,poolReady:D.data.poolReady&&q.poolReady,poolType:[D.data.poolType,q.poolType],feeConfig:y,expirationTime:Rt(D.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(I=>(I.allTrade||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(Gt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:P}=Re.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new v(y.toFixed()),executionPrice:new v(f.toFixed()),priceImpact:new v(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[P],expirationTime:Rt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(F(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(F(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(F(C({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(F(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await _e(this.scope.connection,Array.from(s).map(l=>({pubkey:new wn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=fs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Er.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(C({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=C({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:as({programId:new wn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Fn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:et({address:u.mintLp.toBase58(),programId:Se.toBase58(),decimals:u.lpDecimals}),config:F(C({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{TOKEN_PROGRAM_ID as zd}from"@solana/spl-token";import{PublicKey as Qd,Transaction as ys,TransactionInstruction as Yd}from"@solana/web3.js";import $u from"bn.js";var He=class extends Be{static getPdaPoolId(e,t){return ae([He.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ae([He.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new $u(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>He.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<He.VERSION_PROJECT.length;l++)a.push(...s.map(m=>He.getPdaOwnerId(t,m,o,l).publicKey));let c=await ht(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==He.POOL_LAYOUT.span||b.data.length!==He.OWNER_LAYOUT.span)continue;let g=He.POOL_LAYOUT.decode(f.data),h=He.OWNER_LAYOUT.decode(b.data),P=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new $u(0))).filter(x=>!x).length!==3,T=i>P&&i<k&&g.status===1,S=B&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:He.VERSION_PROJECT[m],openTime:P,endTime:k,canClaim:S,canClaimErrorType:B?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Ie.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!c.mintAddress.equals(Ie.WSOL.mint),associatedOnly:c.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[He.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Ie.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!m.mintAddress.equals(Ie.WSOL.mint),associatedOnly:m.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[He.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:o,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return or(c,[o,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ys().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ys().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ys().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=_([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:zd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Yd({keys:i,programId:e,data:a})}},At=He;At.CLAIMED_NUM=3,At.POOL_LAYOUT=_([fe(8),E("bump"),E("status"),w("openTime"),w("endTime"),K("ammId"),X(_([E("mintDecimals"),K("mintAddress"),K("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(w(),10,"padding")]),At.OWNER_LAYOUT=_([fe(8),E("bump"),E("version"),K("poolId"),K("owner"),w("lpAmount"),X(_([K("mintAddress"),w("debtAmount"),w("claimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(w(),4,"padding")]),At.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Qd(e)),At.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},At.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Oo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as rc}from"@solana/spl-token";import No from"bn.js";import{TransactionInstruction as Hd,SYSVAR_RENT_PUBKEY as Zd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ec}from"@solana/spl-token";import{createInitializeAccountInstruction as tc}from"@solana/spl-token";import{SystemProgram as Pn,Transaction as nc}from"@solana/web3.js";function jd(r="accountFlags"){let e=new dr(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var bs=_([fe(5),jd("accountFlags"),K("ownAddress"),w("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),K("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]);function Jd({programId:r,marketInfo:e}){let t=_([E("version"),Xe("instruction"),w("baseLotSize"),w("quoteLotSize"),Lt("feeRateBps"),w("vaultSignerNonce"),w("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:Zd,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new Hd({keys:n,programId:r,data:o})}async function oc({connection:r,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new nc,o=await r.getMinimumBalanceForRentExemption(165);n.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:ec}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:ec}),tc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),tc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new nc;return i.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(bs.span),space:bs.span,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await r.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await r.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Jd({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.InitAccount,V.InitAccount]},{transaction:i,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.InitMarket]}]}var En=class extends Be{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,txVersion:u,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=ze({fromPublicKey:m,programId:i}),p=ze({fromPublicKey:m,programId:i}),y=ze({fromPublicKey:m,programId:i}),f=ze({fromPublicKey:m,programId:i}),b=ze({fromPublicKey:m,programId:i}),g=ze({fromPublicKey:m,programId:rc}),h=ze({fromPublicKey:m,programId:rc}),P=0,k=new No(100);function B(){let W=new No(0);for(;;)try{return{vaultOwner:Oo.createProgramAddressSync([d.publicKey.toBuffer(),W.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:W}}catch{if(W.iaddn(1),W.gt(new No(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=B(),x=new No(Math.round(10**e.decimals*n)),R=new No(Math.round(n*10**t.decimals*o));if(x.eq(pt))throw Error("lot size is too small");if(R.eq(pt))throw Error("tick size or lot size is too small");let I=await oc({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:P,quoteDustThreshold:k,vaultSignerNonce:S,baseLotSize:x,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c}}),L=this.createTxBuilder();L.addInstruction({instructions:I[0].transaction.instructions,signers:I[0].signer});for await(let W of I.slice(1,I.length))L.addInstruction({instructions:W.transaction.instructions,signers:W.signer,instructionTypes:W.instructionTypes});return u===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 Oo(e.mint),quoteMin:new Oo(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 Oo(e.mint),quoteMin:new Oo(t.mint)}})}};import{PublicKey as _o}from"@solana/web3.js";import{TransactionInstruction as As,SYSVAR_CLOCK_PUBKEY as $d}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ws}from"@solana/spl-token";var gs=_([E("instruction"),Pa("amount")]),Mo=_([E("instruction")]);function nS({programId:r,amount:e,instructionKeys:t}){let n=[{pubkey:jo,isSigner:!1,isWritable:!1},{pubkey:ws,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:ti,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],o=Buffer.alloc(gs.span);return gs.encode({instruction:1,amount:Number(e)},o),new As({keys:n,programId:r,data:o})}function qr({programId:r},e){let t=[{pubkey:ws,isSigner:!1,isWritable:!1},{pubkey:ti,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(Mo.span);return Mo.encode({instruction:2},n),new As({keys:t,programId:r,data:n})}function Ps(r){let{poolConfig:e,userKeys:t,side:n}=r,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Mo.span);Mo.encode({instruction:2},s);let a=[{pubkey:ws,isWritable:!1,isSigner:!1},{pubkey:$d,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new As({programId:e.programId,keys:a,data:s})}import ic from"bn.js";var ep={[$n.IDO_PROGRAM_ID_V1.toString()]:1,[$n.IDO_PROGRAM_ID_V2.toString()]:2,[$n.IDO_PROGRAM_ID_V3.toString()]:3,[$n.IDO_PROGRAM_ID_V4.toString()]:4},Dn=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i}){let s=this.createTxBuilder(),a=ep[t.programId];a||this.logAndCreateError("invalid version",a);let c=ke(t),[u,l]=[!new ic(e.coin).isZero(),!new ic(e.pc).isZero()],m=c.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:o});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(H),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[qr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[qr({programId:new _o(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[qr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new _o(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[Ps(F(C({},g),{side:"base"}))]:[],...l?[Ps(F(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as tp}from"@solana/web3.js";import{MintLayout as np,TOKEN_2022_PROGRAM_ID as hs,TOKEN_PROGRAM_ID as ks}from"@solana/spl-token";var vo=class extends Be{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Ct.address,Ct),this._mintGroup.official.add(Ct.address),s.forEach(u=>{this._blackTokenMap.set(u.address,F(C({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?hs.toBase58():ks.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?hs.toBase58():ks.toBase58()})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?hs.toBase58():ks.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return Ct;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new tp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=np.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var Ur=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new kt(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ue("Raydium"),this.farm=new yo({scope:this,moduleName:"Raydium_Farm"}),this.account=new oo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Bo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new vo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Lo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new xo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ro({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new At({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new En({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Dn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=op({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:s,urlConfigs:a}=t,c=new cr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:s}),u=new Ur(F(C({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(lr);return this._owner.publicKey}setOwner(e){return this._owner=e?new kt(e):void 0,this}get connection(){if(!this._connection)throw new Error(ga);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw this.logger.error(lr),new Error(lr)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){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{}}}};var iK=r=>r;export{rd as AMM_CONFIG_SEED,bu as BIT_PRECISION,xo as Clmm,Iu as ClmmConfigLayout,xe as ClmmInstrument,Nr as ConstantProductCurve,zu as CpmmConfigInfoLayout,Lr as CpmmFee,vr as CpmmPoolInfoLayout,Mr as CurveCalculator,Um as DataElement,es as EXTENSION_TICKARRAY_BITMAP_SIZE,Da as FARM_LOCK_MINT,Wa as FARM_LOCK_VAULT,ft as FARM_PROGRAM_TO_VERSION,Ua as FARM_VERSION_TO_LEDGER_LAYOUT,qa as FARM_VERSION_TO_STATE_LAYOUT,Sr as FEE_RATE_DENOMINATOR,us as FEE_RATE_DENOMINATOR_VALUE,dd as FETCH_TICKARRAY_COUNT,md as Fee,Lu as LIQUIDITY_FEES_DENOMINATOR,Ru as LIQUIDITY_FEES_NUMERATOR,wd as LIQUIDITY_VERSION_TO_SERUM_VERSION,BP as LIQUIDITY_VERSION_TO_STATE_LAYOUT,gu as LOG_B_2_X32,Au as LOG_B_P_ERR_MARGIN_LOWER_X64,wu as LOG_B_P_ERR_MARGIN_UPPER_X64,ce as LiquidityMath,bs as MARKET_STATE_LAYOUT_V2,fs as MARKET_STATE_LAYOUT_V3,Hu as MARKET_VERSION_TO_STATE_LAYOUT,Mt as MAX_SQRT_PRICE_X64,xr as MAX_SQRT_PRICE_X64_SUB_ONE,tt as MAX_TICK,Nt as MIN_SQRT_PRICE_X64,Br as MIN_SQRT_PRICE_X64_ADD_ONE,Ye as MIN_TICK,Nn as MODEL_DATA_PUBKEY,Er as Market,ne as MathUtil,$i as MaxU64,yu as MaxUint128,qt as NEGATIVE_ONE,mt as ONE,cd as OPERATION_SEED,os as ObservationInfoLayout,yd as ObservationLayout,Bu as OperationLayout,ad as POOL_REWARD_VAULT_SEED,id as POOL_SEED,ld as POOL_TICK_ARRAY_BITMAP_SEED,sd as POOL_VAULT_SEED,du as POSITION_SEED,fn as PoolInfoLayout,Re as PoolUtils,Kr as PositionInfoLayout,gd as PositionRewardInfoLayout,To as PositionUtils,ck as ProtocolPositionLayout,Ir as Q128,dt as Q64,Ur as Raydium,bd as RewardInfo,Eu as RoundDirection,Yu as SERUM_PROGRAMID_TO_VERSION,ju as SERUM_VERSION_TO_PROGRAMID,Ct as SOL_INFO,$w as SPL_MINT_LAYOUT,ee as SqrtPriceMath,On as StableLayout,pn as SwapMath,dn as TICK_ARRAY_BITMAP_SIZE,ud as TICK_ARRAY_SEED,ve as TICK_ARRAY_SIZE,JP as TICK_SPACINGS,Me as TOKEN_WSOL,Ut as TickArrayBitmap,Tu as TickArrayBitmapExtensionLayout,ko as TickArrayBitmapExtensionUtils,ho as TickArrayLayout,Ad as TickLayout,yn as TickMath,le as TickQuery,Y as TickUtils,Po as U64Resolution,eh as U64_IGNORE_RANGE,Fa as Voter,Im as VoterDepositEntry,Tm as VoterLockup,Va as VoterRegistrar,km as VoterVotingMintConfig,de as ZERO,zi as addLiquidityLayout,xi as associatedLedgerAccountLayout,Ei as calFarmRewardAmount,xd as ceilDiv,Mo as claimLayout,ku as clmmComputeInfoToApiInfo,Ot as closeAccountInstruction,lo as createAssociatedLedgerAccountInstruction,Ja as createPoolFeeLayout,au as createPoolV4InstructionV2,IP as createPoolV4Layout,Dt as createWSolAccountInstructions,$e as dwLayout,Ri as farmAddRewardLayout,FA as farmLedgerLayoutV3_1,io as farmLedgerLayoutV3_2,EA as farmLedgerLayoutV5_1,_a as farmLedgerLayoutV5_2,va as farmLedgerLayoutV6_1,Xa as farmRewardInfoToConfig,Ki as farmRewardLayout,Ci as farmRewardRestartLayout,hm as farmRewardTimeInfoLayout,Na as farmStateV3Layout,Ma as farmStateV5Layout,ro as farmStateV6Layout,lw as fetchMultipleFarmInfoAndUpdate,Wk as fetchMultipleInfo,Ui as fixedSwapInLayout,Gi as fixedSwapOutLayout,Vu as floorDiv,$m as formatLayout,ze as generatePubKey,Ga as getAssociatedAuthority,Cr as getAssociatedConfigId,Qe as getAssociatedLedgerAccount,ao as getAssociatedLedgerPoolAccount,Id as getAssociatedOpenOrders,Nu as getAssociatedPoolKeys,Md as getCpmmPdaAmmConfigId,_d as getCpmmPdaPoolId,Wu as getCreatePoolKeys,Di as getDepositEntryIndex,nu as getDxByDyBaseIn,tu as getDyByDxBaseIn,Ln as getFarmLedgerLayout,Bm as getFarmStateLayout,as as getLiquidityAssociatedAuthority,bn as getLiquidityAssociatedId,Eh as getLiquidityFromAmounts,jP as getPdaAmmConfigId,lt as getPdaExBitmapAccount,vd as getPdaLpMint,Tr as getPdaMetadataKey,cs as getPdaObservationId,wo as getPdaOperationAccount,yt as getPdaPersonalPositionAddress,Fn as getPdaPoolAuthority,pu as getPdaPoolId,fu as getPdaPoolRewardVaulId,Ji as getPdaPoolVaultId,mn as getPdaProtocolPositionAddress,we as getPdaTickArrayAddress,Du as getPdaVault,Ni as getRegistrarAddress,ou as getStablePrice,Fi as getTokenOwnerRecordAddress,vi as getVoterAddress,Vi as getVoterWeightRecordAddress,_i as getVotingMintAuthority,Mi as getVotingTokenMint,Mm as governanceCreateTokenOwnerRecord,GP as i16ToBytes,kr as i32ToBytes,Xi as initPoolLayout,Ii as initTokenAccountInstruction,Jd as initializeMarket,Li as isValidFarmVersion,Ao as isZero,mw as judgeFarmType,Hi as leadingZeros,mu as leastSignificantBit,go as liquidityStateV4Layout,Wm as liquidityStateV5Layout,hr as makeAMMSwapInstruction,su as makeAddLiquidityInstruction,qi as makeAddNewRewardInstruction,qr as makeClaimInstruction,Ps as makeClaimInstructionV4,Uu as makeCreateCpmmPoolInInstruction,za as makeCreateFarmInstruction,oc as makeCreateMarketInstruction,Qa as makeCreatorWithdrawFarmRewardInstruction,Gu as makeDepositCpmmInInstruction,Ya as makeDepositInstructionV3,ja as makeDepositInstructionV5,Ha as makeDepositInstructionV6,Kw as makeDepositTokenInstruction,Rw as makeDepositWithdrawInstruction,qP as makeInitPoolInstructionV4,nS as makePurchaseInstruction,Wi as makeRestartRewardInstruction,uu as makeSimulatePoolInfoInstruction,_r as makeSwapCpmmBaseInInInstruction,hI as makeSwapCpmmBaseOutInInstruction,nd as makeSwapFixedInInstruction,od as makeSwapFixedOutInstruction,Qu as makeSwapInstruction,no as makeTransferInstruction,Xu as makeWithdrawCpmmInInstruction,fo as makeWithdrawInstructionV3,po as makeWithdrawInstructionV5,mo as makeWithdrawInstructionV6,Cw as makeWithdrawTokenInstruction,$P as mockCreatePoolInfo,Pu as mockV3CreatePoolInfo,Gm as modelDataInfoLayout,lu as mostSignificantBit,Oa as parseTokenAccountResp,cP as parseTokenInfo,tn as poolTypeV6,gs as purchaseLayout,Am as realFarmStateV3Layout,wm as realFarmStateV5Layout,Pm as realFarmV6Layout,ji as removeLiquidityInstruction,Qi as removeLiquidityLayout,AB as route1Instruction,wB as route2Instruction,Gd as routeInstruction,WP as simulatePoolInfoInstruction,mP as solToWSolToken,Zt as splAccountLayout,Rr as toAmmComputePoolInfo,et as toApiV3Token,nn as toFeeConfig,Pr as toToken,bo as toTokenAmount,lP as toTokenInfo,Zi as trailingZeros,cu as u16ToBytes,XP as u32ToBytes,iK as unionArr,xm as updateFarmPoolInfo,Oi as validateFarmRewards,vm as voterStakeRegistryCreateDepositEntry,_m as voterStakeRegistryCreateVoter,Lm as voterStakeRegistryDeposit,Om as voterStakeRegistryUpdateVoterWeightRecord,Nm as voterStakeRegistryWithdraw,dP as wSolToSolToken,Si as withdrawRewardLayout};
1
+ var ac=Object.defineProperty,uc=Object.defineProperties;var cc=Object.getOwnPropertyDescriptors;var Fo=Object.getOwnPropertySymbols;var xs=Object.prototype.hasOwnProperty,Ss=Object.prototype.propertyIsEnumerable;var Bs=(r,e,t)=>e in r?ac(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,C=(r,e)=>{for(var t in e||(e={}))xs.call(e,t)&&Bs(r,t,e[t]);if(Fo)for(var t of Fo(e))Ss.call(e,t)&&Bs(r,t,e[t]);return r},F=(r,e)=>uc(r,cc(e));var Ke=(r,e)=>{var t={};for(var n in r)xs.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Fo)for(var n of Fo(r))e.indexOf(n)<0&&Ss.call(r,n)&&(t[n]=r[n]);return t};import{merge as op}from"lodash";import ba from"axios";import{get as Ks,set as lc}from"lodash";var Xr=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}},Cs={},mc={};function ue(r){let e=Ks(Cs,r);if(!e){let t=Ks(mc,r);e=new Xr({name:r,logLevel:t}),lc(Cs,r,e)}return e}import{PublicKey as Pl}from"@solana/web3.js";import hl from"bn.js";import gl from"big.js";import er from"bn.js";import it from"bn.js";var In=9e15,Ht=1e9,zr="0123456789abcdef",Do="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Wo="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Qr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-In,maxE:In,crypto:!1},Ns,Vt,oe=!0,Uo="[DecimalError] ",jt=Uo+"Invalid argument: ",Ms=Uo+"Precision limit exceeded",_s=Uo+"crypto unavailable",vs="[object Decimal]",Ge=Math.floor,Oe=Math.pow,dc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,pc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,fc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Vs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Pt=1e7,$=7,yc=9007199254740991,bc=Do.length-1,Yr=Wo.length-1,M={toStringTag:vs};M.absoluteValue=M.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),j(r)};M.ceil=function(){return j(new this.constructor(this),this.e+1,2)};M.clampedTo=M.clamp=function(r,e){var t,n=this,o=n.constructor;if(r=new o(r),e=new o(e),!r.s||!e.s)return new o(NaN);if(r.gt(e))throw Error(jt+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new o(n)};M.comparedTo=M.cmp=function(r){var e,t,n,o,i=this,s=i.d,a=(r=new i.constructor(r)).d,c=i.s,u=r.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(i.e!==r.e)return i.e>r.e^c<0?1:-1;for(n=s.length,o=a.length,e=0,t=n<o?n:o;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^c<0?1:-1;return n===o?0:n>o^c<0?1:-1};M.cosine=M.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+$,n.rounding=1,t=gc(n,qs(n,t)),n.precision=r,n.rounding=e,j(Vt==2||Vt==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};M.cubeRoot=M.cbrt=function(){var r,e,t,n,o,i,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,i=l.s*Oe(l.s*l,1/3),!i||Math.abs(i)==1/0?(t=De(l.d),r=l.e,(i=(r-t.length+1)%3)&&(t+=i==1||i==-2?"0":"00"),i=Oe(t,1/3),r=Ge((r+1)/3)-(r%3==(r<0?-1:2)),i==1/0?t="5e"+r:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(i.toString()),s=(r=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=Pe(u.plus(l).times(a),u.plus(c),s+2,1),De(a.d).slice(0,s)===(t=De(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!o&&t=="4999"){if(!o&&(j(a,r+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,o=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(j(n,r+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,j(n,r,m.rounding,e)};M.decimalPlaces=M.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-Ge(this.e/$))*$,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};M.dividedBy=M.div=function(r){return Pe(this,new this.constructor(r))};M.dividedToIntegerBy=M.divToInt=function(r){var e=this,t=e.constructor;return j(Pe(e,new t(r),0,1,1),t.precision,t.rounding)};M.equals=M.eq=function(r){return this.cmp(r)===0};M.floor=function(){return j(new this.constructor(this),this.e+1,3)};M.greaterThan=M.gt=function(r){return this.cmp(r)>0};M.greaterThanOrEqualTo=M.gte=function(r){var e=this.cmp(r);return e==1||e===0};M.hyperbolicCosine=M.cosh=function(){var r,e,t,n,o,i=this,s=i.constructor,a=new s(1);if(!i.isFinite())return new s(i.s?1/0:NaN);if(i.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(i.e,i.sd())+4,s.rounding=1,o=i.d.length,o<32?(r=Math.ceil(o/3),e=(1/Xo(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),i=Bn(s,1,i.times(e),new s(1),!0);for(var c,u=r,l=new s(8);u--;)c=i.times(i),i=a.minus(c.times(l.minus(c.times(l))));return j(i,s.precision=t,s.rounding=n,!0)};M.hyperbolicSine=M.sinh=function(){var r,e,t,n,o=this,i=o.constructor;if(!o.isFinite()||o.isZero())return new i(o);if(e=i.precision,t=i.rounding,i.precision=e+Math.max(o.e,o.sd())+4,i.rounding=1,n=o.d.length,n<3)o=Bn(i,2,o,o,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,o=o.times(1/Xo(5,r)),o=Bn(i,2,o,o,!0);for(var s,a=new i(5),c=new i(16),u=new i(20);r--;)s=o.times(o),o=o.times(a.plus(s.times(c.times(s).plus(u))))}return i.precision=e,i.rounding=t,j(o,e,t,!0)};M.hyperbolicTangent=M.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,Pe(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};M.inverseCosine=M.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),o=t.precision,i=t.rounding;return n!==-1?n===0?e.isNeg()?wt(t,o,i):new t(0):new t(NaN):e.isZero()?wt(t,o+4,i).times(.5):(t.precision=o+6,t.rounding=1,e=e.asin(),r=wt(t,o+4,i).times(.5),t.precision=o,t.rounding=i,r.minus(e))};M.inverseHyperbolicCosine=M.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};M.inverseHyperbolicSine=M.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=r,n.rounding=e,t.ln())};M.inverseHyperbolicTangent=M.atanh=function(){var r,e,t,n,o=this,i=o.constructor;return o.isFinite()?o.e>=0?new i(o.abs().eq(1)?o.s/0:o.isZero()?o:NaN):(r=i.precision,e=i.rounding,n=o.sd(),Math.max(n,r)<2*-o.e-1?j(new i(o),r,e,!0):(i.precision=t=n-o.e,o=Pe(o.plus(1),new i(1).minus(o),t+r,1),i.precision=r+4,i.rounding=1,o=o.ln(),i.precision=r,i.rounding=e,o.times(.5))):new i(NaN)};M.inverseSine=M.asin=function(){var r,e,t,n,o=this,i=o.constructor;return o.isZero()?new i(o):(e=o.abs().cmp(1),t=i.precision,n=i.rounding,e!==-1?e===0?(r=wt(i,t+4,n).times(.5),r.s=o.s,r):new i(NaN):(i.precision=t+6,i.rounding=1,o=o.div(new i(1).minus(o.times(o)).sqrt().plus(1)).atan(),i.precision=t,i.rounding=n,o.times(2)))};M.inverseTangent=M.atan=function(){var r,e,t,n,o,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=Yr)return s=wt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=Yr)return s=wt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/$+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/$),n=1,c=u.times(u),s=new l(u),o=u;r!==-1;)if(o=o.times(c),i=s.minus(o.div(n+=2)),o=o.times(c),s=i.plus(o.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===i.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),oe=!0,j(s,l.precision=m,l.rounding=d,!0)};M.isFinite=function(){return!!this.d};M.isInteger=M.isInt=function(){return!!this.d&&Ge(this.e/$)>this.d.length-2};M.isNaN=function(){return!this.s};M.isNegative=M.isNeg=function(){return this.s<0};M.isPositive=M.isPos=function(){return this.s>0};M.isZero=function(){return!!this.d&&this.d[0]===0};M.lessThan=M.lt=function(r){return this.cmp(r)<0};M.lessThanOrEqualTo=M.lte=function(r){return this.cmp(r)<1};M.logarithm=M.log=function(r){var e,t,n,o,i,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)i=!0;else{for(o=t[0];o%10===0;)o/=10;i=o!==1}if(oe=!1,a=m+p,s=Yt(u,a),n=e?qo(l,a+10):Yt(r,a),c=Pe(s,n,a,1),Wn(c.d,o=m,d))do if(a+=10,s=Yt(u,a),n=e?qo(l,a+10):Yt(r,a),c=Pe(s,n,a,1),!i){+De(c.d).slice(o+1,o+15)+1==1e14&&(c=j(c,m+1,0));break}while(Wn(c.d,o+=10,d));return oe=!0,j(c,m,d)};M.minus=M.sub=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.constructor;if(r=new y(r),!p.d||!r.d)return!p.s||!r.s?r=new y(NaN):p.d?r.s=-r.s:r=new y(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(u=p.d,d=r.d,a=y.precision,c=y.rounding,!u[0]||!d[0]){if(d[0])r.s=-r.s;else if(u[0])r=new y(p);else return new y(c===3?-0:0);return oe?j(r,a,c):r}if(t=Ge(r.e/$),l=Ge(p.e/$),u=u.slice(),i=l-t,i){for(m=i<0,m?(e=u,i=-i,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/$),s)+2,i>n&&(i=n,e.length=1),e.reverse(),n=i;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}i=0}for(m&&(e=u,u=d,d=e,r.s=-r.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>i;){if(u[--n]<d[n]){for(o=n;o&&u[--o]===0;)u[o]=Pt-1;--u[o],u[n]+=Pt}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(r.d=u,r.e=Go(u,t),oe?j(r,a,c):r):new y(c===3?-0:0)};M.modulo=M.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?j(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=Pe(t,r.abs(),0,3,1),e.s*=r.s):e=Pe(t,r,0,n.modulo,1),e=e.times(r),oe=!0,t.minus(e))};M.naturalExponential=M.exp=function(){return jr(this)};M.naturalLogarithm=M.ln=function(){return Yt(this)};M.negated=M.neg=function(){var r=new this.constructor(this);return r.s=-r.s,j(r)};M.plus=M.add=function(r){var e,t,n,o,i,s,a,c,u,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(u=m.d,l=r.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(r=new d(m)),oe?j(r,a,c):r;if(i=Ge(m.e/$),n=Ge(r.e/$),u=u.slice(),o=i-n,o){for(o<0?(t=u,o=-o,s=l.length):(t=l,n=i,s=u.length),i=Math.ceil(a/$),s=i>s?i+1:s+1,o>s&&(o=s,t.length=1),t.reverse();o--;)t.push(0);t.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,t=l,l=u,u=t),e=0;o;)e=(u[--o]=u[o]+l[o]+e)/Pt|0,u[o]%=Pt;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=Go(u,n),oe?j(r,a,c):r};M.precision=M.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(jt+r);return t.d?(e=Fs(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};M.round=function(){var r=this,e=r.constructor;return j(new e(r),r.e+1,e.rounding)};M.sine=M.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+$,n.rounding=1,t=wc(n,qs(n,t)),n.precision=r,n.rounding=e,j(Vt>2?t.neg():t,r,e,!0)):new n(NaN)};M.squareRoot=M.sqrt=function(){var r,e,t,n,o,i,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(oe=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=De(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=Ge((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(i=n,n=i.plus(Pe(s,i,t+2,1)).times(.5),De(i.d).slice(0,t)===(e=De(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!o&&e=="4999"){if(!o&&(j(i,c+1,0),i.times(i).eq(s))){n=i;break}t+=4,o=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(j(n,c+1,1),r=!n.times(n).eq(s));break}return oe=!0,j(n,c,l.rounding,r)};M.tangent=M.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=Pe(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,j(Vt==2||Vt==4?t.neg():t,r,e,!0)):new n(NaN)};M.times=M.mul=function(r){var e,t,n,o,i,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=Ge(l.e/$)+Ge(r.e/$),c=d.length,u=p.length,c<u&&(i=d,d=p,p=i,s=c,c=u,u=s),i=[],s=c+u,n=s;n--;)i.push(0);for(n=u;--n>=0;){for(e=0,o=c+n;o>n;)a=i[o]+p[n]*d[o-n-1]+e,i[o--]=a%Pt|0,e=a/Pt|0;i[o]=(i[o]+e)%Pt|0}for(;!i[--s];)i.pop();return e?++t:i.shift(),r.d=i,r.e=Go(i,t),oe?j(r,m.precision,m.rounding):r};M.toBinary=function(r,e){return Zr(this,2,r,e)};M.toDecimalPlaces=M.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(nt(r,0,Ht),e===void 0?e=n.rounding:nt(e,0,8),j(t,r+t.e+1,e))};M.toExponential=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Kt(n,!0):(nt(r,0,Ht),e===void 0?e=o.rounding:nt(e,0,8),n=j(new o(n),r+1,e),t=Kt(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toFixed=function(r,e){var t,n,o=this,i=o.constructor;return r===void 0?t=Kt(o):(nt(r,0,Ht),e===void 0?e=i.rounding:nt(e,0,8),n=j(new i(o),r+o.e+1,e),t=Kt(n,!1,r+n.e+1)),o.isNeg()&&!o.isZero()?"-"+t:t};M.toFraction=function(r){var e,t,n,o,i,s,a,c,u,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(u=t=new f(1),n=c=new f(0),e=new f(n),i=e.e=Fs(y)-p.e-1,s=i%$,e.d[0]=Oe(10,s<0?$+s:s),r==null)r=i>0?e:u;else{if(a=new f(r),!a.isInt()||a.lt(u))throw Error(jt+a);r=a.gt(e)?i>0?e:u:a}for(oe=!1,a=new f(De(y)),l=f.precision,f.precision=i=y.length*$*2;m=Pe(a,e,0,1,1),o=t.plus(m.times(n)),o.cmp(r)!=1;)t=n,n=o,o=u,u=c.plus(m.times(o)),c=o,o=e,e=a.minus(m.times(o)),a=o;return o=Pe(r.minus(t),n,0,1,1),c=c.plus(o.times(u)),t=t.plus(o.times(n)),c.s=u.s=p.s,d=Pe(u,n,i,1).minus(p).abs().cmp(Pe(c,t,i,1).minus(p).abs())<1?[u,n]:[c,t],f.precision=l,oe=!0,d};M.toHexadecimal=M.toHex=function(r,e){return Zr(this,16,r,e)};M.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:nt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(oe=!1,t=Pe(t,r,0,e,1).times(r),oe=!0,j(t)):(r.s=t.s,t=r),t};M.toNumber=function(){return+this};M.toOctal=function(r,e){return Zr(this,8,r,e)};M.toPower=M.pow=function(r){var e,t,n,o,i,s,a=this,c=a.constructor,u=+(r=new c(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new c(Oe(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,i=c.rounding,r.eq(1))return j(a,n,i);if(e=Ge(r.e/$),e>=r.d.length-1&&(t=u<0?-u:u)<=yc)return o=Es(c,a,t,n),r.s<0?new c(1).div(o):j(o,n,i);if(s=a.s,s<0){if(e<r.d.length-1)return new c(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Oe(+a,u),e=t==0||!isFinite(t)?Ge(u*(Math.log("0."+De(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(oe=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),o=jr(r.times(Yt(a,n+t)),n),o.d&&(o=j(o,n+5,1),Wn(o.d,n,i)&&(e=n+10,o=j(jr(r.times(Yt(a,e+t)),e),e+5,1),+De(o.d).slice(n+1,n+15)+1==1e14&&(o=j(o,n+1,0)))),o.s=s,oe=!0,c.rounding=i,j(o,n,i))};M.toPrecision=function(r,e){var t,n=this,o=n.constructor;return r===void 0?t=Kt(n,n.e<=o.toExpNeg||n.e>=o.toExpPos):(nt(r,1,Ht),e===void 0?e=o.rounding:nt(e,0,8),n=j(new o(n),r,e),t=Kt(n,r<=n.e||n.e<=o.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};M.toSignificantDigits=M.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(nt(r,1,Ht),e===void 0?e=n.rounding:nt(e,0,8)),j(new n(t),r,e)};M.toString=function(){var r=this,e=r.constructor,t=Kt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};M.truncated=M.trunc=function(){return j(new this.constructor(this),this.e+1,1)};M.valueOf=M.toJSON=function(){var r=this,e=r.constructor,t=Kt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function De(r){var e,t,n,o=r.length-1,i="",s=r[0];if(o>0){for(i+=s,e=1;e<o;e++)n=r[e]+"",t=$-n.length,t&&(i+=Qt(t)),i+=n;s=r[e],n=s+"",t=$-n.length,t&&(i+=Qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return i+s}function nt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(jt+r)}function Wn(r,e,t,n){var o,i,s,a;for(i=r[0];i>=10;i/=10)--e;return--e<0?(e+=$,o=0):(o=Math.ceil((e+1)/$),e%=$),i=Oe(10,$-e),a=r[o]%i|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==i||t>3&&a+1==i/2)&&(r[o+1]/i/100|0)==Oe(10,e-2)-1||(a==i/2||a==0)&&(r[o+1]/i/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==i||!n&&t>3&&a+1==i/2)&&(r[o+1]/i/1e3|0)==Oe(10,e-3)-1,s}function Eo(r,e,t){for(var n,o=[0],i,s=0,a=r.length;s<a;){for(i=o.length;i--;)o[i]*=e;for(o[0]+=zr.indexOf(r.charAt(s++)),n=0;n<o.length;n++)o[n]>t-1&&(o[n+1]===void 0&&(o[n+1]=0),o[n+1]+=o[n]/t|0,o[n]%=t)}return o.reverse()}function gc(r,e){var t,n,o;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),o=(1/Xo(4,t)).toString()):(t=16,o="2.3283064365386962890625e-10"),r.precision+=t,e=Bn(r,1,e.times(o),new r(1));for(var i=t;i--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var Pe=function(){function r(n,o,i){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*o+a,n[c]=s%i|0,a=s/i|0;return a&&n.unshift(a),n}function e(n,o,i,s){var a,c;if(i!=s)c=i>s?1:-1;else for(a=c=0;a<i;a++)if(n[a]!=o[a]){c=n[a]>o[a]?1:-1;break}return c}function t(n,o,i,s){for(var a=0;i--;)n[i]-=a,a=n[i]<o[i]?1:0,n[i]=a*s+n[i]-o[i];for(;!n[0]&&n.length>1;)n.shift()}return function(n,o,i,s,a,c){var u,l,m,d,p,y,f,b,g,h,w,k,B,T,S,x,L,I,R,W,D=n.constructor,J=n.s==o.s?1:-1,G=n.d,q=o.d;if(!G||!G[0]||!q||!q[0])return new D(!n.s||!o.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?J*0:J/0);for(c?(p=1,l=n.e-o.e):(c=Pt,p=$,l=Ge(n.e/p)-Ge(o.e/p)),R=q.length,L=G.length,g=new D(J),h=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,i==null?(T=i=D.precision,s=D.rounding):a?T=i+(n.e-o.e)+1:T=i,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,R==1){for(d=0,q=q[0],T++;(m<L||d)&&T--;m++)S=d*c+(G[m]||0),h[m]=S/q|0,d=S%q|0;y=d||m<L}else{for(d=c/(q[0]+1)|0,d>1&&(q=r(q,d,c),G=r(G,d,c),R=q.length,L=G.length),x=R,w=G.slice(0,R),k=w.length;k<R;)w[k++]=0;W=q.slice(),W.unshift(0),I=q[0],q[1]>=c/2&&++I;do d=0,u=e(q,w,R,k),u<0?(B=w[0],R!=k&&(B=B*c+(w[1]||0)),d=B/I|0,d>1?(d>=c&&(d=c-1),f=r(q,d,c),b=f.length,k=w.length,u=e(f,w,b,k),u==1&&(d--,t(f,R<b?W:q,b,c))):(d==0&&(u=d=1),f=q.slice()),b=f.length,b<k&&f.unshift(0),t(w,f,k,c),u==-1&&(k=w.length,u=e(q,w,R,k),u<1&&(d++,t(w,R<k?W:q,k,c))),k=w.length):u===0&&(d++,w=[0]),h[m++]=d,u&&w[0]?w[k++]=G[x]||0:(w=[G[x]],k=1);while((x++<L||w[0]!==void 0)&&T--);y=w[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,Ns=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,j(g,a?i+g.e+1:i,s,y)}return g}}();function j(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(o=1,a=m[0];a>=10;a/=10)o++;if(i=e-o,i<0)i+=$,s=e,l=m[d=0],c=l/Oe(10,o-s-1)%10|0;else if(d=Math.ceil((i+1)/$),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,o=1,i%=$,s=i-$+1}else break e;else{for(l=a=m[d],o=1;a>=10;a/=10)o++;i%=$,s=i-$+o,c=s<0?0:l/Oe(10,o-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Oe(10,o-s-1)),u=t<4?(c||n)&&(t==0||t==(r.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(i>0?s>0?l/Oe(10,o-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=r.e+1,m[0]=Oe(10,($-e%$)%$),r.e=-e||0):m[0]=r.e=0,r;if(i==0?(m.length=d,a=1,d--):(m.length=d+1,a=Oe(10,$-i),m[d]=s>0?(l/Oe(10,o-s)%Oe(10,s)|0)*a:0),u)for(;;)if(d==0){for(i=1,s=m[0];s>=10;s/=10)i++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;i!=a&&(r.e++,m[0]==Pt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Pt)break;m[d--]=0,a=1}for(i=m.length;m[--i]===0;)m.pop()}return oe&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function Kt(r,e,t){if(!r.isFinite())return Ws(r);var n,o=r.e,i=De(r.d),s=i.length;return e?(t&&(n=t-s)>0?i=i.charAt(0)+"."+i.slice(1)+Qt(n):s>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(r.e<0?"e":"e+")+r.e):o<0?(i="0."+Qt(-o-1)+i,t&&(n=t-s)>0&&(i+=Qt(n))):o>=s?(i+=Qt(o+1-s),t&&(n=t-o-1)>0&&(i=i+"."+Qt(n))):((n=o+1)<s&&(i=i.slice(0,n)+"."+i.slice(n)),t&&(n=t-s)>0&&(o+1===s&&(i+="."),i+=Qt(n))),i}function Go(r,e){var t=r[0];for(e*=$;t>=10;t/=10)e++;return e}function qo(r,e,t){if(e>bc)throw oe=!0,t&&(r.precision=t),Error(Ms);return j(new r(Do),e,1,!0)}function wt(r,e,t){if(e>Yr)throw Error(Ms);return j(new r(Wo),e,t,!0)}function Fs(r){var e=r.length-1,t=e*$+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function Qt(r){for(var e="";r--;)e+="0";return e}function Es(r,e,t,n){var o,i=new r(1),s=Math.ceil(n/$+4);for(oe=!1;;){if(t%2&&(i=i.times(e),Ls(i.d,s)&&(o=!0)),t=Ge(t/2),t===0){t=i.d.length-1,o&&i.d[t]===0&&++i.d[t];break}e=e.times(e),Ls(e.d,s)}return oe=!0,i}function Rs(r){return r.d[r.d.length-1]&1}function Ds(r,e,t){for(var n,o=new r(e[0]),i=0;++i<e.length;)if(n=new r(e[i]),n.s)o[t](n)&&(o=n);else{o=n;break}return o}function jr(r,e){var t,n,o,i,s,a,c,u=0,l=0,m=0,d=r.constructor,p=d.rounding,y=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(oe=!1,c=y):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Oe(2,m))/Math.LN10*2+5|0,c+=n,t=i=s=new d(1),d.precision=c;;){if(i=j(i.times(r),c,1),t=t.times(++l),a=s.plus(Pe(i,t,c,1)),De(a.d).slice(0,c)===De(s.d).slice(0,c)){for(o=m;o--;)s=j(s.times(s),c,1);if(e==null)if(u<3&&Wn(s.d,c-n,p,u))d.precision=c+=10,t=i=a=new d(1),l=0,u++;else return j(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function Yt(r,e){var t,n,o,i,s,a,c,u,l,m,d,p=1,y=10,f=r,b=f.d,g=f.constructor,h=g.rounding,w=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(oe=!1,l=w):l=e,g.precision=l+=y,t=De(b),n=t.charAt(0),Math.abs(i=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(r),t=De(f.d),n=t.charAt(0),p++;i=f.e,n>1?(f=new g("0."+t),i++):f=new g(n+"."+t.slice(1))}else return u=qo(g,l+2,w).times(i+""),f=Yt(new g(n+"."+t.slice(1)),l-y).plus(u),g.precision=w,e==null?j(f,w,h,oe=!0):f;for(m=f,c=s=f=Pe(f.minus(1),f.plus(1),l,1),d=j(f.times(f),l,1),o=3;;){if(s=j(s.times(d),l,1),u=c.plus(Pe(s,new g(o),l,1)),De(u.d).slice(0,l)===De(c.d).slice(0,l))if(c=c.times(2),i!==0&&(c=c.plus(qo(g,l+2,w).times(i+""))),c=Pe(c,new g(p),l,1),e==null)if(Wn(c.d,l-y,h,a))g.precision=l+=y,u=s=f=Pe(m.minus(1),m.plus(1),l,1),d=j(f.times(f),l,1),o=a=1;else return j(c,g.precision=w,h,oe=!0);else return g.precision=w,c;c=u,o+=2}}function Ws(r){return String(r.s*r.s/0)}function Hr(r,e){var t,n,o;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(o=e.length;e.charCodeAt(o-1)===48;--o);if(e=e.slice(n,o),e){if(o-=n,r.e=t=t-n-1,r.d=[],n=(t+1)%$,t<0&&(n+=$),n<o){for(n&&r.d.push(+e.slice(0,n)),o-=$;n<o;)r.d.push(+e.slice(n,n+=$));e=e.slice(n),n=$-e.length}else n-=o;for(;n--;)e+="0";r.d.push(+e),oe&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function Ac(r,e){var t,n,o,i,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Vs.test(e))return Hr(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(pc.test(e))t=16,e=e.toLowerCase();else if(dc.test(e))t=2;else if(fc.test(e))t=8;else throw Error(jt+e);for(i=e.search(/p/i),i>0?(c=+e.slice(i+1),e=e.substring(2,i)):e=e.slice(2),i=e.indexOf("."),s=i>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,i=a-i,o=Es(n,new n(t),i,i*2)),u=Eo(e,t,Pt),l=u.length-1,i=l;u[i]===0;--i)u.pop();return i<0?new n(r.s*0):(r.e=Go(u,l),r.d=u,oe=!1,s&&(r=Pe(r,o,a*4)),c&&(r=r.times(Math.abs(c)<54?Oe(2,c):qn.pow(2,c))),oe=!0,r)}function wc(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Bn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Xo(5,t)),e=Bn(r,2,e,e);for(var o,i=new r(5),s=new r(16),a=new r(20);t--;)o=e.times(e),e=e.times(i.plus(o.times(s.times(o).minus(a))));return e}function Bn(r,e,t,n,o){var i,s,a,c,u=1,l=r.precision,m=Math.ceil(l/$);for(oe=!1,c=t.times(t),a=new r(n);;){if(s=Pe(a.times(c),new r(e++*e++),l,1),a=o?n.plus(s):n.minus(s),n=Pe(s.times(c),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(i=m;s.d[i]===a.d[i]&&i--;);if(i==-1)break}i=a,a=n,n=s,s=i,u++}return oe=!0,s.d.length=m+1,s}function Xo(r,e){for(var t=r;--e;)t*=r;return t}function qs(r,e){var t,n=e.s<0,o=wt(r,r.precision,1),i=o.times(.5);if(e=e.abs(),e.lte(i))return Vt=n?4:1,e;if(t=e.divToInt(o),t.isZero())Vt=n?3:2;else{if(e=e.minus(t.times(o)),e.lte(i))return Vt=Rs(t)?n?2:3:n?4:1,e;Vt=Rs(t)?n?1:4:n?3:2}return e.minus(o).abs()}function Zr(r,e,t,n){var o,i,s,a,c,u,l,m,d,p=r.constructor,y=t!==void 0;if(y?(nt(t,1,Ht),n===void 0?n=p.rounding:nt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=Ws(r);else{for(l=Kt(r),s=l.indexOf("."),y?(o=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):o=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Eo(Kt(d),10,o),d.e=d.d.length),m=Eo(l,10,o),i=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?i--:(r=new p(r),r.d=m,r.e=i,r=Pe(r,d,t,n,0,o),m=r.d,i=r.e,u=Ns),s=m[t],a=o/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,u)for(;++m[--t]>o-1;)m[t]=0,t||(++i,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=zr.charAt(m[s]);if(y){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=Eo(l,o,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=zr.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(i<0?"p":"p+")+i}else if(i<0){for(;++i;)l="0"+l;l="0."+l}else if(++i>c)for(i-=c;i--;)l+="0";else i<c&&(l=l.slice(0,i)+"."+l.slice(i))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function Ls(r,e){if(r.length>e)return r.length=e,!0}function Pc(r){return new this(r).abs()}function hc(r){return new this(r).acos()}function kc(r){return new this(r).acosh()}function Tc(r,e){return new this(r).plus(e)}function Ic(r){return new this(r).asin()}function Bc(r){return new this(r).asinh()}function xc(r){return new this(r).atan()}function Sc(r){return new this(r).atanh()}function Kc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,o=this.rounding,i=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=wt(this,i,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?wt(this,n,o):new this(0),t.s=r.s):!r.d||e.isZero()?(t=wt(this,i,1).times(.5),t.s=r.s):e.s<0?(this.precision=i,this.rounding=1,t=this.atan(Pe(r,e,i,1)),e=wt(this,i,1),this.precision=n,this.rounding=o,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(Pe(r,e,i,1)),t}function Cc(r){return new this(r).cbrt()}function Rc(r){return j(r=new this(r),r.e+1,2)}function Lc(r,e,t){return new this(r).clamp(e,t)}function Oc(r){if(!r||typeof r!="object")throw Error(Uo+"Object expected");var e,t,n,o=r.defaults===!0,i=["precision",1,Ht,"rounding",0,8,"toExpNeg",-In,0,"toExpPos",0,In,"maxE",0,In,"minE",-In,0,"modulo",0,9];for(e=0;e<i.length;e+=3)if(t=i[e],o&&(this[t]=Qr[t]),(n=r[t])!==void 0)if(Ge(n)===n&&n>=i[e+1]&&n<=i[e+2])this[t]=n;else throw Error(jt+t+": "+n);if(t="crypto",o&&(this[t]=Qr[t]),(n=r[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(_s);else this[t]=!1;else throw Error(jt+t+": "+n);return this}function Nc(r){return new this(r).cos()}function Mc(r){return new this(r).cosh()}function Us(r){var e,t,n;function o(i){var s,a,c,u=this;if(!(u instanceof o))return new o(i);if(u.constructor=o,Os(i)){u.s=i.s,oe?!i.d||i.e>o.maxE?(u.e=NaN,u.d=null):i.e<o.minE?(u.e=0,u.d=[0]):(u.e=i.e,u.d=i.d.slice()):(u.e=i.e,u.d=i.d?i.d.slice():i.d);return}if(c=typeof i,c==="number"){if(i===0){u.s=1/i<0?-1:1,u.e=0,u.d=[0];return}if(i<0?(i=-i,u.s=-1):u.s=1,i===~~i&&i<1e7){for(s=0,a=i;a>=10;a/=10)s++;oe?s>o.maxE?(u.e=NaN,u.d=null):s<o.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[i]):(u.e=s,u.d=[i]);return}else if(i*0!==0){i||(u.s=NaN),u.e=NaN,u.d=null;return}return Hr(u,i.toString())}else if(c!=="string")throw Error(jt+i);return(a=i.charCodeAt(0))===45?(i=i.slice(1),u.s=-1):(a===43&&(i=i.slice(1)),u.s=1),Vs.test(i)?Hr(u,i):Ac(u,i)}if(o.prototype=M,o.ROUND_UP=0,o.ROUND_DOWN=1,o.ROUND_CEIL=2,o.ROUND_FLOOR=3,o.ROUND_HALF_UP=4,o.ROUND_HALF_DOWN=5,o.ROUND_HALF_EVEN=6,o.ROUND_HALF_CEIL=7,o.ROUND_HALF_FLOOR=8,o.EUCLID=9,o.config=o.set=Oc,o.clone=Us,o.isDecimal=Os,o.abs=Pc,o.acos=hc,o.acosh=kc,o.add=Tc,o.asin=Ic,o.asinh=Bc,o.atan=xc,o.atanh=Sc,o.atan2=Kc,o.cbrt=Cc,o.ceil=Rc,o.clamp=Lc,o.cos=Nc,o.cosh=Mc,o.div=_c,o.exp=vc,o.floor=Vc,o.hypot=Fc,o.ln=Ec,o.log=Dc,o.log10=qc,o.log2=Wc,o.max=Uc,o.min=Gc,o.mod=Xc,o.mul=zc,o.pow=Qc,o.random=Yc,o.round=jc,o.sign=Hc,o.sin=Zc,o.sinh=Jc,o.sqrt=$c,o.sub=el,o.sum=tl,o.tan=nl,o.tanh=ol,o.trunc=rl,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return o.config(r),o}function _c(r,e){return new this(r).div(e)}function vc(r){return new this(r).exp()}function Vc(r){return j(r=new this(r),r.e+1,3)}function Fc(){var r,e,t=new this(0);for(oe=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function Os(r){return r instanceof qn||r&&r.toStringTag===vs||!1}function Ec(r){return new this(r).ln()}function Dc(r,e){return new this(r).log(e)}function Wc(r){return new this(r).log(2)}function qc(r){return new this(r).log(10)}function Uc(){return Ds(this,arguments,"lt")}function Gc(){return Ds(this,arguments,"gt")}function Xc(r,e){return new this(r).mod(e)}function zc(r,e){return new this(r).mul(e)}function Qc(r,e){return new this(r).pow(e)}function Yc(r){var e,t,n,o,i=0,s=new this(1),a=[];if(r===void 0?r=this.precision:nt(r,1,Ht),n=Math.ceil(r/$),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));i<n;)o=e[i],o>=429e7?e[i]=crypto.getRandomValues(new Uint32Array(1))[0]:a[i++]=o%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);i<n;)o=e[i]+(e[i+1]<<8)+(e[i+2]<<16)+((e[i+3]&127)<<24),o>=214e7?crypto.randomBytes(4).copy(e,i):(a.push(o%1e7),i+=4);i=n/4}else throw Error(_s);else for(;i<n;)a[i++]=Math.random()*1e7|0;for(n=a[--i],r%=$,n&&r&&(o=Oe(10,$-r),a[i]=(n/o|0)*o);a[i]===0;i--)a.pop();if(i<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=$)a.shift();for(n=1,o=a[0];o>=10;o/=10)n++;n<$&&(t-=$-n)}return s.e=t,s.d=a,s}function jc(r){return j(r=new this(r),r.e+1,this.rounding)}function Hc(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function Zc(r){return new this(r).sin()}function Jc(r){return new this(r).sinh()}function $c(r){return new this(r).sqrt()}function el(r,e){return new this(r).sub(e)}function tl(){var r=0,e=arguments,t=new this(e[r]);for(oe=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return oe=!0,j(t,this.precision,this.rounding)}function nl(r){return new this(r).tan()}function ol(r){return new this(r).tanh()}function rl(r){return j(r=new this(r),r.e+1,1)}M[Symbol.for("nodejs.util.inspect.custom")]=M.toString;M[Symbol.toStringTag]="Decimal";var qn=M.constructor=Us(Qr);Do=new qn(Do);Wo=new qn(Wo);var v=qn;import{PublicKey as ni}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as il}from"@solana/spl-token";import{PublicKey as Te,SystemProgram as Gs,SYSVAR_RENT_PUBKEY as sl}from"@solana/web3.js";function A({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var Jr=[A({pubkey:il,isWritable:!1}),A({pubkey:Gs.programId,isWritable:!1}),A({pubkey:sl,isWritable:!1})];function $r({publicKey:r,transformSol:e}){let t=ei(r.toString());if(t instanceof Te)return e&&t.equals(Ne)?H:t;if(e&&t.toString()===Ne.toBase58())return H;if(typeof t=="string"){if(t===Te.default.toBase58())return Te.default;try{return new Te(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ei(r){try{return new Te(r)}catch{return r}}var zo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Qo=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new Te("SysvarRent111111111111111111111111111111111"),ti=new Te("SysvarC1ock11111111111111111111111111111111"),xn=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Yo=new Te("Sysvar1nstructions1111111111111111111111111"),jo=Gs.programId,mp=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),dp=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),pp=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),fp=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),yp=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),bp=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),gp=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Ap=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),wp=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Pp=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),hp=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Te("So11111111111111111111111111111111111111112"),Ne=Te.default;function ut(r){return $r({publicKey:r,transformSol:!0})}import{PublicKey as al}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Xs}from"@solana/spl-token";var Ct={chainId:101,address:al.default.toBase58(),programId:Xs.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Me={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Xs.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 oi=class{constructor({mint:e,decimals:t,symbol:n,name:o,skipMint:i=!1,isToken2022:s=!1}){if(e===Ne.toBase58()||e instanceof ni&&Ne.equals(e)){this.decimals=Me.decimals,this.symbol=Me.symbol,this.name=Me.name,this.mint=new ni(Me.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=o||e.toString().substring(0,6),this.mint=i?ni.default:$r({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ie=oi;Ie.WSOL=new oi(F(C({},Me),{mint:Me.address}));import Zo from"big.js";import ll from"bn.js";import ml from"decimal.js-light";import ul from"toformat";var cl=ul,Un=cl;var Ho=ue("module/fraction"),ri=Un(Zo),Gn=Un(ml),dl={[0]:Gn.ROUND_DOWN,[1]:Gn.ROUND_HALF_UP,[2]:Gn.ROUND_UP},pl={[0]:Zo.roundDown,[1]:Zo.roundHalfUp,[2]:Zo.roundUp},pe=class{constructor(e,t=new ll(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new pe(this.denominator,this.numerator)}add(e){let t=e instanceof pe?e:new pe(Z(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.add(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof pe?e:new pe(Z(e));return this.denominator.eq(t.denominator)?new pe(this.numerator.sub(t.numerator),this.denominator):new pe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof pe?e:new pe(Z(e));return new pe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof pe?e:new pe(Z(e));return new pe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Ho.logWithError(`${e} is not an integer.`),e<=0&&Ho.logWithError(`${e} is not positive.`),Gn.set({precision:e+1,rounding:dl[n]});let o=new Gn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return o.toFormat(o.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Ho.logWithError(`${e} is not an integer.`),e<0&&Ho.logWithError(`${e} is negative.`),ri.DP=e,ri.RM=pl[n]||1,new ri(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var yl=ue("Raydium_price"),rt=class extends pe{constructor(t){let{baseToken:n,quoteToken:o,numerator:i,denominator:s}=t;super(i,s);this.baseToken=n,this.quoteToken=o,this.scalar=new pe(ii(n.decimals),ii(o.decimals))}get raw(){return new pe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new rt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&yl.logWithError("mul token not equals");let n=super.mul(t);return new rt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,o){return this.adjusted.toSignificant(t,n,o)}toFixed(t=this.quoteToken.decimals,n,o){return this.adjusted.toFixed(t,n,o)}};var si=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Jo=si;Jo.SOL=new si(Ct);import bl from"bn.js";var zs=new pe(new bl(100)),Je=class extends pe{toSignificant(e=5,t,n){return this.mul(zs).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(zs).toFixed(e,t,n)}};var pt=new it(0),Ys=new it(1),Af=new it(2),wf=new it(3),Pf=new it(5),ai=new it(10),hf=new it(100),kf=new it(1e3),Tf=new it(1e4),Qs=9007199254740991;function Z(r){let e=ue("Raydium_parseBigNumberish");if(r instanceof it)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new it(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Qs||r<=-Qs)&&e.logWithError(`BigNumberish number overflow: ${r}`),new it(String(r))):typeof r=="bigint"?new it(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new it(0))}function ii(r){return ai.pow(Z(r))}function $o(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var Al=ue("Raydium_amount"),Hs=Un(gl);function wl(r,e){let t="0",n="0";if(r.includes(".")){let o=r.split(".");o.length===2?([t,n]=o,n=n.padEnd(e,"0")):Al.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var be=class extends pe{constructor(t,n,o=!0,i){let s=new er(0),a=ai.pow(new er(t.decimals));if(o)s=Z(n);else{let c=new er(0),u=new er(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=wl(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ue(i||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,o=0){return super.toSignificant(t,n,o)}toFixed(t=this.token.decimals,n,o=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,o)}toExact(t={groupSeparator:""}){return Hs.DP=this.token.decimals,new Hs(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function js(r){return typeof r=="object"&&r!==null&&![Ie,be,Pl,pe,hl,rt,Je].some(e=>typeof e=="object"&&r instanceof e)}function ke(r){return typeof r=="string"?ei(r):Array.isArray(r)?r.map(e=>ke(e)):js(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,ke(t)])):r}import{PublicKey as Qn,sendAndConfirmTransaction as mi,Transaction as Yn,TransactionMessage as jn,VersionedTransaction as Hn}from"@solana/web3.js";import Rl 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 Js,ComputeBudgetProgram as Zs,Transaction as tr,TransactionMessage as kl,Keypair as $s,VersionedTransaction as ea}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Tl}from"@solana/spl-token";var Ft=ue("Raydium_txUtil"),ta=1644;function nr(r){let e=[],t=[];return r.microLamports&&(e.push(Zs.setComputeUnitPrice({microLamports:r.microLamports})),t.push(V.SetComputeUnitPrice)),r.units&&(e.push(Zs.setComputeUnitLimit({units:r.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Sn(r,e){var n,o;let t=e!=null?e:"confirmed";try{return((o=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:o.blockhash)||(await r.getRecentBlockhash(t)).blockhash}catch{return(await r.getRecentBlockhash(t)).blockhash}}function or(r,e){r.length<1&&Ft.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&Ft.logWithError(`no signers provided:, ${e.toString()}`);let t=new tr;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<ta}catch{return!1}}async function na(r,e,t,n=!0){let o=new Js("RaydiumSimuLateTransaction11111111111111111"),i=[],s=new tr;s.feePayer=o;for(let u of e)or([...s.instructions,u],[o])||(i.push(s),s=new tr,s.feePayer=o),s.add(u);s.instructions.length>0&&i.push(s);let a=[];try{if(a=await Il(r,i,n),a.find(u=>u.err!==null))throw Error("rpc simulateTransaction error")}catch(u){u instanceof Error&&Ft.logWithError("failed to simulate for instructions","RPC_ERROR",{message:u.message})}let c=[];for(let u of a)if(Ft.debug("simulate result:",u),u.logs){let l=u.logs.filter(m=>m&&m.includes(t));Ft.debug("filteredLog:",c),l.length||Ft.logWithError("simulate log not match keyword","keyword",t),c.push(...l)}return c}function oa(r,e){let t=r.match(/{["\w:,]+}/g);return!t||t.length!==1?Ft.logWithError(`simulate log fail to match json, keyword: ${e}`):t[0]}function Et(r,e){let n=new RegExp(`"${e}":(\\d+)`,"g").exec(r);return!n||n.length!==2?Ft.logWithError(`simulate log fail to match key", key: ${e}`):n[1]}function ae(r,e){let[t,n]=Js.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}async function Il(r,e,t){let n=[];if(t){let o=await r.getLatestBlockhash(),i=[];for(let u of e){u.recentBlockhash=o.blockhash,u.lastValidBlockHeight=o.lastValidBlockHeight;let m=u._compile().serialize(),p=u._serialize(m).toString("base64");i.push(p)}let s=i.map(u=>{let l=r._buildArgs([u],void 0,"base64");return{methodName:"simulateTransaction",args:l}}),a=[],c=20;for(let u=0;u<Math.ceil(s.length/c);u++)a.push(s.slice(u*c,(u+1)*c));n=await(await Promise.all(a.map(async u=>(await r._rpcBatchRequest(u)).map(l=>l.result.value)))).flat()}else try{n=await Promise.all(e.map(async o=>await(await r.simulateTransaction(o)).value))}catch(o){o instanceof Error&&Ft.logWithError("failed to get info for multiple accounts","RPC_ERROR",{message:o.message})}return n}function Xn({instructions:r,payer:e,signers:t}){return or(r,[e,...t])}function zn({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=$s.generate().publicKey.toString()}){let i=new kl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new ea(i).serialize()).toString("base64").length<ta}catch{return!1}}var Bl=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r);function sn(r){let e=[];return r.forEach(t=>{t instanceof tr&&(t.recentBlockhash||(t.recentBlockhash=Tl.toBase58()),t.feePayer||(t.feePayer=$s.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof ea&&(n=Bl(n));let o=n.toString("base64");e.push(o)}),console.log("simulate tx string:",e),e}import{PublicKey as ia,AddressLookupTableAccount as rr}from"@solana/web3.js";import{PublicKey as ra}from"@solana/web3.js";import{MINT_SIZE as xl,TOKEN_PROGRAM_ID as Sl,getTransferFeeConfig as Kl,unpackMint as Cl}from"@solana/spl-token";var ui=ue("Raydium_accountInfo_util");async function ht(r,e,t){let{batchRequest:n,commitment:o="confirmed",chunkCount:i=100}=C({batchRequest:!1},t),s=ci(e,i),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],o,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=ci(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&ui.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"&&ui.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new ra(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,o)))}catch(c){c instanceof Error&&ui.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function _e(r,e,t){let n=await ht(r,e.map(o=>o.pubkey),t);return e.map((o,i)=>F(C({},o),{accountInfo:n[i]}))}async function Kn({connection:r,mints:e,config:t}){var i,s,a;if(e.length===0)return{};let n=await _e(r,e.map(c=>({pubkey:ut(c)})),t),o={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<xl){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=Cl(c.pubkey,c.accountInfo,(i=c.accountInfo)==null?void 0:i.owner);o[c.pubkey.toString()]=F(C({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||Sl,feeConfig:(a=Kl(u))!=null?a:void 0})}return o[ra.default.toBase58()]=o[H.toBase58()],o}async function li({connection:r,address:e}){let t=await ht(r,[...new Set(e.map(o=>o.toString()))].map(o=>new ia(o))),n={};for(let o=0;o<e.length;o++){let i=t[o],s=e[o];if(!i)continue;let a=new rr({key:s,state:rr.deserialize(i.data)});n[s.toString()]=a,ir[s.toString()]=a}return n}var ir={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new rr({key:new ia("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:rr.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};var sr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Rl.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=nr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:o=[],endInstructionTypes:i=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...o),this.endInstructionTypes.push(...i),this.lookupTableAddress.push(...s.filter(a=>a!==Qn.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 Yn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(o=>o.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async o=>{var u;let{recentBlockHash:i,skipPreflight:s=!0,sendAndConfirm:a}=o||{},c=i!=null?i:await Sn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),sn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await mi(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:o}=this.build(n),i=t.filter(l=>l.transaction.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:c,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Sn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let w=await mi(this.connection,h,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(w)}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((w,k)=>(w.recentBlockhash=f,a[k].length&&w.sign(...a[k]),w));sn(g);let h=await this.signAllTransactions(g);if(m){let w=0,k=[],B=async()=>{if(!h[w])return;let T=await this.connection.sendRawTransaction(h[w].serialize(),{skipPreflight:y});k.push({txId:T,status:"sent",signedTx:h[w]}),d==null||d([...k]),w++,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 w=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:y});w.push(B)}return{txIds:w,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var p;let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:o}=d,i=Ke(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=C(C({},this.cluster==="devnet"?{}:ir),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let y of a)s[y]===void 0&&c.push(new Qn(y));let u=await li({connection:this.connection,address:c});for(let[y,f]of Object.entries(u))s[y]=f;let l=new jn({payerKey:this.feePayer,recentBlockhash:o?Qn.default.toBase58():await Sn(this.connection,this.blockhashCommitment),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s));((p=this.owner)==null?void 0:p.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let m=new Hn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var h;let{recentBlockHash:f,skipPreflight:b=!0,sendAndConfirm:g}=y||{};if(f&&(m.message.recentBlockhash=f),sn([m]),(h=this.owner)!=null&&h.isKeyPair){let w=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:w},"confirmed")}return{txId:w,signedTx:m}}if(this.signAllTransactions){let w=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(w[0],{skipPreflight:b}),signedTx:w[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:o}=await this.buildV0(n),i=t.filter(l=>l.builder.instructions.length>0),s=[o,...i.map(l=>l.transaction)],a=[this.signers,...i.map(l=>l.signers)],c=[...this.instructionTypes,...i.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:c,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),sn(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:w,blockhash:k}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:k,lastValidBlockHeight:w,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=[],w=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||w()},"processed"),this.connection.getSignatureStatus(k)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let w=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let u=e||{},{computeBudgetConfig:t}=u,n=Ke(u,["computeBudgetConfig"]),o=t?nr(t):{instructions:[],instructionTypes:[]},i=this.signers.reduce((m,d)=>F(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],c=[];if(this.allInstructions.forEach(m=>{let d=[...c,m],p=t?[...o.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Qn(b));if(c.length<12&&Xn({instructions:p,payer:this.feePayer,signers:f})||Xn({instructions:d,payer:this.feePayer,signers:f}))c.push(m);else{if(c.length===0)throw Error("item ins too big");Xn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:f})?s.push(new Yn().add(...o.instructions,...c)):s.push(new Yn().add(...c)),a.push(Array.from(new Set(c.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>i[b]).filter(b=>b!==void 0)),c=[m]}}),c.length>0){let d=[...new Set(c.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>i[p]).filter(p=>p!==void 0);Xn({instructions:t?[...o.instructions,...c]:[...c],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new Yn().add(...o.instructions,...c)):s.push(new Yn().add(...c)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||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 Sn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,w)=>{h.recentBlockhash=b,a[w].length&&h.sign(...a[w])}),sn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let w of s){let k=await mi(this.connection,w,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 w=0,k=[],B=async()=>{if(!h[w])return;let T=await this.connection.sendRawTransaction(h[w].serialize(),{skipPreflight:f});k.push({txId:T,status:"sent",signedTx:h[w]}),p==null||p([...k]),w++,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 w=[];for(let k=0;k<h.length;k+=1){let B=await this.connection.sendRawTransaction(h[k].serialize(),{skipPreflight:f});w.push(B)}return{txIds:w,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:o=[]}=b,i=Ke(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:ir),n),a=Array.from(new Set([...this.lookupTableAddress,...o])),c=[];for(let h of a)s[h]===void 0&&c.push(new Qn(h));let u=await li({connection:this.connection,address:c});for(let[h,w]of Object.entries(u))s[h]=w;let l=t?nr(t):{instructions:[],instructionTypes:[]},m=await Sn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,w)=>F(C({},h),{[w.publicKey.toBase58()]:w}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let w=[...f,h],k=t?[...l.instructions,...w]:w;if(f.length<12&&zn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||zn({instructions:w,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let B={};for(let T of[...new Set(a)])s[T]!==void 0&&(B[T]=s[T]);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Hn(T))}else{let T=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Hn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[h]}}),f.length>0){let w=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&zn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Hn(k))}else{let k=new jn({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Hn(k))}y.push(w)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(w=>w.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:w,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)}),sn(p),(S=this.owner)!=null&&S.isKeyPair){if(w){let x=[];for(let L of p){let I=await this.connection.sendTransaction(L,{skipPreflight:T}),{lastValidBlockHeight:R,blockhash:W}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:W,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(w){let L=0,I=[],R=async()=>{if(!x[L])return;let W=await this.connection.sendTransaction(x[L],{skipPreflight:T});I.push({txId:W,status:"sent",signedTx:x[L]}),k==null||k([...I]),L++,this.connection.onSignature(W,D=>{let J=I.findIndex(G=>G.txId===W);J>-1&&(I[J].status=D.err?"error":"success"),k==null||k([...I]),D.err||R()},"processed"),this.connection.getSignatureStatus(W)};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 kt=class{constructor(e){this._owner=e}get publicKey(){return kt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return kt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return kt.isKeyPair(this._owner)}get isPublicKey(){return kt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!kt.isKeyPair(e)}};function ci(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var sa=r=>typeof r=="number";function aa(r,e,t){let n=sa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()<=n}function ua(r,e,t){let n=sa(e)?e*((t==null?void 0:t.unit)==="s"?1e3:1):e;return new Date(r).getTime()>n}import{PublicKey as me}from"@solana/web3.js";var ca=new me("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),la=new me("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Jn=new me("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Ny=new me("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),My=new me("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),di=new me("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ma=new me("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),_y=new me("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),da=new me("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),pa=new me("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),vy=new me("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),Vy=new me("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),Ll=new me("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),Ol=new me("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Nl=new me("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Ml=new me("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),fa=new me("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),Fy=new me("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Ey=new me("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),_l=new me("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),vl=new me("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Vl=new me("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),$n={IDO_PROGRAM_ID_V1:Ll,IDO_PROGRAM_ID_V2:Ol,IDO_PROGRAM_ID_V3:Nl,IDO_PROGRAM_ID_V4:Ml};var Dy={SERUM_MARKET:me.default,OPENBOOK_MARKET:new me("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:me.default,FarmV3:new me("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new me("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new me("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new me("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new me("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new me("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new me("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:_l,CREATE_CPMM_POOL_AUTH:vl,CREATE_CPMM_POOL_FEE_ACC:Vl,FEE_DESTINATION_ID:new me("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as Fl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as El}from"@solana/spl-token";function ge(r,e,t){return ae([r.toBuffer(),(t!=null?t:El).toBuffer(),e.toBuffer()],new Fl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Tt from"bn.js";var eo=1e4;function he(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let o=F(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),i=t.epoch<o.newerTransferFee.epoch?o.olderTransferFee:o.newerTransferFee,s=new Tt(i.maximumFee.toString()),a=t.epoch<o.newerTransferFee.epoch?(Number(o.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(i.transferFeeBasisPoints===eo){let c=new Tt(i.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=to(r.mul(new Tt(eo)),new Tt(eo-i.transferFeeBasisPoints)),u=new Tt(i.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=to(l.mul(new Tt(i.transferFeeBasisPoints)),new Tt(eo)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=to(r.mul(new Tt(i.transferFeeBasisPoints)),new Tt(eo)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function Rt(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function to(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Tt(0))?t.add(new Tt(1)):t}var Le={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://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"},db=C({},Le);var ya="ray_tab_hash",pi="ray_req_hash",Dl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(ya);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(ya,r)),r},ar=async n=>{var o=n,{logCount:r=1e3,removeLastLog:e}=o,t=Ke(o,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let i=JSON.parse(localStorage.getItem(pi)||"[]").slice(0,r-1);e&&i.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),i.unshift(F(C({},t),{time:Date.now(),session:Dl()}));try{localStorage.setItem(pi,JSON.stringify(i))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(i[0].data=a+(a.length>100?"...":"");!s;){i.pop();let c=JSON.stringify(t.data).substring(0,100);i[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(pi,JSON.stringify(i)),s=!0}catch{s=!1}}return new Promise(c=>c())}return ar(F(C({},t),{logCount:r,removeLastLog:!0}))}};var ur=ue("Raydium_Api"),fi=new Map;var cr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:o,urlConfigs:i}){this.cluster=e,this.urlConfigs=i||{},this.logCount=o||1e3,this.api=ba.create({baseURL:this.urlConfigs.BASE_HOST||Le.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return ur.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(ur.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&ar({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),ur.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&ar({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),ur.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Le.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Le.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ba.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(o=>o.numSlots);return n.reduce((o,i)=>o+i,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Le.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Le.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Le.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Le.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Le.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:o="desc",page:i=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Le.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${o}&page=${i}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Le.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],o=t.filter(s=>fi.has(s)?(n.push(fi.get(s)),!1):!0),i=[];return o.length&&(i=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Le.POOL_KEY_BY_ID)+`?ids=${o.join(",")}`)).data.filter(Boolean),i.forEach(a=>{fi.set(a.id,a)})),n.concat(i)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:o="all",sort:i="default",order:s="desc",page:a=1}=e,[c,u]=[t&&ut(t).toBase58(),n&&n!=="undefined"?ut(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Le.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${o}&poolSortField=${i}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Le.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Le.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Le.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Le.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Le.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Le.JITO})).data}};var lr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",ga="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Bi,TOKEN_PROGRAM_ID as en,AccountLayout as Rn,TOKEN_2022_PROGRAM_ID as ym}from"@solana/spl-token";import{PublicKey as Ar,SystemProgram as bm}from"@solana/web3.js";var yi=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Be=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ue(t)}createTxBuilder(e){return this.scope.checkOwner(),new sr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(yi(e))}logInfo(...e){this.logger.info(yi(e))}logAndCreateError(...e){let t=yi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as cm,createCloseAccountInstruction as lm,createTransferInstruction as mm,TOKEN_PROGRAM_ID as Cn}from"@solana/spl-token";import{PublicKey as dm,SystemProgram as pm}from"@solana/web3.js";import fm from"bn.js";import{PublicKey as La,Keypair as im}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as sm}from"@solana/spl-token";import am from"bn.js";import{PublicKey as Jl}from"@solana/web3.js";import ka,{isBN as Ta}from"bn.js";import{bits as Wl,BitStructure as Qb,blob as ql,Blob as Yb,cstr as jb,f32 as Hb,f32be as Zb,f64 as Jb,f64be as $b,greedy as eg,Layout as Ul,ns64 as tg,ns64be as ng,nu64 as Gl,nu64be as og,offset as rg,s16 as ig,s16be as sg,s24 as ag,s24be as ug,s32 as Xl,s32be as cg,s40 as lg,s40be as mg,s48 as dg,s48be as pg,s8 as fg,seq as zl,struct as yg,Structure as Ql,u16 as Yl,u16be as bg,u24 as gg,u24be as Ag,u32 as jl,u32be as wg,u40 as Pg,u40be as hg,u48 as kg,u48be as Tg,u8 as Hl,UInt as Zl,union as Ig,Union as Bg,unionLayoutDiscriminator as xg,utf8 as Sg}from"@solana/buffer-layout";var mr=Ul,Aa=Ql;var bi=Zl;var wa=Hl,Lt=Yl;var gi=jl;var Pa=Gl;var We=Xl;var ha=zl;var fe=ql;var Ai=Wl;var an=class extends mr{constructor(t,n,o){super(t,o);this.blob=fe(t),this.signed=n}decode(t,n=0){let o=new ka(this.blob.decode(t,n),10,"le");return this.signed?o.fromTwos(this.span*8).clone():o}encode(t,n,o=0){return typeof t=="number"&&(t=new ka(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,o)}},dr=class extends mr{constructor(t){super(8,t);this._lower=Ai(gi(),!1),this._upper=Ai(gi(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let o=this._lower.decode(t,n),i=this._upper.decode(t,n+this._lower.span);return C(C({},o),i)}encode(t,n,o=0){return this._lower.encode(t,n,o)+this._upper.encode(t,n,o+this._lower.span)}};function E(r){return new bi(1,r)}function Xe(r){return new bi(4,r)}function P(r){return new an(8,!1,r)}function Q(r){return new an(16,!1,r)}function Ia(r){return new an(1,!0,r)}function fr(r){return new an(8,!0,r)}function Ba(r){return new an(16,!0,r)}var pr=class extends mr{constructor(t,n,o,i){super(t.span,i);this.layout=t,this.decoder=n,this.encoder=o}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,o){return this.layout.encode(this.encoder(t),n,o)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(r){return new pr(fe(32),e=>new Jl(e),e=>e.toBuffer(),r)}function qe(r){return new pr(wa(),$l,em,r)}function $l(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function em(r){return r?1:0}var wi=class extends Aa{decode(e,t){return super.decode(e,t)}};function _(r,e,t){return new wi(r,e,t)}function X(r,e,t){let n,o=typeof e=="number"?e:Ta(e)?e.toNumber():new Proxy(e,{get(i,s){if(!n){let a=Reflect.get(i,"count");n=Ta(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 ha(r,o,t)}var Zt=_([K("mint"),K("owner"),P("amount"),Xe("delegateOption"),K("delegate"),E("state"),Xe("isNativeOption"),P("isNative"),P("delegatedAmount"),Xe("closeAuthorityOption"),K("closeAuthority")]);function tm(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Pi(r,...e){if(!tm(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function hi(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function xa(r,e){Pi(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var br=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),It=(r,e)=>r<<32-e|r>>>e;var qg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function nm(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function ki(r){return typeof r=="string"&&(r=nm(r)),Pi(r),r}var yr=class{clone(){return this._cloneInto()}},Ug={}.toString;function Sa(r){let e=n=>r().update(ki(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function om(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let o=BigInt(32),i=BigInt(4294967295),s=Number(t>>o&i),a=Number(t&i),c=n?4:0,u=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+u,a,n)}var Ka=(r,e,t)=>r&e^~r&t,Ca=(r,e,t)=>r&e^r&t^e&t,gr=class extends yr{constructor(e,t,n,o){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=o,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=br(this.buffer)}update(e){hi(this);let{view:t,buffer:n,blockLen:o}=this;e=ki(e);let i=e.length;for(let s=0;s<i;){let a=Math.min(o-this.pos,i-s);if(a===o){let c=br(e);for(;o<=i-s;s+=o)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===o&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){hi(this),xa(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:o,isLE:i}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>o-s&&(this.process(n,0),s=0);for(let m=s;m<o;m++)t[m]=0;om(n,o-8,BigInt(this.length*8),i),this.process(n,0);let a=br(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:o,finished:i,destroyed:s,pos:a}=this;return e.length=o,e.pos=a,e.finished=i,e.destroyed=s,o%t&&e.buffer.set(n),e}};var rm=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]),Jt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),$t=new Uint32Array(64),Ti=class extends gr{constructor(){super(64,32,8,!1),this.A=Jt[0]|0,this.B=Jt[1]|0,this.C=Jt[2]|0,this.D=Jt[3]|0,this.E=Jt[4]|0,this.F=Jt[5]|0,this.G=Jt[6]|0,this.H=Jt[7]|0}get(){let{A:e,B:t,C:n,D:o,E:i,F:s,G:a,H:c}=this;return[e,t,n,o,i,s,a,c]}set(e,t,n,o,i,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=o|0,this.E=i|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)$t[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=$t[m-15],p=$t[m-2],y=It(d,7)^It(d,18)^d>>>3,f=It(p,17)^It(p,19)^p>>>10;$t[m]=f+$t[m-7]+y+$t[m-16]|0}let{A:n,B:o,C:i,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=It(a,6)^It(a,11)^It(a,25),p=l+d+Ka(a,c,u)+rm[m]+$t[m]|0,f=(It(n,2)^It(n,13)^It(n,22))+Ca(n,o,i)|0;l=u,u=c,c=a,a=s+p|0,s=i,i=o,o=n,n=p+f|0}n=n+this.A|0,o=o+this.B|0,i=i+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,o,i,s,a,c,u,l)}roundClean(){$t.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var Ra=Sa(()=>new Ti);var sA=ue("Raydium_Util");function Oa({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],o=[];for(let{pubkey:i,account:s}of t.value){let a=Zt.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:i,mint:c,amount:u,isAssociated:ge(r,c,s.owner).publicKey.equals(i),isNative:!1,programId:s.owner}),o.push({pubkey:i,accountInfo:a,programId:s.owner})}return e&&n.push({mint:La.default,amount:new am(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:o}}function ze({fromPublicKey:r,programId:e=sm}){let t=im.generate().publicKey.toBase58().slice(0,32);return{publicKey:um(r,t,e),seed:t}}function um(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),o=Ra(n);return new La(o)}function Ii(r){let{mint:e,tokenAccount:t,owner:n,programId:o=Cn}=r;return cm(t,e,n,o)}function Ot(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:o,programId:i=Cn}=r;return lm(e,t,o,n,i)}async function Dt(r){let{connection:e,amount:t,commitment:n,payer:o,owner:i,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Zt.span,n),c=Z(t).add(new fm(a)),u=ze({fromPublicKey:o,programId:Cn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[pm.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Zt.span,programId:Cn}),Ii({mint:new dm(Me.address),tokenAccount:u.publicKey,owner:i,programId:Cn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[Ot({tokenAccount:u.publicKey,payer:o,owner:i})]}}function no({source:r,destination:e,owner:t,amount:n,multiSigners:o=[],tokenProgram:i=Cn}){return mm(r,e,t,BigInt(String(n)),o,i)}var oo=class extends Be{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;let{tokenAccounts:n,tokenAccountRawInfos:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=o||[],this._clientOwnedToken=!!(n||o)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return ge(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let o=C(C({},{}),t),[i,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:en},o.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:ym},o.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=Oa({owner:this.scope.ownerPubKey,solAccountResp:i,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=en,associatedOnly:o=!0}){await this.fetchWalletTokenAccounts();let i=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of i){let{publicKey:c}=a;if(c&&(!o||o&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:o,associatedOnly:i,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1}=t,l=new Ar(t.tokenProgram||en),m=this.getAssociatedTokenAccount(n,new Ar(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!i||h.pubkey.equals(m))).sort((h,w)=>h.accountInfo.amount.lt(w.accountInfo.amount)?1:-1);if(o===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(i){let h=Bi(s,m,s,n,l);if(u){let w=await this.scope.connection.getAccountInfo(m);if(w===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(V.CreateATA);else if(!(w.owner.equals(l)&&Rn.decode(w.data).mint.equals(n)&&Rn.decode(w.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(H)&&o.amount){let w=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:o.payer||this.scope.ownerPubKey,amount:(f=o.amount)!=null?f:0,skipCloseAccount:c});p.instructions.push(...w.instructions||[]),p.endInstructions.push(...w.endInstructions||[]),p.instructionTypes.push(...w.instructionTypes||[]),p.endInstructionTypes.push(...w.endInstructionTypes||[]),o.amount&&(p.instructions.push(no({source:w.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:o.amount,tokenProgram:en})),p.instructionTypes.push(V.TransferAmount))}return c||(p.endInstructions.push(Ot({owner:s,payer:o.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:p}}else{let h=ze({fromPublicKey:s,programId:l}),w=await this.scope.connection.getMinimumBalanceForRentExemption(Rn.span),k=bm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:w+Number((g=(b=o.amount)==null?void 0:b.toString())!=null?g:0),space:Rn.span,programId:l});return p.instructions.push(k,Ii({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(V.CreateAccount),p.instructionTypes.push(V.InitAccount),c||(p.endInstructions.push(Ot({owner:s,payer:o.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=en,autoUnwrapWSOLToSOL:o}){var c;await this.fetchWalletTokenAccounts();let i=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!i){let u=this.getAssociatedTokenAccount(t,n),l=await Bi(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],i=u}return o&&H.toBase58()===t.toBase58()&&(a.endInstructions=[Ot({owner:s,payer:s,tokenAccount:i,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:i,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:o,mint:i,programId:s=en,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(i,s);if(new Ar(H).equals(i)){let p=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:o,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],y=Bi(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(en)&&Rn.decode(f.data).mint.equals(i)&&Rn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${i.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:o=en,amount:i,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new Ar(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:i||0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=l,p=Ke(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:o}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:o}),{tokenAccount:d}=m,p=Ke(m,["tokenAccount"]);c=d,u.addInstruction(p)}return C({tokenAccount:c},u.AllTxData)}};import{createAssociatedTokenAccountInstruction as Vm}from"@solana/spl-token";import{PublicKey as ye,SystemProgram as Fm}from"@solana/web3.js";import{PublicKey as Ea}from"@solana/web3.js";var xi=_([E("instruction")]),Si=_([E("instruction")]),gm=_([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),Q("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),P("rewardType"),X(P(),15,"padding")]),Am=_([P("state"),P("nonce"),K("lpVault"),K("rewardVault"),K(),K(),P(),P(),P("totalReward"),Q("perShareReward"),P("lastSlot"),P("perSlotReward")]),wm=_([P("state"),P("nonce"),K("lpVault"),K("rewardVaultA"),P("totalRewardA"),Q("perShareRewardA"),P("perSlotRewardA"),E("option"),K("rewardVaultB"),fe(7),P("totalRewardB"),Q("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),K()]),Pm=_([P(),P("state"),P("nonce"),P("validRewardTokenNum"),Q("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(gm,5,"rewardInfos"),K("creator"),K(),X(P(),32,"padding")]),Na=new Proxy(Am,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:3,rewardInfos:[{rewardVault:o.rewardVault,totalReward:o.totalReward,perSlotReward:o.perSlotReward,perShareReward:o.perShareReward}]})}:Reflect.get(r,e,t)}}),Ma=new Proxy(wm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:5,rewardInfos:[{rewardVault:o.rewardVaultA,totalReward:o.totalRewardA,perSlotReward:o.perSlotRewardA,perShareReward:o.perShareRewardA},{rewardVault:o.rewardVaultB,totalReward:o.totalRewardB,perSlotReward:o.perSlotRewardB,perShareReward:o.perShareRewardB}]})}:Reflect.get(r,e,t)}}),ro=new Proxy(Pm,{get(r,e,t){return e==="decode"?(...n)=>{let o=r.decode(...n);return F(C({},o),{version:6,rewardInfos:o.rewardInfos.map(i=>{var s;return F(C({},i),{rewardType:((s=Object.entries(tn).find(a=>String(a[1])===i.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),hm=_([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Ki=_([E("instruction"),P("nonce"),X(hm,5,"rewardTimeInfo")]),Ci=_([E("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),Ri=_([E("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),FA=_([P("state"),K("id"),K("owner"),P("deposited"),X(P(),1,"rewardDebts")]),io=_([P("state"),K("id"),K("owner"),P("deposited"),X(Q(),1,"rewardDebts"),P(""),P("voteLockedBalance"),X(P(),15)]),EA=_([P("state"),K("id"),K("owner"),P("deposited"),X(P(),2,"rewardDebts")]),_a=_([P("state"),K("id"),K("owner"),P("deposited"),X(Q(),2,"rewardDebts"),X(P(),17)]),va=_([P(),P("state"),K("id"),K("owner"),P("deposited"),X(Q(),5,"rewardDebts"),X(P(),16)]),$e=_([E("instruction"),P("amount")]),km=_([K("mint"),K("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),Ia("digitShift"),X(E(),7,"reserved1"),X(P(),7,"reserved2")]),Va=_([fe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(E(),32,"reserved1"),X(km,4,"votingMints"),fr("timeOffset"),E("bump"),X(E(),7,"reserved2"),X(P(),11,"reserved3")]),Tm=_([fr("startTime"),fr("endTime"),E("kind"),X(E(),15,"reserved")]),Im=_([X(Tm,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),qe("isUsed"),qe("allowClawback"),E("votingMintConfigIdx"),X(E(),29,"reserved")]),Fa=_([fe(8),K("voterAuthority"),K("registrar"),X(Im,32,"deposits"),E("voterBump"),E("voterWweightRecordBump"),X(E(),94,"reserved")]);var QA=ue("Raydium_farm_config"),Da=new Ea("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Wa=new Ea("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1"),qa={3:Na,5:Ma,6:ro},Ua={3:io,5:_a,6:va},Li=r=>[3,5,6].indexOf(r)!==-1,Oi=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,o=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,i={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${o}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${o}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${o}`}};return(s=i[e])==null?void 0:s.call(i)},tn={"Standard SPL":0,"Option tokens":1},ft={[ca.toString()]:3,[la.toString()]:5,[Jn.toString()]:6};import{PublicKey as ie,SystemProgram as un,SYSVAR_RENT_PUBKEY as Sm,SYSVAR_CLOCK_PUBKEY as uo,TransactionInstruction as Ve}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Km,TOKEN_PROGRAM_ID as ct,ASSOCIATED_TOKEN_PROGRAM_ID as Cm}from"@solana/spl-token";import wr from"bn.js";function Ni(r,e,t){return ae([e.toBuffer(),Buffer.from("registrar","utf8"),t.toBuffer()],r)}function Mi(r,e){return ae([e.toBuffer(),Buffer.from("voting_mint_seed","utf8")],r)}function _i(r,e){return ae([e.toBuffer()],r)}function vi(r,e,t){return ae([e.toBuffer(),Buffer.from("voter","utf8"),t.toBuffer()],r)}function Vi(r,e,t){return ae([e.toBuffer(),Buffer.from("voter-weight-record","utf8"),t.toBuffer()],r)}function Fi(r,e,t,n){return ae([Buffer.from("governance","utf8"),e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}import st from"bn.js";var so=ue("Raydium.farm.util");function ao({programId:r,poolId:e,mint:t,type:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return o}function Qe({programId:r,poolId:e,owner:t,version:n}){let{publicKey:o}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return o}var Ga=({programId:r,poolId:e})=>ae([e.toBuffer()],r);function Xa(r){return{isSet:new st(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(tn[r.rewardType])}}function Ei(r){return Z(r.endTime).sub(Z(r.openTime)).mul(Z(r.perSecond))}function Ln(r){let e=Ua[r];return e||so.logWithError("invalid version",r),e}function Bm(r){let e=qa[r];return e||so.logWithError("invalid version",r),e}function xm(r,e,t,n){if(r.version===3||r.version===5){if(r.lastSlot.gte(new st(t)))return r;let o=new st(t).sub(r.lastSlot);r.lastSlot=new st(t);for(let i of r.rewardInfos){if(e.amount.eq(new st(0)))continue;let s=i.perSlotReward.mul(o);i.perShareReward=i.perShareReward.add(s.mul(new st(10).pow(new st(r.version===3?9:15))).div(e.amount)),i.totalReward=i.totalReward.add(s)}}else if(r.version===6)for(let o of r.rewardInfos){if(o.rewardState.eq(new st(0)))continue;let i=st.min(new st(n),o.rewardEndTime);if(o.rewardOpenTime.gte(i))continue;let a=i.sub(o.rewardLastUpdateTime).mul(o.rewardPerSecond),c=o.totalReward.sub(o.totalRewardEmissioned);c.lt(a)?(a=c,o.rewardLastUpdateTime=o.rewardLastUpdateTime.add(c.div(o.rewardPerSecond))):o.rewardLastUpdateTime=i,!e.amount.eq(new st(0))&&(o.accRewardPerShare=o.accRewardPerShare.add(a.mul(r.rewardMultiplier).div(e.amount)),o.totalRewardEmissioned=o.totalRewardEmissioned.add(a))}return r}async function lw({connection:r,farmPools:e,owner:t,config:n,chainTime:o}){let i=!1,s=!1,a=new st(10),c=[];for(let d of e){let p=ke(d);p.version===6?s=!0:i=!0,c.push({pubkey:p.id,version:p.version,key:"state",poolId:p.id},{pubkey:p.lpVault,version:p.version,key:"lpVault",poolId:p.id}),t&&c.push({pubkey:Qe({programId:p.programId,poolId:p.id,owner:t,version:d.version}),version:p.version,key:"ledger",poolId:p.id})}let u={},l=await _e(r,c,n);for(let{pubkey:d,version:p,key:y,poolId:f,accountInfo:b}of l){let g=f.toBase58();if(u[g]=C({},u[g]),y==="state"){let h=Bm(p);(!b||!b.data||b.data.length!==h.span)&&so.logWithError(`invalid farm state account info, pools.id, ${d}`),u[g].state=h.decode(b.data)}else if(y==="lpVault")(!b||!b.data||b.data.length!==Zt.span)&&so.logWithError(`invalid farm lp vault account info, pools.lpVault, ${d}`),u[g].lpVault=Zt.decode(b.data);else if(y==="ledger"){let h=Ln(p);b&&b.data&&(b.data.length!==h.span&&so.logWithError(`invalid farm ledger account info, ledger, ${d}`),u[g].ledger=h.decode(b.data))}}let m=s||i?await r.getSlot():0;for(let d of Object.keys(u))u[d]!==void 0&&(u[d].state=xm(u[d].state,u[d].lpVault,m,o));for(let[d,{state:p,ledger:y}]of Object.entries(u))if(y){let f=p.version===6?p.rewardMultiplier:p.rewardInfos.length===1?a.pow(new st(9)):a.pow(new st(15)),b=p.rewardInfos.map((g,h)=>{let w=y.rewardDebts[h];return y.deposited.mul(p.version===6?g.accRewardPerShare:g.perShareReward).div(f).sub(w)});u[d].wrapped=F(C({},u[d].wrapped),{pendingRewards:b})}return u}function mw(r,e=Date.now()){if(r.version===6){let t=r.state.rewardInfos;if(t.every(({rewardOpenTime:n})=>aa(e,n.toNumber(),{unit:"s"})))return"upcoming pool";if(t.every(({rewardEndTime:n})=>ua(e,n.toNumber(),{unit:"s"})))return"closed pool"}else{let t=r.state.rewardInfos.map(({perSlotReward:n})=>n);if(t.length===2){if(String(t[0])==="0"&&String(t[1])!=="0")return"normal fusion pool";if(String(t[0])!=="0"&&String(t[1])!=="0")return"dual fusion pool";if(String(t[0])==="0"&&String(t[1])==="0")return"closed pool"}else if(t.length===1&&String(t[0])==="0")return"closed pool"}}async function Di(r,e,t,n){let o=await r.getAccountInfo(e);if(o===null)throw Error("registrar info check error");let s=Va.decode(o.data).votingMints.findIndex(l=>l.mint.equals(n));if(s===-1)throw Error("find voter mint error");let a=await r.getAccountInfo(t);if(a===null)return{index:s,isInit:!1};let u=Fa.decode(a.data).deposits.findIndex(l=>l.isUsed&&l.votingMintConfigIdx===s);return u===-1?{index:s,isInit:!1}:{index:u,isInit:!0}}var Rm=ue("Raydium_farm_instruction"),co={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function lo(r){let{version:e,id:t,ledger:n,programId:o,owner:i}=r,s={3:9,5:10}[e];s||Rm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(xi.span);xi.encode({instruction:s},a);let c=[A({pubkey:t}),A({pubkey:n}),A({pubkey:i,isWritable:!1}),A({pubkey:un.programId,isWritable:!1}),A({pubkey:Sm,isWritable:!1})];return{instruction:new Ve({programId:o,keys:c,data:a}),instructionType:V.FarmV3CreateLedger}}function za(r){var n;let e=Buffer.alloc(Ki.span);Ki.encode({instruction:0,nonce:new wr(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...Jr,A({pubkey:r.farmId}),A({pubkey:r.farmAuthority,isWritable:!1}),A({pubkey:r.lpVault}),A({pubkey:r.lpMint,isWritable:!1}),A({pubkey:r.lockVault}),A({pubkey:r.lockMint,isWritable:!1}),A({pubkey:(n=r.lockUserAccount)!=null?n:Ne}),A({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let o of r.rewardInfo)t.push(A({pubkey:o.rewardMint,isWritable:!1}),A({pubkey:o.rewardVault}),A({pubkey:o.userRewardToken}));return{instruction:new Ve({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function Qa(r){let e=Buffer.alloc(Si.span);Si.encode({instruction:5},e);let t=[A({pubkey:ct,isWritable:!1}),A({pubkey:r.id}),A({pubkey:r.authority,isWritable:!1}),A({pubkey:r.lpVault,isWritable:!1}),A({pubkey:r.rewardVault}),A({pubkey:r.userRewardToken}),A({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Ve({programId:r.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function Lm(r,e,t,n,o,i,s,a,c,u,l,m,d){let p=_([E("depositEntryIndex"),P("amount")]),y=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:Yo,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({depositEntryIndex:m,amount:d},f);let b=Buffer.from([...co.voterStakeRegistryDeposit,...f]);return new Ve({keys:y,programId:r,data:b})}function Om(r,e,t,n){let o=_([]),i=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([...co.voterStakeRegistryUpdateVoterWeightRecord,...s]);return new Ve({keys:i,programId:r,data:a})}function Nm(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([E("depositEntryIndex"),P("amount")]),b=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:Yo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({depositEntryIndex:p,amount:y},g);let h=Buffer.from([...co.voterStakeRegistryWithdraw,...g]);return new Ve({keys:b,programId:r,data:h})}function Mm(r,e,t,n,o,i){let s=_([E("ins")]),a=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);return s.encode({ins:23},c),new Ve({keys:a,programId:r,data:c})}function _m(r,e,t,n,o,i,s,a){let c=_([E("voterBump"),E("voterWeightRecordBump")]),u=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Yo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({voterBump:s,voterWeightRecordBump:a},l);let m=Buffer.from([...co.voterStakeRegistryCreateVoter,...l]);return new Ve({keys:u,programId:r,data:m})}function vm(r,e,t,n,o,i,s,a,c,u,l,m){let d=_([E("depositEntryIndex"),E("kind"),E("option"),P("startTs"),Xe("periods"),qe("allowClawback")]),p=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:un.programId,isSigner:!1,isWritable:!1},{pubkey:ct,isSigner:!1,isWritable:!1},{pubkey:Cm,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],y=Buffer.alloc(d.span);d.encode({depositEntryIndex:a,kind:c,option:u===void 0?0:1,startTs:u,periods:l,allowClawback:m},y);let f=Buffer.from([...co.voterStakeRegistryCreateDepositEntry,...y]);return new Ve({keys:p,programId:r,data:f})}async function Kw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Ni(n,o,i).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data),p=d.deposited.sub(d.voteLockedBalance);if(console.log("amount",p.toString()),p.eq(new wr(0)))throw Error("user do not has new stake amount");let y=Mi(e,a).publicKey,f=_i(e,a).publicKey,{publicKey:b,nonce:g}=vi(n,u,s),h=ge(b,y,c).publicKey,{publicKey:w,nonce:k}=Vi(n,u,s),B=Fi(t,o,i,s).publicKey,T=[],S=ge(s,y,c).publicKey;if(await r.getAccountInfo(S)===null&&T.push(Km(s,S,s,y)),await r.getAccountInfo(b)===null){let W=Mm(t,o,s,i,s,B);T.push(W,_m(n,u,b,w,s,s,g,k))}let{index:I,isInit:R}=await Di(r,u,b,y);return R||T.push(vm(n,u,b,h,s,s,y,I,0,void 0,0,!1)),T.push(Lm(n,u,b,h,S,s,l,a,y,f,e,I,p),Om(n,u,b,w)),T}async function Cw({connection:r,programId:e,governanceProgramId:t,voteWeightAddinProgramId:n,realm:o,communityTokenMint:i,owner:s,poolId:a,tokenProgram:c}){let u=Ni(n,o,i).publicKey,l=Qe({programId:e,poolId:a,owner:s,version:3}),m=await r.getAccountInfo(l);if(m===null)throw Error("user is not staker");let d=io.decode(m.data);if(d.voteLockedBalance.eq(new wr(0)))throw Error("user has vote locked balance = 0");let p=Mi(e,a).publicKey,y=_i(e,a).publicKey,{publicKey:f}=vi(n,u,s),b=ge(f,p,c).publicKey,{publicKey:g}=Vi(n,u,s),h=Fi(t,o,i,s).publicKey,w=[],{index:k,isInit:B}=await Di(r,u,f,p);if(!B)throw Error("deposit entry index check error");return w.push(Nm(n,u,f,s,h,g,b,ge(s,p,c).publicKey,l,a,p,y,e,k,d.voteLockedBalance)),w}function Wi({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:o}){let i=Buffer.alloc(Ci.span);Ci.encode({instruction:3,rewardReopenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardPerSecond:Z(o.perSecond)},i);let s=[A({pubkey:ct,isWritable:!1}),A({pubkey:n.id}),A({pubkey:n.lpVault,isWritable:!1}),A({pubkey:e}),A({pubkey:t}),A({pubkey:r,isWritable:!1,isSigner:!0})];return new Ve({programId:n.programId,keys:s,data:i})}function qi({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:o}){let i=Buffer.alloc(Ri.span);Ri.encode({instruction:4,isSet:new wr(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(tn[o.rewardType])},i);let s=[...Jr,A({pubkey:t.id}),A({pubkey:t.authority,isWritable:!1}),A({pubkey:o.mint,isWritable:!1}),A({pubkey:n}),A({pubkey:e}),A({pubkey:r,isWritable:!1,isSigner:!0})];return new Ve({programId:t.programId,keys:s,data:i})}function Rw(r){let{farmInfo:e,farmKeys:t,version:n,lpAccount:o,rewardAccounts:i,owner:s,instruction:a,amount:c,deposit:u}=r,[l,m]=[new ie(e.programId),new ie(e.id)],d=Qe({programId:l,poolId:m,owner:s,version:n}),p=Buffer.alloc($e.span);$e.encode({instruction:a,amount:c},p);let y=n===6?[A({pubkey:ct,isWritable:!1}),...u?[A({pubkey:un.programId,isWritable:!1})]:[],A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:o})]:[A({pubkey:m}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:d}),A({pubkey:s,isWritable:!1,isSigner:!0}),A({pubkey:o}),A({pubkey:new ie(t.lpVault)}),A({pubkey:i[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(n===5)for(let f=1;f<t.rewardInfos.length;f++)y.push(A({pubkey:i[f]})),y.push(A({pubkey:new ie(t.rewardInfos[f].vault)}));if(n===6)for(let f=0;f<t.rewardInfos.length;f++)y.push(A({pubkey:new ie(t.rewardInfos[f].vault)})),y.push(A({pubkey:i[f]}));return new Ve({programId:l,keys:y,data:p})}function mo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new ie(e.programId),new ie(e.id)],u=Qe({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:2,amount:Z(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:o[d]}));return new Ve({programId:a,keys:m,data:l})}function po(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:12,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:o[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function fo(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function Ya(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:3}),m=Buffer.alloc($e.span);$e.encode({instruction:10,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function ja(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ie(e.programId),new ie(e.id)],l=Qe({programId:c,poolId:u,owner:i,version:5}),m=Buffer.alloc($e.span);$e.encode({instruction:11,amount:Z(s)},m);let d=[A({pubkey:u}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:l}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n}),A({pubkey:new ie(t.lpVault)}),A({pubkey:o[0]}),A({pubkey:new ie(t.rewardInfos[0].vault)}),A({pubkey:uo,isWritable:!1}),A({pubkey:ct,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(A({pubkey:o[p]})),d.push(A({pubkey:new ie(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(A({pubkey:p}));return new Ve({programId:c,keys:d,data:m})}function Ha(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:o,owner:i,amount:s}=r,[a,c]=[new ie(e.programId),new ie(e.id)],u=Qe({programId:a,poolId:c,owner:i,version:6}),l=Buffer.alloc($e.span);$e.encode({instruction:1,amount:Z(s)},l);let m=[A({pubkey:ct,isWritable:!1}),A({pubkey:un.programId,isWritable:!1}),A({pubkey:c}),A({pubkey:new ie(t.authority),isWritable:!1}),A({pubkey:new ie(t.lpVault)}),A({pubkey:u}),A({pubkey:i,isWritable:!1,isSigner:!0}),A({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(A({pubkey:new ie(t.rewardInfos[d].vault)})),m.push(A({pubkey:o[d]}));return new Ve({programId:a,keys:m,data:l})}var yo=class extends Be{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ne)){let n=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Ei(F(C({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:o=Jn,txVersion:i}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new ye(e.lpMint.address),lockInfo:{lockMint:Da,lockVault:Wa},version:6,rewardInfos:t,programId:o},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=ze({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ro.span);c.addInstruction({instructions:[Fm.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ro.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Ga({programId:new ye(a.programId),poolId:l.publicKey}),y=ao({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(tn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(Xa(B));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:u});S&&c.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=B.mint.equals(Ne)?new ye(Me.address):B.mint;b.push({rewardMint:x,rewardVault:ao({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new ye(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&c.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:w,instructionType:k}=za({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return c.addInstruction({instructions:[w],instructionTypes:[k]}).versionBuild({txVersion:i,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:o}){var b;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let c=t||this.scope.ownerPubKey,u=n.mint.equals(Ne)?new ye(Me.address):n.mint,l=a.rewardInfos.findIndex(g=>new ye(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(b=m.vault)!=null?b:Ne,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[Wi({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:o})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:o}){var l;let i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version ",i);let s=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Ne)?new ye(Me.address):m.mint,p=a.rewardInfos.findIndex(w=>new ye(w.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Ne,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=Wi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[h],instructionTypes:[V.FarmV6Restart]})}return u.versionBuild({txVersion:o})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:o,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder(),l=o.mint.equals(Ne)?new ye(Me.address):o.mint,m=ao({programId:new ye(n.programId),poolId:new ye(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:o,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),o.mint=l,u.addInstruction({instructions:[qi({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:o})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:o,payer:i}=e,s=ft[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=ke((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=i!=null?i:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of o){let m=l.mint.equals(Ne)?new ye(Me.address):l.mint,d=ao({programId:new ye(n.programId),poolId:new ye(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:c});y&&u.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=qi({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(C({},l),{mint:m})});u.addInstruction({instructions:[f],instructionTypes:[V.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:o,feePayer:i,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ft[d];Li(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new ye(n.programId),new ye(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=Qe({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let w={};for(let D of this.scope.account.tokenAccounts)if(a){let J=ge(this.scope.ownerPubKey,D.mint,D.programId).publicKey;D.publicKey&&J.equals(D.publicKey)&&(w[D.mint.toString()]=D.publicKey)}else w[D.mint.toString()]=D.publicKey;let k=b.lpMint,B=w[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",w);let T=[];for(let D of m){let J=s&&D.mint.address===H.toString(),G=w[D.mint.address];if(!G){let{account:q,instructionParams:Ze}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new ye(D.mint.address),notUseTokenAccount:J,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!J,associatedOnly:J?!1:a,checkCreateATAOwner:c});G=q,Ze&&h.addInstruction(Ze)}w[D.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=Ln(p).decode(x.data)),n.programId!==Jn.toString()&&!S){let{instruction:D,instructionType:J}=lo({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[D],instructionTypes:[J]})}let L=Oi({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});L&&this.logAndCreateError(L);let I={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:T,userAuxiliaryLedgers:u==null?void 0:u.map(D=>new ye(D))},R=p===6?Ha(I):p===5?ja(I):Ya(I),W={3:V.FarmV3Deposit,5:V.FarmV5Deposit,6:V.FarmV6Deposit};return h.addInstruction({instructions:[R],instructionTypes:[W[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:o,deposited:i,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=ft[n.programId];Li(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(c){let I=ge(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=Qe({programId:new ye(n.programId),poolId:new ye(n.id),owner:this.scope.ownerPubKey,version:p}),I=await this.scope.connection.getAccountInfo(L);if(I)Ln(p).decode(I.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:R,instructionType:W}=lo({id:new ye(y.id),programId:new ye(y.programId),version:p,ledger:L,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[R],instructionTypes:[W]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:I})}let g=y.lpMint.address,h=s&&g===H.toString(),w=b[g.toString()];if(!w){let{account:L,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new ye(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:c,checkCreateATAOwner:u});w=L,I&&f.addInstruction(I)}b[g.toString()]=w;let k=[];for(let L of d){let I=s&&L.mint.address===H.toString(),R=b[L.mint.address];if(!R){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:L.mint.programId,mint:new ye(L.mint.address),notUseTokenAccount:I,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!I,associatedOnly:I?!1:c,checkCreateATAOwner:u});R=W,D&&f.addInstruction(D)}b[L.mint.address]=R,k.push(R)}let B=Oi({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let T={amount:Z(o),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:w,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(L=>new ye(L))},S=p===6?mo(T):p===5?po(T):fo(T),x={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let o=ke((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),i=ft[e.programId];i!==6&&this.logAndCreateError("invalid farm version",i);let s=e.rewardInfos.findIndex(y=>y.mint.address===Ne.toString()?new ye(Me.address):t),a=o.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Ne,u=this.createTxBuilder(),l;if(t.equals(Ne)){let y=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Ei(F(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new v(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,u.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[Vm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Qa({programId:o.programId,id:o.id,authority:o.authority,lpVault:o.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(i){let f=ge(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,w=ft[f],k=b.address,B=n&&k===H.toString(),T=m[k];if(!T){let{account:W,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new ye(k),notUseTokenAccount:B,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:i,checkCreateATAOwner:s});T=W,D&&l.addInstruction(D)}m[k.toString()]=T;let S=[];for(let W of g){let D=n&&W.mint.address===H.toString(),J=m[W.mint.address];if(!J){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new ye(W.mint.address),notUseTokenAccount:D,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!D,associatedOnly:D?!1:i,checkCreateATAOwner:s});J=G,q&&l.addInstruction(q)}m[W.mint.address]=J,S.push(J)}let x=p[h],L={amount:pt,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(W=>new ye(W))},I=w===6?mo(L):w===5?po(L):fo(L),R={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};l.addInstruction({instructions:[I],instructionTypes:[R[w]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as je}from"@solana/web3.js";import{AccountLayout as Bd,NATIVE_MINT as Mu,TOKEN_PROGRAM_ID as vn}from"@solana/spl-token";var $w=_([Xe("mintAuthorityOption"),K("mintAuthority"),P("supply"),E("decimals"),E("isInitialized"),Xe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Em}from"@solana/web3.js";import{MintLayout as Za,TOKEN_PROGRAM_ID as Dm}from"@solana/spl-token";var cP=async({connection:r,mint:e})=>{let t=await r.getAccountInfo(new Em(e));return!t||t.data.length!==Za.span?void 0:Za.decode(t.data)},lP=({mint:r,decimals:e,programId:t=Dm,logoURI:n="",priority:o=3})=>{let i=r.toBase58().substring(0,6);return{address:r.toBase58(),decimals:e,symbol:i,logoURI:n,extensions:{},chainId:101,programId:t.toString(),name:i,tags:[],priority:o}},Pr=r=>new Ie({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),bo=o=>{var i=o,{amount:r,isRaw:e,name:t}=i,n=Ke(i,["amount","isRaw","name"]);return new be(new Ie({mint:ut(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};function mP(r){return r.address===Ct.address?Me:r}function dP(r){return r.address===Me.address?Ct:r}var et=o=>{var i=o,{address:r,programId:e,decimals:t}=i,n=Ke(i,["address","programId","decimals"]);return C({chainId:101,address:ut(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},nn=r=>r?F(C({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:F(C({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(C({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as Mn,ASSOCIATED_TOKEN_PROGRAM_ID as ed}from"@solana/spl-token";import{PublicKey as Ae,TransactionInstruction as Wt,SystemProgram as iu,SYSVAR_RENT_PUBKEY as td}from"@solana/web3.js";var Ui=_([E("instruction"),P("amountIn"),P("minAmountOut")]),Gi=_([E("instruction"),P("maxAmountIn"),P("amountOut")]),IP=_([E("instruction"),E("nonce")]),Xi=_([E("instruction"),E("nonce"),P("startTime")]),go=_([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),P("swapBase2QuoteFee"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),P("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"),P("lpReserve"),X(P(),3,"padding")]),Wm=_([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),Q("swapBaseInAmount"),Q("swapQuoteOutAmount"),Q("swapQuoteInAmount"),Q("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(P(),64,"padding")]),zi=_([E("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide")]),Qi=_([E("instruction"),P("amountIn")]),BP={4:go,5:Wm},Ja=_([P("fee")]);import{PublicKey as qm}from"@solana/web3.js";var Nn=new qm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),ln=5e4,Um=_([P("x"),P("y"),P("price")]),Gm=_([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),X(Um,ln,"DataElement")]);function Xm(r,e){return[0,ln-2]}function zm(r){return[0,ln-2]}function Qm(r){return[0,ln-2]}function Ym(r,e,t){let[n,o]=Xm(e,t),i=n,s=o,a=0,c=e*r.multiplier/t;for(;i<=s;){if(a=Math.floor((s+i)/2),a===0||a>=ln-2)return[a,a,!1];let u=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];i=a+1}}return[a,a,!1]}function Yi(r,e,t){let[n,o,i]=Ym(r,e,t);if(!i)return 0;if(n===o){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,c=r.DataElement[o].x,u=r.DataElement[o].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*r.multiplier*l/p}}function cn(r,e,t){return e*r.multiplier/t}function $a(r,e,t){return e*t/r.multiplier}function jm(r,e){let[t,n]=zm(e),o=t,i=n,s=0,a=e;for(;o<i;){if(s=Math.floor((i+o)/2),s<=0||s>ln-2)return[s,s,!1];let c=r.DataElement[s].x,u=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)i=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];o=s+1}}return[s,s,!1]}function Hm(r,e){let[t,n]=Qm(e),o=t,i=n,s=0,a=e;for(;o<=i;){if(s=Math.floor((i+o)/2),s<=0||s>=ln-2)return[s,s,!1];let c=r.DataElement[s].y,u=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)o=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];i=s-1}}return[s,s,!1]}function eu(r,e,t,n){let o=n?e+t:e-t,[i,s,a]=jm(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-c)/(u-c),f=d-(o-c)*r.multiplier/m):(y=l+(m-l)*(e-c)/(u-c),f=p+(u-o)*r.multiplier/l),[y,f,!1,a]}}}function Zm(r,e,t,n){let o=n?e-t:e+t,[i,s,a]=Hm(r,o);if(!a)return[0,0,!1,a];if(i===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let c=r.DataElement[i].x,u=r.DataElement[s].x,l=r.DataElement[i].price,m=r.DataElement[s].price,d=r.DataElement[i].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=c+m*(d-o)/r.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=u-l*(o-p)/r.multiplier),[y,f,!1,a]}}}function Jm(r,e){let t=eu(r,e,0,!1);return t[3]?t[0]:0}function tu(r,e,t,n){let o=Yi(r,e,t),i=cn(r,e,o),s=cn(r,t,o),a=cn(r,n,o),c=!0,[u,l,m,d]=eu(r,i,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return $a(r,p,o)}}function nu(r,e,t,n){let o=Yi(r,e,t),i=cn(r,e,o),s=cn(r,t,o),a=cn(r,n,o),c=!1,[u,l,m,d]=Zm(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=i-l;return $a(r,p,o)}}function $m(r){let e=Gm.decode(r);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function ou(r,e,t,n){let o=Jm(r,cn(r,e,Yi(r,e,t)))/r.multiplier;return n?o:1/o}var On=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(Nn);e&&(this._layoutData=$m(e==null?void 0:e.data))}}};var ru=ue("Raydium_liquidity_instruction");function su(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:o,quoteAmountIn:i,fixedSide:s}=r,a=Buffer.alloc(zi.span);zi.encode({instruction:3,baseAmountIn:Z(o),quoteAmountIn:Z(i),fixedSide:s==="base"?pt:Ys},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:new Ae(e.id)}),A({pubkey:new Ae(t.authority),isWritable:!1}),A({pubkey:new Ae(t.openOrders),isWritable:!1}),A({pubkey:new Ae(t.targetOrders)}),A({pubkey:new Ae(e.lpMint.address)}),A({pubkey:new Ae(t.vault.A)}),A({pubkey:new Ae(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(A({pubkey:Nn})),c.push(A({pubkey:new Ae(e.marketId),isWritable:!1}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:new Ae(t.marketEventQueue),isWritable:!1})),new Wt({programId:new Ae(e.programId),keys:c,data:a})}function ji(r){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:o}=r,i=ke(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Qi.span);Qi.encode({instruction:4,amountIn:Z(o)},a);let c=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.mintLp.address}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return s===5?c.push(A({pubkey:Nn})):(c.push(A({pubkey:i.id})),c.push(A({pubkey:i.id}))),c.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:n.lpTokenAccount}),A({pubkey:n.baseTokenAccount}),A({pubkey:n.quoteTokenAccount}),A({pubkey:n.owner,isWritable:!1,isSigner:!0}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks})),new Wt({programId:i.programId,keys:c,data:a})}return new Wt({programId:i.programId,keys:[]})}function au({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:o,coinMint:i,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:w,coinAmount:k,pcAmount:B,ammConfigId:T,feeDestinationId:S}){let x=_([E("instruction"),E("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),L=[{pubkey:Mn,isSigner:!1,isWritable:!1},{pubkey:ed,isSigner:!1,isWritable:!1},{pubkey:iu.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],I=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:w,coinAmount:k,pcAmount:B},I),{instruction:new Wt({keys:L,programId:r,data:I}),instructionType:V.AmmV4CreatePool}}function WP(r){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new Ae(r.id),isWritable:!1}),A({pubkey:new Ae(r.authority),isWritable:!1}),A({pubkey:new Ae(r.openOrders),isWritable:!1}),A({pubkey:new Ae(r.vault.A),isWritable:!1}),A({pubkey:new Ae(r.vault.B),isWritable:!1}),A({pubkey:new Ae(r.mintLp.address),isWritable:!1}),A({pubkey:new Ae(r.marketId),isWritable:!1}),A({pubkey:new Ae(r.marketEventQueue),isWritable:!1})];return new Wt({programId:new Ae(r.programId),keys:n,data:t})}function nd({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},o){let i=ke(r),s=Buffer.alloc(Ui.span);Ui.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders})];return o===4&&a.push(A({pubkey:i.targetOrders})),a.push(A({pubkey:i.vault.A}),A({pubkey:i.vault.B})),o===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1})),new Wt({programId:i.programId,keys:a,data:s})}function od({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},o){let i=ke(r),s=Buffer.alloc(Gi.span);Gi.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[A({pubkey:Mn,isWritable:!1}),A({pubkey:i.id}),A({pubkey:i.authority,isWritable:!1}),A({pubkey:i.openOrders}),A({pubkey:i.targetOrders}),A({pubkey:i.vault.A}),A({pubkey:i.vault.B})];return o===5&&a.push(A({pubkey:Nn})),a.push(A({pubkey:i.marketProgramId,isWritable:!1}),A({pubkey:i.marketId}),A({pubkey:i.marketBids}),A({pubkey:i.marketAsks}),A({pubkey:i.marketEventQueue}),A({pubkey:i.marketBaseVault}),A({pubkey:i.marketQuoteVault}),A({pubkey:i.marketAuthority,isWritable:!1}),A({pubkey:e.tokenAccountIn}),A({pubkey:e.tokenAccountOut}),A({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Wt({programId:i.programId,keys:a,data:s})}function hr(r){let{poolKeys:e,version:t,userKeys:n,amountIn:o,amountOut:i,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return nd(F(C({},a),{amountIn:o,minAmountOut:i}),t);if(s==="out")return od(F(C({},a),{maxAmountIn:o,amountOut:i}),t);ru.logWithError("invalid params","params",r)}throw ru.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}function qP({poolKeys:r,userKeys:e,startTime:t}){let n=Buffer.alloc(Xi.span);Xi.encode({instruction:0,nonce:5,startTime:Z(t)},n);let o=ke(r),i=[A({pubkey:Mn,isWritable:!1}),A({pubkey:iu.programId,isWritable:!1}),A({pubkey:td,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.authority,isWritable:!1}),A({pubkey:o.openOrders}),A({pubkey:o.mintLp.address}),A({pubkey:o.mintA.address,isWritable:!1}),A({pubkey:o.mintB.address,isWritable:!1}),A({pubkey:o.vault.A,isWritable:!1}),A({pubkey:o.vault.B,isWritable:!1}),A({pubkey:o.id}),A({pubkey:o.targetOrders}),A({pubkey:e.lpTokenAccount}),A({pubkey:o.id,isWritable:!1}),A({pubkey:o.marketProgramId,isWritable:!1}),A({pubkey:o.marketId,isWritable:!1}),A({pubkey:e.payer,isSigner:!0})];return new Wt({programId:o.programId,keys:i,data:n})}function uu({poolKeys:r}){let e=_([E("instruction"),E("simulateType")]),t=Buffer.alloc(e.span);e.encode({instruction:12,simulateType:0},t);let n=[A({pubkey:new Ae(r.id),isWritable:!1}),A({pubkey:new Ae(r.authority),isWritable:!1}),A({pubkey:new Ae(r.openOrders),isWritable:!1}),A({pubkey:new Ae(r.vault.A),isWritable:!1}),A({pubkey:new Ae(r.vault.B),isWritable:!1}),A({pubkey:new Ae(r.mintLp.address),isWritable:!1}),A({pubkey:new Ae(r.marketId),isWritable:!1}),A({pubkey:new Ae(r.marketEventQueue),isWritable:!1})];return{instruction:new Wt({programId:new Ae(r.programId),keys:n,data:t})}}import{TOKEN_PROGRAM_ID as Ue,TOKEN_2022_PROGRAM_ID as on,ASSOCIATED_TOKEN_PROGRAM_ID as xu}from"@solana/spl-token";import{PublicKey as U,TransactionInstruction as xt,SystemProgram as _n,Keypair as rs}from"@solana/web3.js";import Su from"bn.js";import fd from"bn.js";function cu(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function GP(r){let e=new ArrayBuffer(2);return new DataView(e).setInt16(0,r,!1),new Uint8Array(e)}function XP(r){let e=new ArrayBuffer(4);return new DataView(e).setUint32(0,r,!1),new Uint8Array(e)}function kr(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function Hi(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Zi(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function Ao(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function lu(r,e){return Ao(r,e)?null:Hi(r,e)}function mu(r,e){return Ao(r,e)?null:Zi(r,e)}var rd=Buffer.from("amm_config","utf8"),id=Buffer.from("pool","utf8"),sd=Buffer.from("pool_vault","utf8"),ad=Buffer.from("pool_reward_vault","utf8"),du=Buffer.from("position","utf8"),ud=Buffer.from("tick_array","utf8"),cd=Buffer.from("operation","utf8"),ld=Buffer.from("pool_tick_array_bitmap_extension","utf8");function jP(r,e){return ae([rd,cu(e)],r)}function pu(r,e,t,n){return ae([id,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Ji(r,e,t){return ae([sd,e.toBuffer(),t.toBuffer()],r)}function fu(r,e,t){return ae([ad,e.toBuffer(),t.toBuffer()],r)}function we(r,e,t){return ae([ud,e.toBuffer(),kr(t)],r)}function mn(r,e,t,n){return ae([du,e.toBuffer(),kr(t),kr(n)],r)}function yt(r,e){return ae([du,e.toBuffer()],r)}function Tr(r){return ae([Buffer.from("metadata","utf8"),xn.toBuffer(),r.toBuffer()],xn)}function wo(r){return ae([cd],r)}function lt(r,e){return ae([ld,e.toBuffer()],r)}import bt from"bn.js";var de=new bt(0),mt=new bt(1),qt=new bt(-1),dt=new bt(1).shln(64),Ir=new bt(1).shln(128),$i=dt.sub(mt),Po=64,yu=Ir.subn(1),Ye=-443636,tt=-Ye,Nt=new bt("4295048016"),Mt=new bt("79226673521066979257578248091"),Br=new bt("4295048017"),xr=new bt("79226673521066979257578248090"),bu=16,gu="59543866431248",Au="184467440737095516",wu="15793534762490258745",Sr=new bt(10).pow(new bt(6)),md=(n=>(n[n.rate_500=500]="rate_500",n[n.rate_3000=3e3]="rate_3000",n[n.rate_10000=1e4]="rate_10000",n))(md||{}),JP={[500]:10,[3e3]:60,[1e4]:200},$P={version:6,liquidity:de,tickCurrent:0,observationIndex:0,observationUpdateDuration:0,feeGrowthGlobalX64A:de,feeGrowthGlobalX64B:de,protocolFeesTokenA:de,protocolFeesTokenB:de,swapInAmountTokenA:de,swapOutAmountTokenB:de,swapInAmountTokenB:de,swapOutAmountTokenA:de,tickArrayBitmap:[],rewardInfos:[],day:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},week:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},month:{volume:0,volumeFee:0,feeA:0,feeB:0,feeApr:0,rewardApr:{A:0,B:0,C:0},apr:0,priceMax:0,priceMin:0},tvl:0},Pu={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:[]},eh=new bt("18446744073700000000");var dd=15,le=class{static async getTickArrays(e,t,n,o,i,s,a){let c=[],u=Y.getTickArrayStartIndexByTick(o,i),l=Y.getInitializedTickArrayInRange(s,a,i,u,Math.floor(dd/2));for(let p=0;p<l.length;p++){let{publicKey:y}=we(t,n,l[p]);c.push(y)}let m=(await ht(e,c)).map(p=>p!==null?ho.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(C({},y),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,o,i,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,o,i,s);for(;a==null||a.liquidityGross.lten(0);){if(u=Y.getNextTickArrayStartIndex(u,i,s),this.checkIsValidStartIndex(u,i))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,o,i){let s=Math.floor(e/le.tickCount(t)),a=n?Y.searchLowBitFromStart(o,i,s-1,1,t):Y.searchHightBitFromStart(o,i,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,o){let i;if(o){let a=ve-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a-1}}else{let a=0;for(;a<ve;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){i=c;break}a=a+1}}let{publicKey:s}=we(e,t,n.startTickIndex);return{nextTick:i,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,o,i,s){let a=Y.getTickArrayStartIndexByTick(o,i),c=Math.floor((o-a)/i),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<ve;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=we(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Y.checkIsOutOfBoundary(e)){if(e>tt)return!1;let n=Y.getTickArrayStartIndexByTick(Ye,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return ve*e}};import re from"bn.js";import{PublicKey as Bt}from"@solana/web3.js";import Ce from"bn.js";var es=14,Ut=class{static maxTickInTickarrayBitmap(e){return e*ve*dn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(o+=1);let i=n*o;return e<0?{minValue:-i,maxValue:-i+n}:{minValue:i,maxValue:i+n}}static nextInitializedTickArrayStartIndex(e,t,n,o){if(!le.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let i=this.maxTickInTickarrayBitmap(n),s=o?t-le.tickCount(n):t+le.tickCount(n);if(s<-i||s>=i)return{isInit:!1,tickIndex:t};let a=n*ve,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(o){let l=e.shln(1024-u-1),m=lu(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-i}}else{let l=e.shrn(u),m=mu(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:i-le.tickCount(n)}}}},ko=class{static getBitmapOffset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Ut.maxTickInTickarrayBitmap(t),o=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&o--,o}static getBitmap(e,t,n){let o=this.getBitmapOffset(e,t);return e<0?{offset:o,tickarrayBitmap:n.negativeTickArrayBitmap[o]}:{offset:o,tickarrayBitmap:n.positiveTickArrayBitmap[o]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:o}=this.extensionTickBoundary(t);if(e>=o&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;if(tt<=t)throw Error(`extensionTickBoundary check error: ${tt}, ${t}`);if(n<=Ye)throw Error(`extensionTickBoundary check error: ${n}, ${Ye}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:o}=this.getBitmap(e,t,n),i=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Y.mergeTickArrayBitmap(o).testn(i),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,o){let i=le.tickCount(t),s=n?e-i:e+i,{tickarrayBitmap:a}=this.getBitmap(s,t,o);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,o){let{minValue:i,maxValue:s}=Ut.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(o){let c=Y.mergeTickArrayBitmap(e).shln(dn-1-a),u=Ao(512,c)?null:Hi(512,c);if(u!==null){let l=t-u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:i}}else{let c=Y.mergeTickArrayBitmap(e).shrn(a),u=Ao(512,c)?null:Zi(512,c);if(u!==null){let l=t+u*le.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-le.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Ut.maxTickInTickarrayBitmap(t),o=Math.floor(n/le.tickCount(t));return e<0&&n!=0&&(o=dn-o),o}};import _t from"bn.js";var To=class{static getfeeGrowthInside(e,t,n){let o=new _t(0),i=new _t(0);e.tickCurrent>=t.tick?(o=t.feeGrowthOutsideX64A,i=t.feeGrowthOutsideX64B):(o=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),i=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new _t(0),a=new _t(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,o),s),u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,i),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,o){let{feeGrowthInsideX64A:i,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,o),a=ne.mulDivFloor(ne.wrappingSubU128(i,t.feeGrowthInsideLastX64A),t.liquidity,dt),c=t.tokenFeesOwedA.add(a),u=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,dt),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,o){let i=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static GetPositionRewards(e,t,n,o){let i=[],s=this.getRewardGrowthInside(e.tickCurrent,n,o,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=ne.wrappingSubU128(c,u.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,dt),d=u.rewardAmountOwed.add(m);i.push(d)}return i}static getRewardGrowthInside(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getRewardGrowthInsideV2(e,t,n,o){let i=[];for(let s=0;s<o.length;s++){let a=new _t(0);t.liquidityGross.eqn(0)?a=o[s].rewardGrowthGlobalX64:e<t.tick?a=o[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let c=new _t(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=o[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),i.push(ne.wrappingSubU128(ne.wrappingSubU128(o[s].rewardGrowthGlobalX64,a),c))}return i}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:o,add:i,epochInfo:s}){var b,g,h,w;let a=ee.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),c=ee.getSqrtPriceX64FromTick(t.tickLower),u=ee.getSqrtPriceX64FromTick(t.tickUpper),l=i?1+o:1-o,m=ce.getAmountsFromLiquidity(a,c,u,n,i),[d,p]=[he(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),he(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[he(new _t(new v(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),he(new _t(new v(m.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as hu}from"@solana/spl-token";var Re=class{static getOutputAmountAndRemainAccounts(e,t,n,o,i,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o,l,i,s);return c.push(...y),{allTrade:d,expectedAmountOut:p.mul(qt),remainingAccounts:c,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,o,i){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=we(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=pn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,o.mul(qt),u,i);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:o}=Re.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?ko.checkTickArrayIsInit(le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Y.checkTickArrayIsInitialized(Y.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=we(e.programId,e.id,o);return{isExist:!0,startIndex:o,nextAccountMeta:a}}let{isExist:i,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,le.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(i){let{publicKey:a}=we(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/le.tickCount(e.tickSpacing)),o=t?Y.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Y.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return o.length>0?{isExist:!0,nextStartIndex:o[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=le.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:o,tickIndex:i}=Ut.nextInitializedTickArrayStartIndex(Y.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(o)return{isExist:!0,nextStartIndex:i};t=i;let{isInit:s,tickIndex:a}=ko.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Ye||t>tt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:o,rewardInfos:i}){var a,c,u;let s=[];for(let l=0;l<i.length;l++){let m=i[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(C({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Bt(d)});if(p.tokenMint.equals(Bt.default))continue;if(n<=p.openTime.toNumber()||o.eq(de)){s.push(p);continue}let y=new Ce(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,o),g=p.rewardGrowthGlobalX64.add(b),h=ne.mulDivFloor(f,p.emissionsPerSecondX64,dt),w=p.rewardTotalEmissioned.add(h);s.push(F(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:o}=this.tickRange(e);for(let i of t){let s=Y.getTickArrayStartIndexByTick(i,e);if(s>=n||s<o)return!0}return!1}static tickRange(e){let t=Ut.maxTickInTickarrayBitmap(e),n=-t;return t>tt&&(t=le.getArrayStartIndex(tt,e)+le.tickCount(e)),n<Ye&&(n=le.getArrayStartIndex(Ye,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!le.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/le.tickCount(t)*dn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let o=await _e(e,t.map(s=>({pubkey:s})),{batchRequest:n}),i={};for(let s of o)s.accountInfo!==null&&(i[s.pubkey.toString()]=Tu.decode(s.accountInfo.data));return i}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let o={},i=[];for(let c of t){let u=Y.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Y.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=we(c.programId,c.id,m);i.push({pubkey:d}),o[d.toString()]=c.id}}let s=await _e(e,i,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=o[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=ho.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=F(C({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:o=!1,updateOwnerRewardAndFee:i=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(yt(p,d).publicKey);let l=await ht(t,u,{batchRequest:o}),m={};for(let d of l){if(d===null)continue;let p=Kr.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:w,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:w,amountB:k,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>F(C({},x),{pendingReward:new Ce(0)})),leverage:B,tokenFeeAmountA:new Ce(0),tokenFeeAmountB:new Ce(0)}];let T=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(i){let d=Object.values(m),p=await ht(t,d,{batchRequest:o}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=ho.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,w=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[h].toString()],B=y[m[w].toString()],T=k.ticks[Y.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[Y.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:L}=await To.GetPositionFees(f,g,T,S),I=await To.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Ce(0))?x:new Ce(0),g.tokenFeeAmountB=L.gte(new Ce(0))?L:new Ce(0);for(let R=0;R<I.length;R++)g.rewardInfos[R].pendingReward=I[R].gte(new Ce(0))?I[R]:new Ce(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:o,amountIn:i,slippage:s,priceLimit:a=new v(0),catchLiquidityInsufficient:c=!1}){var W;let u,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new v(0))?u=l?Nt.add(new Ce(1)):Mt.sub(new Ce(1)):u=ee.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=he(i,m,o,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=Re.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((W=p.fee)!=null?W:de),u,c),w=he(f,d,o,!1),k=ee.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new v(1).div(k),T=f.mul(new Ce(Math.floor((1-s)*1e10))).div(new Ce(1e10)),S=he(T,d,o,!1),x=l?e.currentPrice:new v(1).div(e.currentPrice),L=new v(B).sub(x).abs(),I=x,R=new Je(new v(L).mul(10**15).toFixed(0),new v(I).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:w,minAmountOut:S,expirationTime:Rt(p.expirationTime,w.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:R,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:o,slippage:i,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=o.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ie(F(C({},u),{mint:u.address,isToken2022:u.programId===hu.toBase58()})),new Ie(F(C({},l),{mint:l.address,isToken2022:l.programId===hu.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:w,priceImpact:k,fee:B,remainingAccounts:T,executionPriceX64:S}=Re.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Bt(u.address),amountIn:n,slippage:i,epochInfo:s,catchLiquidityInsufficient:a}),x=F(C({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),L=F(C({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),I=F(C({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),R=new rt({baseToken:m,denominator:new Ce(10).pow(new Ce(20+m.decimals)),quoteToken:d,numerator:h.mul(new v(10**(20+d.decimals))).toFixed(0)}),W=new rt({baseToken:m,denominator:new Ce(10).pow(new Ce(20+m.decimals)),quoteToken:d,numerator:w.mul(new v(10**(20+d.decimals))).toFixed(0)}),D=new be(m,B);return{allTrade:p,realAmountIn:x,amountOut:L,minAmountOut:I,expirationTime:g,currentPrice:R,executionPrice:W,priceImpact:k,fee:D,remainingAccounts:T,executionPriceX64:S}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:o}){var y,f,b;let i=e[t],s=Y.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Y.getTickPrice({poolInfo:e,tick:o,baseIn:!0}).price.toNumber(),c=Math.max(s,i.priceMin),l=Math.min(a,i.priceMax)-c,m=a-s,d=i.priceMax-i.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:i.feeApr*p,rewardsApr:[((y=i.rewardApr[0])!=null?y:0)*p,((f=i.rewardApr[1])!=null?f:0)*p,((b=i.rewardApr[2])!=null?b:0)*p],apr:i.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:o,liquidity:i,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=o[ut(e.mintA.address).toString()],d=o[ut(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=ee.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),b=ee.getSqrtPriceX64FromTick(s),g=ee.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:w}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,i,!1,!1,0),T=new v(h.toString()).div(new v(10).pow(p)).mul(m.value).add(new v(w.toString()).div(new v(10).pow(y)).mul(d.value)),S=new v(k.toString()).div(new v(10).pow(p)).mul(m.value).add(new v(B.toString()).div(new v(10).pow(y)).mul(d.value)),x=new v(1).div(T.add(S)),I=new v(l.volumeFee).mul(365).div(u).mul(x).mul(100).toNumber(),R=3600*24*365,W=e.rewardDefaultInfos.map(D=>{var q,Ze;let J=D.mint.decimals,G=o[D.mint.address];return c<((q=D.startTime)!=null?q:0)||c>((Ze=D.endTime)!=null?Ze:0)||!D.perSecond||!G||J===void 0?0:new v(G.value).mul(new v(D.perSecond).mul(R)).div(new v(10).pow(J)).mul(x).mul(100).toNumber()});return{feeApr:I,rewardsApr:W,apr:I+W.reduce((D,J)=>D+J,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:o,amount:i,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,h;let l=ee.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),m=ee.getSqrtPriceX64FromTick(n),d=ee.getSqrtPriceX64FromTick(o),p=a?1-s:1+s,y=he(i,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),f=new Ce(new v(y.amount.sub((h=y.fee)!=null?h:de).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Ce(0);else if(l.lte(d)){let w=ce.getLiquidityFromTokenAmountA(l,d,f,!a),k=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?w:k}else b=t?new Ce(0):ce.getLiquidityFromTokenAmountB(m,d,f);return Re.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:o,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:o,liquidity:i,slippage:s,add:a}){var b,g,h,w;let c=ee.getSqrtPriceX64FromTick(n),u=ee.getSqrtPriceX64FromTick(o),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(ee.priceToSqrtPriceX64(new v(t.price),t.mintA.decimals,t.mintB.decimals),c,u,i,a),[d,p]=[he(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),he(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[he(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),he(m.amountB.muln(l),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:i,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Rt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let o=t.filter(c=>!n[c.id]).map(c=>new Bt(c.id));(await ht(e,o)).forEach((c,u)=>{!c||(n[o[u].toBase58()]=fn.decode(c.data))});let s=t.map(c=>lt(new Bt(c.programId),new Bt(c.id)).publicKey),a=await Re.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>F(C({},c),{[u.id]:F(C({},n[u.id]),{id:new Bt(u.id),version:6,programId:new Bt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:F(C({},u.config),{id:new Bt(u.config.id),fundOwner:""}),currentPrice:new v(u.price),exBitmapInfo:a[lt(new Bt(u.programId),new Bt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber()})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};function Eh({poolInfo:r,tickLower:e,tickUpper:t,amountA:n,amountB:o,slippage:i,add:s,epochInfo:a,amountHasFee:c}){var w,k,B,T;let[u,l,m,d]=e<t?[e,t,n,o]:[t,e,o,n],p=ee.priceToSqrtPriceX64(new v(r.price),r.mintA.decimals,r.mintB.decimals),y=ee.getSqrtPriceX64FromTick(u),f=ee.getSqrtPriceX64FromTick(l),[b,g]=[he(m,(w=r.mintA.extensions)==null?void 0:w.feeConfig,a,!c),he(d,(k=r.mintB.extensions)==null?void 0:k.feeConfig,a,!c)],h=ce.getLiquidityFromTokenAmounts(p,y,f,b.amount.sub((B=b.fee)!=null?B:de),g.amount.sub((T=g.fee)!=null?T:de));return ce.getAmountsOutFromLiquidity({poolInfo:r,tickLower:e,tickUpper:t,liquidity:h,slippage:i,add:s,epochInfo:a,amountAddFee:!c})}var ts={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function ku(r){return F(C({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:ts,week:ts,month:ts,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:F(C({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let o=e.mul(t),i=o.div(n);return o.mod(n).eq(de)||(i=i.add(mt)),i}static mulDivFloor(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(de))throw new Error("division by 0");return e.mul(t).add(n.sub(mt)).div(n)}static x64ToDecimal(e,t){return new v(e.toString()).div(v.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(v.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ir).sub(t).mod(Ir)}};function Fe(r,e){return ns(r.mul(e),64,256)}function pd(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function ns(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ee=class{static sqrtPriceX64ToPrice(e,t,n){return ne.x64ToDecimal(e).pow(2).mul(v.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(v.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,o){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,o){if(!e.gt(de))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(de))throw new Error("liquidity must greater than 0");return o?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,o){if(n.eq(de))return e;let i=t.shln(Po);if(o){let s=i,a=i.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,mt,s.div(e).add(n))}else{let s=n.mul(e);if(!i.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=i.sub(s);return ne.mulDivCeil(i,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,o){let i=n.shln(Po);if(o)return e.add(i.div(t));{let s=ne.mulDivRoundingUp(i,mt,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<Ye||e>tt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=Fe(n,new re("18444899583751176192"))),(t&4)!=0&&(n=Fe(n,new re("18443055278223355904"))),(t&8)!=0&&(n=Fe(n,new re("18439367220385607680"))),(t&16)!=0&&(n=Fe(n,new re("18431993317065453568"))),(t&32)!=0&&(n=Fe(n,new re("18417254355718170624"))),(t&64)!=0&&(n=Fe(n,new re("18387811781193609216"))),(t&128)!=0&&(n=Fe(n,new re("18329067761203558400"))),(t&256)!=0&&(n=Fe(n,new re("18212142134806163456"))),(t&512)!=0&&(n=Fe(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=Fe(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=Fe(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=Fe(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=Fe(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=Fe(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=Fe(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=Fe(n,new re("696457651848324352"))),(t&131072)!=0&&(n=Fe(n,new re("26294789957507116"))),(t&262144)!=0&&(n=Fe(n,new re("37481735321082"))),e>0&&(n=yu.div(n)),n}static getTickFromPrice(e,t,n){return ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Mt)||e.lt(Nt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),o=pd(n,32,128),i=new re("8000000000000000","hex"),s=0,a=new re(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;i.gt(new re(0))&&s<bu;){c=c.mul(c);let y=c.shrn(127);c=c.shrn(63+y.toNumber()),a=a.add(i.mul(y)),i=i.shrn(1),s+=1}let u=a.shrn(32),m=o.add(u).mul(new re(gu)),d=ns(m.sub(new re(Au)),64,128).toNumber(),p=ns(m.add(new re(wu)),64,128).toNumber();return d==p?d:ee.getSqrtPriceX64FromTick(p).lte(e)?p:d}},yn=class{static getTickWithPriceAndTickspacing(e,t,n,o){let s=ee.getTickFromSqrtPriceX64(ee.priceToSqrtPriceX64(e,n,o))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,o){let i=yn.getTickWithPriceAndTickspacing(e,t,n,o),s=ee.getSqrtPriceX64FromTick(i);return ee.sqrtPriceX64ToPrice(s,n,o)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");let i=n.ushln(Po),s=t.sub(e);return o?ne.mulDivRoundingUp(ne.mulDivCeil(i,s,t),mt,e):ne.mulDivFloor(i,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,o){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(de))throw new Error("sqrtPriceX64A must greater than 0");return o?ne.mulDivCeil(n,t.sub(e),dt):ne.mulDivFloor(n,t.sub(e),dt)}static getLiquidityFromTokenAmountA(e,t,n,o){e.gt(t)&&([e,t]=[t,e]);let i=n.mul(e).mul(t),s=t.sub(e),a=i.div(s);return o?ne.mulDivRoundingUp(a,mt,$i):a.shrn(Po)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,$i,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,o,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,o,!1),a=ce.getLiquidityFromTokenAmountB(t,e,i);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,i)}static getAmountsFromLiquidity(e,t,n,o,i){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,o,i),amountB:new re(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,o,i),a=ce.getTokenAmountBFromLiquidity(t,e,o,i);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,o,i)}}static getAmountsFromLiquidityWithSlippage(e,t,n,o,i,s,a){let{amountA:c,amountB:u}=ce.getAmountsFromLiquidity(e,t,n,o,s),l=i?1+a:1-a,m=new re(new v(c.toString()).mul(l).toFixed(0)),d=new re(new v(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:o,slippage:i,add:s,epochInfo:a,amountAddFee:c}){var h,w,k,B;let u=ee.priceToSqrtPriceX64(new v(e.price),e.mintA.decimals,e.mintB.decimals),l=ee.getSqrtPriceX64FromTick(t),m=ee.getSqrtPriceX64FromTick(n),d=s?1+i:1-i,p=ce.getAmountsFromLiquidity(u,l,m,o,s),[y,f]=[he(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,c),he(p.amountB,(w=e.mintB.extensions)==null?void 0:w.feeConfig,a,c)],[b,g]=[he(new re(new v(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,c),he(new re(new v(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:o,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Rt(y.expirationTime,f.expirationTime)}}},pn=class{static swapCompute(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f=!1){if(d.eq(de))throw new Error("amountSpecified must not be 0");if(y||(y=s?Nt.add(mt):Mt.sub(mt)),s){if(y.lt(Nt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(Mt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(de),g={amountSpecifiedRemaining:d,amountCalculated:de,sqrtPriceX64:m,tick:u>p?Math.min(p+le.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new re(0)},h=p,w=n[p],k=0,B=!s&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(de)&&!g.sqrtPriceX64.eq(y);){k>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=Y.nextInitTick(w,g.tick,l,s,B),x=S||null,L=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let R=Re.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:o,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:W}=we(e,t,h);L=W,w=n[h];try{x=Y.firstInitializedTick(w,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<Ye?T.tickNext=Ye:T.tickNext>tt&&(T.tickNext=tt),T.sqrtPriceNextX64=ee.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]=pn.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(qt)),g.liquidity=ce.addDelta(g.liquidity,R)}B=T.tickNext!=g.tick&&!s&&w.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let R=ee.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=R!=g.tick&&!s&&w.startTickIndex===R,g.tick=R}++k}try{let{nextStartIndex:T,isExist:S}=le.nextInitializedTickArray(g.tick,l,s,o,i);S&&p!==T&&(g.accounts.push(we(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:de,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,o,i){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),c=o.gte(de);if(c){let l=ne.mulDivFloor(o,Sr.sub(new re(i.toString())),Sr);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),o.mul(qt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ee.getNextSqrtPriceX64FromOutput(e,n,o.mul(qt),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(o.mul(qt))&&(s.amountOut=o.mul(qt)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=o.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new re(i),Sr.sub(new re(i))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var ve=60,dn=512,Y=class{static getTickArrayAddressByTick(e,t,n,o){let i=Y.getTickArrayStartIndexByTick(n,o),{publicKey:s}=we(e,t,i);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Y.getTickArrayStartIndexByTick(e,t),o=Math.floor((e-n)/t);if(o<0||o>=ve)throw new Error("tick offset in array overflow");return o}static getTickArrayBitIndex(e,t){let n=le.tickCount(t),o=e/n;return e<0&&e%n!=0?o=Math.ceil(o)-1:o=Math.floor(o),o}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*le.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*ve,o=Math.floor(e/n)+512;return Math.abs(o)}static checkTickArrayIsInitialized(e,t,n){let o=n*ve,i=Math.floor(t/o)+512,s=Math.abs(i);return{isInitialized:e.testn(s),startIndex:(s-512)*o}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*ve:e+t*ve}static mergeTickArrayBitmap(e){let t=new fd(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,o,i){let s=Math.floor(o/(n*ve));return[...Y.searchLowBitFromStart(e,t,s-1,i,n),...Y.searchHightBitFromStart(e,t,s,i,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Y.searchHightBitFromStart(e,t,0,dn,n)}static getAllInitializedTickArrayInfo(e,t,n,o,i){let s=[],a=Y.getAllInitializedTickArrayStartIndex(n,o,i);for(let c of a){let{publicKey:u}=we(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,o,i){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===o)break}let c=le.tickCount(i);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<Ye||e>tt}static nextInitTick(e,t,n,o,i){if(le.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(o)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(i||(a=a+1);a<ve;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=ve-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<ve;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let o=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new v(1).div(i),tickSqrtPriceX64:o}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let o=n?t:new v(1).div(t),i=yn.getTickWithPriceAndTickspacing(o,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new v(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let o=ee.getSqrtPriceX64FromTick(t),i=ee.sqrtPriceX64ToPrice(o,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:i,tickSqrtPriceX64:o}:{tick:t,price:new v(1).div(i),tickSqrtPriceX64:o}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let o=n?t:new v(1).div(t),i=yn.getTickWithPriceAndTickspacing(o,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ee.getSqrtPriceX64FromTick(i),a=ee.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:i,price:a}:{tick:i,price:new v(1).div(a)}}};var Iu=_([fe(8),E("bump"),Lt("index"),K(""),Xe("protocolFeeRate"),Xe("tradeFeeRate"),Lt("tickSpacing"),X(P(),8,"")]),yd=_([Xe("blockTimestamp"),Q("sqrtPriceX64"),Q("cumulativeTimePriceX64"),X(Q(),1,"")]),os=_([fe(8),qe("initialized"),K("poolId"),X(yd,1e3,"observations"),X(Q(),5,"")]),bd=_([E("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),Q("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),Q("rewardGrowthGlobalX64")]),fn=_([fe(8),E("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),E("mintDecimalsA"),E("mintDecimalsB"),Lt("tickSpacing"),Q("liquidity"),Q("sqrtPriceX64"),We("tickCurrent"),Lt("observationIndex"),Lt("observationUpdateDuration"),Q("feeGrowthGlobalX64A"),Q("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),Q("swapInAmountTokenA"),Q("swapOutAmountTokenB"),Q("swapInAmountTokenB"),Q("swapOutAmountTokenA"),E("status"),X(E(),7,""),X(bd,3,"rewardInfos"),X(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),X(P(),15*4-3,"padding")]),gd=_([Q("growthInsideLastX64"),P("rewardAmountOwed")]),Kr=_([fe(8),E("bump"),K("nftMint"),K("poolId"),We("tickLower"),We("tickUpper"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),X(gd,3,"rewardInfos"),X(P(),8,"")]),ck=_([fe(8),E("bump"),K("poolId"),We("tickLowerIndex"),We("tickUpperIndex"),Q("liquidity"),Q("feeGrowthInsideLastX64A"),Q("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),X(Q(),3,"rewardGrowthInside"),X(P(),8,"")]),Ad=_([We("tick"),Ba("liquidityNet"),Q("liquidityGross"),Q("feeGrowthOutsideX64A"),Q("feeGrowthOutsideX64B"),X(Q(),3,"rewardGrowthsOutsideX64"),X(Xe(),13,"")]),ho=_([fe(8),K("poolId"),We("startTickIndex"),X(Ad,ve,"ticks"),E("initializedTickCount"),X(E(),115,"")]),Bu=_([fe(329),X(K(),100,"whitelistMints")]),Tu=_([fe(8),K("poolId"),X(X(P(),8),es,"positiveTickArrayBitmap"),X(X(P(),8),es,"negativeTickArrayBitmap")]);var Ku=ue("Raydium_Clmm"),St={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},xe=class{static createPoolInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([Q("sqrtPriceX64"),P("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...St.createPool,...g]);return new xt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:o,mintA:i,mintB:s,ammConfigId:a,initialPriceX64:c,startTime:u,forerunCreate:l}=e,m=ze({fromPublicKey:o,programId:n}),[d,p]=[new U(i.address),new U(s.address)],y=[_n.createAccountWithSeed({fromPubkey:o,basePubkey:o,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(os.span),space:os.span,programId:n})],{publicKey:f}=pu(n,a,d,p),{publicKey:b}=Ji(n,f,d),{publicKey:g}=Ji(n,f,p);return y.push(this.createPoolInstruction(n,f,o,a,m.publicKey,d,b,new U(i.programId||Ue),p,g,new U(s.programId||Ue),lt(n,f).publicKey,c,u)),{signers:[],instructions:y,instructionTypes:[V.CreateAccount,V.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,w,k,B,T,S,x,L,I){let R=_([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),Q("liquidity"),P("amountMaxA"),P("amountMaxB"),qe("withMetadata"),E("optionBaseFlag"),qe("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:xu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],J=Buffer.alloc(R.span);R.encode({tickLowerIndex:h,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:L==="create",baseFlag:!1,optionBaseFlag:0},J);let G=Buffer.from([...St.openPosition,...J]);return new xt({keys:D,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=rs.generate();m.push(x),y=x.publicKey}let f=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:h}=we(d,p,b),{publicKey:w}=ge(n.wallet,y,Ue),{publicKey:k}=Tr(y),{publicKey:B}=yt(d,y),{publicKey:T}=mn(d,p,o,i),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,w,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,s,a,c,u);return{signers:m,instructions:[S],instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:k,personalPosition:B,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=rs.generate();m.push(x),y=x.publicKey}let f=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(d,p,f),{publicKey:h}=we(d,p,b),{publicKey:w}=ge(n.wallet,y,Ue),{publicKey:k}=Tr(y),{publicKey:B}=yt(d,y),{publicKey:T}=mn(d,p,o,i),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,w,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,i,f,b,u,s,a,c,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,w,k,B,T,S,x,L,I){let R=_([We("tickLowerIndex"),We("tickUpperIndex"),We("tickArrayLowerStartIndex"),We("tickArrayUpperStartIndex"),Q("liquidity"),P("amountMaxA"),P("amountMaxB"),qe("withMetadata"),E("optionBaseFlag"),qe("baseFlag")]),W=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[]],D=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:xu,isSigner:!1,isWritable:!1},{pubkey:xn,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],J=Buffer.alloc(R.span);R.encode({tickLowerIndex:h,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new Su(0),amountMaxA:S==="MintA"?x:L,amountMaxB:S==="MintA"?L:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},J);let G=Buffer.from([...St.openPosition,...J]);return new xt({keys:D,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=rs.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),{publicKey:g}=we(p,y,f),{publicKey:h}=we(p,y,b),{publicKey:w}=ge(n.wallet,m,Ue),{publicKey:k}=Tr(m),{publicKey:B}=yt(p,m),{publicKey:T}=mn(p,y,o,i),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,w,k,T,g,h,B,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),o,i,f,b,s,a,c,u,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?lt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:k,personalPosition:B,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,o,i){let s=_([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1}],c=Buffer.alloc(s.span);s.encode({},c);let u=Buffer.from([...St.closePosition,...c]);return new xt({keys:a,programId:e,data:u})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:o}){let i=new U(e.programId),{publicKey:s}=ge(n.wallet,o.nftMint,Ue),{publicKey:a}=yt(i,o.nftMint),c=[];return c.push(this.closePositionInstruction(i,n.wallet,o.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:c,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let w=_([Q("liquidity"),P("amountMaxA"),P("amountMaxB"),E("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(w.span);w.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMaxA:s,amountMaxB:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(c,u,l),{publicKey:p}=we(c,u,m),{publicKey:y}=ge(o.wallet,n.nftMint,Ue),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=mn(c,u,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,base:i,baseAmount:s,otherAmountMax:a}){let[c,u]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=we(c,u,l),{publicKey:p}=we(c,u,m),{publicKey:y}=ge(o.wallet,n.nftMint,Ue),{publicKey:f}=yt(c,n.nftMint),{publicKey:b}=mn(c,u,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(c,o.wallet,y,f,u,b,d,p,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),i,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?lt(c,u).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h){let w=_([Q("liquidity"),P("amountMaxA"),P("amountMaxB"),E("optionBaseFlag"),qe("baseFlag")]),k=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],T=Buffer.alloc(w.span);w.encode({liquidity:new Su(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,w){let k=_([Q("liquidity"),P("amountMinA"),P("amountMinB")]),B=[...w?[{pubkey:w,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:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...St.decreaseLiquidity,...S]);return new xt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:o,liquidity:i,amountMinA:s,amountMinB:a,programId:c}){let[u,l]=[new U(e.programId),new U(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=we(u,l,m),{publicKey:y}=we(u,l,d),{publicKey:f}=ge(o.wallet,n.nftMint,c),{publicKey:b}=yt(u,n.nftMint),{publicKey:g}=mn(u,l,n.tickLower,n.tickUpper),h=[];for(let k=0;k<e.rewardDefaultInfos.length;k++)h.push({poolRewardVault:new U(t.rewardInfos[k].vault),ownerRewardVault:o.rewardAccounts[k],rewardMint:new U(e.rewardDefaultInfos[k].mint.address)});let w=[];return w.push(this.decreaseLiquidityInstruction(u,o.wallet,f,b,l,g,p,y,o.tokenAccountA,o.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,i,s,a,Re.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?lt(u,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:w,instructionTypes:[V.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g){let h=_([P("amount"),P("otherAmountThreshold"),Q("sqrtPriceLimitX64"),qe("isBaseInput")]),w=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],B=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let T=Buffer.from([...St.swap,...B]);return new xt({keys:k,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:o,inputMint:i,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===i.toString(),g=[this.swapInstruction(l,o.wallet,m,new U(e.config.id),b?o.tokenAccountA:o.tokenAccountB,b?o.tokenAccountB:o.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,u,n,s,a,c,!0,lt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=_([P("openTime"),P("endTime"),Q("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:_n.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...St.initReward,...f]);return new xt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a=fu(i,s,o.mint).publicKey,c=wo(i).publicKey,u=[this.initRewardInstruction(i,n.wallet,s,c,new U(e.config.id),n.tokenAccount,o.programId,o.mint,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,o,i,s,a,c,u,l,m,d){let p=_([E("rewardIndex"),Q("emissionsPerSecondX64"),P("openTime"),P("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...St.setRewardEmissions,...f]);return new xt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===o.mint.toString()&&(a=d,c=new U(t.rewardInfos[d].vault),u=new U(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Ku.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=wo(i).publicKey,m=[this.setRewardInstruction(i,n.wallet,s,l,new U(e.config.id),n.tokenAccount,c,u,a,o.openTime,o.endTime,o.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,o,i,s,a){let c=_([E("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ue,isSigner:!1,isWritable:!1},{pubkey:on,isSigner:!1,isWritable:!1},{pubkey:zo,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...St.collectReward,...l]);return new xt({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:o}){let[i,s]=[new U(e.programId),new U(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===o.toString()&&(a=l,c=new U(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Ku.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(i,n.wallet,s,n.tokenAccount,c,o,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[V.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:o,amountOut:i,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:c}){let[u,l]=[new U(e.programId),new U(e.id)],[m,d]=[new U(t.vault.A),new U(t.vault.B)],[p,y]=[new U(e.mintA.address),new U(e.mintB.address)],f=e.mintA.address===o.toString(),b=[this.swapInstruction(u,n.wallet,l,new U(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,c,m,i,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[V.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as kd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Td}from"@solana/spl-token";import{PublicKey as Pd}from"@solana/web3.js";import Cu from"bn.js";var Ru=new Cu(25),Lu=new Cu(1e4),wd={4:3,5:3};var hd=ue("Raydium_liquidity_serum");function Ou({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,o;for(;n<100;){try{let i=t.concat(Buffer.from([n]),Buffer.alloc(7));o=Pd.createProgramAddressSync(i,r)}catch(i){if(i instanceof TypeError)throw i;n++;continue}return{publicKey:o,nonce:n}}throw hd.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}import Io from"bn.js";function Cr({programId:r}){let{publicKey:e}=ae([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function bn({name:r,programId:e,marketId:t}){let{publicKey:n}=ae([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function Id({programId:r,marketId:e}){let{publicKey:t}=ae([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function as({programId:r}){return ae([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function Nu({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:o,baseDecimals:i,quoteDecimals:s,programId:a,marketProgramId:c}){let u=bn({name:"amm_associated_seed",programId:a,marketId:t}),l=bn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=as({programId:a}),p=bn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=bn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=bn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Id({programId:a,marketId:t}),g=bn({name:"target_associated_seed",programId:a,marketId:t}),h=bn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=Ou({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:o,lpMint:l,baseDecimals:i,quoteDecimals:s,lpDecimals:i,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:w,lookupTableAccount:kd.default,configId:Cr({programId:a})}}var is;async function Wk({connection:r,poolKeysList:e,config:t}){is||(is=new On({connection:r}),await is.initStableModelLayout());let n=e.map(s=>uu({poolKeys:s}));return(await na(r,n.map(s=>s.instruction),"GetPoolData")).map(s=>{let a=oa(s,"GetPoolData"),c=new Io(Et(a,"status")),u=Number(Et(a,"coin_decimals")),l=Number(Et(a,"pc_decimals")),m=Number(Et(a,"lp_decimals")),d=new Io(Et(a,"pool_coin_amount")),p=new Io(Et(a,"pool_pc_amount")),y=new Io(Et(a,"pool_lp_supply")),f="0";try{f=Et(a,"pool_open_time")}catch{}return{status:c,baseDecimals:u,quoteDecimals:l,lpDecimals:m,baseReserve:d,quoteReserve:p,lpSupply:y,startTime:new Io(f)}})}var ss={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Rr=r=>{let e={},t=Td.toBase58();return Object.keys(r).map(n=>{let o=r[n],[i,s]=[o.baseMint.toBase58(),o.quoteMint.toBase58()];e[n]={id:n,version:4,status:o.status.toNumber(),programId:o.programId.toBase58(),mintA:et({address:i,programId:t,decimals:o.baseDecimal.toNumber()}),mintB:et({address:s,programId:t,decimals:o.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:o.poolPrice.toNumber(),mintAmountA:new v(o.mintAAmount.toString()).div(10**o.baseDecimal.toNumber()).toNumber(),mintAmountB:new v(o.mintBAmount.toString()).div(10**o.quoteDecimal.toNumber()).toNumber(),baseReserve:o.baseReserve,quoteReserve:o.quoteReserve,feeRate:new v(o.tradeFeeNumerator.toString()).div(o.tradeFeeDenominator.toString()).toNumber(),openTime:o.poolOpenTime.toString(),tvl:0,day:ss,week:ss,month:ss,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:o.marketId.toBase58(),configId:Cr({programId:o.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:et({address:o.lpMint.toBase58(),programId:t,decimals:Math.min(o.baseDecimal.toNumber(),o.quoteDecimal.toNumber())})}}),e};import at from"bn.js";var Bo=class extends Be{constructor(t){super(t);this.stableLayout=new On({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:o,baseIn:i}){let s=new at(new v(n).mul(10**t[i?"mintA":"mintB"].decimals).toFixed(0)),a=Pr(t[i?"mintB":"mintA"]),[c,u]=[new at(new v(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new at(new v(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new at(new v(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,v.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",i?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",i?t.mintB.symbol:t.mintA.symbol,"slippage:",`${o.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=i?"base":"quote";this.logDebug("input side:",m);let d=pt;s.isZero()||(d=m==="base"?$o(s.mul(u),c):$o(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=$o(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new Je(new at(1)).add(o).mul(d).quotient,b=new be(a,d),g=new be(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:o,amountInA:i,amountInB:s,fixedSide:a,config:c,txVersion:u,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",i,"amountInB:",s),(i.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:i.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[y,f]=[i.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new je(n.lpMint.address)}),w=[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"?(w.reverse(),k.reverse(),B.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,L]=w,[I,R]=k,[W,D]=B,J=o!=null?o:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),vt=await m.handleTokenAccount({side:"in",amount:W,mint:x.mint,tokenAccount:I,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=vt,Ze=Ke(vt,["tokenAccount"]);G.addInstruction(Ze);let Tn=await m.handleTokenAccount({side:"in",amount:D,mint:L.mint,tokenAccount:R,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:hn}=Tn,rn=Ke(Tn,["tokenAccount"]);G.addInstruction(rn);let Vo=await m.handleTokenAccount({side:"out",amount:0,mint:new je(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Xt}=Vo,kn=Ke(Vo,["tokenAccount"]);return G.addInstruction(kn),G.addInstruction({instructions:[su({poolInfo:n,poolKeys:J,userKeys:{baseTokenAccount:q,quoteTokenAccount:hn,lpTokenAccount:Xt,owner:this.scope.ownerPubKey},baseAmountIn:W,quoteAmountIn:D,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5AddLiquidity:V.AmmV4AddLiquidity],lookupTableAddress:J.lookupTableAccount?[J.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),u===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:o,amountIn:i,config:s,txVersion:a,computeBudgetConfig:c}=t,u=o!=null?o:await this.getAmmPoolKeys(n.id),[l,m,d]=[new je(n.mintA.address),new je(n.mintB.address),new je(n.lpMint.address)];this.logDebug("amountIn:",i),i.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",i.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:w}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:w}),{tokenAccount:k}=x,B=Ke(x,["tokenAccount"]);g.addInstruction(B);let L=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:w}),{tokenAccount:T}=L,S=Ke(L,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[ji({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:y,baseTokenAccount:k,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:i})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(c),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:o,createPositionInfo:i,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=vn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(u);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||ge(this.scope.ownerPubKey,q.accountInfo.mint,vn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let h=g[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let w=o.add(a!=null?a:new at(0)),k=t.mintA.address===Ie.WSOL.mint.toString(),B=t.mintB.address===Ie.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:vn,mint:new je(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:vn,mint:new je(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(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=ft[s.programId],Ze=Qe({programId:new je(s.programId),poolId:new je(s.id),owner:this.scope.ownerPubKey,version:q}),hn,rn=await this.scope.connection.getAccountInfo(Ze);if(rn&&(hn=Ln(q).decode(rn.data)),q!==6&&!hn){let{instruction:zt,instructionType:Gr}=lo({id:new je(s.id),programId:new je(s.programId),version:q,ledger:Ze,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[zt],instructionTypes:[Gr]})}let Xt=[];for(let zt of s.rewardInfos){let Gr=zt.mint.address===Ie.WSOL.mint.toString();if(g[zt.mint.address])Xt.push(g[zt.mint.address]);else{let{account:Ts,instructionParams:Is}=await this.scope.account.getOrCreateTokenAccount({mint:new je(zt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Gr,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});Ts||this.logAndCreateError("farm reward account not found:",zt.mint.address),Is&&b.addInstruction(Is),Xt.push(Ts)}}let kn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],vt={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:kn,lpAccount:h,rewardAccounts:Xt},Tn=ft[s.programId],Vo=Tn===6?mo(vt):Tn===5?po(vt):fo(vt),sc={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};b.addInstruction({instructions:[Vo],instructionTypes:[sc[Tn]]})}let I=await this.getAmmPoolKeys(t.id),R=ji({poolInfo:t,poolKeys:I,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:w});b.addInstruction({instructions:[R],instructionTypes:[t.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]});let[W,D]=t.mintA.address===n.mintA.address?[T,x]:[x,T],J=await this.scope.clmm.getClmmPoolKeys(t.id),G=await xe.openPositionFromBaseInstructions(F(C({poolInfo:n,poolKeys:J,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:W,tokenAccountB:D},withMetadata:"create"},i),{base:c,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:J.lookupTableAccount?[J.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:o,quoteMintInfo:i,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var W;let b=u.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),g=u.useSOLBalance&&o.mint.equals(Mu),h=u.useSOLBalance&&i.mint.equals(Mu),w=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});w.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(w.addInstruction(S||{}),k===void 0||T===void 0)throw Error("you don't has some token account");let x=Nu({version:4,marketVersion:3,marketId:n.marketId,baseMint:o.mint,quoteMint:i.mint,baseDecimals:o.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}=au(F(C({},L),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:T,userLpVault:ge(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:c,coinAmount:s,pcAmount:a}));return w.addInstruction({instructions:[I],instructionTypes:[R]}),w.addCustomComputeBudget(f),w.versionBuild({txVersion:p,extInfo:{address:L}})}async getCreatePoolFee({programId:t}){let n=Cr({programId:t}),o=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(o===null)throw Error("get config account error");return Ja.decode(o.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:o,mintOut:i,slippage:s}){let[a,c]=[o.toString(),i.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=a==t.mintA.address?"base":"quote";d==="quote"&&m.reverse();let[p,y]=m,f=t.version===4,b;if(f)b=new v(y.toString()).div(p.toString());else{let I=ou(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);d==="quote"?b=new v(1e6).div(I*1e6):b=new v(I*1e6).div(1e6)}let g=n,h=new at(0),w=new at(0);if(!g.isZero())if(f){w=to(g.mul(Ru),Lu);let I=g.sub(w),R=p.add(I);h=y.mul(I).div(R)}else{w=g.mul(new at(2)).div(new at(1e4));let I=g.sub(w);d==="quote"?h=new at(tu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber())):h=new at(nu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),I.toNumber()))}let k=new at(new v(h.toString()).mul(1-s).toFixed(0)),B=h,T=k,S=new v(h.toString()).div(new v(g.sub(w).toString()).toFixed(0));!g.isZero()&&!h.isZero()&&(S=new v(h.toString()).div(g.sub(w).toString()));let x=b.sub(S).div(b).mul(100);return{amountOut:B,minAmountOut:T,currentPrice:b,executionPrice:S,priceImpact:x,fee:w}}async swap({poolInfo:t,poolKeys:n,amountIn:o,amountOut:i,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=u||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===H.toBase58(),h=y&&b.address===H.toBase58(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:vn,mint:new je(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),w||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:w,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:vn,mint:new je(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d});m.addInstruction(T||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:h,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[hr({version:x,poolKeys:S,userKeys:{tokenAccountIn:w,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:o,amountOut:i,fixedSide:a})],instructionTypes:[x===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let o=await _e(this.scope.connection,t.map(l=>({pubkey:new je(l)})),n),i={},s=[];for(let l=0;l<t.length;l++){let m=o[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=go.decode(m.accountInfo.data);i[String(t[l])]=F(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await _e(this.scope.connection,s.map(l=>({pubkey:new je(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new at(Bd.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(i)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=F(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new v(p.toString()).div(new v(10).pow(m.quoteDecimal.toString())).div(new v(d.toString()).div(new v(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),o=Rr({[t]:n}),i=o[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[o[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:i,poolKeys:s[0]}}};import{PublicKey as se}from"@solana/web3.js";import gt from"bn.js";import{AccountLayout as _u,TOKEN_PROGRAM_ID as vu}from"@solana/spl-token";var xo=class extends Be{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var h;let{programId:t,owner:n=((h=this.scope.owner)==null?void 0:h.publicKey)||se.default,mint1:o,mint2:i,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new gt(new se(o.address).toBuffer()).gt(new gt(new se(i.address).toBuffer()))?[i,o,new v(1).div(a)]:[o,i,a],b=ee.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await xe.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:c,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(u),d.versionBuild({txVersion:m,extInfo:{address:F(C({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:c.toString(),vault:{A:g.address.mintAVault.toString(),B:g.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:f.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}},Pu),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===H.toString(),w=n.useSOLBalance&&e.mintB.address===H.toString(),[k,B]=s==="MintA"?[a,c]:[c,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:u,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 xe.openPositionFromBaseInstructions({poolInfo:e,poolKeys:I,ownerInfo:F(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:o,tickUpper:i,base:s,baseAmount:a,otherAmountMax:c,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(R),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:R.address})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:o,amountMaxB:i,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===H.toBase58(),h=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:u,checkCreateATAOwner:l});w&&(f=w),y.addInstruction(k||{});let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:u,checkCreateATAOwner:l});B&&(b=B),y.addInstruction(T||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let S=t||await this.getClmmPoolKeys(e.id),x=await xe.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:o,amountMaxB:i,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,amountMaxA:i,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=c.useSOLBalance&&t.mintA.address===H.toString(),g=c.useSOLBalance&&t.mintB.address===H.toString(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(w||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=xe.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:i,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:o,baseAmount:i,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===H.toString(),b=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(o==="MintA"?i:s).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?i:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(h||{});let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(o==="MintA"?s:i).isZero()?{payer:this.scope.ownerPubKey,amount:o==="MintA"?s:i}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});w&&(y=w),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),T=xe.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:o,baseAmount:i,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:o,ownerInfo:i,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=i.useSOLBalance&&t.mintA.address===H.toString(),f=i.useSOLBalance&&t.mintB.address===H.toString(),b,g,{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new se(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});b=h,w&&p.addInstruction(w);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new se(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let T=[];for(let I of t.rewardDefaultInfos){let R=i.useSOLBalance&&I.mint.address===H.toString(),W;if(I.mint.address===t.mintA.address)W=b;else if(I.mint.address===t.mintB.address)W=g;else{let{account:D,instructionParams:J}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(I.mint.programId),mint:new se(I.mint.address),notUseTokenAccount:R,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!R,associatedOnly:R?!1:u,checkCreateATAOwner:l});W=D,J&&p.addInstruction(J)}T.push(W)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await xe.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:o,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:c,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[V.ClmmDecreasePosition]});let L=C({},x.address);if(i.closePosition){let I=await xe.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:o});p.addInstruction({endInstructions:I.instructions,endInstructionTypes:I.instructionTypes}),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:o}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let i=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=xe.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return i.addInstruction(a).versionBuild({txVersion:o,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(n.mint.address),mint:new se(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new v(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=xe.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new se(n.mint.programId),mint:new se(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(y),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of o)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of o){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new v(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});f&&u.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=xe.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new se(m.mint.programId),mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(H),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new gt(new v(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:u?!1:o,checkCreateATAOwner:i});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=xe.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:o,associatedOnly:i=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=this.createTxBuilder(),l={};for(let m of o){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===H.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(m.mint.programId),mint:new se(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new gt(new v(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:i,checkCreateATAOwner:s});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=xe.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new se(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});u.addInstruction(b),l=C(C({},l),b.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(H),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:o,checkCreateATAOwner:i});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=xe.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(f=>f.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:o,checkCreateATAOwner:i});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=xe.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:o,amountOutMin:i,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d}){let p=this.createTxBuilder(),y=n.toString()===e.mintA.address,f=c.useSOLBalance&&e.mintA.address===H.toBase58(),b=c.useSOLBalance&&e.mintB.address===H.toBase58(),g;!s||s.equals(new v(0))?g=y?Nt.add(new gt(1)):Mt.sub(new gt(1)):g=ee.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let h;if(!h){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new se(e.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:f||!y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?o:0}:void 0,associatedOnly:f?!1:l,checkCreateATAOwner:m});h=B,T&&p.addInstruction(T)}let w;if(!w){let{account:B,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new se(e.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||y?{payer:c.feePayer||this.scope.ownerPubKey,amount:y?0:o}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=B,T&&p.addInstruction(T)}(!h||!w)&&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:w,mintAUseSOLBalance:f,mintBUseSOLBalance:b,associatedOnly:l});let k=t!=null?t:await this.getClmmPoolKeys(e.id);return p.addInstruction(xe.makeSwapBaseInInstructions({poolInfo:e,poolKeys:k,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:h,tokenAccountB:w},inputMint:new se(n),amountIn:o,amountOutMin:i,sqrtPriceLimitX64:g,remainingAccounts:u})),p.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:o=!0,checkCreateATAOwner:i=!1,programId:s,txVersion:a,computeBudgetConfig:c}){let u={};for(let m of this.scope.account.tokenAccountRawInfos)o?ge(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(u[m.accountInfo.mint.toString()]=m.pubkey):u[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(w=>!w.liquidity.isZero()||w.rewardInfos.find(k=>!k.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===H.toString(),y=n.useSOLBalance&&d.mintB.address===H.toString(),f=u[d.mintA.address];if(!f){let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new se(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:o,checkCreateATAOwner:i});f=w,k&&l.addInstruction(k)}let b=u[d.mintB.address];if(!b){let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new se(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:o,checkCreateATAOwner:i});b=w,k&&l.addInstruction(k)}u[d.mintA.address]=f,u[d.mintB.address]=b;let g=[];for(let w of d.rewardDefaultInfos){let k=n.useSOLBalance&&w.mint.address===H.toString(),B=u[w.mint.address];if(!B){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new se(w.mint.programId),mint:new se(w.mint.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:o});B=T,S&&l.addInstruction(S)}u[w.mint.address]=B,g.push(B)}let h=await this.getClmmPoolKeys(d.id);for(let w of t[m.id]){let k=xe.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:w,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new gt(0),amountMinA:new gt(0),amountMinB:new gt(0)});l.addInstruction(k)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:c}):l.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(wo(e).publicKey);return t?Bu.decode(t.data).whitelistMints.filter(o=>!o.equals(se.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new gt(1))).map(s=>yt(new se(e),s.accountInfo.mint).publicKey),o=await this.scope.connection.getMultipleAccountsInfo(n),i=[];return o.forEach(s=>{if(!s)return;let a=Kr.decode(s.data);i.push(a)}),i}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await _e(this.scope.connection,e.map(i=>({pubkey:new se(i)})),t),o={};for(let i=0;i<e.length;i++){let s=n[i];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[i]));let a=fn.decode(s.accountInfo.data),c=ee.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();o[String(e[i])]=F(C({},a),{currentPrice:c,programId:s.accountInfo.owner})}return o}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),o=await _e(this.scope.connection,Array.from(n).map(c=>({pubkey:new se(c)}))),i={};o.forEach(c=>{!c.accountInfo||(i[c.pubkey.toBase58()]=Iu.decode(c.accountInfo.data))});let s=await Re.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,y;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:et({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||vu.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?nn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:et({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||vu.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?nn((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[c].currentPrice,config:F(C({},i[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Re.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),o=await Kn({connection:this.scope.connection,mints:Array.from(n).map(m=>new se(m))}),{computeClmmPoolInfo:i,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:o}),a=await _e(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=ku(i[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(_u.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(_u.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=F(C({},i[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:c.config});return{poolInfo:c,poolKeys:u,computePoolInfo:i[e],tickData:s}}};import{PublicKey as te}from"@solana/web3.js";import{NATIVE_MINT as Vr,TOKEN_PROGRAM_ID as gn,AccountLayout as Dd}from"@solana/spl-token";import Fu from"bn.js";var us=new Fu(1e6);function xd(r,e,t){return r.mul(e).add(t).sub(new Fu(1)).div(t)}function Vu(r,e,t){return r.mul(e).div(t)}var Lr=class{static tradingFee(e,t){return xd(e,t,us)}static protocolFee(e,t){return Vu(e,t,us)}static fundFee(e,t){return Vu(e,t,us)}};import So from"bn.js";function Or(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Sd(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=Or(r,e);if(n.gt(Vn)){t=t.add(new So(1));let o=r.div(t);n=Or(r,t),n.gt(Vn)&&(o=o.add(new So(1)))}return[t,e]}var Vn=new So(0),Nr=class{static swapWithoutFees(e,t,n){let o=t.mul(n),i=t.add(e),[s,a]=Sd(o,i),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,o,i){let s=e.mul(n).div(t),a=e.mul(o).div(t);if(i===0)return{tokenAmount0:s,tokenAmount1:a};if(i===1)return Or(e.mul(n),t).gt(Vn)&&s.gt(Vn)&&(s=s.add(new So(1))),Or(e.mul(o),t).gt(Vn)&&a.gt(Vn)&&(a=a.add(new So(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};var Eu=(t=>(t[t.Floor=0]="Floor",t[t.Ceiling=1]="Ceiling",t))(Eu||{}),Mr=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,o){let i=Lr.tradingFee(e,o),s=e.sub(i),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Nr.swapWithoutFees(s,t,n),u=a.add(i);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:i}}};var Kd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Cd=Buffer.from("amm_config","utf8"),Rd=Buffer.from("pool","utf8"),Ld=Buffer.from("pool_lp_mint","utf8"),Od=Buffer.from("pool_vault","utf8"),Nd=Buffer.from("observation","utf8");function Fn(r){return ae([Kd],r)}function Md(r,e){return ae([Cd,Vd(e)],r)}function _d(r,e,t,n){return ae([Rd,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function vd(r,e){return ae([Ld,e.toBuffer()],r)}function Du(r,e,t){return ae([Od,e.toBuffer(),t.toBuffer()],r)}function cs(r,e){return ae([Nd,e.toBuffer()],r)}function Vd(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r,!1),new Uint8Array(e)}function Wu({programId:r,mintA:e,mintB:t}){let n=Md(r,0).publicKey,o=Fn(r).publicKey,i=_d(r,n,e,t).publicKey,s=vd(r,i).publicKey,a=Du(r,i,e).publicKey,c=Du(r,i,t).publicKey,u=cs(r,i).publicKey;return{poolId:i,configId:n,authority:o,lpMint:s,vaultA:a,vaultB:c,observationId:u}}import{TransactionInstruction as Ko}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ls,TOKEN_2022_PROGRAM_ID as qu,ASSOCIATED_TOKEN_PROGRAM_ID as Fd}from"@solana/spl-token";var Ed=ue("Raydium_cpmm"),Co={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173]};function Uu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f,b,g,h,w){let k=_([P("amountMaxA"),P("amountMaxB"),P("openTime")]),B=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Fd,isSigner:!1,isWritable:!1},{pubkey:jo,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],T=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:h,openTime:w},T),new Ko({keys:B,programId:r,data:Buffer.from([...Co.initialize,...T])})}function Gu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:qu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Ed.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new Ko({keys:b,programId:r,data:Buffer.from([...Co.deposit,...g])})}function Xu(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){let f=_([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:ls,isSigner:!1,isWritable:!1},{pubkey:qu,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Qo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new Ko({keys:b,programId:r,data:Buffer.from([...Co.withdraw,...g])})}function _r(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=_([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new Ko({keys:g,programId:r,data:Buffer.from([...Co.swapBaseInput,...h])})}function hI(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y,f){let b=_([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new Ko({keys:g,programId:r,data:Buffer.from([...Co.swapBaseOutput,...h])})}import Ee from"bn.js";var zu=_([fe(8),E("bump"),qe("disableCreatePool"),Lt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(P(),16)]),vr=_([fe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),E("bump"),E("status"),E("lpDecimals"),E("mintDecimalA"),E("mintDecimalB"),P("lpAmount"),P("protocolFeesMintA"),P("protocolFeesMintB"),P("fundFeesMintA"),P("fundFeesMintB"),P("openTime"),X(P(),32)]);var Ro=class extends Be{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await _e(this.scope.connection,e.map(m=>({pubkey:new te(m)}))),o={},i=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=vr.decode(d.accountInfo.data);o[String(e[m])]=F(C({},p),{programId:d.accountInfo.owner}),i.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...i],d=await _e(this.scope.connection,m.map(p=>({pubkey:new te(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]]=zu.decode(y.data)}}let c={},u=await _e(this.scope.connection,s.map(m=>({pubkey:new te(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new Ee(Dd.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(o)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=F(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new v(y.toString()).div(new v(10).pow(d.mintDecimalB)).div(new v(p.toString()).div(new v(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,o)=>{var c,u,l,m;let i=e[o],[s,a]=[i.mintA.toBase58(),i.mintB.toBase58()];return F(C({},n),{[o]:F(C({},i),{id:new te(o),configInfo:i.configInfo,version:7,authority:Fn(i.programId).publicKey,mintA:et({address:s,decimals:i.mintDecimalA,programId:i.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?nn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:et({address:a,decimals:i.mintDecimalB,programId:i.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?nn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Kn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),o=et({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?nn(n[t.mintA.toBase58()].feeConfig):void 0}}),i=et({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?nn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=et({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:gn.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:o,mintB:i,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new v(t.vaultAAmount.toString()).div(10**o.decimals).toNumber(),mintAmountB:new v(t.vaultBAmount.toString()).div(10**i.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:o,mintB:i,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Fn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:o,associatedOnly:i=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:c}=m,u=Ke(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var W,D,J;let d=o.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),p=new Ee(new te(u.mintA.address).toBuffer()).lte(new Ee(new te(u.mintB.address).toBuffer())),[y,f]=p?[u.mintA,u.mintB]:[u.mintB,u.mintA],[b,g]=p?[u.mintAAmount,u.mintBAmount]:[u.mintBAmount,u.mintAAmount],h=o.useSOLBalance&&y.address===Vr.toBase58(),w=o.useSOLBalance&&f.address===Vr.toBase58(),[k,B]=[new te(y.address),new te(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 te(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:d,amount:g}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!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=Wu({programId:e,mintA:k,mintB:B});return T.addInstruction({instructions:[Uu(e,this.scope.ownerPubKey,R.configId,R.authority,R.poolId,k,B,R.lpMint,S,L,ge(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,t,new te((D=y.programId)!=null?D:gn),new te((J=f.programId)!=null?J:gn),R.observationId,b,g,n)],instructionTypes:[V.CpmmCreatePool]}),T.addCustomComputeBudget(c),T.versionBuild({txVersion:a,extInfo:{address:F(C({},R),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:o,baseIn:i,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),o.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:o.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:F(C({},t),{lpAmount:new v(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Je(0),baseIn:i,epochInfo:await this.scope.fetchEpochInfo(),amount:new v(o.toString()).div(10**(i?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,w=t.mintA.address===Vr.toString(),k=t.mintB.address===Vr.toString(),B=this.createTxBuilder(),[T,S]=[new te(t.mintA.address),new te(t.mintB.address)],{account:x,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new te(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||(i?o:h).isZero()?{payer:this.scope.ownerPubKey,amount:i?o:h}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{});let{account:I,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new te(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(i?h:o).isZero()?{payer:this.scope.ownerPubKey,amount:i?h:o}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(R||{}),!x&&!I&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let W=await m.getCreatedTokenAccount({mint:new te(t.lpMint.address)}),Ze=await m.handleTokenAccount({side:"out",amount:0,mint:new te(t.lpMint.address),tokenAccount:W,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:D}=Ze,J=Ke(Ze,["tokenAccount"]);B.addInstruction(J);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Je(new Ee(1)).sub(s);return B.addInstruction({instructions:[Gu(new te(t.programId),this.scope.ownerPubKey,new te(G.authority),new te(t.id),D,x,I,new te(G.vault.A),new te(G.vault.B),T,S,new te(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,i?b.amount:h,i?h:b.amount)],instructionTypes:[V.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var D,J;let{poolInfo:t,poolKeys:n,lpAmount:o,slippage:i,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new Je(new Ee(1)).sub(i),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(o.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(o.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[he(l,t.mintA.extensions.feeConfig,d,!1),he(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new te(t.mintA.address),new te(t.mintB.address)],w=g.equals(H),k=h.equals(H),B,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new te(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:!w,checkCreateATAOwner:!1});B=S,x&&b.addInstruction(x);let{account:L,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new te(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 te(t.lpMint.address)});R||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let W=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Xu(new te(t.programId),this.scope.ownerPubKey,new te(W.authority),new te(t.id),R,B,T,new te(W.vault.A),new te(W.vault.B),g,h,new te(t.lpMint.address),o,l.sub((D=p.fee)!=null?D:new Ee(0)),m.sub((J=y.fee)!=null?J:new Ee(0)))],instructionTypes:[V.CpmmWithdrawLiquidity],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var x,L,I,R;let{poolInfo:t,poolKeys:n,baseIn:o,inputAmount:i,swapResult:s,slippage:a=0,config:c,computeBudgetConfig:u,txVersion:l}=e,{bypassAssociatedCheck:m,checkCreateATAOwner:d,associatedOnly:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},c),y=this.createTxBuilder(),[f,b]=[new te(t.mintA.address),new te(t.mintB.address)];s.destinationAmountSwapped=s.destinationAmountSwapped.mul(new Ee((1-a)*1e4)).div(new Ee(1e4));let g=t.mintA.address===H.toBase58(),h=t.mintB.address===H.toBase58(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({mint:f,tokenProgram:new te((x=t.mintA.programId)!=null?x:gn),owner:this.scope.ownerPubKey,createInfo:g||!o?{payer:this.scope.ownerPubKey,amount:o?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 te((L=t.mintB.programId)!=null?L:gn),owner:this.scope.ownerPubKey,createInfo:h||o?{payer:this.scope.ownerPubKey,amount:o?0:s.sourceAmountSwapped}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:p,checkCreateATAOwner:d});T&&y.addInstruction(T),(!w||!B)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:w,mintBTokenAcc:B,mintAUseSOLBalance:g,mintBUseSOLBalance:h,associatedOnly:p});let S=n!=null?n:await this.getCpmmPoolKeys(t.id);return y.addInstruction({instructions:[_r(new te(t.programId),this.scope.ownerPubKey,new te(S.authority),new te(S.config.id),new te(t.id),o?w:B,o?B:w,new te(S.vault[o?"A":"B"]),new te(S.vault[o?"B":"A"]),new te((I=t[o?"mintA":"mintB"].programId)!=null?I:gn),new te((R=t[o?"mintB":"mintA"].programId)!=null?R:gn),o?f:b,o?b:f,cs(new te(t.programId),new te(t.id)).publicKey,i,s.destinationAmountSwapped)],instructionTypes:[o?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut]}),y.addCustomComputeBudget(u),y.versionBuild({txVersion:l})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:o}){let i=n.toString()===e.mintB.address,s=Mr.swap(t,i?e.baseReserve:e.quoteReserve,i?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new v(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new Ee((1-o)*1e4)).div(new Ee(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:o,slippage:i,epochInfo:s,baseIn:a}){var h,w,k,B,T,S,x,L;let c=1-Number(i.toSignificant())/100,u=new Ee(new v(o).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=he(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((h=l.fee)!=null?h:new Ee(0)),d=new Ee(new v(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,v.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(k=(w=l.fee)==null?void 0:w.toString())!=null?k:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${i.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:pt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let I=Wd(y,t,n,d);this.logDebug("lpAmountData:",{amountA:I.amountA.toString(),amountB:I.amountB.toString()}),f=he(I[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Je(new Ee(1)).add(i),g=he(b.mul(f.amount.sub((B=f.fee)!=null?B:new Ee(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(L=(x=g.fee)==null?void 0:x.toString())!=null?L:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function Wd(r,e,t,n){let o=r.mul(e).div(n);!o.isZero()&&!r.mul(e).mod(n).isZero()&&(o=o.add(new Ee(1)));let i=r.mul(t).div(n);return!i.isZero()&&!r.mul(t).mod(n).isZero()&&(i=i.add(new Ee(1))),{amountA:o,amountB:i}}import{PublicKey as wn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Se,TOKEN_2022_PROGRAM_ID as Dr,createTransferInstruction as Ju}from"@solana/spl-token";import Wr from"bn.js";import{TOKEN_PROGRAM_ID as ms,TOKEN_2022_PROGRAM_ID as qd,ASSOCIATED_TOKEN_PROGRAM_ID as Ud}from"@solana/spl-token";import{PublicKey as z,TransactionInstruction as ds,SystemProgram as ps}from"@solana/web3.js";import An from"bn.js";function AB(r,e,t,n,o,i,s,a,c,u,l,m){let d=_([E("instruction"),P("amountIn"),P("amountOut")]),p=[{pubkey:ps.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new z(t.programId),isSigner:!1,isWritable:!1},{pubkey:new z(t.id),isSigner:!1,isWritable:!0},{pubkey:new z(n.id),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let f=ke(t);p.push({pubkey:f.config.id,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.A:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.mintA.address.equals(c)?f.vault.B:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},...m.map(b=>({pubkey:b,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:new z("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0})}else{let f=ke(t);p.push({pubkey:f.authority,isSigner:!1,isWritable:!1},{pubkey:f.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:f.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:f.openOrders,isSigner:!1,isWritable:!0},{pubkey:f.vault.A,isSigner:!1,isWritable:!0},{pubkey:f.vault.B,isSigner:!1,isWritable:!0},{pubkey:f.marketId,isSigner:!1,isWritable:!0},{pubkey:f.marketBids,isSigner:!1,isWritable:!0},{pubkey:f.marketAsks,isSigner:!1,isWritable:!0},{pubkey:f.marketEventQueue,isSigner:!1,isWritable:!0},...f.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:f.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:f.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:f.id,isSigner:!1,isWritable:!0},{pubkey:f.id,isSigner:!1,isWritable:!0}])}let y=Buffer.alloc(d.span);return d.encode({instruction:4,amountIn:u,amountOut:l},y),new ds({keys:p,programId:r,data:y})}function wB(r,e,t,n,o,i,s,a,c,u){let l=_([E("instruction")]),m=[{pubkey:ps.programId,isSigner:!1,isWritable:!1},{pubkey:ms,isSigner:!1,isWritable:!1},{pubkey:new z(String(n.programId)),isSigner:!1,isWritable:!1},{pubkey:new z(String(n.id)),isSigner:!1,isWritable:!0},{pubkey:new z(String(t.id)),isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!0,isWritable:!1}];if(e.type==="Concentrated"){let p=ke(n);m.push({pubkey:p.config.id,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.A:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.mintA.address.equals(c)?p.vault.B:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},...u.map(y=>({pubkey:y,isSigner:!1,isWritable:!0})))}else if(e.pooltype.includes("StablePool")){let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:new z("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0})}else{let p=ke(n);m.push({pubkey:p.authority,isSigner:!1,isWritable:!1},{pubkey:p.marketProgramId,isSigner:!1,isWritable:!1},{pubkey:p.marketAuthority,isSigner:!1,isWritable:!1},{pubkey:p.openOrders,isSigner:!1,isWritable:!0},{pubkey:p.vault.A,isSigner:!1,isWritable:!0},{pubkey:p.vault.B,isSigner:!1,isWritable:!0},{pubkey:p.marketId,isSigner:!1,isWritable:!0},{pubkey:p.marketBids,isSigner:!1,isWritable:!0},{pubkey:p.marketAsks,isSigner:!1,isWritable:!0},{pubkey:p.marketEventQueue,isSigner:!1,isWritable:!0},...p.marketProgramId.toString()==="srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"?[{pubkey:p.marketBaseVault,isSigner:!1,isWritable:!0},{pubkey:p.marketQuoteVault,isSigner:!1,isWritable:!0}]:[{pubkey:p.id,isSigner:!1,isWritable:!0},{pubkey:p.id,isSigner:!1,isWritable:!0}])}let d=Buffer.alloc(l.span);return l.encode({instruction:5},d),new ds({keys:m,programId:r,data:d})}function Gd(r,e,t,n,o,i,s,a,c,u,l,m,d,p,y){var T;let f=[],b=[A({pubkey:ms,isWritable:!1}),A({pubkey:qd,isWritable:!1}),A({pubkey:Ud,isWritable:!1}),A({pubkey:ps.programId,isWritable:!1}),A({pubkey:e,isSigner:!0})];b.push(A({pubkey:t})),b.push(A({pubkey:o}));let g=[c,u],h=[l,m],w=[i,s,a];for(let S=0;S<g.length;S++){let x=g[S],L=w[S]===x.mintA.address;if(b.push(A({pubkey:new z(x.programId),isWritable:!1})),S===g.length-1?b.push(A({pubkey:o})):b.push(A({pubkey:n})),b.push(A({pubkey:new z(w[S])})),b.push(A({pubkey:new z(w[S+1])})),x.version===6){let I=h[S];b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(L?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(L?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)})),b.push(A({pubkey:Qo})),b.push(A({pubkey:lt(new z(x.programId),new z(x.id)).publicKey})),f.push(Xd(x.sqrtPriceX64.toString(),L));for(let R of(T=y[S])!=null?T:[])b.push(A({pubkey:new z(R)}))}else if(x.version===5){let I=h[S];b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(I.marketProgramId)})),b.push(A({pubkey:new z(I.marketAuthority)})),b.push(A({pubkey:da,isWritable:!1})),b.push(A({pubkey:new z(I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.marketId)})),b.push(A({pubkey:new z(I.marketBids)})),b.push(A({pubkey:new z(I.marketAsks)})),b.push(A({pubkey:new z(I.marketEventQueue)})),b.push(A({pubkey:new z(I.marketBaseVault)})),b.push(A({pubkey:new z(I.marketQuoteVault)}))}else if(x.version===4){let I=h[S],R=x.status!==1;b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(I.authority),isWritable:!1})),b.push(A({pubkey:new z(R?I.id:I.marketProgramId)})),b.push(A({pubkey:new z(R?I.id:I.marketAuthority)})),b.push(A({pubkey:new z(R?I.id:I.openOrders)})),b.push(A({pubkey:new z(I.vault.A)})),b.push(A({pubkey:new z(I.vault.B)})),b.push(A({pubkey:new z(R?I.id:I.marketId)})),b.push(A({pubkey:new z(R?I.id:I.marketBids)})),b.push(A({pubkey:new z(R?I.id:I.marketAsks)})),b.push(A({pubkey:new z(R?I.id:I.marketEventQueue)})),b.push(A({pubkey:new z(R?I.id:I.marketBaseVault)})),b.push(A({pubkey:new z(R?I.id:I.marketQuoteVault)}))}else if(x.version===7){let I=h[S];b.push(A({pubkey:new z(I.authority)})),b.push(A({pubkey:new z(I.config.id)})),b.push(A({pubkey:new z(I.id)})),b.push(A({pubkey:new z(L?I.vault.A:I.vault.B)})),b.push(A({pubkey:new z(L?I.vault.B:I.vault.A)})),b.push(A({pubkey:new z(x.observationId)}))}else throw Error("pool type error")}let k=_([E("insId"),P("amountIn"),P("amountOut"),X(Q(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new ds({keys:b,programId:r,data:B})}function Xd(r,e){if(r)if(e){let t=new An(r).div(new An(25));return t.gt(Br)?t:Br}else{let t=new An(r).mul(new An(25));return t.lt(xr)?t:xr}else return e?Br:xr}function Qu({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var o,i,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=ke(m),p=t.equals(d.mintA.address)?Nt.add(mt):Mt.sub(mt);return xe.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((i=(o=n.minAmountOut.fee)==null?void 0:o.raw)!=null?i:new An(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[_r(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 z(m[d?"mintA":"mintB"].address),new z(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:[hr({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new An(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?V.AmmV5SwapBaseIn:V.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Gd(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new An(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var Yu={[di.toBase58()]:3},ju={3:di};var fs=_([fe(5),fe(8),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),fe(7)]),Hu={3:fs};import{PublicKey as Zu}from"@solana/web3.js";var Fr=ue("Serum"),Er=class{static getProgramId(e){let t=ju[e];return t||Fr.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Yu[t];return n||Fr.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Hu[e];return t||Fr.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],o=0,i;for(;o<100;){try{let s=n.concat(Buffer.from([o]),Buffer.alloc(7));i=Zu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;o++;continue}return{publicKey:i,nonce:o}}return Fr.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:Zu.default,nonce:o}}};var Gt=new Wr(0),Lo=class extends Be{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(H));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:o=1}=e,i=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Z(t);for(let u=0;u<i.length;u++)c.gte(i[u].amount)?(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(i[u].amount)):(s.addInstruction({instructions:[Ot({tokenAccount:i[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),no({destination:a.addresses.newAccount,source:i[u].publicKey,amount:c,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:o})}async wrapWSol(e,t,n){let o=await this.getWSolAccounts(),i=this.createTxBuilder(),s=await Dt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(s),o.length&&i.addInstruction({instructions:[no({destination:o[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Ot({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:o,routeProgram:i,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(H),m=u.amount.token.mint.equals(H),d=c.amount.token.mint,p=u.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Dr:Se,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?Dr:Se);else{let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Dr:Se,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:[Ot({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Se})],endInstructionTypes:[V.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?Dr:Se)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),w=Qu({routeProgram:i,inputMint:d,swapInfo:F(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[Ju(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]}),k.addInstruction(w);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[Ju(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]})}return a.addInstruction(w),s===0?a.sizeCheckBuildV0({computeBudgetConfig:o,address:w.address}):a.sizeCheckBuild({computeBudgetConfig:o,address:w.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ma,clmm:n=pa,cpmm:o=fa}=e||{},i=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:go.offsetOf("baseMint"),length:64}}),s=_([K("baseMint"),K("quoteMint")]),a=i.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=_([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:fn.span}],dataSlice:{offset:fn.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(o,{dataSlice:{offset:vr.offsetOf("mintA"),length:64}})).map(p=>{let y=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:o,cpmmPools:i}){e=e.toString()===wn.default.toString()?H:e,t=t.toString()===wn.default.toString()?H:t;let s={},a={},c={},u=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Se,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:Se,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:Se,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:Se,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,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:Se,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:Se,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:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,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:Se,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:Se,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:Se,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&&c[y.id.toString()]===void 0?c[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let o=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let i=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Rr(i),a={};Object.values(s).forEach(f=>{o.delete(f.mintA.address),a[f.mintA.address]={address:new wn(f.mintA.address),programId:Se,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},o.delete(f.mintB.address),a[f.mintB.address]={address:new wn(f.mintB.address),programId:Se,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(c).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Se)?(o.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(b),f.mintProgramB.equals(Se)?(o.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):o.add(g)}),console.log("fetching mints info, total: ",o.size);let u=await Kn({connection:this.scope.connection,mints:Array.from(o).map(f=>new wn(f))});a=C(C({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(C({},f),{[b]:F(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:i,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:o,simulateCache:i,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,h,w,k,B,T,S,x,L;let m=l===void 0?new Wr(0):e.raw.mul(new Wr(l.feeBps.toNumber())).div(new Wr(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(C({},t),{address:ut(t.address).toString()}),b=[];for(let I of n)try{b.push(F(C({},this.computeAmountOut({itemPool:I,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(R){this.logDebug("direct error",I.version,I.id.toString(),R.message)}this.logDebug("direct done");for(let[I,R]of Object.entries(o)){let W={chainId:101,address:I,programId:R.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:R.mDecimals,tags:[],extensions:{}},D=R.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:W,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var rn,Xt,kn,vt;let Ze=G===void 0?Gt:G.data.amountOut.amount.raw.sub((Xt=(rn=G.data.amountOut.fee)==null?void 0:rn.raw)!=null?Xt:Gt),hn=q===void 0?Gt:q.data.amountOut.amount.raw.sub((vt=(kn=q.data.amountOut.fee)==null?void 0:kn.raw)!=null?vt:Gt);return Ze.lt(hn)?1:-1})[0];if(D===void 0)continue;let J=new be(Pr(W),D.data.amountOut.amount.raw.sub((h=(g=D.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Gt));for(let G of R.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:i,chainTime:c,epochInfo:u,slippage:a,outputToken:f,amountIn:J});b.push(F(C({},q),{allTrade:!!(D.data.allTrade&&q.allTrade),amountIn:D.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new v(new rt({baseToken:D.data.amountIn.amount.token,denominator:D.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((k=(w=q.amountOut.fee)==null?void 0:w.raw)!=null?k:Gt)}).toFixed()),priceImpact:new v(D.data.priceImpact.add(q.priceImpact).toFixed()),fee:[D.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[D.pool,G],remainingAccounts:[D.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(B=q.amountOut.fee)!=null&&B.raw?new be(D.data.amountOut.amount.token,((S=(T=D.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Gt).add((L=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?L:Gt)):void 0,middleToken:D.data.amountOut.amount.token,poolReady:D.data.poolReady&&q.poolReady,poolType:[D.data.poolType,q.poolType],feeConfig:y,expirationTime:Rt(D.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(I=>(I.allTrade||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(Gt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:o,epochInfo:i,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:w}=Re.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:i,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new v(y.toFixed()),executionPrice:new v(f.toFixed()),priceImpact:new v(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<o,poolType:"CLMM",slippage:s,clmmExPriceX64:[w],expirationTime:Rt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(F(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(F(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(c.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<o,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:bo(F(C({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:bo(F(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(c.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<o,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let o=new Set(e.filter(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(o.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(o)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(o));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await _e(this.scope.connection,Array.from(s).map(l=>({pubkey:new wn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=fs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Er.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(C({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=C({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:as({programId:new wn(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Fn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:et({address:u.mintLp.toBase58(),programId:Se.toBase58(),decimals:u.lpDecimals}),config:F(C({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{TOKEN_PROGRAM_ID as zd}from"@solana/spl-token";import{PublicKey as Qd,Transaction as ys,TransactionInstruction as Yd}from"@solana/web3.js";import $u from"bn.js";var He=class extends Be{static getPdaPoolId(e,t){return ae([He.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,o){return ae([He.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new $u(o).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:o,chainTime:i}){if(n.length===0)return[];let s=n.map(l=>He.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<He.VERSION_PROJECT.length;l++)a.push(...s.map(m=>He.getPdaOwnerId(t,m,o,l).publicKey));let c=await ht(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=c[d],b=c[n.length+l];if(!(f&&b)||f.data.length!==He.POOL_LAYOUT.span||b.data.length!==He.OWNER_LAYOUT.span)continue;let g=He.POOL_LAYOUT.decode(f.data),h=He.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),k=g.endTime.toNumber(),B=h.tokenInfo.map(x=>x.debtAmount.gt(new $u(0))).filter(x=>!x).length!==3,T=i>w&&i<k&&g.status===1,S=B&&T;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:He.VERSION_PROJECT[m],openTime:w,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 u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Ie.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!c.mintAddress.equals(Ie.WSOL.mint),associatedOnly:c.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),i.push(u)}n.addInstruction({instructions:[He.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:o,ownerPda:e.ownerAccountId,claimAddress:i}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),o=t.wallet||this.scope.ownerPubKey,i={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Ie.WSOL.mint),createInfo:{payer:o,amount:0},skipCloseAccount:!m.mintAddress.equals(Ie.WSOL.mint),associatedOnly:m.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(i[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[He.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:o,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return or(c,[o,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ys().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ys().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ys().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let o=_([]),i=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:zd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(o.span);o.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Yd({keys:i,programId:e,data:a})}},At=He;At.CLAIMED_NUM=3,At.POOL_LAYOUT=_([fe(8),E("bump"),E("status"),P("openTime"),P("endTime"),K("ammId"),X(_([E("mintDecimals"),K("mintAddress"),K("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(P(),10,"padding")]),At.OWNER_LAYOUT=_([fe(8),E("bump"),E("version"),K("poolId"),K("owner"),P("lpAmount"),X(_([K("mintAddress"),P("debtAmount"),P("claimedAmount")]),He.CLAIMED_NUM,"tokenInfo"),X(P(),4,"padding")]),At.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Qd(e)),At.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},At.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Oo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as rc}from"@solana/spl-token";import No from"bn.js";import{TransactionInstruction as Hd,SYSVAR_RENT_PUBKEY as Zd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ec}from"@solana/spl-token";import{createInitializeAccountInstruction as tc}from"@solana/spl-token";import{SystemProgram as Pn,Transaction as nc}from"@solana/web3.js";function jd(r="accountFlags"){let e=new dr(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var bs=_([fe(5),jd("accountFlags"),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),fe(7)]);function Jd({programId:r,marketInfo:e}){let t=_([E("version"),Xe("instruction"),P("baseLotSize"),P("quoteLotSize"),Lt("feeRateBps"),P("vaultSignerNonce"),P("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:Zd,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),o=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},o),new Hd({keys:n,programId:r,data:o})}async function oc({connection:r,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new nc,o=await r.getMinimumBalanceForRentExemption(165);n.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:o,space:165,programId:ec}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:o,space:165,programId:ec}),tc(t.baseVault.publicKey,t.baseMint,t.vaultOwner),tc(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let i=new nc;return i.add(Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(bs.span),space:bs.span,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await r.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await r.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Pn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await r.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Jd({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.InitAccount,V.InitAccount]},{transaction:i,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.InitMarket]}]}var En=class extends Be{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:o,dexProgramId:i,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,txVersion:u,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=ze({fromPublicKey:m,programId:i}),p=ze({fromPublicKey:m,programId:i}),y=ze({fromPublicKey:m,programId:i}),f=ze({fromPublicKey:m,programId:i}),b=ze({fromPublicKey:m,programId:i}),g=ze({fromPublicKey:m,programId:rc}),h=ze({fromPublicKey:m,programId:rc}),w=0,k=new No(100);function B(){let W=new No(0);for(;;)try{return{vaultOwner:Oo.createProgramAddressSync([d.publicKey.toBuffer(),W.toArrayLike(Buffer,"le",8)],i),vaultSignerNonce:W}}catch{if(W.iaddn(1),W.gt(new No(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=B(),x=new No(Math.round(10**e.decimals*n)),L=new No(Math.round(n*10**t.decimals*o));if(x.eq(pt))throw Error("lot size is too small");if(L.eq(pt))throw Error("tick size or lot size is too small");let I=await oc({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:w,quoteDustThreshold:k,vaultSignerNonce:S,baseLotSize:x,quoteLotSize:L,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c}}),R=this.createTxBuilder();R.addInstruction({instructions:I[0].transaction.instructions,signers:I[0].signer});for await(let W of I.slice(1,I.length))R.addInstruction({instructions:W.transaction.instructions,signers:W.signer,instructionTypes:W.instructionTypes});return u===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 Oo(e.mint),quoteMin:new Oo(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 Oo(e.mint),quoteMin:new Oo(t.mint)}})}};import{PublicKey as _o}from"@solana/web3.js";import{TransactionInstruction as As,SYSVAR_CLOCK_PUBKEY as $d}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ws}from"@solana/spl-token";var gs=_([E("instruction"),Pa("amount")]),Mo=_([E("instruction")]);function nS({programId:r,amount:e,instructionKeys:t}){let n=[{pubkey:jo,isSigner:!1,isWritable:!1},{pubkey:ws,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:ti,isSigner:!1,isWritable:!1},...Object.entries(t).map(([i,s])=>({pubkey:s,isSigner:i==="userOwner",isWritable:!["authority","userOwner","userIdoCheck","userStakeInfo"].includes(i)}))],o=Buffer.alloc(gs.span);return gs.encode({instruction:1,amount:Number(e)},o),new As({keys:n,programId:r,data:o})}function qr({programId:r},e){let t=[{pubkey:ws,isSigner:!1,isWritable:!1},{pubkey:ti,isSigner:!1,isWritable:!1},...Object.entries(e).map(([o,i])=>({pubkey:i,isSigner:o==="userOwner",isWritable:!["authority","userOwner"].includes(o)}))],n=Buffer.alloc(Mo.span);return Mo.encode({instruction:2},n),new As({keys:t,programId:r,data:n})}function Ps(r){let{poolConfig:e,userKeys:t,side:n}=r,o=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,i=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Mo.span);Mo.encode({instruction:2},s);let a=[{pubkey:ws,isWritable:!1,isSigner:!1},{pubkey:$d,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new As({programId:e.programId,keys:a,data:s})}import ic from"bn.js";var ep={[$n.IDO_PROGRAM_ID_V1.toString()]:1,[$n.IDO_PROGRAM_ID_V2.toString()]:2,[$n.IDO_PROGRAM_ID_V3.toString()]:3,[$n.IDO_PROGRAM_ID_V4.toString()]:4},Dn=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:o=!1,txVersion:i}){let s=this.createTxBuilder(),a=ep[t.programId];a||this.logAndCreateError("invalid version",a);let c=ke(t),[u,l]=[!new ic(e.coin).isZero(),!new ic(e.pc).isZero()],m=c.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:o});!d&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let y=c.buyInfo.mint.address.equals(H),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:o});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[qr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[qr({programId:new _o(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:f,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:i});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[qr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new _o(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:i});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new _o(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[Ps(F(C({},g),{side:"base"}))]:[],...l?[Ps(F(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:i})}};import{PublicKey as tp}from"@solana/web3.js";import{MintLayout as np,TOKEN_2022_PROGRAM_ID as hs,TOKEN_PROGRAM_ID as ks}from"@solana/spl-token";var vo=class extends Be{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:o="strict"}=t||{},{mintList:i,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Ct.address,Ct),this._mintGroup.official.add(Ct.address),s.forEach(u=>{this._blackTokenMap.set(u.address,F(C({},u),{priority:-1}))}),i.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?hs.toBase58():ks.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?hs.toBase58():ks.toBase58()})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,F(C({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?hs.toBase58():ks.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),o=this._tokenMap.get(n);if(o)return o;if(n.toLocaleUpperCase()==="SOL")return Ct;let i=(await this.scope.api.getTokenInfo([n]))[0];if(i)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(C({},i),{priority:2})),i;let s=await this.scope.connection.getAccountInfo(new tp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=np.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var Ur=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:o,api:i,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=o?new kt(o):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=i,this._apiCacheTime=c||5*60*1e3,this.logger=ue("Raydium"),this.farm=new yo({scope:this,moduleName:"Raydium_Farm"}),this.account=new oo({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Bo({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new vo({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Lo({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new xo({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ro({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new At({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new En({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Dn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=op({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:o,logCount:i,logRequests:s,urlConfigs:a}=t,c=new cr({cluster:n,timeout:o,urlConfigs:a,logCount:i,logRequests:s}),u=new Ur(F(C({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(lr);return this._owner.publicKey}setOwner(e){return this._owner=e?new kt(e):void 0,this}get connection(){if(!this._connection)throw new Error(ga);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw this.logger.error(lr),new Error(lr)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){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{}}}};var iK=r=>r;export{rd as AMM_CONFIG_SEED,bu as BIT_PRECISION,xo as Clmm,Iu as ClmmConfigLayout,xe as ClmmInstrument,Nr as ConstantProductCurve,zu as CpmmConfigInfoLayout,Lr as CpmmFee,vr as CpmmPoolInfoLayout,Mr as CurveCalculator,Um as DataElement,es as EXTENSION_TICKARRAY_BITMAP_SIZE,Da as FARM_LOCK_MINT,Wa as FARM_LOCK_VAULT,ft as FARM_PROGRAM_TO_VERSION,Ua as FARM_VERSION_TO_LEDGER_LAYOUT,qa as FARM_VERSION_TO_STATE_LAYOUT,Sr as FEE_RATE_DENOMINATOR,us as FEE_RATE_DENOMINATOR_VALUE,dd as FETCH_TICKARRAY_COUNT,md as Fee,Lu as LIQUIDITY_FEES_DENOMINATOR,Ru as LIQUIDITY_FEES_NUMERATOR,wd as LIQUIDITY_VERSION_TO_SERUM_VERSION,BP as LIQUIDITY_VERSION_TO_STATE_LAYOUT,gu as LOG_B_2_X32,Au as LOG_B_P_ERR_MARGIN_LOWER_X64,wu as LOG_B_P_ERR_MARGIN_UPPER_X64,ce as LiquidityMath,bs as MARKET_STATE_LAYOUT_V2,fs as MARKET_STATE_LAYOUT_V3,Hu as MARKET_VERSION_TO_STATE_LAYOUT,Mt as MAX_SQRT_PRICE_X64,xr as MAX_SQRT_PRICE_X64_SUB_ONE,tt as MAX_TICK,Nt as MIN_SQRT_PRICE_X64,Br as MIN_SQRT_PRICE_X64_ADD_ONE,Ye as MIN_TICK,Nn as MODEL_DATA_PUBKEY,Er as Market,ne as MathUtil,$i as MaxU64,yu as MaxUint128,qt as NEGATIVE_ONE,mt as ONE,cd as OPERATION_SEED,os as ObservationInfoLayout,yd as ObservationLayout,Bu as OperationLayout,ad as POOL_REWARD_VAULT_SEED,id as POOL_SEED,ld as POOL_TICK_ARRAY_BITMAP_SEED,sd as POOL_VAULT_SEED,du as POSITION_SEED,fn as PoolInfoLayout,Re as PoolUtils,Kr as PositionInfoLayout,gd as PositionRewardInfoLayout,To as PositionUtils,ck as ProtocolPositionLayout,Ir as Q128,dt as Q64,Ur as Raydium,bd as RewardInfo,Eu as RoundDirection,Yu as SERUM_PROGRAMID_TO_VERSION,ju as SERUM_VERSION_TO_PROGRAMID,Ct as SOL_INFO,$w as SPL_MINT_LAYOUT,ee as SqrtPriceMath,On as StableLayout,pn as SwapMath,dn as TICK_ARRAY_BITMAP_SIZE,ud as TICK_ARRAY_SEED,ve as TICK_ARRAY_SIZE,JP as TICK_SPACINGS,Me as TOKEN_WSOL,Ut as TickArrayBitmap,Tu as TickArrayBitmapExtensionLayout,ko as TickArrayBitmapExtensionUtils,ho as TickArrayLayout,Ad as TickLayout,yn as TickMath,le as TickQuery,Y as TickUtils,Po as U64Resolution,eh as U64_IGNORE_RANGE,Fa as Voter,Im as VoterDepositEntry,Tm as VoterLockup,Va as VoterRegistrar,km as VoterVotingMintConfig,de as ZERO,zi as addLiquidityLayout,xi as associatedLedgerAccountLayout,Ei as calFarmRewardAmount,xd as ceilDiv,Mo as claimLayout,ku as clmmComputeInfoToApiInfo,Ot as closeAccountInstruction,lo as createAssociatedLedgerAccountInstruction,Ja as createPoolFeeLayout,au as createPoolV4InstructionV2,IP as createPoolV4Layout,Dt as createWSolAccountInstructions,$e as dwLayout,Ri as farmAddRewardLayout,FA as farmLedgerLayoutV3_1,io as farmLedgerLayoutV3_2,EA as farmLedgerLayoutV5_1,_a as farmLedgerLayoutV5_2,va as farmLedgerLayoutV6_1,Xa as farmRewardInfoToConfig,Ki as farmRewardLayout,Ci as farmRewardRestartLayout,hm as farmRewardTimeInfoLayout,Na as farmStateV3Layout,Ma as farmStateV5Layout,ro as farmStateV6Layout,lw as fetchMultipleFarmInfoAndUpdate,Wk as fetchMultipleInfo,Ui as fixedSwapInLayout,Gi as fixedSwapOutLayout,Vu as floorDiv,$m as formatLayout,ze as generatePubKey,Ga as getAssociatedAuthority,Cr as getAssociatedConfigId,Qe as getAssociatedLedgerAccount,ao as getAssociatedLedgerPoolAccount,Id as getAssociatedOpenOrders,Nu as getAssociatedPoolKeys,Md as getCpmmPdaAmmConfigId,_d as getCpmmPdaPoolId,Wu as getCreatePoolKeys,Di as getDepositEntryIndex,nu as getDxByDyBaseIn,tu as getDyByDxBaseIn,Ln as getFarmLedgerLayout,Bm as getFarmStateLayout,as as getLiquidityAssociatedAuthority,bn as getLiquidityAssociatedId,Eh as getLiquidityFromAmounts,jP as getPdaAmmConfigId,lt as getPdaExBitmapAccount,vd as getPdaLpMint,Tr as getPdaMetadataKey,cs as getPdaObservationId,wo as getPdaOperationAccount,yt as getPdaPersonalPositionAddress,Fn as getPdaPoolAuthority,pu as getPdaPoolId,fu as getPdaPoolRewardVaulId,Ji as getPdaPoolVaultId,mn as getPdaProtocolPositionAddress,we as getPdaTickArrayAddress,Du as getPdaVault,Ni as getRegistrarAddress,ou as getStablePrice,Fi as getTokenOwnerRecordAddress,vi as getVoterAddress,Vi as getVoterWeightRecordAddress,_i as getVotingMintAuthority,Mi as getVotingTokenMint,Mm as governanceCreateTokenOwnerRecord,GP as i16ToBytes,kr as i32ToBytes,Xi as initPoolLayout,Ii as initTokenAccountInstruction,Jd as initializeMarket,Li as isValidFarmVersion,Ao as isZero,mw as judgeFarmType,Hi as leadingZeros,mu as leastSignificantBit,go as liquidityStateV4Layout,Wm as liquidityStateV5Layout,hr as makeAMMSwapInstruction,su as makeAddLiquidityInstruction,qi as makeAddNewRewardInstruction,qr as makeClaimInstruction,Ps as makeClaimInstructionV4,Uu as makeCreateCpmmPoolInInstruction,za as makeCreateFarmInstruction,oc as makeCreateMarketInstruction,Qa as makeCreatorWithdrawFarmRewardInstruction,Gu as makeDepositCpmmInInstruction,Ya as makeDepositInstructionV3,ja as makeDepositInstructionV5,Ha as makeDepositInstructionV6,Kw as makeDepositTokenInstruction,Rw as makeDepositWithdrawInstruction,qP as makeInitPoolInstructionV4,nS as makePurchaseInstruction,Wi as makeRestartRewardInstruction,uu as makeSimulatePoolInfoInstruction,_r as makeSwapCpmmBaseInInInstruction,hI as makeSwapCpmmBaseOutInInstruction,nd as makeSwapFixedInInstruction,od as makeSwapFixedOutInstruction,Qu as makeSwapInstruction,no as makeTransferInstruction,Xu as makeWithdrawCpmmInInstruction,fo as makeWithdrawInstructionV3,po as makeWithdrawInstructionV5,mo as makeWithdrawInstructionV6,Cw as makeWithdrawTokenInstruction,$P as mockCreatePoolInfo,Pu as mockV3CreatePoolInfo,Gm as modelDataInfoLayout,lu as mostSignificantBit,Oa as parseTokenAccountResp,cP as parseTokenInfo,tn as poolTypeV6,gs as purchaseLayout,Am as realFarmStateV3Layout,wm as realFarmStateV5Layout,Pm as realFarmV6Layout,ji as removeLiquidityInstruction,Qi as removeLiquidityLayout,AB as route1Instruction,wB as route2Instruction,Gd as routeInstruction,WP as simulatePoolInfoInstruction,mP as solToWSolToken,Zt as splAccountLayout,Rr as toAmmComputePoolInfo,et as toApiV3Token,nn as toFeeConfig,Pr as toToken,bo as toTokenAmount,lP as toTokenInfo,Zi as trailingZeros,cu as u16ToBytes,XP as u32ToBytes,iK as unionArr,xm as updateFarmPoolInfo,Oi as validateFarmRewards,vm as voterStakeRegistryCreateDepositEntry,_m as voterStakeRegistryCreateVoter,Lm as voterStakeRegistryDeposit,Om as voterStakeRegistryUpdateVoterWeightRecord,Nm as voterStakeRegistryWithdraw,dP as wSolToSolToken,Si as withdrawRewardLayout};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=index.mjs.map